summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorRoger Leigh <rleigh@debian.org>2008-10-26 16:11:41 +0000
committerRoger Leigh <rleigh@debian.org>2008-10-26 16:11:41 +0000
commitdfae5860833782af557deb35e286d7e186fe3cf5 (patch)
treee3b4282ae08e120f78cd0c097f7cb3b570e94da2 /src/main
parent3b59bb0a607ec27ea60f07d1cd5d1bbb4483c832 (diff)
Imported Upstream version 4.3.99+cvs20050702
Diffstat (limited to 'src/main')
-rw-r--r--src/main/Makefile.am180
-rw-r--r--src/main/Makefile.in1165
-rw-r--r--src/main/array.c281
-rw-r--r--src/main/bit-ops.c1199
-rw-r--r--src/main/channel.c1017
-rw-r--r--src/main/color-conversion.h189
-rw-r--r--src/main/color-conversions.c2207
-rw-r--r--src/main/color.c286
-rw-r--r--src/main/curve-cache.c141
-rw-r--r--src/main/curve.c1901
-rw-r--r--src/main/dither-ed.c466
-rw-r--r--src/main/dither-eventone.c710
-rw-r--r--src/main/dither-impl.h263
-rw-r--r--src/main/dither-inks.c423
-rw-r--r--src/main/dither-inlined-functions.h85
-rw-r--r--src/main/dither-main.c513
-rw-r--r--src/main/dither-matrix-1x1.xml5553
-rw-r--r--src/main/dither-matrix-2x1.xml5505
-rw-r--r--src/main/dither-matrix-4x1.xml5569
-rw-r--r--src/main/dither-ordered.c166
-rw-r--r--src/main/dither-predithered.c134
-rw-r--r--src/main/dither-very-fast.c135
-rw-r--r--src/main/escp2-channels.c2212
-rw-r--r--src/main/escp2-driver.c652
-rw-r--r--src/main/escp2-inks.c338
-rw-r--r--src/main/escp2-papers.c1181
-rw-r--r--src/main/escp2-resolutions.c469
-rw-r--r--src/main/generic-options.c257
-rw-r--r--src/main/generic-options.h67
-rw-r--r--src/main/gimp-print-internal.h495
-rw-r--r--src/main/gimpprint-config.in93
-rw-r--r--src/main/gimpprint.m4190
-rw-r--r--src/main/gutenprint-internal.h56
-rw-r--r--src/main/gutenprint.pc.in10
-rw-r--r--src/main/image.c77
-rw-r--r--src/main/libgutenprint.sym440
-rw-r--r--src/main/module.c415
-rw-r--r--src/main/mxml-attr.c160
-rw-r--r--src/main/mxml-file.c1436
-rw-r--r--src/main/mxml-node.c494
-rw-r--r--src/main/mxml-search.c199
-rw-r--r--src/main/papers.xml1023
-rw-r--r--src/main/path.c320
-rw-r--r--src/main/print-canon.c2099
-rw-r--r--src/main/print-color.c3344
-rw-r--r--src/main/print-dither-matrices.c501
-rw-r--r--src/main/print-dither.c3779
-rw-r--r--src/main/print-dither.h82
-rw-r--r--src/main/print-escp2-data.c6015
-rw-r--r--src/main/print-escp2.c4129
-rw-r--r--src/main/print-escp2.h815
-rw-r--r--src/main/print-lexmark.c1679
-rw-r--r--src/main/print-list.c711
-rw-r--r--src/main/print-olympus.c2099
-rw-r--r--src/main/print-papers.c422
-rw-r--r--src/main/print-pcl.c3143
-rw-r--r--src/main/print-ps.c608
-rw-r--r--src/main/print-raw.c376
-rw-r--r--src/main/print-util.c1918
-rw-r--r--src/main/print-vars.c1481
-rw-r--r--src/main/print-version.c60
-rw-r--r--src/main/print-weave.c1603
-rw-r--r--src/main/printers.c1073
-rw-r--r--src/main/printers.xml3221
-rw-r--r--src/main/quickmatrix257.h6027
-rw-r--r--src/main/ran.367.179.h5995
-rw-r--r--src/main/ran.509.131.h6084
-rw-r--r--src/main/sequence.c533
-rw-r--r--src/main/string-list.c157
-rw-r--r--src/main/util.h77
-rw-r--r--src/main/xml.c429
71 files changed, 56913 insertions, 40219 deletions
diff --git a/src/main/Makefile.am b/src/main/Makefile.am
index dfdc551..3377183 100644
--- a/src/main/Makefile.am
+++ b/src/main/Makefile.am
@@ -1,4 +1,4 @@
-## $Id: Makefile.am,v 1.27.4.2 2003/07/12 20:47:44 rleigh Exp $
+## $Id: Makefile.am,v 1.91 2005/06/26 10:56:51 rleigh Exp $
## Copyright (C) 2000 Roger Leigh
##
## This program is free software; you can redistribute it and/or modify
@@ -23,71 +23,175 @@ AUTOMAKE_OPTIONS = 1.4 gnu
MAINT_CHARSET = latin1
+include $(top_srcdir)/scripts/global.mk
+
## Variables
-AM_CFLAGS = $(GNUCFLAGS)
-INCLUDES = @INCLUDES@
+pkgconfigdatadir = $(libdir)/pkgconfig
+pkgxmldatadir = $(pkgdatadir)/$(VERSION)/xml
+pkgmoduledir = $(pkglibdir)/$(VERSION)/modules
## Programs
-bin_SCRIPTS = gimpprint-config
+if BUILD_MODULES
+pkgmodule_LTLIBRARIES = \
+ color-traditional.la \
+ print-canon.la \
+ print-escp2.la \
+ print-lexmark.la \
+ print-pcl.la \
+ print-ps.la \
+ print-olympus.la \
+ print-raw.la
+endif
+
+color_traditional_la_SOURCES = \
+ print-color.c \
+ color-conversion.h \
+ color-conversions.c
+
+color_traditional_la_LDFLAGS = -module -avoid-version
-lib_LTLIBRARIES = libgimpprint.la
+print_canon_la_SOURCES = print-canon.c
+print_canon_la_LDFLAGS = -module -avoid-version
-libgimpprint_la_SOURCES = \
- gimp-print-internal.h \
- print-lexmark.c \
- print-canon.c \
- print-dither.c \
+print_escp2_la_SOURCES = \
print-escp2.c \
+ escp2-driver.c \
print-escp2.h \
print-escp2-data.c \
- print-pcl.c \
- print-ps.c \
- print-util.c \
- print-color.c \
- print-weave.c \
- print-version.c \
- print-dither-matrices.c \
- print-dither.h \
- quickmatrix257.h \
- ran.367.179.h \
- ran.509.131.h
-libgimpprint_la_LIBADD = $(GIMPPRINT_DEPLIBS)
+ escp2-channels.c \
+ escp2-inks.c \
+ escp2-papers.c \
+ escp2-resolutions.c
+print_escp2_la_LDFLAGS = -module -avoid-version
+
+print_lexmark_la_SOURCES = print-lexmark.c
+print_lexmark_la_LDFLAGS = -module -avoid-version
+
+print_pcl_la_SOURCES = print-pcl.c
+print_pcl_la_LDFLAGS = -module -avoid-version
+
+print_ps_la_SOURCES = print-ps.c
+print_ps_la_LDFLAGS = -module -avoid-version
+
+print_olympus_la_SOURCES = print-olympus.c
+print_olympus_la_LDFLAGS = -module -avoid-version
+
+print_raw_la_SOURCES = print-raw.c
+print_raw_la_LDFLAGS = -module -avoid-version
+
+lib_LTLIBRARIES = libgutenprint.la
+
+module_SOURCES = \
+ $(color_traditional_la_SOURCES) \
+ $(print_canon_la_SOURCES) \
+ $(print_escp2_la_SOURCES) \
+ $(print_lexmark_la_SOURCES) \
+ $(print_pcl_la_SOURCES) \
+ $(print_ps_la_SOURCES) \
+ $(print_olympus_la_SOURCES) \
+ $(print_raw_la_SOURCES)
+
+if !BUILD_MODULES
+libgutenprint_modules = $(module_SOURCES)
+endif
+
+mxml_SOURCES = \
+ mxml-attr.c \
+ mxml-file.c \
+ mxml-node.c \
+ mxml-search.c
+
+libgutenprint_headers = \
+ dither-impl.h \
+ dither-inlined-functions.h \
+ generic-options.h \
+ gutenprint-internal.h \
+ util.h
+
+libgutenprint_la_SOURCES = \
+ array.c \
+ bit-ops.c \
+ channel.c \
+ color.c \
+ curve.c \
+ curve-cache.c \
+ dither-ed.c \
+ dither-eventone.c \
+ dither-inks.c \
+ dither-main.c \
+ dither-ordered.c \
+ dither-very-fast.c \
+ dither-predithered.c \
+ generic-options.c \
+ image.c \
+ module.c \
+ path.c \
+ print-dither-matrices.c \
+ print-list.c \
+ print-papers.c \
+ print-util.c \
+ print-vars.c \
+ print-version.c \
+ print-weave.c \
+ printers.c \
+ sequence.c \
+ string-list.c \
+ xml.c \
+ $(mxml_SOURCES) \
+ $(libgutenprint_headers) \
+ $(libgutenprint_modules)
+
+libgutenprint_la_LIBADD = $(GUTENPRINT_LIBDEPS)
# Uncommment to build an unversioned library (version in soname)
-#libgimpprint_la_LDFLAGS = -release $(GIMPPRINT_VERSION) -rpath $(libdir)
+#libgutenprint_version = -release $(GUTENPRINT_VERSION)
# Uncomment to build a versioned library
-libgimpprint_la_LDFLAGS = \
- -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
- -rpath $(libdir)
+libgutenprint_version = -version-info $(GUTENPRINT_CURRENT_INTERFACE):$(GUTENPRINT_INTERFACE_AGE):$(GUTENPRINT_BINARY_AGE)
+libgutenprint_la_LDFLAGS = $(libgutenprint_version) \
+ -rpath $(libdir) -no-undefined
+# libtool currently needs a patch for symbol export to work correctly
+# using a linker version script.
+# -export-symbols $(srcdir)/libgutenprint.sym
## Data
-m4datadir = $(datadir)/aclocal
-m4data_DATA = gimpprint.m4
+pkgconfigdata_DATA = gutenprint.pc
+
+pkgxmldata_DATA = \
+ dither-matrix-1x1.xml \
+ dither-matrix-2x1.xml \
+ dither-matrix-4x1.xml \
+ papers.xml \
+ printers.xml
+
## Rules
-print-util.lo: print-printers.c $(srcdir)/print-util.c
+all-local: xmli18n-tmp.h
-print-printers.c: ../printdef/printdef $(srcdir)/printers.xml
- ../printdef/printdef < $(srcdir)/printers.xml > print-printers.c
-printdefl.o: printdefy.o
+xmli18n-tmp.h: $(srcdir)/papers.xml $(srcdir)/printers.xml
+# Pull out translatable strings from XML files. This is crude, but
+# works for now.
+ sed -e '/description.*value/!d' \
+ -e 's/.*description.*value="\([^"]*\)".*/N_("\1");/' \
+ < $(srcdir)/papers.xml > $@;
+ sed -e '/printer.*name/!d' \
+ -e 's/.*printer.*name="\([^"]*\)".*/N_("\1");/' \
+ < $(srcdir)/printers.xml >> $@;
-../printdef/printdef: $(addprefix ../printdef/, printdefl.l printdefy.y printdef.h)
- cd ../printdef ; \
- $(MAKE)
+dist-hook: xmli18n-tmp.h
+# xmli18n-tmp.h is needed by po/POTFILES.in at dist time
## Clean
-CLEANFILES = print-printers.c
-DISTCLEANFILES = gimpprint-config
+CLEANFILES = xmli18n-tmp.h
MAINTAINERCLEANFILES = Makefile.in
-EXTRA_DIST = gimpprint.m4 gimpprint-config.in printers.xml
+EXTRA_DIST = $(pkgxmldata_DATA) libgutenprint.sym
diff --git a/src/main/Makefile.in b/src/main/Makefile.in
index 2660136..4eeda81 100644
--- a/src/main/Makefile.in
+++ b/src/main/Makefile.in
@@ -1,6 +1,8 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# @configure_input@
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -10,316 +12,723 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
+@SET_MAKE@
+
+# Variables
-SHELL = @SHELL@
+
+SOURCES = $(color_traditional_la_SOURCES) $(libgutenprint_la_SOURCES) $(print_canon_la_SOURCES) $(print_escp2_la_SOURCES) $(print_lexmark_la_SOURCES) $(print_olympus_la_SOURCES) $(print_pcl_la_SOURCES) $(print_ps_la_SOURCES) $(print_raw_la_SOURCES)
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DESTDIR =
-
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
-
top_builddir = ../..
-
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
-host_alias = @host_alias@
+build_triplet = @build@
host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/gutenprint.pc.in $(top_srcdir)/scripts/global.mk
+subdir = src/main
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/gimp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/stp.m4 $(top_srcdir)/m4/stp_cups.m4 \
+ $(top_srcdir)/m4/stp_gimp.m4 $(top_srcdir)/m4/stp_option.m4 \
+ $(top_srcdir)/m4/stp_release.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = gutenprint.pc
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgmoduledir)" \
+ "$(DESTDIR)$(pkgconfigdatadir)" "$(DESTDIR)$(pkgxmldatadir)"
+libLTLIBRARIES_INSTALL = $(INSTALL)
+pkgmoduleLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(lib_LTLIBRARIES) $(pkgmodule_LTLIBRARIES)
+color_traditional_la_LIBADD =
+am_color_traditional_la_OBJECTS = print-color.lo color-conversions.lo
+color_traditional_la_OBJECTS = $(am_color_traditional_la_OBJECTS)
+@BUILD_MODULES_TRUE@am_color_traditional_la_rpath = -rpath \
+@BUILD_MODULES_TRUE@ $(pkgmoduledir)
+am__DEPENDENCIES_1 =
+libgutenprint_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am__libgutenprint_la_SOURCES_DIST = array.c bit-ops.c channel.c \
+ color.c curve.c curve-cache.c dither-ed.c dither-eventone.c \
+ dither-inks.c dither-main.c dither-ordered.c \
+ dither-very-fast.c dither-predithered.c generic-options.c \
+ image.c module.c path.c print-dither-matrices.c print-list.c \
+ print-papers.c print-util.c print-vars.c print-version.c \
+ print-weave.c printers.c sequence.c string-list.c xml.c \
+ mxml-attr.c mxml-file.c mxml-node.c mxml-search.c \
+ dither-impl.h dither-inlined-functions.h generic-options.h \
+ gutenprint-internal.h util.h print-color.c color-conversion.h \
+ color-conversions.c print-canon.c print-escp2.c escp2-driver.c \
+ print-escp2.h print-escp2-data.c escp2-channels.c escp2-inks.c \
+ escp2-papers.c escp2-resolutions.c print-lexmark.c print-pcl.c \
+ print-ps.c print-olympus.c print-raw.c
+am__objects_1 = mxml-attr.lo mxml-file.lo mxml-node.lo mxml-search.lo
+am__objects_2 =
+am__objects_3 = print-color.lo color-conversions.lo
+am__objects_4 = print-canon.lo
+am__objects_5 = print-escp2.lo escp2-driver.lo print-escp2-data.lo \
+ escp2-channels.lo escp2-inks.lo escp2-papers.lo \
+ escp2-resolutions.lo
+am__objects_6 = print-lexmark.lo
+am__objects_7 = print-pcl.lo
+am__objects_8 = print-ps.lo
+am__objects_9 = print-olympus.lo
+am__objects_10 = print-raw.lo
+am__objects_11 = $(am__objects_3) $(am__objects_4) $(am__objects_5) \
+ $(am__objects_6) $(am__objects_7) $(am__objects_8) \
+ $(am__objects_9) $(am__objects_10)
+@BUILD_MODULES_FALSE@am__objects_12 = $(am__objects_11)
+am_libgutenprint_la_OBJECTS = array.lo bit-ops.lo channel.lo color.lo \
+ curve.lo curve-cache.lo dither-ed.lo dither-eventone.lo \
+ dither-inks.lo dither-main.lo dither-ordered.lo \
+ dither-very-fast.lo dither-predithered.lo generic-options.lo \
+ image.lo module.lo path.lo print-dither-matrices.lo \
+ print-list.lo print-papers.lo print-util.lo print-vars.lo \
+ print-version.lo print-weave.lo printers.lo sequence.lo \
+ string-list.lo xml.lo $(am__objects_1) $(am__objects_2) \
+ $(am__objects_12)
+libgutenprint_la_OBJECTS = $(am_libgutenprint_la_OBJECTS)
+print_canon_la_LIBADD =
+am_print_canon_la_OBJECTS = print-canon.lo
+print_canon_la_OBJECTS = $(am_print_canon_la_OBJECTS)
+@BUILD_MODULES_TRUE@am_print_canon_la_rpath = -rpath $(pkgmoduledir)
+print_escp2_la_LIBADD =
+am_print_escp2_la_OBJECTS = print-escp2.lo escp2-driver.lo \
+ print-escp2-data.lo escp2-channels.lo escp2-inks.lo \
+ escp2-papers.lo escp2-resolutions.lo
+print_escp2_la_OBJECTS = $(am_print_escp2_la_OBJECTS)
+@BUILD_MODULES_TRUE@am_print_escp2_la_rpath = -rpath $(pkgmoduledir)
+print_lexmark_la_LIBADD =
+am_print_lexmark_la_OBJECTS = print-lexmark.lo
+print_lexmark_la_OBJECTS = $(am_print_lexmark_la_OBJECTS)
+@BUILD_MODULES_TRUE@am_print_lexmark_la_rpath = -rpath $(pkgmoduledir)
+print_olympus_la_LIBADD =
+am_print_olympus_la_OBJECTS = print-olympus.lo
+print_olympus_la_OBJECTS = $(am_print_olympus_la_OBJECTS)
+@BUILD_MODULES_TRUE@am_print_olympus_la_rpath = -rpath $(pkgmoduledir)
+print_pcl_la_LIBADD =
+am_print_pcl_la_OBJECTS = print-pcl.lo
+print_pcl_la_OBJECTS = $(am_print_pcl_la_OBJECTS)
+@BUILD_MODULES_TRUE@am_print_pcl_la_rpath = -rpath $(pkgmoduledir)
+print_ps_la_LIBADD =
+am_print_ps_la_OBJECTS = print-ps.lo
+print_ps_la_OBJECTS = $(am_print_ps_la_OBJECTS)
+@BUILD_MODULES_TRUE@am_print_ps_la_rpath = -rpath $(pkgmoduledir)
+print_raw_la_LIBADD =
+am_print_raw_la_OBJECTS = print-raw.lo
+print_raw_la_OBJECTS = $(am_print_raw_la_OBJECTS)
+@BUILD_MODULES_TRUE@am_print_raw_la_rpath = -rpath $(pkgmoduledir)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/scripts/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(color_traditional_la_SOURCES) $(libgutenprint_la_SOURCES) \
+ $(print_canon_la_SOURCES) $(print_escp2_la_SOURCES) \
+ $(print_lexmark_la_SOURCES) $(print_olympus_la_SOURCES) \
+ $(print_pcl_la_SOURCES) $(print_ps_la_SOURCES) \
+ $(print_raw_la_SOURCES)
+DIST_SOURCES = $(color_traditional_la_SOURCES) \
+ $(am__libgutenprint_la_SOURCES_DIST) $(print_canon_la_SOURCES) \
+ $(print_escp2_la_SOURCES) $(print_lexmark_la_SOURCES) \
+ $(print_olympus_la_SOURCES) $(print_pcl_la_SOURCES) \
+ $(print_ps_la_SOURCES) $(print_raw_la_SOURCES)
+pkgconfigdataDATA_INSTALL = $(INSTALL_DATA)
+pkgxmldataDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(pkgconfigdata_DATA) $(pkgxmldata_DATA)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
-AS = @AS@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
-BISON_PROG = @BISON_PROG@
-BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
+BUILD_CUPS_FALSE = @BUILD_CUPS_FALSE@
+BUILD_CUPS_PPDS_FALSE = @BUILD_CUPS_PPDS_FALSE@
+BUILD_CUPS_PPDS_TRUE = @BUILD_CUPS_PPDS_TRUE@
+BUILD_CUPS_TRUE = @BUILD_CUPS_TRUE@
+BUILD_ESCPUTIL_FALSE = @BUILD_ESCPUTIL_FALSE@
+BUILD_ESCPUTIL_TRUE = @BUILD_ESCPUTIL_TRUE@
+BUILD_FOOMATIC_3_FALSE = @BUILD_FOOMATIC_3_FALSE@
+BUILD_FOOMATIC_3_TRUE = @BUILD_FOOMATIC_3_TRUE@
+BUILD_FOOMATIC_FALSE = @BUILD_FOOMATIC_FALSE@
+BUILD_FOOMATIC_TRUE = @BUILD_FOOMATIC_TRUE@
+BUILD_GENPPD_STATIC_FALSE = @BUILD_GENPPD_STATIC_FALSE@
+BUILD_GENPPD_STATIC_TRUE = @BUILD_GENPPD_STATIC_TRUE@
+BUILD_GHOSTSCRIPT_FALSE = @BUILD_GHOSTSCRIPT_FALSE@
+BUILD_GHOSTSCRIPT_TRUE = @BUILD_GHOSTSCRIPT_TRUE@
+BUILD_GIMP2_FALSE = @BUILD_GIMP2_FALSE@
+BUILD_GIMP2_TRUE = @BUILD_GIMP2_TRUE@
+BUILD_GIMP_FALSE = @BUILD_GIMP_FALSE@
+BUILD_GIMP_TRUE = @BUILD_GIMP_TRUE@
+BUILD_LIBGUTENPRINTUI2_FALSE = @BUILD_LIBGUTENPRINTUI2_FALSE@
+BUILD_LIBGUTENPRINTUI2_TRUE = @BUILD_LIBGUTENPRINTUI2_TRUE@
+BUILD_LIBGUTENPRINTUI_FALSE = @BUILD_LIBGUTENPRINTUI_FALSE@
+BUILD_LIBGUTENPRINTUI_TRUE = @BUILD_LIBGUTENPRINTUI_TRUE@
+BUILD_MODULES_FALSE = @BUILD_MODULES_FALSE@
+BUILD_MODULES_TRUE = @BUILD_MODULES_TRUE@
+BUILD_TESTPATTERN_FALSE = @BUILD_TESTPATTERN_FALSE@
+BUILD_TESTPATTERN_TRUE = @BUILD_TESTPATTERN_TRUE@
+BUILD_TEST_FALSE = @BUILD_TEST_FALSE@
+BUILD_TEST_TRUE = @BUILD_TEST_TRUE@
+BUILD_TRANSLATED_CUPS_PPDS_FALSE = @BUILD_TRANSLATED_CUPS_PPDS_FALSE@
+BUILD_TRANSLATED_CUPS_PPDS_TRUE = @BUILD_TRANSLATED_CUPS_PPDS_TRUE@
CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
CONVERT = @CONVERT@
-CUPS_BACKEND_BIN = @CUPS_BACKEND_BIN@
-CUPS_BIN = @CUPS_BIN@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
CUPS_CFLAGS = @CUPS_CFLAGS@
-CUPS_CONF = @CUPS_CONF@
CUPS_CONFIG = @CUPS_CONFIG@
-CUPS_FILTER_BIN = @CUPS_FILTER_BIN@
-CUPS_INSTALL = @CUPS_INSTALL@
CUPS_LIBS = @CUPS_LIBS@
-CUPS_MAN = @CUPS_MAN@
-CUPS_NOINST_BIN = @CUPS_NOINST_BIN@
-CUPS_PKG = @CUPS_PKG@
+CUPS_PPDS_AT_TOP_LEVEL_FALSE = @CUPS_PPDS_AT_TOP_LEVEL_FALSE@
+CUPS_PPDS_AT_TOP_LEVEL_TRUE = @CUPS_PPDS_AT_TOP_LEVEL_TRUE@
CUPS_PPD_PS_LEVEL = @CUPS_PPD_PS_LEVEL@
-DATADIRNAME = @DATADIRNAME@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
DB2HTML = @DB2HTML@
DB2PDF = @DB2PDF@
DB2PS = @DB2PS@
-DLLTOOL = @DLLTOOL@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DIALOG = @DIALOG@
+DOXYGEN = @DOXYGEN@
DVIPDF = @DVIPDF@
DVIPS = @DVIPS@
ECHO = @ECHO@
-ESCPUTIL_BIN = @ESCPUTIL_BIN@
-ESCPUTIL_MAN = @ESCPUTIL_MAN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
EXEEXT = @EXEEXT@
-FOOMATIC_3_NOINST_BIN = @FOOMATIC_3_NOINST_BIN@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+FIND = @FIND@
FOOMATIC_CONFIGURE = @FOOMATIC_CONFIGURE@
-FOOMATIC_INSTALL = @FOOMATIC_INSTALL@
FOOMATIC_KITLOAD = @FOOMATIC_KITLOAD@
-FOOMATIC_NOINST_BIN = @FOOMATIC_NOINST_BIN@
-FOOMATIC_OLDIDS_NOINST_BIN = @FOOMATIC_OLDIDS_NOINST_BIN@
FOOMATIC_PPDFILE = @FOOMATIC_PPDFILE@
-GENCAT = @GENCAT@
-GIMPPRINT_BINARY_AGE = @GIMPPRINT_BINARY_AGE@
-GIMPPRINT_CFLAGS = @GIMPPRINT_CFLAGS@
-GIMPPRINT_CURRENT_INTERFACE = @GIMPPRINT_CURRENT_INTERFACE@
-GIMPPRINT_DEPLIBS = @GIMPPRINT_DEPLIBS@
-GIMPPRINT_INTERFACE_AGE = @GIMPPRINT_INTERFACE_AGE@
-GIMPPRINT_LIBS = @GIMPPRINT_LIBS@
-GIMPPRINT_MAJOR_VERSION = @GIMPPRINT_MAJOR_VERSION@
-GIMPPRINT_MICRO_VERSION = @GIMPPRINT_MICRO_VERSION@
-GIMPPRINT_MINOR_VERSION = @GIMPPRINT_MINOR_VERSION@
-GIMPPRINT_VERSION = @GIMPPRINT_VERSION@
+GENPPD_LIBS = @GENPPD_LIBS@
+GIMP2_CFLAGS = @GIMP2_CFLAGS@
+GIMP2_LIBS = @GIMP2_LIBS@
GIMPTOOL = @GIMPTOOL@
+GIMPTOOL2_CHECK = @GIMPTOOL2_CHECK@
GIMPTOOL_CHECK = @GIMPTOOL_CHECK@
-GIMP_BIN = @GIMP_BIN@
GIMP_CFLAGS = @GIMP_CFLAGS@
GIMP_CFLAGS_NOUI = @GIMP_CFLAGS_NOUI@
GIMP_DATA_DIR = @GIMP_DATA_DIR@
GIMP_LIBS = @GIMP_LIBS@
GIMP_LIBS_NOUI = @GIMP_LIBS_NOUI@
GIMP_PLUGIN_DIR = @GIMP_PLUGIN_DIR@
-GLIBC21 = @GLIBC21@
-GMOFILES = @GMOFILES@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_CONFIG = @GLIB_CONFIG@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMSGFMT = @GMSGFMT@
GNUCFLAGS = @GNUCFLAGS@
-IJS_BIN = @IJS_BIN@
+GTK2_CFLAGS = @GTK2_CFLAGS@
+GTK2_LIBS = @GTK2_LIBS@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_CONFIG = @GTK_CONFIG@
+GTK_LIBS = @GTK_LIBS@
+GUTENPRINTUI2_BINARY_AGE = @GUTENPRINTUI2_BINARY_AGE@
+GUTENPRINTUI2_CFLAGS = @GUTENPRINTUI2_CFLAGS@
+GUTENPRINTUI2_CURRENT_INTERFACE = @GUTENPRINTUI2_CURRENT_INTERFACE@
+GUTENPRINTUI2_INTERFACE_AGE = @GUTENPRINTUI2_INTERFACE_AGE@
+GUTENPRINTUI2_LIBDEPS = @GUTENPRINTUI2_LIBDEPS@
+GUTENPRINTUI2_LIBS = $(top_builddir)/src/gutenprintui2/libgutenprintui2.la
+GUTENPRINTUI2_VERSION = @GUTENPRINTUI2_VERSION@
+GUTENPRINTUI_BINARY_AGE = @GUTENPRINTUI_BINARY_AGE@
+GUTENPRINTUI_CFLAGS = @GUTENPRINTUI_CFLAGS@
+GUTENPRINTUI_CURRENT_INTERFACE = @GUTENPRINTUI_CURRENT_INTERFACE@
+GUTENPRINTUI_INTERFACE_AGE = @GUTENPRINTUI_INTERFACE_AGE@
+GUTENPRINTUI_LIBDEPS = @GUTENPRINTUI_LIBDEPS@
+GUTENPRINTUI_LIBS = $(top_builddir)/src/gutenprintui/libgutenprintui.la
+GUTENPRINTUI_VERSION = @GUTENPRINTUI_VERSION@
+GUTENPRINT_BINARY_AGE = @GUTENPRINT_BINARY_AGE@
+GUTENPRINT_CFLAGS = @GUTENPRINT_CFLAGS@
+GUTENPRINT_CURRENT_INTERFACE = @GUTENPRINT_CURRENT_INTERFACE@
+GUTENPRINT_INTERFACE_AGE = @GUTENPRINT_INTERFACE_AGE@
+GUTENPRINT_LIBDEPS = @GUTENPRINT_LIBDEPS@
+
+# Libraries
+GUTENPRINT_LIBS = $(top_builddir)/src/main/libgutenprint.la
+GUTENPRINT_MAJOR_VERSION = @GUTENPRINT_MAJOR_VERSION@
+GUTENPRINT_MICRO_VERSION = @GUTENPRINT_MICRO_VERSION@
+GUTENPRINT_MINOR_VERSION = @GUTENPRINT_MINOR_VERSION@
+GUTENPRINT_VERSION = @GUTENPRINT_VERSION@
IJS_CFLAGS = @IJS_CFLAGS@
IJS_CONFIG = @IJS_CONFIG@
-IJS_INSTALL = @IJS_INSTALL@
IJS_LIBS = @IJS_LIBS@
-INSTOBJEXT = @INSTOBJEXT@
-INTLBISON = @INTLBISON@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SAMPLES_FALSE = @INSTALL_SAMPLES_FALSE@
+INSTALL_SAMPLES_TRUE = @INSTALL_SAMPLES_TRUE@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTALL_USER_GUIDE_FALSE = @INSTALL_USER_GUIDE_FALSE@
+INSTALL_USER_GUIDE_TRUE = @INSTALL_USER_GUIDE_TRUE@
INTLLIBS = @INTLLIBS@
-INTLOBJS = @INTLOBJS@
-INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LDFLAGS = @LDFLAGS@
LEX = @LEX@
-LIBGIMPPRINT_LIBS = @LIBGIMPPRINT_LIBS@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBICONV = @LIBICONV@
-LIBM = @LIBM@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
LIBREADLINE_DEPS = @LIBREADLINE_DEPS@
+LIBS = $(INTLLIBS) @LIBS@
LIBTOOL = @LIBTOOL@
LIBTOOL_DEPS = @LIBTOOL_DEPS@
LN_S = @LN_S@
LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
-LT_AGE = @LT_AGE@
-LT_CURRENT = @LT_CURRENT@
-LT_RELEASE = @LT_RELEASE@
-LT_REVISION = @LT_REVISION@
MAINT = @MAINT@
MAINTAINER_CFLAGS = @MAINTAINER_CFLAGS@
-MAIN_BIN = @MAIN_BIN@
-MAIN_DAT = @MAIN_DAT@
-MAIN_MAN = @MAIN_MAN@
-MAIN_SCR = @MAIN_SCR@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
-OBJDUMP = @OBJDUMP@
+MSGMERGE = @MSGMERGE@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
PLUG_IN_PATH = @PLUG_IN_PATH@
-POFILES = @POFILES@
POSUB = @POSUB@
-PRINT_VASPRINTF = @PRINT_VASPRINTF@
RANLIB = @RANLIB@
RELEASE_DATE = @RELEASE_DATE@
RM = @RM@
-SAMPLE_IMAGES = @SAMPLE_IMAGES@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
STRIP = @STRIP@
-TESTPATTERN_BIN = @TESTPATTERN_BIN@
-TEST_BIN = @TEST_BIN@
TEXI2HTML = @TEXI2HTML@
-USER_GUIDE = @USER_GUIDE@
-USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_LEVEL3_PS_FALSE = @USE_LEVEL3_PS_FALSE@
+USE_LEVEL3_PS_TRUE = @USE_LEVEL3_PS_TRUE@
USE_NLS = @USE_NLS@
+USE_NLS_FALSE = @USE_NLS_FALSE@
+USE_NLS_TRUE = @USE_NLS_TRUE@
VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
YACC = @YACC@
-YACC_PROG = @YACC_PROG@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
cups_bindir = @cups_bindir@
cups_conf_datadir = @cups_conf_datadir@
cups_conf_serverbin = @cups_conf_serverbin@
cups_conf_serverroot = @cups_conf_serverroot@
cups_exec_prefix = @cups_exec_prefix@
cups_prefix = @cups_prefix@
+cups_sbindir = @cups_sbindir@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+gimp2_plug_indir = @gimp2_plug_indir@
gimp_plug_indir = @gimp_plug_indir@
-gimpprint_cflags = @gimpprint_cflags@
-gimpprint_libs = @gimpprint_libs@
-
+gutenprint_cflags = @gutenprint_cflags@
+gutenprint_libs = @gutenprint_libs@
+gutenprintui2_cflags = @gutenprintui2_cflags@
+gutenprintui2_libs = @gutenprintui2_libs@
+gutenprintui_cflags = @gutenprintui_cflags@
+gutenprintui_libs = @gutenprintui_libs@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
AUTOMAKE_OPTIONS = 1.4 gnu
-
MAINT_CHARSET = latin1
-
-AM_CFLAGS = $(GNUCFLAGS)
-INCLUDES = @INCLUDES@
-
-bin_SCRIPTS = gimpprint-config
-
-lib_LTLIBRARIES = libgimpprint.la
-
-libgimpprint_la_SOURCES = gimp-print-internal.h print-lexmark.c print-canon.c print-dither.c print-escp2.c print-escp2.h print-escp2-data.c print-pcl.c print-ps.c print-util.c print-color.c print-weave.c print-version.c print-dither-matrices.c print-dither.h quickmatrix257.h ran.367.179.h ran.509.131.h
-
-libgimpprint_la_LIBADD = $(GIMPPRINT_DEPLIBS)
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include $(LOCAL_CPPFLAGS) $(GNUCFLAGS)
+pkgconfigdatadir = $(libdir)/pkgconfig
+pkgxmldatadir = $(pkgdatadir)/$(VERSION)/xml
+pkgmoduledir = $(pkglibdir)/$(VERSION)/modules
+@BUILD_MODULES_TRUE@pkgmodule_LTLIBRARIES = \
+@BUILD_MODULES_TRUE@ color-traditional.la \
+@BUILD_MODULES_TRUE@ print-canon.la \
+@BUILD_MODULES_TRUE@ print-escp2.la \
+@BUILD_MODULES_TRUE@ print-lexmark.la \
+@BUILD_MODULES_TRUE@ print-pcl.la \
+@BUILD_MODULES_TRUE@ print-ps.la \
+@BUILD_MODULES_TRUE@ print-olympus.la \
+@BUILD_MODULES_TRUE@ print-raw.la
+
+color_traditional_la_SOURCES = \
+ print-color.c \
+ color-conversion.h \
+ color-conversions.c
+
+color_traditional_la_LDFLAGS = -module -avoid-version
+print_canon_la_SOURCES = print-canon.c
+print_canon_la_LDFLAGS = -module -avoid-version
+print_escp2_la_SOURCES = \
+ print-escp2.c \
+ escp2-driver.c \
+ print-escp2.h \
+ print-escp2-data.c \
+ escp2-channels.c \
+ escp2-inks.c \
+ escp2-papers.c \
+ escp2-resolutions.c
+
+print_escp2_la_LDFLAGS = -module -avoid-version
+print_lexmark_la_SOURCES = print-lexmark.c
+print_lexmark_la_LDFLAGS = -module -avoid-version
+print_pcl_la_SOURCES = print-pcl.c
+print_pcl_la_LDFLAGS = -module -avoid-version
+print_ps_la_SOURCES = print-ps.c
+print_ps_la_LDFLAGS = -module -avoid-version
+print_olympus_la_SOURCES = print-olympus.c
+print_olympus_la_LDFLAGS = -module -avoid-version
+print_raw_la_SOURCES = print-raw.c
+print_raw_la_LDFLAGS = -module -avoid-version
+lib_LTLIBRARIES = libgutenprint.la
+module_SOURCES = \
+ $(color_traditional_la_SOURCES) \
+ $(print_canon_la_SOURCES) \
+ $(print_escp2_la_SOURCES) \
+ $(print_lexmark_la_SOURCES) \
+ $(print_pcl_la_SOURCES) \
+ $(print_ps_la_SOURCES) \
+ $(print_olympus_la_SOURCES) \
+ $(print_raw_la_SOURCES)
+
+@BUILD_MODULES_FALSE@libgutenprint_modules = $(module_SOURCES)
+mxml_SOURCES = \
+ mxml-attr.c \
+ mxml-file.c \
+ mxml-node.c \
+ mxml-search.c
+
+libgutenprint_headers = \
+ dither-impl.h \
+ dither-inlined-functions.h \
+ generic-options.h \
+ gutenprint-internal.h \
+ util.h
+
+libgutenprint_la_SOURCES = \
+ array.c \
+ bit-ops.c \
+ channel.c \
+ color.c \
+ curve.c \
+ curve-cache.c \
+ dither-ed.c \
+ dither-eventone.c \
+ dither-inks.c \
+ dither-main.c \
+ dither-ordered.c \
+ dither-very-fast.c \
+ dither-predithered.c \
+ generic-options.c \
+ image.c \
+ module.c \
+ path.c \
+ print-dither-matrices.c \
+ print-list.c \
+ print-papers.c \
+ print-util.c \
+ print-vars.c \
+ print-version.c \
+ print-weave.c \
+ printers.c \
+ sequence.c \
+ string-list.c \
+ xml.c \
+ $(mxml_SOURCES) \
+ $(libgutenprint_headers) \
+ $(libgutenprint_modules)
+
+libgutenprint_la_LIBADD = $(GUTENPRINT_LIBDEPS)
# Uncommment to build an unversioned library (version in soname)
-#libgimpprint_la_LDFLAGS = -release $(GIMPPRINT_VERSION) -rpath $(libdir)
+#libgutenprint_version = -release $(GUTENPRINT_VERSION)
# Uncomment to build a versioned library
-libgimpprint_la_LDFLAGS = -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) -rpath $(libdir)
-
-
-m4datadir = $(datadir)/aclocal
-m4data_DATA = gimpprint.m4
-
-CLEANFILES = print-printers.c
-DISTCLEANFILES = gimpprint-config
+libgutenprint_version = -version-info $(GUTENPRINT_CURRENT_INTERFACE):$(GUTENPRINT_INTERFACE_AGE):$(GUTENPRINT_BINARY_AGE)
+libgutenprint_la_LDFLAGS = $(libgutenprint_version) \
+ -rpath $(libdir) -no-undefined
+
+# libtool currently needs a patch for symbol export to work correctly
+# using a linker version script.
+# -export-symbols $(srcdir)/libgutenprint.sym
+pkgconfigdata_DATA = gutenprint.pc
+pkgxmldata_DATA = \
+ dither-matrix-1x1.xml \
+ dither-matrix-2x1.xml \
+ dither-matrix-4x1.xml \
+ papers.xml \
+ printers.xml
+
+# xmli18n-tmp.h is needed by po/POTFILES.in at dist time
+CLEANFILES = xmli18n-tmp.h
MAINTAINERCLEANFILES = Makefile.in
+EXTRA_DIST = $(pkgxmldata_DATA) libgutenprint.sym
+all: all-am
-EXTRA_DIST = gimpprint.m4 gimpprint-config.in printers.xml
-mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs
-CONFIG_HEADER = ../../config.h
-CONFIG_CLEAN_FILES = gimpprint-config
-LTLIBRARIES = $(lib_LTLIBRARIES)
-
-
-DEFS = @DEFS@ -I. -I$(srcdir) -I../..
-CPPFLAGS = @CPPFLAGS@
-LDFLAGS = @LDFLAGS@
-LIBS = @LIBS@
-libgimpprint_la_DEPENDENCIES =
-libgimpprint_la_OBJECTS = print-lexmark.lo print-canon.lo \
-print-dither.lo print-escp2.lo print-escp2-data.lo print-pcl.lo \
-print-ps.lo print-util.lo print-color.lo print-weave.lo \
-print-version.lo print-dither-matrices.lo
-SCRIPTS = $(bin_SCRIPTS)
-
-CFLAGS = @CFLAGS@
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
-DATA = $(m4data_DATA)
-
-DIST_COMMON = Makefile.am Makefile.in gimpprint-config.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = tar
-GZIP_ENV = --best
-SOURCES = $(libgimpprint_la_SOURCES)
-OBJECTS = $(libgimpprint_la_OBJECTS)
-
-all: all-redirect
.SUFFIXES:
-.SUFFIXES: .S .c .lo .o .obj .s
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps src/main/Makefile
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-gimpprint-config: $(top_builddir)/config.status gimpprint-config.in
- cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-mostlyclean-libLTLIBRARIES:
-
-clean-libLTLIBRARIES:
- -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-
-distclean-libLTLIBRARIES:
-
-maintainer-clean-libLTLIBRARIES:
-
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/scripts/global.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/main/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/main/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+gutenprint.pc: $(top_builddir)/config.status $(srcdir)/gutenprint.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
- $(mkinstalldirs) $(DESTDIR)$(libdir)
+ test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
- echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \
- $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \
+ f=$(am__strip_dir) \
+ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
else :; fi; \
done
uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL)
- list='$(lib_LTLIBRARIES)'; for p in $$list; do \
- $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \
+ @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
done
-.c.o:
- $(COMPILE) -c $<
-
-# FIXME: We should only use cygpath when building on Windows,
-# and only if it is available.
-.c.obj:
- $(COMPILE) -c `cygpath -w $<`
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+install-pkgmoduleLTLIBRARIES: $(pkgmodule_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgmoduledir)" || $(mkdir_p) "$(DESTDIR)$(pkgmoduledir)"
+ @list='$(pkgmodule_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+ echo " $(LIBTOOL) --mode=install $(pkgmoduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pkgmoduledir)/$$f'"; \
+ $(LIBTOOL) --mode=install $(pkgmoduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pkgmoduledir)/$$f"; \
+ else :; fi; \
+ done
-.s.o:
- $(COMPILE) -c $<
+uninstall-pkgmoduleLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @set -x; list='$(pkgmodule_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(pkgmoduledir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(pkgmoduledir)/$$p"; \
+ done
-.S.o:
- $(COMPILE) -c $<
+clean-pkgmoduleLTLIBRARIES:
+ -test -z "$(pkgmodule_LTLIBRARIES)" || rm -f $(pkgmodule_LTLIBRARIES)
+ @list='$(pkgmodule_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+color-traditional.la: $(color_traditional_la_OBJECTS) $(color_traditional_la_DEPENDENCIES)
+ $(LINK) $(am_color_traditional_la_rpath) $(color_traditional_la_LDFLAGS) $(color_traditional_la_OBJECTS) $(color_traditional_la_LIBADD) $(LIBS)
+libgutenprint.la: $(libgutenprint_la_OBJECTS) $(libgutenprint_la_DEPENDENCIES)
+ $(LINK) -rpath $(libdir) $(libgutenprint_la_LDFLAGS) $(libgutenprint_la_OBJECTS) $(libgutenprint_la_LIBADD) $(LIBS)
+print-canon.la: $(print_canon_la_OBJECTS) $(print_canon_la_DEPENDENCIES)
+ $(LINK) $(am_print_canon_la_rpath) $(print_canon_la_LDFLAGS) $(print_canon_la_OBJECTS) $(print_canon_la_LIBADD) $(LIBS)
+print-escp2.la: $(print_escp2_la_OBJECTS) $(print_escp2_la_DEPENDENCIES)
+ $(LINK) $(am_print_escp2_la_rpath) $(print_escp2_la_LDFLAGS) $(print_escp2_la_OBJECTS) $(print_escp2_la_LIBADD) $(LIBS)
+print-lexmark.la: $(print_lexmark_la_OBJECTS) $(print_lexmark_la_DEPENDENCIES)
+ $(LINK) $(am_print_lexmark_la_rpath) $(print_lexmark_la_LDFLAGS) $(print_lexmark_la_OBJECTS) $(print_lexmark_la_LIBADD) $(LIBS)
+print-olympus.la: $(print_olympus_la_OBJECTS) $(print_olympus_la_DEPENDENCIES)
+ $(LINK) $(am_print_olympus_la_rpath) $(print_olympus_la_LDFLAGS) $(print_olympus_la_OBJECTS) $(print_olympus_la_LIBADD) $(LIBS)
+print-pcl.la: $(print_pcl_la_OBJECTS) $(print_pcl_la_DEPENDENCIES)
+ $(LINK) $(am_print_pcl_la_rpath) $(print_pcl_la_LDFLAGS) $(print_pcl_la_OBJECTS) $(print_pcl_la_LIBADD) $(LIBS)
+print-ps.la: $(print_ps_la_OBJECTS) $(print_ps_la_DEPENDENCIES)
+ $(LINK) $(am_print_ps_la_rpath) $(print_ps_la_LDFLAGS) $(print_ps_la_OBJECTS) $(print_ps_la_LIBADD) $(LIBS)
+print-raw.la: $(print_raw_la_OBJECTS) $(print_raw_la_DEPENDENCIES)
+ $(LINK) $(am_print_raw_la_rpath) $(print_raw_la_LDFLAGS) $(print_raw_la_OBJECTS) $(print_raw_la_LIBADD) $(LIBS)
mostlyclean-compile:
- -rm -f *.o core *.core
-rm -f *.$(OBJEXT)
-clean-compile:
-
distclean-compile:
-rm -f *.tab.c
-maintainer-clean-compile:
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bit-ops.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/channel.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color-conversions.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curve-cache.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curve.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dither-ed.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dither-eventone.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dither-inks.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dither-main.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dither-ordered.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dither-predithered.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dither-very-fast.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/escp2-channels.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/escp2-driver.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/escp2-inks.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/escp2-papers.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/escp2-resolutions.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generic-options.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/image.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mxml-attr.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mxml-file.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mxml-node.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mxml-search.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/path.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-canon.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-color.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-dither-matrices.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-escp2-data.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-escp2.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-lexmark.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-list.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-olympus.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-papers.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-pcl.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-ps.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-raw.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-util.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-vars.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-version.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-weave.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printers.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sequence.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string-list.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml.Plo@am__quote@
-.c.lo:
- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
-.s.lo:
- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+.c.obj:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-.S.lo:
- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+.c.lo:
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
@@ -328,233 +737,259 @@ clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-
-maintainer-clean-libtool:
-
-libgimpprint.la: $(libgimpprint_la_OBJECTS) $(libgimpprint_la_DEPENDENCIES)
- $(LINK) -rpath $(libdir) $(libgimpprint_la_LDFLAGS) $(libgimpprint_la_OBJECTS) $(libgimpprint_la_LIBADD) $(LIBS)
-
-install-binSCRIPTS: $(bin_SCRIPTS)
+ -rm -f libtool
+uninstall-info-am:
+install-pkgconfigdataDATA: $(pkgconfigdata_DATA)
@$(NORMAL_INSTALL)
- $(mkinstalldirs) $(DESTDIR)$(bindir)
- @list='$(bin_SCRIPTS)'; for p in $$list; do \
- if test -f $$p; then \
- echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
- $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
- else if test -f $(srcdir)/$$p; then \
- echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
- $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
- else :; fi; fi; \
+ test -z "$(pkgconfigdatadir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfigdatadir)"
+ @list='$(pkgconfigdata_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(pkgconfigdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdatadir)/$$f'"; \
+ $(pkgconfigdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdatadir)/$$f"; \
done
-uninstall-binSCRIPTS:
+uninstall-pkgconfigdataDATA:
@$(NORMAL_UNINSTALL)
- list='$(bin_SCRIPTS)'; for p in $$list; do \
- rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
+ @list='$(pkgconfigdata_DATA)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pkgconfigdatadir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pkgconfigdatadir)/$$f"; \
done
-
-install-m4dataDATA: $(m4data_DATA)
+install-pkgxmldataDATA: $(pkgxmldata_DATA)
@$(NORMAL_INSTALL)
- $(mkinstalldirs) $(DESTDIR)$(m4datadir)
- @list='$(m4data_DATA)'; for p in $$list; do \
- if test -f $(srcdir)/$$p; then \
- echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(m4datadir)/$$p"; \
- $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(m4datadir)/$$p; \
- else if test -f $$p; then \
- echo " $(INSTALL_DATA) $$p $(DESTDIR)$(m4datadir)/$$p"; \
- $(INSTALL_DATA) $$p $(DESTDIR)$(m4datadir)/$$p; \
- fi; fi; \
+ test -z "$(pkgxmldatadir)" || $(mkdir_p) "$(DESTDIR)$(pkgxmldatadir)"
+ @list='$(pkgxmldata_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(pkgxmldataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgxmldatadir)/$$f'"; \
+ $(pkgxmldataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgxmldatadir)/$$f"; \
done
-uninstall-m4dataDATA:
+uninstall-pkgxmldataDATA:
@$(NORMAL_UNINSTALL)
- list='$(m4data_DATA)'; for p in $$list; do \
- rm -f $(DESTDIR)$(m4datadir)/$$p; \
+ @list='$(pkgxmldata_DATA)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pkgxmldatadir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pkgxmldatadir)/$$f"; \
done
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
tags: TAGS
-ID: $(HEADERS) $(SOURCES) $(LISP)
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
- here=`pwd` && cd $(srcdir) \
- && mkid -f$$here/ID $$unique $(LISP)
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
- test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
- || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
-
-mostlyclean-tags:
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
-clean-tags:
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
- -rm -f TAGS ID
-
-maintainer-clean-tags:
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = src/main
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
- @for file in $(DISTFILES); do \
- d=$(srcdir); \
+ $(mkdir_p) $(distdir)/../../scripts
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
if test -d $$d/$$file; then \
- cp -pr $$/$$file $(distdir)/$$file; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
- || cp -p $$d/$$file $(distdir)/$$file || :; \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
fi; \
done
-print-canon.lo print-canon.o : print-canon.c ../../config.h \
- ../../include/gimp-print/gimp-print.h gimp-print-internal.h \
- ../../include/gimp-print/gimp-print-intl-internal.h
-print-color.lo print-color.o : print-color.c ../../config.h \
- ../../include/gimp-print/gimp-print.h gimp-print-internal.h \
- ../../include/gimp-print/gimp-print-intl-internal.h
-print-dither-matrices.lo print-dither-matrices.o : \
- print-dither-matrices.c ../../config.h print-dither.h \
- ../../include/gimp-print/gimp-print.h gimp-print-internal.h \
- quickmatrix257.h ran.367.179.h ran.509.131.h
-print-dither.lo print-dither.o : print-dither.c ../../config.h \
- ../../include/gimp-print/gimp-print.h gimp-print-internal.h \
- print-dither.h \
- ../../include/gimp-print/gimp-print-intl-internal.h
-print-escp2-data.lo print-escp2-data.o : print-escp2-data.c \
- ../../config.h ../../include/gimp-print/gimp-print.h \
- gimp-print-internal.h \
- ../../include/gimp-print/gimp-print-intl-internal.h \
- print-escp2.h
-print-escp2.lo print-escp2.o : print-escp2.c ../../config.h \
- ../../include/gimp-print/gimp-print.h gimp-print-internal.h \
- ../../include/gimp-print/gimp-print-intl-internal.h \
- print-escp2.h
-print-lexmark.lo print-lexmark.o : print-lexmark.c ../../config.h \
- ../../include/gimp-print/gimp-print.h gimp-print-internal.h \
- ../../include/gimp-print/gimp-print-intl-internal.h
-print-pcl.lo print-pcl.o : print-pcl.c ../../config.h \
- ../../include/gimp-print/gimp-print.h gimp-print-internal.h \
- ../../include/gimp-print/gimp-print-intl-internal.h
-print-ps.lo print-ps.o : print-ps.c ../../config.h \
- ../../include/gimp-print/gimp-print.h gimp-print-internal.h \
- ../../include/gimp-print/gimp-print-intl-internal.h
-print-util.lo print-util.o : print-util.c ../../config.h \
- ../../include/gimp-print/gimp-print.h gimp-print-internal.h \
- ../../include/gimp-print/gimp-print-intl-internal.h \
- print-printers.c
-print-version.lo print-version.o : print-version.c ../../config.h \
- ../../include/gimp-print/gimp-print.h gimp-print-internal.h \
- ../../include/gimp-print/gimp-print-intl-internal.h
-print-weave.lo print-weave.o : print-weave.c ../../config.h \
- ../../include/gimp-print/gimp-print.h gimp-print-internal.h \
- ../../include/gimp-print/gimp-print-intl-internal.h
-
-info-am:
-info: info-am
-dvi-am:
-dvi: dvi-am
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
check-am: all-am
check: check-am
-installcheck-am:
-installcheck: installcheck-am
-install-exec-am: install-libLTLIBRARIES install-binSCRIPTS
+all-am: Makefile $(LTLIBRARIES) $(DATA) all-local
+installdirs:
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgmoduledir)" "$(DESTDIR)$(pkgconfigdatadir)" "$(DESTDIR)$(pkgxmldatadir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
install-exec: install-exec-am
-
-install-data-am: install-m4dataDATA
install-data: install-data-am
+uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-am
-uninstall-am: uninstall-libLTLIBRARIES uninstall-binSCRIPTS \
- uninstall-m4dataDATA
-uninstall: uninstall-am
-all-am: Makefile $(LTLIBRARIES) $(SCRIPTS) $(DATA)
-all-redirect: all-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
-installdirs:
- $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(bindir) \
- $(DESTDIR)$(m4datadir)
-
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
- -rm -f Makefile $(CONFIG_CLEAN_FILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
- -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \
- mostlyclean-libtool mostlyclean-tags \
- mostlyclean-generic
+clean: clean-am
-mostlyclean: mostlyclean-am
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+ clean-pkgmoduleLTLIBRARIES mostlyclean-am
-clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \
- clean-generic mostlyclean-am
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
-clean: clean-am
+dvi: dvi-am
-distclean-am: distclean-libLTLIBRARIES distclean-compile \
- distclean-libtool distclean-tags distclean-generic \
- clean-am
- -rm -f libtool
+dvi-am:
-distclean: distclean-am
+html: html-am
-maintainer-clean-am: maintainer-clean-libLTLIBRARIES \
- maintainer-clean-compile maintainer-clean-libtool \
- maintainer-clean-tags maintainer-clean-generic \
- distclean-am
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
+info: info-am
+
+info-am:
+
+install-data-am: install-pkgconfigdataDATA \
+ install-pkgmoduleLTLIBRARIES install-pkgxmldataDATA
+
+install-exec-am: install-libLTLIBRARIES
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
-.PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \
-clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \
-uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \
-distclean-compile clean-compile maintainer-clean-compile \
-mostlyclean-libtool distclean-libtool clean-libtool \
-maintainer-clean-libtool uninstall-binSCRIPTS install-binSCRIPTS \
-uninstall-m4dataDATA install-m4dataDATA tags mostlyclean-tags \
-distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
-dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
-install-exec install-data-am install-data install-am install \
-uninstall-am uninstall all-redirect all-am all installdirs \
-mostlyclean-generic distclean-generic clean-generic \
-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES \
+ uninstall-pkgconfigdataDATA uninstall-pkgmoduleLTLIBRARIES \
+ uninstall-pkgxmldataDATA
+
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+ clean-generic clean-libLTLIBRARIES clean-libtool \
+ clean-pkgmoduleLTLIBRARIES ctags dist-hook distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-exec \
+ install-exec-am install-info install-info-am \
+ install-libLTLIBRARIES install-man install-pkgconfigdataDATA \
+ install-pkgmoduleLTLIBRARIES install-pkgxmldataDATA \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-info-am uninstall-libLTLIBRARIES \
+ uninstall-pkgconfigdataDATA uninstall-pkgmoduleLTLIBRARIES \
+ uninstall-pkgxmldataDATA
@SET_MAKE@
-print-util.lo: print-printers.c $(srcdir)/print-util.c
+export STP_MODULE_PATH = $(top_builddir)/src/main/.libs:$(top_builddir)/src/main
+export STP_DATA_PATH = $(top_srcdir)/src/main
-print-printers.c: ../printdef/printdef $(srcdir)/printers.xml
- ../printdef/printdef < $(srcdir)/printers.xml > print-printers.c
+# Rules
-printdefl.o: printdefy.o
+$(top_builddir)/src/main/libgutenprint.la:
+ cd $(top_builddir)/src/main; \
+ $(MAKE)
+
+$(top_builddir)/src/gutenprintui/libgutenprintui.la:
+ cd $(top_builddir)/src/gutenprintui; \
+ $(MAKE)
-../printdef/printdef: $(addprefix ../printdef/, printdefl.l printdefy.y printdef.h)
- cd ../printdef ; \
+$(top_builddir)/src/gutenprintui2/libgutenprintui2.la:
+ cd $(top_builddir)/src/gutenprintui2; \
$(MAKE)
+all-local: xmli18n-tmp.h
+
+xmli18n-tmp.h: $(srcdir)/papers.xml $(srcdir)/printers.xml
+# Pull out translatable strings from XML files. This is crude, but
+# works for now.
+ sed -e '/description.*value/!d' \
+ -e 's/.*description.*value="\([^"]*\)".*/N_("\1");/' \
+ < $(srcdir)/papers.xml > $@;
+ sed -e '/printer.*name/!d' \
+ -e 's/.*printer.*name="\([^"]*\)".*/N_("\1");/' \
+ < $(srcdir)/printers.xml >> $@;
+
+dist-hook: xmli18n-tmp.h
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/src/main/array.c b/src/main/array.c
new file mode 100644
index 0000000..c16348c
--- /dev/null
+++ b/src/main/array.c
@@ -0,0 +1,281 @@
+/*
+ * "$Id: array.c,v 1.16 2004/09/17 18:38:16 rleigh Exp $"
+ *
+ * Array data type. This type is designed to be derived from by
+ * the curve and dither matrix types.
+ *
+ * Copyright 2002-2003 Robert Krawitz (rlk@alum.mit.edu)
+ * Copyright 2003 Roger Leigh (rleigh@debian.org)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+
+
+struct stp_array
+{
+ stp_sequence_t *data; /* First member, to allow typecasting to sequence. */
+ int x_size;
+ int y_size;
+};
+
+/*
+ * We could do more sanity checks here if we want.
+ */
+static inline void
+check_array(const stp_array_t *array)
+{
+ if (array == NULL)
+ {
+ stp_erprintf("Null stp_array_t! Please report this bug.\n");
+ stp_abort();
+ }
+}
+
+
+static void array_ctor(stp_array_t *array)
+{
+ array->data = stp_sequence_create();
+ stp_sequence_set_size(array->data, array->x_size * array->y_size);
+}
+
+stp_array_t *
+stp_array_create(int x_size, int y_size)
+{
+ stp_array_t *ret;
+ ret = stp_zalloc(sizeof(stp_array_t));
+ ret->x_size = x_size;
+ ret->y_size = y_size;
+ ret->data = NULL;
+ array_ctor(ret);
+ return ret;
+}
+
+
+static void
+array_dtor(stp_array_t *array)
+{
+ if (array->data)
+ stp_sequence_destroy(array->data);
+ memset(array, 0, sizeof(stp_array_t));
+}
+
+void
+stp_array_destroy(stp_array_t *array)
+{
+ check_array(array);
+ array_dtor(array);
+ stp_free(array);
+}
+
+void
+stp_array_copy(stp_array_t *dest, const stp_array_t *source)
+{
+ check_array(dest);
+ check_array(source);
+
+ dest->x_size = source->x_size;
+ dest->y_size = source->y_size;
+ if (dest->data)
+ stp_sequence_destroy(dest->data);
+ dest->data = stp_sequence_create_copy(source->data);
+}
+
+stp_array_t *
+stp_array_create_copy(const stp_array_t *array)
+{
+ stp_array_t *ret;
+ check_array(array);
+ ret = stp_array_create(0, 0); /* gets freed next */
+ stp_array_copy(ret, array);
+ return ret;
+}
+
+
+void
+stp_array_set_size(stp_array_t *array, int x_size, int y_size)
+{
+ check_array(array);
+ if (array->data) /* Free old data */
+ stp_sequence_destroy(array->data);
+ array->x_size = x_size;
+ array->y_size = y_size;
+ array->data = stp_sequence_create();
+ stp_sequence_set_size(array->data, array->x_size * array->y_size);
+}
+
+void
+stp_array_get_size(const stp_array_t *array, int *x_size, int *y_size)
+{
+ check_array(array);
+ *x_size = array->x_size;
+ *y_size = array->y_size;
+ return;
+}
+
+void
+stp_array_set_data(stp_array_t *array, const double *data)
+{
+ check_array(array);
+ stp_sequence_set_data(array->data, array->x_size * array->y_size,
+ data);
+}
+
+void
+stp_array_get_data(const stp_array_t *array, size_t *size, const double **data)
+{
+ check_array(array);
+ stp_sequence_get_data(array->data, size, data);
+}
+
+int
+stp_array_set_point(stp_array_t *array, int x, int y, double data)
+{
+ check_array(array);
+
+ if (((array->x_size * x) + y) >= (array->x_size * array->y_size))
+ return 0;
+
+ return stp_sequence_set_point(array->data, (array->x_size * x) + y, data);}
+
+int
+stp_array_get_point(const stp_array_t *array, int x, int y, double *data)
+{
+ check_array(array);
+
+ if (((array->x_size * x) + y) >= array->x_size * array->y_size)
+ return 0;
+ return stp_sequence_get_point(array->data,
+ (array->x_size * x) + y, data);
+}
+
+const stp_sequence_t *
+stp_array_get_sequence(const stp_array_t *array)
+{
+ check_array(array);
+
+ return array->data;
+}
+
+stp_array_t *
+stp_array_create_from_xmltree(stp_mxml_node_t *array) /* The array node */
+{
+ const char *stmp; /* Temporary string */
+ stp_mxml_node_t *child; /* Child sequence node */
+ int x_size, y_size;
+ size_t count;
+ stp_sequence_t *seq = NULL;
+ stp_array_t *ret = NULL;
+
+ stmp = stp_mxmlElementGetAttr(array, "x-size");
+ if (stmp)
+ {
+ x_size = (int) strtoul(stmp, NULL, 0);
+ }
+ else
+ {
+ stp_erprintf("stp_array_create_from_xmltree: \"x-size\" missing\n");
+ goto error;
+ }
+ /* Get y-size */
+ stmp = stp_mxmlElementGetAttr(array, "y-size");
+ if (stmp)
+ {
+ y_size = (int) strtoul(stmp, NULL, 0);
+ }
+ else
+ {
+ stp_erprintf("stp_array_create_from_xmltree: \"y-size\" missing\n");
+ goto error;
+ }
+
+ /* Get the sequence data */
+
+ child = stp_mxmlFindElement(array, array, "sequence", NULL, NULL, STP_MXML_DESCEND);
+ if (child)
+ seq = stp_sequence_create_from_xmltree(child);
+
+ if (seq == NULL)
+ goto error;
+
+ ret = stp_array_create(x_size, y_size);
+ if (ret->data)
+ stp_sequence_destroy(ret->data);
+ ret->data = seq;
+
+ count = stp_sequence_get_size(seq);
+ if (count != (x_size * y_size))
+ {
+ stp_erprintf("stp_array_create_from_xmltree: size mismatch between array and sequence\n");
+ goto error;
+ }
+
+ return ret;
+
+ error:
+ stp_erprintf("stp_array_create_from_xmltree: error during array read\n");
+ if (ret)
+ stp_array_destroy(ret);
+ return NULL;
+}
+
+stp_mxml_node_t *
+stp_xmltree_create_from_array(const stp_array_t *array) /* The array */
+{
+ int x_size, y_size;
+ char *xs, *ys;
+
+ stp_mxml_node_t *arraynode = NULL;
+ stp_mxml_node_t *child = NULL;
+
+ stp_xml_init();
+
+ /* Get array details */
+ stp_array_get_size(array, &x_size, &y_size);
+
+ /* Construct the allocated strings required */
+ stp_asprintf(&xs, "%d", x_size);
+ stp_asprintf(&ys, "%d", y_size);
+
+ arraynode = stp_mxmlNewElement(NULL, "array");
+ stp_mxmlElementSetAttr(arraynode, "x-size", xs);
+ stp_mxmlElementSetAttr(arraynode, "y-size", ys);
+ stp_free(xs);
+ stp_free(ys);
+
+ child = stp_xmltree_create_from_sequence(stp_array_get_sequence(array));
+
+ if (child)
+ stp_mxmlAdd(arraynode, STP_MXML_ADD_AFTER, NULL, child);
+ else
+ {
+ stp_mxmlDelete(arraynode);
+ arraynode = NULL;
+ }
+
+ stp_xml_exit();
+
+ return arraynode;
+}
diff --git a/src/main/bit-ops.c b/src/main/bit-ops.c
new file mode 100644
index 0000000..5cff81d
--- /dev/null
+++ b/src/main/bit-ops.c
@@ -0,0 +1,1199 @@
+/*
+ * "$Id: bit-ops.c,v 1.8 2005/06/29 01:42:34 rlk Exp $"
+ *
+ * Softweave calculator for Gutenprint.
+ *
+ * Copyright 2000 Charles Briscoe-Smith <cpbs@debian.org>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * This file must include only standard C header files. The core code must
+ * compile on generic platforms that don't support glib, gimp, gtk, etc.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <string.h>
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+void
+stp_fold(const unsigned char *line,
+ int single_length,
+ unsigned char *outbuf)
+{
+ int i;
+ memset(outbuf, 0, single_length * 2);
+ for (i = 0; i < single_length; i++)
+ {
+ unsigned char l0 = line[0];
+ unsigned char l1 = line[single_length];
+ if (l0 || l1)
+ {
+ outbuf[0] =
+ ((l0 & (1 << 7)) >> 1) +
+ ((l0 & (1 << 6)) >> 2) +
+ ((l0 & (1 << 5)) >> 3) +
+ ((l0 & (1 << 4)) >> 4) +
+ ((l1 & (1 << 7)) >> 0) +
+ ((l1 & (1 << 6)) >> 1) +
+ ((l1 & (1 << 5)) >> 2) +
+ ((l1 & (1 << 4)) >> 3);
+ outbuf[1] =
+ ((l0 & (1 << 3)) << 3) +
+ ((l0 & (1 << 2)) << 2) +
+ ((l0 & (1 << 1)) << 1) +
+ ((l0 & (1 << 0)) << 0) +
+ ((l1 & (1 << 3)) << 4) +
+ ((l1 & (1 << 2)) << 3) +
+ ((l1 & (1 << 1)) << 2) +
+ ((l1 & (1 << 0)) << 1);
+ }
+ line++;
+ outbuf += 2;
+ }
+}
+
+static void
+stpi_split_2_1(int length,
+ const unsigned char *in,
+ unsigned char *outhi,
+ unsigned char *outlo)
+{
+ unsigned char *outs[2];
+ int i;
+ int row = 0;
+ int limit = length;
+ outs[0] = outhi;
+ outs[1] = outlo;
+ memset(outs[1], 0, limit);
+ for (i = 0; i < limit; i++)
+ {
+ unsigned char inbyte = in[i];
+ outs[0][i] = 0;
+ if (inbyte == 0)
+ continue;
+ /* For some reason gcc isn't unrolling this, even with -funroll-loops */
+ if (inbyte & 1)
+ {
+ outs[row][i] |= 1 & inbyte;
+ row = row ^ 1;
+ }
+ if (inbyte & (1 << 1))
+ {
+ outs[row][i] |= (1 << 1) & inbyte;
+ row = row ^ 1;
+ }
+ if (inbyte & (1 << 2))
+ {
+ outs[row][i] |= (1 << 2) & inbyte;
+ row = row ^ 1;
+ }
+ if (inbyte & (1 << 3))
+ {
+ outs[row][i] |= (1 << 3) & inbyte;
+ row = row ^ 1;
+ }
+ if (inbyte & (1 << 4))
+ {
+ outs[row][i] |= (1 << 4) & inbyte;
+ row = row ^ 1;
+ }
+ if (inbyte & (1 << 5))
+ {
+ outs[row][i] |= (1 << 5) & inbyte;
+ row = row ^ 1;
+ }
+ if (inbyte & (1 << 6))
+ {
+ outs[row][i] |= (1 << 6) & inbyte;
+ row = row ^ 1;
+ }
+ if (inbyte & (1 << 7))
+ {
+ outs[row][i] |= (1 << 7) & inbyte;
+ row = row ^ 1;
+ }
+ }
+}
+
+static void
+stp_split_2_2(int length,
+ const unsigned char *in,
+ unsigned char *outhi,
+ unsigned char *outlo)
+{
+ unsigned char *outs[2];
+ int i;
+ unsigned row = 0;
+ int limit = length * 2;
+ outs[0] = outhi;
+ outs[1] = outlo;
+ memset(outs[1], 0, limit);
+ for (i = 0; i < limit; i++)
+ {
+ unsigned char inbyte = in[i];
+ outs[0][i] = 0;
+ if (inbyte == 0)
+ continue;
+ /* For some reason gcc isn't unrolling this, even with -funroll-loops */
+ if (inbyte & 3)
+ {
+ outs[row][i] |= (3 & inbyte);
+ row = row ^ 1;
+ }
+ if (inbyte & (3 << 2))
+ {
+ outs[row][i] |= ((3 << 2) & inbyte);
+ row = row ^ 1;
+ }
+ if (inbyte & (3 << 4))
+ {
+ outs[row][i] |= ((3 << 4) & inbyte);
+ row = row ^ 1;
+ }
+ if (inbyte & (3 << 6))
+ {
+ outs[row][i] |= ((3 << 6) & inbyte);
+ row = row ^ 1;
+ }
+ }
+}
+
+void
+stp_split_2(int length,
+ int bits,
+ const unsigned char *in,
+ unsigned char *outhi,
+ unsigned char *outlo)
+{
+ if (bits == 2)
+ stp_split_2_2(length, in, outhi, outlo);
+ else
+ stpi_split_2_1(length, in, outhi, outlo);
+}
+
+static void
+stpi_split_4_1(int length,
+ const unsigned char *in,
+ unsigned char *out0,
+ unsigned char *out1,
+ unsigned char *out2,
+ unsigned char *out3)
+{
+ unsigned char *outs[4];
+ int i;
+ int row = 0;
+ int limit = length;
+ outs[0] = out0;
+ outs[1] = out1;
+ outs[2] = out2;
+ outs[3] = out3;
+ memset(outs[1], 0, limit);
+ memset(outs[2], 0, limit);
+ memset(outs[3], 0, limit);
+ for (i = 0; i < limit; i++)
+ {
+ unsigned char inbyte = in[i];
+ outs[0][i] = 0;
+ if (inbyte == 0)
+ continue;
+ /* For some reason gcc isn't unrolling this, even with -funroll-loops */
+ if (inbyte & 1)
+ {
+ outs[row][i] |= 1 & inbyte;
+ row = (row + 1) & 3;
+ }
+ if (inbyte & (1 << 1))
+ {
+ outs[row][i] |= (1 << 1) & inbyte;
+ row = (row + 1) & 3;
+ }
+ if (inbyte & (1 << 2))
+ {
+ outs[row][i] |= (1 << 2) & inbyte;
+ row = (row + 1) & 3;
+ }
+ if (inbyte & (1 << 3))
+ {
+ outs[row][i] |= (1 << 3) & inbyte;
+ row = (row + 1) & 3;
+ }
+ if (inbyte & (1 << 4))
+ {
+ outs[row][i] |= (1 << 4) & inbyte;
+ row = (row + 1) & 3;
+ }
+ if (inbyte & (1 << 5))
+ {
+ outs[row][i] |= (1 << 5) & inbyte;
+ row = (row + 1) & 3;
+ }
+ if (inbyte & (1 << 6))
+ {
+ outs[row][i] |= (1 << 6) & inbyte;
+ row = (row + 1) & 3;
+ }
+ if (inbyte & (1 << 7))
+ {
+ outs[row][i] |= (1 << 7) & inbyte;
+ row = (row + 1) & 3;
+ }
+ }
+}
+
+static void
+stpi_split_4_2(int length,
+ const unsigned char *in,
+ unsigned char *out0,
+ unsigned char *out1,
+ unsigned char *out2,
+ unsigned char *out3)
+{
+ unsigned char *outs[4];
+ int i;
+ int row = 0;
+ int limit = length * 2;
+ outs[0] = out0;
+ outs[1] = out1;
+ outs[2] = out2;
+ outs[3] = out3;
+ memset(outs[1], 0, limit);
+ memset(outs[2], 0, limit);
+ memset(outs[3], 0, limit);
+ for (i = 0; i < limit; i++)
+ {
+ unsigned char inbyte = in[i];
+ outs[0][i] = 0;
+ if (inbyte == 0)
+ continue;
+ /* For some reason gcc isn't unrolling this, even with -funroll-loops */
+ if (inbyte & 3)
+ {
+ outs[row][i] |= 3 & inbyte;
+ row = (row + 1) & 3;
+ }
+ if (inbyte & (3 << 2))
+ {
+ outs[row][i] |= (3 << 2) & inbyte;
+ row = (row + 1) & 3;
+ }
+ if (inbyte & (3 << 4))
+ {
+ outs[row][i] |= (3 << 4) & inbyte;
+ row = (row + 1) & 3;
+ }
+ if (inbyte & (3 << 6))
+ {
+ outs[row][i] |= (3 << 6) & inbyte;
+ row = (row + 1) & 3;
+ }
+ }
+}
+
+void
+stp_split_4(int length,
+ int bits,
+ const unsigned char *in,
+ unsigned char *out0,
+ unsigned char *out1,
+ unsigned char *out2,
+ unsigned char *out3)
+{
+ if (bits == 2)
+ stpi_split_4_2(length, in, out0, out1, out2, out3);
+ else
+ stpi_split_4_1(length, in, out0, out1, out2, out3);
+}
+
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define SH20 0
+#define SH21 8
+#else
+#define SH20 8
+#define SH21 0
+#endif
+
+static void
+stpi_unpack_2_1(int length,
+ const unsigned char *in,
+ unsigned char *out0,
+ unsigned char *out1)
+{
+ unsigned char tempin, bit, temp0, temp1;
+
+ if (length <= 0)
+ return;
+ for (bit = 128, temp0 = 0, temp1 = 0;
+ length > 0;
+ length --)
+ {
+ tempin = *in++;
+
+ if (tempin & 128)
+ temp0 |= bit;
+ if (tempin & 64)
+ temp1 |= bit;
+ bit >>= 1;
+ if (tempin & 32)
+ temp0 |= bit;
+ if (tempin & 16)
+ temp1 |= bit;
+ bit >>= 1;
+ if (tempin & 8)
+ temp0 |= bit;
+ if (tempin & 4)
+ temp1 |= bit;
+ bit >>= 1;
+ if (tempin & 2)
+ temp0 |= bit;
+ if (tempin & 1)
+ temp1 |= bit;
+
+ if (bit > 1)
+ bit >>= 1;
+ else
+ {
+ bit = 128;
+ *out0++ = temp0;
+ *out1++ = temp1;
+
+ temp0 = 0;
+ temp1 = 0;
+ }
+ }
+
+ if (bit < 128)
+ {
+ *out0++ = temp0;
+ *out1++ = temp1;
+ }
+}
+
+static void
+stpi_unpack_2_2(int length,
+ const unsigned char *in,
+ unsigned char *out0,
+ unsigned char *out1)
+{
+ if (length <= 0)
+ return;
+
+ for (;length;length --)
+ {
+ unsigned char ti0, ti1;
+ ti0 = in[0];
+ ti1 = in[1];
+
+ *out0++ = (ti0 & 0xc0) << 0
+ | (ti0 & 0x0c) << 2
+ | (ti1 & 0xc0) >> 4
+ | (ti1 & 0x0c) >> 2;
+ *out1++ = (ti0 & 0x30) << 2
+ | (ti0 & 0x03) << 4
+ | (ti1 & 0x30) >> 2
+ | (ti1 & 0x03) >> 0;
+ in += 2;
+ }
+}
+
+void
+stp_unpack_2(int length,
+ int bits,
+ const unsigned char *in,
+ unsigned char *outlo,
+ unsigned char *outhi)
+{
+ if (bits == 1)
+ stpi_unpack_2_1(length, in, outlo, outhi);
+ else
+ stpi_unpack_2_2(length, in, outlo, outhi);
+}
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define SH40 0
+#define SH41 8
+#define SH42 16
+#define SH43 24
+#else
+#define SH40 24
+#define SH41 16
+#define SH42 8
+#define SH43 0
+#endif
+
+static void
+stpi_unpack_4_1(int length,
+ const unsigned char *in,
+ unsigned char *out0,
+ unsigned char *out1,
+ unsigned char *out2,
+ unsigned char *out3)
+{
+ unsigned char tempin, bit, temp0, temp1, temp2, temp3;
+
+ if (length <= 0)
+ return;
+ for (bit = 128, temp0 = 0, temp1 = 0, temp2 = 0, temp3 = 0;
+ length > 0;
+ length --)
+ {
+ tempin = *in++;
+
+ if (tempin & 128)
+ temp0 |= bit;
+ if (tempin & 64)
+ temp1 |= bit;
+ if (tempin & 32)
+ temp2 |= bit;
+ if (tempin & 16)
+ temp3 |= bit;
+ bit >>= 1;
+ if (tempin & 8)
+ temp0 |= bit;
+ if (tempin & 4)
+ temp1 |= bit;
+ if (tempin & 2)
+ temp2 |= bit;
+ if (tempin & 1)
+ temp3 |= bit;
+
+ if (bit > 1)
+ bit >>= 1;
+ else
+ {
+ bit = 128;
+ *out0++ = temp0;
+ *out1++ = temp1;
+ *out2++ = temp2;
+ *out3++ = temp3;
+
+ temp0 = 0;
+ temp1 = 0;
+ temp2 = 0;
+ temp3 = 0;
+ }
+ }
+
+ if (bit < 128)
+ {
+ *out0++ = temp0;
+ *out1++ = temp1;
+ *out2++ = temp2;
+ *out3++ = temp3;
+ }
+}
+
+static void
+stpi_unpack_4_2(int length,
+ const unsigned char *in,
+ unsigned char *out0,
+ unsigned char *out1,
+ unsigned char *out2,
+ unsigned char *out3)
+{
+ unsigned char tempin,
+ shift,
+ temp0,
+ temp1,
+ temp2,
+ temp3;
+
+ length *= 2;
+
+ for (shift = 0, temp0 = 0, temp1 = 0, temp2 = 0, temp3 = 0;
+ length > 0;
+ length --)
+ {
+ /*
+ * Note - we can't use (tempin & N) >> (shift - M) since negative
+ * right-shifts are not always implemented.
+ */
+
+ tempin = *in++;
+
+ if (tempin & 192)
+ temp0 |= (tempin & 192) >> shift;
+ if (tempin & 48)
+ temp1 |= ((tempin & 48) << 2) >> shift;
+ if (tempin & 12)
+ temp2 |= ((tempin & 12) << 4) >> shift;
+ if (tempin & 3)
+ temp3 |= ((tempin & 3) << 6) >> shift;
+
+ if (shift < 6)
+ shift += 2;
+ else
+ {
+ shift = 0;
+ *out0++ = temp0;
+ *out1++ = temp1;
+ *out2++ = temp2;
+ *out3++ = temp3;
+
+ temp0 = 0;
+ temp1 = 0;
+ temp2 = 0;
+ temp3 = 0;
+ }
+ }
+
+ if (shift)
+ {
+ *out0++ = temp0;
+ *out1++ = temp1;
+ *out2++ = temp2;
+ *out3++ = temp3;
+ }
+}
+
+void
+stp_unpack_4(int length,
+ int bits,
+ const unsigned char *in,
+ unsigned char *out0,
+ unsigned char *out1,
+ unsigned char *out2,
+ unsigned char *out3)
+{
+ if (bits == 1)
+ stpi_unpack_4_1(length, in, out0, out1, out2, out3);
+ else
+ stpi_unpack_4_2(length, in, out0, out1, out2, out3);
+}
+
+static void
+stpi_unpack_8_1(int length,
+ const unsigned char *in,
+ unsigned char *out0,
+ unsigned char *out1,
+ unsigned char *out2,
+ unsigned char *out3,
+ unsigned char *out4,
+ unsigned char *out5,
+ unsigned char *out6,
+ unsigned char *out7)
+{
+ unsigned char tempin, bit, temp0, temp1, temp2, temp3, temp4, temp5, temp6,
+ temp7;
+
+ if (length <= 0)
+ return;
+
+ for (bit = 128, temp0 = 0, temp1 = 0, temp2 = 0,
+ temp3 = 0, temp4 = 0, temp5 = 0, temp6 = 0, temp7 = 0;
+ length > 0;
+ length --)
+ {
+ tempin = *in++;
+
+ if (tempin & 128)
+ temp0 |= bit;
+ if (tempin & 64)
+ temp1 |= bit;
+ if (tempin & 32)
+ temp2 |= bit;
+ if (tempin & 16)
+ temp3 |= bit;
+ if (tempin & 8)
+ temp4 |= bit;
+ if (tempin & 4)
+ temp5 |= bit;
+ if (tempin & 2)
+ temp6 |= bit;
+ if (tempin & 1)
+ temp7 |= bit;
+
+ if (bit > 1)
+ bit >>= 1;
+ else
+ {
+ bit = 128;
+ *out0++ = temp0;
+ *out1++ = temp1;
+ *out2++ = temp2;
+ *out3++ = temp3;
+ *out4++ = temp4;
+ *out5++ = temp5;
+ *out6++ = temp6;
+ *out7++ = temp7;
+
+ temp0 = 0;
+ temp1 = 0;
+ temp2 = 0;
+ temp3 = 0;
+ temp4 = 0;
+ temp5 = 0;
+ temp6 = 0;
+ temp7 = 0;
+ }
+ }
+
+ if (bit < 128)
+ {
+ *out0++ = temp0;
+ *out1++ = temp1;
+ *out2++ = temp2;
+ *out3++ = temp3;
+ *out4++ = temp4;
+ *out5++ = temp5;
+ *out6++ = temp6;
+ *out7++ = temp7;
+ }
+}
+
+static void
+stpi_unpack_8_2(int length,
+ const unsigned char *in,
+ unsigned char *out0,
+ unsigned char *out1,
+ unsigned char *out2,
+ unsigned char *out3,
+ unsigned char *out4,
+ unsigned char *out5,
+ unsigned char *out6,
+ unsigned char *out7)
+{
+ unsigned char tempin,
+ shift,
+ temp0,
+ temp1,
+ temp2,
+ temp3,
+ temp4,
+ temp5,
+ temp6,
+ temp7;
+
+
+ for (shift = 0, temp0 = 0, temp1 = 0,
+ temp2 = 0, temp3 = 0, temp4 = 0, temp5 = 0, temp6 = 0, temp7 = 0;
+ length > 0;
+ length --)
+ {
+ /*
+ * Note - we can't use (tempin & N) >> (shift - M) since negative
+ * right-shifts are not always implemented.
+ */
+
+ tempin = *in++;
+
+ if (tempin & 192)
+ temp0 |= (tempin & 192) >> shift;
+ if (tempin & 48)
+ temp1 |= ((tempin & 48) << 2) >> shift;
+ if (tempin & 12)
+ temp2 |= ((tempin & 12) << 4) >> shift;
+ if (tempin & 3)
+ temp3 |= ((tempin & 3) << 6) >> shift;
+
+ tempin = *in++;
+
+ if (tempin & 192)
+ temp4 |= (tempin & 192) >> shift;
+ if (tempin & 48)
+ temp5 |= ((tempin & 48) << 2) >> shift;
+ if (tempin & 12)
+ temp6 |= ((tempin & 12) << 4) >> shift;
+ if (tempin & 3)
+ temp7 |= ((tempin & 3) << 6) >> shift;
+
+ if (shift < 6)
+ shift += 2;
+ else
+ {
+ shift = 0;
+ *out0++ = temp0;
+ *out1++ = temp1;
+ *out2++ = temp2;
+ *out3++ = temp3;
+ *out4++ = temp4;
+ *out5++ = temp5;
+ *out6++ = temp6;
+ *out7++ = temp7;
+
+ temp0 = 0;
+ temp1 = 0;
+ temp2 = 0;
+ temp3 = 0;
+ temp4 = 0;
+ temp5 = 0;
+ temp6 = 0;
+ temp7 = 0;
+ }
+ }
+
+ if (shift)
+ {
+ *out0++ = temp0;
+ *out1++ = temp1;
+ *out2++ = temp2;
+ *out3++ = temp3;
+ *out4++ = temp4;
+ *out5++ = temp5;
+ *out6++ = temp6;
+ *out7++ = temp7;
+ }
+}
+
+void
+stp_unpack_8(int length,
+ int bits,
+ const unsigned char *in,
+ unsigned char *out0,
+ unsigned char *out1,
+ unsigned char *out2,
+ unsigned char *out3,
+ unsigned char *out4,
+ unsigned char *out5,
+ unsigned char *out6,
+ unsigned char *out7)
+{
+ if (bits == 1)
+ stpi_unpack_8_1(length, in, out0, out1, out2, out3,
+ out4, out5, out6, out7);
+ else
+ stpi_unpack_8_2(length, in, out0, out1, out2, out3,
+ out4, out5, out6, out7);
+}
+
+
+static void
+stpi_unpack_16_1(int length,
+ const unsigned char *in,
+ unsigned char *out0,
+ unsigned char *out1,
+ unsigned char *out2,
+ unsigned char *out3,
+ unsigned char *out4,
+ unsigned char *out5,
+ unsigned char *out6,
+ unsigned char *out7,
+ unsigned char *out8,
+ unsigned char *out9,
+ unsigned char *out10,
+ unsigned char *out11,
+ unsigned char *out12,
+ unsigned char *out13,
+ unsigned char *out14,
+ unsigned char *out15)
+{
+ unsigned char tempin, bit;
+ unsigned char temp[16];
+
+ if (length <= 0)
+ return;
+
+ memset(temp, 0, 16);
+
+ for (bit = 128; length > 0; length--)
+ {
+ tempin = *in++;
+
+ if (tempin & 128)
+ temp[0] |= bit;
+ if (tempin & 64)
+ temp[1] |= bit;
+ if (tempin & 32)
+ temp[2] |= bit;
+ if (tempin & 16)
+ temp[3] |= bit;
+ if (tempin & 8)
+ temp[4] |= bit;
+ if (tempin & 4)
+ temp[5] |= bit;
+ if (tempin & 2)
+ temp[6] |= bit;
+ if (tempin & 1)
+ temp[7] |= bit;
+
+ tempin = *in++;
+
+ if (tempin & 128)
+ temp[8] |= bit;
+ if (tempin & 64)
+ temp[9] |= bit;
+ if (tempin & 32)
+ temp[10] |= bit;
+ if (tempin & 16)
+ temp[11] |= bit;
+ if (tempin & 8)
+ temp[12] |= bit;
+ if (tempin & 4)
+ temp[13] |= bit;
+ if (tempin & 2)
+ temp[14] |= bit;
+ if (tempin & 1)
+ temp[15] |= bit;
+
+ if (bit > 1)
+ bit >>= 1;
+ else
+ {
+ bit = 128;
+ *out0++ = temp[0];
+ *out1++ = temp[1];
+ *out2++ = temp[2];
+ *out3++ = temp[3];
+ *out4++ = temp[4];
+ *out5++ = temp[5];
+ *out6++ = temp[6];
+ *out7++ = temp[7];
+ *out8++ = temp[8];
+ *out9++ = temp[9];
+ *out10++ = temp[10];
+ *out11++ = temp[11];
+ *out12++ = temp[12];
+ *out13++ = temp[13];
+ *out14++ = temp[14];
+ *out15++ = temp[15];
+
+ memset(temp, 0, 16);
+ }
+ }
+
+ if (bit < 128)
+ {
+ *out0++ = temp[0];
+ *out1++ = temp[1];
+ *out2++ = temp[2];
+ *out3++ = temp[3];
+ *out4++ = temp[4];
+ *out5++ = temp[5];
+ *out6++ = temp[6];
+ *out7++ = temp[7];
+ *out8++ = temp[8];
+ *out9++ = temp[9];
+ *out10++ = temp[10];
+ *out11++ = temp[11];
+ *out12++ = temp[12];
+ *out13++ = temp[13];
+ *out14++ = temp[14];
+ *out15++ = temp[15];
+ }
+}
+
+static void
+stpi_unpack_16_2(int length,
+ const unsigned char *in,
+ unsigned char *out0,
+ unsigned char *out1,
+ unsigned char *out2,
+ unsigned char *out3,
+ unsigned char *out4,
+ unsigned char *out5,
+ unsigned char *out6,
+ unsigned char *out7,
+ unsigned char *out8,
+ unsigned char *out9,
+ unsigned char *out10,
+ unsigned char *out11,
+ unsigned char *out12,
+ unsigned char *out13,
+ unsigned char *out14,
+ unsigned char *out15)
+{
+ unsigned char tempin, shift;
+ unsigned char temp[16];
+
+ if (length <= 0)
+ return;
+
+ memset(temp, 0, 16);
+
+ for (shift = 0; length > 0; length--)
+ {
+ /*
+ * Note - we can't use (tempin & N) >> (shift - M) since negative
+ * right-shifts are not always implemented.
+ */
+
+ tempin = *in++;
+
+ if (tempin & 192)
+ temp[0] |= (tempin & 192) >> shift;
+ if (tempin & 48)
+ temp[1] |= ((tempin & 48) << 2) >> shift;
+ if (tempin & 12)
+ temp[2] |= ((tempin & 12) << 4) >> shift;
+ if (tempin & 3)
+ temp[3] |= ((tempin & 3) << 6) >> shift;
+
+ tempin = *in++;
+
+ if (tempin & 192)
+ temp[4] |= (tempin & 192) >> shift;
+ if (tempin & 48)
+ temp[5] |= ((tempin & 48) << 2) >> shift;
+ if (tempin & 12)
+ temp[6] |= ((tempin & 12) << 4) >> shift;
+ if (tempin & 3)
+ temp[7] |= ((tempin & 3) << 6) >> shift;
+
+ tempin = *in++;
+
+ if (tempin & 192)
+ temp[8] |= (tempin & 192) >> shift;
+ if (tempin & 48)
+ temp[9] |= ((tempin & 48) << 2) >> shift;
+ if (tempin & 12)
+ temp[10] |= ((tempin & 12) << 4) >> shift;
+ if (tempin & 3)
+ temp[11] |= ((tempin & 3) << 6) >> shift;
+
+ tempin = *in++;
+
+ if (tempin & 192)
+ temp[12] |= (tempin & 192) >> shift;
+ if (tempin & 48)
+ temp[13] |= ((tempin & 48) << 2) >> shift;
+ if (tempin & 12)
+ temp[14] |= ((tempin & 12) << 4) >> shift;
+ if (tempin & 3)
+ temp[15] |= ((tempin & 3) << 6) >> shift;
+
+ if (shift < 6)
+ shift += 2;
+ else
+ {
+ shift = 0;
+ *out0++ = temp[0];
+ *out1++ = temp[1];
+ *out2++ = temp[2];
+ *out3++ = temp[3];
+ *out4++ = temp[4];
+ *out5++ = temp[5];
+ *out6++ = temp[6];
+ *out7++ = temp[7];
+ *out8++ = temp[8];
+ *out9++ = temp[9];
+ *out10++ = temp[10];
+ *out11++ = temp[11];
+ *out12++ = temp[12];
+ *out13++ = temp[13];
+ *out14++ = temp[14];
+ *out15++ = temp[15];
+
+ memset(temp, 0, 16);
+ }
+ }
+
+ if (shift)
+ {
+ *out0++ = temp[0];
+ *out1++ = temp[1];
+ *out2++ = temp[2];
+ *out3++ = temp[3];
+ *out4++ = temp[4];
+ *out5++ = temp[5];
+ *out6++ = temp[6];
+ *out7++ = temp[7];
+ *out8++ = temp[8];
+ *out9++ = temp[9];
+ *out10++ = temp[10];
+ *out11++ = temp[11];
+ *out12++ = temp[12];
+ *out13++ = temp[13];
+ *out14++ = temp[14];
+ *out15++ = temp[15];
+ }
+}
+
+void
+stp_unpack_16(int length,
+ int bits,
+ const unsigned char *in,
+ unsigned char *out0,
+ unsigned char *out1,
+ unsigned char *out2,
+ unsigned char *out3,
+ unsigned char *out4,
+ unsigned char *out5,
+ unsigned char *out6,
+ unsigned char *out7,
+ unsigned char *out8,
+ unsigned char *out9,
+ unsigned char *out10,
+ unsigned char *out11,
+ unsigned char *out12,
+ unsigned char *out13,
+ unsigned char *out14,
+ unsigned char *out15)
+{
+ if (bits == 1)
+ stpi_unpack_16_1(length, in,
+ out0, out1, out2, out3, out4, out5, out6, out7,
+ out8, out9, out10, out11, out12, out13, out14, out15);
+ else
+ stpi_unpack_16_2(length, in,
+ out0, out1, out2, out3, out4, out5, out6, out7,
+ out8, out9, out10, out11, out12, out13, out14, out15);
+}
+
+static void
+find_first_and_last(const unsigned char *line, int length,
+ int *first, int *last)
+{
+ int i;
+ int found_first = 0;
+ if (!first || !last)
+ return;
+ *first = 0;
+ *last = 0;
+ for (i = 0; i < length; i++)
+ {
+ if (line[i] == 0)
+ {
+ if (!found_first)
+ (*first)++;
+ }
+ else
+ {
+ *last = i;
+ found_first = 1;
+ }
+ }
+}
+
+int
+stp_pack_uncompressed(stp_vars_t *v,
+ const unsigned char *line,
+ int length,
+ unsigned char *comp_buf,
+ unsigned char **comp_ptr,
+ int *first,
+ int *last)
+{
+ find_first_and_last(line, length, first, last);
+ memcpy(comp_buf, line, length);
+ *comp_ptr = comp_buf + length;
+ if (first > last)
+ return 0;
+ else
+ return 1;
+}
+
+int
+stp_pack_tiff(stp_vars_t *v,
+ const unsigned char *line,
+ int length,
+ unsigned char *comp_buf,
+ unsigned char **comp_ptr,
+ int *first,
+ int *last)
+{
+ const unsigned char *start; /* Start of compressed data */
+ unsigned char repeat; /* Repeating char */
+ int count; /* Count of compressed bytes */
+ int tcount; /* Temporary count < 128 */
+ register const unsigned char *xline = line;
+ register int xlength = length;
+ find_first_and_last(line, length, first, last);
+
+ /*
+ * Compress using TIFF "packbits" run-length encoding...
+ */
+
+ (*comp_ptr) = comp_buf;
+
+ while (xlength > 0)
+ {
+ /*
+ * Get a run of non-repeated chars...
+ */
+
+ start = xline;
+ xline += 2;
+ xlength -= 2;
+
+ while (xlength > 0 && (xline[-2] != xline[-1] || xline[-1] != xline[0]))
+ {
+ xline ++;
+ xlength --;
+ }
+
+ xline -= 2;
+ xlength += 2;
+
+ /*
+ * Output the non-repeated sequences (max 128 at a time).
+ */
+
+ count = xline - start;
+ while (count > 0)
+ {
+ tcount = count > 128 ? 128 : count;
+
+ (*comp_ptr)[0] = tcount - 1;
+ memcpy((*comp_ptr) + 1, start, tcount);
+
+ (*comp_ptr) += tcount + 1;
+ start += tcount;
+ count -= tcount;
+ }
+
+ if (xlength <= 0)
+ break;
+
+ /*
+ * Find the repeated sequences...
+ */
+
+ start = xline;
+ repeat = xline[0];
+
+ xline ++;
+ xlength --;
+
+ if (xlength > 0)
+ {
+ int ylength = xlength;
+ while (ylength && *xline == repeat)
+ {
+ xline ++;
+ ylength --;
+ }
+ xlength = ylength;
+ }
+
+ /*
+ * Output the repeated sequences (max 128 at a time).
+ */
+
+ count = xline - start;
+ while (count > 0)
+ {
+ tcount = count > 128 ? 128 : count;
+
+ (*comp_ptr)[0] = 1 - tcount;
+ (*comp_ptr)[1] = repeat;
+
+ (*comp_ptr) += 2;
+ count -= tcount;
+ }
+ }
+ if (first && last && *first > *last)
+ return 0;
+ else
+ return 1;
+}
diff --git a/src/main/channel.c b/src/main/channel.c
new file mode 100644
index 0000000..ca676bb
--- /dev/null
+++ b/src/main/channel.c
@@ -0,0 +1,1017 @@
+/*
+ * "$Id: channel.c,v 1.26 2005/06/14 02:49:09 rlk Exp $"
+ *
+ * Dither routine entrypoints
+ *
+ * Copyright 2003 Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Revision History:
+ *
+ * See ChangeLog
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#include <math.h>
+#include <string.h>
+
+#ifdef __GNUC__
+#define inline __inline__
+#endif
+
+#define FMAX(a, b) ((a) > (b) ? (a) : (b))
+#define FMIN(a, b) ((a) < (b) ? (a) : (b))
+
+typedef struct
+{
+ double value;
+ double lower;
+ double upper;
+ double cutoff;
+ unsigned short s_density;
+} stpi_subchannel_t;
+
+typedef struct
+{
+ unsigned subchannel_count;
+ stpi_subchannel_t *sc;
+ unsigned short *lut;
+ const double *hue_map;
+ size_t h_count;
+ stp_curve_t *curve;
+} stpi_channel_t;
+
+typedef struct
+{
+ unsigned channel_count;
+ unsigned total_channels;
+ unsigned input_channels;
+ size_t width;
+ int initialized;
+ unsigned ink_limit;
+ unsigned max_density;
+ stpi_channel_t *c;
+ unsigned curve_count;
+ unsigned gloss_limit;
+ unsigned short *input_data;
+ unsigned short *multi_tmp;
+ unsigned short *split_input;
+ unsigned short *output_data;
+ unsigned short *alloc_data_1;
+ unsigned short *alloc_data_2;
+ unsigned short *alloc_data_3;
+ int black_channel;
+ int gloss_channel;
+ int gloss_physical_channel;
+} stpi_channel_group_t;
+
+
+static void
+clear_a_channel(stpi_channel_group_t *cg, int channel)
+{
+ if (channel < cg->channel_count)
+ {
+ STP_SAFE_FREE(cg->c[channel].sc);
+ STP_SAFE_FREE(cg->c[channel].lut);
+ if (cg->c[channel].curve)
+ {
+ stp_curve_destroy(cg->c[channel].curve);
+ cg->c[channel].curve = NULL;
+ }
+ cg->c[channel].subchannel_count = 0;
+ }
+}
+
+static void
+stpi_channel_clear(void *vc)
+{
+ stpi_channel_group_t *cg = (stpi_channel_group_t *) vc;
+ int i;
+ if (cg->channel_count > 0)
+ for (i = 0; i < cg->channel_count; i++)
+ clear_a_channel(cg, i);
+
+ STP_SAFE_FREE(cg->alloc_data_1);
+ STP_SAFE_FREE(cg->alloc_data_2);
+ STP_SAFE_FREE(cg->alloc_data_3);
+ STP_SAFE_FREE(cg->c);
+ cg->channel_count = 0;
+ cg->curve_count = 0;
+ cg->total_channels = 0;
+ cg->input_channels = 0;
+ cg->initialized = 0;
+}
+
+void
+stp_channel_reset(stp_vars_t *v)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ if (cg)
+ stpi_channel_clear(cg);
+}
+
+void
+stp_channel_reset_channel(stp_vars_t *v, int channel)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ if (cg)
+ clear_a_channel(cg, channel);
+}
+
+static void
+stpi_channel_free(void *vc)
+{
+ stpi_channel_clear(vc);
+ stp_free(vc);
+}
+
+static stpi_subchannel_t *
+get_channel(stp_vars_t *v, unsigned channel, unsigned subchannel)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ if (!cg)
+ return NULL;
+ if (channel >= cg->channel_count)
+ return NULL;
+ if (subchannel >= cg->c[channel].subchannel_count)
+ return NULL;
+ return &(cg->c[channel].sc[subchannel]);
+}
+
+void
+stp_channel_add(stp_vars_t *v, unsigned channel, unsigned subchannel,
+ double value)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ stpi_channel_t *chan;
+ if (!cg)
+ {
+ cg = stp_zalloc(sizeof(stpi_channel_group_t));
+ cg->black_channel = -1;
+ cg->gloss_channel = -1;
+ stp_allocate_component_data(v, "Channel", NULL, stpi_channel_free, cg);
+ }
+ if (channel >= cg->channel_count)
+ {
+ unsigned oc = cg->channel_count;
+ cg->c = stp_realloc(cg->c, sizeof(stpi_channel_t) * (channel + 1));
+ memset(cg->c + oc, 0, sizeof(stpi_channel_t) * (channel + 1 - oc));
+ if (channel >= cg->channel_count)
+ cg->channel_count = channel + 1;
+ }
+ chan = cg->c + channel;
+ if (subchannel >= chan->subchannel_count)
+ {
+ unsigned oc = chan->subchannel_count;
+ chan->sc =
+ stp_realloc(chan->sc, sizeof(stpi_subchannel_t) * (subchannel + 1));
+ (void) memset
+ (chan->sc + oc, 0, sizeof(stpi_subchannel_t) * (subchannel + 1 - oc));
+ chan->sc[subchannel].value = value;
+ if (subchannel >= chan->subchannel_count)
+ chan->subchannel_count = subchannel + 1;
+ }
+ chan->sc[subchannel].value = value;
+ chan->sc[subchannel].s_density = 65535;
+ chan->sc[subchannel].cutoff = 0.75;
+}
+
+double
+stp_channel_get_value(stp_vars_t *v, unsigned color, unsigned subchannel)
+{
+ stpi_subchannel_t *sch = get_channel(v, color, subchannel);
+ if (sch)
+ return sch->value;
+ else
+ return -1;
+}
+
+void
+stp_channel_set_density_adjustment(stp_vars_t *v, int color, int subchannel,
+ double adjustment)
+{
+ stpi_subchannel_t *sch = get_channel(v, color, subchannel);
+ if ((strcmp(stp_get_string_parameter(v, "STPIOutputType"), "Raw") == 0 &&
+ strcmp(stp_get_string_parameter(v, "ColorCorrection"), "None") == 0) ||
+ strcmp(stp_get_string_parameter(v, "ColorCorrection"), "Raw") == 0 ||
+ strcmp(stp_get_string_parameter(v, "ColorCorrection"), "Predithered") == 0)
+ {
+ stp_dprintf(STP_DBG_INK, v,
+ "Ignoring channel_density channel %d subchannel %d adjustment %f\n",
+ color, subchannel, adjustment);
+ }
+ else
+ {
+ stp_dprintf(STP_DBG_INK, v,
+ "channel_density channel %d subchannel %d adjustment %f\n",
+ color, subchannel, adjustment);
+ if (sch && adjustment >= 0 && adjustment <= 1)
+ sch->s_density = adjustment * 65535;
+ }
+}
+
+double
+stp_channel_get_density_adjustment(stp_vars_t *v, int color, int subchannel)
+{
+ stpi_subchannel_t *sch = get_channel(v, color, subchannel);
+ if (sch)
+ return sch->s_density / 65535.0;
+ else
+ return -1;
+}
+
+void
+stp_channel_set_ink_limit(stp_vars_t *v, double limit)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ stp_dprintf(STP_DBG_INK, v, "ink_limit %f\n", limit);
+ if (limit > 0)
+ cg->ink_limit = 65535 * limit;
+}
+
+double
+stp_channel_get_ink_limit(stp_vars_t *v)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ return cg->ink_limit / 65535.0;
+}
+
+void
+stp_channel_set_black_channel(stp_vars_t *v, int channel)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ stp_dprintf(STP_DBG_INK, v, "black_channel %d\n", channel);
+ cg->black_channel = channel;
+}
+
+int
+stp_channel_get_black_channel(stp_vars_t *v)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ return cg->black_channel;
+}
+
+void
+stp_channel_set_gloss_channel(stp_vars_t *v, int channel)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ stp_dprintf(STP_DBG_INK, v, "gloss_channel %d\n", channel);
+ cg->gloss_channel = channel;
+}
+
+int
+stp_channel_get_gloss_channel(stp_vars_t *v)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ return cg->gloss_channel;
+}
+
+void
+stp_channel_set_gloss_limit(stp_vars_t *v, double limit)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ stp_dprintf(STP_DBG_INK, v, "gloss_limit %f\n", limit);
+ if (limit > 0)
+ cg->gloss_limit = 65535 * limit;
+}
+
+double
+stp_channel_get_gloss_limit(stp_vars_t *v)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ return cg->gloss_limit / 65535.0;
+}
+
+void
+stp_channel_set_cutoff_adjustment(stp_vars_t *v, int color, int subchannel,
+ double adjustment)
+{
+ stpi_subchannel_t *sch = get_channel(v, color, subchannel);
+ stp_dprintf(STP_DBG_INK, v,
+ "channel_cutoff channel %d subchannel %d adjustment %f\n",
+ color, subchannel, adjustment);
+ if (sch && adjustment >= 0)
+ sch->cutoff = adjustment;
+}
+
+double
+stp_channel_get_cutoff_adjustment(stp_vars_t *v, int color, int subchannel)
+{
+ stpi_subchannel_t *sch = get_channel(v, color, subchannel);
+ if (sch)
+ return sch->cutoff;
+ else
+ return -1.0;
+}
+
+void
+stp_channel_set_curve(stp_vars_t *v, int color, const stp_curve_t *curve)
+{
+ stpi_channel_t *ch;
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ if (!cg || color >= cg->channel_count)
+ return;
+ ch = &(cg->c[color]);
+ stp_dprintf(STP_DBG_INK, v, "set_curve channel %d set curve\n", color);
+ if (ch)
+ {
+ if (curve)
+ ch->curve = stp_curve_create_copy(curve);
+ else
+ ch->curve = NULL;
+ }
+}
+
+const stp_curve_t *
+stp_channel_get_curve(stp_vars_t *v, int color)
+{
+ stpi_channel_t *ch;
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ if (!cg || color >= cg->channel_count)
+ return NULL;
+ ch = &(cg->c[color]);
+ if (ch)
+ return ch->curve;
+ else
+ return NULL;
+}
+
+static int
+input_has_special_channels(const stp_vars_t *v)
+{
+ const stpi_channel_group_t *cg =
+ ((const stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ return (cg->curve_count > 0);
+}
+
+static int
+output_has_gloss(const stp_vars_t *v)
+{
+ const stpi_channel_group_t *cg =
+ ((const stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ return (cg->gloss_channel >= 0);
+}
+
+static int
+input_needs_splitting(const stp_vars_t *v)
+{
+ const stpi_channel_group_t *cg =
+ ((const stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+#if 0
+ return cg->total_channels != cg->input_channels;
+#else
+ int i;
+ if (!cg || cg->channel_count <= 0)
+ return 0;
+ for (i = 0; i < cg->channel_count; i++)
+ {
+ if (cg->c[i].subchannel_count > 1)
+ return 1;
+ }
+ return 0;
+#endif
+}
+
+
+void
+stp_channel_initialize(stp_vars_t *v, stp_image_t *image,
+ int input_channel_count)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ int width = stp_image_width(image);
+ int curve_count = 0;
+ int i, j, k;
+ if (!cg)
+ {
+ cg = stp_zalloc(sizeof(stpi_channel_group_t));
+ cg->black_channel = -1;
+ stp_allocate_component_data(v, "Channel", NULL, stpi_channel_free, cg);
+ }
+ if (cg->initialized)
+ return;
+ cg->initialized = 1;
+ cg->max_density = 0;
+ if (cg->black_channel < -1 || cg->black_channel >= cg->channel_count)
+ cg->black_channel = -1;
+ for (i = 0; i < cg->channel_count; i++)
+ {
+ stpi_channel_t *c = &(cg->c[i]);
+ int sc = c->subchannel_count;
+ if (c->curve)
+ {
+ curve_count++;
+ stp_curve_resample(c->curve, 4096);
+ c->hue_map = stp_curve_get_data(c->curve, &(c->h_count));
+ cg->curve_count++;
+ }
+ if (sc > 1)
+ {
+ int val = 0;
+ int next_breakpoint;
+ c->lut = stp_zalloc(sizeof(unsigned short) * sc * 65536);
+ next_breakpoint = c->sc[0].value * 65535 * c->sc[0].cutoff;
+ if (next_breakpoint > 65535)
+ next_breakpoint = 65535;
+ while (val <= next_breakpoint)
+ {
+ int value = (int) ((double) val / c->sc[0].value);
+ c->lut[val * sc + sc - 1] = value;
+ val++;
+ }
+
+ for (k = 0; k < sc - 1; k++)
+ {
+ double this_val = c->sc[k].value;
+ double next_val = c->sc[k + 1].value;
+ double this_cutoff = c->sc[k].cutoff;
+ double next_cutoff = c->sc[k + 1].cutoff;
+ int range;
+ int base = val;
+ double cutoff = sqrt(this_cutoff * next_cutoff);
+ next_breakpoint = next_val * 65535 * cutoff;
+ if (next_breakpoint > 65535)
+ next_breakpoint = 65535;
+ range = next_breakpoint - val;
+ while (val <= next_breakpoint)
+ {
+ double where = ((double) val - base) / (double) range;
+ double lower_val = base * (1.0 - where);
+ double lower_amount = lower_val / this_val;
+ double upper_amount = (val - lower_val) / next_val;
+ c->lut[val * sc + sc - k - 2] = upper_amount;
+ c->lut[val * sc + sc - k - 1] = lower_amount;
+ val++;
+ }
+ }
+ while (val <= 65535)
+ {
+ c->lut[val * sc] = val / c->sc[sc - 1].value;
+ val++;
+ }
+ }
+ cg->total_channels += c->subchannel_count;
+ for (j = 0; j < c->subchannel_count; j++)
+ cg->max_density += c->sc[j].s_density;
+ }
+ if (cg->gloss_channel >= 0)
+ {
+ for (i = 0; i < cg->channel_count; i++)
+ {
+ if (cg->gloss_channel == i)
+ break;
+ cg->gloss_physical_channel += cg->c[i].subchannel_count;
+ }
+ }
+
+ cg->input_channels = input_channel_count;
+ cg->width = width;
+ cg->alloc_data_1 =
+ stp_malloc(sizeof(unsigned short) * cg->total_channels * width);
+ cg->output_data = cg->alloc_data_1;
+ if (curve_count == 0)
+ {
+ if (input_needs_splitting(v))
+ {
+ cg->alloc_data_2 =
+ stp_malloc(sizeof(unsigned short) * cg->input_channels * width);
+ cg->input_data = cg->alloc_data_2;
+ cg->split_input = cg->input_data;
+ }
+ else if (cg->gloss_channel != -1)
+ {
+ cg->alloc_data_2 =
+ stp_malloc(sizeof(unsigned short) * cg->input_channels * width);
+ cg->input_data = cg->alloc_data_2;
+ }
+ else
+ cg->input_data = cg->output_data;
+ }
+ else
+ {
+ cg->alloc_data_2 =
+ stp_malloc(sizeof(unsigned short) * cg->input_channels * width);
+ cg->input_data = cg->alloc_data_2;
+ if (input_needs_splitting(v))
+ {
+ cg->alloc_data_3 =
+ stp_malloc(sizeof(unsigned short) * cg->channel_count * width);
+ cg->multi_tmp = cg->alloc_data_3;
+ cg->split_input = cg->multi_tmp;
+ }
+ else
+ {
+ cg->multi_tmp = cg->alloc_data_1;
+ }
+ }
+ stp_dprintf(STP_DBG_INK, v, "stp_channel_initialize:\n");
+ stp_dprintf(STP_DBG_INK, v, " channel_count %d\n", cg->channel_count);
+ stp_dprintf(STP_DBG_INK, v, " total_channels %d\n", cg->total_channels);
+ stp_dprintf(STP_DBG_INK, v, " input_channels %d\n", cg->input_channels);
+ stp_dprintf(STP_DBG_INK, v, " width %d\n", cg->width);
+ stp_dprintf(STP_DBG_INK, v, " ink_limit %d\n", cg->ink_limit);
+ stp_dprintf(STP_DBG_INK, v, " gloss_limit %d\n", cg->gloss_limit);
+ stp_dprintf(STP_DBG_INK, v, " max_density %d\n", cg->max_density);
+ stp_dprintf(STP_DBG_INK, v, " curve_count %d\n", cg->curve_count);
+ stp_dprintf(STP_DBG_INK, v, " black_channel %d\n", cg->black_channel);
+ stp_dprintf(STP_DBG_INK, v, " gloss_channel %d\n", cg->gloss_channel);
+ stp_dprintf(STP_DBG_INK, v, " input_data %p\n",
+ (void *) cg->input_data);
+ stp_dprintf(STP_DBG_INK, v, " multi_tmp %p\n",
+ (void *) cg->multi_tmp);
+ stp_dprintf(STP_DBG_INK, v, " split_input %p\n",
+ (void *) cg->split_input);
+ stp_dprintf(STP_DBG_INK, v, " output_data %p\n",
+ (void *) cg->output_data);
+ stp_dprintf(STP_DBG_INK, v, " alloc_data_1 %p\n",
+ (void *) cg->alloc_data_1);
+ stp_dprintf(STP_DBG_INK, v, " alloc_data_2 %p\n",
+ (void *) cg->alloc_data_2);
+ stp_dprintf(STP_DBG_INK, v, " alloc_data_3 %p\n",
+ (void *) cg->alloc_data_3);
+ for (i = 0; i < cg->channel_count; i++)
+ {
+ stp_dprintf(STP_DBG_INK, v, " Channel %d:\n", i);
+ for (j = 0; j < cg->c[i].subchannel_count; j++)
+ {
+ stpi_subchannel_t *sch = &(cg->c[i].sc[j]);
+ stp_dprintf(STP_DBG_INK, v, " Subchannel %d:\n", j);
+ stp_dprintf(STP_DBG_INK, v, " value %.3f:\n", sch->value);
+ stp_dprintf(STP_DBG_INK, v, " lower %.3f:\n", sch->lower);
+ stp_dprintf(STP_DBG_INK, v, " upper %.3f:\n", sch->upper);
+ stp_dprintf(STP_DBG_INK, v, " cutoff %.3f:\n", sch->cutoff);
+ stp_dprintf(STP_DBG_INK, v, " density %d:\n", sch->s_density);
+ }
+ }
+}
+
+static void
+clear_channel(unsigned short *data, unsigned width, unsigned depth)
+{
+ int i;
+ width *= depth;
+ for (i = 0; i < width; i += depth)
+ data[i] = 0;
+}
+
+static int
+scale_channel(unsigned short *data, unsigned width, unsigned depth,
+ unsigned short density)
+{
+ int i;
+ int retval = 0;
+ unsigned short previous_data = 0;
+ unsigned short previous_value = 0;
+ width *= depth;
+ for (i = 0; i < width; i += depth)
+ {
+ if (data[i] == previous_data)
+ data[i] = previous_value;
+ else if (data[i] == (unsigned short) 65535)
+ {
+ data[i] = density;
+ retval = 1;
+ }
+ else if (data[i] > 0)
+ {
+ unsigned short tval = (32767u + data[i] * density) / 65535u;
+ previous_data = data[i];
+ if (tval)
+ retval = 1;
+ previous_value = (unsigned short) tval;
+ data[i] = (unsigned short) tval;
+ }
+ }
+ return retval;
+}
+
+static int
+scan_channel(unsigned short *data, unsigned width, unsigned depth)
+{
+ int i;
+ width *= depth;
+ for (i = 0; i < width; i += depth)
+ {
+ if (data[i])
+ return 1;
+ }
+ return 0;
+}
+
+static inline unsigned
+ink_sum(const unsigned short *data, int total_channels)
+{
+ int j;
+ unsigned total_ink = 0;
+ for (j = 0; j < total_channels; j++)
+ total_ink += data[j];
+ return total_ink;
+}
+
+static int
+limit_ink(const stp_vars_t *v)
+{
+ int i;
+ int retval = 0;
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ unsigned short *ptr = cg->output_data;
+ if (cg->ink_limit == 0 || cg->ink_limit >= cg->max_density)
+ return 0;
+ for (i = 0; i < cg->width; i++)
+ {
+ int total_ink = ink_sum(ptr, cg->total_channels);
+ if (total_ink > cg->ink_limit) /* Need to limit ink? */
+ {
+ int j;
+ /*
+ * FIXME we probably should first try to convert light ink to dark
+ */
+ double ratio = (double) cg->ink_limit / (double) total_ink;
+ for (j = 0; j < cg->total_channels; j++)
+ ptr[j] *= ratio;
+ retval = 1;
+ }
+ ptr += cg->total_channels;
+ }
+ return retval;
+}
+
+static inline int
+mem_eq(const unsigned short *i1, const unsigned short *i2, int count)
+{
+ int i;
+ for (i = 0; i < count; i++)
+ if (i1[i] != i2[i])
+ return 0;
+ return 1;
+}
+
+static void
+copy_channels(const stp_vars_t *v)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ int i, j, k;
+ const unsigned short *input = cg->input_data;
+ unsigned short *output = cg->output_data;
+ for (i = 0; i < cg->width; i++)
+ {
+ for (j = 0; j < cg->channel_count; j++)
+ {
+ stpi_channel_t *ch = &(cg->c[j]);
+ for (k = 0; k < ch->subchannel_count; k++)
+ {
+ if (cg->gloss_channel != j)
+ {
+ *output = *input++;
+ }
+ output++;
+ }
+ }
+ }
+}
+
+static inline double
+compute_hue(int c, int m, int y, int max)
+{
+ double h;
+ if (max == c)
+ h = (m - y) / (double) max;
+ else if (max == m)
+ h = 2 + ((y - c) / (double) max);
+ else
+ h = 4 + ((c - m) / (double) max);
+ if (h < 0)
+ h += 6;
+ else if (h >= 6)
+ h -= 6;
+ return h;
+}
+
+static inline double
+interpolate_value(const double *vec, double val)
+{
+ double base = floor(val);
+ double frac = val - base;
+ int ibase = (int) base;
+ double lval = vec[ibase];
+ if (frac > 0)
+ lval += (vec[ibase + 1] - lval) * frac;
+ return lval;
+}
+
+static void
+generate_special_channels(const stp_vars_t *v)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ int i, j;
+ const unsigned short *input_cache = NULL;
+ const unsigned short *output_cache = NULL;
+ const unsigned short *input = cg->input_data;
+ unsigned short *output = cg->multi_tmp;
+ int outbytes = cg->channel_count * sizeof(unsigned short);
+ for (i = 0; i < cg->width;
+ input += cg->input_channels, output += cg->channel_count, i++)
+ {
+ if (input_cache && mem_eq(input_cache, input, cg->input_channels))
+ {
+ memcpy(output, output_cache, outbytes);
+ }
+ else
+ {
+ int c = input[STP_ECOLOR_C];
+ int m = input[STP_ECOLOR_M];
+ int y = input[STP_ECOLOR_Y];
+ int min = FMIN(c, FMIN(m, y));
+ int max = FMAX(c, FMAX(m, y));
+ if (max > min) /* Otherwise it's gray, and we don't care */
+ {
+ double hue;
+ /*
+ * We're only interested in converting color components
+ * to special inks. We want to compute the hue and
+ * luminosity to determine what we want to convert.
+ * Since we're eliminating all grayscale component, the
+ * computations become simpler.
+ */
+ c -= min;
+ m -= min;
+ y -= min;
+ max -= min;
+ output[STP_ECOLOR_K] = input[STP_ECOLOR_K];
+ hue = compute_hue(c, m, y, max);
+ for (j = 1; j < cg->channel_count; j++)
+ {
+ stpi_channel_t *ch = &(cg->c[j]);
+ output[j] =
+ max * interpolate_value(ch->hue_map,
+ hue * ch->h_count / 6.0);
+ }
+ output[STP_ECOLOR_C] += min;
+ output[STP_ECOLOR_M] += min;
+ output[STP_ECOLOR_Y] += min;
+ }
+ else
+ {
+ for (j = 0; j < 4; j++)
+ output[j] = input[j];
+ for (j = 4; j < cg->channel_count; j++)
+ output[j] = 0;
+ }
+ }
+ input_cache = input;
+ output_cache = output;
+ }
+}
+
+static void
+split_channels(const stp_vars_t *v, unsigned *zero_mask)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ int i, j, k;
+ int nz[STP_CHANNEL_LIMIT];
+ int outbytes = cg->total_channels * sizeof(unsigned short);
+ const unsigned short *input_cache = NULL;
+ const unsigned short *output_cache = NULL;
+ const unsigned short *input = cg->split_input;
+ unsigned short *output = cg->output_data;
+ for (i = 0; i < cg->total_channels; i++)
+ nz[i] = 0;
+ for (i = 0; i < cg->width; i++)
+ {
+ int zero_ptr = 0;
+ if (input_cache && mem_eq(input_cache, input, cg->input_channels))
+ {
+ memcpy(output, output_cache, outbytes);
+ input += cg->input_channels;
+ output += cg->total_channels;
+ }
+ else
+ {
+ unsigned black_value = 0;
+ unsigned virtual_black = 65535;
+ input_cache = input;
+ output_cache = output;
+ if (cg->black_channel >= 0)
+ black_value = input[cg->black_channel];
+ for (j = 0; j < cg->channel_count; j++)
+ {
+ if (input[j] < virtual_black && j != cg->black_channel)
+ virtual_black = input[j];
+ }
+ black_value += virtual_black / 4;
+ for (j = 0; j < cg->channel_count; j++)
+ {
+ stpi_channel_t *c = &(cg->c[j]);
+ int s_count = c->subchannel_count;
+ if (s_count >= 1)
+ {
+ unsigned i_val = *input++;
+ if (i_val == 0)
+ {
+ for (k = 0; k < s_count; k++)
+ *(output++) = 0;
+ }
+ else if (s_count == 1)
+ {
+ if (c->sc[0].s_density < 65535)
+ i_val = i_val * c->sc[0].s_density / 65535;
+ nz[zero_ptr++] |= *(output++) = i_val;
+ }
+ else
+ {
+ unsigned l_val = i_val;
+ unsigned offset;
+ if (i_val > 0 && black_value && j != cg->black_channel)
+ {
+ l_val += black_value;
+ if (l_val > 65535)
+ l_val = 65535;
+ }
+ offset = l_val * s_count;
+ for (k = 0; k < s_count; k++)
+ {
+ unsigned o_val;
+ if (c->sc[k].s_density > 0)
+ {
+ o_val = c->lut[offset + k];
+ if (i_val != l_val)
+ o_val = o_val * i_val / l_val;
+ if (c->sc[k].s_density < 65535)
+ o_val = o_val * c->sc[k].s_density / 65535;
+ }
+ else
+ o_val = 0;
+ *output++ = o_val;
+ nz[zero_ptr++] |= o_val;
+ }
+ }
+ }
+ }
+ }
+ }
+ if (zero_mask)
+ {
+ *zero_mask = 0;
+ for (i = 0; i < cg->total_channels; i++)
+ if (!nz[i])
+ *zero_mask |= 1 << i;
+ }
+}
+
+static void
+scale_channels(const stp_vars_t *v, unsigned *zero_mask)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ int i, j;
+ int physical_channel = 0;
+ if (zero_mask)
+ *zero_mask = 0;
+ for (i = 0; i < cg->channel_count; i++)
+ {
+ stpi_channel_t *ch = &(cg->c[i]);
+ if (ch->subchannel_count > 0)
+ for (j = 0; j < ch->subchannel_count; j++)
+ {
+ if (cg->gloss_channel != i)
+ {
+ stpi_subchannel_t *sch = &(ch->sc[j]);
+ unsigned density = sch->s_density;
+ unsigned short *output = cg->output_data + physical_channel;
+ if (density == 0)
+ {
+ clear_channel(output, cg->width, cg->total_channels);
+ if (zero_mask)
+ *zero_mask |= 1 << physical_channel;
+ }
+ else if (density != 65535)
+ {
+ if (scale_channel(output, cg->width, cg->total_channels,
+ density) == 0)
+ if (zero_mask)
+ *zero_mask |= 1 << physical_channel;
+ }
+ else if (zero_mask)
+ {
+ if (scan_channel(output, cg->width, cg->total_channels)==0)
+ *zero_mask |= 1 << physical_channel;
+ }
+ }
+ physical_channel++;
+ }
+ }
+}
+
+static void
+generate_gloss(const stp_vars_t *v, unsigned *zero_mask)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ unsigned short *output = cg->output_data;
+ unsigned gloss_mask;
+ int i, j, k;
+ if (cg->gloss_channel == -1 || cg->gloss_limit <= 0)
+ return;
+ gloss_mask = ~(1 << cg->gloss_physical_channel);
+ for (i = 0; i < cg->width; i++)
+ {
+ int physical_channel = 0;
+ unsigned channel_sum = 0;
+ output[cg->gloss_physical_channel] = 0;
+ for (j = 0; j < cg->channel_count; j++)
+ {
+ stpi_channel_t *ch = &(cg->c[j]);
+ for (k = 0; k < ch->subchannel_count; k++)
+ {
+ if (cg->gloss_channel != j)
+ {
+ channel_sum += (unsigned) output[physical_channel];
+ if (channel_sum >= cg->gloss_limit)
+ goto next;
+ }
+ physical_channel++;
+ }
+ }
+ if (channel_sum < cg->gloss_limit)
+ {
+ unsigned gloss_required = cg->gloss_limit - channel_sum;
+ if (gloss_required > 65535)
+ gloss_required = 65535;
+ output[cg->gloss_physical_channel] = gloss_required;
+ if (zero_mask)
+ *zero_mask &= gloss_mask;
+ }
+ next:
+ output += cg->total_channels;
+ }
+}
+
+void
+stp_channel_convert(const stp_vars_t *v, unsigned *zero_mask)
+{
+ if (input_has_special_channels(v))
+ generate_special_channels(v);
+ else if (output_has_gloss(v) && !input_needs_splitting(v))
+ copy_channels(v);
+ if (input_needs_splitting(v))
+ split_channels(v, zero_mask);
+ else
+ scale_channels(v, zero_mask);
+ (void) limit_ink(v);
+ (void) generate_gloss(v, zero_mask);
+}
+
+unsigned short *
+stp_channel_get_input(const stp_vars_t *v)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ return (unsigned short *) cg->input_data;
+}
+
+unsigned short *
+stp_channel_get_output(const stp_vars_t *v)
+{
+ stpi_channel_group_t *cg =
+ ((stpi_channel_group_t *) stp_get_component_data(v, "Channel"));
+ return cg->output_data;
+}
diff --git a/src/main/color-conversion.h b/src/main/color-conversion.h
new file mode 100644
index 0000000..ed87811
--- /dev/null
+++ b/src/main/color-conversion.h
@@ -0,0 +1,189 @@
+/*
+ * "$Id: color-conversion.h,v 1.9 2005/06/30 01:34:58 rlk Exp $"
+ *
+ * Gutenprint color management module - traditional Gimp-Print algorithm.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef GUTENPRINT_INTERNAL_COLOR_CONVERSION_H
+#define GUTENPRINT_INTERNAL_COLOR_CONVERSION_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include <gutenprint/curve-cache.h>
+
+typedef enum
+{
+ COLOR_CORRECTION_DEFAULT,
+ COLOR_CORRECTION_UNCORRECTED,
+ COLOR_CORRECTION_BRIGHT,
+ COLOR_CORRECTION_HUE,
+ COLOR_CORRECTION_ACCURATE,
+ COLOR_CORRECTION_THRESHOLD,
+ COLOR_CORRECTION_DESATURATED,
+ COLOR_CORRECTION_DENSITY,
+ COLOR_CORRECTION_RAW,
+ COLOR_CORRECTION_PREDITHERED
+} color_correction_enum_t;
+
+typedef struct
+{
+ const char *name;
+ const char *text;
+ color_correction_enum_t correction;
+ int correct_hsl;
+} color_correction_t;
+
+typedef enum
+{
+ COLOR_WHITE, /* RGB */
+ COLOR_BLACK, /* CMY */
+ COLOR_UNKNOWN /* Printer-specific uninterpreted */
+} color_model_t;
+
+#define CHANNEL_K 0
+#define CHANNEL_C 1
+#define CHANNEL_M 2
+#define CHANNEL_Y 3
+#define CHANNEL_W 4
+#define CHANNEL_R 5
+#define CHANNEL_G 6
+#define CHANNEL_B 7
+#define CHANNEL_MAX 8
+
+#define CMASK_K (1 << CHANNEL_K)
+#define CMASK_C (1 << CHANNEL_C)
+#define CMASK_M (1 << CHANNEL_M)
+#define CMASK_Y (1 << CHANNEL_Y)
+#define CMASK_W (1 << CHANNEL_W)
+#define CMASK_R (1 << CHANNEL_R)
+#define CMASK_G (1 << CHANNEL_G)
+#define CMASK_B (1 << CHANNEL_B)
+#define CMASK_RAW (1 << CHANNEL_MAX)
+
+typedef struct
+{
+ unsigned channel_id;
+ const char *gamma_name;
+ const char *curve_name;
+ const char *rgb_gamma_name;
+ const char *rgb_curve_name;
+} channel_param_t;
+
+/* Color conversion function */
+typedef unsigned (*stp_convert_t)(const stp_vars_t *vars,
+ const unsigned char *in,
+ unsigned short *out);
+
+#define CMASK_NONE (0)
+#define CMASK_RGB (CMASK_R | CMASK_G | CMASK_B)
+#define CMASK_CMY (CMASK_C | CMASK_M | CMASK_Y)
+#define CMASK_CMYK (CMASK_CMY | CMASK_K)
+#define CMASK_ALL (CMASK_CMYK | CMASK_RGB | CMASK_W)
+#define CMASK_EVERY (CMASK_ALL | CMASK_RAW)
+
+typedef enum
+{
+ COLOR_ID_GRAY,
+ COLOR_ID_WHITE,
+ COLOR_ID_RGB,
+ COLOR_ID_CMY,
+ COLOR_ID_CMYK,
+ COLOR_ID_KCMY,
+ COLOR_ID_RAW
+} color_id_t;
+
+typedef struct
+{
+ const char *name;
+ int input;
+ int output;
+ color_id_t color_id;
+ color_model_t color_model;
+ unsigned channels;
+ int channel_count;
+ color_correction_enum_t default_correction;
+ stp_convert_t conversion_function;
+} color_description_t;
+
+typedef struct
+{
+ const char *name;
+ size_t bits;
+} channel_depth_t;
+
+typedef struct
+{
+ unsigned steps;
+ int channel_depth;
+ int image_width;
+ int in_channels;
+ int out_channels;
+ int channels_are_initialized;
+ int invert_output;
+ const color_description_t *input_color_description;
+ const color_description_t *output_color_description;
+ const color_correction_t *color_correction;
+ stp_cached_curve_t brightness_correction;
+ stp_cached_curve_t contrast_correction;
+ stp_cached_curve_t user_color_correction;
+ stp_cached_curve_t channel_curves[STP_CHANNEL_LIMIT];
+ stp_cached_curve_t hue_angle;
+ double gamma_values[STP_CHANNEL_LIMIT];
+ double hue_angles[STP_CHANNEL_LIMIT];
+ double print_gamma;
+ double app_gamma;
+ double screen_gamma;
+ double contrast;
+ double brightness;
+ int linear_contrast_adjustment;
+ int printed_colorfunc;
+ stp_cached_curve_t hue_map;
+ stp_cached_curve_t lum_map;
+ stp_cached_curve_t sat_map;
+ stp_cached_curve_t gcr_curve;
+ unsigned short *gray_tmp; /* Color -> Gray */
+ unsigned short *cmy_tmp; /* CMY -> CMYK */
+ unsigned char *in_data;
+} lut_t;
+
+extern unsigned stpi_color_convert_to_gray(const stp_vars_t *v,
+ const unsigned char *,
+ unsigned short *);
+extern unsigned stpi_color_convert_to_color(const stp_vars_t *v,
+ const unsigned char *,
+ unsigned short *);
+extern unsigned stpi_color_convert_to_kcmy(const stp_vars_t *v,
+ const unsigned char *,
+ unsigned short *);
+extern unsigned stpi_color_convert_raw(const stp_vars_t *v,
+ const unsigned char *,
+ unsigned short *);
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* GUTENPRINT_INTERNAL_COLOR_CONVERSION_H */
diff --git a/src/main/color-conversions.c b/src/main/color-conversions.c
new file mode 100644
index 0000000..2b354c6
--- /dev/null
+++ b/src/main/color-conversions.c
@@ -0,0 +1,2207 @@
+/*
+ * "$Id: color-conversions.c,v 1.18 2005/07/01 01:40:08 rlk Exp $"
+ *
+ * Gimp-Print color management module - traditional Gimp-Print algorithm.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * This file must include only standard C header files. The core code must
+ * compile on generic platforms that don't support glib, gimp, gtk, etc.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <gutenprint/curve-cache.h>
+#include <math.h>
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#include <string.h>
+#include "color-conversion.h"
+
+#ifdef __GNUC__
+#define inline __inline__
+#endif
+
+/*
+ * RGB to grayscale luminance constants...
+ */
+
+#define LUM_RED 31
+#define LUM_GREEN 61
+#define LUM_BLUE 8
+
+/* rgb/hsl conversions taken from Gimp common/autostretch_hsv.c */
+
+#define FMAX(a, b) ((a) > (b) ? (a) : (b))
+#define FMIN(a, b) ((a) < (b) ? (a) : (b))
+
+static inline void
+calc_rgb_to_hsl(unsigned short *rgb, double *hue, double *sat,
+ double *lightness)
+{
+ double red, green, blue;
+ double h, s, l;
+ double min, max;
+ double delta;
+ int maxval;
+
+ red = rgb[0] / 65535.0;
+ green = rgb[1] / 65535.0;
+ blue = rgb[2] / 65535.0;
+
+ if (red > green)
+ {
+ if (red > blue)
+ {
+ max = red;
+ maxval = 0;
+ }
+ else
+ {
+ max = blue;
+ maxval = 2;
+ }
+ min = FMIN(green, blue);
+ }
+ else
+ {
+ if (green > blue)
+ {
+ max = green;
+ maxval = 1;
+ }
+ else
+ {
+ max = blue;
+ maxval = 2;
+ }
+ min = FMIN(red, blue);
+ }
+
+ l = (max + min) / 2.0;
+ delta = max - min;
+
+ if (delta < .000001) /* Suggested by Eugene Anikin <eugene@anikin.com> */
+ {
+ s = 0.0;
+ h = 0.0;
+ }
+ else
+ {
+ if (l <= .5)
+ s = delta / (max + min);
+ else
+ s = delta / (2 - max - min);
+
+ if (maxval == 0)
+ h = (green - blue) / delta;
+ else if (maxval == 1)
+ h = 2 + (blue - red) / delta;
+ else
+ h = 4 + (red - green) / delta;
+
+ if (h < 0.0)
+ h += 6.0;
+ else if (h > 6.0)
+ h -= 6.0;
+ }
+
+ *hue = h;
+ *sat = s;
+ *lightness = l;
+}
+
+static inline double
+hsl_value(double n1, double n2, double hue)
+{
+ if (hue < 0)
+ hue += 6.0;
+ else if (hue > 6)
+ hue -= 6.0;
+ if (hue < 1.0)
+ return (n1 + (n2 - n1) * hue);
+ else if (hue < 3.0)
+ return (n2);
+ else if (hue < 4.0)
+ return (n1 + (n2 - n1) * (4.0 - hue));
+ else
+ return (n1);
+}
+
+static inline void
+calc_hsl_to_rgb(unsigned short *rgb, double h, double s, double l)
+{
+ if (s < .0000001)
+ {
+ if (l > 1)
+ l = 1;
+ else if (l < 0)
+ l = 0;
+ rgb[0] = l * 65535;
+ rgb[1] = l * 65535;
+ rgb[2] = l * 65535;
+ }
+ else
+ {
+ double m1, m2;
+ double h1, h2;
+ h1 = h + 2;
+ h2 = h - 2;
+
+ if (l < .5)
+ m2 = l * (1 + s);
+ else
+ m2 = l + s - (l * s);
+ m1 = (l * 2) - m2;
+ rgb[0] = 65535 * hsl_value(m1, m2, h1);
+ rgb[1] = 65535 * hsl_value(m1, m2, h);
+ rgb[2] = 65535 * hsl_value(m1, m2, h2);
+ }
+}
+
+static inline double
+update_saturation(double sat, double adjust, double isat, int bright_colors)
+{
+ if (bright_colors || adjust < 1)
+ sat *= adjust;
+ else if (adjust > 1)
+ {
+ double s1 = sat * adjust;
+ double s2 = 1.0 - ((1.0 - sat) * isat);
+ sat = FMIN(s1, s2);
+ }
+ if (sat > 1)
+ sat = 1.0;
+ return sat;
+}
+
+static inline double
+interpolate_value(const double *vec, double val)
+{
+ double base = floor(val);
+ double frac = val - base;
+ int ibase = (int) base;
+ double lval = vec[ibase];
+ if (frac > 0)
+ lval += (vec[ibase + 1] - lval) * frac;
+ return lval;
+}
+
+static inline void
+update_saturation_from_rgb(unsigned short *rgb,
+ const unsigned short *brightness_lookup,
+ double adjust, double isat, int do_usermap)
+{
+ double h, s, l;
+ calc_rgb_to_hsl(rgb, &h, &s, &l);
+ if (do_usermap)
+ {
+ unsigned short ub = (unsigned short) (l * 65535);
+ unsigned short val = brightness_lookup[ub];
+ l = ((double) val) / 65535;
+ if (val < ub)
+ s = s * (65535 - ub) / (65535 - val);
+ }
+ s = update_saturation(s, adjust, isat, 0);
+ calc_hsl_to_rgb(rgb, h, s, l);
+}
+
+static inline double
+adjust_hue(const double *hue_map, double hue, size_t points)
+{
+ if (hue_map)
+ {
+ hue += interpolate_value(hue_map, hue * points / 6.0);
+ if (hue < 0.0)
+ hue += 6.0;
+ else if (hue >= 6.0)
+ hue -= 6.0;
+ }
+ return hue;
+}
+
+static inline void
+adjust_hsl(unsigned short *rgbout, lut_t *lut, double ssat, double isat,
+ int split_saturation, int adjust_hue_only, int bright_colors)
+{
+ const double *hue_map = CURVE_CACHE_FAST_DOUBLE(&(lut->hue_map));
+ const double *lum_map = CURVE_CACHE_FAST_DOUBLE(&(lut->lum_map));
+ const double *sat_map = CURVE_CACHE_FAST_DOUBLE(&(lut->sat_map));
+ if ((split_saturation || lum_map || hue_map || sat_map) &&
+ (rgbout[0] != rgbout[1] || rgbout[0] != rgbout[2]))
+ {
+ size_t hue_count = CURVE_CACHE_FAST_COUNT(&(lut->hue_map));
+ size_t lum_count = CURVE_CACHE_FAST_COUNT(&(lut->lum_map));
+ size_t sat_count = CURVE_CACHE_FAST_COUNT(&(lut->sat_map));
+ double h, s, l;
+ double oh;
+ rgbout[0] ^= 65535;
+ rgbout[1] ^= 65535;
+ rgbout[2] ^= 65535;
+ calc_rgb_to_hsl(rgbout, &h, &s, &l);
+ s = update_saturation(s, ssat, isat, 0);
+ if (!adjust_hue_only && lut->sat_map.d_cache)
+ {
+ double nh = h * sat_count / 6.0;
+ double tmp = interpolate_value(sat_map, nh);
+ if (tmp < .9999 || tmp > 1.0001)
+ {
+ s = update_saturation(s, tmp, tmp > 1.0 ? 1.0 / tmp : 1.0,
+ bright_colors);
+ }
+ }
+ oh = h;
+ h = adjust_hue(hue_map, h, hue_count);
+ calc_hsl_to_rgb(rgbout, h, s, l);
+
+ if (!adjust_hue_only && s > 0.00001)
+ {
+ /*
+ * Perform luminosity adjustment only on color component.
+ * This way the luminosity of the gray component won't be affected.
+ * We'll add the gray back at the end.
+ */
+
+ unsigned gray = FMIN(rgbout[0], FMIN(rgbout[1], rgbout[2]));
+ int i;
+ /*
+ * Scale the components by the amount of color left.
+ * This way the luminosity calculations will come out right.
+ */
+ if (gray > 0)
+ for (i = 0; i < 3; i++)
+ rgbout[i] = (rgbout[i] - gray) * 65535.0 / (65535 - gray);
+
+ calc_rgb_to_hsl(rgbout, &h, &s, &l);
+ if (lut->lum_map.d_cache && l > 0.00001 && l < .99999)
+ {
+ double nh = oh * lum_count / 6.0;
+ double oel = interpolate_value(lum_map,nh);
+ if (oel <= 1)
+ l *= oel;
+ else
+ {
+ double g1 = pow(l, 1.0 / oel);
+ double g2 = 1.0 - pow(1.0 - l, oel);
+ l = FMIN(g1, g2);
+ }
+ }
+ calc_hsl_to_rgb(rgbout, h, s, l);
+ if (gray > 0)
+ for (i = 0; i < 3; i++)
+ rgbout[i] = gray + (rgbout[i] * (65535 - gray) / 65535.0);
+ }
+
+ rgbout[0] ^= 65535;
+ rgbout[1] ^= 65535;
+ rgbout[2] ^= 65535;
+ }
+}
+
+static inline void
+lookup_rgb(lut_t *lut, unsigned short *rgbout,
+ const unsigned short *red, const unsigned short *green,
+ const unsigned short *blue, unsigned steps)
+{
+ if (steps == 65536)
+ {
+ rgbout[0] = red[rgbout[0]];
+ rgbout[1] = green[rgbout[1]];
+ rgbout[2] = blue[rgbout[2]];
+ }
+ else
+ {
+ rgbout[0] = red[rgbout[0] / 257];
+ rgbout[1] = green[rgbout[1] / 257];
+ rgbout[2] = blue[rgbout[2] / 257];
+ }
+}
+
+static inline int
+short_eq(const unsigned short *i1, const unsigned short *i2, size_t count)
+{
+#if 1
+ int i;
+ for (i = 0; i < count; i++)
+ if (i1[i] != i2[i])
+ return 0;
+ return 1;
+#else
+ return !memcmp(i1, i2, count * sizeof(unsigned short));
+#endif
+}
+
+static inline void
+short_copy(unsigned short *out, const unsigned short *in, size_t count)
+{
+#if 1
+ int i;
+ for (i = 0; i < count; i++)
+ out[i] = in[i];
+#else
+ (void) memcpy(out, in, count * sizeof(unsigned short));
+#endif
+}
+
+static unsigned
+generic_cmy_to_kcmy(const stp_vars_t *vars, const unsigned short *in,
+ unsigned short *out)
+{
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color"));
+ int width = lut->image_width;
+ int step = 65535 / (lut->steps - 1); /* 1 or 257 */
+
+ const unsigned short *gcr_lookup;
+ const unsigned short *black_lookup;
+ int i;
+ int i0 = -1;
+ int i1 = -1;
+ int i2 = -1;
+ unsigned short o0 = 0;
+ unsigned short o1 = 0;
+ unsigned short o2 = 0;
+ unsigned short o3 = 0;
+ unsigned short nz0 = 0;
+ unsigned short nz1 = 0;
+ unsigned short nz2 = 0;
+ unsigned short nz3 = 0;
+
+ stp_curve_resample(stp_curve_cache_get_curve(&(lut->gcr_curve)), lut->steps);
+ gcr_lookup = stp_curve_cache_get_ushort_data(&(lut->gcr_curve));
+ stp_curve_resample(stp_curve_cache_get_curve
+ (&(lut->channel_curves[CHANNEL_K])), lut->steps);
+ black_lookup =
+ stp_curve_cache_get_ushort_data(&(lut->channel_curves[CHANNEL_K]));
+
+ for (i = 0; i < width; i++, out += 4, in += 3)
+ {
+ if (i0 == in[0] && i1 == in[1] && i2 == in[2])
+ {
+ out[0] = o0;
+ out[1] = o1;
+ out[2] = o2;
+ out[3] = o3;
+ }
+ else
+ {
+ int k;
+ i0 = in[0];
+ i1 = in[1];
+ i2 = in[2];
+ k = FMIN(i0, FMIN(i1, i2));
+ out[0] = 0;
+ out[1] = i0;
+ out[2] = i1;
+ out[3] = i2;
+ if (k > 0)
+ {
+ int where, resid;
+ int kk;
+ if (lut->steps == 65536)
+ kk = gcr_lookup[k];
+ else
+ {
+ where = k / step;
+ resid = k % step;
+ kk = gcr_lookup[where];
+ if (resid > 0)
+ kk += (gcr_lookup[where + 1] - gcr_lookup[where]) * resid /
+ step;
+ }
+ if (kk > k)
+ kk = k;
+ if (kk > 0)
+ {
+ if (lut->steps == 65536)
+ out[0] = black_lookup[kk];
+ else
+ {
+ int k_out;
+ where = kk / step;
+ resid = kk % step;
+ k_out = black_lookup[where];
+ if (resid > 0)
+ k_out +=
+ (black_lookup[where + 1] - black_lookup[where]) *
+ resid / step;
+ out[0] = k_out;
+ }
+ out[1] -= kk;
+ out[2] -= kk;
+ out[3] -= kk;
+ }
+ }
+ o0 = out[0];
+ o1 = out[1];
+ o2 = out[2];
+ o3 = out[3];
+ nz0 |= o0;
+ nz1 |= o1;
+ nz2 |= o2;
+ nz3 |= o3;
+ }
+ }
+ return (nz0 ? 0 : 1) + (nz1 ? 0 : 2) + (nz2 ? 0 : 4) + (nz3 ? 0 : 8);
+}
+
+static unsigned
+raw_cmy_to_kcmy(const stp_vars_t *vars, const unsigned short *in,
+ unsigned short *out)
+{
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color"));
+ int width = lut->image_width;
+
+ int i;
+ int j;
+ unsigned short nz[4];
+ unsigned retval = 0;
+ const unsigned short *input_cache = NULL;
+ const unsigned short *output_cache = NULL;
+
+ memset(nz, 0, sizeof(nz));
+
+ for (i = 0; i < width; i++, out += 4, in += 3)
+ {
+ if (input_cache && short_eq(input_cache, in, 3))
+ short_copy(out, output_cache, 4);
+ else
+ {
+ int c = in[0];
+ int m = in[1];
+ int y = in[2];
+ int k = FMIN(c, FMIN(m, y));
+ input_cache = in;
+ out[0] = 0;
+ for (j = 0; j < 3; j++)
+ out[j + 1] = in[j];
+ if (k > 0)
+ {
+ out[0] = k;
+ out[1] -= k;
+ out[2] -= k;
+ out[3] -= k;
+ }
+ output_cache = out;
+ for (j = 0; j < 4; j++)
+ if (out[j])
+ nz[j] = 1;
+ }
+ }
+ for (j = 0; j < 4; j++)
+ if (nz[j] == 0)
+ retval |= (1 << j);
+ return retval;
+}
+
+#define GENERIC_COLOR_FUNC(fromname, toname) \
+static unsigned \
+fromname##_to_##toname(const stp_vars_t *vars, const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ if (!lut->printed_colorfunc) \
+ { \
+ lut->printed_colorfunc = 1; \
+ stp_dprintf(STP_DBG_COLORFUNC, vars, \
+ "Colorfunc is %s_%d_to_%s, %s, %s, %d, %d\n", \
+ #fromname, lut->channel_depth, #toname, \
+ lut->input_color_description->name, \
+ lut->output_color_description->name, \
+ lut->steps, lut->invert_output); \
+ } \
+ if (lut->channel_depth == 8) \
+ return fromname##_8_to_##toname(vars, in, out); \
+ else \
+ return fromname##_16_to_##toname(vars, in, out); \
+}
+
+#define COLOR_TO_COLOR_FUNC(T, bits) \
+static unsigned \
+color_##bits##_to_color(const stp_vars_t *vars, const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ double isat = 1.0; \
+ double ssat = stp_get_float_parameter(vars, "Saturation"); \
+ double sbright = stp_get_float_parameter(vars, "Brightness"); \
+ int i0 = -1; \
+ int i1 = -1; \
+ int i2 = -1; \
+ unsigned short o0 = 0; \
+ unsigned short o1 = 0; \
+ unsigned short o2 = 0; \
+ unsigned short nz0 = 0; \
+ unsigned short nz1 = 0; \
+ unsigned short nz2 = 0; \
+ const unsigned short *red; \
+ const unsigned short *green; \
+ const unsigned short *blue; \
+ const unsigned short *brightness; \
+ const unsigned short *contrast; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ int compute_saturation = ssat <= .99999 || ssat >= 1.00001; \
+ int split_saturation = ssat > 1.4; \
+ int bright_color_adjustment = 0; \
+ int hue_only_color_adjustment = 0; \
+ int do_user_adjustment = 0; \
+ if (lut->color_correction->correction == COLOR_CORRECTION_BRIGHT) \
+ bright_color_adjustment = 1; \
+ if (lut->color_correction->correction == COLOR_CORRECTION_HUE) \
+ hue_only_color_adjustment = 1; \
+ if (sbright != 1) \
+ do_user_adjustment = 1; \
+ compute_saturation |= do_user_adjustment; \
+ \
+ for (i = CHANNEL_C; i <= CHANNEL_Y; i++) \
+ stp_curve_resample(stp_curve_cache_get_curve(&(lut->channel_curves[i])), \
+ 1 << bits); \
+ stp_curve_resample \
+ (stp_curve_cache_get_curve(&(lut->brightness_correction)), 65536); \
+ stp_curve_resample \
+ (stp_curve_cache_get_curve(&(lut->contrast_correction)), 1 << bits); \
+ red = \
+ stp_curve_cache_get_ushort_data(&(lut->channel_curves[CHANNEL_C])); \
+ green = \
+ stp_curve_cache_get_ushort_data(&(lut->channel_curves[CHANNEL_M])); \
+ blue = \
+ stp_curve_cache_get_ushort_data(&(lut->channel_curves[CHANNEL_Y])); \
+ brightness= \
+ stp_curve_cache_get_ushort_data(&(lut->brightness_correction)); \
+ contrast = \
+ stp_curve_cache_get_ushort_data(&(lut->contrast_correction)); \
+ (void) stp_curve_cache_get_double_data(&(lut->hue_map)); \
+ (void) stp_curve_cache_get_double_data(&(lut->lum_map)); \
+ (void) stp_curve_cache_get_double_data(&(lut->sat_map)); \
+ \
+ if (split_saturation) \
+ ssat = sqrt(ssat); \
+ if (ssat > 1) \
+ isat = 1.0 / ssat; \
+ for (i = 0; i < lut->image_width; i++) \
+ { \
+ if (i0 == s_in[0] && i1 == s_in[1] && i2 == s_in[2]) \
+ { \
+ out[0] = o0; \
+ out[1] = o1; \
+ out[2] = o2; \
+ } \
+ else \
+ { \
+ i0 = s_in[0]; \
+ i1 = s_in[1]; \
+ i2 = s_in[2]; \
+ out[0] = i0 * (65535u / (unsigned) ((1 << bits) - 1)); \
+ out[1] = i1 * (65535u / (unsigned) ((1 << bits) - 1)); \
+ out[2] = i2 * (65535u / (unsigned) ((1 << bits) - 1)); \
+ lookup_rgb(lut, out, contrast, contrast, contrast, 1 << bits); \
+ if ((compute_saturation)) \
+ update_saturation_from_rgb(out, brightness, ssat, isat, \
+ do_user_adjustment); \
+ adjust_hsl(out, lut, ssat, isat, split_saturation, \
+ hue_only_color_adjustment, bright_color_adjustment); \
+ lookup_rgb(lut, out, red, green, blue, 1 << bits); \
+ o0 = out[0]; \
+ o1 = out[1]; \
+ o2 = out[2]; \
+ nz0 |= o0; \
+ nz1 |= o1; \
+ nz2 |= o2; \
+ } \
+ s_in += 3; \
+ out += 3; \
+ } \
+ return (nz0 ? 0 : 1) + (nz1 ? 0 : 2) + (nz2 ? 0 : 4); \
+}
+
+COLOR_TO_COLOR_FUNC(unsigned char, 8)
+COLOR_TO_COLOR_FUNC(unsigned short, 16)
+GENERIC_COLOR_FUNC(color, color)
+
+/*
+ * 'rgb_to_rgb()' - Convert rgb image data to RGB.
+ */
+
+#define FAST_COLOR_TO_COLOR_FUNC(T, bits) \
+static unsigned \
+color_##bits##_to_color_fast(const stp_vars_t *vars, const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int i0 = -1; \
+ int i1 = -1; \
+ int i2 = -1; \
+ int o0 = 0; \
+ int o1 = 0; \
+ int o2 = 0; \
+ int nz0 = 0; \
+ int nz1 = 0; \
+ int nz2 = 0; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ const unsigned short *red; \
+ const unsigned short *green; \
+ const unsigned short *blue; \
+ const unsigned short *brightness; \
+ const unsigned short *contrast; \
+ double isat = 1.0; \
+ double saturation = stp_get_float_parameter(vars, "Saturation"); \
+ double sbright = stp_get_float_parameter(vars, "Brightness"); \
+ int compute_saturation = saturation <= .99999 || saturation >= 1.00001; \
+ int do_user_adjustment = 0; \
+ if (sbright != 1) \
+ do_user_adjustment = 1; \
+ compute_saturation |= do_user_adjustment; \
+ \
+ for (i = CHANNEL_C; i <= CHANNEL_Y; i++) \
+ stp_curve_resample(lut->channel_curves[i].curve, 65536); \
+ stp_curve_resample \
+ (stp_curve_cache_get_curve(&(lut->brightness_correction)), 65536); \
+ stp_curve_resample \
+ (stp_curve_cache_get_curve(&(lut->contrast_correction)), 1 << bits); \
+ red = \
+ stp_curve_cache_get_ushort_data(&(lut->channel_curves[CHANNEL_C])); \
+ green = \
+ stp_curve_cache_get_ushort_data(&(lut->channel_curves[CHANNEL_M])); \
+ blue = \
+ stp_curve_cache_get_ushort_data(&(lut->channel_curves[CHANNEL_Y])); \
+ brightness= \
+ stp_curve_cache_get_ushort_data(&(lut->brightness_correction)); \
+ contrast = \
+ stp_curve_cache_get_ushort_data(&(lut->contrast_correction)); \
+ \
+ if (saturation > 1) \
+ isat = 1.0 / saturation; \
+ for (i = 0; i < lut->image_width; i++) \
+ { \
+ if (i0 == s_in[0] && i1 == s_in[1] && i2 == s_in[2]) \
+ { \
+ out[0] = o0; \
+ out[1] = o1; \
+ out[2] = o2; \
+ } \
+ else \
+ { \
+ i0 = s_in[0]; \
+ i1 = s_in[1]; \
+ i2 = s_in[2]; \
+ out[0] = contrast[s_in[0]]; \
+ out[1] = contrast[s_in[1]]; \
+ out[2] = contrast[s_in[2]]; \
+ if ((compute_saturation)) \
+ update_saturation_from_rgb(out, brightness, saturation, isat, 1); \
+ out[0] = red[out[0]]; \
+ out[1] = green[out[1]]; \
+ out[2] = blue[out[2]]; \
+ o0 = out[0]; \
+ o1 = out[1]; \
+ o2 = out[2]; \
+ nz0 |= o0; \
+ nz1 |= o1; \
+ nz2 |= o2; \
+ } \
+ s_in += 3; \
+ out += 3; \
+ } \
+ return (nz0 ? 0 : 1) + (nz1 ? 0 : 2) + (nz2 ? 0 : 4); \
+}
+
+FAST_COLOR_TO_COLOR_FUNC(unsigned char, 8)
+FAST_COLOR_TO_COLOR_FUNC(unsigned short, 16)
+GENERIC_COLOR_FUNC(color, color_fast)
+
+#define RAW_COLOR_TO_COLOR_FUNC(T, bits) \
+static unsigned \
+color_##bits##_to_color_raw(const stp_vars_t *vars, const unsigned char *in,\
+ unsigned short *out) \
+{ \
+ int i; \
+ int j; \
+ int nz = 0; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ unsigned mask = 0; \
+ if (lut->invert_output) \
+ mask = 0xffff; \
+ \
+ for (i = 0; i < lut->image_width; i++) \
+ { \
+ unsigned bit = 1; \
+ for (j = 0; j < 3; j++, bit += bit) \
+ { \
+ out[j] = (s_in[j] * (65535 / ((1 << bits) - 1))) ^ mask; \
+ if (out[j]) \
+ nz |= bit; \
+ } \
+ s_in += 3; \
+ out += 3; \
+ } \
+ return nz; \
+}
+
+RAW_COLOR_TO_COLOR_FUNC(unsigned char, 8)
+RAW_COLOR_TO_COLOR_FUNC(unsigned short, 16)
+GENERIC_COLOR_FUNC(color, color_raw)
+
+/*
+ * 'gray_to_rgb()' - Convert gray image data to RGB.
+ */
+
+#define GRAY_TO_COLOR_FUNC(T, bits) \
+static unsigned \
+gray_##bits##_to_color(const stp_vars_t *vars, const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int i0 = -1; \
+ int o0 = 0; \
+ int o1 = 0; \
+ int o2 = 0; \
+ int nz0 = 0; \
+ int nz1 = 0; \
+ int nz2 = 0; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ const unsigned short *red; \
+ const unsigned short *green; \
+ const unsigned short *blue; \
+ const unsigned short *user; \
+ \
+ for (i = CHANNEL_C; i <= CHANNEL_Y; i++) \
+ stp_curve_resample(lut->channel_curves[i].curve, 65536); \
+ stp_curve_resample \
+ (stp_curve_cache_get_curve(&(lut->user_color_correction)), 1 << bits); \
+ red = \
+ stp_curve_cache_get_ushort_data(&(lut->channel_curves[CHANNEL_C])); \
+ green = \
+ stp_curve_cache_get_ushort_data(&(lut->channel_curves[CHANNEL_M])); \
+ blue = \
+ stp_curve_cache_get_ushort_data(&(lut->channel_curves[CHANNEL_Y])); \
+ user = \
+ stp_curve_cache_get_ushort_data(&(lut->user_color_correction)); \
+ \
+ for (i = 0; i < lut->image_width; i++) \
+ { \
+ if (i0 == s_in[0]) \
+ { \
+ out[0] = o0; \
+ out[1] = o1; \
+ out[2] = o2; \
+ } \
+ else \
+ { \
+ i0 = s_in[0]; \
+ out[0] = red[user[s_in[0]]]; \
+ out[1] = green[user[s_in[0]]]; \
+ out[2] = blue[user[s_in[0]]]; \
+ o0 = out[0]; \
+ o1 = out[1]; \
+ o2 = out[2]; \
+ nz0 |= o0; \
+ nz1 |= o1; \
+ nz2 |= o2; \
+ } \
+ s_in += 1; \
+ out += 3; \
+ } \
+ return (nz0 ? 0 : 1) + (nz1 ? 0 : 2) + (nz2 ? 0 : 4); \
+}
+
+GRAY_TO_COLOR_FUNC(unsigned char, 8)
+GRAY_TO_COLOR_FUNC(unsigned short, 16)
+GENERIC_COLOR_FUNC(gray, color)
+
+#define GRAY_TO_COLOR_RAW_FUNC(T, bits) \
+static unsigned \
+gray_##bits##_to_color_raw(const stp_vars_t *vars, const unsigned char *in,\
+ unsigned short *out) \
+{ \
+ int i; \
+ int nz = 7; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ unsigned mask = 0; \
+ if (lut->invert_output) \
+ mask = 0xffff; \
+ \
+ for (i = 0; i < lut->image_width; i++) \
+ { \
+ unsigned outval = (s_in[0] * (65535 / (1 << bits))) ^ mask; \
+ out[0] = outval; \
+ out[1] = outval; \
+ out[2] = outval; \
+ if (outval) \
+ nz = 0; \
+ s_in++; \
+ out += 3; \
+ } \
+ return nz; \
+}
+
+GRAY_TO_COLOR_RAW_FUNC(unsigned char, 8)
+GRAY_TO_COLOR_RAW_FUNC(unsigned short, 16)
+GENERIC_COLOR_FUNC(gray, color_raw)
+
+#define COLOR_TO_KCMY_FUNC(name, name2, name3, name4, bits) \
+static unsigned \
+name##_##bits##_to_##name2(const stp_vars_t *vars, const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ size_t real_steps = lut->steps; \
+ unsigned status; \
+ if (!lut->cmy_tmp) \
+ lut->cmy_tmp = stp_malloc(4 * 2 * lut->image_width); \
+ name##_##bits##_to_##name3(vars, in, lut->cmy_tmp); \
+ lut->steps = 65536; \
+ status = name4##_cmy_to_kcmy(vars, lut->cmy_tmp, out); \
+ lut->steps = real_steps; \
+ return status; \
+}
+
+COLOR_TO_KCMY_FUNC(gray, kcmy, color, generic, 8)
+COLOR_TO_KCMY_FUNC(gray, kcmy, color, generic, 16)
+GENERIC_COLOR_FUNC(gray, kcmy)
+
+COLOR_TO_KCMY_FUNC(gray, kcmy_raw, color_raw, raw, 8)
+COLOR_TO_KCMY_FUNC(gray, kcmy_raw, color_raw, raw, 16)
+GENERIC_COLOR_FUNC(gray, kcmy_raw)
+
+COLOR_TO_KCMY_FUNC(color, kcmy, color, generic, 8)
+COLOR_TO_KCMY_FUNC(color, kcmy, color, generic, 16)
+GENERIC_COLOR_FUNC(color, kcmy)
+
+COLOR_TO_KCMY_FUNC(color, kcmy_fast, color_fast, generic, 8)
+COLOR_TO_KCMY_FUNC(color, kcmy_fast, color_fast, generic, 16)
+GENERIC_COLOR_FUNC(color, kcmy_fast)
+
+COLOR_TO_KCMY_FUNC(color, kcmy_raw, color_raw, raw, 8)
+COLOR_TO_KCMY_FUNC(color, kcmy_raw, color_raw, raw, 16)
+GENERIC_COLOR_FUNC(color, kcmy_raw)
+
+
+#define COLOR_TO_KCMY_THRESHOLD_FUNC(T, name) \
+static unsigned \
+name##_to_kcmy_threshold(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int z = 15; \
+ const T *s_in = (const T *) in; \
+ unsigned high_bit = ((1 << ((sizeof(T) * 8) - 1))); \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ int width = lut->image_width; \
+ unsigned mask = 0; \
+ memset(out, 0, width * 4 * sizeof(unsigned short)); \
+ if (lut->invert_output) \
+ mask = (1 << (sizeof(T) * 8)) - 1; \
+ \
+ for (i = 0; i < width; i++, out += 4, s_in += 3) \
+ { \
+ unsigned c = s_in[0] ^ mask; \
+ unsigned m = s_in[1] ^ mask; \
+ unsigned y = s_in[2] ^ mask; \
+ unsigned k = (c < m ? (c < y ? c : y) : (m < y ? m : y)); \
+ if (k >= high_bit) \
+ { \
+ c -= k; \
+ m -= k; \
+ y -= k; \
+ } \
+ if (k >= high_bit) \
+ { \
+ z &= 0xe; \
+ out[0] = 65535; \
+ } \
+ if (c >= high_bit) \
+ { \
+ z &= 0xd; \
+ out[1] = 65535; \
+ } \
+ if (m >= high_bit) \
+ { \
+ z &= 0xb; \
+ out[2] = 65535; \
+ } \
+ if (y >= high_bit) \
+ { \
+ z &= 0x7; \
+ out[3] = 65535; \
+ } \
+ } \
+ return z; \
+}
+
+COLOR_TO_KCMY_THRESHOLD_FUNC(unsigned char, color_8)
+COLOR_TO_KCMY_THRESHOLD_FUNC(unsigned short, color_16)
+GENERIC_COLOR_FUNC(color, kcmy_threshold)
+
+#define CMYK_TO_KCMY_THRESHOLD_FUNC(T, name) \
+static unsigned \
+name##_to_kcmy_threshold(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int z = 15; \
+ const T *s_in = (const T *) in; \
+ unsigned desired_high_bit = 0; \
+ unsigned high_bit = 1 << ((sizeof(T) * 8) - 1); \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ int width = lut->image_width; \
+ memset(out, 0, width * 4 * sizeof(unsigned short)); \
+ if (!lut->invert_output) \
+ desired_high_bit = high_bit; \
+ \
+ for (i = 0; i < width; i++, out += 4, s_in += 4) \
+ { \
+ if ((s_in[3] & high_bit) == desired_high_bit) \
+ { \
+ z &= 0xe; \
+ out[0] = 65535; \
+ } \
+ if ((s_in[0] & high_bit) == desired_high_bit) \
+ { \
+ z &= 0xd; \
+ out[1] = 65535; \
+ } \
+ if ((s_in[1] & high_bit) == desired_high_bit) \
+ { \
+ z &= 0xb; \
+ out[2] = 65535; \
+ } \
+ if ((s_in[2] & high_bit) == desired_high_bit) \
+ { \
+ z &= 0x7; \
+ out[3] = 65535; \
+ } \
+ } \
+ return z; \
+}
+
+CMYK_TO_KCMY_THRESHOLD_FUNC(unsigned char, cmyk_8)
+CMYK_TO_KCMY_THRESHOLD_FUNC(unsigned short, cmyk_16)
+GENERIC_COLOR_FUNC(cmyk, kcmy_threshold)
+
+#define KCMY_TO_KCMY_THRESHOLD_FUNC(T, name) \
+static unsigned \
+name##_to_kcmy_threshold(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int j; \
+ unsigned nz[4]; \
+ unsigned z = 0xf; \
+ const T *s_in = (const T *) in; \
+ unsigned desired_high_bit = 0; \
+ unsigned high_bit = 1 << ((sizeof(T) * 8) - 1); \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ int width = lut->image_width; \
+ memset(out, 0, width * 4 * sizeof(unsigned short)); \
+ if (!lut->invert_output) \
+ desired_high_bit = high_bit; \
+ for (i = 0; i < 4; i++) \
+ nz[i] = z & ~(1 << i); \
+ \
+ for (i = 0; i < width; i++) \
+ { \
+ for (j = 0; j < 4; j++) \
+ { \
+ if ((*s_in++ & high_bit) == desired_high_bit) \
+ { \
+ z &= nz[j]; \
+ *out = 65535; \
+ } \
+ out++; \
+ } \
+ } \
+ return z; \
+}
+
+KCMY_TO_KCMY_THRESHOLD_FUNC(unsigned char, kcmy_8)
+KCMY_TO_KCMY_THRESHOLD_FUNC(unsigned short, kcmy_16)
+GENERIC_COLOR_FUNC(kcmy, kcmy_threshold)
+
+#define GRAY_TO_COLOR_THRESHOLD_FUNC(T, name, bits, channels) \
+static unsigned \
+gray_##bits##_to_##name##_threshold(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int z = (1 << channels) - 1; \
+ int desired_high_bit = 0; \
+ unsigned high_bit = 1 << ((sizeof(T) * 8) - 1); \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ int width = lut->image_width; \
+ memset(out, 0, width * channels * sizeof(unsigned short)); \
+ if (!lut->invert_output) \
+ desired_high_bit = high_bit; \
+ \
+ for (i = 0; i < width; i++, out += channels, s_in++) \
+ { \
+ if ((s_in[0] & high_bit) == desired_high_bit) \
+ { \
+ int j; \
+ z = 0; \
+ for (j = 0; j < channels; j++) \
+ out[j] = 65535; \
+ } \
+ } \
+ return z; \
+}
+
+
+GRAY_TO_COLOR_THRESHOLD_FUNC(unsigned char, color, 8, 3)
+GRAY_TO_COLOR_THRESHOLD_FUNC(unsigned short, color, 16, 3)
+GENERIC_COLOR_FUNC(gray, color_threshold)
+
+GRAY_TO_COLOR_THRESHOLD_FUNC(unsigned char, kcmy, 8, 4)
+GRAY_TO_COLOR_THRESHOLD_FUNC(unsigned short, kcmy, 16, 4)
+GENERIC_COLOR_FUNC(gray, kcmy_threshold)
+
+#define COLOR_TO_COLOR_THRESHOLD_FUNC(T, name) \
+static unsigned \
+name##_to_color_threshold(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int z = 7; \
+ int desired_high_bit = 0; \
+ unsigned high_bit = ((1 << ((sizeof(T) * 8) - 1)) * 4); \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ int width = lut->image_width; \
+ memset(out, 0, width * 3 * sizeof(unsigned short)); \
+ if (!lut->invert_output) \
+ desired_high_bit = high_bit; \
+ \
+ for (i = 0; i < width; i++, out += 3, s_in += 3) \
+ { \
+ if ((s_in[0] & high_bit) == desired_high_bit) \
+ { \
+ z &= 6; \
+ out[0] = 65535; \
+ } \
+ if ((s_in[1] & high_bit) == desired_high_bit) \
+ { \
+ z &= 5; \
+ out[1] = 65535; \
+ } \
+ if ((s_in[1] & high_bit) == desired_high_bit) \
+ { \
+ z &= 3; \
+ out[2] = 65535; \
+ } \
+ } \
+ return z; \
+}
+
+COLOR_TO_COLOR_THRESHOLD_FUNC(unsigned char, color_8)
+COLOR_TO_COLOR_THRESHOLD_FUNC(unsigned short, color_16)
+GENERIC_COLOR_FUNC(color, color_threshold)
+
+#define COLOR_TO_GRAY_THRESHOLD_FUNC(T, name, channels, max_channels) \
+static unsigned \
+name##_to_gray_threshold(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int z = 1; \
+ int desired_high_bit = 0; \
+ unsigned high_bit = ((1 << ((sizeof(T) * 8) - 1))); \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ int width = lut->image_width; \
+ memset(out, 0, width * sizeof(unsigned short)); \
+ if (!lut->invert_output) \
+ desired_high_bit = high_bit; \
+ \
+ for (i = 0; i < width; i++, out++, s_in += channels) \
+ { \
+ unsigned gval = \
+ (max_channels - channels) * (1 << ((sizeof(T) * 8) - 1)); \
+ int j; \
+ for (j = 0; j < channels; j++) \
+ gval += s_in[j]; \
+ gval /= channels; \
+ if ((gval & high_bit) == desired_high_bit) \
+ { \
+ out[0] = 65535; \
+ z = 0; \
+ } \
+ } \
+ return z; \
+}
+
+COLOR_TO_GRAY_THRESHOLD_FUNC(unsigned char, cmyk_8, 4, 4)
+COLOR_TO_GRAY_THRESHOLD_FUNC(unsigned short, cmyk_16, 4, 4)
+GENERIC_COLOR_FUNC(cmyk, gray_threshold)
+
+COLOR_TO_GRAY_THRESHOLD_FUNC(unsigned char, kcmy_8, 4, 4)
+COLOR_TO_GRAY_THRESHOLD_FUNC(unsigned short, kcmy_16, 4, 4)
+GENERIC_COLOR_FUNC(kcmy, gray_threshold)
+
+COLOR_TO_GRAY_THRESHOLD_FUNC(unsigned char, color_8, 3, 3)
+COLOR_TO_GRAY_THRESHOLD_FUNC(unsigned short, color_16, 3, 3)
+GENERIC_COLOR_FUNC(color, gray_threshold)
+
+COLOR_TO_GRAY_THRESHOLD_FUNC(unsigned char, gray_8, 1, 1)
+COLOR_TO_GRAY_THRESHOLD_FUNC(unsigned short, gray_16, 1, 1)
+GENERIC_COLOR_FUNC(gray, gray_threshold)
+
+#define CMYK_TO_COLOR_FUNC(namein, name2, T, bits, offset) \
+static unsigned \
+namein##_##bits##_to_##name2(const stp_vars_t *vars, const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ unsigned status; \
+ size_t real_steps = lut->steps; \
+ const T *s_in = (const T *) in; \
+ unsigned short *tmp; \
+ int width = lut->image_width; \
+ unsigned mask = 0; \
+ \
+ if (!lut->cmy_tmp) \
+ lut->cmy_tmp = stp_malloc(3 * 2 * lut->image_width); \
+ tmp = lut->cmy_tmp; \
+ memset(lut->cmy_tmp, 0, width * 3 * sizeof(unsigned short)); \
+ if (lut->invert_output) \
+ mask = 0xffff; \
+ \
+ for (i = 0; i < width; i++, tmp += 3, s_in += 4) \
+ { \
+ unsigned c = (s_in[0 + offset] + s_in[(3 + offset) % 4]) * \
+ (65535 / ((1 << bits) - 1)); \
+ unsigned m = (s_in[1 + offset] + s_in[(3 + offset) % 4]) * \
+ (65535 / ((1 << bits) - 1)); \
+ unsigned y = (s_in[2 + offset] + s_in[(3 + offset) % 4]) * \
+ (65535 / ((1 << bits) - 1)); \
+ if (c > 65535) \
+ c = 65535; \
+ if (m > 65535) \
+ m = 65535; \
+ if (y > 65535) \
+ y = 65535; \
+ tmp[0] = c ^ mask; \
+ tmp[1] = m ^ mask; \
+ tmp[2] = y ^ mask; \
+ } \
+ lut->steps = 65536; \
+ status = \
+ color_16_to_##name2(vars, (const unsigned char *) lut->cmy_tmp, out); \
+ lut->steps = real_steps; \
+ return status; \
+}
+
+CMYK_TO_COLOR_FUNC(cmyk, color, unsigned char, 8, 0)
+CMYK_TO_COLOR_FUNC(cmyk, color, unsigned short, 16, 0)
+GENERIC_COLOR_FUNC(cmyk, color)
+CMYK_TO_COLOR_FUNC(kcmy, color, unsigned char, 8, 1)
+CMYK_TO_COLOR_FUNC(kcmy, color, unsigned short, 16, 1)
+GENERIC_COLOR_FUNC(kcmy, color)
+CMYK_TO_COLOR_FUNC(cmyk, color_threshold, unsigned char, 8, 0)
+CMYK_TO_COLOR_FUNC(cmyk, color_threshold, unsigned short, 16, 0)
+GENERIC_COLOR_FUNC(cmyk, color_threshold)
+CMYK_TO_COLOR_FUNC(kcmy, color_threshold, unsigned char, 8, 1)
+CMYK_TO_COLOR_FUNC(kcmy, color_threshold, unsigned short, 16, 1)
+GENERIC_COLOR_FUNC(kcmy, color_threshold)
+CMYK_TO_COLOR_FUNC(cmyk, color_fast, unsigned char, 8, 0)
+CMYK_TO_COLOR_FUNC(cmyk, color_fast, unsigned short, 16, 0)
+GENERIC_COLOR_FUNC(cmyk, color_fast)
+CMYK_TO_COLOR_FUNC(kcmy, color_fast, unsigned char, 8, 1)
+CMYK_TO_COLOR_FUNC(kcmy, color_fast, unsigned short, 16, 1)
+GENERIC_COLOR_FUNC(kcmy, color_fast)
+CMYK_TO_COLOR_FUNC(cmyk, color_raw, unsigned char, 8, 0)
+CMYK_TO_COLOR_FUNC(cmyk, color_raw, unsigned short, 16, 0)
+GENERIC_COLOR_FUNC(cmyk, color_raw)
+CMYK_TO_COLOR_FUNC(kcmy, color_raw, unsigned char, 8, 1)
+CMYK_TO_COLOR_FUNC(kcmy, color_raw, unsigned short, 16, 1)
+GENERIC_COLOR_FUNC(kcmy, color_raw)
+
+#define CMYK_TO_KCMY_FUNC(T, size) \
+static unsigned \
+cmyk_##size##_to_kcmy(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ unsigned retval = 0; \
+ int j; \
+ int nz[4]; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ const unsigned short *user; \
+ const unsigned short *maps[4]; \
+ \
+ for (i = 0; i < 4; i++) \
+ { \
+ stp_curve_resample(lut->channel_curves[i].curve, 65536); \
+ maps[i] = stp_curve_cache_get_ushort_data(&(lut->channel_curves[i])); \
+ } \
+ stp_curve_resample(lut->user_color_correction.curve, 1 << size); \
+ user = stp_curve_cache_get_ushort_data(&(lut->user_color_correction)); \
+ \
+ memset(nz, 0, sizeof(nz)); \
+ \
+ for (i = 0; i < lut->image_width; i++, out += 4) \
+ { \
+ for (j = 0; j < 4; j++) \
+ { \
+ int outpos = (j + 1) & 3; \
+ int inval = *s_in++; \
+ nz[outpos] |= inval; \
+ out[outpos] = maps[outpos][user[inval]]; \
+ } \
+ } \
+ for (j = 0; j < 4; j++) \
+ if (nz[j] == 0) \
+ retval |= (1 << j); \
+ return retval; \
+}
+
+CMYK_TO_KCMY_FUNC(unsigned char, 8)
+CMYK_TO_KCMY_FUNC(unsigned short, 16)
+GENERIC_COLOR_FUNC(cmyk, kcmy)
+
+#define KCMY_TO_KCMY_FUNC(T, size) \
+static unsigned \
+kcmy_##size##_to_kcmy(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ unsigned retval = 0; \
+ int j; \
+ int nz[4]; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ const unsigned short *user; \
+ const unsigned short *maps[4]; \
+ \
+ for (i = 0; i < 4; i++) \
+ { \
+ stp_curve_resample(lut->channel_curves[i].curve, 65536); \
+ maps[i] = stp_curve_cache_get_ushort_data(&(lut->channel_curves[i])); \
+ } \
+ stp_curve_resample(lut->user_color_correction.curve, 1 << size); \
+ user = stp_curve_cache_get_ushort_data(&(lut->user_color_correction)); \
+ \
+ memset(nz, 0, sizeof(nz)); \
+ \
+ for (i = 0; i < lut->image_width; i++, out += 4) \
+ { \
+ for (j = 0; j < 4; j++) \
+ { \
+ int inval = *s_in++; \
+ nz[j] |= inval; \
+ out[j] = maps[j][user[inval]]; \
+ } \
+ } \
+ for (j = 0; j < 4; j++) \
+ if (nz[j] == 0) \
+ retval |= (1 << j); \
+ return retval; \
+}
+
+KCMY_TO_KCMY_FUNC(unsigned char, 8)
+KCMY_TO_KCMY_FUNC(unsigned short, 16)
+GENERIC_COLOR_FUNC(kcmy, kcmy)
+
+
+#define GRAY_TO_GRAY_FUNC(T, bits) \
+static unsigned \
+gray_##bits##_to_gray(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int i0 = -1; \
+ int o0 = 0; \
+ int nz = 0; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ int width = lut->image_width; \
+ const unsigned short *composite; \
+ const unsigned short *user; \
+ \
+ stp_curve_resample \
+ (stp_curve_cache_get_curve(&(lut->channel_curves[CHANNEL_K])), 65536); \
+ composite = \
+ stp_curve_cache_get_ushort_data(&(lut->channel_curves[CHANNEL_K])); \
+ stp_curve_resample(lut->user_color_correction.curve, 1 << bits); \
+ user = stp_curve_cache_get_ushort_data(&(lut->user_color_correction)); \
+ \
+ memset(out, 0, width * sizeof(unsigned short)); \
+ \
+ for (i = 0; i < lut->image_width; i++) \
+ { \
+ if (i0 != s_in[0]) \
+ { \
+ i0 = s_in[0]; \
+ o0 = composite[user[i0]]; \
+ nz |= o0; \
+ } \
+ out[0] = o0; \
+ s_in ++; \
+ out ++; \
+ } \
+ return nz == 0; \
+}
+
+GRAY_TO_GRAY_FUNC(unsigned char, 8)
+GRAY_TO_GRAY_FUNC(unsigned short, 16)
+GENERIC_COLOR_FUNC(gray, gray)
+
+#define COLOR_TO_GRAY_FUNC(T, bits) \
+static unsigned \
+color_##bits##_to_gray(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int i0 = -1; \
+ int i1 = -1; \
+ int i2 = -1; \
+ int o0 = 0; \
+ int nz = 0; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ int l_red = LUM_RED; \
+ int l_green = LUM_GREEN; \
+ int l_blue = LUM_BLUE; \
+ const unsigned short *composite; \
+ const unsigned short *user; \
+ \
+ stp_curve_resample \
+ (stp_curve_cache_get_curve(&(lut->channel_curves[CHANNEL_K])), 65536); \
+ composite = \
+ stp_curve_cache_get_ushort_data(&(lut->channel_curves[CHANNEL_K])); \
+ stp_curve_resample(lut->user_color_correction.curve, 1 << bits); \
+ user = stp_curve_cache_get_ushort_data(&(lut->user_color_correction)); \
+ \
+ if (lut->input_color_description->color_model == COLOR_BLACK) \
+ { \
+ l_red = (100 - l_red) / 2; \
+ l_green = (100 - l_green) / 2; \
+ l_blue = (100 - l_blue) / 2; \
+ } \
+ \
+ for (i = 0; i < lut->image_width; i++) \
+ { \
+ if (i0 != s_in[0] || i1 != s_in[1] || i2 != s_in[2]) \
+ { \
+ i0 = s_in[0]; \
+ i1 = s_in[1]; \
+ i2 = s_in[2]; \
+ o0 = \
+ composite[user[(i0 * l_red + i1 * l_green + i2 * l_blue) / 100]]; \
+ nz |= o0; \
+ } \
+ out[0] = o0; \
+ s_in += 3; \
+ out ++; \
+ } \
+ return nz == 0; \
+}
+
+COLOR_TO_GRAY_FUNC(unsigned char, 8)
+COLOR_TO_GRAY_FUNC(unsigned short, 16)
+GENERIC_COLOR_FUNC(color, gray)
+
+
+#define CMYK_TO_GRAY_FUNC(T, bits) \
+static unsigned \
+cmyk_##bits##_to_gray(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int i0 = -1; \
+ int i1 = -1; \
+ int i2 = -1; \
+ int i3 = -4; \
+ int o0 = 0; \
+ int nz = 0; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ int l_red = LUM_RED; \
+ int l_green = LUM_GREEN; \
+ int l_blue = LUM_BLUE; \
+ int l_white = 0; \
+ const unsigned short *composite; \
+ const unsigned short *user; \
+ \
+ stp_curve_resample \
+ (stp_curve_cache_get_curve(&(lut->channel_curves[CHANNEL_K])), 65536); \
+ composite = \
+ stp_curve_cache_get_ushort_data(&(lut->channel_curves[CHANNEL_K])); \
+ stp_curve_resample(lut->user_color_correction.curve, 1 << bits); \
+ user = stp_curve_cache_get_ushort_data(&(lut->user_color_correction)); \
+ \
+ if (lut->input_color_description->color_model == COLOR_BLACK) \
+ { \
+ l_red = (100 - l_red) / 3; \
+ l_green = (100 - l_green) / 3; \
+ l_blue = (100 - l_blue) / 3; \
+ l_white = (100 - l_white) / 3; \
+ } \
+ \
+ for (i = 0; i < lut->image_width; i++) \
+ { \
+ if (i0 != s_in[0] || i1 != s_in[1] || i2 != s_in[2] || i3 != s_in[3]) \
+ { \
+ i0 = s_in[0]; \
+ i1 = s_in[1]; \
+ i2 = s_in[2]; \
+ i3 = s_in[3]; \
+ o0 = composite[user[(i0 * l_red + i1 * l_green + \
+ i2 * l_blue + i3 * l_white) / 100]]; \
+ nz |= o0; \
+ } \
+ out[0] = o0; \
+ s_in += 4; \
+ out ++; \
+ } \
+ return nz ? 0 : 1; \
+}
+
+CMYK_TO_GRAY_FUNC(unsigned char, 8)
+CMYK_TO_GRAY_FUNC(unsigned short, 16)
+GENERIC_COLOR_FUNC(cmyk, gray)
+
+#define KCMY_TO_GRAY_FUNC(T, bits) \
+static unsigned \
+kcmy_##bits##_to_gray(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int i0 = -1; \
+ int i1 = -1; \
+ int i2 = -1; \
+ int i3 = -4; \
+ int o0 = 0; \
+ int nz = 0; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ int l_red = LUM_RED; \
+ int l_green = LUM_GREEN; \
+ int l_blue = LUM_BLUE; \
+ int l_white = 0; \
+ const unsigned short *composite; \
+ const unsigned short *user; \
+ \
+ stp_curve_resample \
+ (stp_curve_cache_get_curve(&(lut->channel_curves[CHANNEL_K])), 65536); \
+ composite = \
+ stp_curve_cache_get_ushort_data(&(lut->channel_curves[CHANNEL_K])); \
+ stp_curve_resample(lut->user_color_correction.curve, 1 << bits); \
+ user = stp_curve_cache_get_ushort_data(&(lut->user_color_correction)); \
+ \
+ if (lut->input_color_description->color_model == COLOR_BLACK) \
+ { \
+ l_red = (100 - l_red) / 3; \
+ l_green = (100 - l_green) / 3; \
+ l_blue = (100 - l_blue) / 3; \
+ l_white = (100 - l_white) / 3; \
+ } \
+ \
+ for (i = 0; i < lut->image_width; i++) \
+ { \
+ if (i0 != s_in[0] || i1 != s_in[1] || i2 != s_in[2] || i3 != s_in[3]) \
+ { \
+ i0 = s_in[0]; \
+ i1 = s_in[1]; \
+ i2 = s_in[2]; \
+ i3 = s_in[3]; \
+ o0 = composite[user[(i0 * l_red + i1 * l_green + \
+ i2 * l_blue + i3 * l_white) / 100]]; \
+ nz |= o0; \
+ } \
+ out[0] = o0; \
+ s_in += 4; \
+ out ++; \
+ } \
+ return nz ? 0 : 1; \
+}
+
+KCMY_TO_GRAY_FUNC(unsigned char, 8)
+KCMY_TO_GRAY_FUNC(unsigned short, 16)
+GENERIC_COLOR_FUNC(kcmy, gray)
+
+#define GRAY_TO_GRAY_RAW_FUNC(T, bits) \
+static unsigned \
+gray_##bits##_to_gray_raw(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int nz = 0; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ int width = lut->image_width; \
+ unsigned mask = 0; \
+ if (lut->invert_output) \
+ mask = 0xffff; \
+ \
+ memset(out, 0, width * sizeof(unsigned short)); \
+ \
+ for (i = 0; i < lut->image_width; i++) \
+ { \
+ out[0] = (s_in[0] * (65535 / ((1 << bits) - 1))) ^ mask; \
+ nz |= out[0]; \
+ s_in ++; \
+ out ++; \
+ } \
+ return nz == 0; \
+}
+
+GRAY_TO_GRAY_RAW_FUNC(unsigned char, 8)
+GRAY_TO_GRAY_RAW_FUNC(unsigned short, 16)
+GENERIC_COLOR_FUNC(gray, gray_raw)
+
+#define COLOR_TO_GRAY_RAW_FUNC(T, bits, invertable, name2) \
+static unsigned \
+color_##bits##_to_gray_##name2(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int i0 = -1; \
+ int i1 = -1; \
+ int i2 = -1; \
+ int o0 = 0; \
+ int nz = 0; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ int l_red = LUM_RED; \
+ int l_green = LUM_GREEN; \
+ int l_blue = LUM_BLUE; \
+ unsigned mask = 0; \
+ if (lut->invert_output && invertable) \
+ mask = 0xffff; \
+ \
+ if (lut->input_color_description->color_model == COLOR_BLACK) \
+ { \
+ l_red = (100 - l_red) / 2; \
+ l_green = (100 - l_green) / 2; \
+ l_blue = (100 - l_blue) / 2; \
+ } \
+ \
+ for (i = 0; i < lut->image_width; i++) \
+ { \
+ if (i0 != s_in[0] || i1 != s_in[1] || i2 != s_in[2]) \
+ { \
+ i0 = s_in[0]; \
+ i1 = s_in[1]; \
+ i2 = s_in[2]; \
+ o0 = (i0 * (65535 / ((1 << bits) - 1)) * l_red + \
+ i1 * (65535 / ((1 << bits) - 1)) * l_green + \
+ i2 * (65535 / ((1 << bits) - 1)) * l_blue) / 100; \
+ o0 ^= mask; \
+ nz |= o0; \
+ } \
+ out[0] = o0; \
+ s_in += 3; \
+ out ++; \
+ } \
+ return nz == 0; \
+}
+
+COLOR_TO_GRAY_RAW_FUNC(unsigned char, 8, 1, raw)
+COLOR_TO_GRAY_RAW_FUNC(unsigned short, 16, 1, raw)
+GENERIC_COLOR_FUNC(color, gray_raw)
+COLOR_TO_GRAY_RAW_FUNC(unsigned char, 8, 0, noninvert)
+COLOR_TO_GRAY_RAW_FUNC(unsigned short, 16, 0, noninvert)
+
+
+#define CMYK_TO_GRAY_RAW_FUNC(T, bits, invertable, name2) \
+static unsigned \
+cmyk_##bits##_to_gray_##name2(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int i0 = -1; \
+ int i1 = -1; \
+ int i2 = -1; \
+ int i3 = -4; \
+ int o0 = 0; \
+ int nz = 0; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ int l_red = LUM_RED; \
+ int l_green = LUM_GREEN; \
+ int l_blue = LUM_BLUE; \
+ int l_white = 0; \
+ unsigned mask = 0; \
+ if (lut->invert_output && invertable) \
+ mask = 0xffff; \
+ \
+ if (lut->input_color_description->color_model == COLOR_BLACK) \
+ { \
+ l_red = (100 - l_red) / 3; \
+ l_green = (100 - l_green) / 3; \
+ l_blue = (100 - l_blue) / 3; \
+ l_white = (100 - l_white) / 3; \
+ } \
+ \
+ for (i = 0; i < lut->image_width; i++) \
+ { \
+ if (i0 != s_in[0] || i1 != s_in[1] || i2 != s_in[2] || i3 != s_in[3]) \
+ { \
+ i0 = s_in[0]; \
+ i1 = s_in[1]; \
+ i2 = s_in[2]; \
+ i3 = s_in[3]; \
+ o0 = (i0 * (65535 / ((1 << bits) - 1)) * l_red + \
+ i1 * (65535 / ((1 << bits) - 1)) * l_green + \
+ i2 * (65535 / ((1 << bits) - 1)) * l_blue + \
+ i3 * (65535 / ((1 << bits) - 1)) * l_white) / 100; \
+ o0 ^= mask; \
+ nz |= o0; \
+ } \
+ out[0] = o0; \
+ s_in += 4; \
+ out ++; \
+ } \
+ return nz ? 0 : 1; \
+}
+
+CMYK_TO_GRAY_RAW_FUNC(unsigned char, 8, 1, raw)
+CMYK_TO_GRAY_RAW_FUNC(unsigned short, 16, 1, raw)
+GENERIC_COLOR_FUNC(cmyk, gray_raw)
+CMYK_TO_GRAY_RAW_FUNC(unsigned char, 8, 0, noninvert)
+CMYK_TO_GRAY_RAW_FUNC(unsigned short, 16, 0, noninvert)
+
+#define KCMY_TO_GRAY_RAW_FUNC(T, bits, invertable, name2) \
+static unsigned \
+kcmy_##bits##_to_gray_##name2(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int i0 = -1; \
+ int i1 = -1; \
+ int i2 = -1; \
+ int i3 = -4; \
+ int o0 = 0; \
+ int nz = 0; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ int l_red = LUM_RED; \
+ int l_green = LUM_GREEN; \
+ int l_blue = LUM_BLUE; \
+ int l_white = 0; \
+ unsigned mask = 0; \
+ if (lut->invert_output && invertable) \
+ mask = 0xffff; \
+ \
+ if (lut->input_color_description->color_model == COLOR_BLACK) \
+ { \
+ l_red = (100 - l_red) / 3; \
+ l_green = (100 - l_green) / 3; \
+ l_blue = (100 - l_blue) / 3; \
+ l_white = (100 - l_white) / 3; \
+ } \
+ \
+ for (i = 0; i < lut->image_width; i++) \
+ { \
+ if (i0 != s_in[0] || i1 != s_in[1] || i2 != s_in[2] || i3 != s_in[3]) \
+ { \
+ i0 = s_in[0]; \
+ i1 = s_in[1]; \
+ i2 = s_in[2]; \
+ i3 = s_in[3]; \
+ o0 = (i0 * (65535 / ((1 << bits) - 1)) * l_white + \
+ i1 * (65535 / ((1 << bits) - 1)) * l_red + \
+ i2 * (65535 / ((1 << bits) - 1)) * l_green + \
+ i3 * (65535 / ((1 << bits) - 1)) * l_blue) / 100; \
+ o0 ^= mask; \
+ nz |= o0; \
+ } \
+ out[0] = o0; \
+ s_in += 4; \
+ out ++; \
+ } \
+ return nz ? 0 : 1; \
+}
+
+KCMY_TO_GRAY_RAW_FUNC(unsigned char, 8, 1, raw)
+KCMY_TO_GRAY_RAW_FUNC(unsigned short, 16, 1, raw)
+GENERIC_COLOR_FUNC(kcmy, gray_raw)
+KCMY_TO_GRAY_RAW_FUNC(unsigned char, 8, 0, noninvert)
+KCMY_TO_GRAY_RAW_FUNC(unsigned short, 16, 0, noninvert)
+
+#define CMYK_TO_KCMY_RAW_FUNC(T, bits) \
+static unsigned \
+cmyk_##bits##_to_kcmy_raw(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int j; \
+ int nz[4]; \
+ unsigned retval = 0; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ \
+ memset(nz, 0, sizeof(nz)); \
+ for (i = 0; i < lut->image_width; i++) \
+ { \
+ out[0] = s_in[3] * (65535 / ((1 << bits) - 1)); \
+ out[1] = s_in[0] * (65535 / ((1 << bits) - 1)); \
+ out[2] = s_in[1] * (65535 / ((1 << bits) - 1)); \
+ out[3] = s_in[2] * (65535 / ((1 << bits) - 1)); \
+ for (j = 0; j < 4; j++) \
+ nz[j] |= out[j]; \
+ s_in += 4; \
+ out += 4; \
+ } \
+ for (j = 0; j < 4; j++) \
+ if (nz[j] == 0) \
+ retval |= (1 << j); \
+ return retval; \
+}
+
+CMYK_TO_KCMY_RAW_FUNC(unsigned char, 8)
+CMYK_TO_KCMY_RAW_FUNC(unsigned short, 16)
+GENERIC_COLOR_FUNC(cmyk, kcmy_raw)
+
+#define KCMY_TO_KCMY_RAW_FUNC(T, bits) \
+static unsigned \
+kcmy_##bits##_to_kcmy_raw(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int j; \
+ int nz[4]; \
+ unsigned retval = 0; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ \
+ memset(nz, 0, sizeof(nz)); \
+ for (i = 0; i < lut->image_width; i++) \
+ { \
+ for (j = 0; j < 4; j++) \
+ { \
+ out[j] = s_in[j] * (65535 / ((1 << bits) - 1)); \
+ nz[j] |= out[j]; \
+ } \
+ s_in += 4; \
+ out += 4; \
+ } \
+ for (j = 0; j < 4; j++) \
+ if (nz[j] == 0) \
+ retval |= (1 << j); \
+ return retval; \
+}
+
+KCMY_TO_KCMY_RAW_FUNC(unsigned char, 8)
+KCMY_TO_KCMY_RAW_FUNC(unsigned short, 16)
+GENERIC_COLOR_FUNC(kcmy, kcmy_raw)
+
+#define DESATURATED_FUNC(name, name2, bits) \
+static unsigned \
+name##_##bits##_to_##name2##_desaturated(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ size_t real_steps = lut->steps; \
+ unsigned status; \
+ if (!lut->gray_tmp) \
+ lut->gray_tmp = stp_malloc(2 * lut->image_width); \
+ name##_##bits##_to_gray_noninvert(vars, in, lut->gray_tmp); \
+ lut->steps = 65536; \
+ status = gray_16_to_##name2(vars, (unsigned char *) lut->gray_tmp, out); \
+ lut->steps = real_steps; \
+ return status; \
+}
+
+DESATURATED_FUNC(color, color, 8)
+DESATURATED_FUNC(color, color, 16)
+GENERIC_COLOR_FUNC(color, color_desaturated)
+DESATURATED_FUNC(color, kcmy, 8)
+DESATURATED_FUNC(color, kcmy, 16)
+GENERIC_COLOR_FUNC(color, kcmy_desaturated)
+
+DESATURATED_FUNC(cmyk, color, 8)
+DESATURATED_FUNC(cmyk, color, 16)
+GENERIC_COLOR_FUNC(cmyk, color_desaturated)
+DESATURATED_FUNC(cmyk, kcmy, 8)
+DESATURATED_FUNC(cmyk, kcmy, 16)
+GENERIC_COLOR_FUNC(cmyk, kcmy_desaturated)
+
+DESATURATED_FUNC(kcmy, color, 8)
+DESATURATED_FUNC(kcmy, color, 16)
+GENERIC_COLOR_FUNC(kcmy, color_desaturated)
+DESATURATED_FUNC(kcmy, kcmy, 8)
+DESATURATED_FUNC(kcmy, kcmy, 16)
+GENERIC_COLOR_FUNC(kcmy, kcmy_desaturated)
+
+#define CMYK_DISPATCH(name) \
+static unsigned \
+CMYK_to_##name(const stp_vars_t *vars, const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ if (lut->input_color_description->color_id == COLOR_ID_CMYK) \
+ return cmyk_to_##name(vars, in, out); \
+ else if (lut->input_color_description->color_id == COLOR_ID_KCMY) \
+ return kcmy_to_##name(vars, in, out); \
+ else \
+ { \
+ stp_eprintf(vars, "Bad dispatch to CMYK_to_%s: %d\n", #name, \
+ lut->input_color_description->color_id); \
+ return 0; \
+ } \
+}
+
+CMYK_DISPATCH(color)
+CMYK_DISPATCH(color_raw)
+CMYK_DISPATCH(color_fast)
+CMYK_DISPATCH(color_threshold)
+CMYK_DISPATCH(color_desaturated)
+CMYK_DISPATCH(kcmy)
+CMYK_DISPATCH(kcmy_raw)
+CMYK_DISPATCH(kcmy_threshold)
+CMYK_DISPATCH(kcmy_desaturated)
+CMYK_DISPATCH(gray)
+CMYK_DISPATCH(gray_raw)
+CMYK_DISPATCH(gray_threshold)
+
+#define RAW_TO_RAW_THRESHOLD_FUNC(T, name) \
+static unsigned \
+name##_to_raw_threshold(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int j; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ unsigned nz[STP_CHANNEL_LIMIT]; \
+ unsigned z = (1 << lut->out_channels) - 1; \
+ const T *s_in = (const T *) in; \
+ unsigned desired_high_bit = 0; \
+ unsigned high_bit = 1 << ((sizeof(T) * 8) - 1); \
+ int width = lut->image_width; \
+ memset(out, 0, width * lut->out_channels * sizeof(unsigned short)); \
+ if (!lut->invert_output) \
+ desired_high_bit = high_bit; \
+ for (i = 0; i < lut->out_channels; i++) \
+ nz[i] = z & ~(1 << i); \
+ \
+ for (i = 0; i < width; i++) \
+ { \
+ for (j = 0; j < lut->out_channels; j++) \
+ { \
+ if ((*s_in++ & high_bit) == desired_high_bit) \
+ { \
+ z &= nz[j]; \
+ *out = 65535; \
+ } \
+ out++; \
+ } \
+ } \
+ return z; \
+}
+
+RAW_TO_RAW_THRESHOLD_FUNC(unsigned char, raw_8)
+RAW_TO_RAW_THRESHOLD_FUNC(unsigned short, raw_16)
+GENERIC_COLOR_FUNC(raw, raw_threshold)
+
+#define RAW_TO_RAW_FUNC(T, size) \
+static unsigned \
+raw_##size##_to_raw(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ unsigned retval = 0; \
+ int j; \
+ int nz[STP_CHANNEL_LIMIT]; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ const unsigned short *maps[STP_CHANNEL_LIMIT]; \
+ const unsigned short *user; \
+ \
+ for (i = 0; i < lut->out_channels; i++) \
+ { \
+ stp_curve_resample(lut->channel_curves[i].curve, 65536); \
+ maps[i] = stp_curve_cache_get_ushort_data(&(lut->channel_curves[i])); \
+ } \
+ stp_curve_resample(lut->user_color_correction.curve, 1 << size); \
+ user = stp_curve_cache_get_ushort_data(&(lut->user_color_correction)); \
+ \
+ memset(nz, 0, sizeof(nz)); \
+ \
+ for (i = 0; i < lut->image_width; i++, out += lut->out_channels) \
+ { \
+ for (j = 0; j < lut->out_channels; j++) \
+ { \
+ int inval = *s_in++; \
+ nz[j] |= inval; \
+ out[j] = maps[j][user[inval]]; \
+ } \
+ } \
+ for (j = 0; j < lut->out_channels; j++) \
+ if (nz[j] == 0) \
+ retval |= (1 << j); \
+ return retval; \
+}
+
+RAW_TO_RAW_FUNC(unsigned char, 8)
+RAW_TO_RAW_FUNC(unsigned short, 16)
+GENERIC_COLOR_FUNC(raw, raw)
+
+
+#define RAW_TO_RAW_RAW_FUNC(T, bits) \
+static unsigned \
+raw_##bits##_to_raw_raw(const stp_vars_t *vars, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ int i; \
+ int j; \
+ int nz[STP_CHANNEL_LIMIT]; \
+ unsigned retval = 0; \
+ const T *s_in = (const T *) in; \
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color")); \
+ int colors = lut->in_channels; \
+ \
+ memset(nz, 0, sizeof(nz)); \
+ for (i = 0; i < lut->image_width; i++) \
+ { \
+ for (j = 0; j < colors; j++) \
+ { \
+ nz[j] |= s_in[j]; \
+ out[j] = s_in[j] * (65535 / ((1 << bits) - 1)); \
+ } \
+ s_in += colors; \
+ out += colors; \
+ } \
+ for (j = 0; j < colors; j++) \
+ if (nz[j] == 0) \
+ retval |= (1 << j); \
+ return retval; \
+}
+
+RAW_TO_RAW_RAW_FUNC(unsigned char, 8)
+RAW_TO_RAW_RAW_FUNC(unsigned short, 16)
+GENERIC_COLOR_FUNC(raw, raw_raw)
+
+
+#define CONVERSION_FUNCTION_WITH_FAST(from, to, from2) \
+static unsigned \
+generic_##from##_to_##to(const stp_vars_t *v, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ lut_t *lut = (lut_t *)(stp_get_component_data(v, "Color")); \
+ switch (lut->color_correction->correction) \
+ { \
+ case COLOR_CORRECTION_UNCORRECTED: \
+ return from2##_to_##to##_fast(v, in, out); \
+ case COLOR_CORRECTION_ACCURATE: \
+ case COLOR_CORRECTION_BRIGHT: \
+ case COLOR_CORRECTION_HUE: \
+ return from2##_to_##to(v, in, out); \
+ case COLOR_CORRECTION_DESATURATED: \
+ return from2##_to_##to##_desaturated(v, in, out); \
+ case COLOR_CORRECTION_THRESHOLD: \
+ case COLOR_CORRECTION_PREDITHERED: \
+ return from2##_to_##to##_threshold(v, in, out); \
+ case COLOR_CORRECTION_DENSITY: \
+ case COLOR_CORRECTION_RAW: \
+ return from2##_to_##to##_raw(v, in, out); \
+ default: \
+ return (unsigned) -1; \
+ } \
+}
+
+#define CONVERSION_FUNCTION_WITHOUT_FAST(from, to, from2) \
+static unsigned \
+generic_##from##_to_##to(const stp_vars_t *v, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ lut_t *lut = (lut_t *)(stp_get_component_data(v, "Color")); \
+ switch (lut->color_correction->correction) \
+ { \
+ case COLOR_CORRECTION_UNCORRECTED: \
+ case COLOR_CORRECTION_ACCURATE: \
+ case COLOR_CORRECTION_BRIGHT: \
+ case COLOR_CORRECTION_HUE: \
+ return from2##_to_##to(v, in, out); \
+ case COLOR_CORRECTION_DESATURATED: \
+ return from2##_to_##to##_desaturated(v, in, out); \
+ case COLOR_CORRECTION_THRESHOLD: \
+ case COLOR_CORRECTION_PREDITHERED: \
+ return from2##_to_##to##_threshold(v, in, out); \
+ case COLOR_CORRECTION_DENSITY: \
+ case COLOR_CORRECTION_RAW: \
+ return from2##_to_##to##_raw(v, in, out); \
+ default: \
+ return (unsigned) -1; \
+ } \
+}
+
+#define CONVERSION_FUNCTION_WITHOUT_DESATURATED(from, to, from2) \
+static unsigned \
+generic_##from##_to_##to(const stp_vars_t *v, \
+ const unsigned char *in, \
+ unsigned short *out) \
+{ \
+ lut_t *lut = (lut_t *)(stp_get_component_data(v, "Color")); \
+ switch (lut->color_correction->correction) \
+ { \
+ case COLOR_CORRECTION_UNCORRECTED: \
+ case COLOR_CORRECTION_ACCURATE: \
+ case COLOR_CORRECTION_BRIGHT: \
+ case COLOR_CORRECTION_HUE: \
+ case COLOR_CORRECTION_DESATURATED: \
+ return from2##_to_##to(v, in, out); \
+ case COLOR_CORRECTION_THRESHOLD: \
+ case COLOR_CORRECTION_PREDITHERED: \
+ return from2##_to_##to##_threshold(v, in, out); \
+ case COLOR_CORRECTION_DENSITY: \
+ case COLOR_CORRECTION_RAW: \
+ return from2##_to_##to##_raw(v, in, out); \
+ default: \
+ return (unsigned) -1; \
+ } \
+}
+
+CONVERSION_FUNCTION_WITH_FAST(cmyk, color, CMYK)
+CONVERSION_FUNCTION_WITH_FAST(color, color, color)
+CONVERSION_FUNCTION_WITH_FAST(color, kcmy, color)
+CONVERSION_FUNCTION_WITHOUT_FAST(cmyk, kcmy, CMYK)
+CONVERSION_FUNCTION_WITHOUT_DESATURATED(cmyk, gray, CMYK)
+CONVERSION_FUNCTION_WITHOUT_DESATURATED(color, gray, color)
+CONVERSION_FUNCTION_WITHOUT_DESATURATED(gray, gray, gray)
+CONVERSION_FUNCTION_WITHOUT_DESATURATED(gray, color, gray)
+CONVERSION_FUNCTION_WITHOUT_DESATURATED(gray, kcmy, gray)
+
+unsigned
+stpi_color_convert_to_gray(const stp_vars_t *v,
+ const unsigned char *in,
+ unsigned short *out)
+{
+ lut_t *lut = (lut_t *)(stp_get_component_data(v, "Color"));
+ switch (lut->input_color_description->color_id)
+ {
+ case COLOR_ID_GRAY:
+ case COLOR_ID_WHITE:
+ return generic_gray_to_gray(v, in, out);
+ case COLOR_ID_RGB:
+ case COLOR_ID_CMY:
+ return generic_color_to_gray(v, in, out);
+ case COLOR_ID_CMYK:
+ case COLOR_ID_KCMY:
+ return generic_cmyk_to_gray(v, in, out);
+ default:
+ return (unsigned) -1;
+ }
+}
+
+unsigned
+stpi_color_convert_to_color(const stp_vars_t *v,
+ const unsigned char *in,
+ unsigned short *out)
+{
+ lut_t *lut = (lut_t *)(stp_get_component_data(v, "Color"));
+ switch (lut->input_color_description->color_id)
+ {
+ case COLOR_ID_GRAY:
+ case COLOR_ID_WHITE:
+ return generic_gray_to_color(v, in, out);
+ case COLOR_ID_RGB:
+ case COLOR_ID_CMY:
+ return generic_color_to_color(v, in, out);
+ case COLOR_ID_CMYK:
+ case COLOR_ID_KCMY:
+ return generic_cmyk_to_color(v, in, out);
+ default:
+ return (unsigned) -1;
+ }
+}
+
+unsigned
+stpi_color_convert_to_kcmy(const stp_vars_t *v,
+ const unsigned char *in,
+ unsigned short *out)
+{
+ lut_t *lut = (lut_t *)(stp_get_component_data(v, "Color"));
+ switch (lut->input_color_description->color_id)
+ {
+ case COLOR_ID_GRAY:
+ case COLOR_ID_WHITE:
+ return generic_gray_to_kcmy(v, in, out);
+ case COLOR_ID_RGB:
+ case COLOR_ID_CMY:
+ return generic_color_to_kcmy(v, in, out);
+ case COLOR_ID_CMYK:
+ case COLOR_ID_KCMY:
+ return generic_cmyk_to_kcmy(v, in, out);
+ default:
+ return (unsigned) -1;
+ }
+}
+
+unsigned
+stpi_color_convert_raw(const stp_vars_t *v,
+ const unsigned char *in,
+ unsigned short *out)
+{
+ lut_t *lut = (lut_t *)(stp_get_component_data(v, "Color"));
+ switch (lut->color_correction->correction)
+ {
+ case COLOR_CORRECTION_THRESHOLD:
+ case COLOR_CORRECTION_PREDITHERED:
+ return raw_to_raw_threshold(v, in, out);
+ case COLOR_CORRECTION_UNCORRECTED:
+ case COLOR_CORRECTION_BRIGHT:
+ case COLOR_CORRECTION_HUE:
+ case COLOR_CORRECTION_ACCURATE:
+ case COLOR_CORRECTION_DESATURATED:
+ return raw_to_raw(v, in, out);
+ case COLOR_CORRECTION_RAW:
+ case COLOR_CORRECTION_DEFAULT:
+ case COLOR_CORRECTION_DENSITY:
+ return raw_to_raw_raw(v, in, out);
+ default:
+ return (unsigned) -1;
+ }
+}
diff --git a/src/main/color.c b/src/main/color.c
new file mode 100644
index 0000000..8a964c3
--- /dev/null
+++ b/src/main/color.c
@@ -0,0 +1,286 @@
+/*
+ * "$Id: color.c,v 1.10 2004/09/17 18:38:17 rleigh Exp $"
+ *
+ * Gimp-Print color module interface.
+ *
+ * Copyright (C) 2003 Roger Leigh (rleigh@debian.org)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * This file must include only standard C header files. The core code must
+ * compile on generic platforms that don't support glib, gimp, gtk, etc.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <string.h>
+#include <stdlib.h>
+
+
+static const char* stpi_color_namefunc(const void *item);
+static const char* stpi_color_long_namefunc(const void *item);
+
+static stp_list_t *color_list = NULL;
+
+
+static int
+stpi_init_color_list(void)
+{
+ if(color_list)
+ stp_list_destroy(color_list);
+ color_list = stp_list_create();
+ stp_list_set_namefunc(color_list, stpi_color_namefunc);
+ stp_list_set_long_namefunc(color_list, stpi_color_long_namefunc);
+ /* stp_list_set_sortfunc(color_list, stpi_color_sortfunc); */
+
+ return 0;
+}
+
+static inline void
+check_list(void)
+{
+ if (color_list == NULL)
+ {
+ stp_erprintf("No color drivers found: "
+ "are STP_DATA_PATH and STP_MODULE_PATH correct?\n");
+ stpi_init_color_list();
+ }
+}
+
+
+
+int
+stp_color_count(void)
+{
+ if (color_list == NULL)
+ {
+ stp_erprintf("No color modules found: "
+ "is STP_MODULE_PATH correct?\n");
+ stpi_init_color_list();
+ }
+ return stp_list_get_length(color_list);
+}
+
+
+static inline void
+check_color(const stp_color_t *c)
+{
+ if (c == NULL)
+ {
+ stp_erprintf("Null stp_color_t! Please report this bug.\n");
+ stp_abort();
+ }
+}
+
+
+const stp_color_t *
+stp_get_color_by_index(int idx)
+{
+ stp_list_item_t *color;
+
+ check_list();
+
+ color = stp_list_get_item_by_index(color_list, idx);
+ if (color == NULL)
+ return NULL;
+ return (const stp_color_t *) stp_list_item_get_data(color);
+}
+
+
+static const char *
+stpi_color_namefunc(const void *item)
+{
+ const stp_color_t *color = (const stp_color_t *) item;
+ check_color(color);
+ return color->short_name;
+}
+
+
+static const char *
+stpi_color_long_namefunc(const void *item)
+{
+ const stp_color_t *color = (const stp_color_t *) item;
+ check_color(color);
+ return color->long_name;
+}
+
+
+const char *
+stp_color_get_name(const stp_color_t *c)
+{
+ const stp_color_t *val = (const stp_color_t *) c;
+ check_color(val);
+ return val->short_name;
+}
+
+const char *
+stp_color_get_long_name(const stp_color_t *c)
+{
+ const stp_color_t *val = (const stp_color_t *) c;
+ check_color(val);
+ return gettext(val->long_name);
+}
+
+
+static const stp_colorfuncs_t *
+stpi_get_colorfuncs(const stp_color_t *c)
+{
+ const stp_color_t *val = (const stp_color_t *) c;
+ check_color(val);
+ return val->colorfuncs;
+}
+
+
+const stp_color_t *
+stp_get_color_by_name(const char *name)
+{
+ stp_list_item_t *color;
+
+ check_list();
+
+ color = stp_list_get_item_by_name(color_list, name);
+ if (!color)
+ return NULL;
+ return (const stp_color_t *) stp_list_item_get_data(color);
+}
+
+const stp_color_t *
+stp_get_color_by_colorfuncs(stp_colorfuncs_t *colorfuncs)
+{
+ stp_list_item_t *color_item;
+ stp_color_t *color;
+
+ check_list();
+
+ color_item = stp_list_get_start(color_list);
+ while (color_item)
+ {
+ color = (stp_color_t *) stp_list_item_get_data(color_item);
+ if (color->colorfuncs == colorfuncs)
+ return color;
+ color_item = stp_list_item_next(color_item);
+ }
+ return NULL;
+}
+
+
+int
+stp_color_init(stp_vars_t *v,
+ stp_image_t *image,
+ size_t steps)
+{
+ const stp_colorfuncs_t *colorfuncs =
+ stpi_get_colorfuncs(stp_get_color_by_name(stp_get_color_conversion(v)));
+ return colorfuncs->init(v, image, steps);
+}
+
+int
+stp_color_get_row(stp_vars_t *v,
+ stp_image_t *image,
+ int row,
+ unsigned *zero_mask)
+{
+ const stp_colorfuncs_t *colorfuncs =
+ stpi_get_colorfuncs(stp_get_color_by_name(stp_get_color_conversion(v)));
+ return colorfuncs->get_row(v, image, row, zero_mask);
+}
+
+stp_parameter_list_t
+stp_color_list_parameters(const stp_vars_t *v)
+{
+ const stp_colorfuncs_t *colorfuncs =
+ stpi_get_colorfuncs(stp_get_color_by_name(stp_get_color_conversion(v)));
+ return colorfuncs->list_parameters(v);
+}
+
+void
+stp_color_describe_parameter(const stp_vars_t *v, const char *name,
+ stp_parameter_t *description)
+{
+ const stp_colorfuncs_t *colorfuncs =
+ stpi_get_colorfuncs(stp_get_color_by_name(stp_get_color_conversion(v)));
+ colorfuncs->describe_parameter(v, name, description);
+}
+
+
+int
+stp_color_register(const stp_color_t *color)
+{
+ if (color_list == NULL)
+ {
+ stpi_init_color_list();
+ stp_deprintf(STP_DBG_COLORFUNC,
+ "stpi_color_register(): initialising color_list...\n");
+ }
+
+ check_color(color);
+
+ if (color)
+ {
+ /* Add new color algorithm if it does not already exist */
+ if (stp_get_color_by_name(color->short_name) == NULL)
+ {
+ stp_deprintf
+ (STP_DBG_COLORFUNC,
+ "stpi_color_register(): registered colour module \"%s\"\n",
+ color->short_name);
+ stp_list_item_create(color_list, NULL, color);
+ }
+ }
+
+ return 0;
+}
+
+int
+stp_color_unregister(const stp_color_t *color)
+{
+ stp_list_item_t *color_item;
+ stp_color_t *color_data;
+
+ if (color_list == NULL)
+ {
+ stpi_init_color_list();
+ stp_deprintf
+ (STP_DBG_COLORFUNC,
+ "stpi_family_unregister(): initialising color_list...\n");
+ }
+
+ check_color(color);
+
+ color_item = stp_list_get_start(color_list);
+ while (color_item)
+ {
+ color_data = (stp_color_t *) stp_list_item_get_data(color_item);
+ if (strcmp(color->short_name, color_data->short_name) == 0)
+ {
+ stp_deprintf
+ (STP_DBG_COLORFUNC,
+ "stpi_color_unregister(): unregistered colour module \"%s\"\n",
+ color->short_name);
+ stp_list_item_destroy(color_list, color_item);
+ break;
+ }
+ color_item = stp_list_item_next(color_item);
+ }
+
+ return 0;
+}
+
diff --git a/src/main/curve-cache.c b/src/main/curve-cache.c
new file mode 100644
index 0000000..37b51b0
--- /dev/null
+++ b/src/main/curve-cache.c
@@ -0,0 +1,141 @@
+/*
+ * "$Id: curve-cache.c,v 1.5 2004/09/17 18:38:17 rleigh Exp $"
+ *
+ * Gimp-Print color management module - traditional Gimp-Print algorithm.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * This file must include only standard C header files. The core code must
+ * compile on generic platforms that don't support glib, gimp, gtk, etc.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <gutenprint/curve-cache.h>
+#include <math.h>
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#include <string.h>
+
+void
+stp_curve_free_curve_cache(stp_cached_curve_t *cache)
+{
+ if (cache->curve)
+ stp_curve_destroy(cache->curve);
+ cache->curve = NULL;
+ cache->d_cache = NULL;
+ cache->s_cache = NULL;
+ cache->count = 0;
+}
+
+void
+stp_curve_cache_curve_data(stp_cached_curve_t *cache)
+{
+ if (cache->curve && !cache->d_cache)
+ {
+ cache->s_cache = stp_curve_get_ushort_data(cache->curve, &(cache->count));
+ cache->d_cache = stp_curve_get_data(cache->curve, &(cache->count));
+ }
+}
+
+stp_curve_t *
+stp_curve_cache_get_curve(stp_cached_curve_t *cache)
+{
+ return cache->curve;
+}
+
+void
+stp_curve_cache_curve_invalidate(stp_cached_curve_t *cache)
+{
+ cache->d_cache = NULL;
+ cache->s_cache = NULL;
+ cache->count = 0;
+}
+
+void
+stp_curve_cache_set_curve(stp_cached_curve_t *cache, stp_curve_t *curve)
+{
+ stp_curve_cache_curve_invalidate(cache);
+ cache->curve = curve;
+}
+
+void
+stp_curve_cache_set_curve_copy(stp_cached_curve_t *cache, const stp_curve_t *curve)
+{
+ stp_curve_cache_curve_invalidate(cache);
+ cache->curve = stp_curve_create_copy(curve);
+}
+
+const size_t
+stp_curve_cache_get_count(stp_cached_curve_t *cache)
+{
+ if (cache->curve)
+ {
+ if (!cache->d_cache)
+ cache->d_cache = stp_curve_get_data(cache->curve, &(cache->count));
+ return cache->count;
+ }
+ else
+ return 0;
+}
+
+const unsigned short *
+stp_curve_cache_get_ushort_data(stp_cached_curve_t *cache)
+{
+ if (cache->curve)
+ {
+ if (!cache->s_cache)
+ cache->s_cache =
+ stp_curve_get_ushort_data(cache->curve, &(cache->count));
+ return cache->s_cache;
+ }
+ else
+ return NULL;
+}
+
+const double *
+stp_curve_cache_get_double_data(stp_cached_curve_t *cache)
+{
+ if (cache->curve)
+ {
+ if (!cache->d_cache)
+ cache->d_cache = stp_curve_get_data(cache->curve, &(cache->count));
+ return cache->d_cache;
+ }
+ else
+ return NULL;
+}
+
+void
+stp_curve_cache_copy(stp_cached_curve_t *dest, const stp_cached_curve_t *src)
+{
+ stp_curve_cache_curve_invalidate(dest);
+ if (dest != src)
+ {
+ if (src->curve)
+ stp_curve_cache_set_curve_copy(dest, src->curve);
+ }
+}
+
diff --git a/src/main/curve.c b/src/main/curve.c
new file mode 100644
index 0000000..03c2ede
--- /dev/null
+++ b/src/main/curve.c
@@ -0,0 +1,1901 @@
+/*
+ * "$Id: curve.c,v 1.51 2005/04/10 22:57:40 rlk Exp $"
+ *
+ * Print plug-in driver utility functions for the GIMP.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <math.h>
+#ifdef sun
+#include <ieeefp.h>
+#endif
+#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef __GNUC__
+#define inline __inline__
+#endif
+
+#undef inline
+#define inline
+
+static const int curve_point_limit = 1048576;
+
+struct stp_curve
+{
+ stp_curve_type_t curve_type;
+ stp_curve_wrap_mode_t wrap_mode;
+ int piecewise;
+ int recompute_interval; /* Do we need to recompute the deltas? */
+ double gamma; /* 0.0 means that the curve is not a gamma */
+ stp_sequence_t *seq; /* Sequence (contains the curve data) */
+ double *interval; /* We allocate an extra slot for the
+ wrap-around value. */
+
+};
+
+static const char *const stpi_curve_type_names[] =
+ {
+ "linear",
+ "spline",
+ };
+
+static const int stpi_curve_type_count =
+(sizeof(stpi_curve_type_names) / sizeof(const char *));
+
+static const char *const stpi_wrap_mode_names[] =
+ {
+ "nowrap",
+ "wrap"
+ };
+
+static const int stpi_wrap_mode_count =
+(sizeof(stpi_wrap_mode_names) / sizeof(const char *));
+
+/*
+ * We could do more sanity checks here if we want.
+ */
+static void
+check_curve(const stp_curve_t *curve)
+{
+ if (curve == NULL)
+ {
+ stp_erprintf("Null curve! Please report this bug.\n");
+ stp_abort();
+ }
+ if (curve->seq == NULL)
+ {
+ stp_erprintf("Bad curve (seq == NULL)! Please report this bug.\n");
+ stp_abort();
+ }
+}
+
+/*
+ * Get the total number of points in the base sequence class
+ */
+static size_t
+get_real_point_count(const stp_curve_t *curve)
+{
+ if (curve->piecewise)
+ return stp_sequence_get_size(curve->seq) / 2;
+ else
+ return stp_sequence_get_size(curve->seq);
+}
+
+/*
+ * Get the number of points used by the curve (that are visible to the
+ * user). This is the real point count, but is decreased by 1 if the
+ * curve wraps around.
+ */
+static size_t
+get_point_count(const stp_curve_t *curve)
+{
+ size_t count = get_real_point_count(curve);
+ if (curve->wrap_mode == STP_CURVE_WRAP_AROUND)
+ count -= 1;
+
+ return count;
+}
+
+static void
+invalidate_auxiliary_data(stp_curve_t *curve)
+{
+ STP_SAFE_FREE(curve->interval);
+}
+
+static void
+clear_curve_data(stp_curve_t *curve)
+{
+ if (curve->seq)
+ stp_sequence_set_size(curve->seq, 0);
+ curve->recompute_interval = 0;
+ invalidate_auxiliary_data(curve);
+}
+
+static void
+compute_linear_deltas(stp_curve_t *curve)
+{
+ int i;
+ size_t delta_count;
+ size_t seq_point_count;
+ const double *data;
+
+ stp_sequence_get_data(curve->seq, &seq_point_count, &data);
+ if (data == NULL)
+ return;
+
+ delta_count = get_real_point_count(curve);
+
+ if (delta_count <= 1) /* No intervals can be computed */
+ return;
+ delta_count--; /* One less than the real point count. Note size_t
+ is unsigned. */
+
+ curve->interval = stp_malloc(sizeof(double) * delta_count);
+ for (i = 0; i < delta_count; i++)
+ {
+ if (curve->piecewise)
+ curve->interval[i] = data[(2 * (i + 1)) + 1] - data[(2 * i) + 1];
+ else
+ curve->interval[i] = data[i + 1] - data[i];
+ }
+}
+
+static void
+compute_spline_deltas_piecewise(stp_curve_t *curve)
+{
+ int i;
+ int k;
+ double *u;
+ double *y2;
+ const double *data = NULL;
+ const stp_curve_point_t *dp;
+ size_t point_count;
+ size_t real_point_count;
+ double sig;
+ double p;
+
+ point_count = get_point_count(curve);
+
+ stp_sequence_get_data(curve->seq, &real_point_count, &data);
+ dp = (const stp_curve_point_t *)data;
+ real_point_count = real_point_count / 2;
+
+ u = stp_malloc(sizeof(double) * real_point_count);
+ y2 = stp_malloc(sizeof(double) * real_point_count);
+
+ if (curve->wrap_mode == STP_CURVE_WRAP_AROUND)
+ {
+ int reps = 3;
+ int count = reps * real_point_count;
+ double *y2a = stp_malloc(sizeof(double) * count);
+ double *ua = stp_malloc(sizeof(double) * count);
+ y2a[0] = 0.0;
+ ua[0] = 0.0;
+ for (i = 1; i < count - 1; i++)
+ {
+ int im1 = (i - 1) % point_count;
+ int ia = i % point_count;
+ int ip1 = (i + 1) % point_count;
+
+ sig = (dp[ia].x - dp[im1].x) / (dp[ip1].x - dp[im1].x);
+ p = sig * y2a[im1] + 2.0;
+ y2a[i] = (sig - 1.0) / p;
+
+ ua[i] = ((dp[ip1].y - dp[ia].y) / (dp[ip1].x - dp[ia].x)) -
+ ((dp[ia].y - dp[im1].y) / (dp[ia].x - dp[im1].x));
+ ua[i] =
+ (((6.0 * ua[ia]) / (dp[ip1].x - dp[im1].x)) - (sig * ua[im1])) / p;
+ }
+ y2a[count - 1] = 0.0;
+ for (k = count - 2 ; k >= 0; k--)
+ y2a[k] = y2a[k] * y2a[k + 1] + ua[k];
+ memcpy(u, ua + ((reps / 2) * point_count),
+ sizeof(double) * real_point_count);
+ memcpy(y2, y2a + ((reps / 2) * point_count),
+ sizeof(double) * real_point_count);
+ stp_free(y2a);
+ stp_free(ua);
+ }
+ else
+ {
+ int count = real_point_count - 1;
+
+ y2[0] = 0;
+ u[0] = 2 * (dp[1].y - dp[0].y);
+ for (i = 1; i < count; i++)
+ {
+ int im1 = (i - 1);
+ int ip1 = (i + 1);
+
+ sig = (dp[i].x - dp[im1].x) / (dp[ip1].x - dp[im1].x);
+ p = sig * y2[im1] + 2.0;
+ y2[i] = (sig - 1.0) / p;
+
+ u[i] = ((dp[ip1].y - dp[i].y) / (dp[ip1].x - dp[i].x)) -
+ ((dp[i].y - dp[im1].y) / (dp[i].x - dp[im1].x));
+ u[i] =
+ (((6.0 * u[i]) / (dp[ip1].x - dp[im1].x)) - (sig * u[im1])) / p;
+ stp_deprintf(STP_DBG_CURVE,
+ "%d sig %f p %f y2 %f u %f x %f %f %f y %f %f %f\n",
+ i, sig, p, y2[i], u[i],
+ dp[im1].x, dp[i].x, dp[ip1].x,
+ dp[im1].y, dp[i].y, dp[ip1].y);
+ }
+ y2[count] = 0.0;
+ u[count] = 0.0;
+ for (k = real_point_count - 2; k >= 0; k--)
+ y2[k] = y2[k] * y2[k + 1] + u[k];
+ }
+
+ curve->interval = y2;
+ stp_free(u);
+}
+
+static void
+compute_spline_deltas_dense(stp_curve_t *curve)
+{
+ int i;
+ int k;
+ double *u;
+ double *y2;
+ const double *y;
+ size_t point_count;
+ size_t real_point_count;
+ double sig;
+ double p;
+
+ point_count = get_point_count(curve);
+
+ stp_sequence_get_data(curve->seq, &real_point_count, &y);
+ u = stp_malloc(sizeof(double) * real_point_count);
+ y2 = stp_malloc(sizeof(double) * real_point_count);
+
+ if (curve->wrap_mode == STP_CURVE_WRAP_AROUND)
+ {
+ int reps = 3;
+ int count = reps * real_point_count;
+ double *y2a = stp_malloc(sizeof(double) * count);
+ double *ua = stp_malloc(sizeof(double) * count);
+ y2a[0] = 0.0;
+ ua[0] = 0.0;
+ for (i = 1; i < count - 1; i++)
+ {
+ int im1 = (i - 1);
+ int ip1 = (i + 1);
+ int im1a = im1 % point_count;
+ int ia = i % point_count;
+ int ip1a = ip1 % point_count;
+
+ sig = (i - im1) / (ip1 - im1);
+ p = sig * y2a[im1] + 2.0;
+ y2a[i] = (sig - 1.0) / p;
+
+ ua[i] = y[ip1a] - 2 * y[ia] + y[im1a];
+ ua[i] = 3.0 * ua[i] - sig * ua[im1] / p;
+ }
+ y2a[count - 1] = 0.0;
+ for (k = count - 2 ; k >= 0; k--)
+ y2a[k] = y2a[k] * y2a[k + 1] + ua[k];
+ memcpy(u, ua + ((reps / 2) * point_count),
+ sizeof(double) * real_point_count);
+ memcpy(y2, y2a + ((reps / 2) * point_count),
+ sizeof(double) * real_point_count);
+ stp_free(y2a);
+ stp_free(ua);
+ }
+ else
+ {
+ int count = real_point_count - 1;
+
+ y2[0] = 0;
+ u[0] = 2 * (y[1] - y[0]);
+ for (i = 1; i < count; i++)
+ {
+ int im1 = (i - 1);
+ int ip1 = (i + 1);
+
+ sig = (i - im1) / (ip1 - im1);
+ p = sig * y2[im1] + 2.0;
+ y2[i] = (sig - 1.0) / p;
+
+ u[i] = y[ip1] - 2 * y[i] + y[im1];
+ u[i] = 3.0 * u[i] - sig * u[im1] / p;
+ }
+
+ u[count] = 2 * (y[count] - y[count - 1]);
+ y2[count] = 0.0;
+
+ u[count] = 0.0;
+ for (k = real_point_count - 2; k >= 0; k--)
+ y2[k] = y2[k] * y2[k + 1] + u[k];
+ }
+
+ curve->interval = y2;
+ stp_free(u);
+}
+
+static void
+compute_spline_deltas(stp_curve_t *curve)
+{
+ if (curve->piecewise)
+ compute_spline_deltas_piecewise(curve);
+ else
+ compute_spline_deltas_dense(curve);
+}
+
+/*
+ * Recompute the delta values for interpolation.
+ * When we actually do support spline curves, this routine will
+ * compute the second derivatives for that purpose, too.
+ */
+static void
+compute_intervals(stp_curve_t *curve)
+{
+ if (curve->interval)
+ {
+ stp_free(curve->interval);
+ curve->interval = NULL;
+ }
+ if (stp_sequence_get_size(curve->seq) > 0)
+ {
+ switch (curve->curve_type)
+ {
+ case STP_CURVE_TYPE_SPLINE:
+ compute_spline_deltas(curve);
+ break;
+ case STP_CURVE_TYPE_LINEAR:
+ compute_linear_deltas(curve);
+ break;
+ }
+ }
+ curve->recompute_interval = 0;
+}
+
+static int
+stpi_curve_set_points(stp_curve_t *curve, size_t points)
+{
+ if (points < 2)
+ return 0;
+ if (points > curve_point_limit ||
+ (curve->wrap_mode == STP_CURVE_WRAP_AROUND &&
+ points > curve_point_limit - 1))
+ return 0;
+ clear_curve_data(curve);
+ if (curve->wrap_mode == STP_CURVE_WRAP_AROUND)
+ points++;
+ if (curve->piecewise)
+ points *= 2;
+ if ((stp_sequence_set_size(curve->seq, points)) == 0)
+ return 0;
+ return 1;
+}
+
+/*
+ * Create a default curve
+ */
+static void
+stpi_curve_ctor(stp_curve_t *curve, stp_curve_wrap_mode_t wrap_mode)
+{
+ curve->seq = stp_sequence_create();
+ stp_sequence_set_bounds(curve->seq, 0.0, 1.0);
+ curve->curve_type = STP_CURVE_TYPE_LINEAR;
+ curve->wrap_mode = wrap_mode;
+ curve->piecewise = 0;
+ stpi_curve_set_points(curve, 2);
+ curve->recompute_interval = 1;
+ if (wrap_mode == STP_CURVE_WRAP_NONE)
+ curve->gamma = 1.0;
+ stp_sequence_set_point(curve->seq, 0, 0);
+ stp_sequence_set_point(curve->seq, 1, 1);
+}
+
+stp_curve_t *
+stp_curve_create(stp_curve_wrap_mode_t wrap_mode)
+{
+ stp_curve_t *ret;
+ if (wrap_mode != STP_CURVE_WRAP_NONE && wrap_mode != STP_CURVE_WRAP_AROUND)
+ return NULL;
+ ret = stp_zalloc(sizeof(stp_curve_t));
+ stpi_curve_ctor(ret, wrap_mode);
+ return ret;
+}
+
+static void
+curve_dtor(stp_curve_t *curve)
+{
+ check_curve(curve);
+ clear_curve_data(curve);
+ if (curve->seq)
+ stp_sequence_destroy(curve->seq);
+ memset(curve, 0, sizeof(stp_curve_t));
+ curve->curve_type = -1;
+}
+
+void
+stp_curve_destroy(stp_curve_t *curve)
+{
+ curve_dtor(curve);
+ stp_free(curve);
+}
+
+void
+stp_curve_copy(stp_curve_t *dest, const stp_curve_t *source)
+{
+ check_curve(dest);
+ check_curve(source);
+ curve_dtor(dest);
+ dest->curve_type = source->curve_type;
+ dest->wrap_mode = source->wrap_mode;
+ dest->gamma = source->gamma;
+ dest->seq = stp_sequence_create_copy(source->seq);
+ dest->piecewise = source->piecewise;
+ dest->recompute_interval = 1;
+}
+
+stp_curve_t *
+stp_curve_create_copy(const stp_curve_t *curve)
+{
+ stp_curve_t *ret;
+ check_curve(curve);
+ ret = stp_curve_create(curve->wrap_mode);
+ stp_curve_copy(ret, curve);
+ return ret;
+}
+
+int
+stp_curve_set_bounds(stp_curve_t *curve, double low, double high)
+{
+ check_curve(curve);
+ return stp_sequence_set_bounds(curve->seq, low, high);
+}
+
+void
+stp_curve_get_bounds(const stp_curve_t *curve, double *low, double *high)
+{
+ check_curve(curve);
+ stp_sequence_get_bounds(curve->seq, low, high);
+}
+
+/*
+ * Find the minimum and maximum points on the curve. This does not
+ * attempt to find the minimum and maximum interpolations; with cubic
+ * splines these could exceed the boundaries. That's OK; the interpolation
+ * code will clip them to the bounds.
+ */
+void
+stp_curve_get_range(const stp_curve_t *curve, double *low, double *high)
+{
+ check_curve(curve);
+ stp_sequence_get_range(curve->seq, low, high);
+}
+
+size_t
+stp_curve_count_points(const stp_curve_t *curve)
+{
+ check_curve(curve);
+ return get_point_count(curve);
+}
+
+stp_curve_wrap_mode_t
+stp_curve_get_wrap(const stp_curve_t *curve)
+{
+ check_curve(curve);
+ return curve->wrap_mode;
+}
+
+int
+stp_curve_is_piecewise(const stp_curve_t *curve)
+{
+ check_curve(curve);
+ return curve->piecewise;
+}
+
+int
+stp_curve_set_interpolation_type(stp_curve_t *curve, stp_curve_type_t itype)
+{
+ check_curve(curve);
+ if (itype < 0 || itype >= stpi_curve_type_count)
+ return 0;
+ curve->curve_type = itype;
+ return 1;
+}
+
+stp_curve_type_t
+stp_curve_get_interpolation_type(const stp_curve_t *curve)
+{
+ check_curve(curve);
+ return curve->curve_type;
+}
+
+int
+stp_curve_set_gamma(stp_curve_t *curve, double fgamma)
+{
+ check_curve(curve);
+ if (curve->wrap_mode || ! finite(fgamma) || fgamma == 0.0)
+ return 0;
+ clear_curve_data(curve);
+ curve->gamma = fgamma;
+ stp_curve_resample(curve, 2);
+ return 1;
+}
+
+double
+stp_curve_get_gamma(const stp_curve_t *curve)
+{
+ check_curve(curve);
+ return curve->gamma;
+}
+
+int
+stp_curve_set_data(stp_curve_t *curve, size_t count, const double *data)
+{
+ size_t i;
+ size_t real_count = count;
+ double low, high;
+ check_curve(curve);
+ if (count < 2)
+ return 0;
+ if (curve->wrap_mode == STP_CURVE_WRAP_AROUND)
+ real_count++;
+ if (real_count > curve_point_limit)
+ return 0;
+
+ /* Validate the data before we commit to it. */
+ stp_sequence_get_bounds(curve->seq, &low, &high);
+ for (i = 0; i < count; i++)
+ if (! finite(data[i]) || data[i] < low || data[i] > high)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_set_data: datum out of bounds: "
+ "%g (require %g <= x <= %g), n = %d\n",
+ data[i], low, high, i);
+ return 0;
+ }
+ /* Allocate sequence; also accounts for WRAP_MODE */
+ stpi_curve_set_points(curve, count);
+ curve->gamma = 0.0;
+ stp_sequence_set_subrange(curve->seq, 0, count, data);
+
+ if (curve->wrap_mode == STP_CURVE_WRAP_AROUND)
+ stp_sequence_set_point(curve->seq, count, data[0]);
+ curve->recompute_interval = 1;
+ curve->piecewise = 0;
+
+ return 1;
+}
+
+int
+stp_curve_set_data_points(stp_curve_t *curve, size_t count,
+ const stp_curve_point_t *data)
+{
+ size_t i;
+ size_t real_count = count;
+ double low, high;
+ double last_x = -1;
+ check_curve(curve);
+ if (count < 2)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_set_data_points: too few points %d\n", count);
+ return 0;
+ }
+ if (curve->wrap_mode == STP_CURVE_WRAP_AROUND)
+ real_count++;
+ if (real_count > curve_point_limit)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_set_data_points: too many points %d\n",
+ real_count);
+ return 0;
+ }
+
+ /* Validate the data before we commit to it. */
+ stp_sequence_get_bounds(curve->seq, &low, &high);
+ for (i = 0; i < count; i++)
+ {
+ if (! finite(data[i].y) || data[i].y < low || data[i].y > high)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_set_data_points: datum out of bounds: "
+ "%g (require %g <= x <= %g), n = %d\n",
+ data[i].y, low, high, i);
+ return 0;
+ }
+ if (i == 0 && data[i].x != 0.0)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_set_data_points: first point must have x=0\n");
+ return 0;
+ }
+ if (curve->wrap_mode == STP_CURVE_WRAP_NONE && i == count - 1 &&
+ data[i].x != 1.0)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_set_data_points: last point must have x=1\n");
+ return 0;
+ }
+ if (curve->wrap_mode == STP_CURVE_WRAP_AROUND &&
+ data[i].x >= 1.0 - .000001)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_set_data_points: horizontal value must "
+ "not exceed .99999\n");
+ return 0;
+ }
+ if (data[i].x < 0 || data[i].x > 1)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_set_data_points: horizontal position out of bounds: "
+ "%g, n = %d\n",
+ data[i].x, i);
+ return 0;
+ }
+ if (data[i].x - .000001 < last_x)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_set_data_points: horizontal position must "
+ "exceed previous position by .000001: %g, %g, n = %d\n",
+ data[i].x, last_x, i);
+ return 0;
+ }
+ last_x = data[i].x;
+ }
+ /* Allocate sequence; also accounts for WRAP_MODE */
+ curve->piecewise = 1;
+ stpi_curve_set_points(curve, count);
+ curve->gamma = 0.0;
+ stp_sequence_set_subrange(curve->seq, 0, count * 2, (const double *) data);
+
+ if (curve->wrap_mode == STP_CURVE_WRAP_AROUND)
+ {
+ stp_sequence_set_point(curve->seq, count * 2, data[0].x);
+ stp_sequence_set_point(curve->seq, count * 2 + 1, data[0].y);
+ }
+ curve->recompute_interval = 1;
+
+ return 1;
+}
+
+
+/*
+ * Note that we return a pointer to the raw data here.
+ * A lot of operations change the data vector, that's why we don't
+ * guarantee it across non-const calls.
+ */
+const double *
+stp_curve_get_data(const stp_curve_t *curve, size_t *count)
+{
+ const double *ret;
+ check_curve(curve);
+ if (curve->piecewise)
+ return NULL;
+ stp_sequence_get_data(curve->seq, count, &ret);
+ *count = get_point_count(curve);
+ return ret;
+}
+
+const stp_curve_point_t *
+stp_curve_get_data_points(const stp_curve_t *curve, size_t *count)
+{
+ const double *ret;
+ check_curve(curve);
+ if (!curve->piecewise)
+ return NULL;
+ stp_sequence_get_data(curve->seq, count, &ret);
+ *count = get_point_count(curve);
+ return (const stp_curve_point_t *) ret;
+}
+
+static const double *
+stpi_curve_get_data_internal(const stp_curve_t *curve, size_t *count)
+{
+ const double *ret;
+ check_curve(curve);
+ stp_sequence_get_data(curve->seq, count, &ret);
+ *count = get_point_count(curve);
+ if (curve->piecewise)
+ *count *= 2;
+ return ret;
+}
+
+
+/* "Overloaded" functions */
+
+#define DEFINE_DATA_SETTER(t, name) \
+int \
+stp_curve_set_##name##_data(stp_curve_t *curve, size_t count, const t *data) \
+{ \
+ double *tmp_data; \
+ size_t i; \
+ int status; \
+ size_t real_count = count; \
+ \
+ check_curve(curve); \
+ if (count < 2) \
+ return 0; \
+ if (curve->wrap_mode == STP_CURVE_WRAP_AROUND) \
+ real_count++; \
+ if (real_count > curve_point_limit) \
+ return 0; \
+ tmp_data = stp_malloc(count * sizeof(double)); \
+ for (i = 0; i < count; i++) \
+ tmp_data[i] = (double) data[i]; \
+ status = stp_curve_set_data(curve, count, tmp_data); \
+ stp_free(tmp_data); \
+ return status; \
+ }
+
+DEFINE_DATA_SETTER(float, float)
+DEFINE_DATA_SETTER(long, long)
+DEFINE_DATA_SETTER(unsigned long, ulong)
+DEFINE_DATA_SETTER(int, int)
+DEFINE_DATA_SETTER(unsigned int, uint)
+DEFINE_DATA_SETTER(short, short)
+DEFINE_DATA_SETTER(unsigned short, ushort)
+
+
+#define DEFINE_DATA_ACCESSOR(t, name) \
+const t * \
+stp_curve_get_##name##_data(const stp_curve_t *curve, size_t *count) \
+{ \
+ if (curve->piecewise) \
+ return 0; \
+ return stp_sequence_get_##name##_data(curve->seq, count); \
+}
+
+DEFINE_DATA_ACCESSOR(float, float)
+DEFINE_DATA_ACCESSOR(long, long)
+DEFINE_DATA_ACCESSOR(unsigned long, ulong)
+DEFINE_DATA_ACCESSOR(int, int)
+DEFINE_DATA_ACCESSOR(unsigned int, uint)
+DEFINE_DATA_ACCESSOR(short, short)
+DEFINE_DATA_ACCESSOR(unsigned short, ushort)
+
+
+stp_curve_t *
+stp_curve_get_subrange(const stp_curve_t *curve, size_t start, size_t count)
+{
+ stp_curve_t *retval;
+ size_t ncount;
+ double blo, bhi;
+ const double *data;
+ if (start + count > stp_curve_count_points(curve) || count < 2)
+ return NULL;
+ if (curve->piecewise)
+ return NULL;
+ retval = stp_curve_create(STP_CURVE_WRAP_NONE);
+ stp_curve_get_bounds(curve, &blo, &bhi);
+ stp_curve_set_bounds(retval, blo, bhi);
+ data = stp_curve_get_data(curve, &ncount);
+ if (! stp_curve_set_data(retval, count, data + start))
+ {
+ stp_curve_destroy(retval);
+ return NULL;
+ }
+ return retval;
+}
+
+int
+stp_curve_set_subrange(stp_curve_t *curve, const stp_curve_t *range,
+ size_t start)
+{
+ double blo, bhi;
+ double rlo, rhi;
+ const double *data;
+ size_t count;
+ check_curve(curve);
+ if (start + stp_curve_count_points(range) > stp_curve_count_points(curve))
+ return 0;
+ if (curve->piecewise)
+ return 0;
+ stp_sequence_get_bounds(curve->seq, &blo, &bhi);
+ stp_sequence_get_range(curve->seq, &rlo, &rhi);
+ if (rlo < blo || rhi > bhi)
+ return 0;
+ stp_sequence_get_data(range->seq, &count, &data);
+ curve->recompute_interval = 1;
+ curve->gamma = 0.0;
+ invalidate_auxiliary_data(curve);
+ stp_sequence_set_subrange(curve->seq, start, stp_curve_count_points(range),
+ data);
+ return 1;
+}
+
+
+int
+stp_curve_set_point(stp_curve_t *curve, size_t where, double data)
+{
+ check_curve(curve);
+ if (where >= get_point_count(curve))
+ return 0;
+ curve->gamma = 0.0;
+
+ if (curve->piecewise)
+ return 0;
+ if ((stp_sequence_set_point(curve->seq, where, data)) == 0)
+ return 0;
+ if (where == 0 && curve->wrap_mode == STP_CURVE_WRAP_AROUND)
+ if ((stp_sequence_set_point(curve->seq,
+ get_point_count(curve), data)) == 0)
+ return 0;
+ invalidate_auxiliary_data(curve);
+ return 1;
+}
+
+int
+stp_curve_get_point(const stp_curve_t *curve, size_t where, double *data)
+{
+ check_curve(curve);
+ if (where >= get_point_count(curve))
+ return 0;
+ if (curve->piecewise)
+ return 0;
+ return stp_sequence_get_point(curve->seq, where, data);
+}
+
+const stp_sequence_t *
+stp_curve_get_sequence(const stp_curve_t *curve)
+{
+ check_curve(curve);
+ if (curve->piecewise)
+ return NULL;
+ return curve->seq;
+}
+
+int
+stp_curve_rescale(stp_curve_t *curve, double scale,
+ stp_curve_compose_t mode, stp_curve_bounds_t bounds_mode)
+{
+ size_t real_point_count;
+ int i;
+ double nblo;
+ double nbhi;
+ size_t count;
+
+ check_curve(curve);
+
+ real_point_count = get_real_point_count(curve);
+
+ stp_sequence_get_bounds(curve->seq, &nblo, &nbhi);
+ if (bounds_mode == STP_CURVE_BOUNDS_RESCALE)
+ {
+ switch (mode)
+ {
+ case STP_CURVE_COMPOSE_ADD:
+ nblo += scale;
+ nbhi += scale;
+ break;
+ case STP_CURVE_COMPOSE_MULTIPLY:
+ if (scale < 0)
+ {
+ double tmp = nblo * scale;
+ nblo = nbhi * scale;
+ nbhi = tmp;
+ }
+ else
+ {
+ nblo *= scale;
+ nbhi *= scale;
+ }
+ break;
+ case STP_CURVE_COMPOSE_EXPONENTIATE:
+ if (scale == 0.0)
+ return 0;
+ if (nblo < 0)
+ return 0;
+ nblo = pow(nblo, scale);
+ nbhi = pow(nbhi, scale);
+ break;
+ default:
+ return 0;
+ }
+ }
+
+ if (! finite(nbhi) || ! finite(nblo))
+ return 0;
+
+ count = get_point_count(curve);
+ if (count)
+ {
+ double *tmp;
+ size_t scount;
+ int stride = 1;
+ int offset = 0;
+ const double *data;
+ if (curve->piecewise)
+ {
+ stride = 2;
+ offset = 1;
+ }
+ stp_sequence_get_data(curve->seq, &scount, &data);
+ tmp = stp_malloc(sizeof(double) * scount);
+ memcpy(tmp, data, scount * sizeof(double));
+ for (i = offset; i < scount; i += stride)
+ {
+ switch (mode)
+ {
+ case STP_CURVE_COMPOSE_ADD:
+ tmp[i] = tmp[i] + scale;
+ break;
+ case STP_CURVE_COMPOSE_MULTIPLY:
+ tmp[i] = tmp[i] * scale;
+ break;
+ case STP_CURVE_COMPOSE_EXPONENTIATE:
+ tmp[i] = pow(tmp[i], scale);
+ break;
+ }
+ if (tmp[i] > nbhi || tmp[i] < nblo)
+ {
+ if (bounds_mode == STP_CURVE_BOUNDS_ERROR)
+ {
+ stp_free(tmp);
+ return(0);
+ }
+ else if (tmp[i] > nbhi)
+ tmp[i] = nbhi;
+ else
+ tmp[i] = nblo;
+ }
+ }
+ stp_sequence_set_bounds(curve->seq, nblo, nbhi);
+ curve->gamma = 0.0;
+ stpi_curve_set_points(curve, count);
+ stp_sequence_set_subrange(curve->seq, 0, scount, tmp);
+ stp_free(tmp);
+ curve->recompute_interval = 1;
+ invalidate_auxiliary_data(curve);
+ }
+ return 1;
+}
+
+static int
+stpi_curve_check_parameters(stp_curve_t *curve, size_t points)
+{
+ double blo, bhi;
+ if (curve->gamma && curve->wrap_mode)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "curve sets both gamma and wrap_mode\n");
+ return 0;
+ }
+ stp_sequence_get_bounds(curve->seq, &blo, &bhi);
+ if (blo > bhi)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "curve low bound is greater than high bound\n");
+ return 0;
+ }
+ return 1;
+}
+
+static inline double
+interpolate_gamma_internal(const stp_curve_t *curve, double where)
+{
+ double fgamma = curve->gamma;
+ double blo, bhi;
+ size_t real_point_count;
+
+ real_point_count = get_real_point_count(curve);;
+
+ if (real_point_count)
+ where /= (real_point_count - 1);
+ if (fgamma < 0)
+ {
+ where = 1.0 - where;
+ fgamma = -fgamma;
+ }
+ stp_sequence_get_bounds(curve->seq, &blo, &bhi);
+ stp_deprintf(STP_DBG_CURVE,
+ "interpolate_gamma %f %f %f %f %f\n", where, fgamma,
+ blo, bhi, pow(where, fgamma));
+ return blo + (bhi - blo) * pow(where, fgamma);
+}
+
+static inline double
+do_interpolate_spline(double low, double high, double frac,
+ double interval_low, double interval_high,
+ double x_interval)
+{
+ double a = 1.0 - frac;
+ double b = frac;
+ double retval =
+ ((a * a * a - a) * interval_low) + ((b * b * b - b) * interval_high);
+ retval = retval * x_interval * x_interval / 6;
+ retval += (a * low) + (b * high);
+ return retval;
+}
+
+static inline double
+interpolate_point_internal(stp_curve_t *curve, double where)
+{
+ int integer = where;
+ double frac = where - (double) integer;
+ double bhi, blo;
+
+ if (frac == 0.0)
+ {
+ double val;
+ if ((stp_sequence_get_point(curve->seq, integer, &val)) == 0)
+ return HUGE_VAL; /* Infinity */
+ return val;
+ }
+ if (curve->recompute_interval)
+ compute_intervals(curve);
+ if (curve->curve_type == STP_CURVE_TYPE_LINEAR)
+ {
+ double val;
+ if ((stp_sequence_get_point(curve->seq, integer, &val)) == 0)
+ return HUGE_VAL; /* Infinity */
+ return val + frac * curve->interval[integer];
+ }
+ else
+ {
+ size_t point_count;
+ double ival, ip1val;
+ double retval;
+ int i = integer;
+ int ip1 = integer + 1;
+
+ point_count = get_point_count(curve);
+
+ if (ip1 >= point_count)
+ ip1 -= point_count;
+
+ if ((stp_sequence_get_point(curve->seq, i, &ival)) == 0 ||
+ (stp_sequence_get_point(curve->seq, ip1, &ip1val)) == 0)
+ return HUGE_VAL; /* Infinity */
+
+ retval = do_interpolate_spline(ival, ip1val, frac, curve->interval[i],
+ curve->interval[ip1], 1.0);
+
+ stp_sequence_get_bounds(curve->seq, &blo, &bhi);
+ if (retval > bhi)
+ retval = bhi;
+ if (retval < blo)
+ retval = blo;
+ return retval;
+ }
+}
+
+int
+stp_curve_interpolate_value(const stp_curve_t *curve, double where,
+ double *result)
+{
+ size_t limit;
+
+ check_curve(curve);
+ if (curve->piecewise)
+ return 0;
+
+ limit = get_real_point_count(curve);
+
+ if (where < 0 || where > limit)
+ return 0;
+ if (curve->gamma) /* this means a pure gamma curve */
+ *result = interpolate_gamma_internal(curve, where);
+ else
+ *result = interpolate_point_internal((stp_curve_t *) curve, where);
+ return 1;
+}
+
+int
+stp_curve_resample(stp_curve_t *curve, size_t points)
+{
+ size_t limit = points;
+ size_t old;
+ size_t i;
+ double *new_vec;
+
+ check_curve(curve);
+
+ if (points == get_point_count(curve) && curve->seq && !(curve->piecewise))
+ return 1;
+
+ if (points < 2)
+ return 1;
+
+ if (curve->wrap_mode == STP_CURVE_WRAP_AROUND)
+ limit++;
+ if (limit > curve_point_limit)
+ return 0;
+ old = get_real_point_count(curve);
+ if (old)
+ old--;
+ if (!old)
+ old = 1;
+
+ new_vec = stp_malloc(sizeof(double) * limit);
+
+ /*
+ * Be very careful how we calculate the location along the scale!
+ * If we're not careful how we do it, we might get a small roundoff
+ * error
+ */
+ if (curve->piecewise)
+ {
+ double blo, bhi;
+ int curpos = 0;
+ stp_sequence_get_bounds(curve->seq, &blo, &bhi);
+ if (curve->recompute_interval)
+ compute_intervals(curve);
+ for (i = 0; i < old; i++)
+ {
+ double low;
+ double high;
+ double low_y;
+ double high_y;
+ double x_delta;
+ if (!stp_sequence_get_point(curve->seq, i * 2, &low))
+ {
+ stp_free(new_vec);
+ return 0;
+ }
+ if (i == old - 1)
+ high = 1.0;
+ else if (!stp_sequence_get_point(curve->seq, ((i + 1) * 2), &high))
+ {
+ stp_free(new_vec);
+ return 0;
+ }
+ if (!stp_sequence_get_point(curve->seq, (i * 2) + 1, &low_y))
+ {
+ stp_free(new_vec);
+ return 0;
+ }
+ if (!stp_sequence_get_point(curve->seq, ((i + 1) * 2) + 1, &high_y))
+ {
+ stp_free(new_vec);
+ return 0;
+ }
+ stp_deprintf(STP_DBG_CURVE,
+ "Filling slots at %d %d: %f %f %f %f %d\n",
+ i,curpos, high, low, high_y, low_y, limit);
+ x_delta = high - low;
+ high *= (limit - 1);
+ low *= (limit - 1);
+ while (curpos <= high)
+ {
+ double frac = (curpos - low) / (high - low);
+ if (curve->curve_type == STP_CURVE_TYPE_LINEAR)
+ new_vec[curpos] = low_y + frac * (high_y - low_y);
+ else
+ new_vec[curpos] =
+ do_interpolate_spline(low_y, high_y, frac,
+ curve->interval[i],
+ curve->interval[i + 1],
+ x_delta);
+ if (new_vec[curpos] < blo)
+ new_vec[curpos] = blo;
+ if (new_vec[curpos] > bhi)
+ new_vec[curpos] = bhi;
+ stp_deprintf(STP_DBG_CURVE,
+ " Filling slot %d %f %f\n",
+ curpos, frac, new_vec[curpos]);
+ curpos++;
+ }
+ }
+ curve->piecewise = 0;
+ }
+ else
+ {
+ for (i = 0; i < limit; i++)
+ if (curve->gamma)
+ new_vec[i] =
+ interpolate_gamma_internal(curve, ((double) i * (double) old /
+ (double) (limit - 1)));
+ else
+ new_vec[i] =
+ interpolate_point_internal(curve, ((double) i * (double) old /
+ (double) (limit - 1)));
+ }
+ stpi_curve_set_points(curve, points);
+ stp_sequence_set_subrange(curve->seq, 0, limit, new_vec);
+ curve->recompute_interval = 1;
+ stp_free(new_vec);
+ return 1;
+}
+
+static unsigned
+gcd(unsigned a, unsigned b)
+{
+ unsigned tmp;
+ if (b > a)
+ {
+ tmp = a;
+ a = b;
+ b = tmp;
+ }
+ while (1)
+ {
+ tmp = a % b;
+ if (tmp == 0)
+ return b;
+ a = b;
+ b = tmp;
+ }
+}
+
+static unsigned
+lcm(unsigned a, unsigned b)
+{
+ if (a == b)
+ return a;
+ else if (a * b == 0)
+ return a > b ? a : b;
+ else
+ {
+ double rval = (double) a / gcd(a, b) * b;
+ if (rval > curve_point_limit)
+ return curve_point_limit;
+ else
+ return rval;
+ }
+}
+
+static int
+create_gamma_curve(stp_curve_t **retval, double lo, double hi, double fgamma,
+ int points)
+{
+ *retval = stp_curve_create(STP_CURVE_WRAP_NONE);
+ if (stp_curve_set_bounds(*retval, lo, hi) &&
+ stp_curve_set_gamma(*retval, fgamma) &&
+ stp_curve_resample(*retval, points))
+ return 1;
+ stp_curve_destroy(*retval);
+ *retval = 0;
+ return 0;
+}
+
+static int
+interpolate_points(stp_curve_t *a, stp_curve_t *b,
+ stp_curve_compose_t mode,
+ int points, double *tmp_data)
+{
+ double pa, pb;
+ int i;
+ size_t points_a = stp_curve_count_points(a);
+ size_t points_b = stp_curve_count_points(b);
+ for (i = 0; i < points; i++)
+ {
+ if (!stp_curve_interpolate_value
+ (a, (double) i * (points_a - 1) / (points - 1), &pa))
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "interpolate_points: interpolate curve a value failed\n");
+ return 0;
+ }
+ if (!stp_curve_interpolate_value
+ (b, (double) i * (points_b - 1) / (points - 1), &pb))
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "interpolate_points: interpolate curve b value failed\n");
+ return 0;
+ }
+ if (mode == STP_CURVE_COMPOSE_ADD)
+ pa += pb;
+ else
+ pa *= pb;
+ if (! finite(pa))
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "interpolate_points: interpolated point %lu is invalid\n",
+ (unsigned long) i);
+ return 0;
+ }
+ tmp_data[i] = pa;
+ }
+ return 1;
+}
+
+int
+stp_curve_compose(stp_curve_t **retval,
+ stp_curve_t *a, stp_curve_t *b,
+ stp_curve_compose_t mode, int points)
+{
+ stp_curve_t *ret;
+ double *tmp_data;
+ double gamma_a = stp_curve_get_gamma(a);
+ double gamma_b = stp_curve_get_gamma(b);
+ unsigned points_a = stp_curve_count_points(a);
+ unsigned points_b = stp_curve_count_points(b);
+ double alo, ahi, blo, bhi;
+
+ if (a->piecewise && b->piecewise)
+ return 0;
+ if (a->piecewise)
+ {
+ stp_curve_t *a_save = a;
+ a = stp_curve_create_copy(a_save);
+ stp_curve_resample(a, stp_curve_count_points(b));
+ }
+ if (b->piecewise)
+ {
+ stp_curve_t *b_save = b;
+ b = stp_curve_create_copy(b_save);
+ stp_curve_resample(b, stp_curve_count_points(a));
+ }
+
+ if (mode != STP_CURVE_COMPOSE_ADD && mode != STP_CURVE_COMPOSE_MULTIPLY)
+ return 0;
+ if (stp_curve_get_wrap(a) != stp_curve_get_wrap(b))
+ return 0;
+ stp_curve_get_bounds(a, &alo, &ahi);
+ stp_curve_get_bounds(b, &blo, &bhi);
+ if (mode == STP_CURVE_COMPOSE_MULTIPLY && (alo < 0 || blo < 0))
+ return 0;
+
+ if (stp_curve_get_wrap(a) == STP_CURVE_WRAP_AROUND)
+ {
+ points_a++;
+ points_b++;
+ }
+ if (points == -1)
+ {
+ points = lcm(points_a, points_b);
+ if (stp_curve_get_wrap(a) == STP_CURVE_WRAP_AROUND)
+ points--;
+ }
+ if (points < 2 || points > curve_point_limit ||
+ ((stp_curve_get_wrap(a) == STP_CURVE_WRAP_AROUND) &&
+ points > curve_point_limit - 1))
+ return 0;
+
+ if (gamma_a && gamma_b && gamma_a * gamma_b > 0 &&
+ mode == STP_CURVE_COMPOSE_MULTIPLY)
+ return create_gamma_curve(retval, alo * blo, ahi * bhi, gamma_a + gamma_b,
+ points);
+ tmp_data = stp_malloc(sizeof(double) * points);
+ if (!interpolate_points(a, b, mode, points, tmp_data))
+ {
+ stp_free(tmp_data);
+ return 0;
+ }
+ ret = stp_curve_create(stp_curve_get_wrap(a));
+ if (mode == STP_CURVE_COMPOSE_ADD)
+ {
+ stp_curve_rescale(ret, (ahi - alo) + (bhi - blo),
+ STP_CURVE_COMPOSE_MULTIPLY, STP_CURVE_BOUNDS_RESCALE);
+ stp_curve_rescale(ret, alo + blo,
+ STP_CURVE_COMPOSE_ADD, STP_CURVE_BOUNDS_RESCALE);
+ }
+ else
+ {
+ stp_curve_rescale(ret, (ahi - alo) * (bhi - blo),
+ STP_CURVE_COMPOSE_MULTIPLY, STP_CURVE_BOUNDS_RESCALE);
+ stp_curve_rescale(ret, alo * blo,
+ STP_CURVE_COMPOSE_ADD, STP_CURVE_BOUNDS_RESCALE);
+ }
+ if (! stp_curve_set_data(ret, points, tmp_data))
+ goto bad1;
+ *retval = ret;
+ stp_free(tmp_data);
+ return 1;
+ bad1:
+ stp_curve_destroy(ret);
+ stp_free(tmp_data);
+ return 0;
+}
+
+
+stp_curve_t *
+stp_curve_create_from_xmltree(stp_mxml_node_t *curve) /* The curve node */
+{
+ const char *stmp; /* Temporary string */
+ stp_mxml_node_t *child; /* Child sequence node */
+ stp_curve_t *ret = NULL; /* Curve to return */
+ stp_curve_type_t curve_type; /* Type of curve */
+ stp_curve_wrap_mode_t wrap_mode; /* Curve wrap mode */
+ double fgamma; /* Gamma value */
+ stp_sequence_t *seq = NULL; /* Sequence data */
+ double low, high; /* Sequence bounds */
+ int piecewise = 0;
+
+ stp_xml_init();
+ /* Get curve type */
+ stmp = stp_mxmlElementGetAttr(curve, "type");
+ if (stmp)
+ {
+ if (!strcmp(stmp, "linear"))
+ curve_type = STP_CURVE_TYPE_LINEAR;
+ else if (!strcmp(stmp, "spline"))
+ curve_type = STP_CURVE_TYPE_SPLINE;
+ else
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_create_from_xmltree: %s: \"type\" invalid\n", stmp);
+ goto error;
+ }
+ }
+ else
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_create_from_xmltree: \"type\" missing\n");
+ goto error;
+ }
+ /* Get curve wrap mode */
+ stmp = stp_mxmlElementGetAttr(curve, "wrap");
+ if (stmp)
+ {
+ if (!strcmp(stmp, "nowrap"))
+ wrap_mode = STP_CURVE_WRAP_NONE;
+ else if (!strcmp(stmp, "wrap"))
+ {
+ wrap_mode = STP_CURVE_WRAP_AROUND;
+ }
+ else
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_create_from_xmltree: %s: \"wrap\" invalid\n", stmp);
+ goto error;
+ }
+ }
+ else
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_create_from_xmltree: \"wrap\" missing\n");
+ goto error;
+ }
+ /* Get curve gamma */
+ stmp = stp_mxmlElementGetAttr(curve, "gamma");
+ if (stmp)
+ {
+ fgamma = stp_xmlstrtod(stmp);
+ }
+ else
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_create_from_xmltree: \"gamma\" missing\n");
+ goto error;
+ }
+ /* If gamma is set, wrap_mode must be STP_CURVE_WRAP_NONE */
+ if (fgamma && wrap_mode != STP_CURVE_WRAP_NONE)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS, "stp_curve_create_from_xmltree: "
+ "gamma set and \"wrap\" is not STP_CURVE_WRAP_NONE\n");
+ goto error;
+ }
+ stmp = stp_mxmlElementGetAttr(curve, "piecewise");
+ if (stmp && strcmp(stmp, "true") == 0)
+ piecewise = 1;
+
+ /* Set up the curve */
+ ret = stp_curve_create(wrap_mode);
+ stp_curve_set_interpolation_type(ret, curve_type);
+
+ child = stp_mxmlFindElement(curve, curve, "sequence", NULL, NULL, STP_MXML_DESCEND);
+ if (child)
+ seq = stp_sequence_create_from_xmltree(child);
+
+ if (seq == NULL)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_create_from_xmltree: sequence read failed\n");
+ goto error;
+ }
+
+ /* Set curve bounds */
+ stp_sequence_get_bounds(seq, &low, &high);
+ stp_curve_set_bounds(ret, low, high);
+
+ if (fgamma)
+ stp_curve_set_gamma(ret, fgamma);
+ else /* Not a gamma curve, so set points */
+ {
+ size_t seq_count;
+ const double* data;
+
+ stp_sequence_get_data(seq, &seq_count, &data);
+ if (piecewise)
+ {
+ if ((seq_count % 2) != 0)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_create_from_xmltree: invalid data count %d\n",
+ seq_count);
+ goto error;
+ }
+ if (stp_curve_set_data_points(ret, seq_count / 2,
+ (const stp_curve_point_t *) data) == 0)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_create_from_xmltree: failed to set curve data points\n");
+ goto error;
+ }
+ }
+ else
+ {
+ if (stp_curve_set_data(ret, seq_count, data) == 0)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_create_from_xmltree: failed to set curve data\n");
+ goto error;
+ }
+ }
+ }
+
+ if (seq)
+ {
+ stp_sequence_destroy(seq);
+ seq = NULL;
+ }
+
+ /* Validate curve */
+ if (stpi_curve_check_parameters(ret, stp_curve_count_points(ret)) == 0)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_create_from_xmltree: parameter check failed\n");
+ goto error;
+ }
+
+ stp_xml_exit();
+
+ return ret;
+
+ error:
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_create_from_xmltree: error during curve read\n");
+ if (ret)
+ stp_curve_destroy(ret);
+ stp_xml_exit();
+ return NULL;
+}
+
+
+stp_mxml_node_t *
+stp_xmltree_create_from_curve(const stp_curve_t *curve) /* The curve */
+{
+ stp_curve_wrap_mode_t wrapmode;
+ stp_curve_type_t interptype;
+ double gammaval, low, high;
+ stp_sequence_t *seq;
+
+ char *cgamma;
+
+ stp_mxml_node_t *curvenode = NULL;
+ stp_mxml_node_t *child = NULL;
+
+ stp_xml_init();
+
+ /* Get curve details */
+ wrapmode = stp_curve_get_wrap(curve);
+ interptype = stp_curve_get_interpolation_type(curve);
+ gammaval = stp_curve_get_gamma(curve);
+
+ if (gammaval && wrapmode != STP_CURVE_WRAP_NONE)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS, "stp_xmltree_create_from_curve: "
+ "curve sets gamma and wrap_mode is not STP_CURVE_WRAP_NONE\n");
+ goto error;
+ }
+
+ /* Construct the allocated strings required */
+ stp_asprintf(&cgamma, "%g", gammaval);
+
+ curvenode = stp_mxmlNewElement(NULL, "curve");
+ stp_mxmlElementSetAttr(curvenode, "wrap", stpi_wrap_mode_names[wrapmode]);
+ stp_mxmlElementSetAttr(curvenode, "type", stpi_curve_type_names[interptype]);
+ stp_mxmlElementSetAttr(curvenode, "gamma", cgamma);
+ if (curve->piecewise)
+ stp_mxmlElementSetAttr(curvenode, "piecewise", "true");
+ else
+ stp_mxmlElementSetAttr(curvenode, "piecewise", "false");
+
+ stp_free(cgamma);
+
+ seq = stp_sequence_create();
+ stp_curve_get_bounds(curve, &low, &high);
+ stp_sequence_set_bounds(seq, low, high);
+ if (gammaval != 0) /* A gamma curve does not require sequence data */
+ {
+ stp_sequence_set_size(seq, 0);
+ }
+ else
+ {
+ const double *data;
+ size_t count;
+ data = stpi_curve_get_data_internal(curve, &count);
+ stp_sequence_set_data(seq, count, data);
+ }
+
+ child = stp_xmltree_create_from_sequence(seq);
+
+ if (seq)
+ {
+ stp_sequence_destroy(seq);
+ seq = NULL;
+ }
+
+ if (child == NULL)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_xmltree_create_from_curve: sequence node is NULL\n");
+ goto error;
+ }
+ stp_mxmlAdd(curvenode, STP_MXML_ADD_AFTER, NULL, child);
+
+ stp_xml_exit();
+
+ return curvenode;
+
+ error:
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_xmltree_create_from_curve: error during xmltree creation\n");
+ if (curvenode)
+ stp_mxmlDelete(curvenode);
+ if (child)
+ stp_mxmlDelete(child);
+ stp_xml_exit();
+
+ return NULL;
+}
+
+static stp_mxml_node_t *
+xmldoc_create_from_curve(const stp_curve_t *curve)
+{
+ stp_mxml_node_t *xmldoc;
+ stp_mxml_node_t *rootnode;
+ stp_mxml_node_t *curvenode;
+
+ /* Get curve details */
+ curvenode = stp_xmltree_create_from_curve(curve);
+ if (curvenode == NULL)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "xmldoc_create_from_curve: error creating curve node\n");
+ return NULL;
+ }
+ /* Create the XML tree */
+ xmldoc = stp_xmldoc_create_generic();
+ if (xmldoc == NULL)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "xmldoc_create_from_curve: error creating XML document\n");
+ return NULL;
+ }
+ rootnode = xmldoc->child;
+ if (rootnode == NULL)
+ {
+ stp_mxmlDelete(xmldoc);
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "xmldoc_create_from_curve: error getting XML document root node\n");
+ return NULL;
+ }
+
+ stp_mxmlAdd(rootnode, STP_MXML_ADD_AFTER, NULL, curvenode);
+
+ return xmldoc;
+}
+
+static int
+curve_whitespace_callback(stp_mxml_node_t *node, int where)
+{
+ if (node->type != STP_MXML_ELEMENT)
+ return 0;
+ if (strcasecmp(node->value.element.name, "gutenprint") == 0)
+ {
+ switch (where)
+ {
+ case STP_MXML_WS_AFTER_OPEN:
+ case STP_MXML_WS_BEFORE_CLOSE:
+ case STP_MXML_WS_AFTER_CLOSE:
+ return '\n';
+ case STP_MXML_WS_BEFORE_OPEN:
+ default:
+ return 0;
+ }
+ }
+ else if (strcasecmp(node->value.element.name, "curve") == 0)
+ {
+ switch (where)
+ {
+ case STP_MXML_WS_AFTER_OPEN:
+ return '\n';
+ case STP_MXML_WS_BEFORE_CLOSE:
+ case STP_MXML_WS_AFTER_CLOSE:
+ case STP_MXML_WS_BEFORE_OPEN:
+ default:
+ return 0;
+ }
+ }
+ else if (strcasecmp(node->value.element.name, "sequence") == 0)
+ {
+ const char *count;
+ switch (where)
+ {
+ case STP_MXML_WS_BEFORE_CLOSE:
+ count = stp_mxmlElementGetAttr(node, "count");
+ if (strcmp(count, "0") == 0)
+ return 0;
+ else
+ return '\n';
+ case STP_MXML_WS_AFTER_OPEN:
+ case STP_MXML_WS_AFTER_CLOSE:
+ return '\n';
+ case STP_MXML_WS_BEFORE_OPEN:
+ default:
+ return 0;
+ }
+ }
+ else
+ return 0;
+}
+
+
+int
+stp_curve_write(FILE *file, const stp_curve_t *curve) /* The curve */
+{
+ stp_mxml_node_t *xmldoc = NULL;
+
+ stp_xml_init();
+
+ xmldoc = xmldoc_create_from_curve(curve);
+ if (xmldoc == NULL)
+ {
+ stp_xml_exit();
+ return 1;
+ }
+
+ stp_mxmlSaveFile(xmldoc, file, curve_whitespace_callback);
+
+ if (xmldoc)
+ stp_mxmlDelete(xmldoc);
+
+ stp_xml_exit();
+
+ return 0;
+}
+
+char *
+stp_curve_write_string(const stp_curve_t *curve) /* The curve */
+{
+ stp_mxml_node_t *xmldoc = NULL;
+ char *retval;
+
+ stp_xml_init();
+
+ xmldoc = xmldoc_create_from_curve(curve);
+ if (xmldoc == NULL)
+ {
+ stp_xml_exit();
+ return NULL;
+ }
+
+ retval = stp_mxmlSaveAllocString(xmldoc, curve_whitespace_callback);
+
+ if (xmldoc)
+ stp_mxmlDelete(xmldoc);
+
+ stp_xml_exit();
+
+ return retval;
+}
+
+static stp_curve_t *
+xml_doc_get_curve(stp_mxml_node_t *doc)
+{
+ stp_mxml_node_t *cur;
+ stp_mxml_node_t *xmlcurve;
+ stp_curve_t *curve = NULL;
+
+ if (doc == NULL )
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "xml_doc_get_curve: XML file not parsed successfully.\n");
+ return NULL;
+ }
+
+ cur = doc->child;
+
+ if (cur == NULL)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "xml_doc_get_curve: empty document\n");
+ return NULL;
+ }
+
+ xmlcurve = stp_xml_get_node(cur, "gutenprint", "curve", NULL);
+
+ if (xmlcurve)
+ curve = stp_curve_create_from_xmltree(xmlcurve);
+
+ return curve;
+}
+
+stp_curve_t *
+stp_curve_create_from_file(const char* file)
+{
+ stp_curve_t *curve = NULL;
+ stp_mxml_node_t *doc;
+ FILE *fp = fopen(file, "r");
+ if (!fp)
+ {
+ stp_deprintf(STP_DBG_CURVE_ERRORS,
+ "stp_curve_create_from_file: unable to open %s: %s\n",
+ file, strerror(errno));
+ return NULL;
+ }
+ stp_deprintf(STP_DBG_XML, "stp_curve_create_from_file: reading `%s'...\n",
+ file);
+
+ stp_xml_init();
+
+ doc = stp_mxmlLoadFile(NULL, fp, STP_MXML_NO_CALLBACK);
+
+ curve = xml_doc_get_curve(doc);
+
+ if (doc)
+ stp_mxmlDelete(doc);
+
+ stp_xml_exit();
+ (void) fclose(fp);
+ return curve;
+
+}
+
+stp_curve_t *
+stp_curve_create_from_stream(FILE* fp)
+{
+ stp_curve_t *curve = NULL;
+ stp_mxml_node_t *doc;
+ stp_deprintf(STP_DBG_XML, "stp_curve_create_from_fp: reading...\n");
+
+ stp_xml_init();
+
+ doc = stp_mxmlLoadFile(NULL, fp, STP_MXML_NO_CALLBACK);
+
+ curve = xml_doc_get_curve(doc);
+
+ if (doc)
+ stp_mxmlDelete(doc);
+
+ stp_xml_exit();
+ return curve;
+
+}
+
+stp_curve_t *
+stp_curve_create_from_string(const char* string)
+{
+ stp_curve_t *curve = NULL;
+ stp_mxml_node_t *doc;
+ stp_deprintf(STP_DBG_XML,
+ "stp_curve_create_from_string: reading '%s'...\n", string);
+ stp_xml_init();
+
+ doc = stp_mxmlLoadString(NULL, string, STP_MXML_NO_CALLBACK);
+
+ curve = xml_doc_get_curve(doc);
+
+ if (doc)
+ stp_mxmlDelete(doc);
+
+ stp_xml_exit();
+ return curve;
+}
diff --git a/src/main/dither-ed.c b/src/main/dither-ed.c
new file mode 100644
index 0000000..76820a0
--- /dev/null
+++ b/src/main/dither-ed.c
@@ -0,0 +1,466 @@
+/*
+ * "$Id: dither-ed.c,v 1.18 2004/09/17 18:38:17 rleigh Exp $"
+ *
+ * Error diffusion and closely related adaptive hybrid dither algorithm
+ *
+ * Copyright 1997-2003 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Revision History:
+ *
+ * See ChangeLog
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <string.h>
+#include "dither-impl.h"
+#include "dither-inlined-functions.h"
+
+/*
+ * Add the error to the input value. Notice that we micro-optimize this
+ * to save a division when appropriate. This has yielded measurable
+ * improvement -- rlk 20030119
+ */
+
+#define UPDATE_COLOR(color, dither) ( \
+((dither) >= 0)? (color) + ((dither) >> 3) : (color) - ((-(dither)) >> 3))
+
+/*
+ * For Floyd-Steinberg, distribute the error residual. We spread the
+ * error to nearby points, spreading more broadly in lighter regions to
+ * achieve more uniform distribution of color. The actual distribution
+ * is a triangular function.
+ */
+
+static inline int
+update_dither(stpi_dither_t *d, int channel, int width,
+ int direction, int *error0, int *error1)
+{
+ int r = CHANNEL(d, channel).v;
+ int o = CHANNEL(d, channel).o;
+ int tmp = r;
+ int i, dist, dist1;
+ int delta, delta1;
+ int offset;
+ if (tmp == 0)
+ return error0[direction];
+ if (tmp > 65535)
+ tmp = 65535;
+ if (d->spread >= 16 || o >= 2048)
+ {
+ tmp += tmp;
+ tmp += tmp;
+ error1[0] += tmp;
+ return error0[direction] + tmp;
+ }
+ else
+ {
+ int tmpo = o << 5;
+ offset = ((65535 - tmpo) >> d->spread) +
+ ((tmp & d->spread_mask) > (tmpo & d->spread_mask));
+ }
+ switch (offset)
+ {
+ case 0:
+ tmp += tmp;
+ tmp += tmp;
+ error1[0] += tmp;
+ return error0[direction] + tmp;
+ case 1:
+ error1[-1] += tmp;
+ error1[1] += tmp;
+ tmp += tmp;
+ error1[0] += tmp;
+ tmp += tmp;
+ return error0[direction] + tmp;
+ default:
+ tmp += tmp;
+ tmp += tmp;
+ dist = tmp / d->offset0_table[offset];
+ dist1 = tmp / d->offset1_table[offset];
+ delta = dist;
+ delta1 = dist1;
+ for (i = -offset; i; i++)
+ {
+ error1[i] += delta;
+ error1[-i] += delta;
+ error0[i] += delta1;
+ error0[-i] += delta1;
+ delta1 += dist1;
+ delta += dist;
+ }
+ error1[0] += delta;
+ return error0[direction];
+ }
+}
+
+
+/*
+ * Print a single dot. This routine has become awfully complicated
+ * awfully fast!
+ */
+
+static inline int
+print_color(const stpi_dither_t *d, stpi_dither_channel_t *dc, int x, int y,
+ unsigned char bit, int length, int dontprint, int stpi_dither_type,
+ const unsigned char *mask)
+{
+ int base = dc->b;
+ int density = dc->o;
+ int adjusted = dc->v;
+ unsigned randomizer = dc->randomizer;
+ stp_dither_matrix_impl_t *pick_matrix = &(dc->pick);
+ stp_dither_matrix_impl_t *dither_matrix = &(dc->dithermat);
+ unsigned rangepoint = 32768;
+ unsigned vmatrix;
+ int i;
+ int j;
+ unsigned char *tptr;
+ unsigned bits;
+ unsigned v;
+ int levels = dc->nlevels - 1;
+ int dither_value = adjusted;
+ stpi_ink_defn_t *lower;
+ stpi_ink_defn_t *upper;
+
+ if (base <= 0 || density <= 0 ||
+ (adjusted <= 0 && !(stpi_dither_type & D_ADAPTIVE_BASE)))
+ return adjusted;
+ if (density > 65535)
+ density = 65535;
+
+ /*
+ * Look for the appropriate range into which the input value falls.
+ * Notice that we use the input, not the error, to decide what dot type
+ * to print (if any). We actually use the "density" input to permit
+ * the caller to use something other that simply the input value, if it's
+ * desired to use some function of overall density, rather than just
+ * this color's input, for this purpose.
+ */
+ for (i = levels; i >= 0; i--)
+ {
+ stpi_dither_segment_t *dd = &(dc->ranges[i]);
+
+ if (density <= dd->lower->range)
+ continue;
+
+ /*
+ * If we're using an adaptive dithering method, decide whether
+ * to use the Floyd-Steinberg or the ordered method based on the
+ * input value.
+ */
+ if (stpi_dither_type & D_ADAPTIVE_BASE)
+ {
+ stpi_dither_type -= D_ADAPTIVE_BASE;
+
+ if (i < levels || base <= d->adaptive_limit)
+ {
+ stpi_dither_type = D_ORDERED;
+ dither_value = base;
+ }
+ else if (adjusted <= 0)
+ return adjusted;
+ }
+ /*
+ * Where are we within the range. If we're going to print at
+ * all, this determines the probability of printing the darker
+ * vs. the lighter ink. If the inks are identical (same value
+ * and darkness), it doesn't matter.
+ *
+ * We scale the input linearly against the top and bottom of the
+ * range.
+ */
+
+ lower = dd->lower;
+ upper = dd->upper;
+
+ /*
+ * Reduce the randomness as the base value increases, to get
+ * smoother output in the midtones. Idea suggested by
+ * Thomas Tonino.
+ */
+ if (stpi_dither_type & D_ORDERED_BASE)
+ {
+ rangepoint = density - dd->lower->range;
+ if (dd->range_span < 65535)
+ rangepoint = rangepoint * 65535 / dd->range_span;
+ vmatrix = 0;
+ }
+ else
+ {
+
+ /*
+ * Compute the virtual dot size that we're going to print.
+ * This is somewhere between the two candidate dot sizes.
+ * This is scaled between the high and low value.
+ */
+
+ unsigned virtual_value;
+ rangepoint = density - dd->lower->range;
+ if (dd->range_span < 65535)
+ rangepoint = rangepoint * 65535 / dd->range_span;
+ if (dd->value_span == 0)
+ virtual_value = upper->value;
+ else /* if (dd->range_span == 0) */
+ virtual_value = (upper->value + lower->value) / 2;
+ /*
+ else
+ virtual_value = lower->value + (dd->value_span * rangepoint / 65535);
+ */
+ randomizer = 0;
+ if (randomizer > 0)
+ {
+ if (base > d->d_cutoff)
+ randomizer = 0;
+ else if (base > d->d_cutoff / 2)
+ randomizer = randomizer * 2 * (d->d_cutoff - base) / d->d_cutoff;
+ }
+
+ /*
+ * Compute the comparison value to decide whether to print at
+ * all. If there is no randomness, simply divide the virtual
+ * dotsize by 2 to get standard "pure" Floyd-Steinberg (or "pure"
+ * matrix dithering, which degenerates to a threshold).
+ */
+ if (randomizer == 0)
+ vmatrix = virtual_value / 2;
+ else
+ {
+ /*
+ * First, compute a value between 0 and 65535 that will be
+ * scaled to produce an offset from the desired threshold.
+ */
+ vmatrix = ditherpoint(d, dither_matrix, x);
+ /*
+ * Now, scale the virtual dot size appropriately. Note that
+ * we'll get something evenly distributed between 0 and
+ * the virtual dot size, centered on the dot size / 2,
+ * which is the normal threshold value.
+ */
+ vmatrix = vmatrix * virtual_value / 65535;
+ if (randomizer != 65535)
+ {
+ /*
+ * We want vmatrix to be scaled between 0 and
+ * virtual_value when randomizer is 65535 (fully random).
+ * When it's less, we want it to scale through part of
+ * that range. In all cases, it should center around
+ * virtual_value / 2.
+ *
+ * vbase is the bottom of the scaling range.
+ */
+ unsigned vbase = virtual_value * (65535u - randomizer) /
+ 131070u;
+ vmatrix = vmatrix * randomizer / 65535;
+ vmatrix += vbase;
+ }
+ } /* randomizer != 0 */
+ }
+ /*
+ * After all that, printing is almost an afterthought.
+ * Pick the actual dot size (using a matrix here) and print it.
+ */
+ if (dither_value > 0 && dither_value >= vmatrix)
+ {
+ stpi_ink_defn_t *subc;
+
+ if (dd->is_same_ink)
+ subc = upper;
+ else
+ {
+ if (rangepoint >= ditherpoint(d, pick_matrix, x))
+ subc = upper;
+ else
+ subc = lower;
+ }
+ v = subc->value;
+ if (!mask || (*(mask + d->ptr_offset) & bit))
+ {
+ if (dc->ptr)
+ {
+ tptr = dc->ptr + d->ptr_offset;
+
+ /*
+ * Lay down all of the bits in the pixel.
+ */
+ if (dontprint < v)
+ {
+ bits = subc->bits;
+ set_row_ends(dc, x);
+ for (j = 1; j <= bits; j += j, tptr += length)
+ {
+ if (j & bits)
+ tptr[0] |= bit;
+ }
+ }
+ }
+ }
+ if (stpi_dither_type & D_ORDERED_BASE)
+ {
+ double adj = -(int) v;
+ adj /= 2.0;
+ adjusted = adj;
+ }
+ else
+ {
+ double adj = v;
+ adjusted -= adj;
+ }
+ }
+ return adjusted;
+ }
+ return adjusted;
+}
+
+static int
+shared_ed_initializer(stpi_dither_t *d,
+ int row,
+ int duplicate_line,
+ int zero_mask,
+ int length,
+ int direction,
+ int ****error,
+ int **ndither)
+{
+ int i, j;
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ CHANNEL(d, i).error_rows = 2;
+ if (!duplicate_line)
+ {
+ if ((zero_mask & ((1 << CHANNEL_COUNT(d)) - 1)) !=
+ ((1 << CHANNEL_COUNT(d)) - 1))
+ d->last_line_was_empty = 0;
+ else
+ d->last_line_was_empty++;
+ }
+ else if (d->last_line_was_empty)
+ d->last_line_was_empty++;
+ if (d->last_line_was_empty >= 5)
+ return 0;
+ else if (d->last_line_was_empty == 4)
+ {
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ for (j = 0; j < d->error_rows; j++)
+ memset(stpi_dither_get_errline(d, row + j, i), 0,
+ d->dst_width * sizeof(int));
+ return 0;
+ }
+ d->ptr_offset = (direction == 1) ? 0 : length - 1;
+
+ *error = stp_malloc(CHANNEL_COUNT(d) * sizeof(int **));
+ *ndither = stp_malloc(CHANNEL_COUNT(d) * sizeof(int));
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ {
+ (*error)[i] = stp_malloc(d->error_rows * sizeof(int *));
+ for (j = 0; j < d->error_rows; j++)
+ {
+ (*error)[i][j] = stpi_dither_get_errline(d, row + j, i);
+ if (j == d->error_rows - 1)
+ memset((*error)[i][j], 0, d->dst_width * sizeof(int));
+ if (direction == -1)
+ (*error)[i][j] += d->dst_width - 1;
+ }
+ (*ndither)[i] = (*error)[i][0][0];
+ }
+ return 1;
+}
+
+static void
+shared_ed_deinitializer(stpi_dither_t *d,
+ int ***error,
+ int *ndither)
+{
+ int i;
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ {
+ STP_SAFE_FREE(error[i]);
+ }
+ STP_SAFE_FREE(error);
+ STP_SAFE_FREE(ndither);
+}
+
+void
+stpi_dither_ed(stp_vars_t *v,
+ int row,
+ const unsigned short *raw,
+ int duplicate_line,
+ int zero_mask,
+ const unsigned char *mask)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ int x,
+ length;
+ unsigned char bit;
+ int i;
+ int *ndither;
+ int ***error;
+
+ int terminate;
+ int direction = row & 1 ? 1 : -1;
+ int xerror, xstep, xmod;
+
+ length = (d->dst_width + 7) / 8;
+ if (d->stpi_dither_type & D_ADAPTIVE_BASE)
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ if (CHANNEL(d, i).nlevels > 1)
+ {
+ stpi_dither_ordered(v, row, raw, duplicate_line, zero_mask, mask);
+ return;
+ }
+ if (!shared_ed_initializer(d, row, duplicate_line, zero_mask, length,
+ direction, &error, &ndither))
+ return;
+
+ x = (direction == 1) ? 0 : d->dst_width - 1;
+ bit = 1 << (7 - (x & 7));
+ xstep = CHANNEL_COUNT(d) * (d->src_width / d->dst_width);
+ xmod = d->src_width % d->dst_width;
+ xerror = (xmod * x) % d->dst_width;
+ terminate = (direction == 1) ? d->dst_width : -1;
+
+ if (direction == -1)
+ raw += (CHANNEL_COUNT(d) * (d->src_width - 1));
+
+ for (; x != terminate; x += direction)
+ {
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ {
+ if (CHANNEL(d, i).ptr)
+ {
+ CHANNEL(d, i).v = raw[i];
+ CHANNEL(d, i).o = CHANNEL(d, i).v;
+ CHANNEL(d, i).b = CHANNEL(d, i).v;
+ CHANNEL(d, i).v = UPDATE_COLOR(CHANNEL(d, i).v, ndither[i]);
+ CHANNEL(d, i).v = print_color(d, &(CHANNEL(d, i)), x, row, bit,
+ length, 0, d->stpi_dither_type,
+ mask);
+ ndither[i] = update_dither(d, i, d->src_width,
+ direction, error[i][0], error[i][1]);
+ }
+ }
+ ADVANCE_BIDIRECTIONAL(d, bit, raw, direction, CHANNEL_COUNT(d), xerror,
+ xstep, xmod, error, d->error_rows);
+ }
+ shared_ed_deinitializer(d, error, ndither);
+ if (direction == -1)
+ stpi_dither_reverse_row_ends(d);
+}
diff --git a/src/main/dither-eventone.c b/src/main/dither-eventone.c
new file mode 100644
index 0000000..51eb10b
--- /dev/null
+++ b/src/main/dither-eventone.c
@@ -0,0 +1,710 @@
+/*
+ * "$Id: dither-eventone.c,v 1.40 2004/09/17 18:38:18 rleigh Exp $"
+ *
+ * EvenTone dither implementation for Gimp-Print
+ *
+ * Copyright 2002-2003 Mark Tomlinson (mark@southern.co.nz)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * This code uses the Eventone dither algorithm. This is described
+ * at the website http://www.artofcode.com/eventone/
+ * This algorithm is covered by US Patents 5,055,942 and 5,917,614
+ * and was invented by Raph Levien <raph@acm.org>
+ * It was made available to be used free of charge in GPL-licensed
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <string.h>
+#include <math.h>
+#include <limits.h>
+#include "dither-impl.h"
+#include "dither-inlined-functions.h"
+
+typedef struct
+{
+ int dx;
+ int dy;
+ int r_sq;
+} distance_t;
+
+typedef struct
+{
+ int d2x;
+ int d2y;
+ distance_t d_sq;
+ int aspect;
+ int unitone_aspect;
+ int physical_aspect;
+ int diff_factor;
+ stpi_dither_channel_t *dummy_channel;
+} eventone_t;
+
+typedef struct shade_segment
+{
+ distance_t dis;
+ distance_t *et_dis;
+ stpi_ink_defn_t lower;
+ stpi_ink_defn_t upper;
+ int share_this_channel;
+} shade_distance_t;
+
+
+#define EVEN_C1 256
+#define EVEN_C2 (EVEN_C1 * sqrt(3.0) / 2.0)
+#define UNITONE_C1 16384
+#define UNITONE_C2 (UNITONE_C1 * sqrt(3.0) / 2.0)
+
+static void
+free_eventone_data(stpi_dither_t *d)
+{
+ int i;
+ eventone_t *et = (eventone_t *) (d->aux_data);
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ {
+ if (CHANNEL(d, i).aux_data)
+ {
+ shade_distance_t *shade = (shade_distance_t *) CHANNEL(d,i).aux_data;
+ STP_SAFE_FREE(shade->et_dis);
+ STP_SAFE_FREE(CHANNEL(d, i).aux_data);
+ }
+ }
+ if (et->dummy_channel) {
+ stpi_dither_channel_t *dc = et->dummy_channel;
+ shade_distance_t *shade = (shade_distance_t *) dc->aux_data;
+ STP_SAFE_FREE(shade->et_dis);
+ STP_SAFE_FREE(dc->aux_data);
+ stpi_dither_channel_destroy(dc);
+ STP_SAFE_FREE(et->dummy_channel);
+ }
+ STP_SAFE_FREE(et);
+}
+
+static void
+et_setup(stpi_dither_t *d)
+{
+ int size = 2 * MAX_SPREAD + ((d->dst_width + 7) & ~7);
+ static const int diff_factors[] = {1, 10, 16, 23, 32};
+ eventone_t *et = stp_zalloc(sizeof(eventone_t));
+ int xa, ya;
+ int i;
+ for (i = 0; i < CHANNEL_COUNT(d); i++) {
+ CHANNEL(d, i).error_rows = 1;
+ CHANNEL(d, i).errs = stp_zalloc(1 * sizeof(int *));
+ CHANNEL(d, i).errs[0] = stp_zalloc(size * sizeof(int));
+ }
+ if (d->stpi_dither_type & D_UNITONE) {
+ stpi_dither_channel_t *dc = stp_zalloc(sizeof(stpi_dither_channel_t));
+ stp_dither_matrix_clone(&(d->dither_matrix), &(dc->dithermat), 0, 0);
+ stp_dither_matrix_clone(&(d->transition_matrix), &(dc->pick), 0, 0);
+ dc->error_rows = 1;
+ dc->errs = stp_zalloc(1 * sizeof(int *));
+ dc->errs[0] = stp_zalloc(size * sizeof(int));
+ et->dummy_channel = dc;
+ }
+
+ xa = d->x_aspect / d->y_aspect;
+ if (xa == 0)
+ xa = 1;
+ et->d_sq.dx = xa * xa;
+ et->d2x = 2 * et->d_sq.dx;
+
+ ya = d->y_aspect / d->x_aspect;
+ if (ya == 0)
+ ya = 1;
+ et->d_sq.dy = ya * ya;
+ et->d2y = 2 * et->d_sq.dy;
+
+ et->aspect = EVEN_C2 / (xa * ya);
+ et->unitone_aspect = UNITONE_C2 / (xa * ya);
+ et->d_sq.r_sq = 0;
+
+ for (i = 0; i < CHANNEL_COUNT(d); i++) {
+ int x;
+ shade_distance_t *shade = stp_zalloc(sizeof(shade_distance_t));
+ shade->dis = et->d_sq;
+ shade->et_dis = stp_malloc(sizeof(distance_t) * d->dst_width);
+ if (CHANNEL(d, i).darkness > .1)
+ shade->share_this_channel = 1;
+ else
+ shade->share_this_channel = 0;
+ for (x = 0; x < d->dst_width; x++) {
+ shade->et_dis[x] = et->d_sq;
+ }
+ CHANNEL(d, i).aux_data = shade;
+ }
+ if (et->dummy_channel) {
+ int x;
+ shade_distance_t *shade = stp_zalloc(sizeof(shade_distance_t));
+ shade->dis = et->d_sq;
+ shade->et_dis = stp_malloc(sizeof(distance_t) * d->dst_width);
+ for (x = 0; x < d->dst_width; x++) {
+ shade->et_dis[x] = et->d_sq;
+ }
+ et->dummy_channel->aux_data = shade;
+ }
+
+ et->physical_aspect = d->y_aspect / d->x_aspect;
+ if (et->physical_aspect >= 4)
+ et->physical_aspect = 4;
+ else if (et->physical_aspect >= 2)
+ et->physical_aspect = 2;
+ else et->physical_aspect = 1;
+
+ et->diff_factor = diff_factors[et->physical_aspect];
+
+ d->aux_data = et;
+ d->aux_freefunc = free_eventone_data;
+}
+
+static int
+et_initializer(stpi_dither_t *d, int duplicate_line, int zero_mask)
+{
+ int i;
+ eventone_t *et;
+ if (!d->aux_data)
+ et_setup(d);
+
+ et = (eventone_t *) (d->aux_data);
+ if (!duplicate_line) {
+ if ((zero_mask & ((1 << CHANNEL_COUNT(d)) - 1)) !=
+ ((1 << CHANNEL_COUNT(d)) - 1)) {
+ d->last_line_was_empty = 0;
+ } else {
+ d->last_line_was_empty++;
+ }
+ } else if (d->last_line_was_empty) {
+ d->last_line_was_empty++;
+ }
+
+ if (d->last_line_was_empty >= 5) {
+ return 0;
+ } else if (d->last_line_was_empty == 4) {
+ if (et->dummy_channel) {
+ memset(et->dummy_channel->errs[0], 0, d->dst_width * sizeof(int));
+ }
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ memset(CHANNEL(d, i).errs[0], 0, d->dst_width * sizeof(int));
+ return 0;
+ }
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ CHANNEL(d, i).v = 0;
+ if (et->dummy_channel)
+ et->dummy_channel->v = 0;
+ return 1;
+}
+
+static inline void
+advance_eventone_pre(shade_distance_t *sp, eventone_t *et, int x)
+{
+ distance_t *etd = &sp->et_dis[x];
+ int t = sp->dis.r_sq + sp->dis.dx;
+ if (t <= etd->r_sq) { /* Do eventone calculations */
+ sp->dis.r_sq = t; /* Nearest pixel same as last one */
+ sp->dis.dx += et->d2x;
+ } else {
+ sp->dis = *etd; /* Nearest pixel is from a previous line */
+ }
+}
+
+static inline void
+eventone_update(stpi_dither_channel_t *dc, eventone_t *et,
+ int x, int direction)
+{
+ shade_distance_t *sp = (shade_distance_t *) dc->aux_data;
+ distance_t *etd = &sp->et_dis[x];
+ int t = etd->r_sq + etd->dy; /* r^2 from dot above */
+ int u = sp->dis.r_sq + sp->dis.dy; /* r^2 from dot on this line */
+ if (u < t) { /* If dot from this line is close */
+ t = u; /* Use it instead */
+ etd->dx = sp->dis.dx;
+ etd->dy = sp->dis.dy;
+ }
+ etd->dy += et->d2y;
+
+ if (t > 65535) { /* Do some hard limiting */
+ t = 65535;
+ }
+ etd->r_sq = t;
+}
+
+static inline void
+diffuse_error(stpi_dither_channel_t *dc, eventone_t *et, int x, int direction)
+{
+ /*
+ * Tests to date show that the second diffusion pattern works better
+ * than the first in most cases. The previous code is being left here
+ * in case it is later determined that the original code works better.
+ * -- rlk 20031101
+ */
+#if 0
+/* int fraction = (dc->v + (et->diff_factor>>1)) / et->diff_factor; */
+ int frac_2 = dc->v + dc->v;
+ int frac_3 = frac_2 + dc->v;
+ dc->errs[0][x + MAX_SPREAD] = frac_3;
+ dc->errs[0][x + MAX_SPREAD - direction] += frac_2;
+ dc->v -= (frac_2 + frac_3) / 16;
+#else
+ dc->errs[0][x + MAX_SPREAD] = dc->v * 3;
+ dc->errs[0][x + MAX_SPREAD - direction] += dc->v * 5;
+ dc->errs[0][x + MAX_SPREAD - (direction * 2)] += dc->v * 1;
+ dc->v -= dc->v * 9 / 16;
+#endif
+}
+
+static inline int
+eventone_adjust(stpi_dither_channel_t *dc, eventone_t *et, int dither_point,
+ unsigned int desired)
+{
+ if (dither_point <= 0)
+ return 0;
+ else if (dither_point >= 65535)
+ return 65535;
+ if (desired == 0) {
+ dither_point = 0;
+ } else {
+ shade_distance_t *shade = (shade_distance_t *) dc->aux_data;
+ dither_point += shade->dis.r_sq * et->aspect - (EVEN_C1 * 65535) / desired;
+ if (dither_point > 65535)
+ dither_point = 65535;
+ else if (dither_point < 0)
+ dither_point = 0;
+ }
+ return dither_point;
+}
+
+static inline int
+unitone_adjust(stpi_dither_channel_t *dc, eventone_t *et,
+ int dither_point, unsigned int desired)
+{
+ if (dither_point <= 0)
+ return INT_MIN;
+ else if (dither_point >= 65535)
+ return dither_point;
+ if (desired == 0) {
+ dither_point = INT_MIN;
+ } else {
+ shade_distance_t *shade = (shade_distance_t *) dc->aux_data;
+ dither_point += shade->dis.r_sq * et->unitone_aspect -
+ (UNITONE_C1 * 65535u) / desired;
+ }
+ return dither_point;
+}
+
+
+static inline void
+find_segment(stpi_dither_channel_t *dc, unsigned inkval,
+ stpi_ink_defn_t *lower, stpi_ink_defn_t *upper)
+{
+ lower->range = 0;
+ lower->bits = 0;
+
+ if (dc->nlevels == 1)
+ {
+ upper->bits = dc->ink_list[1].bits;
+ upper->range = dc->ink_list[1].value;
+ }
+ else
+ {
+ int i;
+ stpi_ink_defn_t *ip;
+
+ for (i=0, ip = dc->ink_list; i < dc->nlevels - 1; i++, ip++) {
+ if (ip->value > inkval)
+ break;
+ lower->bits = ip->bits;
+ lower->range = ip->value;
+ }
+
+ upper->bits = ip->bits;
+ upper->range = ip->value;
+ }
+}
+
+static inline int
+find_segment_and_ditherpoint(stpi_dither_channel_t *dc, unsigned inkval,
+ stpi_ink_defn_t *lower, stpi_ink_defn_t *upper)
+{
+ find_segment(dc, inkval, lower, upper);
+ if (inkval <= lower->range)
+ return 0;
+ else if (inkval >= upper->range)
+ return 65535;
+ else
+ return (65535u * (inkval - lower->range)) / (upper->range - lower->range);
+}
+
+static inline void
+print_ink(stpi_dither_t *d, unsigned char *tptr, const stpi_ink_defn_t *ink,
+ unsigned char bit, int length)
+{
+ int j;
+
+ if (tptr != 0)
+ {
+ tptr += d->ptr_offset;
+ switch(ink->bits)
+ {
+ case 1:
+ tptr[0] |= bit;
+ return;
+ case 2:
+ tptr[length] |= bit;
+ return;
+ case 3:
+ tptr[0] |= bit;
+ tptr[length] |= bit;
+ return;
+ default:
+ for (j=1; j <= ink->bits; j+=j, tptr += length) {
+ if (j & ink->bits)
+ *tptr |= bit;
+ }
+ return;
+ }
+ }
+}
+
+void
+stpi_dither_et(stp_vars_t *v,
+ int row,
+ const unsigned short *raw,
+ int duplicate_line,
+ int zero_mask,
+ const unsigned char *mask)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ eventone_t *et;
+
+ int x,
+ length;
+ unsigned char bit;
+ int i;
+
+ int terminate;
+ int direction;
+ int xerror, xstep, xmod;
+ int channel_count = CHANNEL_COUNT(d);
+
+ if (!et_initializer(d, duplicate_line, zero_mask))
+ return;
+
+ et = (eventone_t *) d->aux_data;
+
+ length = (d->dst_width + 7) / 8;
+
+ if (row & 1) {
+ direction = 1;
+ x = 0;
+ terminate = d->dst_width;
+ d->ptr_offset = 0;
+ } else {
+ direction = -1;
+ x = d->dst_width - 1;
+ terminate = -1;
+ d->ptr_offset = length - 1;
+ raw += channel_count * (d->src_width - 1);
+ }
+ bit = 1 << (7 - (x & 7));
+ xstep = channel_count * (d->src_width / d->dst_width);
+ xmod = d->src_width % d->dst_width;
+ xerror = (xmod * x) % d->dst_width;
+
+ for (; x != terminate; x += direction) {
+
+ int point_error = 0;
+ int comparison = 32768;
+
+ if (d->stpi_dither_type & D_ORDERED_BASE)
+ comparison += (ditherpoint(d, &(d->dither_matrix), x) / 16) - 2048;
+
+ for (i=0; i < channel_count; i++) {
+ if (CHANNEL(d, i).ptr)
+ {
+ int inkspot;
+ int range_point;
+ stpi_dither_channel_t *dc = &CHANNEL(d, i);
+ shade_distance_t *sp = (shade_distance_t *) dc->aux_data;
+ stpi_ink_defn_t *inkp;
+ stpi_ink_defn_t lower, upper;
+
+ advance_eventone_pre(sp, et, x);
+
+ /*
+ * Find which are the two candidate dot sizes.
+ * Rather than use the absolute value of the point to compute
+ * the error, we will use the relative value of the point within
+ * the range to find the two candidate dot sizes.
+ */
+ range_point =
+ find_segment_and_ditherpoint(dc, raw[i], &lower, &upper);
+
+ /* Incorporate error data from previous line */
+ dc->v += 2 * range_point + (dc->errs[0][x + MAX_SPREAD] + 8) / 16;
+ inkspot = dc->v - range_point;
+
+ point_error += eventone_adjust(dc, et, inkspot, range_point);
+
+ /* Determine whether to print the larger or smaller dot */
+ inkp = &lower;
+ if (point_error >= comparison) {
+ point_error -= 65535;
+ inkp = &upper;
+ dc->v -= 131070;
+ sp->dis = et->d_sq;
+ }
+
+ /* Adjust the error to reflect the dot choice */
+ if (inkp->bits) {
+ if (!mask || (*(mask + d->ptr_offset) & bit)) {
+ set_row_ends(dc, x);
+
+ /* Do the printing */
+ print_ink(d, dc->ptr, inkp, bit, length);
+ }
+ }
+
+ /* Spread the error around to the adjacent dots */
+ eventone_update(dc, et, x, direction);
+ diffuse_error(dc, et, x, direction);
+ }
+ }
+ if (direction == 1)
+ ADVANCE_UNIDIRECTIONAL(d, bit, raw, channel_count, xerror, xstep, xmod);
+ else
+ ADVANCE_REVERSE(d, bit, raw, channel_count, xerror, xstep, xmod);
+ }
+ if (direction == -1)
+ stpi_dither_reverse_row_ends(d);
+}
+
+void
+stpi_dither_ut(stp_vars_t *v,
+ int row,
+ const unsigned short *raw,
+ int duplicate_line,
+ int zero_mask,
+ const unsigned char *mask)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ eventone_t *et;
+
+ int x,
+ length;
+ unsigned char bit;
+ int i;
+
+ int terminate;
+ int direction;
+ int xerror, xstep, xmod;
+ int channel_count = CHANNEL_COUNT(d);
+ stpi_dither_channel_t *ddc;
+
+ if (channel_count == 1) {
+ stpi_dither_et(v, row, raw, duplicate_line, zero_mask, mask);
+ return;
+ }
+
+ if (!et_initializer(d, duplicate_line, zero_mask))
+ return;
+
+ et = (eventone_t *) d->aux_data;
+ ddc = et->dummy_channel;
+
+ length = (d->dst_width + 7) / 8;
+
+ if (row & 1) {
+ direction = 1;
+ x = 0;
+ terminate = d->dst_width;
+ d->ptr_offset = 0;
+ } else {
+ direction = -1;
+ x = d->dst_width - 1;
+ terminate = -1;
+ d->ptr_offset = length - 1;
+ raw += channel_count * (d->src_width - 1);
+ }
+ bit = 1 << (7 - (x & 7));
+ xstep = channel_count * (d->src_width / d->dst_width);
+ xmod = d->src_width % d->dst_width;
+ xerror = (xmod * x) % d->dst_width;
+
+ for (; x != terminate; x += direction) {
+
+ shade_distance_t *ssp = (shade_distance_t *) ddc->aux_data;
+ int point_error = 0;
+ int total_error = 0;
+ int channels_to_print = 0;
+ int print_all_channels = 0;
+ int maximum_value = 0;
+ int comparison = 32768;
+ stpi_dither_channel_t *best_channel = NULL;
+ stpi_dither_channel_t *second_best_channel = NULL;
+ int best_channel_value = INT_MIN;
+ int second_best_channel_value = INT_MIN;
+ int random_value = ditherpoint(d, &(d->dither_matrix), x);
+
+ if (d->stpi_dither_type & D_ORDERED_BASE)
+ comparison += (random_value / 16) - 2048;
+
+
+ ddc->b = 0;
+ advance_eventone_pre(ssp, et, x);
+
+ for (i=0; i < channel_count; i++) {
+ stpi_dither_channel_t *dc = &CHANNEL(d, i);
+ if (dc->ptr) {
+ shade_distance_t *sp = (shade_distance_t *) dc->aux_data;
+
+ advance_eventone_pre(sp, et, x);
+
+ /*
+ * Find which are the two candidate dot sizes.
+ * Rather than use the absolute value of the point to compute
+ * the error, we will use the relative value of the point within
+ * the range to find the two candidate dot sizes.
+ */
+ dc->b = find_segment_and_ditherpoint(dc, raw[i],
+ &(sp->lower), &(sp->upper));
+ if (sp->share_this_channel) {
+ if (dc->b > maximum_value)
+ maximum_value = dc->b;
+ ddc->b += dc->b;
+ }
+ /* Incorporate error data from previous line */
+ dc->v += 2 * dc->b + (dc->errs[0][x + MAX_SPREAD] + 8) / 16;
+ dc->o = unitone_adjust(dc, et, dc->v - dc->b, dc->b);
+ }
+ }
+
+#if 0
+ if ((2 * (ddc->b - maximum_value)) < (3 * maximum_value))
+ print_all_channels = 1;
+#endif
+
+ if (ddc->b > 131070)
+ print_all_channels = 1;
+ else if (ddc->b > 65535) {
+ ddc->b -= 65535;
+ channels_to_print = 1;
+ }
+
+ if (ddc->b > 65535) {
+ ddc->b = 65535;
+ }
+
+ ddc->v += 2 * ddc->b + (ddc->errs[0][x + MAX_SPREAD] + 8) / 16;
+ total_error += eventone_adjust(ddc, et, ddc->v - ddc->b, ddc->b);
+ if (total_error >= comparison) {
+ channels_to_print += 1;
+ }
+
+ if (!print_all_channels) {
+ for (i=0; i < channel_count; i++) {
+ stpi_dither_channel_t *dc = &CHANNEL(d, i);
+ shade_distance_t *sp = (shade_distance_t *) dc->aux_data;
+
+ if (dc->ptr) {
+
+ if (sp->share_this_channel) {
+ if (dc->o > best_channel_value) {
+ second_best_channel = best_channel;
+ best_channel = dc;
+ second_best_channel_value = best_channel_value;
+ if (dc->o >= 32768)
+ best_channel_value = INT_MAX;
+ else
+ best_channel_value = dc->o;
+ } else if (dc->o > second_best_channel_value) {
+ second_best_channel = dc;
+ if (dc->o >= 32768)
+ second_best_channel_value = INT_MAX;
+ else
+ second_best_channel_value = dc->o;
+ }
+ }
+ }
+ }
+ }
+
+ for (i=0; i < channel_count; i++) {
+ stpi_dither_channel_t *dc = &CHANNEL(d, i);
+ if (dc->ptr) {
+
+ /* Determine whether to print the larger or smaller dot */
+ shade_distance_t *sp = (shade_distance_t *) dc->aux_data;
+ stpi_ink_defn_t *inkp = &(sp->lower);
+
+ if (dc->o < 0)
+ dc->o = 0;
+ else if (dc->o > 65535)
+ dc->o = 65535;
+ if (print_all_channels || !sp->share_this_channel) {
+ point_error += dc->o;
+ if (point_error >= comparison) {
+ point_error -= 65535;
+ inkp = &(sp->upper);
+ dc->v -= 131070;
+ sp->dis = et->d_sq;
+ }
+ } else if ((channels_to_print >= 1 && best_channel == dc) ||
+ (channels_to_print >= 2 && second_best_channel == dc)) {
+ inkp = &(sp->upper);
+ dc->v -= 131070;
+ sp->dis = et->d_sq;
+ }
+ if (inkp->bits) {
+ if (!mask || (*(mask + d->ptr_offset) & bit)) {
+ set_row_ends(dc, x);
+
+ /* Do the printing */
+ print_ink(d, dc->ptr, inkp, bit, length);
+ }
+ }
+ }
+ }
+ if (total_error >= comparison) {
+ ddc->v -= 131070;
+ total_error -= 65535;
+ ssp->dis = et->d_sq;
+ }
+
+ eventone_update(ddc, et, x, direction);
+ diffuse_error(ddc, et, x, direction);
+ for (i=0; i < channel_count; i++) {
+ stpi_dither_channel_t *dc = &CHANNEL(d, i);
+ if (dc->ptr) {
+
+ /* Spread the error around to the adjacent dots */
+ eventone_update(dc, et, x, direction);
+ diffuse_error(dc, et, x, direction);
+ }
+ }
+
+
+ if (direction == 1)
+ ADVANCE_UNIDIRECTIONAL(d, bit, raw, channel_count, xerror, xstep, xmod);
+ else
+ ADVANCE_REVERSE(d, bit, raw, channel_count, xerror, xstep, xmod);
+ }
+ if (direction == -1)
+ stpi_dither_reverse_row_ends(d);
+}
diff --git a/src/main/dither-impl.h b/src/main/dither-impl.h
new file mode 100644
index 0000000..be17169
--- /dev/null
+++ b/src/main/dither-impl.h
@@ -0,0 +1,263 @@
+/*
+ * "$Id: dither-impl.h,v 1.25 2005/04/12 00:57:01 rlk Exp $"
+ *
+ * Internal implementation of dither algorithms
+ *
+ * Copyright 1997-2003 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Revision History:
+ *
+ * See ChangeLog
+ */
+
+/*
+ * This file must include only standard C header files. The core code must
+ * compile on generic platforms that don't support glib, gimp, gtk, etc.
+ */
+
+#ifndef GUTENPRINT_INTERNAL_DITHER_IMPL_H
+#define GUTENPRINT_INTERNAL_DITHER_IMPL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <limits.h>
+
+#ifdef __GNUC__
+#define inline __inline__
+#endif
+
+#define D_FLOYD_HYBRID 0
+#define D_ADAPTIVE_BASE 4
+#define D_ADAPTIVE_HYBRID (D_ADAPTIVE_BASE | D_FLOYD_HYBRID)
+#define D_ORDERED_BASE 8
+#define D_ORDERED (D_ORDERED_BASE)
+#define D_FAST_BASE 16
+#define D_FAST (D_FAST_BASE)
+#define D_VERY_FAST (D_FAST_BASE + 1)
+#define D_EVENTONE 32
+#define D_UNITONE 64
+#define D_EVENBETTER 128
+#define D_HYBRID_EVENTONE (D_ORDERED_BASE | D_EVENTONE)
+#define D_HYBRID_UNITONE (D_ORDERED_BASE | D_UNITONE)
+#define D_HYBRID_EVENBETTER (D_ORDERED_BASE | D_EVENBETTER)
+#define D_PREDITHERED 128
+#define D_INVALID -2
+
+#define DITHER_FAST_STEPS (6)
+
+typedef struct
+{
+ const char *name;
+ const char *text;
+ int id;
+} stpi_dither_algorithm_t;
+
+#define ERROR_ROWS 2
+
+#define MAX_SPREAD 32
+
+typedef void stpi_ditherfunc_t(stp_vars_t *, int, const unsigned short *, int,
+ int, const unsigned char *);
+
+/*
+ * An end of a dither segment, describing one ink
+ */
+
+typedef struct ink_defn
+{
+ unsigned range;
+ unsigned value;
+ unsigned bits;
+} stpi_ink_defn_t;
+
+/*
+ * A segment of the entire 0-65535 intensity range.
+ */
+
+typedef struct dither_segment
+{
+ stpi_ink_defn_t *lower;
+ stpi_ink_defn_t *upper;
+ unsigned range_span;
+ unsigned value_span;
+ int is_same_ink;
+ int is_equal;
+} stpi_dither_segment_t;
+
+typedef struct dither_channel
+{
+ unsigned randomizer; /* With Floyd-Steinberg dithering, control */
+ /* how much randomness is applied to the */
+ /* threshold values (0-65535). */
+ unsigned bit_max;
+ unsigned signif_bits;
+ unsigned density;
+ double darkness; /* Relative darkness of this ink */
+
+ int v;
+ int o;
+ int b;
+ int very_fast;
+
+ stpi_ink_defn_t *ink_list;
+
+ int nlevels;
+ stpi_dither_segment_t *ranges;
+
+ int error_rows;
+ int **errs;
+
+ stp_dither_matrix_impl_t pick;
+ stp_dither_matrix_impl_t dithermat;
+ int row_ends[2];
+ unsigned char *ptr;
+ void *aux_data; /* aux_freefunc for dither should free this */
+} stpi_dither_channel_t;
+
+typedef struct dither
+{
+ int src_width; /* Input width */
+ int dst_width; /* Output width */
+
+ int spread; /* With Floyd-Steinberg, how widely the */
+ int spread_mask; /* error is distributed. This should be */
+ /* between 12 (very broad distribution) and */
+ /* 19 (very narrow) */
+
+ int stpi_dither_type;
+
+ int adaptive_limit;
+
+ int x_aspect; /* Aspect ratio numerator */
+ int y_aspect; /* Aspect ratio denominator */
+
+ double transition; /* Exponential scaling for transition region */
+
+ int *offset0_table;
+ int *offset1_table;
+
+ int d_cutoff;
+
+ int last_line_was_empty;
+ int ptr_offset;
+ int error_rows;
+
+ int finalized; /* When dither is first called, calculate
+ * some things */
+
+ stp_dither_matrix_impl_t dither_matrix;
+ stp_dither_matrix_impl_t transition_matrix;
+ stpi_dither_channel_t *channel;
+ unsigned channel_count;
+ unsigned total_channel_count;
+ unsigned *channel_index;
+ unsigned *subchannel_count;
+
+ stpi_ditherfunc_t *ditherfunc;
+ void *aux_data;
+ void (*aux_freefunc)(struct dither *);
+} stpi_dither_t;
+
+#define CHANNEL(d, c) ((d)->channel[(c)])
+#define CHANNEL_COUNT(d) ((d)->total_channel_count)
+
+#define USMIN(a, b) ((a) < (b) ? (a) : (b))
+
+
+extern stpi_ditherfunc_t stpi_dither_predithered;
+extern stpi_ditherfunc_t stpi_dither_very_fast;
+extern stpi_ditherfunc_t stpi_dither_ordered;
+extern stpi_ditherfunc_t stpi_dither_ed;
+extern stpi_ditherfunc_t stpi_dither_et;
+extern stpi_ditherfunc_t stpi_dither_ut;
+
+extern void stpi_dither_reverse_row_ends(stpi_dither_t *d);
+extern int stpi_dither_translate_channel(stp_vars_t *v, unsigned channel,
+ unsigned subchannel);
+extern void stpi_dither_channel_destroy(stpi_dither_channel_t *channel);
+extern void stpi_dither_finalize(stp_vars_t *v);
+extern int *stpi_dither_get_errline(stpi_dither_t *d, int row, int color);
+
+
+#define ADVANCE_UNIDIRECTIONAL(d, bit, input, width, xerror, xstep, xmod) \
+do \
+{ \
+ bit >>= 1; \
+ if (bit == 0) \
+ { \
+ d->ptr_offset++; \
+ bit = 128; \
+ } \
+ input += xstep; \
+ if (xmod) \
+ { \
+ xerror += xmod; \
+ if (xerror >= d->dst_width) \
+ { \
+ xerror -= d->dst_width; \
+ input += (width); \
+ } \
+ } \
+} while (0)
+
+#define ADVANCE_REVERSE(d, bit, input, width, xerror, xstep, xmod) \
+do \
+{ \
+ if (bit == 128) \
+ { \
+ d->ptr_offset--; \
+ bit = 1; \
+ } \
+ else \
+ bit <<= 1; \
+ input -= xstep; \
+ if (xmod) \
+ { \
+ xerror -= xmod; \
+ if (xerror < 0) \
+ { \
+ xerror += d->dst_width; \
+ input -= (width); \
+ } \
+ } \
+} while (0)
+
+#define ADVANCE_BIDIRECTIONAL(d,bit,in,dir,width,xer,xstep,xmod,err,S) \
+do \
+{ \
+ int ii; \
+ int jj; \
+ for (ii = 0; ii < width; ii++) \
+ for (jj = 0; jj < S; jj++) \
+ err[ii][jj] += dir; \
+ if (dir == 1) \
+ ADVANCE_UNIDIRECTIONAL(d, bit, in, width, xer, xstep, xmod); \
+ else \
+ ADVANCE_REVERSE(d, bit, in, width, xer, xstep, xmod); \
+} while (0)
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* GUTENPRINT_INTERNAL_DITHER_IMPL_H */
+/*
+ * End of "$Id: dither-impl.h,v 1.25 2005/04/12 00:57:01 rlk Exp $".
+ */
diff --git a/src/main/dither-inks.c b/src/main/dither-inks.c
new file mode 100644
index 0000000..f7568e3
--- /dev/null
+++ b/src/main/dither-inks.c
@@ -0,0 +1,423 @@
+/*
+ * "$Id: dither-inks.c,v 1.25 2004/09/17 18:38:18 rleigh Exp $"
+ *
+ * Print plug-in driver utility functions for the GIMP.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Revision History:
+ *
+ * See ChangeLog
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#include <math.h>
+#include <assert.h>
+#include <string.h>
+#include "dither-impl.h"
+
+int
+stpi_dither_translate_channel(stp_vars_t *v, unsigned channel,
+ unsigned subchannel)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ unsigned chan_idx;
+ if (!d)
+ return -1;
+ if (channel >= d->channel_count)
+ return -1;
+ if (subchannel >= d->subchannel_count[channel])
+ return -1;
+ chan_idx = d->channel_index[channel];
+ return chan_idx + subchannel;
+}
+
+unsigned char *
+stp_dither_get_channel(stp_vars_t *v, unsigned channel, unsigned subchannel)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ int place = stpi_dither_translate_channel(v, channel, subchannel);
+ if (place >= 0)
+ return d->channel[place].ptr;
+ else
+ return NULL;
+}
+
+static void
+insert_channel(stp_vars_t *v, stpi_dither_t *d, int channel)
+{
+ unsigned oc = d->channel_count;
+ int i;
+ d->channel_index =
+ stp_realloc (d->channel_index, sizeof(unsigned) * (channel + 1));
+ d->subchannel_count =
+ stp_realloc (d->subchannel_count, sizeof(unsigned) * (channel + 1));
+ for (i = oc; i < channel + 1; i++)
+ {
+ if (oc == 0)
+ d->channel_index[i] = 0;
+ else
+ d->channel_index[i] =
+ d->channel_index[oc - 1] + d->subchannel_count[oc - 1];
+ d->subchannel_count[i] = 0;
+ }
+ d->channel_count = channel + 1;
+}
+
+void
+stpi_dither_channel_destroy(stpi_dither_channel_t *channel)
+{
+ int i;
+ STP_SAFE_FREE(channel->ink_list);
+ if (channel->errs)
+ {
+ for (i = 0; i < channel->error_rows; i++)
+ STP_SAFE_FREE(channel->errs[i]);
+ STP_SAFE_FREE(channel->errs);
+ }
+ STP_SAFE_FREE(channel->ranges);
+ stp_dither_matrix_destroy(&(channel->pick));
+ stp_dither_matrix_destroy(&(channel->dithermat));
+}
+
+static void
+initialize_channel(stp_vars_t *v, int channel, int subchannel)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ int idx = stpi_dither_translate_channel(v, channel, subchannel);
+ stpi_dither_channel_t *dc = &(CHANNEL(d, idx));
+ stp_shade_t shade;
+ stp_dotsize_t dot;
+ assert(idx >= 0);
+ memset(dc, 0, sizeof(stpi_dither_channel_t));
+ stp_dither_matrix_clone(&(d->dither_matrix), &(dc->dithermat), 0, 0);
+ stp_dither_matrix_clone(&(d->transition_matrix), &(dc->pick), 0, 0);
+ shade.dot_sizes = &dot;
+ shade.value = 1.0;
+ shade.numsizes = 1;
+ dot.bit_pattern = 1;
+ dot.value = 1.0;
+ stp_dither_set_inks_full(v, channel, 1, &shade, 1.0, 1.0);
+}
+
+static void
+insert_subchannel(stp_vars_t *v, stpi_dither_t *d, int channel, int subchannel)
+{
+ int i;
+ unsigned oc = d->subchannel_count[channel];
+ unsigned increment = subchannel - oc + 1;
+ unsigned old_place = d->channel_index[channel] + oc;
+ stpi_dither_channel_t *nc =
+ stp_malloc(sizeof(stpi_dither_channel_t) *
+ (d->total_channel_count + increment));
+
+ if (d->channel)
+ {
+ /*
+ * Copy the old channels, including all subchannels of the current
+ * channel that already existed.
+ */
+ memcpy(nc, d->channel, sizeof(stpi_dither_channel_t) * old_place);
+ if (old_place < d->total_channel_count)
+ /*
+ * If we're inserting a new subchannel in the middle somewhere,
+ * we need to move everything else up
+ */
+ memcpy(nc + old_place + increment, d->channel + old_place,
+ (sizeof(stpi_dither_channel_t) *
+ (d->total_channel_count - old_place)));
+ stp_free(d->channel);
+ }
+ d->channel = nc;
+ if (channel < d->channel_count - 1)
+ /* Now fix up the subchannel offsets */
+ for (i = channel + 1; i < d->channel_count; i++)
+ d->channel_index[i] += increment;
+ d->subchannel_count[channel] = subchannel + 1;
+ d->total_channel_count += increment;
+ for (i = oc; i < oc + increment; i++)
+ initialize_channel(v, channel, i);
+}
+
+void
+stpi_dither_finalize(stp_vars_t *v)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ if (!d->finalized)
+ {
+ int i;
+ unsigned rc = 1 + (unsigned) ceil(sqrt(CHANNEL_COUNT(d)));
+ unsigned x_n = d->dither_matrix.x_size / rc;
+ unsigned y_n = d->dither_matrix.y_size / rc;
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ {
+ stpi_dither_channel_t *dc = &(CHANNEL(d, i));
+ stp_dither_matrix_clone(&(d->dither_matrix), &(dc->dithermat),
+ x_n * (i % rc), y_n * (i / rc));
+ stp_dither_matrix_clone(&(d->dither_matrix), &(dc->pick),
+ x_n * (i % rc), y_n * (i / rc));
+ }
+ d->finalized = 1;
+ }
+}
+
+void
+stp_dither_add_channel(stp_vars_t *v, unsigned char *data,
+ unsigned channel, unsigned subchannel)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ int idx;
+ if (channel >= d->channel_count)
+ insert_channel(v, d, channel);
+ if (subchannel >= d->subchannel_count[channel])
+ insert_subchannel(v, d, channel, subchannel);
+ idx = stpi_dither_translate_channel(v, channel, subchannel);
+ assert(idx >= 0);
+ d->channel[idx].ptr = data;
+}
+
+static void
+stpi_dither_finalize_ranges(stp_vars_t *v, stpi_dither_channel_t *dc)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ int i;
+ unsigned lbit = dc->bit_max;
+ dc->signif_bits = 0;
+ while (lbit > 0)
+ {
+ dc->signif_bits++;
+ lbit >>= 1;
+ }
+
+ for (i = 0; i < dc->nlevels; i++)
+ {
+ if (dc->ranges[i].lower->bits == dc->ranges[i].upper->bits)
+ dc->ranges[i].is_same_ink = 1;
+ else
+ dc->ranges[i].is_same_ink = 0;
+ if (dc->ranges[i].range_span > 0 && dc->ranges[i].value_span > 0)
+ dc->ranges[i].is_equal = 0;
+ else
+ dc->ranges[i].is_equal = 1;
+
+ stp_dprintf(STP_DBG_INK, v,
+ " level %d value[0] %d value[1] %d range[0] %d range[1] %d\n",
+ i, dc->ranges[i].lower->value, dc->ranges[i].upper->value,
+ dc->ranges[i].lower->range, dc->ranges[i].upper->range);
+ stp_dprintf(STP_DBG_INK, v,
+ " bits[0] %d bits[1] %d\n",
+ dc->ranges[i].lower->bits, dc->ranges[i].upper->bits);
+ stp_dprintf(STP_DBG_INK, v,
+ " rangespan %d valuespan %d same_ink %d equal %d\n",
+ dc->ranges[i].range_span, dc->ranges[i].value_span,
+ dc->ranges[i].is_same_ink, dc->ranges[i].is_equal);
+ if (i > 0 && dc->ranges[i].lower->range >= d->adaptive_limit)
+ {
+ d->adaptive_limit = dc->ranges[i].lower->range + 1;
+ if (d->adaptive_limit > 65535)
+ d->adaptive_limit = 65535;
+ stp_dprintf(STP_DBG_INK, v, "Setting adaptive limit to %d\n",
+ d->adaptive_limit);
+ }
+ }
+ for (i = 0; i <= dc->nlevels; i++)
+ stp_dprintf(STP_DBG_INK, v,
+ " ink_list[%d] range %d value %d bits %d\n",
+ i, dc->ink_list[i].range,
+ dc->ink_list[i].value, dc->ink_list[i].bits);
+ if (dc->nlevels == 1 && dc->ranges[0].upper->bits == 1)
+ dc->very_fast = 1;
+ else
+ dc->very_fast = 0;
+
+ stp_dprintf(STP_DBG_INK, v,
+ " bit_max %d signif_bits %d\n", dc->bit_max, dc->signif_bits);
+}
+
+static void
+stpi_dither_set_ranges(stp_vars_t *v, int color, const stp_shade_t *shade,
+ double density, double darkness)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ stpi_dither_channel_t *dc = &(CHANNEL(d, color));
+ const stp_dotsize_t *ranges = shade->dot_sizes;
+ int nlevels = shade->numsizes;
+ int i;
+
+ STP_SAFE_FREE(dc->ranges);
+ STP_SAFE_FREE(dc->ink_list);
+
+ dc->nlevels = nlevels > 1 ? nlevels + 1 : nlevels;
+ dc->ranges = (stpi_dither_segment_t *)
+ stp_zalloc(dc->nlevels * sizeof(stpi_dither_segment_t));
+ dc->ink_list = (stpi_ink_defn_t *)
+ stp_zalloc((dc->nlevels + 1) * sizeof(stpi_ink_defn_t));
+ dc->bit_max = 0;
+ dc->density = density * 65535;
+ dc->darkness = darkness;
+ stp_init_debug_messages(v);
+ stp_dprintf(STP_DBG_INK, v,
+ "stpi_dither_set_ranges channel %d nlevels %d density %f darkness %f\n",
+ color, nlevels, density, darkness);
+ for (i = 0; i < nlevels; i++)
+ stp_dprintf(STP_DBG_INK, v,
+ " level %d value %f pattern %x\n", i,
+ ranges[i].value, ranges[i].bit_pattern);
+ dc->ranges[0].lower = &dc->ink_list[0];
+ dc->ranges[0].upper = &dc->ink_list[1];
+ dc->ink_list[0].range = 0;
+ dc->ink_list[0].value = 0;
+ dc->ink_list[0].bits = 0;
+ if (nlevels == 1)
+ dc->ink_list[1].range = 65535;
+ else
+ dc->ink_list[1].range = ranges[0].value * 65535.0 * density;
+ if (dc->ink_list[1].range > 65535)
+ dc->ink_list[1].range = 65535;
+ dc->ink_list[1].value = ranges[0].value * 65535.0;
+ if (dc->ink_list[1].value > 65535)
+ dc->ink_list[1].value = 65535;
+ dc->ink_list[1].bits = ranges[0].bit_pattern;
+ if (ranges[0].bit_pattern > dc->bit_max)
+ dc->bit_max = ranges[0].bit_pattern;
+ dc->ranges[0].range_span = dc->ranges[0].upper->range;
+ dc->ranges[0].value_span = dc->ranges[0].upper->value;
+ if (dc->nlevels > 1)
+ {
+ for (i = 1; i < nlevels; i++)
+ {
+ int l = i + 1;
+ dc->ranges[i].lower = &dc->ink_list[i];
+ dc->ranges[i].upper = &dc->ink_list[l];
+
+ dc->ink_list[l].range =
+ (ranges[i].value + ranges[i].value) * 32768.0 * density;
+ if (dc->ink_list[l].range > 65535)
+ dc->ink_list[l].range = 65535;
+ dc->ink_list[l].value = ranges[i].value * 65535.0;
+ if (dc->ink_list[l].value > 65535)
+ dc->ink_list[l].value = 65535;
+ dc->ink_list[l].bits = ranges[i].bit_pattern;
+ if (ranges[i].bit_pattern > dc->bit_max)
+ dc->bit_max = ranges[i].bit_pattern;
+ dc->ranges[i].range_span =
+ dc->ink_list[l].range - dc->ink_list[i].range;
+ dc->ranges[i].value_span =
+ dc->ink_list[l].value - dc->ink_list[i].value;
+ }
+ dc->ranges[i].lower = &dc->ink_list[i];
+ dc->ranges[i].upper = &dc->ink_list[i+1];
+ dc->ink_list[i+1] = dc->ink_list[i];
+ dc->ink_list[i+1].range = 65535;
+ dc->ranges[i].range_span =
+ dc->ink_list[i+1].range - dc->ink_list[i].range;
+ dc->ranges[i].value_span =
+ dc->ink_list[i+1].value - dc->ink_list[i].value;
+ }
+ stpi_dither_finalize_ranges(v, dc);
+ stp_flush_debug_messages(v);
+}
+
+void
+stp_dither_set_inks_simple(stp_vars_t *v, int color, int nlevels,
+ const double *levels, double density,
+ double darkness)
+{
+ stp_shade_t s;
+ stp_dotsize_t *d = stp_malloc(nlevels * sizeof(stp_dotsize_t));
+ int i;
+ s.dot_sizes = d;
+ s.value = 65535.0;
+ s.numsizes = nlevels;
+
+ for (i = 0; i < nlevels; i++)
+ {
+ d[i].bit_pattern = i + 1;
+ d[i].value = levels[i];
+ }
+ stp_dither_set_inks_full(v, color, 1, &s, density, darkness);
+ stp_free(d);
+}
+
+void
+stp_dither_set_inks_full(stp_vars_t *v, int color, int nshades,
+ const stp_shade_t *shades, double density,
+ double darkness)
+{
+ int i;
+ int idx;
+ stpi_dither_channel_t *dc;
+
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+
+ stp_channel_reset_channel(v, color);
+
+ for (i = nshades - 1; i >= 0; i--)
+ {
+ int subchannel = nshades - i - 1;
+ idx = stpi_dither_translate_channel(v, color, subchannel);
+ assert(idx >= 0);
+ dc = &(CHANNEL(d, idx));
+
+ stp_channel_add(v, color, subchannel, shades[i].value);
+ if (idx >= 0)
+ stpi_dither_set_ranges(v, idx, &shades[i], density,
+ shades[i].value * darkness);
+ stp_dprintf(STP_DBG_INK, v,
+ " shade %d value %f\n",
+ i, shades[i].value);
+ }
+}
+
+void
+stp_dither_set_inks(stp_vars_t *v, int color, double density, double darkness,
+ int nshades, const double *svalues,
+ int ndotsizes, const double *dvalues)
+{
+ int i, j;
+ stp_shade_t *shades = stp_malloc(sizeof(stp_shade_t) * nshades);
+ stp_dotsize_t *dotsizes = stp_malloc(sizeof(stp_dotsize_t) * ndotsizes);
+ j = 0;
+ for (i = 0; i < ndotsizes; i++)
+ {
+ /* Skip over any zero-valued dot sizes */
+ if (dvalues[i] > 0)
+ {
+ dotsizes[j].value = dvalues[i];
+ dotsizes[j].bit_pattern = i + 1;
+ j++;
+ }
+ }
+ for (i = 0; i < nshades; i++)
+ {
+ shades[i].value = svalues[i];
+ shades[i].numsizes = j;
+ shades[i].dot_sizes = dotsizes;
+ }
+ stp_dither_set_inks_full(v, color, nshades, shades, density, darkness);
+ stp_free(dotsizes);
+ stp_free(shades);
+}
diff --git a/src/main/dither-inlined-functions.h b/src/main/dither-inlined-functions.h
new file mode 100644
index 0000000..5cd09d4
--- /dev/null
+++ b/src/main/dither-inlined-functions.h
@@ -0,0 +1,85 @@
+/*
+ * "$Id: dither-inlined-functions.h,v 1.6 2004/09/17 18:38:18 rleigh Exp $"
+ *
+ * Performance-critical functions that should be inlined, based on
+ * measurements.
+ *
+ * Copyright 1997-2003 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Revision History:
+ *
+ * See ChangeLog
+ */
+
+#ifndef GUTENPRINT_INTERNAL_DITHER_INLINED_FUNCTIONS_H
+#define GUTENPRINT_INTERNAL_DITHER_INLINED_FUNCTIONS_H
+
+/*
+ * Inlining has yielded significant (measured) speedup, even with the
+ * more complicated dither function. --rlk 20011219
+ */
+
+static inline unsigned
+ditherpoint(const stpi_dither_t *d, stp_dither_matrix_impl_t *mat, int x)
+{
+ if (mat->fast_mask)
+ return mat->matrix[(mat->last_y_mod +
+ ((x + mat->x_offset) & mat->fast_mask))];
+ /*
+ * This rather bizarre code is an attempt to avoid having to compute a lot
+ * of modulus and multiplication operations, which are typically slow.
+ */
+
+ if (x == mat->last_x + 1)
+ {
+ mat->last_x_mod++;
+ mat->index++;
+ if (mat->last_x_mod >= mat->x_size)
+ {
+ mat->last_x_mod -= mat->x_size;
+ mat->index -= mat->x_size;
+ }
+ }
+ else if (x == mat->last_x - 1)
+ {
+ mat->last_x_mod--;
+ mat->index--;
+ if (mat->last_x_mod < 0)
+ {
+ mat->last_x_mod += mat->x_size;
+ mat->index += mat->x_size;
+ }
+ }
+ else if (x != mat->last_x)
+ {
+ mat->last_x_mod = (x + mat->x_offset) % mat->x_size;
+ mat->index = mat->last_x_mod + mat->last_y_mod;
+ }
+ mat->last_x = x;
+ return mat->matrix[mat->index];
+}
+
+static inline void
+set_row_ends(stpi_dither_channel_t *dc, int x)
+{
+ if (dc->row_ends[0] == -1)
+ dc->row_ends[0] = x;
+ dc->row_ends[1] = x;
+}
+
+#endif /* GUTENPRINT_INTERNAL_DITHER_INLINED_FUNCTIONS_H */
diff --git a/src/main/dither-main.c b/src/main/dither-main.c
new file mode 100644
index 0000000..a5aadb6
--- /dev/null
+++ b/src/main/dither-main.c
@@ -0,0 +1,513 @@
+/*
+ * "$Id: dither-main.c,v 1.50 2005/04/12 00:57:01 rlk Exp $"
+ *
+ * Dither routine entrypoints
+ *
+ * Copyright 1997-2003 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Revision History:
+ *
+ * See ChangeLog
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#include <math.h>
+#include <string.h>
+#include "dither-impl.h"
+#include "generic-options.h"
+
+static const stpi_dither_algorithm_t dither_algos[] =
+{
+ /* Note to translators: "EvenTone" is the proper name, rather than a */
+ /* descriptive name, of this algorithm. */
+ { "None", N_ ("Default"), -1 },
+ { "EvenTone", N_ ("EvenTone"), D_EVENTONE },
+ { "HybridEvenTone", N_ ("Hybrid EvenTone"), D_HYBRID_EVENTONE },
+ /*
+ * Placeholders for future implementation of EvenBetter Screening
+ * Translators: EvenTone, EvenBetter, and UniTone are proper
+ * names, not descriptive.
+ */
+ { "EBS", N_ ("EvenBetter"), D_INVALID },
+ { "HybridEBS", N_ ("Hybrid EvenBetter"), D_INVALID },
+ /*
+ * Unitone dithering seems to have some numerical stability problems
+ * -- rlk 20050113
+ */
+#if UNITONE_WORKS
+ { "UniTone", N_ ("UniTone"), D_UNITONE },
+ { "HybridUniTone", N_ ("Hybrid UniTone"), D_HYBRID_UNITONE },
+#endif
+ { "Adaptive", N_ ("Adaptive Hybrid"), D_ADAPTIVE_HYBRID },
+ { "Ordered", N_ ("Ordered"), D_ORDERED },
+ { "Fast", N_ ("Fast"), D_FAST },
+ { "VeryFast", N_ ("Very Fast"), D_VERY_FAST },
+ { "Floyd", N_ ("Hybrid Floyd-Steinberg"), D_FLOYD_HYBRID },
+ { "Predithered", N_ ("Predithered Input"), D_PREDITHERED }
+};
+
+static const int num_dither_algos = sizeof(dither_algos)/sizeof(stpi_dither_algorithm_t);
+
+
+/*
+ * Bayer's dither matrix using Judice, Jarvis, and Ninke recurrence relation
+ * http://www.cs.rit.edu/~sxc7922/Project/CRT.htm
+ */
+
+static const unsigned sq2[] =
+{
+ 0, 2,
+ 3, 1
+};
+
+static const stp_parameter_t dither_parameters[] =
+{
+ {
+ "Density", N_("Density"), N_("Output Level Adjustment"),
+ N_("Adjust the density (amount of ink) of the print. "
+ "Reduce the density if the ink bleeds through the "
+ "paper or smears; increase the density if black "
+ "regions are not solid."),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, -1, 1, 0
+ },
+ {
+ "DitherAlgorithm", N_("Dither Algorithm"), N_("Screening Adjustment"),
+ N_("Choose the dither algorithm to be used.\n"
+ "Adaptive Hybrid usually produces the best all-around quality.\n"
+ "EvenTone is a new, experimental algorithm that often produces excellent results.\n"
+ "Ordered is faster and produces almost as good quality on photographs.\n"
+ "Fast and Very Fast are considerably faster, and work well for text and line art.\n"
+ "Hybrid Floyd-Steinberg generally produces inferior output."),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 1, 1, -1, 1, 0
+ },
+};
+
+static const int dither_parameter_count =
+sizeof(dither_parameters) / sizeof(const stp_parameter_t);
+
+stp_parameter_list_t
+stp_dither_list_parameters(const stp_vars_t *v)
+{
+ stp_parameter_list_t *ret = stp_parameter_list_create();
+ int i;
+ for (i = 0; i < dither_parameter_count; i++)
+ stp_parameter_list_add_param(ret, &(dither_parameters[i]));
+ return ret;
+}
+
+void
+stp_dither_describe_parameter(const stp_vars_t *v, const char *name,
+ stp_parameter_t *description)
+{
+ int i;
+ description->p_type = STP_PARAMETER_TYPE_INVALID;
+ if (name == NULL)
+ return;
+ description->deflt.str = NULL;
+ if (strcmp(name, "Density") == 0)
+ {
+ stp_fill_parameter_settings(description, &(dither_parameters[0]));
+ description->bounds.dbl.upper = 8.0;
+ description->bounds.dbl.lower = 0.1;
+ description->deflt.dbl = 1.0;
+ }
+ else if (strcmp(name, "DitherAlgorithm") == 0)
+ {
+ stp_fill_parameter_settings(description, &(dither_parameters[1]));
+ if (stp_check_string_parameter(v, "Quality", STP_PARAMETER_ACTIVE) &&
+ stpi_get_quality_by_name(stp_get_string_parameter(v, "Quality")))
+ description->is_active = 0;
+ else
+ {
+ description->bounds.str = stp_string_list_create();
+ for (i = 0; i < num_dither_algos; i++)
+ {
+ const stpi_dither_algorithm_t *dt = &dither_algos[i];
+ if (dt->id != D_INVALID)
+ stp_string_list_add_string(description->bounds.str,
+ dt->name, dt->text);
+ }
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ }
+ else
+ return;
+ if (stp_check_string_parameter(v, "Quality", STP_PARAMETER_ACTIVE) &&
+ stpi_get_quality_by_name(stp_get_string_parameter(v, "Quality")))
+ description->is_active = 0;
+ else if (stp_check_string_parameter(v, "ImageType", STP_PARAMETER_ACTIVE) &&
+ strcmp(stp_get_string_parameter(v, "ImageType"), "None") != 0 &&
+ description->p_level > STP_PARAMETER_LEVEL_BASIC)
+ description->is_active = 0;
+}
+
+#define RETURN_DITHERFUNC(func, v) \
+do \
+{ \
+ stp_dprintf(STP_DBG_COLORFUNC, v, "ditherfunc %s\n", #func); \
+ return (func); \
+} while (0)
+
+static stpi_ditherfunc_t *
+stpi_set_dither_function(stp_vars_t *v)
+{
+ const stpi_quality_t *quality = NULL;
+ const char *image_type = stp_get_string_parameter(v, "ImageType");
+ const char *color_correction = stp_get_string_parameter(v,"ColorCorrection");
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ int i;
+ const char *algorithm = stp_get_string_parameter(v, "DitherAlgorithm");
+ d->stpi_dither_type = -1;
+ if (stp_check_string_parameter(v, "Quality", STP_PARAMETER_ACTIVE))
+ quality = stpi_get_quality_by_name(stp_get_string_parameter(v, "Quality"));
+
+ if (color_correction)
+ {
+ if (strcmp(color_correction, "Predithered") == 0)
+ d->stpi_dither_type = D_PREDITHERED;
+ }
+ if (image_type && d->stpi_dither_type == -1)
+ {
+ if (strcmp(image_type, "Text") == 0)
+ d->stpi_dither_type = D_VERY_FAST;
+ }
+ if (quality && d->stpi_dither_type == -1)
+ {
+ switch (quality->quality_level)
+ {
+ case 0:
+ case 1:
+ d->stpi_dither_type = D_VERY_FAST;
+ break;
+ case 2:
+ case 3:
+ if (image_type && strcmp(image_type, "LineArt") == 0)
+ d->stpi_dither_type = D_VERY_FAST;
+ else
+ d->stpi_dither_type = D_FAST;
+ break;
+ case 4:
+ if (image_type &&
+ (strcmp(image_type, "LineArt") == 0 ||
+ strcmp(image_type, "TextGraphics") == 0))
+ d->stpi_dither_type = D_ADAPTIVE_HYBRID;
+ else
+ d->stpi_dither_type = D_ORDERED;
+ break;
+ case 5:
+ if (image_type &&
+ (strcmp(image_type, "LineArt") == 0 ||
+ strcmp(image_type, "TextGraphics") == 0))
+ d->stpi_dither_type = D_HYBRID_EVENTONE;
+ else if (image_type && (strcmp(image_type, "Photo") == 0))
+ d->stpi_dither_type = D_EVENTONE;
+ else
+ d->stpi_dither_type = D_ORDERED;
+ break;
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 10:
+ default:
+ if (image_type &&
+ (strcmp(image_type, "LineArt") == 0 ||
+ strcmp(image_type, "TextGraphics") == 0))
+ d->stpi_dither_type = D_HYBRID_EVENTONE;
+ else
+ d->stpi_dither_type = D_EVENTONE;
+ break;
+ }
+ /* EvenTone performs poorly if the aspect ratio is greater than 2 */
+ if ((d->stpi_dither_type & (D_EVENTONE | D_UNITONE)) &&
+ (d->x_aspect > 2 || d->y_aspect > 2))
+ d->stpi_dither_type = D_ADAPTIVE_HYBRID;
+ }
+ else if (algorithm)
+ {
+ for (i = 0; i < num_dither_algos; i++)
+ {
+ if (!strcmp(algorithm, _(dither_algos[i].name)))
+ {
+ d->stpi_dither_type = dither_algos[i].id;
+ break;
+ }
+ }
+ if (d->stpi_dither_type == -1)
+ {
+ d->stpi_dither_type = D_EVENTONE;
+ /* EvenTone performs poorly if the aspect ratio is greater than 2 */
+ if ((d->stpi_dither_type & (D_EVENTONE | D_UNITONE)) &&
+ (d->x_aspect > 2 || d->y_aspect > 2))
+ d->stpi_dither_type = D_ADAPTIVE_HYBRID;
+ }
+ }
+ switch (d->stpi_dither_type)
+ {
+ case D_PREDITHERED:
+ RETURN_DITHERFUNC(stpi_dither_predithered, v);
+ case D_VERY_FAST:
+ RETURN_DITHERFUNC(stpi_dither_very_fast, v);
+ case D_ORDERED:
+ case D_FAST:
+ RETURN_DITHERFUNC(stpi_dither_ordered, v);
+ case D_HYBRID_EVENTONE:
+ case D_EVENTONE:
+ RETURN_DITHERFUNC(stpi_dither_et, v);
+ case D_HYBRID_UNITONE:
+ case D_UNITONE:
+ RETURN_DITHERFUNC(stpi_dither_ut, v);
+ default:
+ RETURN_DITHERFUNC(stpi_dither_ed, v);
+ }
+}
+
+void
+stp_dither_set_adaptive_limit(stp_vars_t *v, double limit)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ d->adaptive_limit = limit;
+}
+
+void
+stp_dither_set_ink_spread(stp_vars_t *v, int spread)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ STP_SAFE_FREE(d->offset0_table);
+ STP_SAFE_FREE(d->offset1_table);
+ if (spread >= 16)
+ {
+ d->spread = 16;
+ }
+ else
+ {
+ int max_offset;
+ int i;
+ d->spread = spread;
+ max_offset = (1 << (16 - spread)) + 1;
+ d->offset0_table = stp_malloc(sizeof(int) * max_offset);
+ d->offset1_table = stp_malloc(sizeof(int) * max_offset);
+ for (i = 0; i < max_offset; i++)
+ {
+ d->offset0_table[i] = (i + 1) * (i + 1);
+ d->offset1_table[i] = ((i + 1) * i) / 2;
+ }
+ }
+ d->spread_mask = (1 << d->spread) - 1;
+}
+
+void
+stp_dither_set_randomizer(stp_vars_t *v, int i, double val)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ if (i < 0 || i >= CHANNEL_COUNT(d))
+ return;
+ CHANNEL(d, i).randomizer = val * 65535;
+}
+
+static void
+stpi_dither_free(void *vd)
+{
+ stpi_dither_t *d = (stpi_dither_t *) vd;
+ int j;
+ if (d->aux_freefunc)
+ (d->aux_freefunc)(d);
+ for (j = 0; j < CHANNEL_COUNT(d); j++)
+ stpi_dither_channel_destroy(&(CHANNEL(d, j)));
+ STP_SAFE_FREE(d->offset0_table);
+ STP_SAFE_FREE(d->offset1_table);
+ stp_dither_matrix_destroy(&(d->dither_matrix));
+ stp_dither_matrix_destroy(&(d->transition_matrix));
+ stp_free(d->channel);
+ stp_free(d->channel_index);
+ stp_free(d->subchannel_count);
+ stp_free(d);
+}
+
+void
+stp_dither_init(stp_vars_t *v, stp_image_t *image, int out_width,
+ int xdpi, int ydpi)
+{
+ int in_width = stp_image_width(image);
+ stpi_dither_t *d = stp_zalloc(sizeof(stpi_dither_t));
+
+ stp_allocate_component_data(v, "Dither", NULL, stpi_dither_free, d);
+
+ d->finalized = 0;
+ d->error_rows = ERROR_ROWS;
+ d->d_cutoff = 4096;
+
+ d->offset0_table = NULL;
+ d->offset1_table = NULL;
+ if (xdpi > ydpi)
+ {
+ d->x_aspect = 1;
+ d->y_aspect = xdpi / ydpi;
+ }
+ else
+ {
+ d->x_aspect = ydpi / xdpi;
+ d->y_aspect = 1;
+ }
+ d->ditherfunc = stpi_set_dither_function(v);
+ d->transition = 1.0;
+ d->adaptive_limit = .75 * 65535;
+
+ /*
+ * For hybrid EvenTone we want to use the good matrix. For regular
+ * EvenTone, we don't need to pay the cost.
+ */
+
+ if (d->stpi_dither_type == D_VERY_FAST || d->stpi_dither_type ==D_EVENTONE ||
+ d->stpi_dither_type == D_FAST || d->stpi_dither_type == D_PREDITHERED)
+ {
+ if (stp_check_int_parameter(v, "DitherVeryFastSteps",
+ STP_PARAMETER_ACTIVE))
+ stp_dither_set_iterated_matrix
+ (v, 2, stp_get_int_parameter(v, "DitherVeryFastSteps"), sq2, 0, 2,4);
+ else
+ stp_dither_set_iterated_matrix(v, 2, DITHER_FAST_STEPS, sq2, 0, 2, 4);
+ }
+ else if (stp_check_array_parameter(v, "DitherMatrix",
+ STP_PARAMETER_ACTIVE) &&
+ (stp_dither_matrix_validate_array
+ (stp_get_array_parameter(v, "DitherMatrix"))))
+ {
+ stp_dither_set_matrix_from_dither_array
+ (v, stp_get_array_parameter(v, "DitherMatrix"), 0);
+ }
+ else
+ {
+ stp_array_t *array;
+ int transposed;
+ array = stp_find_standard_dither_array(d->y_aspect, d->x_aspect);
+ transposed = d->y_aspect < d->x_aspect ? 1 : 0;
+ if (array)
+ {
+ stp_dither_set_matrix_from_dither_array(v, array, transposed);
+ stp_array_destroy(array);
+ }
+ else
+ {
+ stp_eprintf(v, "Cannot find dither matrix file! Aborting.\n");
+ stp_abort();
+ }
+ }
+ stp_dither_set_transition(v, 0.7);
+
+ d->src_width = in_width;
+ d->dst_width = out_width;
+
+ stp_dither_set_ink_spread(v, 13);
+ d->channel_count = 0;
+}
+
+void
+stpi_dither_reverse_row_ends(stpi_dither_t *d)
+{
+ int i;
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ {
+ int tmp = CHANNEL(d, i).row_ends[0];
+ CHANNEL(d, i).row_ends[0] =
+ CHANNEL(d, i).row_ends[1];
+ CHANNEL(d, i).row_ends[1] = tmp;
+ }
+}
+
+int
+stp_dither_get_first_position(stp_vars_t *v, int color, int subchannel)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ int channel = stpi_dither_translate_channel(v, color, subchannel);
+ if (channel < 0)
+ return -1;
+ return CHANNEL(d, channel).row_ends[0];
+}
+
+int
+stp_dither_get_last_position(stp_vars_t *v, int color, int subchannel)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ int channel = stpi_dither_translate_channel(v, color, subchannel);
+ if (channel < 0)
+ return -1;
+ return CHANNEL(d, channel).row_ends[1];
+}
+
+int *
+stpi_dither_get_errline(stpi_dither_t *d, int row, int color)
+{
+ stpi_dither_channel_t *dc;
+ if (row < 0 || color < 0 || color >= CHANNEL_COUNT(d))
+ return NULL;
+ dc = &(CHANNEL(d, color));
+ if (!dc->errs)
+ dc->errs = stp_zalloc(d->error_rows * sizeof(int *));
+ if (!dc->errs[row % dc->error_rows])
+ {
+ int size = 2 * MAX_SPREAD + (16 * ((d->dst_width + 7) / 8));
+ dc->errs[row % dc->error_rows] = stp_zalloc(size * sizeof(int));
+ }
+ return dc->errs[row % dc->error_rows] + MAX_SPREAD;
+}
+
+void
+stp_dither_internal(stp_vars_t *v, int row, const unsigned short *input,
+ int duplicate_line, int zero_mask,
+ const unsigned char *mask)
+{
+ int i;
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ stpi_dither_finalize(v);
+ stp_dither_matrix_set_row(&(d->dither_matrix), row);
+ stp_dither_matrix_set_row(&(d->transition_matrix), row);
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ {
+ CHANNEL(d, i).ptr = CHANNEL(d, i).ptr;
+ if (CHANNEL(d, i).ptr)
+ memset(CHANNEL(d, i).ptr, 0,
+ (d->dst_width + 7) / 8 * CHANNEL(d, i).signif_bits);
+ CHANNEL(d, i).row_ends[0] = -1;
+ CHANNEL(d, i).row_ends[1] = -1;
+
+ stp_dither_matrix_set_row(&(CHANNEL(d, i).dithermat), row);
+ stp_dither_matrix_set_row(&(CHANNEL(d, i).pick), row);
+ }
+ d->ptr_offset = 0;
+ (d->ditherfunc)(v, row, input, duplicate_line, zero_mask, mask);
+}
+
+void
+stp_dither(stp_vars_t *v, int row, int duplicate_line, int zero_mask,
+ const unsigned char *mask)
+{
+ const unsigned short *input = stp_channel_get_output(v);
+ stp_dither_internal(v, row, input, duplicate_line, zero_mask, mask);
+}
diff --git a/src/main/dither-matrix-1x1.xml b/src/main/dither-matrix-1x1.xml
new file mode 100644
index 0000000..87a2ccf
--- /dev/null
+++ b/src/main/dither-matrix-1x1.xml
@@ -0,0 +1,5553 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gutenprint xmlns="http://gimp-print.sourceforge.net/xsd/gp.xsd-1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://gimp-print.sourceforge.net/xsd/gp.xsd-1.0
+ gutenprint.xsd">
+ <dither-matrix x-aspect="1" y-aspect="1">
+ <array x-size="257" y-size="257">
+ <sequence count="66049" lower-bound="0" upper-bound="65535">
+0 59688 17885 33107 58234 12934 35793 44835 5911 41622 17122 47448
+37402 13125 45769 3041 64479 7193 26025 48883 23186 8596 56304 31276
+62070 7419 58111 28763 52231 25607 36689 7878 50438 3304 46570 30413
+38153 22895 59386 16833 64897 26973 56862 1751 30501 43096 19080 38867
+48367 16177 41490 6759 62468 3418 24582 56043 38990 1968 42531 12594
+60774 36919 21207 48066 15449 42959 61675 23866 6366 32459 57157 7049
+26177 49389 19702 57699 40132 3070 43778 10151 47443 20912 41554 27622
+46713 1914 43539 28428 4256 50085 14050 53795 38701 9916 52406 371
+58245 39850 6794 64725 38727 16036 45639 27474 35744 61301 15408 43781
+19382 45519 22661 58538 13444 26893 65363 15584 57641 7346 63655 34350
+27108 60053 1389 25706 51128 33025 2997 62541 8045 56547 39855 17393
+62119 30279 58117 40176 5416 43034 10397 28137 62708 14977 35842 51282
+13140 57289 4287 62260 34738 3051 26068 51278 22395 41714 17957 38847
+57449 20831 13094 51140 21733 46148 5516 41878 30210 3106 52391 14896
+39655 26731 47194 12836 50717 35728 16843 53564 33806 18463 43939
+20725 50550 39055 511 42169 18626 45294 34266 15424 49439 23119 39211
+28260 59005 8240 55197 26793 57303 14814 60469 16583 52634 35308 22649
+50030 2194 40629 59032 4777 28774 52867 32354 59389 9671 33651 49781
+24490 11991 37686 29536 51252 11424 47104 32362 15651 48712 14413
+50922 34165 24144 52891 8573 38880 32426 17423 31321 37485 27441 52996
+10324 58235 21400 60935 14706 24516 57051 17947 60150 3907 54271 10399
+33568 2617 36464 20515 63720 28199 53393 46866 34713 27290 45633 15536
+51091 990 30588 59907 14206 55908 24518 8409 58995 18887 52139 17703
+34592 59412 2080 33216 44331 25929 5345 21718 46279 35160 14224 42479
+5630 59093 31948 20683 42456 15998 63251 6859 44930 13925 43763 34236
+8438 38292 25073 51355 10201 61196 8702 25255 63565 23235 44508 21547
+40315 50916 10802 23093 63703 21537 53748 33443 11201 64203 5324 57904
+26849 2952 34541 48011 20564 38024 29077 64722 10611 45690 7410 31413
+63227 15386 53171 24772 57435 8038 60438 22060 54545 17757 57329 34695
+24441 59579 2111 26391 44137 19178 47156 13224 21027 50738 32897 19690
+52822 4886 59097 9156 24192 54382 3738 57333 9654 50128 16204 37405
+52971 3242 45691 22908 41296 18130 44699 15375 38344 30433 47682 16262
+59312 39285 19523 43669 25664 127 49234 26592 7314 20090 33929 63214
+15704 55482 39594 19364 52795 7031 26250 47001 32280 43334 13829 23212
+59083 38851 11986 55288 984 61266 10252 24108 49173 34897 7142 56436
+24990 59880 12950 48564 23567 33595 58419 29 62940 20132 42318 25801
+7112 64962 28922 835 60073 10974 55058 31332 14868 52056 21473 54782
+4374 64030 31663 1077 62112 14118 44038 16360 47813 21799 41930 10532
+38704 25784 47592 9732 64599 7506 28719 46469 16996 35926 24263 46087
+12616 42615 18468 36842 62005 14275 40798 61121 7810 55226 1498 64932
+26958 5653 57203 24958 61651 7013 58957 12785 37080 28569 63670 953
+57185 44186 14612 64790 18670 45030 32339 4163 31022 44240 33187 1609
+46783 26424 42586 19606 37213 58324 22551 55956 5261 37344 9608 31045
+21078 8634 55902 4995 61629 31582 48308 16726 35033 49771 4120 33554
+51183 29273 40625 11186 31077 47313 14634 39474 57369 16543 64039
+32600 53687 26956 1086 65147 23386 48700 16882 37638 64548 9390 48553
+23856 52293 27637 56418 3001 24182 52674 19844 62998 15793 47555 32418
+53432 35435 4173 52330 12769 57335 14741 28075 60229 37389 9813 44919
+6074 27682 51324 22773 40833 19394 46250 29454 53750 16611 62564 2029
+46434 18334 41146 23477 60308 17868 37832 28542 36303 4446 37189 29830
+39057 5894 33581 45011 8779 47345 12638 37300 29576 51664 7692 60612
+25660 34245 62289 26323 3632 59743 12054 41511 21942 46274 34382 13099
+49477 26069 36373 28818 62350 6898 29927 42332 19455 51366 12980 55289
+2756 58043 10669 54287 6696 43371 9966 29693 48739 12513 37250 59845
+11707 44990 31547 53207 2573 27242 48094 23599 555 45803 12684 41077
+61927 21023 8624 27012 49980 36036 8139 29552 43303 18615 46186 28890
+50463 32943 1701 62462 27877 39605 10804 33916 51795 18242 63823 11319
+40940 30797 10608 51505 4521 48372 32952 15190 46996 24235 40722 27676
+37117 3886 59119 32959 46715 11254 38973 17471 47805 35180 26109 53362
+4884 64314 35374 288 61219 33710 53413 4076 40970 32661 23608 36273
+55804 20224 62722 11573 54687 21099 64257 7104 55754 2715 27090 53054
+4879 31648 45488 19370 43470 16524 33517 49976 37745 52 29183 41641
+19516 45651 3105 48713 13514 42077 26678 9467 49993 2385 40416 7630
+48942 27410 52650 6921 64321 38475 13921 55373 7629 63454 30672 6666
+50454 14180 33036 56785 23364 61934 50897 37592 22449 42695 28178 7409
+23622 63923 8872 25951 42404 62981 21196 1637 56370 35960 61370 4923
+51737 28471 9697 46565 3141 40384 12993 49074 30606 38353 9029 34010
+56717 1978 26285 53201 34265 829 36886 10402 38976 30813 61060 13438
+43330 5698 41151 27248 2793 21679 46142 31598 16991 49692 83 33127
+48193 4471 31148 54908 16915 58423 40168 679 44552 14862 52972 11525
+65437 7948 43232 12188 50303 13919 56757 3500 52309 11616 50772 1488
+56002 13181 62223 15993 55425 19664 64564 25401 15194 63306 20585
+56080 7037 62477 14537 48587 35111 3940 45198 8697 48995 37088 22600
+44051 17396 51773 170 65163 28216 39719 17109 60532 1192 38800 25074
+56134 10480 61500 5610 38540 30674 47982 21869 41041 19817 62961 35273
+23536 53478 5312 64545 16845 32219 52102 21390 63891 13588 35687 57286
+8098 36016 61325 31240 56528 22553 2668 53238 30938 64469 81 54471
+21610 63058 5361 57809 35841 9176 20341 58716 40964 15934 44624 17377
+63391 1154 27674 44195 5089 53179 17624 56077 35137 24003 61108 17519
+53052 36327 9781 57642 7613 62842 19964 45761 25516 7325 28282 61169
+24255 55717 6929 57913 9456 30089 45348 23986 13520 46444 27737 7285
+21015 62470 19345 58259 710 44751 11086 42459 5550 47470 36447 1188
+30504 44622 19819 49233 38857 17570 46805 21439 34566 62774 10142
+39803 60034 12962 21435 35785 52580 16127 56071 26993 60985 22842
+54057 19299 59141 36738 16703 60323 25206 56861 19628 62734 16129
+46121 11880 29098 50237 22237 39350 17209 47672 28401 38537 25649
+45445 12868 42510 3672 32088 11867 64681 17101 54776 32501 52497 14864
+39255 57518 19739 9639 32702 49441 23658 7771 25452 42513 20380 63206
+37465 21396 54868 19684 60852 8312 58537 19040 54275 28264 13333 47784
+41433 14389 28478 57978 21947 62420 18758 45525 7036 49371 28520 55422
+14185 57681 31093 64103 10526 56295 37404 21063 38783 65368 12275
+44280 17858 33079 38284 8771 24483 60460 30578 56541 4257 38330 23035
+40387 19673 57476 35895 24536 34477 44832 19402 38964 25938 42690
+21549 47909 23706 44444 2375 46254 12417 50883 35496 589 39839 30456
+45929 19541 41582 30846 11788 57172 23470 55282 31737 13972 53840 7550
+62698 29539 37578 10902 51184 6402 47547 11834 51418 17990 43490 14691
+46907 35394 24786 59400 8448 27581 64765 5049 45171 27546 648 57908
+13825 44284 26834 54837 7889 35398 3694 41487 24708 48797 16642 30694
+44710 20633 5120 27416 49802 37817 15848 43808 17218 41924 12674 47414
+32678 45120 14024 23121 64253 34639 6574 29312 48436 4267 50617 23982
+36034 58028 10143 37847 24540 47514 3675 44150 13164 37978 30078 2301
+62389 22471 35353 47963 16221 52537 12251 65235 31624 50209 2388 40762
+15842 42687 21193 38170 51287 10918 32984 56792 18703 52156 31015
+48278 36070 9161 29344 51428 18679 61365 30005 51907 14662 25989 57470
+40561 13660 60736 33175 8270 63653 10650 57800 2564 26375 53261 23333
+3943 54407 32293 63284 9945 43161 4861 40522 11020 38624 6624 46242
+3821 30303 47269 21787 43148 13746 37163 1085 41391 20168 57594 36290
+2950 61490 11556 53271 858 59486 10702 64165 1869 54841 26935 58643
+15149 49032 1467 39992 10276 43754 3395 46910 30312 2129 35770 59645
+41152 15487 64863 31508 53046 13408 44851 143 25285 50154 6313 43125
+24707 41418 15308 43970 4113 40203 60039 22344 6572 61829 39359 12800
+49896 4976 54405 12377 58637 33921 506 36255 46495 7926 42394 18522
+43699 27171 6995 60679 9695 26491 53098 22343 57570 1604 64580 29568
+45529 19810 9318 33322 48623 16919 59444 1113 52145 30322 4833 61090
+8709 30707 63702 5354 58065 10006 65271 6016 40479 17545 53493 27354
+39903 4855 59352 27095 52964 5301 24367 54647 1381 64504 27431 40338
+16747 38162 1048 63796 27039 48233 24138 14169 57517 31884 19720 58795
+21187 40991 30251 56853 4298 63577 31531 305 52399 21189 35995 43408
+18827 50006 17497 52412 32791 18519 49472 30755 2345 39152 22096 58870
+46793 11273 60923 5716 40462 65289 10856 54909 32422 58859 7636 33535
+59488 4516 55323 27856 60827 19594 3367 26633 52567 39250 2457 46871
+23717 52789 14679 60790 35112 11918 53681 16877 31565 61382 13819
+34195 64824 19298 58707 7299 55682 41368 13633 49520 3591 28456 42644
+1535 40136 16401 44640 18400 58177 22870 53100 12822 64914 1967 22472
+61592 38816 3731 41816 11563 65208 2386 25589 56051 41501 15019 47943
+35003 2797 22327 63202 34418 8645 23517 51000 4373 25004 54191 29702
+43764 18388 51807 37316 7175 47481 29920 44032 7977 25587 48472 20816
+64471 22297 55078 17978 62491 35106 21076 64194 8023 55352 4613 53503
+28185 59333 22742 51658 5369 25257 44884 20560 43075 23600 41785 21747
+43691 17937 47090 35073 16299 39398 44762 19137 53181 26652 57794
+22001 60777 19194 56172 27184 50286 22729 5495 46922 10351 41876 3560
+60184 17902 55322 36383 16166 61698 11756 53004 1785 55499 20719 62519
+24972 9629 35349 54979 32195 3855 44795 20870 42564 22619 41007 27165
+17044 64480 19082 24631 59919 15174 54695 1436 59025 40691 22725 46376
+34979 5771 39538 14505 50493 13352 48900 4890 52182 27557 63514 12764
+43718 26416 47137 12008 44367 21247 39941 27338 53928 16878 45465
+22440 36961 27999 52596 11948 61431 34172 10698 57951 31499 16339
+48179 18533 61936 37068 10789 43153 17554 49680 6100 61426 10623 44631
+18654 42006 2955 38953 53127 5088 46855 35458 2700 33209 64144 8391
+22063 45560 34302 19753 48506 29218 9793 61982 1696 56044 12015 38173
+7467 59590 35946 8423 61575 20226 50985 32695 14123 29888 38211 19544
+50233 26314 1655 46473 22042 42631 15394 48375 12365 26662 46194 34893
+9774 37043 51750 31118 60262 8741 31972 55732 13237 61723 7905 38923
+31909 17856 46487 5735 41247 49097 1907 45548 27989 9044 50494 25476
+45762 16336 31554 59315 25718 33925 56859 14568 60515 24035 55491 4686
+41541 10676 37005 5672 43589 26024 47322 34508 7734 26844 59985 21766
+44265 16955 33085 50266 22052 5744 60109 8189 25059 57058 40055 6137
+49409 29443 59936 16719 35764 47816 20797 314 36106 48902 13305 28554
+56511 20223 61879 15060 33897 59242 2455 37663 11689 46903 1455 42693
+31026 10231 53133 28034 44678 15454 38700 12279 42083 8333 43692 12693
+37628 60542 9537 55728 6148 62553 12518 54565 5823 57616 30766 8466
+62821 4673 24995 61253 10817 43137 6010 37218 12181 41451 6788 44939
+10924 54660 29519 34103 54083 16293 48147 27575 38363 32252 7544 47683
+29885 39654 17948 36503 27495 46990 7746 44736 29933 50076 15029 24216
+48420 17362 65229 8612 52083 2469 47613 36002 9079 50608 35162 3739
+49248 25729 36547 32268 16301 53609 2515 58601 20638 63077 28490 41337
+22677 34023 62051 21757 41402 2186 50217 30922 7354 32895 63010 28518
+58627 11088 46304 145 41648 12532 50422 3225 43907 19060 46687 29130
+6726 43682 14834 50114 37291 7481 43936 13288 33214 58766 21053 55777
+14844 36395 29087 52433 21216 56716 13458 60029 31275 11284 43013
+16609 62088 26015 53774 15026 35755 52819 24986 7580 58887 13499 54636
+33101 15889 46062 34965 25711 61274 31011 15718 46277 24602 38196
+31562 6449 60552 43825 1008 51361 32129 8917 58424 37925 17660 51354
+3389 63111 19511 40325 64003 10808 22000 57995 23954 6393 42443 16415
+47983 19138 40719 28127 36675 26005 58448 306 55381 30776 64383 26572
+12653 51615 17212 57791 40145 30727 1290 34090 52534 5275 38969 10683
+50969 6426 43889 31959 8332 32910 47689 22159 61721 27644 57291 19278
+55038 16206 58378 29688 52916 14346 48800 5100 54197 39289 10258 63414
+35660 28204 33927 45721 10072 27549 55069 13186 42720 1983 31922 64868
+9253 41121 59265 25653 6375 64317 39430 16691 42598 1141 37691 51993
+16941 31323 50610 23994 34451 58532 15091 51492 25131 41144 574 34132
+58721 25621 63375 19034 54430 26403 64984 15789 32186 50651 27074
+36499 29089 38442 24931 32707 37305 18919 49198 22069 51944 7733 31688
+47558 21118 63466 25190 53891 17496 65205 20422 39885 14963 60879 839
+23169 62251 35188 5736 57193 12464 65028 26641 3477 56310 23825 63781
+12406 34473 57331 16035 64250 352 38100 60900 11428 54014 36240 24015
+33435 62739 15498 57501 30656 14899 61564 28383 38759 10018 51220 6206
+62662 12706 44422 27635 51113 8346 47586 3507 54270 10002 36936 13710
+58839 32019 17851 61385 23636 54466 20418 2671 35138 52833 17591 62022
+20191 59784 26426 56416 15133 59183 873 36867 56570 23240 64924 1686
+25017 60744 31905 52039 3245 28327 46336 4628 41175 59323 2641 25145
+46298 6554 51044 34681 16131 61517 28655 54697 10321 44695 5650 29473
+48568 2024 60763 37580 17076 43824 4819 39603 57151 24006 11053 47881
+2544 39697 55395 3876 65225 13024 57129 40931 11028 25604 64213 16011
+56333 36565 14975 31418 62323 11569 37458 29922 52623 1121 23055 54106
+33874 1940 36021 65482 21257 56117 759 63574 10540 54671 3869 51439
+15716 44130 27694 10023 20173 39306 59370 23502 36990 4744 21249 43562
+61988 14115 27504 64497 20378 46471 23237 63347 19866 53307 28169
+63838 10104 51769 134 46503 13412 39157 3331 41848 11387 46692 789
+40376 24715 58066 30362 19086 46185 15389 44254 3540 53326 15763 65338
+37397 17711 46430 21376 53016 38625 15817 54823 28887 11105 34164
+50503 23667 3451 58698 12082 53529 27514 6804 43471 57137 5374 62180
+8774 29171 45285 5152 59878 18581 47578 23019 9805 49210 2171 46519
+32639 3961 31419 47536 292 38845 13127 48826 2442 52289 9754 61054
+3481 53688 13439 42413 32764 28665 56192 2762 38749 13087 42180 383
+46259 29775 51345 3093 43409 18912 49152 38932 8659 24591 51422 21876
+44539 17402 50962 38277 10917 43381 5583 50338 28806 2965 42350 19809
+52951 33145 5420 42754 26865 1332 59343 9840 25894 41999 4832 53283
+32602 6560 47604 19648 65005 17664 42091 20035 48195 34462 14912 32621
+37225 23628 61052 32308 25503 55990 33266 6731 51451 39883 3828 46340
+9960 36245 49272 23409 6988 38238 28459 49607 7379 37619 10391 40086
+27423 51017 21297 13293 45317 18269 40862 54110 20752 10263 26496
+64110 39590 13669 52764 31064 17981 33193 65287 15430 40675 29279 4543
+49858 36352 1545 23529 49340 18823 39222 58093 16607 41195 11318 30058
+55712 22857 65045 26238 7211 34123 63843 22070 52059 14586 27011 43956
+21011 48090 1548 27256 55638 36716 19177 42885 4187 26999 55219 6850
+41017 26737 56943 13168 25425 45475 35868 7174 50380 27413 47092 9361
+45107 14239 37659 29388 46078 17862 42024 20606 48363 9068 62085 33826
+54150 2859 33087 8669 63151 29334 53947 8050 23674 47346 36129 9660
+50074 424 40866 11265 37853 3054 45330 18724 37607 26647 42147 20721
+63195 28748 53645 23787 62346 18483 32283 63965 9852 36561 8453 60433
+1240 54961 20268 58834 23118 42327 102 31980 60574 4109 58517 10373
+26022 44261 5060 48336 21383 60959 16182 44755 34693 29259 46025 18001
+65476 39483 21742 12573 33384 41254 26513 49429 20344 39201 29718 9026
+61953 36232 55659 19967 39673 17334 61075 28697 55224 18237 58971
+23135 56579 18857 64612 15049 46097 20024 44427 25563 65501 544 59124
+41853 19765 50519 27235 55670 22406 60183 26529 8303 34690 62525 22257
+56524 12913 28536 42990 58272 11417 39873 1530 58852 32045 14893 60475
+32774 57961 14207 38600 53814 22977 47939 12233 27864 47421 18847
+50353 34286 28908 35601 49288 18041 45406 19993 38130 56893 13763
+42582 2678 55570 29845 51766 4646 23781 61850 1006 56221 11902 39274
+7682 44865 286 48121 29757 14873 34082 53130 15894 31676 58003 13022
+65088 30541 55642 4342 36350 23999 47677 21989 63158 5654 31933 61782
+38094 3884 49357 30301 6220 35016 51151 41621 8754 22014 57405 35720
+9107 51266 42524 11589 36154 57750 17412 63507 30566 19392 47996 34420
+7335 64878 31218 12516 32318 63256 26845 47776 3052 41827 12538 49854
+29168 53977 4215 43113 9287 60307 36597 7042 53389 15062 42908 52408
+21605 4968 47877 13329 59990 39692 20563 45862 16912 50016 5284 34707
+59642 8915 61805 31306 15628 61089 17670 53649 25408 33417 50818 6047
+25012 56612 8277 65040 35381 22780 40908 5050 42973 21641 56742 41902
+14952 46144 18077 38748 56560 3348 53061 22004 35037 57184 18997 59584
+23673 55251 12967 58979 5179 56395 11123 51013 6225 36755 9996 44845
+6689 38044 51972 15719 31315 49895 22754 32852 40272 26530 37857 12396
+48850 18810 52383 11819 39186 23766 36663 29797 49732 14564 62523
+30705 39530 2299 53732 11469 62237 7311 24252 49908 4098 25477 60302
+29798 53630 14186 55887 3377 64695 13531 54005 33829 21933 5826 31033
+45024 7249 51797 11481 44379 6410 40973 11173 45792 5162 33410 40368
+26235 34789 58104 7966 41042 21430 38814 17477 5498 61751 11242 44178
+5108 48101 9868 36012 58914 23772 10509 47724 6514 33753 64240 2521
+31653 20744 49717 28354 36820 6695 48401 25724 748 22488 46038 25439
+10292 60595 6172 35204 59158 13905 63596 8198 56189 11968 54727 3255
+60161 10700 63944 1062 26263 52187 21566 46245 25108 8929 36061 59542
+43017 11366 48821 18510 43878 19941 58265 17470 64841 19363 41341
+60642 8497 25873 64063 40933 5643 45681 16380 44073 19289 46928 15605
+64453 1329 53481 33729 19338 48541 8257 27933 60202 12587 57637 27299
+62976 2522 23701 48834 34544 53 23321 63067 26705 5490 48875 25924 729
+32080 41690 7970 59045 9819 56595 27693 41306 597 51472 38436 4645
+42891 21042 52557 18516 60210 880 45235 16276 40435 19878 47284 16971
+31850 63370 24527 37256 31136 12207 33480 62808 22876 51799 32635
+10398 53224 378 60640 33854 23960 47080 17890 42098 14827 48626 38905
+5531 43641 30095 3498 62644 12592 58255 38473 19791 43245 28548 2669
+56133 14835 59797 25732 49500 6231 30374 54742 660 60374 11400 33619
+19622 32181 61451 6949 30288 42521 5528 44203 16379 40475 21069 43106
+17488 39737 25423 48180 22538 59108 20411 56958 29415 4455 35247 56303
+3002 62955 11667 52841 7493 64395 31739 4611 62241 24887 47435 16314
+56659 9074 63440 1017 52494 23804 8083 58030 28457 36724 22556 40487
+31111 57487 14818 33420 48989 8458 45772 407 37695 21279 40430 17854
+44502 1856 40857 56793 28653 65331 16455 58340 24616 37576 21121 53170
+25289 62414 19495 30442 60072 8782 47992 1378 31128 50796 14653 47932
+12515 52416 45660 16797 38065 20623 64391 15044 31618 53084 4309 49693
+30646 37390 27596 50452 16643 52401 36325 62847 5080 56119 13526 63529
+16105 44883 31319 52263 8064 65413 41442 18260 31222 54344 3610 41167
+23590 39257 22100 43646 20389 38607 27849 44077 22122 50340 34135 7427
+60906 11030 34915 63434 22620 14104 31512 40174 26049 64232 5520 53447
+30002 36900 10649 52088 4178 23353 54178 35593 747 20915 56351 28953
+39214 1793 59626 10707 52576 32723 25991 41273 9621 54513 24334 34902
+46388 17558 38929 21474 43513 15419 38015 58346 17050 61241 29659
+46711 16410 37730 54990 14531 60659 37426 55593 13643 47293 26326
+39677 15382 51995 20473 59402 25713 10559 55218 14011 59181 8040 38802
+32917 22280 36105 62583 10639 58249 29004 51542 238 38926 10173 58571
+3282 60823 40274 8733 43783 2494 28110 64969 22046 43584 27654 9712
+64311 2285 55813 29472 52070 2880 25921 56646 12192 58615 35048 22288
+41642 31572 1546 60726 13767 52553 34115 24305 50866 32500 11592 35807
+65186 15791 36974 27087 41030 24740 64159 43051 13007 38472 25314
+48376 13508 52074 28640 62540 1191 54223 31787 64754 2612 60069 12345
+40580 1420 42634 12030 47661 23947 45684 14607 43965 29266 47145 19656
+42815 17752 50398 36421 13979 41307 6297 50766 28351 45496 19924 43345
+17311 33388 47091 15238 43626 9510 50930 739 45210 10468 37278 54425
+15705 42124 19434 63733 24292 58879 11887 52987 32353 60557 19540
+10905 45895 2795 40614 12041 43478 1220 63593 10095 46649 3083 36840
+50988 17169 52738 22307 63234 18325 35423 57163 3925 62367 27623 31919
+58742 1126 52768 25674 34722 45510 19375 40331 16275 57216 1331 60379
+12044 44816 25461 9291 18906 45567 23943 41265 27034 54019 9033 61586
+20634 37483 32224 1601 51520 38107 21199 45628 16323 51816 2287 61438
+6739 57419 12724 52933 5648 40359 11724 58955 28942 37655 27179 49868
+395 32471 55002 3642 57516 9152 28914 46431 23101 3021 49580 25502
+38316 28996 46031 10335 43833 29713 48928 23100 9102 61495 24956 36809
+27959 39199 7921 51182 17867 58736 30470 2436 63958 11744 53229 443
+54850 7191 56169 31271 5239 44942 11029 53279 8057 56404 2213 30033
+43477 21589 10529 22682 50756 35020 2554 62905 31911 4074 44613 17147
+36841 49998 21932 45498 19545 31080 48250 13406 57498 8668 30246 46124
+22750 5900 35257 55752 22216 45382 19441 47183 29930 16458 54672 18321
+57787 36087 6125 48258 13982 39029 50787 16228 44070 35789 6521 21703
+64652 36364 20741 41911 16284 49843 6965 53991 14636 48889 26413 44773
+5271 63249 10385 37962 1403 47609 19843 31995 50684 10169 58818 7597
+51371 4346 28376 55504 1747 58113 18072 65463 33980 9265 35505 47240
+24894 8170 28716 45695 23258 52715 18986 63556 28021 54445 21226 64632
+8138 59299 25404 6298 33323 59714 2273 56585 9591 30299 57966 21754
+60884 35191 2820 34047 54133 7519 39942 61474 3533 55859 18749 65132
+26448 55063 19885 63473 28925 2095 61513 26989 50742 10588 43751 5624
+42568 28218 7498 24318 47543 35197 25644 53475 21661 48311 18797 51290
+28667 38949 22712 57049 32234 10329 42157 4329 44152 12269 54427 6904
+29217 42400 32716 9306 49828 18761 42813 30428 8732 56727 2182 62032
+12521 44927 24688 42689 22011 41801 4751 61079 38318 55459 34668 10220
+49321 2714 38549 29111 36345 3988 56797 16557 58565 27671 7008 62165
+10832 58129 30040 46789 18332 41045 26286 46325 21065 61733 24796
+43192 16343 47062 4044 43823 13541 57916 38124 17985 44182 20306 37608
+52124 14499 40569 61973 16479 55227 6952 63095 16229 57705 19619 62152
+12315 35897 49970 15391 53221 5484 56034 21223 60723 14898 45643 5046
+39640 49880 19824 42940 25555 41516 18897 46701 34590 11541 51827
+26380 39816 21401 33473 41099 24288 62033 6960 53734 34067 64665 5747
+23875 54073 18417 37594 57621 12885 63873 6140 32094 61353 1439 34460
+63028 5212 53736 35255 24816 50410 2204 41813 64688 25540 11194 49715
+6221 56945 35942 7304 50277 25670 38517 10730 50580 19787 34404 58567
+3975 22573 57446 28278 12350 59256 43316 28051 8360 54827 254 63459
+26981 37168 23846 59079 33368 7658 36073 49658 18907 42838 26350 61627
+13636 53082 3650 39124 21007 43254 32541 22460 34922 45329 17404 41905
+12122 44691 3207 27051 49789 22445 11749 58526 32581 51386 16849 37451
+5774 43406 32263 8859 36428 2173 32108 42017 20104 39231 53387 15081
+36708 23668 39275 27905 45474 1670 43742 11231 26755 64764 14841 24829
+59423 27364 11996 37152 25381 45748 4948 38718 12418 41969 5990 46375
+22021 39076 6605 34814 57878 18499 54910 15595 62694 31436 54463 4225
+63089 9328 30339 61476 5326 59460 34270 14883 49602 6783 40839 16183
+61679 21060 58625 34269 28458 39847 24233 60474 16483 53496 23180 6541
+47014 14167 60604 38961 17786 41879 21700 50694 5688 64769 18017 55749
+15433 53138 30729 22244 492 28343 61839 21388 59473 17283 52798 18860
+48118 23693 49514 12690 33679 44855 20087 43457 26823 7820 34284 54454
+14057 64157 119 37078 9555 49026 2211 53763 22934 62379 18977 52770
+24346 8131 47760 12981 61478 30049 1651 59298 32619 12353 31751 42134
+22364 32882 39817 2587 50216 6291 33037 57128 2951 40810 29664 46275
+13473 44565 3306 36272 29398 62602 21576 10693 55396 6386 59568 9990
+62514 29839 16347 65024 35824 14258 59786 3825 64384 10371 49818 15856
+46023 27841 3454 39967 30467 45362 14218 49551 7090 22188 41147 26940
+48613 14751 37439 27651 51197 17955 43894 29063 3447 61836 14530 56442
+32431 13656 39602 59087 18759 40911 28643 14796 61972 35155 742 63722
+32996 23769 61645 9178 30173 44566 35430 7411 33764 53671 23506 13762
+38233 50691 18731 45603 29972 11116 48157 2539 38996 11734 62342 16382
+30892 57596 6662 53613 21191 43794 18363 60231 26348 55828 2402 62914
+11023 57426 8454 62266 26359 52379 21182 39118 54865 6563 61007 38668
+19209 44869 4323 61930 13428 57236 15524 55466 25172 60692 28664 52459
+16640 49144 381 28207 62581 10242 55138 5598 61877 15965 54441 19062
+55830 40843 8610 48765 37944 5262 46189 30583 54664 13047 34184 58264
+21609 60699 24730 56413 30781 52284 13156 48317 29978 3595 37666 26942
+50451 904 46303 21020 41458 18837 49226 37425 17655 42251 26998 8341
+56167 23829 65160 29833 53427 794 48458 25391 9212 50150 2866 46931
+10695 44646 1979 64838 37644 21135 54524 4600 28159 51859 7794 58442
+29532 36860 11113 49136 3281 32236 37119 7743 49851 32041 46596 6288
+37640 12480 44293 5198 64606 10714 41701 5962 38871 63276 14179 55959
+951 35676 64840 22745 4650 47978 33868 23721 50919 32327 15069 65492
+33632 8583 29446 45745 4966 40982 64752 33138 53075 7117 49172 25014
+36866 6460 44197 56874 1151 59965 13058 52507 28604 37258 25926 46489
+16554 31337 63844 8199 23865 62299 19849 40831 57427 12466 25137 46887
+34006 28404 37689 23173 49178 36004 4182 50097 28623 1441 48502 23178
+42900 32095 22273 35549 59132 9787 38199 58394 17666 55264 8559 61683
+27133 43671 33074 56127 2150 30328 55497 9994 59847 6720 40977 10855
+49069 23028 40362 28069 37333 7772 49039 30120 4005 33699 63109 1762
+53065 31210 19887 44388 15827 45954 3206 39999 26603 52544 15797 62500
+25838 46485 845 40584 62896 3795 31946 61485 9702 39531 57669 17924
+64772 19635 46659 24710 51356 580 34601 47115 12640 39969 5425 48783
+30633 8746 41535 24119 35762 48872 19268 50755 15717 47895 5092 60002
+9890 23532 42851 28309 2486 52575 14945 41839 26547 40262 20187 48447
+3778 46238 11414 43686 5910 61389 13051 57648 37371 19054 45161 25925
+50973 12219 48601 25473 38574 4802 22313 57738 31761 18816 53055 16534
+64113 1526 48291 28144 9021 50383 2987 47727 17021 9267 34360 59890
+18989 55627 24818 65058 9378 33039 39345 12811 59062 8015 56410 33543
+112 50654 14322 47737 30972 38312 2039 36453 11011 27176 45102 14954
+37790 55669 20237 63848 15724 55007 30452 40436 26575 51608 32642
+10910 35315 62699 19611 47288 26434 14696 53702 31328 19969 39736
+63138 13146 57784 15715 65308 19531 53262 22865 56594 24570 40205
+26869 45274 21432 51337 26074 2918 50666 32855 23626 48880 9920 39775
+59465 25630 11571 56768 17040 59779 27489 40873 17658 56629 39520
+15701 59908 30940 21360 2377 26385 40751 19361 55910 15828 65319 27208
+11206 37303 24734 48388 8073 64961 15056 55019 11443 59813 38138 18943
+47777 33691 341 52260 26113 7054 34712 51634 1063 65469 12812 56653
+2893 32373 21292 58937 34038 15078 57466 36683 7475 52337 12107 57063
+992 29882 44297 25224 12575 47479 21946 42711 29710 360 58506 10958
+19909 51414 39623 19260 42587 17316 46055 21080 65531 16538 58055 6398
+54494 20925 61310 18175 52818 23974 45072 12021 32014 42894 9582 59208
+6717 56557 27736 54873 14394 60188 1425 48627 11215 51714 19875 58153
+27400 10822 48683 14388 35467 53356 22510 4229 44497 30609 51876 4582
+41720 21606 60470 15521 27998 64617 22622 58510 17054 36916 63980
+14367 52235 5820 30966 40915 1009 38794 23225 36993 28850 33858 63648
+16170 57120 34755 24523 64412 9462 54378 639 59571 28972 37935 22949
+51463 18205 40125 21798 44741 29203 9077 50048 3420 40720 21310 42330
+30056 7400 63264 28800 51593 36228 464 60372 13286 41290 22980 42594
+20255 53898 37643 18364 43228 22939 40656 62760 25956 1255 44078 8034
+45816 21465 48612 16666 60888 30665 17841 45214 28690 13328 64090
+29434 57367 3713 61229 13327 54600 19522 59693 41309 8080 64260 31631
+5613 41916 26630 38918 22400 7444 58356 12827 3215 63311 27093 48352
+13558 42606 3773 38584 63548 88 42130 59920 7281 26804 43760 20531
+42575 4361 40682 10906 43280 2098 46253 11726 59912 244 57027 14743
+60738 30445 36980 8620 60020 16836 53105 27870 14746 44729 35246 7583
+39135 3515 47635 6478 50752 32545 1215 51743 36162 12179 56121 31801
+62851 10186 45156 5024 41824 20699 46176 30326 50839 14421 34333 44972
+21878 41576 1277 43446 28905 5150 54462 10784 59120 39051 15241 48986
+30595 61242 20464 40064 23770 43736 17974 40858 52947 13260 44088 8705
+53543 32758 17023 63431 25316 33856 40788 20442 51670 5392 63987 32778
+1648 60549 13375 50926 34241 23095 36024 62410 24684 8941 64330 3227
+56536 30175 52924 87 36731 30637 46644 11668 42278 976 44244 8838
+60193 15607 54819 36996 17564 49914 22376 48808 30340 8572 35054 47149
+22990 41799 21283 39620 5805 42728 17155 36471 52844 20648 45085 25194
+6199 34373 50214 23604 8552 34811 55471 12229 48449 8791 35980 44374
+3026 46073 11452 53946 116 29665 45915 18628 59649 12662 55327 33740
+64882 12325 56766 14351 51267 258 47831 11044 49208 7123 30635 47599
+22091 44389 34208 10387 65153 6858 34524 62900 13697 55679 4016 34666
+65504 22789 57081 16290 63691 892 58583 35163 16973 46122 12798 20238
+43351 26718 47342 4290 51803 10208 62107 5891 30356 63832 13812 57651
+4530 20632 53294 38860 17512 61713 33982 2526 36241 54169 5076 49567
+34660 3005 51651 22845 40840 11166 24521 44516 20975 42920 25082 46661
+4675 21803 51160 35708 17586 60737 11851 53121 204 62134 35178 23803
+45372 55455 14947 41332 720 57771 24584 56103 12857 33440 48209 23951
+13938 35484 48692 1932 51847 29271 55860 16695 59241 30754 64000 18517
+53608 20144 36622 29701 43608 9483 47513 17577 45718 25220 41971 3875
+37798 56367 1861 62285 28744 52754 23153 35829 58503 13688 24640 63295
+28528 7374 49567 15159 42324 17808 50344 27358 60653 13456 54456 3173
+58757 5913 62727 27150 3484 56186 12634 60958 18047 51320 24470 41841
+31816 17137 30112 64779 10229 42069 4542 44889 9446 52514 5559 60981
+30401 7420 64219 31404 24338 42532 4893 30185 41539 3135 53884 9358
+61392 23484 48578 16479 53526 37156 17145 41264 6512 65243 9692 47972
+4478 44268 34762 29251 50759 24240 8539 38281 25527 49957 14052 26576
+63472 19733 56123 25840 37701 29213 46493 5669 25805 65083 3598 41551
+13271 37979 64500 20827 5346 55678 12945 63345 27811 56113 11971 65366
+4951 28465 60666 1886 55602 29204 59739 16189 61843 42927 14190 28123
+63598 19295 30669 57059 17493 54830 25958 33602 41926 20666 57000 7968
+37685 28812 47260 20820 7399 26736 43708 3846 45648 19309 38497 25953
+41447 17845 58898 37324 18610 60681 12900 25019 50113 19812 53632
+24237 1146 46677 33834 23607 51281 10678 41909 6814 37938 19831 43475
+14931 52610 31314 2500 53965 33108 62653 10582 29458 58985 19224 31574
+38714 24525 49056 169 36323 28752 50015 35507 8540 27916 51100 12484
+25745 57314 27767 13906 44024 11316 63645 21833 36060 60339 6274 55463
+37394 14711 51632 5472 62756 12387 39161 57567 28504 2226 49464 22998
+42862 19061 46457 14504 51306 17364 34140 24904 44143 18544 50844
+33896 9943 36486 50096 22535 8580 57366 32591 54960 11987 60882 34705
+8247 25648 49201 34478 8713 27702 48686 6684 32333 49826 7603 24612
+55051 22193 64408 4804 54591 13250 62889 31339 18487 46908 21051 44074
+13268 63769 9172 22175 44282 36520 10010 48136 21883 35370 54603 5850
+58067 35697 598 34317 47710 22230 40188 19751 41789 16623 54205 38091
+17257 46829 30587 36448 9445 64309 2145 56158 44305 6004 35232 53617
+19270 55794 14602 59768 16341 49024 33915 19972 47681 37214 663 58290
+19636 62219 47420 12681 59411 18755 45366 28931 13071 33638 41842 8371
+29094 57351 20386 52505 25249 38560 15317 54417 17781 49230 12215
+21724 43398 62197 14854 57173 5740 60551 38055 3809 49619 29996 10129
+64016 2837 22810 57379 39582 16109 53864 24321 59879 2046 25883 51853
+38504 17345 44336 3842 37562 15447 45757 21649 51081 37807 18212 42107
+15491 46595 9073 38736 1081 25816 54094 36071 2049 33913 51688 4772
+42341 31507 6928 63031 9926 51645 23115 33147 62125 2120 24961 60641
+31754 53317 17812 61335 32230 55173 10448 62771 4773 53655 28606 1871
+45615 6131 39529 56553 2674 44923 9684 41014 57313 26557 7945 60235
+15847 47064 25415 48940 12631 53618 25280 47510 8944 39910 60178 35890
+7051 22059 49770 35674 8223 34290 56956 14925 59746 17516 40062 56148
+11735 21812 64783 30582 59276 5139 46987 36749 8966 35199 62310 18934
+38159 25758 53293 8815 20277 47132 33451 1685 64831 30007 38067 18239
+52810 26650 10091 47055 33937 13134 56845 4860 59305 27664 39723 5866
+60177 9497 48706 5069 61272 30869 20415 65125 27060 6021 59650 29182
+40764 4172 22228 46137 24342 14747 62476 37459 1155 21263 54800 42008
+14611 38886 58057 17610 63698 39261 1772 42306 12320 39171 20159 46591
+35343 8123 55355 10952 41428 5796 49295 27143 33748 55656 3080 60964
+20179 33297 58747 1890 29575 46645 23440 11368 51284 29698 9551 63798
+7803 52351 24223 49077 10542 28454 63558 23561 4260 58120 22335 39501
+33622 12851 22880 58439 25233 1620 47117 27110 37661 22831 41686 28023
+1949 56986 10148 22906 50765 36125 9683 33444 20999 38731 28005 49576
+6153 36426 55976 2450 62185 26170 46709 4314 45145 35105 2899 58070
+32740 26464 61023 1167 58927 36066 5411 30909 42214 20098 44669 33088
+12337 45231 16154 36744 51488 19346 42080 50584 12746 29812 48021
+11176 44105 18433 33064 45661 12080 29206 59669 24382 54179 18913
+59085 2206 40892 32395 7457 57785 10347 63822 35132 24198 50767 30918
+47560 7270 59186 23202 43884 16008 62228 14302 58831 23831 38112 28578
+39828 4013 45191 13395 49866 38485 5223 44827 11757 42428 27688 7783
+24445 42822 22240 44229 20145 36460 62049 15499 51832 17031 31937
+37561 27246 60408 31500 16546 48142 35547 28236 39144 1584 57833 20409
+61267 34425 6184 29858 64974 22508 10970 24873 57217 40402 3134 64568
+25228 48279 1904 44805 8708 52010 29456 7156 33537 47174 2382 43368
+15995 41704 20016 63942 21921 51699 3931 32285 58052 1414 40542 29390
+58342 25634 12803 45206 26455 9211 58764 32986 486 34858 60070 19276
+63141 25078 38430 29517 36492 8536 49870 32730 28411 36157 13817 53699
+35836 8074 47163 2710 45325 35618 15208 52760 18795 64634 35920 6715
+56923 32233 44463 12362 58587 40468 24573 3804 62801 29101 2505 45518
+13828 31370 58885 18850 53727 23217 60954 520 27418 43557 22382 51511
+19383 61191 34466 788 50371 14791 46785 26767 51198 5497 41179 25422
+64312 16589 37820 62332 17363 55424 24493 37930 32603 13980 60383 36
+34324 50401 7385 39943 48759 15659 44891 7210 53310 29530 48421 15844
+51088 37101 13301 62742 3142 54550 8037 63265 35903 17123 34899 61531
+13881 25121 54977 43119 2060 51096 8508 34258 65373 18190 40221 30874
+14642 52948 17734 63200 11695 27817 50070 12408 45739 7217 39761 31302
+16790 51878 26111 48074 2487 53637 9600 28087 54286 22392 59335 4944
+32097 57859 8248 33154 62110 494 34588 61176 4909 38974 57014 6526
+62587 36415 5 41357 10428 48206 34389 25547 61098 12796 52314 31649
+44599 20333 3690 56207 11562 65228 19021 41087 13106 51002 8043 47398
+29194 39087 9463 48399 1813 58032 14655 65379 24360 54667 32030 17150
+57609 15588 63229 1358 54207 36358 59573 2823 56531 11314 51573 8311
+32153 40851 25517 63943 7765 58037 12386 36465 4750 52539 11706 62287
+5375 54560 31952 15274 45209 2935 28142 56101 40783 3903 50892 31977
+48911 14656 28973 54593 18423 41611 15730 53418 35581 26202 42475
+16163 61568 41366 18685 52787 22357 54779 13110 49760 335 31260 39956
+24478 47302 14943 44665 16813 50282 4296 35503 53943 19069 56902 39790
+15251 50650 23299 45514 7417 43456 3983 53600 9791 55353 15148 65380
+21678 56607 1627 63998 43189 26411 11722 58768 16351 54477 17245 61712
+31388 1703 44837 10390 51272 28033 40241 3472 22995 52349 28286 13415
+60197 35436 15918 50189 25620 35670 52308 5447 34773 44559 6381 48034
+14559 34012 57892 13988 65269 2973 38605 31497 16846 59588 23900 40732
+32462 10725 35997 60300 15935 49138 11934 43302 3704 26882 43887 6354
+45580 2100 57080 42860 18196 30979 43930 19314 58530 33258 10994 52501
+27424 61863 19747 41445 3553 63372 8895 30911 43200 21553 48050 18294
+45375 15010 50156 25862 53336 3880 32582 45896 5965 27152 60330 22225
+56732 25327 267 46241 9005 59589 34514 6786 40550 24134 54692 43086
+16958 61922 22879 52937 15770 47584 35251 8291 63643 13396 59534 23210
+34994 64757 1632 41367 13190 47694 17631 40228 30640 14558 38332 51709
+17024 30951 50411 14006 22351 47631 27517 16373 53125 21252 64886
+30119 8086 53463 20392 46914 22194 542 25967 49798 30100 41624 21091
+36903 2930 49192 27390 34748 64307 24423 921 50495 32228 18751 53018
+22026 49300 34421 10230 40327 6423 51010 22738 39587 30561 48750 21039
+9823 31524 49812 15342 39782 27832 58211 13342 55552 3319 28944 46179
+21760 43876 20365 64208 23027 39834 21084 44194 18636 37044 63858
+11494 38984 50284 10057 24396 58751 16890 44176 1371 61519 37328 6613
+43804 9841 60568 31003 13129 65355 2851 53654 31059 4811 60155 11278
+38687 5981 58616 25700 34415 53843 7360 60063 10112 54715 32741 64651
+11898 31242 62597 7717 49160 3216 28442 43898 5935 63539 13718 55182
+27387 39521 18436 45339 20803 47444 3100 43618 12240 45990 19943 4030
+50471 33701 28255 39693 25015 43486 9394 46915 33930 25675 60554 16137
+43748 19670 64097 35827 7512 33628 50604 5814 47879 31525 8148 61889
+10366 23030 60525 26407 11420 57532 32786 26287 50972 7111 48822 34928
+25751 56999 9313 47570 36050 11715 58025 4435 65051 19596 31212 38320
+7956 56775 19840 59551 33179 14361 61412 31594 48398 23154 8681 35801
+62526 12437 53788 2484 22822 61326 31492 543 36777 9866 57110 27825
+38397 24106 60621 6668 57385 10993 39317 30883 58801 5876 44586 12960
+39767 57952 15550 64550 37386 11725 43971 14365 37226 55249 20477
+49977 15390 44825 27238 51334 824 32104 7535 38506 33793 1864 28839
+64893 4864 57418 20772 39565 28301 37312 7464 50115 16744 46801 26510
+62741 23478 55788 1986 65332 35758 6215 24586 58332 9293 35702 63893
+32503 11012 55495 38092 8993 44055 5079 46206 27283 37534 4388 28964
+62458 33043 55034 9895 60837 8171 57334 28221 54393 21905 61018 4080
+20985 40632 56201 16742 60556 36639 11825 43384 5568 27876 59253 19580
+61554 29362 3000 55917 8718 23637 41113 64083 16507 37359 26387 65303
+940 34856 46985 17525 50421 37970 14339 53325 62 49547 10603 45223
+2378 50939 12295 58388 7579 26129 53011 23429 15942 62499 37381 13185
+41667 21006 51804 27724 12591 47958 22805 50671 34570 5446 51389 22405
+38183 33063 13425 49624 35213 24690 48807 28429 37396 15125 61203
+19400 46066 21217 42496 26878 5726 21951 48032 39588 17623 42414 21680
+36608 61980 17510 48162 24777 37418 32547 15754 50280 33148 983 62293
+26570 38820 18677 52876 23762 39540 61957 21565 54903 1229 63762 7026
+29018 57638 19399 53806 5606 34731 47914 822 49830 10710 54167 20717
+63228 17945 43546 21577 57339 37975 19436 54608 41148 14805 46760
+30264 38946 3485 62621 12096 41462 30614 5250 45497 15379 51205 26924
+6339 52153 17901 48501 14327 53971 208 52914 28155 34405 45834 9052
+39553 49837 27983 9913 20310 64650 29041 49526 4846 45783 27463 35739
+43154 6285 46392 24691 49651 33324 21224 50609 12274 43724 16224 46474
+34186 24017 65173 114 27908 41392 21359 63765 27306 8176 49963 31777
+16616 53158 4539 62717 30594 9511 41510 24823 56401 3307 60751 20723
+35568 64172 22278 58744 14950 55845 40969 12947 44843 29453 50506 699
+46911 14417 58029 24603 39061 9981 52321 7039 38469 11505 46293 16789
+50123 28620 44743 20314 46541 25808 1325 52626 42178 4042 31728 58748
+24062 55025 16979 61510 14065 58300 39028 11335 42675 17309 46382
+23200 39661 33264 5728 37894 10462 39825 30708 54735 8975 27022 45524
+6001 26354 61949 20895 55632 35796 773 46013 14803 43538 34684 25856
+35929 58381 4941 34091 51066 6738 45986 12557 44526 24092 7490 63144
+31410 5169 61445 23816 39990 30576 55392 16022 59482 34847 23479 41903
+30227 47466 4960 44138 35059 214 29514 54783 5940 64059 9620 34336
+56332 20319 63592 624 24225 46656 29788 7947 56772 19098 63318 28686
+9792 57796 1740 64299 10419 45157 4183 40965 11480 52532 2243 61588
+30628 56296 34217 666 52216 13704 59395 25268 11299 53186 29558 8819
+56678 2433 64322 8173 58892 28685 36490 11373 59744 32532 7234 58190
+15330 10987 40928 17475 45717 14516 35192 48080 3701 40563 12709 58307
+13991 27363 59216 18115 38579 25247 45755 2313 41131 11554 51537 644
+26894 47252 4232 28252 51123 1278 64894 16561 45734 20105 36495 59215
+16167 55511 23527 62977 1717 33657 64066 21908 39094 27739 42540 21695
+43605 13400 63398 2873 24634 50994 22279 899 56205 37494 51367 3881
+41623 13707 57544 34151 9035 64464 12996 54882 17310 57881 13638 65383
+5103 34857 59981 963 55560 27443 4082 50489 19900 35348 56390 11624
+52221 2774 48187 29860 36687 1283 46747 25955 41199 19125 48961 27570
+60204 5242 36418 29047 39165 13580 45965 10766 47807 4656 42340 30978
+18328 51400 23184 10162 34080 61539 19347 53136 30538 3353 61970 32142
+19250 44841 20986 53546 29103 41390 9687 60481 3258 54816 7408 59127
+39644 23459 14616 61762 17873 40795 15137 33351 39382 1212 49261 31914
+16685 56020 5945 64100 29584 1722 52730 18708 62793 23723 56603 19491
+49743 15731 37308 58275 14785 32762 47762 3180 41549 10868 47217 24219
+33906 56588 9108 63821 13855 46959 17992 45238 14723 29801 60949 19922
+54899 18502 59170 29403 40301 19366 49174 35459 11274 58774 6539 25746
+42432 29662 9175 64672 740 55575 13795 61068 17086 56818 25809 48518
+17878 45313 35966 22055 45881 4075 42168 13641 39421 58568 16608 62344
+40326 11964 43052 866 46221 22714 42362 32302 17097 52258 32665 56771
+16124 65400 29249 38580 13440 50485 8122 19801 60794 30293 44170 4606
+54455 38003 1289 40399 51042 18714 46531 21640 44031 14444 51941 17099
+54293 4528 48513 27334 34554 47410 55903 6567 60658 34161 24098 56814
+15752 62395 20573 43050 23552 50323 37746 8667 31735 61494 5477 34517
+55940 23146 60778 18916 34323 65139 17533 39708 61264 13061 37309
+24040 53404 7899 55906 23935 1096 33056 40334 9709 37336 28573 43287
+13882 44801 2541 61699 7207 56957 25402 47945 18541 40076 55275 13821
+65156 41588 23580 13162 33697 58850 18875 52198 25443 15878 47840
+21040 44700 25673 37257 8254 40459 23270 47860 14565 28556 45347 18747
+37856 54317 29418 8486 48947 15836 42741 24501 37635 20099 54389 18572
+60877 21588 57471 13035 55740 2311 39220 16094 53102 18128 64636 7793
+57880 23631 54209 33167 25817 52057 9836 63000 3417 35689 54754 24750
+11995 42763 5897 40714 48570 17772 36658 56606 322 61084 25026 4661
+58071 33601 23043 39989 15909 37245 31908 11807 49432 34422 28488
+51121 2661 63621 9717 51478 24785 41056 7315 50923 24515 45455 15111
+37647 59348 15829 42643 13644 44950 165 42399 6254 60157 33561 2310
+41745 64857 16088 54519 29697 57741 14155 64426 7116 28673 50249 21357
+52908 348 60453 27329 55443 2079 39713 33385 3801 38890 10359 51382
+1660 57067 9338 28644 46655 18023 36947 63002 3929 54053 27112 39295
+33454 21930 41010 28657 46408 9853 42829 7894 59846 30337 2696 58143
+26561 60887 17807 55184 32700 10353 45337 3435 26396 54804 33623 59095
+14250 54055 7669 38241 47880 26162 8365 23546 44262 26064 6913 57278
+33222 23700 36225 46652 26351 9431 21222 49600 31831 19601 65242 17033
+32193 58464 9470 38463 30309 48566 6363 41822 23615 42669 15910 64526
+565 29086 17993 46670 31259 2938 49853 9811 39266 30774 51465 7909
+65450 2569 21969 56674 41717 15608 52929 28681 10058 46498 6193 31057
+44241 9667 53964 6919 21696 32232 56265 10909 29557 43601 18421 49835
+29048 62109 20757 53452 19247 59801 7615 57475 25317 50877 16763 40791
+12491 37350 4970 57751 30400 6967 36696 31885 6038 60237 36202 7541
+26157 44251 1374 32942 59758 4090 55772 30187 1699 62962 28308 53117
+2620 30023 56315 39367 10666 64176 6095 20969 61284 36088 25534 62030
+6531 57689 10739 62503 5290 42096 11170 39470 6264 47636 34311 23400
+63280 32069 11440 47045 22613 43251 31640 2750 36753 8968 60493 21417
+33582 38910 27216 60000 6627 38362 56255 21195 64551 27634 11816 59658
+6441 30900 40559 15691 48364 36254 17963 52018 14938 63220 27950 53372
+19478 64423 4763 56687 8389 37319 25882 42713 30919 18278 55607 14847
+64569 36596 2452 28704 53769 6945 32549 48735 4297 51745 27656 61357
+16842 47957 12870 23445 52745 29032 7957 38939 33726 6626 25465 44034
+20109 48617 38228 3893 41791 12270 40461 32564 7983 31717 46676 17456
+52288 27729 62475 32595 23223 33837 41610 25655 65071 2800 54451 32579
+19155 43604 20777 47026 7141 51748 10325 59165 3213 33254 65296 22378
+52374 34676 12196 50746 32206 8643 33805 50166 5663 25284 53149 35527
+29158 47082 20876 6059 24562 44424 31067 63013 20807 3099 60628 31194
+49255 1138 36884 51020 16444 44934 3322 64175 14098 55541 32292 63064
+35183 7088 46953 12485 45389 5393 36367 27827 61404 3466 25126 57935
+20069 60855 12561 51430 35917 22697 43597 62753 35866 14082 58883
+36343 21141 52661 394 27718 45383 15277 33335 46197 28115 3999 48556
+21251 39331 64579 15013 36950 58023 16173 48468 35642 29109 57678
+41907 3149 49001 39907 4669 63616 11648 46390 8504 42411 3956 44085
+12918 46617 35716 5328 34361 56018 22851 62703 20126 51224 10990 44413
+26552 58232 20550 48006 17707 45612 29840 53544 11912 62164 38590
+20498 42559 18330 38246 49971 15180 45566 18769 60410 41463 7086 22505
+52389 23845 48413 32997 10171 46947 2399 30406 50730 22590 40785 17081
+45267 20784 53511 23979 65104 28242 10008 45276 7248 50419 37382 1132
+52277 16750 55169 28035 62751 19283 41203 151 56828 8494 47728 14193
+44371 28721 2633 46052 10401 36968 51215 20327 44357 14811 50783 33243
+8075 64262 31197 1073 47521 8621 42948 2300 47893 13986 44303 20167
+46362 16254 60124 6096 57559 37095 3578 47571 30143 17709 33546 60278
+19143 44576 12445 26153 64981 35324 11008 30650 53316 22341 38721
+63321 9630 48575 24651 51781 17827 62979 40427 2508 52593 10001 24929
+54341 22667 62281 20405 48137 23966 64645 13371 58840 6373 48653 11983
+53673 5502 61118 13225 51729 15603 31583 41012 8264 51131 12799 60839
+15285 57484 24086 37526 27033 51317 20292 36514 1993 32284 15596 62790
+36812 16875 47953 19368 38688 29732 62035 19802 8442 57576 13876 64477
+31548 52687 19869 3856 26974 50458 39739 15537 53527 19908 62859 18273
+31939 59782 11068 49675 20541 42063 5885 44787 1841 24560 60021 22083
+56321 24497 60629 20079 52558 15023 50101 34283 10067 47160 1898 39343
+31642 7626 53860 9968 24693 4671 54311 26338 8530 64137 25550 34147
+60393 18247 38434 56177 10216 63032 32761 12830 59614 183 24403 50052
+27402 3378 52870 25333 2042 50322 9396 20201 63045 32921 17012 51744
+34134 26716 35700 56233 15868 61304 25789 54896 31654 18820 49931
+29524 8875 45289 1422 41933 27149 61283 16162 50226 1801 42208 11200
+52058 2650 63676 21524 37262 31340 6529 54709 10722 61145 6973 32110
+56761 5725 37693 11552 24901 62355 36455 3687 42807 16754 53468 39779
+15492 54803 38168 17544 44222 803 51574 30750 59398 3392 42982 13843
+37248 59155 18794 54787 26746 15312 61756 12795 39881 5920 42536 11865
+50445 29761 48841 17612 42681 22490 53233 18994 61208 34617 25449
+57723 21895 1350 54993 26712 63412 4210 58912 29567 14176 54181 35260
+26316 56934 17432 59735 26732 39230 30511 62411 730 52854 22306 48391
+13502 26477 62000 34827 8665 57159 41778 5209 49890 22071 58556 36168
+8905 22652 57714 39773 7351 45270 3449 31673 36815 21291 60968 448
+45804 11135 32096 59071 27666 34326 61077 15047 43810 5722 56440 10616
+53199 4639 43389 24918 37981 20892 42730 22169 47488 18286 46004 6906
+38756 56447 16870 61772 25095 38294 1814 45492 29620 4324 63441 11350
+39699 7422 53706 28158 55844 42104 4743 24926 54918 1029 65112 10882
+48494 2335 40189 51581 23396 41192 1643 48927 12356 61051 32620 55205
+9337 28265 45025 6244 41947 10849 46859 4677 39056 27328 34632 58035
+11895 53241 17198 57537 40018 10500 42849 2729 39090 10893 43337 35
+39972 21086 64931 29274 36502 26859 62432 16683 57695 29837 44999
+51801 33253 16807 48056 29375 40842 5331 47605 10963 54504 6088 25596
+42562 17816 50771 36931 19505 54913 33643 7392 61826 40509 14137 42890
+63909 23401 34791 46168 26264 13481 58552 23730 9858 59959 2325 22778
+48943 29956 10476 38471 422 64729 14606 60567 23694 35259 54490 11708
+47249 4068 37915 23655 62921 15569 55918 35561 24244 39898 5391 49775
+16821 46854 22675 40365 26231 51316 17747 36338 27016 58765 30532
+48430 17625 32162 57005 12810 63007 1360 26185 59585 23404 8724 64755
+12686 56140 28266 7805 34354 48492 18183 51974 495 31471 41560 4253
+34118 45921 21585 43915 23843 59730 20450 56147 36054 6914 25254 58598
+12695 65399 1562 40425 10886 50194 5273 30812 47705 29411 39378 9296
+34441 45806 18938 39904 49454 6813 43964 12940 38674 29399 36289 6317
+55238 9580 24437 41846 31957 8901 32664 41638 51661 10643 21986 46271
+25966 11876 63289 13816 39374 975 51358 29234 44300 2162 25148 63957
+18491 55877 13936 58624 5243 40986 31463 19228 56721 20839 37653 12605
+45094 1595 49196 27201 37406 17552 44721 26779 39452 19856 55702 14214
+63710 519 57310 10060 36802 30294 59737 24444 876 47583 28757 5721
+52587 32013 17332 54355 42343 19027 49482 22728 61559 16350 47242 6768
+21672 57593 39650 13846 45763 29198 44281 15673 56575 21971 32303 6463
+59374 33268 25606 39332 6895 46484 16613 36986 57998 13648 61938 32977
+56574 21601 55211 19420 63285 222 31073 40828 25158 37808 29737 15107
+51917 27194 50497 18645 53379 26482 61776 12675 44334 5203 54767 11239
+52373 6033 48389 34560 2410 20736 12239 65068 38901 1534 57503 18976
+53740 23549 42347 21660 36747 62006 1318 55209 7761 26910 45305 11645
+41676 47965 17134 31809 59355 9001 32945 11091 60085 4927 55000 36153
+16 35120 45361 20202 50575 39833 6803 37035 58329 17654 52835 21492
+41896 3609 46779 13557 31456 64542 22338 33011 54124 8048 34386 45208
+28608 8347 60730 15947 54297 25279 59133 14081 63381 694 43294 12071
+64987 2924 52190 10141 44079 256 54018 9051 44778 21960 36914 29875
+47999 5422 33866 49696 32155 46451 15264 38836 63615 21958 10319 61676
+29062 43729 14955 63931 23913 56313 8382 58491 3480 50181 10488 45371
+1976 22783 63338 34873 4460 38172 26957 49047 20734 44953 18062 63914
+37491 7273 62520 18258 56941 25302 11133 55826 2110 24909 61693 22439
+55437 4454 61359 11595 49950 22640 36671 58477 13132 56025 27422 65449
+1969 23128 39741 59667 385 54863 30905 37017 25104 48338 31330 16631
+61741 19039 55346 34470 10138 49988 28897 41867 25627 49402 15600
+53067 37051 8103 49836 4423 63608 18736 55012 30253 8545 51742 32098
+1399 62906 11352 50368 2925 45128 34989 28879 39407 25272 64225 3478
+21670 44648 34880 11065 58566 42052 14629 64919 36878 6027 31628 56596
+1249 45228 13265 43740 23418 64254 34394 9384 27720 60179 22263 7696
+35300 51117 28426 12537 62873 36137 17381 52208 15493 55539 33944
+23687 65007 489 22355 49790 25020 2161 27773 40718 7978 43335 14736
+46187 17740 62128 3741 54871 7741 64582 33228 5029 35078 63461 7450
+41293 21889 55403 17587 47946 19085 43111 22265 42128 13577 24093
+60263 40830 45863 6327 31405 50508 15067 44337 12603 63322 3110 52029
+11679 28540 47440 19212 38226 64265 4468 52524 15395 30102 55689 5337
+36745 21431 56563 42450 15735 39103 12246 47291 28316 64256 5737 55371
+11050 30717 65194 23812 3342 40876 30394 48218 11129 58105 27467 51479
+5746 39339 14759 59595 19049 49566 26180 4565 58409 19940 33875 46113
+10503 41565 3261 44590 30432 51914 18889 48076 23510 45264 21626 40983
+19262 63739 14917 39811 26305 59107 7633 51994 13597 41091 61043 20496
+3038 25823 58417 5026 27153 52756 41614 24792 5692 58114 33515 9015
+49101 20603 40498 28734 36449 25933 64839 28629 33555 53342 10293
+47207 28635 50865 15992 34282 59137 7914 53771 33205 15336 49134 13009
+44029 2788 50315 38184 21838 44908 33098 12033 46612 16615 42358 20295
+45390 18474 64811 3442 28934 48103 5398 43906 16796 36709 53343 7608
+27958 44123 14623 50559 3765 56427 8261 59876 34652 5923 47690 14109
+51127 27386 37329 1312 47472 11716 33053 59804 3592 26991 62362 24057
+46432 22408 42469 13858 39695 65187 19956 58588 36545 18786 41943
+22918 60800 27196 11580 50614 7640 45665 15913 40440 55664 13624 63373
+31044 17690 33851 48520 9272 26168 60338 12368 38379 27558 34358 58688
+3802 40641 12768 50942 30171 49246 3580 41057 61725 23542 4561 58368
+42398 19 50851 30486 8959 43151 2740 59815 9848 29507 51753 39515 8689
+43619 31199 52500 15956 60894 26672 54649 9616 51776 22894 47930 15825
+30996 43811 17922 59086 12260 29317 45809 15744 48972 4239 37105 28767
+60087 1068 57070 17321 63638 35712 8903 27249 19466 59391 21416 35401
+61661 6955 37787 19766 40218 22502 57629 34028 9198 60631 32207 16096
+44190 25557 62681 1654 37852 20092 51959 34318 887 30091 54422 22916
+61940 19081 51364 16055 31715 37931 25981 46856 15461 49601 28715
+62815 6495 25999 53783 35763 16278 33591 58803 25298 48478 719 43032
+10570 64132 35885 30236 50520 333 27766 65472 20444 56356 34548 8704
+27647 57496 5291 38737 10904 59475 7573 49275 34671 28074 50093 2270
+37942 31989 18970 58139 28213 9788 51461 30057 43048 17982 50219 37076
+1681 20106 55117 35378 15937 51304 26635 38122 1589 62386 13962 54638
+15115 38709 7290 47823 18016 44101 20002 55907 7659 62319 3628 29561
+43243 25186 434 52166 23975 40874 19923 60564 31414 6258 65197 14613
+57997 37776 3138 63853 27901 51483 195 41507 12602 52457 38466 20758
+61640 23543 55091 12449 29127 63498 36370 18292 58813 22945 45478
+19294 43440 15188 50195 24566 40872 32793 4404 61994 13157 56549 22715
+65498 7582 38658 29815 54033 16598 40567 14285 55931 5320 60165 24535
+3217 45424 9297 28339 51082 6517 48407 9509 33881 57901 18633 61939
+32552 51818 8727 28205 50175 5270 36556 55220 3032 22049 57778 40072
+18480 51621 21567 62631 15530 31114 53141 17113 57201 535 43467 17458
+52912 33390 9749 53524 38396 18664 33608 47603 14681 39679 63758 17959
+47473 22608 36107 44027 14494 33459 58836 20485 63826 5560 47797 32314
+3157 36133 30407 36818 6515 32222 58763 39277 916 49952 36082 24090
+55041 1960 59306 34610 25780 63297 9221 32701 37966 25908 48930 4088
+52755 29820 55999 41350 11195 49279 4169 27699 52392 24281 59152 13513
+44061 4729 45571 21185 40140 2931 49663 31176 8836 35955 22084 57914
+30841 8337 62535 25497 49348 7725 40744 2751 44125 8211 40091 54130
+13696 60832 1506 56831 9331 42226 13571 34368 44860 20239 8101 63694
+2167 41244 9777 30485 52620 23293 39271 17889 47496 13153 22936 55439
+35263 7098 50797 11341 23171 60599 36116 12986 33532 61634 25752 35168
+54381 22105 4735 60266 11929 55096 15548 65048 39448 3476 46154 23038
+36443 57054 8143 62814 11669 30958 60317 38388 9547 46494 31224 3721
+61114 13292 53151 30073 46697 5359 49291 23155 57255 13479 60350 3022
+39578 14685 33499 41958 23718 55458 13702 59906 39355 20455 61604 4570
+52630 35797 16304 48546 32241 51125 8362 27079 49689 35166 9069 30865
+60616 21788 47366 33014 10446 45990 14730 40386 4153 49193 41889 20495
+3163 48377 7069 40598 10798 65148 27498 37889 2847 63162 9961 56231
+21085 43972 24234 40699 14477 34998 50997 17354 45265 9786 43339 1102
+51174 26680 37056 11885 34162 49516 15448 37907 56937 14694 60008
+35253 21044 46776 4902 43097 24508 1989 21010 59243 37559 18457 45819
+11786 40162 28747 49749 33162 326 46385 8431 41976 4666 47499 9917
+35434 45876 25008 38525 21887 63519 14338 25940 46748 30127 11415
+64720 7077 24398 60529 4293 25603 53040 34387 11599 54315 5034 61561
+26219 3601 47223 13429 39200 12066 57104 23218 65134 15414 59574 27912
+46638 9274 22498 56798 26498 8646 48390 13562 40099 30324 6773 50028
+19777 52118 15228 53787 6636 39959 31542 12856 47501 262 23251 54426
+17941 33285 46296 9651 42709 864 50231 29484 64934 14335 58651 23819
+53936 12152 60038 20729 54342 42274 12460 49625 40299 16385 45486
+18046 65518 21881 53519 24254 59088 27759 3792 42355 22061 44545 19339
+32176 51885 21172 60076 1209 56728 38468 23793 45645 21668 54815 37595
+12536 60953 6645 53768 2435 59685 40395 9429 46825 24761 37697 29803
+43931 1900 46820 21270 49458 15090 53144 1305 29140 44603 33203 18380
+43812 20998 46693 6270 29630 54623 15899 63869 387 19365 45244 35802
+23330 47967 14415 26446 64421 18428 55898 39397 19290 45779 34594
+11009 22377 59047 35703 591 41771 34408 24809 32806 64323 25890 57798
+12381 51445 6028 37223 31872 8849 46234 11625 42543 27764 8650 58447
+26182 653 20740 40694 56463 13434 21024 58345 38222 14332 54795 6951
+26668 54128 1448 56551 19527 59854 32864 9124 54387 39238 26903 62309
+21446 52125 30069 6181 53562 32082 16040 46312 29384 38773 9249 59562
+5603 48577 27846 2022 61454 22994 57034 21572 64524 30896 8394 58398
+28446 53640 20963 61882 26197 4208 44441 30387 826 64873 28234 54564
+15324 52640 30683 47887 33844 4036 53815 24087 62021 15682 59577 7575
+20269 56215 29770 63656 17814 55722 23092 60962 26475 6340 62093 10486
+47131 5366 37013 59480 1555 55970 22466 40689 29400 54460 16381 33003
+44713 7362 27891 62544 19391 49013 11162 53644 37892 18696 57554 24112
+44515 16776 42319 8896 45150 1608 53068 19340 63896 37130 14414 41473
+62529 22223 33794 65509 17314 56837 13903 44065 2933 46081 23399 64738
+16150 59060 37199 18688 63124 43094 5773 39158 56994 15373 64337 17425
+56109 35498 8607 24898 51055 30430 6848 42027 26749 35156 46636 5801
+29195 64799 2666 28143 53002 4566 42126 11871 37196 6165 43127 12739
+36796 62450 17467 55878 7184 35572 61596 4235 38824 24756 50171 31918
+16725 52360 12897 59867 6306 27298 46114 20583 42505 22611 44001 18557
+32982 61968 14512 58112 3788 62778 13671 54475 24480 64236 3949 32588
+40777 20176 64601 12776 57233 38998 8308 62232 35377 24214 47841 10752
+43922 34718 30572 49419 25227 3861 53701 6205 40696 49330 2683 44226
+8279 29250 50100 6664 25830 65507 43458 9677 25323 61995 20266 54893
+6164 52199 10708 49588 1010 30977 40012 22596 64967 16267 54403 29240
+56526 17464 64455 33791 14858 44236 29679 62600 34268 5087 32748 53366
+24577 6043 43082 23795 35085 63047 20232 37633 27865 43438 11962 26384
+61300 24180 14200 50982 12753 42542 1281 36825 60672 12161 40263 57957
+23337 284 64735 33788 26832 53707 17639 58777 42567 12921 37677 5877
+46941 10950 38325 48432 15966 43933 40 40565 7624 47567 32799 16180
+54870 23940 41580 12434 37679 32262 7150 60326 10280 25681 65417 12951
+41305 1456 47151 26971 36094 50987 23688 12916 35781 44952 11670 39946
+1706 52456 32797 19005 54122 23268 57922 11922 31822 39484 13684 49028
+3009 45943 10461 37332 57177 18556 58982 35847 1078 38799 27264 45315
+16769 29227 42678 7689 50341 799 53972 29540 51130 23616 40661 12725
+43162 2964 30868 54579 6224 32881 3811 51375 8041 31776 41803 23852
+35784 60514 29149 12036 34608 50308 7792 26964 44828 14146 32204 61062
+25079 2087 37303 26288 39987 31191 15733 48863 34027 1857 35786 56407
+13830 63583 691 31718 58482 15780 34260 47582 14372 35682 59199 20511
+55123 27180 60678 20792 56385 32753 10226 45533 34181 27019 46308
+12138 30777 54265 7588 37067 10310 61453 4704 43675 19475 36475 65333
+3150 56628 9222 62373 11979 54576 5536 26265 41843 19332 43131 17383
+45790 30631 8331 37767 27263 50728 9860 47581 23741 51060 3190 24649
+48897 27305 905 55834 18335 61401 25748 6970 59787 11121 54915 34128
+28037 58906 12610 21137 57317 34649 23548 63082 17144 56510 35919 2434
+33295 19107 50781 32528 8796 31208 43332 22142 45826 18230 35783 61413
+14445 44955 2282 47959 35610 3822 25140 49731 1514 38411 53006 6918
+47279 11382 22798 59441 42112 1610 46594 29816 62143 2553 48878 12982
+44573 15577 64195 6665 52025 34831 868 46939 35399 5011 55933 23959
+57391 17235 26256 49149 22331 6853 51637 41928 19493 49221 3098 32278
+38119 6976 33468 20800 52716 28170 34252 57801 20060 4059 61383 32454
+56621 17904 54254 19755 64008 38627 10828 50109 16987 57094 3336 63238
+41546 20029 39504 48980 16804 43444 22261 56890 33985 10747 64517 4996
+33606 58486 3317 27279 50512 19660 43565 15101 48305 39299 2679 44505
+16569 51702 19694 63086 25256 35555 61331 17674 52407 29995 1972 50434
+10833 46898 23872 55095 6054 33398 58315 1833 64533 31723 19563 62696
+35927 6772 20706 56174 17070 61151 26626 51555 11919 44366 20750 60316
+42744 16457 38817 54025 732 62214 8762 21455 40861 56122 1602 25283
+40652 58006 3550 55193 9854 20730 49794 29676 60334 7867 54822 3832
+62250 19218 54328 27695 46472 18161 38836 23089 47998 17779 35952
+50977 7295 31486 61434 8743 29909 46183 1899 40476 10814 50254 1032
+26301 52490 23719 2992 63878 16493 57528 40446 17197 64425 21776 48128
+26212 40786 28167 49534 16116 32016 50386 26149 33132 36764 27748
+38037 30241 48740 1067 52313 29199 56168 5040 40443 58953 14795 55537
+19022 59717 30179 7226 37205 30995 61092 16390 53198 32874 13387 42551
+4168 37683 52877 22350 40954 20866 65221 15316 37290 30744 50974 27520
+11153 47929 23 42022 14308 44932 23737 58357 40772 4799 56171 27269
+63411 16089 56838 4375 30172 48452 9711 54888 25263 58226 31220 18290
+61140 40103 12360 45097 18098 30991 60257 18662 54575 41363 10029
+26572 65004 19157 52726 15233 40266 29070 59342 4831 50659 22630 40956
+18958 57876 30712 16429 63868 31864 17940 47791 8568 33576 44247 2501
+59431 37335 28177 12542 54452 16489 45010 11576 56817 23654 64182
+45606 9031 62661 2627 25474 50204 41294 22123 9498 26522 42624 13255
+44984 2459 27563 59662 6824 40291 25139 49610 21891 11199 56347 181
+31238 58017 6457 52007 9649 25115 44985 18834 41506 48697 15916 32182
+54876 7228 64319 28136 59246 8682 30408 64832 25726 41120 7581 45546
+3982 50581 8550 27102 43932 5816 64139 25089 38995 32557 21136 65479
+13187 50718 15776 40553 30761 15212 49235 34776 10432 26309 58667
+39048 4010 46940 35225 5909 33343 61971 24565 39387 9760 26831 58254
+22568 11778 48606 26243 34066 57693 5496 36489 30045 61251 10348 22309
+46262 28434 36647 51848 7062 42269 13661 48293 23103 45205 13189 43367
+6057 62992 10273 59381 4880 53451 10879 61622 4063 26072 57189 19190
+36844 50561 15035 34656 63423 18975 44419 23132 37715 64633 8401 48374
+36577 19855 49072 579 25417 49892 13221 44703 2597 57971 10919 62530
+135 55951 11242 38538 14595 52131 1547 56184 7590 64809 16863 57632
+34813 8902 25913 49154 19938 33331 46278 6550 42059 2662 39159 62533
+14400 46079 5642 42234 9715 38080 64316 21440 57931 28288 10012 48148
+2509 44200 8926 47493 1039 61897 7121 38103 59552 17663 53665 30079
+60456 5790 52341 10439 28466 48496 16808 45059 1847 42392 12819 38849
+62671 19557 44136 34077 6489 38006 10858 46980 8115 32941 57858 21974
+63147 4726 33505 39071 2467 30266 51268 37453 16378 44829 7307 32329
+57076 8780 25103 42263 11642 58687 2876 48438 13501 41413 50103 8025
+39150 59236 14511 37500 64251 14927 54198 32900 16995 61164 35050 7739
+62169 20965 50035 15640 43694 596 30794 40093 16735 35902 55354 13321
+27884 52615 31535 63126 4845 59324 24973 34076 46320 17832 36374 62576
+13300 30604 45555 28501 35726 50603 14184 34125 45753 20570 39175
+62799 2328 55436 27701 8168 60527 39465 18486 45598 35075 3737 33286
+53591 21485 36218 12273 54557 33933 27881 56985 22938 33839 58816
+20774 40152 15781 48951 8644 59563 4698 40613 32249 25610 61821 9371
+55618 37246 4525 60464 28928 48176 15806 32964 64709 28498 11084 57425
+14221 37025 343 56534 29808 52594 2396 35294 59656 29166 13270 46480
+19398 44623 17243 49190 20325 53368 33361 12479 65286 1131 31147 61937
+18523 53595 34032 10403 36083 57945 22412 39666 21192 41414 23905
+44146 20256 42200 21976 45395 37275 10013 48710 358 28706 54071 5470
+31027 51514 6754 49170 17027 31438 40816 14727 59675 32543 11300 35060
+54940 5109 36220 29433 53647 19171 38987 22121 42419 24897 44533 4973
+63263 19697 45770 23142 42143 21560 44911 12625 23004 63890 39552
+11741 61226 74 27971 63501 22465 54891 12424 26828 53910 20364 56409
+22462 59951 28537 6545 45500 14726 49865 33430 18967 62524 17682 51410
+20014 42792 22413 45994 24805 4364 40622 33816 9170 26591 47232 20617
+37413 64021 13050 39533 19564 51611 26105 59557 22475 8461 54006 2867
+27753 52750 21861 63639 23365 54720 27839 5641 50803 13294 48271 15759
+56000 24391 63521 20033 5433 55064 12400 38659 50424 17540 36853 53308
+18384 47178 30341 37131 25845 62767 4069 22300 55518 25355 2222 42981
+31146 4816 45815 26926 9538 48379 3725 47039 24555 32953 41002 5124
+60314 25949 53424 14877 58194 24646 44654 7087 32713 64958 1777 40347
+20459 49483 35039 10545 57337 5970 52255 29912 1720 34825 55555 4708
+61109 9499 23497 63723 26405 3186 59030 13865 32815 48039 14809 37639
+52562 21964 1114 62208 10234 24927 49755 13675 40296 4937 49497 31000
+1208 61845 13030 38902 14937 48287 441 53988 9605 56204 23087 41906
+27977 51357 11812 48380 2638 35202 46588 24026 12817 52600 18317 44102
+2656 52109 9453 22054 54129 41284 21113 46188 19036 47970 16707 45115
+14903 32038 47056 5764 40946 64419 3214 54853 11052 63916 7416 42379
+2830 39338 48600 23147 43819 15172 35543 46060 2637 24097 59860 29448
+66 51261 11444 48220 2779 52307 12087 65369 6991 56216 14823 60880
+23232 34950 63750 17285 37909 57558 16367 34061 61663 13049 55376 4114
+58224 30009 5883 54017 26985 62897 15215 43750 59319 8795 24662 46200
+6873 51450 13144 60750 18540 49025 29419 40273 11654 60454 14326 52907
+4377 40252 49643 2380 32394 53639 18118 34487 50406 9399 44406 16765
+48634 36320 617 43055 11515 40216 2199 47243 34606 25010 54214 1463
+40283 53549 7645 36915 27295 60876 13084 54164 16364 64741 29336 54976
+18599 63652 39125 12443 59747 1080 32443 53300 4026 60785 31447 7101
+32483 49816 37492 15895 40304 60007 13786 50020 804 42947 14119 44763
+35203 24568 41114 28532 52012 9785 42366 8202 34991 49040 32666 61212
+21296 3659 62907 31651 505 65237 27010 7620 52859 10986 34562 53466
+38194 11322 45888 29072 61029 20519 52296 18853 38512 62569 20853
+42511 15289 55660 1579 51982 28444 36613 10256 40960 33812 4456 51481
+12291 60045 37378 18441 46452 12547 43765 8187 28346 50474 22161 41753
+12069 58263 26550 48703 18280 44091 21004 53398 38322 7477 46893 35102
+28273 53094 8584 29450 61065 4439 24308 36400 51532 20850 40668 56048
+16809 58198 22860 61256 18193 56593 32813 17265 47704 6091 65248 30177
+40886 18942 45470 30772 3308 63172 13818 34733 56784 19215 60048 22602
+6652 63482 42121 21962 40538 14260 59659 25027 35679 48871 1170 26279
+63164 4599 55147 25950 64155 6600 36991 62806 15714 55305 17739 31154
+37575 23540 39924 28058 51798 18586 62916 26516 8272 59639 32444 57071
+8807 21262 63772 39899 6496 47112 20424 34770 60196 16099 57219 27318
+37788 33380 26471 39918 31192 2371 50041 13708 30770 47222 7874 23834
+48211 2902 28353 43466 19890 45818 15713 50954 34665 21280 42516 7489
+39361 30044 17701 33644 57311 15476 63543 29692 36077 3829 53260 24018
+7865 58987 33614 2861 47986 25835 61433 15003 33251 58529 22268 6861
+42187 57149 15045 36894 25854 58389 7919 28575 52480 21804 63049 25560
+55037 19396 58873 11696 32580 63443 12645 22785 31949 57568 4801 33306
+39667 3276 36847 9969 48554 7965 45236 2921 30826 43554 22075 49555
+16477 26846 42120 10795 47088 21379 53482 233 28117 63811 24032 9078
+45517 18880 38728 21001 56991 3044 61816 10425 58905 42 36413 20908
+57190 27742 59835 22154 972 26040 45799 29423 39734 14580 45234 16092
+39133 60377 17636 47692 23835 8996 27861 64679 19266 53762 6713 39995
+10506 58650 669 30747 52685 8990 64478 27831 39204 14076 63718 21481
+54615 18772 60896 31479 19657 46847 26141 5424 54856 23715 58822 17461
+60955 37918 1004 65459 15811 47523 21321 42545 8014 64704 11549 40836
+2489 29805 57262 14618 61633 5362 38307 24643 44277 17803 41430 54521
+9219 28874 47266 5483 31215 37617 91 47047 10997 43197 7366 38139
+52589 21233 42646 25798 11713 59971 36385 12712 58489 37613 20218
+47591 695 26198 44472 9198 53489 37997 29313 129 54416 8328 45777
+30479 7164 61800 13717 38611 50841 16195 31892 38137 8335 29328 50552
+23763 8999 39132 24856 50753 10370 47818 14646 58759 431 31304 45576
+15367 53938 37292 17073 3696 38345 29339 47984 26444 14219 55110 27429
+64615 7458 25690 42949 29947 9516 50719 1364 54858 12855 52780 35633
+25652 58335 3839 36058 60234 32282 11294 58950 35117 8647 62980 26546
+37306 9357 60611 1991 52093 24358 47906 3463 64983 40554 1317 42875
+26344 5752 55685 41238 14850 46418 35346 15809 50071 27383 38620 9405
+34634 50737 24115 10336 36474 48485 25064 4472 32315 62050 3340 38478
+30854 64891 15256 38409 7057 48249 10594 43340 4370 44725 20404 38675
+29081 60129 41280 11854 52253 16896 58633 26059 55765 32508 22820
+61469 33464 25196 50356 7259 57399 9987 34794 61786 14757 56479 28230
+65167 12060 34444 44958 5521 47786 30203 34546 62218 7568 51192 26103
+40105 18250 46764 34120 22739 64310 32015 3383 45938 13088 44060 31182
+53800 7924 55953 10592 58518 24038 51046 4284 32102 41059 1848 61788
+32429 49737 70 43927 13751 31671 48866 24788 33181 50215 15784 39602
+25885 36673 6170 48945 31827 8547 46335 2365 43423 9392 38208 63243
+1243 39750 50010 15416 41198 3576 47940 30960 19307 53420 25429 40027
+4391 61270 15012 52883 20185 32164 58925 25058 48691 18520 43598 22048
+49298 12608 65133 570 57702 33247 14133 63918 38896 15466 59410 11345
+65397 32937 26490 55302 19805 63776 24469 9907 60466 2405 51692 34865
+6546 29017 49504 5009 27197 52895 16820 36040 61096 16070 40146 32161
+17032 57849 25993 34765 62438 17237 55916 37504 19380 45304 27872
+10679 56884 42853 12789 59164 39893 3448 60024 30448 56360 1319 33659
+61606 4961 52693 33183 21402 60850 9447 41225 5356 29611 49400 64475
+14468 53784 5125 57763 30973 37001 10869 40548 30811 54049 4552 63296
+35993 23449 60380 19092 47894 6292 64078 10299 33530 54278 12309 21503
+49768 40178 15559 46624 23818 38985 271 48915 21931 40444 31042 16242
+61755 14276 53114 31369 13640 48654 18831 52474 33271 17297 31520
+64861 960 56865 31733 5957 64285 18592 57384 28025 5608 62910 29393
+55361 13871 65227 29333 52000 17580 49313 13433 45673 4919 43562 24621
+58145 18627 37353 29843 65432 14171 48865 6063 50817 3065 20913 47263
+29281 41854 10414 46545 14978 44446 1430 38500 14129 58251 17179 53937
+35740 24783 46255 5269 44291 35729 2598 40167 24044 58652 20749 55738
+16802 59040 3867 27280 42373 15795 65310 6176 55522 27488 7189 49169
+11216 52985 37833 18256 51541 6826 64584 13553 41870 21998 46919 35441
+6564 34154 57728 19126 55641 29711 14772 42662 17912 59024 23379 35749
+57143 3295 63384 13114 35812 56679 4237 59898 16818 54335 19651 57889
+37837 16309 58917 24137 55630 13948 28810 53855 17172 30560 62205
+11447 55764 34267 6440 45685 13555 44356 18021 51246 29107 38223 457
+35057 48127 5933 52096 9795 36971 1328 54423 16728 41534 20051 46800
+30967 6006 44726 26589 2548 50180 24300 44202 20529 52246 5943 29720
+41855 3136 46433 35158 28006 48931 16851 55551 23799 63632 15601 39526
+61581 7937 31365 54236 6307 29486 50270 4052 46934 10635 43780 5381
+32215 50521 2122 29395 53140 4985 61048 34296 3088 22213 51830 33401
+18825 48605 21583 43051 14117 46330 18656 36776 26454 40634 7833 49589
+25338 33855 56047 21810 58497 11189 20492 42573 22964 40794 11863
+45605 1676 50169 15637 46529 18345 41329 21176 49377 7812 29122 41530
+15926 43038 21036 46585 19547 40676 28885 65101 1560 25531 53252 5267
+59791 13346 56257 31891 65298 10631 57118 35521 5631 33038 38425 8273
+51022 23348 61888 11464 39563 58463 9527 37698 30235 16712 51591 37506
+13497 43158 472 47338 36142 19110 42812 1618 39813 20886 45857 11032
+41218 23245 59449 20046 56159 11915 51618 1743 31820 50428 8515 27084
+52302 17535 61161 25525 35745 56786 24010 568 63290 31696 5403 62262
+28324 56636 20117 45821 4607 41478 29243 2124 64380 17439 55530 25716
+18168 52287 15314 46030 6589 41354 13124 43229 22837 37399 53684 12348
+48593 19899 45163 14749 37440 54379 19412 42772 24224 9282 62027 33340
+25393 36194 47703 15841 60480 2156 28788 62518 25770 12410 44233 6011
+37195 52098 6942 46708 28954 5245 50867 11746 45071 23097 42826 7231
+29445 44355 21888 42993 12920 45121 3428 25459 50385 29455 5569 35584
+49672 7303 42387 33678 7808 35449 51071 25422 14135 63536 32400 56601
+7391 62385 34215 11001 56235 25896 59945 16032 31138 38240 22937 64335
+27593 33900 60248 6845 56499 35690 15243 53604 17449 59926 33612 18415
+56782 4199 42202 13316 38753 60175 16238 54262 13969 57490 8136 31298
+43317 13543 45916 1401 53332 33046 17996 42039 48369 13251 40981 63889
+14680 56199 28615 64942 20264 49016 12189 39370 22678 64318 16394
+40994 12012 49606 29985 65214 26984 1532 44209 11425 52237 7177 64990
+28892 54347 11956 56946 16431 62457 36074 13452 50948 1783 39154 24386
+46300 55487 620 59359 19401 63183 24231 56015 21470 61747 3297 55691
+12308 58221 15041 34751 47184 3716 62065 29980 55550 968 52339 6707
+45409 14157 37752 57052 18181 40979 29288 50806 20787 6465 27241 45692
+18310 51545 27696 59976 20705 56060 28820 5300 33869 43948 2245 28841
+45802 19629 60251 42289 10423 28056 54610 20130 55819 21534 59156 9884
+53365 32869 59922 7548 35171 60982 1172 53142 8649 36175 26460 46766
+16358 40133 60606 14529 57033 36725 182 42767 30393 9485 48015 7208
+38983 49490 17726 37069 51399 21710 12268 35685 52542 11544 61031
+15570 48008 23250 42906 31431 11893 47916 33997 8854 60402 27137 54955
+17680 64561 1830 51297 9983 32089 57740 1275 36406 28860 60788 2247
+30675 62728 4254 58507 29645 40278 1738 57781 19217 4447 50874 37253
+20694 53081 10034 35970 54629 22657 61102 19975 31484 63613 15667
+56251 38561 17251 61650 34495 15544 53443 26519 65370 11212 54884 1064
+63110 28950 34232 61858 9885 40728 65282 15462 30658 57684 14508 64381
+44013 21355 336 36178 46899 22696 2954 28558 42458 23937 2340 49362
+17035 44228 10190 40120 62933 13533 54957 5090 50819 10876 23995 46008
+26613 9037 62556 23528 48538 10512 52092 36684 12324 46314 17034 63027
+33832 10445 45860 34493 27121 40492 22999 64353 4320 58169 26825 41790
+21945 9482 50040 2739 23647 57698 33469 1789 31171 37499 7654 23963
+51640 15804 59339 28632 48319 8606 44310 21314 58709 15292 45851 7872
+37603 60417 16981 57592 19618 31899 38703 4484 24347 48803 2190 45153
+29881 4204 58142 19552 30857 62058 6871 28899 16253 45111 13205 51630
+4360 37956 12678 43399 27840 37435 24387 45338 529 31709 60995 20050
+51715 24861 8671 37161 31869 18142 62296 22266 50952 30281 7505 33820
+64207 2474 23051 44258 33171 49709 3627 42075 9899 44528 779 43022
+16585 36387 59523 15315 56430 24286 63039 7229 49761 3253 24459 58001
+40616 4133 45672 35395 7067 30263 45932 22152 12223 23961 50295 16566
+26619 43897 19263 39919 61763 2555 29012 64160 22690 6212 45589 33536
+19065 62150 21994 54080 33949 16063 64663 13068 30198 54652 11157
+25919 40400 58872 6243 31053 39549 25980 51610 9352 59425 7653 38741
+62445 707 57797 29123 37891 3471 32683 48898 28099 39788 20048 61199
+17966 39221 26099 59408 9289 38962 24325 47758 16079 41335 14154 51016
+17303 54171 23257 35216 61496 26318 9046 33232 41074 19693 47852 1123
+41587 10825 48152 2689 39680 33626 9193 24414 44234 27186 7822 58314
+1981 40737 19867 49519 33392 27005 38336 7888 50956 17361 46683 21306
+33450 48668 1901 39327 32829 4129 28208 48890 29396 61465 8589 57463
+36851 54060 11608 58100 37637 21662 64089 4900 54192 27752 3109 47116
+29038 44686 18866 40426 52913 2716 39395 49797 32865 1780 31637 42518
+6286 28952 62280 22625 50886 27782 1917 52855 23823 6706 62625 757
+51227 19566 39698 33777 8832 62082 36311 57230 28977 65074 35837 8484
+20824 44161 54928 17301 58291 39845 1356 45183 35195 3944 20640 57680
+31839 54785 538 38427 23310 50439 20103 32612 47386 5609 37515 54947
+14867 60759 42645 17389 63747 33142 18370 46740 10883 40997 48165
+15516 50139 37310 62629 26485 39783 28330 47465 16853 60680 5279 52946
+13410 65145 20667 38551 53679 5513 42287 15573 39226 57288 16580 59987
+38683 10796 43741 4579 59463 26739 51854 11587 32798 47821 9114 61147
+15450 54741 20038 62720 24838 53881 13054 64009 3096 41845 30643 9191
+47019 16422 43277 22292 53986 35268 8100 22966 63753 15631 26300 61958
+39979 3744 64678 35620 56160 2979 33803 47835 11644 57884 30316 14822
+33838 53812 8213 33169 55257 26269 3735 47153 10860 41372 4569 58231
+27438 43656 20536 59621 4086 42998 64156 1946 33716 49096 18471 65312
+302 36920 32063 19798 52178 15968 27479 44858 21090 51213 15816 63041
+11224 36789 6911 53323 31475 4770 46235 8246 49244 20978 50731 17014
+43840 11530 53480 26706 48200 7674 43593 28852 6360 49000 12554 44854
+30139 63760 3966 56830 30943 64773 16021 54032 25445 59263 14243 54708
+29910 64936 1475 51635 30591 37777 21698 48359 5667 37086 9606 56904
+19128 59173 23205 39358 142 51394 8275 26451 60488 20298 54322 23574
+59278 10167 52536 18478 41877 27169 9408 22047 47376 26966 13067 46450
+28332 41712 19304 36808 57135 21568 12441 35771 62405 7726 31826 61262
+13364 21690 52616 27300 64184 20665 58681 38032 925 41467 7991 57204
+32514 18127 58591 38033 18812 47718 32075 9645 54864 21256 51949 18720
+5456 33712 11357 19584 45077 28363 60765 24099 6530 42275 30478 14986
+61388 31435 11283 62823 41562 24025 6223 27660 43560 19321 60883 4753
+55636 9991 25219 63566 28539 98 41278 32681 8728 30547 38225 11540
+55402 25810 65408 32026 6126 57433 33213 11484 34095 5681 49066 9772
+35545 50850 23117 40451 18691 42832 6202 50573 10181 26681 45861 11529
+64394 2570 26420 44124 5869 27480 56437 23744 39843 17761 45885 14948
+36877 58428 16031 52468 24415 38213 8134 40112 32857 11947 35104 46500
+23802 49763 18470 54227 34917 26034 52955 12590 39415 14441 62175
+32286 52588 9770 34131 52005 12683 23260 48329 28828 8267 38692 28126
+63580 6344 54194 35500 3996 51295 42016 17686 37539 49629 15989 38795
+63660 21068 53132 18138 48608 12336 39543 2240 52003 23731 37753 32310
+16735 46383 14526 30204 55372 10718 47330 16529 54862 41166 3097 36756
+53296 13171 40460 5053 43472 25163 50013 21948 61911 11794 36431 55287
+22337 63118 34426 3564 30164 64821 5145 57549 35217 753 32906 59458
+15186 65426 33300 16484 57097 295 52506 16937 45750 25612 9301 23359
+46289 35309 7877 28809 45485 4469 42160 16619 46466 20158 60318 12779
+55649 31811 61095 23796 51193 15061 42156 5015 47890 12702 61269 15771
+57117 36822 16556 42672 6271 44636 17472 40490 15572 45184 3904 51952
+31459 64567 1136 33211 60465 6975 55851 14256 52298 11330 25694 43056
+59275 798 29746 54158 17131 37780 29282 59187 5634 41163 11978 47506
+13917 26740 55557 19738 44744 15140 40320 49512 11604 29691 43180
+13158 61193 22575 36045 2217 31151 46261 27572 51122 39050 54131 3754
+48817 9874 52042 34850 63070 3625 52637 35862 19485 54155 26588 13509
+52477 32989 47623 9490 51503 13934 44593 17785 42865 35780 11182 51696
+22452 58847 20015 56554 43872 6387 51327 34769 977 37403 13771 44159
+28691 2438 52894 17098 54752 22651 64965 20417 1037 58012 9235 56242
+32349 59259 16258 33615 62559 17766 54763 28132 34130 53000 11878
+48921 33292 2809 51293 9905 63366 629 55153 27706 5784 42702 30369
+1462 63730 27075 55674 2578 59009 28553 6374 57668 10972 39832 6776
+65428 384 31050 60992 4965 47656 25500 1370 42962 27910 46861 2170
+37470 54391 17066 41260 58077 18568 52229 15696 41417 28918 12853
+62949 31938 5854 59705 24472 878 58711 9707 29343 44520 6552 59929
+34832 25731 60938 29127 36375 6676 48717 9685 53031 24213 60268 4971
+42174 24703 33256 62901 6841 29705 61541 25030 6330 65014 17929 59843
+20374 54641 1125 44870 16831 46790 26356 15131 44169 12825 24945 56130
+40971 14311 45898 31286 18131 63421 19604 38556 30798 2865 51513 36901
+22185 42706 23498 40106 13196 51372 35818 58140 5347 20901 63189 38171
+15457 57894 23165 52617 11048 39794 4953 44836 28065 7435 18100 42441
+2653 62635 27650 53469 17979 42873 24544 45014 28567 4549 52545 12567
+62052 27308 56397 2676 63960 30782 58305 19933 45973 14496 40721 50570
+18381 39251 20488 43425 1615 60634 33501 6436 31279 48294 14669 34479
+49383 3941 43391 11174 44849 19387 53802 3396 32781 45830 8877 50024
+25340 61681 5552 30982 64572 2915 55938 30847 4932 41977 59393 28149
+56212 12833 63332 270 22210 31661 58330 16464 40655 32163 13414 22421
+47308 28959 9532 43744 5684 48671 35792 1939 59021 12961 64041 25448
+39302 30357 63042 2020 53660 20708 43503 30923 9669 46891 2760 23473
+59554 26614 15699 60479 22814 54284 19100 63490 25357 38944 61046
+31329 3068 32645 44259 29357 34968 46365 27099 2329 24955 40021 49076
+1977 31526 37409 7567 47554 14929 60605 21877 64717 36874 18927 44909
+24903 42924 19603 38487 60531 17374 56074 36746 13239 47337 21835
+45456 17042 50227 37986 19630 44198 22775 46151 19231 37821 49155
+17590 42697 11193 50589 33287 14976 58296 17806 61202 27215 8843 60348
+805 25987 42854 4999 45392 20843 49614 24629 38494 16976 47630 10881
+45095 30259 40504 23127 51733 15304 38084 30793 1219 49872 8013 55065
+13916 62670 19859 57795 29216 7294 35867 53893 17783 51313 3749 39082
+21544 49656 10877 45760 34430 28407 48843 8537 41552 12633 37645 30685
+55631 3164 59543 38854 449 50971 35888 8853 23287 52141 36169 8055
+49360 12139 52748 5577 56097 42326 25591 7250 63008 11309 55706 5707
+59942 32854 3166 39477 29294 51034 33311 686 47199 31560 8599 33001
+62505 22519 54514 17661 63792 32554 49068 22410 47256 30211 8784 33191
+64795 3678 55269 10016 37980 63324 19291 46313 31478 9273 32672 50027
+24433 9735 38308 6752 34243 59063 24826 10088 54965 3970 62106 25083
+48909 15117 40483 65345 19758 36224 58397 9382 25125 64810 15881 55997
+28180 61521 14704 39884 57940 16495 64998 33556 3785 35559 48280 14209
+36204 46454 17346 39006 52635 20339 10089 47897 6064 43700 24345 35416
+60172 10564 37964 27045 64598 933 56005 38134 8219 57133 24819 60533
+31976 16315 65430 30180 17976 42745 29280 3204 56843 8479 27154 45988
+32124 61362 5317 39482 64763 16932 36572 50199 13290 39646 49345 9292
+42243 3900 47212 10449 51556 8238 14688 43149 26813 52415 7742 61563
+11057 21028 63898 31245 52486 8495 22719 57146 41871 14491 50441 21035
+38127 156 42610 13100 31041 57551 5142 54602 10609 61842 3446 23883
+49550 7679 28609 58053 34896 8827 30439 64756 4737 26873 62238 1721
+55583 13848 58654 27041 8979 55097 29016 64351 18389 56613 39108 6413
+44617 20197 49384 33739 14842 34584 51525 10977 62247 13536 55852 307
+58899 7817 54781 26073 65281 18095 56016 13006 61906 2856 33507 56523
+18713 65108 22926 42893 20949 46404 24663 44493 827 39557 62040 15063
+31060 40888 11728 57976 14356 43610 23649 58724 20533 55502 2198 36906
+22804 56737 27510 63511 13873 24144 42348 28475 10896 64166 17944
+57906 29482 61628 1895 21341 59999 33907 27181 36369 46672 21276 10326
+59031 40822 18157 44111 21151 48265 27672 15189 52788 13853 60718 9856
+23889 55987 18324 61508 27404 48439 2996 43027 10236 38790 364 52888
+11602 59526 14004 37000 51958 19416 38029 31303 20576 50127 17698
+30880 40819 961 51834 21493 43731 14148 36888 54728 21692 62704 26666
+3346 48732 37238 22249 44140 32598 9047 31675 56712 23291 10355 50321
+4522 26814 51308 40204 18523 46773 33955 237 35283 48662 25052 6469
+30796 39123 17907 59349 12227 26996 53896 22873 10677 60748 7591 25106
+65201 33924 16817 58828 32512 15451 52988 20767 47927 5907 51438 12025
+46232 15206 27791 50160 18418 42071 366 37103 51536 6690 38954 56042
+7625 48326 36017 22316 34205 49990 19048 9169 26188 47769 18170 32380
+54038 8192 30151 62334 4691 31765 56037 17258 58994 30632 40317 23377
+45922 56877 7093 59960 13010 48460 21941 53868 38951 6651 45135 18158
+61316 35049 9531 24749 63627 4494 58869 25826 55267 20065 51704 8011
+41374 32715 22658 40899 28965 34434 44532 12298 40396 50794 4230 20692
+54374 42502 14469 36805 52301 15218 48769 25574 40706 4313 50944 34000
+22032 2684 35452 46173 4577 29781 62834 11850 40579 3559 53583 28552
+64122 17894 49020 36184 23880 34198 44095 18894 46357 30274 2088 34468
+43655 4693 45972 34822 24719 46890 8747 43623 12667 40170 14980 50831
+3147 38247 11797 50183 17357 33475 47775 2357 64069 27812 37015 25804
+54183 1202 36102 9063 38977 18505 59026 33516 4174 51588 7911 34719
+60560 6120 52435 34550 25665 48029 5417 45321 13427 39647 54642 24399
+3271 61125 8833 23612 64076 39244 14630 31928 54058 2366 61810 9710
+34443 64170 22030 44549 19839 40848 48704 11395 42627 6248 41176 14116
+51195 29609 58595 19310 43869 20671 41090 4306 44761 25685 1359 58469
+12212 60304 34319 2263 55965 8946 59686 24004 35479 65106 4778 55692
+28122 704 44098 11276 39610 56899 29037 7572 65020 13291 54395 28165
+45712 5287 37254 55245 18126 43844 63386 22074 2165 57724 8282 25853
+50174 22699 8571 63104 36267 54943 1593 52111 22226 41795 56555 398
+33358 49881 28281 34886 45754 1158 44127 26271 39085 11171 46756 4380
+41308 14241 61516 24891 36942 19760 59788 43176 3220 61857 14605 54459
+11585 25947 45297 19160 33283 52157 15747 62009 13486 59640 4339 56023
+37151 58573 13361 51115 3670 37648 27462 45845 19111 44478 21273 34446
+46157 7962 20075 53950 194 35396 31020 46723 19729 40439 16533 42819
+3470 33194 51196 12663 41302 4060 48177 29776 46285 15928 42954 17939
+41018 11141 46420 29010 59114 15869 62488 13693 48095 6166 53419 20221
+64952 25719 14631 61682 39347 24885 55 57003 32049 7468 43376 29354
+8609 62937 33318 12123 60440 40293 57525 14601 28138 55464 16929 35876
+51705 21349 59341 11233 43940 5890 41000 26695 2771 60096 10277 28083
+63810 15076 39637 57176 22044 11853 52518 27257 7668 54281 14301 59034
+31711 53653 5227 63083 30256 55955 18619 64531 27064 55668 7703 22747
+50935 21259 44110 4810 60872 12440 32836 51926 26599 62683 31170 9912
+48268 19452 40159 28562 50430 18243 47620 21104 56474 7556 30493 41695
+21890 49753 27677 9673 35093 47697 20340 53850 34399 1362 27944 49095
+5030 36359 28723 37784 25886 47198 1233 42192 7684 49875 2524 32226
+65517 24774 54291 19320 60006 23840 8062 34981 49431 13740 54831 27131
+64336 17124 56561 39333 21656 42630 7096 46601 26526 36188 48838 20881
+53648 7936 30216 48093 11823 40039 59905 18378 53838 23280 13706 36282
+50992 17481 42020 105 50067 16855 63167 29629 1892 41727 32835 7241
+34469 45997 20452 38827 55393 13498 59762 42123 21913 11790 26872
+44252 15347 47888 6958 20525 40097 63569 19230 4011 52146 20938 57047
+13752 62193 3066 55440 27924 64204 18840 43875 30245 2444 56448 33795
+7159 31006 40202 23958 44873 20568 39570 60026 14278 58206 3817 24668
+41666 772 46455 23778 41492 30347 21275 1231 41125 29139 62636 14318
+57443 604 55084 11004 64123 2109 27533 61440 36957 26143 64673 18391
+4583 34060 55781 1625 64252 29058 59134 14284 26947 62453 19851 55483
+13760 59513 1295 53603 28116 56670 6575 62831 24331 3905 38870 33545
+1680 51937 26166 59866 11698 46353 1178 32757 48106 23054 9964 60050
+29223 40186 18176 60701 21322 56545 35154 16467 47785 29877 20500 7025
+31149 49456 8305 41923 32289 187 25016 43063 15551 47716 23462 56099
+14292 57729 32662 19303 53257 40774 3521 50084 9508 26797 41227 60677
+15636 38689 64037 19121 42440 27836 2445 22369 48289 35272 8548 26393
+41940 4670 42840 13253 40232 59329 31815 9922 57181 20131 38650 28794
+64723 13990 47253 4895 50941 35051 24116 64261 10740 57115 1759 38621
+12095 42685 16071 33416 62401 17489 55526 4215 64608 30745 51551 6667
+39368 11178 46117 30544 57320 19068 60859 21824 55281 6611 58657 12382
+54555 30725 62794 27348 57123 21229 36215 4073 31219 43500 1310 39380
+64525 26340 5228 62056 30260 6894 35973 50017 11183 28080 48035 15230
+52706 17030 63637 13651 33548 3818 32173 45477 18530 36237 61220 15153
+33231 46970 5246 42035 60767 1959 27088 55547 23533 61144 21819 40075
+12715 47106 24547 60015 14932 30660 56971 15507 62517 29931 5906 37566
+31309 2781 51379 32406 57530 9299 63861 28036 34737 60227 29641 8953
+35933 58184 30199 9395 35517 50083 18954 48404 36287 16095 33827 49937
+8737 53405 39142 18031 50625 26295 63705 10313 55388 5336 64434 29192
+2518 46883 35201 29180 63458 19826 54997 35691 11332 51800 7715 64482
+34679 53085 9936 25116 46592 21997 38644 25514 41370 17829 50768 38862
+22281 5095 48742 11861 44470 60779 14934 26744 50484 36275 10809 22621
+54966 36113 301 42585 28318 37548 22388 33058 38956 10011 34833 50031
+16679 43658 54024 18623 48894 27828 36924 17104 39070 31825 16134
+57701 42065 6925 52527 36918 15655 46341 5835 48237 11286 38630 3724
+50546 31567 1115 53228 38152 63611 15672 36052 59792 12948 64897 36975
+57096 7459 61848 29284 1786 33509 42242 8395 48378 35752 6566 24622
+56752 20300 35275 62674 5517 31550 49397 510 30730 47740 5914 61551
+34806 57319 10658 23676 43816 59558 15303 54354 22201 61418 34011 5465
+46590 18611 35267 52271 8260 48672 3233 42493 22504 40825 19920 60230
+80 29681 46088 22094 44036 20447 65441 3710 58535 37380 1484 43644
+11514 38395 15890 44727 18052 58931 26461 62624 18528 52334 7786 44875
+12597 41643 15597 43069 18768 44868 24695 16149 36863 12792 38807 8957
+51288 28516 58832 15088 55365 33564 16294 52192 36300 12507 34505
+48354 23392 2894 33976 62749 5462 57207 25024 40309 5822 43937 56428
+27173 61626 10247 57336 2428 23977 52211 7246 27601 63121 32260 16504
+48089 40286 6329 38133 10928 45043 6687 58524 21404 53120 8731 35415
+47674 11833 40921 4315 51691 27255 64523 11045 56488 36473 5233 41518
+23855 38129 4550 51154 13347 48533 23705 45257 14732 41327 53592 24220
+7006 41938 30688 12481 59564 1497 23239 62400 26729 11509 59176 4838
+45771 20979 37436 19136 42416 13610 36263 53513 23319 10978 50714 7301
+44747 9864 26734 60974 18583 31393 44172 14754 22959 57962 39556 6577
+60951 11630 52934 5732 58405 31445 9871 57356 41600 16353 52633 24489
+10237 47362 34924 8696 24426 48772 34502 6971 47166 24221 52103 5918
+60829 11410 54675 19008 64549 25617 2215 37373 31450 12773 65462 7343
+55718 9851 63815 3034 56264 36408 26955 12953 63517 27945 3354 55525
+32613 63271 19676 53491 24475 64535 12842 40648 59361 22604 5296 32253
+51936 1891 28779 44267 22706 10053 27311 41043 19551 52004 36260 16525
+65526 29269 17262 61378 29990 45453 8814 31849 53620 18316 47842 21138
+35799 59823 16572 36143 51460 21083 13357 39067 29305 61174 128 32261
+36890 9423 49370 1784 20375 55005 29059 63572 482 30443 42012 21541
+53531 16692 58362 7685 43484 12326 54529 38865 7133 62020 14572 53259
+23952 49080 27781 13668 54252 24583 60439 20828 52396 218 40749 11886
+44025 2768 41400 14866 37759 26369 51294 552 65072 31803 51998 3587
+39541 59142 4747 53555 23322 62036 18121 44879 7451 47125 30447 10393
+44662 3236 46290 25143 58086 15952 61207 29762 53101 18748 44484 29513
+534 60691 31561 22243 11665 42881 16889 47076 29353 34747 44746 17160
+49712 38135 20620 9948 56508 30746 15258 63607 19205 57445 24974 51975
+30913 3491 39040 27130 61932 558 52740 23839 45300 14395 42476 18164
+47181 29599 17112 62133 14420 54121 16200 58456 25261 44131 2126 54631
+6163 61827 23015 2374 63413 32932 59840 4746 53945 27030 35938 45457
+6444 33136 48189 22182 41461 13070 49594 1577 52444 26752 57653 22254
+8656 61502 43028 18188 57079 28097 34540 47061 2692 38793 53892 4986
+33017 48286 2960 31457 50313 18534 42932 21634 48025 35179 14760 46848
+19210 32875 62968 2618 40670 57113 19285 63334 29924 57708 4236 52864
+30666 15121 65334 17248 39835 25177 45062 4407 47049 7446 51838 29534
+61417 8421 42448 28948 45836 19577 41470 25369 49635 22246 6509 51166
+38020 18034 41228 49829 21902 9346 26898 41723 1957 43072 20712 46164
+25581 9545 35486 56863 18344 39742 24723 54659 5733 52952 31953 48938
+3908 45053 12059 58400 31086 4764 50704 37818 1084 52472 13163 64586
+38132 1677 42816 13729 57789 10490 27163 53446 11151 25101 41812 53935
+6927 47626 16188 52603 21190 57925 27055 38053 30330 45416 23725 8981
+42454 24546 56614 14343 59755 9628 37183 26117 51390 17630 48799 25849
+14101 49735 30389 36011 5834 45266 10133 32477 50569 19140 40775 4865
+46878 26707 62939 19951 56475 21972 54836 24609 58214 4049 63364 20462
+46505 27851 8591 23405 61194 28397 10799 48473 15399 43821 185 41060
+13391 63986 35961 18818 56970 22072 60787 20644 53422 861 39649 11835
+44041 7847 41687 10225 51368 33664 12519 49347 36558 64597 1517 54691
+25093 6144 63818 12762 58475 25866 1382 52861 35820 43787 4273 51665
+28229 46180 2577 41595 14188 37304 64433 16453 49820 20544 44004 19257
+61180 17161 59067 1366 54259 35040 6831 50835 33280 45606 708 31882
+42834 9988 32923 60885 27223 39494 11781 51063 29159 38432 9933 21293
+49265 34595 7676 51570 16568 57749 38220 627 65318 16115 56903 27726
+61233 12444 43873 4077 49197 38390 25684 1055 39348 32935 4720 64865
+21517 56327 16263 24607 61910 40773 12854 63736 15922 35364 55894 2381
+65073 9105 27496 61951 1116 54926 8587 28689 49691 22669 6561 43041
+727 45170 20791 41471 18413 58745 35652 8958 33146 57341 12841 30496
+62147 23318 40662 20745 44180 14891 32316 58144 818 24084 61002 4795
+44112 10396 40294 62755 23638 2415 59159 10696 34050 61063 31152 54162
+14453 58851 17320 54956 5519 60865 29829 44912 13607 49777 7989 61552
+21142 47503 16148 59058 14832 63875 24142 49786 6903 40581 55278 24741
+15202 46558 21944 41963 26794 16192 59407 23332 52295 3679 32732 46208
+4949 33433 64825 1598 31557 62224 25822 40249 10019 45713 3579 50626
+14320 62554 12512 58320 38768 15782 47615 6183 43999 34216 27935 63377
+1623 30283 61246 4462 37008 59297 23072 2632 57814 40546 18065 61329
+38619 6571 63900 12750 56891 34240 8489 30123 49478 5184 37259 9354
+46810 17479 42367 16076 39928 9581 57715 36119 49508 13066 45618 33224
+20312 55810 26735 59630 22156 52563 27679 2180 50298 6543 41557 32492
+8387 31611 43001 22904 55647 19518 58860 31745 64973 15772 39479 57956
+20434 7443 28424 41407 14259 50305 38000 22239 42995 5006 39770 65290
+33707 8229 22106 59799 33066 9360 31958 55071 20133 60219 8107 28526
+42648 5537 57533 11137 38263 6214 36633 25358 45934 13772 22660 63480
+24364 9757 26276 59611 39219 17900 65533 20182 36634 15509 53093 31662
+16225 47864 17374 55889 40959 25568 13228 64883 22591 41524 10179
+23714 50855 30425 44777 6793 38715 17138 40781 21543 62951 28838 11323
+53089 30500 62449 15011 49936 17163 41817 11782 48991 36795 10731
+27494 50842 20071 45624 8019 30396 41001 24718 33833 45563 16901 44020
+25367 34920 59406 16794 38464 52071 25736 54552 16237 62186 12469
+44449 2722 48009 25897 45614 1852 49848 36734 17914 43400 12391 60122
+3586 56246 39168 18246 52577 35450 11374 53111 16721 58422 30238 14043
+42593 54651 28861 47865 20595 879 45197 7185 47108 30314 36467 11021
+37450 14994 51584 3168 65261 19815 42856 32488 9428 31446 39519 2221
+43911 35782 17206 33495 62308 21550 12612 43635 63133 9330 58737 4318
+51572 34534 7138 46821 17502 39792 63429 14201 41008 55654 17640 48603
+15554 37284 4400 57036 31788 19946 64972 18427 41518 6475 47947 33658
+2888 53471 26870 61662 19919 3582 50426 12899 46991 39766 18707 45092
+28307 8764 53558 33688 15404 29134 54588 625 25626 46504 21797 44183
+28400 14312 59512 42704 15527 32143 65276 22997 33975 61493 8154 55564
+24039 53521 32403 4518 21538 54773 1533 64367 37920 5193 42371 10510
+37706 6046 46526 34388 25097 62609 14324 56013 27166 65256 10712 50182
+4663 40678 27461 2084 23926 47227 5204 24831 51756 32074 55739 19284
+60080 33204 10938 52657 19700 55433 28827 10466 23195 58022 41981
+14409 48666 23632 50981 5865 42985 22529 36310 53460 13691 48448 25309
+33374 54693 28095 52343 12225 30469 55770 40884 2411 48225 31193 52936
+21043 8740 50585 3510 48959 8039 57269 1002 37903 64702 5339 43745
+28190 175 57453 43311 30462 3301 60874 29724 56210 19442 9023 35161
+54283 22816 47667 5932 51162 9658 34281 58516 16595 48350 6944 41013
+25388 55486 6390 59759 28832 252 58894 42783 5973 56918 26089 60303
+16992 54040 12599 59979 4045 56382 36032 13780 47882 5512 43688 12898
+29386 9370 37042 31862 5978 51092 32634 60494 16686 55129 20040 63416
+28105 8266 52886 557 54975 19327 48923 24272 5564 44928 13890 48434
+31846 20514 46348 34839 346 53536 31727 19793 5551 35965 57507 32517
+17852 64129 23983 4680 61803 28420 52701 23230 39176 27820 33935 47270
+831 54010 28249 63369 18960 50776 26885 8850 56813 690 25733 47354
+35447 2379 32873 40424 23826 48761 11461 61067 28534 33845 54468 8232
+22599 50649 26337 8855 38997 24282 58352 11829 44888 17132 49806 36618
+7795 44412 24079 54570 27624 17001 65487 32637 10093 31539 45634 35996
+22864 55407 31762 6899 53796 13488 65086 38855 16442 42070 62991 8249
+43333 35209 58939 11037 55820 2904 38550 53596 23414 2413 39731 51236
+13360 48414 1047 25860 43696 30497 2103 42863 13857 62264 38743 23933
+42755 14690 31300 58154 18858 54643 25964 61016 16706 57603 9256 30732
+47383 3859 44270 20245 45911 18174 62938 15352 53919 32628 56254 18336
+61710 37803 2748 43265 9762 46316 4216 27712 62809 232 41403 13373
+46540 31253 47917 3176 27571 62601 509 40784 14940 64843 11811 56105
+1196 23990 62306 30218 2298 63912 10123 41994 3205 65218 38155 7546
+27809 57745 18531 42265 4433 61664 36829 23041 55937 25157 43476 20997
+45920 11049 30524 53807 14379 60541 36501 20286 9264 54337 35235 13883
+46207 4214 39525 60140 25805 2728 63302 13935 57200 35571 24448 46405
+3358 44495 22769 33711 59292 1719 29465 42869 14406 38090 51412 22598
+13924 31734 37475 1419 40180 32244 5218 49918 22501 42004 28320 7570
+62731 23507 54225 20776 65230 40351 61064 14542 55698 39137 21952 7935
+27258 40589 5253 43004 13770 39323 58918 15656 48183 31201 37967 10450
+35027 63097 30706 59230 3275 38978 64212 7034 26136 61966 36128 7996
+43832 65266 23301 12644 52652 42457 9816 39216 50904 16313 43327 477
+63173 10520 58558 7269 25524 60526 16625 41249 4157 54953 13677 60914
+34071 28618 36210 54620 7923 60645 30099 16986 56978 13420 29562 42671
+19679 44840 2871 24464 58519 35297 1014 60240 29948 52256 3384 34312
+51279 22807 63788 2115 28729 53621 13733 60274 913 36685 50770 7368
+44403 21061 49523 13601 64325 8434 36754 20817 62328 24378 36571 962
+29901 49212 5244 31913 51318 12287 20480 31740 37786 24083 49052 19468
+7825 35746 62102 25138 6191 58011 27896 35226 53167 12719 59687 37120
+18631 47551 28787 11328 59459 17644 48084 8151 35271 46134 2746 43281
+12503 41856 20948 37442 51871 19181 40551 14939 52323 1936 37355 30368
+46921 9898 42727 6699 45290 10824 26946 53455 17999 62315 23946 35597
+48119 16588 44639 24031 59536 5915 61695 16671 54290 37774 13142 31510
+57060 25153 35638 44688 18698 47527 38764 9019 44992 36035 22469 48990
+16050 50129 32387 19515 60831 34096 10644 50029 15128 46952 33144
+12435 44500 18524 40250 12718 62701 33081 59012 18154 35242 46710 7908
+24060 63061 37694 15494 47508 26203 33965 51772 27980 10859 48114
+32839 18775 44269 27979 47 55243 20190 65169 29477 8384 51135 13774
+35252 51866 20663 62787 26071 8777 34706 65532 43493 12297 55093 14437
+63170 37260 19530 46386 15726 50442 30836 39510 1773 33755 46131 3400
+19623 32397 42530 2144 28436 64787 31489 56334 14316 61525 29406 54202
+3820 23663 44754 26017 6093 65063 27605 53329 21073 9060 26841 50556
+23106 11914 34001 50131 13238 21489 51967 33735 15593 49091 39887 4094
+26521 56111 33396 12971 57806 25498 48083 18038 41515 21426 53421
+35240 12647 50046 22115 46833 25973 42758 5535 47850 10453 44807 15421
+42045 19517 53657 34803 5187 36176 65161 4 55235 15335 62391 38571
+11831 49158 31523 17080 47395 14673 62982 28762 7300 42498 13026 32939
+60697 22013 39641 20693 46511 11900 31257 56067 23395 60458 1324 52979
+25659 33342 57967 2754 42204 10501 51227 26226 56373 21307 60395 18326
+38321 28857 52662 4490 61777 9103 30942 64900 29437 45019 10197 47468
+29678 38141 10908 60570 19901 49256 5636 27455 64476 7199 56298 34029
+3405 52382 29613 61894 13703 24847 65123 20107 52888 4402 49075 27542
+599 63588 10015 57783 34436 28563 60600 6385 25021 59528 20454 51994
+22566 36478 59125 13564 42031 31158 6838 58577 12614 56619 20897 51218
+15146 37002 26837 40577 10848 21694 52176 39568 10074 50302 3763 29898
+61252 12876 27985 57804 19199 59828 7103 29606 57057 24153 9530 47597
+4212 51226 22090 35924 62959 7873 26955 57893 1628 64050 6387 52493
+27415 3930 23385 51916 2561 25501 51233 41682 4610 29093 56532 2044
+61913 8180 20680 63955 41086 15777 53157 38115 7973 59710 32759 15405
+42700 12253 39025 57439 18787 31876 63967 12450 47172 3872 54502 30529
+53380 4358 24306 47123 21450 48524 27457 10215 57754 400 64604 11038
+55333 18979 58911 27991 15484 58165 51504 7406 58678 23869 49209 10561
+42766 883 46831 24694 9818 36544 30941 64071 9475 37133 55586 16223
+42175 1920 47025 32368 43624 15612 60386 29655 56191 4213 40016 59358
+24352 2875 57973 8426 30098 62142 37221 22166 2157 48639 30140 7536
+34799 56567 4464 45241 14549 43552 31291 6454 55536 11758 37476 19795
+52824 23045 65033 18276 59547 4039 48971 9675 45396 25434 50830 14874
+38641 26023 49467 9449 27414 43663 19211 64456 37727 5335 42868 20347
+39612 59881 19251 55846 38745 9800 43957 4789 52767 25447 63135 19395
+39136 5235 40765 28647 37287 5687 48027 14604 51905 28550 59838 20143
+47244 10995 40793 13841 53958 2085 63561 22203 45192 15821 50853 40766
+870 49912 21153 57430 16193 52658 19389 45575 4355 42002 14725 33040
+52519 17166 41161 20273 46082 26800 40219 6233 22834 50734 34256 7622
+38869 29074 62284 15388 58694 32795 20584 43652 25839 7515 54448 16864
+49465 34819 25 38089 11945 63488 3634 29827 45877 903 49634 20388
+33689 40429 3302 37861 8132 33042 51953 1858 57529 33926 64229 4593
+22764 59387 34355 17796 48832 6069 32615 49688 3382 51535 13267 35303
+44149 894 39020 59366 14961 44346 25430 58620 0 21342 53694 38457
+17373 50915 28189 45512 16734 48081 31263 43187 15070 39600 64145
+12973 21338 52732 40015 19520 43006 22531 53472 35724 1110 24167 58802
+5415 26412 49938 19640 39891 61017 6534 54022 26528 2288 49391 40478
+6056 44007 17964 39558 19579 48057 16392 40707 58213 8513 61749 3209
+34085 52863 23088 40612 20885 38343 5949 43485 12247 50645 35063 10077
+38733 30965 17563 45625 15283 54063 19762 52310 15902 38164 58207
+20605 51979 18828 49609 28785 12831 51101 22720 60587 16567 57363 6742
+54357 1143 41857 14175 47594 27646 9350 49506 29563 38645 25539 53849
+19246 9130 59478 40627 18896 65080 36643 12174 24126 50393 29897 57659
+2482 62472 38696 24227 64272 1355 58004 11191 40013 3050 50538 25112
+39379 28302 64015 21424 57861 8520 32589 60043 6331 36664 30768 55750
+4064 53693 7752 27078 57555 12190 55188 610 27115 46039 5830 25205
+51739 18650 59162 11230 42917 3759 49948 13416 58697 15687 54738 18339
+60943 22172 41420 31324 9348 38559 4325 36093 63849 3630 43540 19985
+47981 34623 7639 36437 56807 25380 12624 58392 27975 5469 37236 32211
+1713 64268 14298 55927 24102 62679 38165 10651 45327 111 51590 10119
+63850 16082 57677 35906 950 54160 27027 48636 11342 34222 44767 7019
+39375 54995 4796 59834 38927 22066 42009 12511 64117 26617 55419 28656
+41774 21796 50895 16801 65410 25714 54838 9325 64270 28184 54375 25505
+63612 19175 45731 23690 8563 43373 28971 45953 7907 26970 63303 21841
+38237 55225 15054 43267 33809 26842 47872 16662 62719 33109 20420
+53551 34759 8405 38618 31040 45982 29421 5144 42977 33559 14651 36200
+61234 9888 55729 7224 58161 27211 9025 34525 59953 26489 6999 59289
+12327 49088 16908 44790 29432 49430 14837 36706 64739 12965 45108 4572
+30879 47114 17358 37216 60123 24564 11523 55149 30163 61143 9937 56781
+2201 43925 29224 15440 31692 38797 25124 45080 6346 43548 13098 59674
+26674 53381 24491 64081 4701 47130 25971 13 63688 34533 5429 60120
+28975 36768 8385 63038 32534 2839 44295 7334 41384 1258 60901 33272
+4181 46056 10014 29926 40023 24185 34481 48806 20155 44309 18893 64413
+37045 16536 61399 12329 47802 1301 41724 51146 32522 14144 45570 3695
+53290 29165 60167 19661 9939 35905 48716 22826 14121 44106 18641 42043
+27342 46036 20991 43755 30790 8367 55747 11976 37175 1553 40025 28295
+47780 18306 52464 21809 63751 16454 46352 21382 36306 48787 15722
+45164 24959 36312 52975 15087 34911 62818 1509 48879 27148 36454 15870
+56972 33895 27536 35643 46984 7984 42759 10889 50197 374 63207 23179
+56848 33364 14354 30624 45788 23489 59153 11843 27381 60016 22984 3086
+35427 46827 18217 38633 60983 13160 54821 41323 22304 39499 21159
+51851 2655 26577 57091 21140 60752 28365 38007 23368 49893 11056 46619
+31578 15641 60355 19586 56745 1761 26537 51587 23996 12103 46851 28070
+10864 50161 3167 45353 17504 41083 14486 49017 7168 58103 8967 39290
+32731 5797 42632 32136 21381 46252 11308 43007 4081 42106 13599 50402
+32357 17839 60388 16220 55529 40380 2093 53247 11101 24709 65490 23327
+10306 60655 4481 52205 27787 8816 45707 2589 27020 61373 16372 54566
+11259 65053 24080 59224 9277 56642 3028 32433 20945 34812 47355 17234
+44579 30535 47799 1272 45352 33972 15950 37360 4892 62870 9932 53954
+7538 43108 31126 1909 54724 27879 52502 14778 35305 63142 8906 21348
+47645 28711 36804 582 25490 46486 22137 36680 64218 7002 36108 52429
+17185 57407 14800 63553 28738 49363 3708 42922 11663 37268 20097 40727
+21934 57511 42262 14900 53377 25537 38206 3277 48523 25482 40711 17176
+50846 14794 62618 23587 45674 16928 39624 57886 19450 35339 52424 4594
+64805 9698 27253 61607 7530 53917 1809 30459 46236 5168 42872 20110
+63852 31030 21026 4840 62570 25383 49232 15105 42655 1592 39966 64624
+25117 8538 34249 49499 4644 52297 12230 61691 6604 57085 13960 62641
+36452 18774 50063 23061 61752 15783 53376 3339 42320 11594 44345 1434
+40346 10590 60853 28579 2172 61701 30463 8623 65396 10415 31017 47680
+17863 41620 29955 8283 63933 45937 24037 8987 62172 2133 24742 64853
+32461 55841 19669 44073 16270 46094 6638 52719 25152 58228 12482 53145
+6281 32803 46544 16549 44609 29321 63993 6506 55435 9882 29102 43905
+23624 9521 58965 6878 46703 11955 36331 48814 6369 43892 30968 8443
+53758 2274 30084 42649 18122 63308 37927 4145 42482 14533 40763 64205
+16959 37228 61540 16172 36538 64780 15481 56966 31845 54195 5116 60042
+23785 32911 37346 26944 56769 15513 59695 13805 52134 1700 35509 60952
+17909 55423 27159 62192 5189 56383 35477 1156 49916 32149 14765 44022
+18651 46696 35766 303 34648 54476 18490 42365 12506 37524 56452 17843
+64417 40034 19621 43657 3832 41757 18169 47602 15269 31169 40116 25728
+43603 59490 488 28341 62516 4352 55044 13585 56936 18277 64563 28750
+55406 26364 33206 38755 23458 60714 18080 56667 24571 38564 9422 33544
+58399 1302 28753 53131 38999 4220 61979 14308 56132 40913 5775 58660
+10598 20446 31049 60482 910 42119 7835 46509 33611 17792 36023 56743
+16989 62272 1505 55836 12845 49446 16764 30039 48064 9215 44663 13462
+63937 20877 55004 4608 59234 30145 39796 21451 54811 12167 52851 25484
+8493 30843 63309 14851 45273 17888 38462 51768 15917 39384 33273 22989
+58328 17824 56901 15217 54700 35292 11158 58603 43800 36216 10363
+30696 61133 20624 54942 27028 5889 53017 30466 61309 16884 58348 31048
+36500 22739 38608 28054 47257 402 29814 58415 5018 44333 10614 45999
+24486 57350 20571 61435 17353 51561 22615 42877 18160 51083 38459
+17317 50036 35439 22584 33698 56276 4152 58867 13920 54408 33445 20636
+229 35047 43726 18106 49108 39901 21557 3987 27352 39481 12473 58492
+28751 37672 20899 48540 1453 38989 17004 35794 64736 167 55055 9278
+52418 14288 32851 41978 22635 52076 3660 63117 35088 27225 50744 18537
+43356 29383 16550 64960 18396 40261 58326 18929 36806 61402 5099 48992
+8655 29689 47375 22016 53122 28593 9319 45552 3577 31496 53678 1223
+23889 42957 28421 10400 22743 47541 34779 1573 62460 11347 52602 2932
+48146 35854 23231 37136 57645 24422 7021 49341 32482 11703 38018 30642
+15453 48244 25182 38176 6756 62437 27880 58849 7576 56713 28441 44723
+6946 48777 25712 63748 22118 5013 49406 28675 6112 48188 12317 59863
+28245 55088 1206 34859 52160 6062 63789 10969 22772 52992 38400 12314
+42663 21758 37946 23073 41401 3410 43492 10657 48043 17817 57666 3081
+29983 46020 5873 44122 20316 62357 18495 40890 23313 44290 15923 32017
+50213 20203 42740 18445 32271 52994 27471 34625 51835 44667 12902
+49598 19827 54288 26225 1998 60834 9122 28030 47719 22155 42285 27499
+44288 6829 61967 3969 27615 60708 21780 51719 30810 10357 34742 46634
+22704 8890 56248 2271 29489 42500 5699 61794 36568 49358 108 41979
+21880 58175 32853 2686 30700 59679 12777 52370 8840 40397 27585 37417
+6643 23129 52367 33383 8130 22006 57095 38671 6157 44237 10768 36445
+47642 17596 41545 104 45503 25631 9283 51459 2591 54790 9832 32607
+53025 16081 42554 31935 19891 54396 29565 7012 32499 37826 5939 39386
+29865 58655 4568 56291 8177 24303 43575 6132 59254 2897 50668 19674
+43782 23437 46978 6416 40385 56582 29585 61056 11404 55571 28445 12829
+52140 31342 61745 7478 53578 34756 3058 65258 10027 41409 29000 62555
+26563 50951 15043 30861 38723 24911 40408 20937 50478 1881 62348 13958
+47781 15359 49734 413 34056 63464 5224 56759 37455 13304 50716 3743
+24597 47004 9579 26134 54404 34332 24979 56208 14015 59541 5997 33998
+58088 21759 51070 18162 40650 29304 51738 7811 58942 36201 63139 9192
+29666 53273 21047 46998 22562 41564 25450 10033 62073 4718 19682 48067
+29884 39656 655 53108 17203 58236 41356 7487 64724 13056 52578 30928
+4403 32306 42279 16798 50618 21157 61773 30383 2023 35730 54038 41837
+14032 32971 57257 22484 51552 30779 13289 38200 26819 61905 11921
+42268 19313 47071 35373 8640 24714 51039 17743 61021 5573 48594 11327
+51447 23745 61349 376 42139 13637 49766 37845 15734 63560 13180 50487
+3526 45716 10187 51882 5539 64387 12017 34907 57667 6869 64791 11072
+37843 14848 61448 3393 21350 40126 27123 58513 9978 34395 50370 22479
+53041 34699 5727 54704 14172 59561 18674 52329 35097 57197 39256 7182
+42808 1432 41107 56665 27890 14125 65477 35843 26566 33963 49840 17528
+48370 31916 13490 23968 56938 11636 53045 6334 23207 62286 41763 5998
+45725 35832 24946 62879 221 51623 29992 45399 2759 24528 55472 34972
+673 26366 52222 22245 63004 28863 12423 58875 21753 56372 13500 38778
+63120 19666 48670 24065 64721 14981 37992 61153 7409 36781 59129 2741
+40437 64493 14836 48384 27436 53948 8679 20331 47038 35127 29264 62911
+14810 53395 25799 40920 13138 62340 7953 38285 16834 64766 24458 12504
+51231 21289 45520 4564 37447 59738 6733 45328 15887 47910 26076 17008
+49849 21963 55083 19043 51805 9437 42377 4978 34472 58094 18222 61305
+3834 56590 35958 24545 32298 37393 25687 39280 29607 57872 13659 28043
+47824 23378 1388 55280 27214 34545 63074 15280 55853 41728 21418 12379
+50505 2535 44033 35397 24014 48424 13254 39551 7239 57406 9703 62785
+20146 46543 21729 2210 42407 26313 44977 16404 43205 5329 61138 17365
+55675 34214 29441 51289 33446 9635 58642 14049 65031 23496 46720 3074
+29236 54166 20905 44554 18910 46347 22151 51963 10733 64042 3653 41117
+13535 39405 58292 20036 9589 24145 60113 38056 10654 42683 1817 36527
+63242 7738 45079 15662 48978 23063 55492 4730 57175 29774 65270 2241
+40298 29596 53390 16540 63343 34948 14740 30028 52691 21358 65388
+32542 8721 51843 34990 27657 32775 56092 26086 61625 29337 48297 25304
+53827 2504 27047 45282 23841 51041 1647 48402 24588 42882 32927 63059
+4678 36794 29029 65257 6691 40063 16285 44894 24435 32828 40448 3007
+37177 11024 21077 24858 13791 55279 18711 61687 23390 6083 50533 39215
+370 52573 11296 57767 7529 64189 35530 3143 55579 40229 17627 45894
+27653 35908 49774 10574 25191 55827 22147 3568 47303 13595 44181 16308
+58919 18886 64829 39905 14886 50350 29589 59666 13764 42048 2988 50847
+38231 4997 43570 16249 52584 28576 5745 43138 29451 7813 44084 33914
+3730 24016 50802 13466 26358 49012 17892 33646 51712 656 62451 14069
+34062 64921 26118 11264 48061 337 45005 34377 9125 47903 28581 36729
+22217 58091 32669 2446 35483 44458 5188 41570 16531 50122 19675 31944
+41629 23970 57234 1863 43005 60639 7834 44850 31407 5481 36482 20379
+60297 23868 49271 7387 47358 11497 43650 27977 8446 58806 10493 54489
+4620 60409 8294 22571 53057 39249 9045 61815 30563 40855 9963 49457
+6963 38673 29488 735 65359 39721 20156 61732 27500 10778 64641 266
+31926 60866 23907 35032 46024 32563 4592 30630 49736 35321 13929 56548
+6136 64849 12221 38570 13485 44853 399 49873 7920 21716 63403 41070
+18343 45271 36402 8984 32876 60619 14658 39601 31336 2523 57790 9894
+60061 26139 37636 20262 47320 17934 53563 8181 27327 45969 31915 50545
+614 25944 52830 21437 58370 16058 25218 49683 20342 57489 2493 37153
+13573 45541 16876 43058 15143 32033 58589 8893 24160 44670 28998 6634
+56270 36926 12823 46681 6053 23157 57232 25433 731 48630 10921 39714
+6830 36394 13403 37579 16669 40207 29731 49282 13218 40877 19847 59200
+30130 8092 53667 11229 23464 47600 18265 44341 15398 47099 12510 59892
+676 64485 8808 56469 25366 63130 30573 49740 65170 34079 28610 50236
+9679 34008 59625 11822 24984 43976 19106 45627 23480 38705 11973 22924
+46331 29373 7172 59403 33719 2164 63764 14033 33461 48661 14450 34905
+65433 29518 56391 26179 39017 7824 49856 10037 28272 60421 11810 44892
+7147 47851 18327 57817 24685 14522 61669 31929 48031 3195 36401 59059
+17949 53929 35326 16281 57652 28966 46770 18346 63630 39033 10897
+60153 7942 25961 44764 35284 23894 46093 2470 39867 54959 22160 59736
+31292 19448 64283 16690 54892 1106 49366 9887 52031 27633 59497 19443
+54932 25162 64505 13654 56363 1042 62487 9588 37175 32297 11360 30574
+38565 14557 61925 25470 57690 32769 2702 54406 13211 37888 30277 53682
+15669 65166 32763 18535 46136 19882 42848 17280 45715 34892 3148 24451
+43611 19459 45998 15980 61195 22308 32784 59873 11938 51444 31693 6678
+46349 9719 40889 52361 19245 37709 53369 14659 48963 2610 19418 55170
+26857 61093 11442 53905 31592 18053 51026 21510 31397 58780 27340
+35010 64044 18806 46412 36053 2490 24419 52642 5127 27015 50072 19158
+36100 51057 9552 61619 35342 25102 33391 40226 1001 49243 32489 8989
+59508 24900 34802 51813 4637 61115 16977 34786 64758 9133 47413 7205
+41197 55975 4338 39722 33279 25959 61395 28541 34141 60077 7317 54875
+37375 19689 47110 35714 1634 57887 25171 40501 4119 60180 27268 35182
+45350 16812 41065 58274 18950 61218 21469 54267 22741 59388 313 56438
+9693 59774 21850 62482 3960 44069 12723 37164 63825 19013 38458 56118
+9558 59445 2747 52129 21619 42566 20003 48349 29952 37914 21476 46663
+9817 43883 1130 12369 46840 3770 37714 26032 48574 17679 37073 57098
+15444 62204 34663 3683 59980 30364 54051 15946 62428 25962 38149 15071
+47647 19152 40339 56825 751 31502 50555 19833 9872 37006 4726 61823
+33302 26856 35429 48525 3863 40905 20521 64463 30709 39453 8614 34723
+48999 22900 9662 27393 65193 23780 10976 41830 1000 60471 30767 6234
+51292 10250 43076 1271 31712 52672 23284 36227 57612 19472 5231 59529
+12666 56482 14546 32889 5428 38481 10717 54331 3850 39777 26653 61422
+30162 45038 13617 41786 7628 47743 10539 38681 2827 36515 26133 39660
+22666 52998 17336 64054 41571 18156 54280 33652 657 47401 10411 45181
+27892 40147 21305 62825 1294 23589 42296 5126 50749 39727 778 63690
+30082 55165 10945 65480 31131 55676 14869 58528 5779 53327 35478 2441
+45671 17079 44188 36429 14697 53339 24657 56919 32046 4874 45696 26299
+8326 41794 28243 63913 38979 12522 44745 18936 40284 6679 62010 34146
+996 35605 46111 3676 50747 8786 25075 42264 15034 60192 29167 56519
+15346 34568 62882 13362 56885 5599 26768 45421 20359 53417 5879 55134
+17442 61941 14479 57090 41945 29367 1476 62501 14527 43749 12199 31001
+46593 15575 44511 26952 62267 32214 17219 31116 64848 6828 53525 10737
+50272 912 23648 48977 27162 3575 51811 12680 62723 31437 14393 50465
+17916 49299 33859 9838 62162 2594 51250 12197 30939 38488 7952 46626
+2895 41777 17295 43739 20165 46563 34828 7882 31079 52775 22855 56724
+5135 27476 46447 132 31840 41137 25062 37855 28447 57923 4964 55158
+26709 10291 50539 4156 34314 52896 19208 40002 54624 21737 58581 16451
+64276 2350 43482 30808 5130 51199 9380 29082 47405 18652 42951 994
+41659 10474 50577 5000 60950 31325 54208 7655 26634 38679 61097 6982
+40636 53579 21750 48696 12970 53383 1513 56090 13426 43661 16579 49513
+25337 2337 55401 27973 63935 1091 33202 57023 41333 12751 37411 56112
+19378 44810 12535 47343 35821 22888 62737 28134 56802 20962 43769 3583
+48018 9769 32237 50798 36417 28226 41468 22734 63484 42857 16027 49795
+35761 24463 51663 11119 37412 6245 23919 57459 18500 63260 34633 22871
+58323 28940 52541 8586 47283 14295 33240 49129 3270 24975 59923 5137
+50409 21245 35304 55930 13809 64396 8087 52318 27066 35587 55924 17730
+57704 12577 25377 48823 35806 6601 25331 49561 18435 41744 7137 47024
+26228 38393 12091 24495 57444 30998 52276 4505 22572 58622 34483 1836
+37872 14333 59194 17448 62366 30071 56368 5504 22219 31543 59578 491
+52613 15871 43320 20468 45466 28014 59761 17207 56188 20334 32456
+57920 4430 53560 10552 48757 8641 31588 46153 1774 44083 24754 34380
+63975 75 40265 16590 43617 11499 46843 30013 36856 6141 21978 51378
+38813 18482 48001 21886 37654 57823 5875 56166 35529 3139 38647 11036
+43885 52517 14644 46640 19865 43528 17584 64303 41300 10068 32872
+61703 22577 41722 6022 46002 34287 8344 58878 29899 16231 55014 22480
+40150 28018 64053 5061 52777 33534 25001 65144 11419 55141 32440 63668
+4412 19222 55438 38646 15221 45949 17775 33329 51392 15885 60060 13470
+54551 7466 62381 10838 36380 32057 14588 39298 62769 18854 58061 28497
+7547 60979 23492 4939 41223 10505 45743 29490 53720 12748 62829 27309
+39190 21777 58273 6877 54717 13801 65041 20284 56402 22384 42737 27607
+9066 23515 43011 59014 10156 22757 45172 30327 2021 59471 17355 44649
+20872 41819 22325 63470 19430 54558 9094 36559 50688 15402 43822 19773
+37135 51362 6417 21965 52049 28825 7080 50325 26386 64048 20240 55792
+2250 37585 11490 39944 6698 33987 65445 15615 41159 60828 21373 10388
+53062 3718 50251 9225 24874 58233 29799 6897 60285 15526 47029 19978
+53959 39571 3545 46819 30472 702 48904 13159 45467 17613 63524 27798
+59080 6189 40194 28648 46815 15193 44046 26543 63329 6549 24430 42171
+17287 45927 34179 12120 44642 7136 46364 28530 35087 61376 14661 22322
+59240 37910 2018 44740 12780 60626 30353 1020 64667 29789 48109 20013
+9284 27132 64241 35544 8163 26604 63546 21628 51680 23501 39704 3309
+50144 12292 33952 49280 8602 42291 24917 34367 65503 3952 57344 10147
+51569 7495 41936 10914 37678 48154 16126 45335 28336 40337 22710 35219
+60825 20186 54991 30060 8381 51771 15126 47838 12407 59102 29244 64527
+23699 4221 54419 27961 65089 11879 32168 55475 7760 63374 2724 23345
+42284 29646 13922 54731 19454 59442 24353 325 37802 28003 58260 4100
+38519 32076 18624 56658 40066 13954 44857 18406 54681 15833 65003
+26121 41835 986 47911 36314 6961 53746 14448 34871 44771 17705 58956
+13874 29346 42836 26820 7610 22171 40599 50374 25536 1007 65335 8597
+40160 62075 11508 30783 41809 22324 34033 48571 17653 51580 20685
+61149 44201 2465 33242 45698 14364 40738 51144 15489 45385 60040 18143
+56301 36180 7969 24344 47015 16191 44657 1621 49380 31091 38158 25848
+49822 28313 37590 4025 48667 16850 52705 32709 64708 3816 21098 37172
+55334 16953 63996 25575 38480 31699 5445 62596 10829 46876 6769 37720
+26827 60770 32079 21165 59340 4876 54710 10764 26247 42408 60319 1842
+40079 59470 31689 3938 36873 8595 32021 49920 21434 59385 23746 54433
+12924 26809 54929 28995 1916 34463 47511 18448 61896 27276 34349 47264
+1671 45702 20812 40660 33547 2268 63732 31810 15089 60725 36543 15502
+55315 28078 61952 5967 31985 41039 3838 35472 50899 13413 53830 8162
+56827 33161 11753 39694 30352 51965 1815 59078 31278 4289 60965 16670
+58597 33871 2552 50012 7934 32106 53575 12357 28048 62198 24070 51515
+20362 36484 50389 13907 41872 4033 62442 37457 49126 16048 45134 30006
+48112 13463 42217 6403 47529 11356 43695 20280 37047 60524 15528 54839
+21369 57992 10513 30881 48141 23981 37370 25952 64388 19421 53129
+25518 1985 60704 34321 12915 65181 847 50620 6511 41922 12772 38526
+59581 18767 41232 22526 52377 34122 2961 21144 39652 49925 15558 42473
+16891 46654 5216 36836 25791 41373 29153 52065 11492 61960 24642 33522
+41031 5534 51274 29407 60963 8483 36269 26541 50934 9179 48133 4655
+25650 52261 140 59889 28016 39324 2984 53311 19911 60632 31198 11791
+49092 25202 59327 8251 24232 48565 1383 35598 49356 4827 52017 31616
+60286 28319 13732 58733 30336 35704 51711 24933 2408 35522 54982 6594
+64120 3643 27819 43543 1041 42227 8416 27321 57158 23603 6428 61768
+24862 1855 37531 27355 34616 50763 517 22511 60432 35293 5611 55646
+22972 60602 20083 10344 63554 3020 36209 8022 58907 31760 12927 60294
+1368 46049 13522 40780 52150 28587 2943 51221 10690 47687 8109 50390
+34851 25099 54755 35850 28181 52915 436 40587 6265 46095 12865 41892
+16559 39126 62166 17256 32479 48722 20923 9971 46554 23326 53550 28605
+58629 16841 45376 4331 42247 16178 46227 35438 8295 49381 22550 64151
+7215 31440 38095 15020 59056 17526 54698 23695 65117 9453 56980 25293
+41505 8575 52860 28479 7187 32476 40896 9325 21509 38377 53939 15434
+48576 12099 24122 65061 19732 30821 38909 2397 60871 15663 57292 17895
+48348 35831 19012 50968 22295 41636 26240 14047 64486 18855 40275
+47311 3490 33288 52312 14266 39963 4787 59539 10346 27065 57088 18452
+52569 33663 21689 342 55100 11742 60127 3090 54554 16718 61244 30571
+57231 15364 65052 25094 1656 40757 33061 5070 36149 50634 18559 39146
+13840 49424 2753 33822 44465 5635 62685 39511 22991 6734 54101 17620
+38509 26193 57293 16672 62515 4741 26750 46889 3611 61361 7438 26331
+42636 57245 8316 30828 60277 2193 55969 29066 60693 21112 54594 13020
+59013 17753 45188 1314 50221 8049 64206 31601 15319 42791 21117 53239
+16899 62585 21659 59221 20222 35834 63669 11210 38148 33188 7648 48637
+22768 34945 9486 37965 21480 64536 35552 1803 41035 29212 62611 15666
+30596 55991 12023 61775 14853 47044 2055 48974 34549 6458 43676 10719
+20556 57438 28483 49844 16935 45526 25528 36238 56680 19588 65022
+17061 54770 37452 16355 47789 35539 10772 53457 29854 64851 8388 12911
+28889 44574 33089 14460 51968 31608 37061 8518 32437 53033 40750 15138
+46126 20907 51924 18199 47190 34563 26102 39001 18877 57674 25066
+11066 62730 34018 15252 40128 23436 60753 16007 56892 13679 32370 3474
+61332 14034 47673 18044 53698 22626 62780 24289 56195 28269 3574 53219
+9177 25173 63530 33294 16210 61398 13215 44273 5781 40566 14126 62127
+31710 56543 269 60566 19105 36208 53605 13389 39925 57179 917 44567
+7543 41410 29119 4859 43341 31545 17735 50208 14084 48120 35152 17975
+43864 65344 17043 56987 43130 24524 1587 60980 20363 56608 34171 49
+36080 58525 18107 52681 21664 46251 4475 41432 28999 6922 63499 10130
+47505 361 53887 36199 23923 54653 9755 23078 55531 41398 7341 46156
+18784 43743 22978 37849 47563 6284 43723 25023 7800 58008 36147 25865
+41586 20308 38569 22931 46629 34315 1076 27296 44986 5922 46817 29091
+52189 18232 63683 26656 2432 56816 7929 61796 19870 55116 28342 12734
+50143 29137 9831 49213 30527 41460 24514 52209 11717 29442 42956 22017
+49724 37049 13951 51180 29649 36132 49459 13206 31861 50953 13985
+34732 45398 24739 11018 43445 197 30254 48664 6342 36397 26753 55734
+20587 43433 18206 37430 54266 10028 48920 2922 45893 10442 44097 1533
+31209 49455 16311 29515 47339 17379 52638 12288 62011 44276 27859
+56489 4031 32776 13383 57020 18172 43944 4495 54402 39457 19235 43719
+23535 38866 20959 41119 11557 52385 24029 61073 29254 48674 4975 44144
+9929 61583 34710 13904 50218 5942 38713 9479 49654 31597 4420 63778
+12528 56138 31643 18331 48828 16260 54078 20951 48150 6870 63528 40051
+2881 20748 64588 25616 45709 4436 27537 56300 24178 61473 12177 43514
+5749 62890 9638 55140 32360 6757 35172 47036 18213 44839 27191 58309
+4083 29694 43116 965 40871 51413 22597 42339 24572 32650 65315 10368
+36742 1941 45104 8174 47068 34263 14274 36037 44304 4578 39224 49707
+556 41802 24365 64992 21868 46986 27073 8874 20732 50397 25552 42762
+5501 29828 45506 26009 16988 49062 21790 52523 11840 61159 34987 14523
+56278 35677 5792 62015 30623 1400 54135 30080 3325 47387 33393 4921
+60116 34471 26457 44749 6990 43434 26062 47164 9686 44820 7376 37687
+29571 65390 12707 55157 23339 40158 33511 27579 62151 11205 48429 6015
+42943 33642 63273 10615 21034 57298 29042 64315 9309 56256 2860 32887
+60715 14756 54086 29461 40297 10196 62045 5421 53177 10743 62947 7731
+25207 55542 37824 17419 51407 13546 58990 7373 44861 9815 46465 29469
+41007 22843 34703 46226 11304 40525 59001 17561 36462 57730 14145
+55635 3444 61832 7688 34522 48125 2614 53705 10101 30641 65339 23575
+11311 58363 20177 63259 745 36057 62343 21975 10031 52866 40335 18365
+63687 38520 16307 40849 65405 10613 30765 48425 12143 58455 2188 27953
+63512 19202 38142 30121 53743 15739 39688 57165 7109 33510 53923 5526
+61101 26414 37345 21032 5002 50191 13842 41443 52053 23216 36642 50824
+11144 47702 31411 9374 60089 3355 53711 8432 63323 17764 58000 16194
+41782 3108 38787 22455 60656 18481 41200 30450 1558 58404 23294 32644
+59800 24617 36615 21460 45983 25559 41360 231 50415 39138 5718 32198
+40360 62243 25793 52797 13451 29736 58438 41658 12523 49116 18071
+61998 36826 8841 42421 282 39419 21532 51239 23842 44656 16085 50140
+27789 61534 469 56673 6287 49660 12752 36978 53901 18029 64937 30926
+8325 58496 11471 51833 4354 38879 26154 49648 31844 19743 57437 18562
+64220 28833 58704 17751 54089 14708 30041 52925 18245 48156 11899
+53949 1714 51819 33057 44752 30946 9941 63146 21845 55414 3155 59672
+33006 6109 63335 25266 39615 20318 48070 29825 118 52434 26204 39217
+19949 59126 36469 14368 58122 26307 12447 51934 18459 49468 11485
+29491 62371 18953 55101 16387 63023 27185 32647 50631 9362 24736 45443
+15472 49752 3385 56795 13280 35414 43737 19688 60211 26773 1580 38313
+30029 48648 24569 11 35223 48116 16879 51126 19960 30532 39502 1931
+63968 16327 51482 21019 42969 24110 44370 18279 40115 50375 20950 8964
+58281 31039 36636 23229 38636 30697 60101 17060 54630 13493 58484 1187
+30315 63210 4567 23775 45758 157 25267 43870 20030 47202 15446 31677
+58248 17152 63625 35331 20642 45810 1303 43677 35290 4359 44578 17164
+46377 25100 6643 36638 56605 32386 5593 49055 33337 8470 50476 24371
+3404 34578 57486 5096 39426 21497 46610 34821 7318 32909 57822 6493
+24203 65336 28193 12534 41798 62086 14910 30580 40912 2081 57571 32684
+42774 18114 63091 25881 9141 59770 5615 21197 63882 34938 17162 50320
+36317 22527 32898 41673 26057 47757 5410 32091 64348 19492 56337 12580
+34764 48013 6981 51280 21403 41880 11736 47855 14921 53586 2159 60815
+13800 53266 20928 59671 26213 13628 43961 58691 2584 42462 10857 37610
+23058 46539 6490 27361 56981 856 39052 10805 30739 54546 19067 59247
+15392 55673 30540 2502 35982 64354 4386 41993 14366 43886 24156 37917
+19188 63349 28086 9855 46309 35211 15183 48480 36470 21530 35115 55849
+14363 57999 7663 61580 37664 12470 43807 205 51064 6959 48042 24242
+60706 11391 35314 58101 4768 38438 28582 36461 13666 63824 4911 58427
+18271 34587 47318 12182 41597 15823 50699 37313 13004 43679 2565 53770
+9081 62944 40393 16333 46220 11761 50736 7593 23346 49542 8800 35666
+45358 22134 40488 6400 53243 38193 14357 47795 4250 33341 38652 1675
+56319 16219 59624 34816 938 61806 26517 44605 20077 51393 5408 25253
+52161 12828 32449 57534 13839 51925 5487 39081 61107 17876 31106 40489
+10755 63317 8274 50701 34456 23271 45032 3374 48505 12933 59075 1559
+56706 31034 4227 64130 41868 27972 3008 63344 10996 54241 762 24680
+43487 6195 47267 35680 25087 43934 15792 37863 55445 14918 64168 39243
+8167 59939 26181 35317 45565 5368 40919 27345 8805 58825 25378 56509
+16269 54125 25905 32856 55364 9027 57994 29069 47192 3199 23130 59302
+27040 14787 56951 20227 60132 28974 51348 13551 43903 23242 62776
+14894 56312 25739 45190 17980 40955 47402 3924 37093 51363 23534 2682
+35518 56190 18921 50875 23383 8717 54204 30829 637 46972 35443 27796
+33991 46077 25992 82 57619 25000 6525 64904 12376 57037 774 29283
+54435 37137 9640 46467 31101 50591 460 25935 64593 12892 55680 24841
+63485 3932 40391 28717 46945 19139 39631 5396 42996 10043 36578 64141
+22689 11629 33726 16511 57388 1707 61271 17390 54902 35139 14914 33073
+58699 23689 48779 3615 44429 29430 47658 6135 40684 58451 28945 11923
+48082 19686 53160 34579 9518 54878 31878 1650 39202 57322 24143 4910
+59605 28894 2376 63689 9528 30565 43172 20762 41412 27100 5282 52659
+23441 40253 21984 42752 31774 2512 32571 46037 7562 22368 31641 61738
+15982 56040 26233 40151 23233 36146 49652 2316 28440 57696 19768 65213
+8909 29730 56693 19042 60036 17180 45200 21706 31968 57196 3968 63901
+28093 33901 61314 16235 31461 62795 426 56153 15924 64664 33172 2334
+57394 35420 23014 60289 14930 48956 20199 40054 5664 47812 28379 36858
+9750 30802 60702 15685 32833 64933 3750 40017 49773 18030 44724 19930
+58949 33631 14110 50086 4175 58246 33815 24194 42653 17712 56959 12319
+28484 60973 30952 38407 26291 36902 33026 16581 48535 33557 12429
+51840 40256 19649 44216 21526 49142 34298 11738 64574 31962 17619
+61129 6957 52138 27648 8636 50920 32296 19296 49817 29409 1464 64710
+11989 52911 15805 49115 31009 39064 5972 34193 50367 7990 61045 11959
+38428 31246 16397 51966 18966 64143 35231 9143 51030 36258 1849 44692
+12349 42074 19800 61462 16880 49997 3758 41026 10748 49562 970 61868
+13943 33497 60187 21397 8860 58056 28804 49180 8094 43779 11423 39188
+64340 16632 38017 58433 14424 54768 3178 61582 12778 53375 32719 13634
+45099 35332 27949 51286 21367 35570 45075 13974 23972 55271 22038 7381
+23630 59123 40214 16476 44804 29672 7297 37062 27662 50822 11002 34558
+57297 11903 63188 18676 55250 28822 3522 45308 29586 55467 36872 27741
+50623 24767 43963 11260 49860 21513 51376 7353 42117 20057 65389 26067
+9236 34110 63962 13165 20628 49082 22835 32975 59741 7699 26962 65238
+16906 41399 51950 21266 7826 50378 33348 17523 54114 26237 40741 23758
+59943 1221 46812 15301 54312 33629 14872 60200 8642 56740 10437 65520
+27888 55181 16463 63219 37763 50066 9598 43221 3793 49099 10890 57029
+7917 26748 62222 39962 6482 44933 36064 24267 47646 4053 49822 30539
+38077 5003 51694 10417 37112 23836 40879 13568 45169 2734 40401 52677
+17871 48660 25767 41986 9825 23329 45867 30043 8058 52113 10065 41489
+25315 64341 11681 54095 17451 55628 18895 57675 41219 7492 37897 48936
+18591 45277 27394 8888 62605 3268 41591 29509 7762 55332 27189 42060
+21365 53029 895 58797 32385 4604 36695 49994 21653 9886 55694 5811
+65302 11474 53429 7045 24822 59472 22662 10222 55074 5195 62484 14039
+56214 27919 37859 2872 53340 12494 48885 18908 60086 29793 36792 3898
+59217 13203 38022 51405 18644 43508 21735 60904 463 54981 12877 61463
+15123 30625 42986 17588 48459 1930 64903 40717 4947 42714 15052 45224
+30519 17427 62908 25965 34885 53794 7497 47307 681 37955 29975 54746
+16128 60663 29424 37279 20910 52450 11329 26569 54609 39432 18333
+45160 14313 63903 32351 58750 27636 3805 48028 10030 33234 45446 22656
+41339 18770 43195 7673 40422 61221 16186 56287 2364 38315 10320 62539
+7047 59793 40134 1821 41693 62291 34044 14181 31426 52453 3218 39589
+60423 15259 54289 20135 62668 4848 26098 44867 32583 48748 7740 37811
+52439 16982 50051 6139 63360 9344 39026 5530 29719 64786 3251 40165
+25754 62706 15975 52592 12721 35431 50348 16830 27036 50955 34583 7242
+57239 1802 38863 30273 45268 3146 47231 10782 26216 61236 43969 14675
+62359 38493 10568 49831 7073 45412 13404 50592 28679 64581 3391 48181
+24626 34384 50210 20597 38351 15609 41873 5678 44799 26631 1469 20416
+54313 23878 60217 18620 45644 19750 32587 54170 13277 22543 51948
+26200 467 54670 20697 42131 25834 8441 64649 32436 19533 59485 15654
+54360 6562 58874 19464 55079 25070 5882 43395 28906 5160 58341 30762
+55311 13198 63673 20888 43236 27700 53715 5081 30000 43978 22534 42271
+7038 46046 2643 23751 53396 28875 1246 58823 14299 55872 37237 21642
+52684 11759 64022 22120 43297 12390 65189 7065 38891 30240 14490 51677
+25686 64728 7522 35234 46549 17437 42684 19120 45531 21999 62126 36099
+89 34220 46896 26312 38074 23570 41633 4299 48400 16100 44813 27053
+40556 22187 38557 1636 47412 17037 44423 21623 46698 6790 31168 56530
+4170 37158 25546 45249 19009 41883 21507 47480 2770 35985 53034 22079
+44227 24790 12380 58732 20971 54256 1070 60441 40227 7022 46733 15173
+31439 64331 24753 33418 58895 9050 26759 44177 24055 8412 55258 31355
+4818 47994 35575 521 30743 62841 5052 41573 25899 1053 20713 51491
+35743 24528 53465 21392 5862 65444 10788 55605 30097 58336 23602 4821
+49814 32101 22058 48788 33369 24968 50880 30907 15564 57348 33182
+12108 42701 51094 6190 35556 58048 18249 32822 45793 652 42179 14528
+38623 54931 21857 1391 26994 61375 23531 9572 59506 24085 32765 19170
+48328 21663 59072 35454 14240 32667 47810 5294 35981 44959 1552 31681
+56414 4624 60146 37768 1083 61624 27617 35444 52722 15127 60836 18990
+54116 23234 59269 34561 4527 32458 41068 27 29359 44397 18965 62744
+30042 55154 23250 6456 36059 44167 11936 63063 2082 28853 44117 4143
+48812 23909 59622 18680 35719 57457 31032 36363 7115 32178 42259 854
+64814 38971 4448 45333 34501 9618 61255 35210 15279 62663 13745 58242
+36581 17676 49157 41084 1975 31178 43861 26579 34758 47696 9286 37473
+64230 10998 59715 35492 13924 37854 3503 50318 25493 37110 781 61356
+13540 34624 51222 2869 62582 13119 59803 20874 37362 64209 14573 44005
+22674 39105 33857 6210 30192 43586 16502 46442 25781 54030 2101 37079
+25168 47778 15429 62279 33233 11290 43746 15896 30378 54869 618 59924
+27141 52122 2744 41272 14230 47845 27842 56826 7485 61420 12716 53146
+18109 59128 24287 62884 10103 57434 5373 65196 11890 54316 24176 63478
+11202 55934 24824 62037 15207 39459 27333 50099 9137 29428 64279 4982
+53863 24732 63453 20882 6461 61637 14321 51473 34210 26509 38140 11203
+48222 13478 32190 55363 22645 58063 4513 39283 10967 50708 20548 35534
+64928 5657 53911 38455 17531 64080 40467 16660 59041 24406 52090 15383
+48361 17594 50453 31140 43299 10380 61321 6751 29104 59179 39527 17096
+50779 35844 1897 20890 48063 29007 39160 7995 64091 11465 58269 3790
+37660 9438 49041 29261 17699 53005 2772 28855 63257 24559 10362 48191
+8001 26953 59273 22917 56271 28595 9110 49396 31722 45917 15914 43896
+30404 39861 957 45859 60004 3857 41105 12722 53008 26334 60310 17063
+56135 11875 24832 60931 39281 18398 45550 25040 10521 46741 17411
+43916 8760 24589 46391 5674 40666 12714 37624 6584 48944 29819 15794
+56141 23203 57865 5645 52225 35031 3194 20440 40156 59268 16682 30927
+49804 17575 39073 58364 14457 61471 19954 52622 12062 50523 8120 39840
+12826 64344 28040 56358 16927 52968 30412 14852 51299 17592 59623
+30536 18133 48647 31858 5305 45732 28637 1189 55793 9803 26670 62407
+37841 12643 64954 869 31010 57628 15384 29871 39797 16922 52212 22580
+61724 27751 40316 6778 57816 29184 39260 23874 59276 16751 37901 27943
+36480 25541 50008 11821 33176 49388 10071 54188 8099 63589 24867 58174
+592 60826 34329 5153 38250 28849 60419 16630 35533 50467 5824 40771
+60068 2362 56569 39450 18813 42165 31183 8376 32421 60760 29181 55923
+9540 43512 17211 40073 20481 42896 1882 46161 29842 8124 35034 46904
+21443 42492 23553 44238 19620 40242 5777 42228 33381 2262 32259 46129
+7819 63040 12569 57077 38508 17659 48752 32913 7781 31707 46244 34556
+28531 37522 7413 56803 3549 62248 28182 34909 52704 21243 3064 43632
+12005 48860 18385 57183 28798 2835 48010 19046 41019 33208 2000 46307
+10284 27837 51043 12907 41616 6896 37764 28077 60673 7818 53779 21950
+47678 18007 33745 49264 1444 27199 44285 8166 25440 59973 36661 12121
+62071 16907 54532 24405 43921 19264 46936 22334 61172 32266 5083 64971
+34934 22703 45260 15410 37799 53638 19779 65494 34669 10604 50234 6655
+34488 64637 19626 58227 6936 54563 3091 65371 12850 56024 14410 34278
+51433 16408 44330 76 45568 8516 50528 27984 34385 47206 22259 6272
+51655 13630 41078 57481 21178 54648 13908 63649 38123 20234 57836
+25691 63136 22136 53507 18314 64547 35964 8701 47936 14248 41908 12726
+24978 60601 48417 11687 33819 51654 7447 35419 55548 25456 10932 47043
+27164 37391 801 40590 28412 62001 22497 49503 2887 41555 12141 47698
+35808 9359 60490 31925 43523 1790 52796 39812 7329 54015 40856 11458
+52554 39474 20001 42746 52137 21475 7143 50054 18671 51812 20911 35904
+47118 3234 54308 32322 1307 46778 9059 44925 20470 51728 18263 48346
+11405 44712 6642 31924 56926 9495 51923 215 29580 58083 4946 26764
+61944 31890 47706 16185 50887 19286 48333 28175 11156 49146 14380
+44480 8525 51857 3165 28551 55874 17601 24776 46863 27725 6483 62645
+14294 52800 23463 48217 20270 6273 35578 51310 22437 64870 4058 54084
+28464 60329 14790 36433 55569 20491 318 51493 13086 55759 3363 60448
+13968 48643 16571 52503 27359 57491 17426 53344 35164 21333 32936 3292
+43318 14085 56011 26911 59091 10655 54679 255 59757 23080 43307 32242
+14563 46949 5434 24238 65126 33625 16158 61146 29964 45364 6630 37737
+54111 29695 11516 56338 22077 60397 19705 51879 35174 3188 32967 64623
+22672 56366 2307 36523 32073 12866 64957 3399 40367 57882 15425 36999
+62502 19698 48676 34086 13999 50382 32527 3585 47218 33785 1217 29387
+53272 6290 42444 16693 54034 24465 39730 8578 60247 10039 55316 1194
+28372 42477 4591 46429 21421 39874 18884 47054 3425 43292 13351 36601
+28848 48213 17292 31923 42677 25144 10124 27628 64267 23175 56806
+18964 31566 39122 2315 63887 7951 57947 33634 27357 63250 2681 31229
+39212 4897 48545 28515 2901 51550 10377 43506 785 41315 11596 42970
+2453 46366 24780 34292 64040 19422 55462 36091 8076 32516 43306 615
+28926 61813 22390 4428 44961 32824 6155 54732 12908 63797 15129 43516
+3668 46212 14216 55027 21487 61183 5974 25645 46481 22951 6746 25282
+47161 12696 24177 64403 16777 26534 59231 23056 13023 61838 32337 3698
+33918 56361 25088 40230 14055 61470 7838 32928 60802 11747 49636 24141
+34569 56615 15852 63123 12427 36624 4128 64806 19219 54986 40239 14907
+46763 18814 63763 39416 16248 47347 41153 20503 2982 28147 41028 4378
+42664 13796 38948 57232 20711 62920 18710 56222 34149 23452 46001 9151
+38280 52878 12499 36783 49085 20988 44893 3681 63755 9632 36640 58382
+25011 2246 41601 15083 48475 35715 9042 33799 49867 4790 44026 32287
+61467 26504 36444 28886 37497 25704 51069 28326 61295 10383 41149 5178
+43353 23929 1049 59704 42484 23740 58087 31205 1576 46846 19744 43614
+18067 42102 13692 48644 9232 39686 54793 19449 59117 38591 9343 41102
+52106 35811 1482 24479 62059 22766 9809 63187 42561 32119 8121 30908
+44680 6282 61184 25485 53700 8715 45774 13731 44468 16824 57309 37505
+19667 45833 29657 7414 51980 31992 12493 54200 4242 63578 30714 7050
+55339 26629 41330 14909 60721 40161 12009 62740 14195 48020 277 43879
+13530 52077 30064 46528 17538 40047 61720 15957 55807 29582 61142 1996
+57747 26879 52064 16403 39724 62184 12280 22970 56668 37388 4709 49720
+55369 37959 6570 42529 10412 37111 62509 15560 53873 21169 40870 19071
+53408 11003 34199 43713 15420 62253 36028 18231 55925 33236 16039
+47695 31660 55677 15381 58846 30365 54998 20815 60071 3959 30617 45187
+1750 47122 29994 13678 63866 24290 46427 14807 40421 57330 19099 64909
+37982 17331 47657 22827 53168 25458 58183 20149 37951 24935 45411
+16156 33730 58988 3122 55416 33887 63551 16272 56824 36423 3423 33978
+47348 2108 34876 48595 5902 25446 60345 41694 11019 46501 4641 43394
+23433 49048 17418 27204 42232 19595 65253 6931 28344 43801 2072 32113
+58741 23144 32985 50709 1771 24977 61918 5510 41672 31769 8233 52905
+33743 12236 57295 36620 61019 13367 55023 32509 65353 6777 32024 51229
+1394 40318 31387 13418 59468 20720 63078 31965 4873 61403 16774 31868
+57826 10971 33408 40290 25797 53214 13824 33669 61282 18135 57208
+10463 25195 63397 16465 26066 58618 22941 10841 38943 6289 52862 9850
+58865 7839 34392 668 31066 45215 19253 64970 14592 51724 29750 36234
+7166 47904 10131 37656 60429 12300 39953 4555 64660 24155 55730 26887
+63932 20512 2015 42001 10674 30346 49951 25548 7846 20701 53610 41533
+15610 49283 40245 20966 64 59697 27024 53175 17016 41635 20763 46994
+15900 36883 27485 62210 24133 49470 5448 26848 55789 11267 63037 25819
+38045 2821 45608 21688 40631 17875 53742 34882 20453 64640 8948 52591
+32401 17750 49627 26936 37334 28677 63709 19103 49541 26875 3558 35805
+58575 26165 11298 49475 24892 12601 36318 44774 31132 9765 32382 59790
+25499 406 34753 46967 7542 26675 62628 21870 1924 31232 59326 20008
+52142 28349 5954 46699 24162 43014 13937 44587 647 48955 19974 56794
+29525 8373 24009 45733 11640 40254 65128 22731 8104 28071 48610 26465
+6920 38936 10278 36382 50186 11416 33113 56747 16047 58590 36584 20967
+54096 10721 52241 27278 9643 50900 1326 28789 60412 8439 41094 5104
+36780 10599 50860 6884 63405 63 39523 51873 15039 29959 38832 11709
+40998 31186 8129 49584 27594 60728 14701 31226 63974 17193 36197 53331
+9322 23592 58333 19691 63404 12105 56085 2185 34424 50937 5413 45638
+13103 39066 52628 18585 37641 50018 14788 46258 8863 37400 28915 45759
+17436 30780 55773 20006 58881 24793 1922 50593 25978 9159 22541 43240
+27000 10603 24381 46407 18113 36519 27287 47517 5982 49704 35928 459
+42650 22267 43977 19797 50205 1486 37999 22733 51079 16512 47321 1177
+30833 45312 7775 46957 34643 30267 44512 810 50872 40053 12794 41955
+54542 19333 63085 17240 45795 19957 41644 64438 21003 57869 8561 53895
+26717 38287 8158 62269 13384 55135 20764 65458 17056 28239 51234 21871
+45370 31956 8627 36701 3958 31364 46294 28878 62639 23039 57318 444
+56053 31585 63799 28297 9517 59467 3874 27689 52243 36814 14456 43024
+3496 62455 10962 57084 1264 32425 59429 4301 39635 9336 34815 60023
+41761 223 39581 18357 53189 15051 60588 26975 57105 10606 43362 438
+45805 10052 36446 48864 23277 5772 54272 34609 3004 58710 8318 33151
+55662 6872 34600 54326 22431 5586 47766 33852 2636 35375 50908 7071
+22664 64047 20783 45785 5836 42845 30451 52921 18410 60389 40005 11354
+43098 47753 17213 35134 48269 2977 58162 32698 12335 61455 4335 57248
+30345 64918 14928 40583 4041 52364 37680 58058 174 59996 25310 5342
+52436 33769 62638 4167 34107 61792 21903 52802 27453 17340 62191 21519
+40571 28943 3732 50092 5994 41053 33269 2910 62878 36039 23713 34250
+45952 19781 43991 26644 57026 21167 60930 27663 43990 17615 49929
+30864 9691 32968 62877 19915 53523 1025 58612 34447 20972 54799 9155
+35742 49876 7479 29626 45310 15882 32718 50925 550 38070 30304 45676
+16411 38460 58549 14882 62492 25217 57100 31503 4387 60553 25210 7564
+55948 27168 60991 13827 58217 7430 54412 36763 3117 48073 14189 37321
+65021 17606 44363 32116 48791 1133 59821 36985 55858 2773 61547 9627
+57926 14702 64553 10711 26273 51018 29112 11493 58670 34035 10049
+65121 29298 55254 4699 60461 12411 35823 64371 19232 54980 23807 3508
+52548 20637 57818 31647 6854 65365 33330 3179 47522 30350 39915 2066
+56155 31784 12745 47077 24172 40183 33034 2736 49306 31828 17988 45844
+26145 41292 4102 52872 34364 6358 61915 14203 48204 28049 51454 18722
+58212 9947 52115 6639 37361 15753 45441 17067 44052 5226 48481 34842
+25859 33790 58187 12589 24533 49953 18780 47928 34330 24660 38403
+28409 49608 12109 54349 21186 52036 28796 11743 21793 49839 23020
+44848 4950 42386 32435 8735 31185 46888 19189 60244 24683 57382 21687
+2531 35663 59576 25888 10680 46501 22609 44824 18089 38422 24043 62157
+14458 37987 63884 19323 54829 28749 62928 20025 56758 33225 4351 52785
+23884 55133 15272 63661 8790 44982 2704 31518 53487 19239 10624 63026
+7757 25963 41980 14272 50037 37866 20432 49438 27104 11755 36871 25811
+59580 31940 13191 21288 30415 41895 15632 48251 29510 37428 16473
+40621 20009 46753 9659 44075 1139 58321 34975 6106 51902 9444 65401
+34888 23391 60854 17290 56542 31284 14095 44392 6761 58929 10342 55861
+2803 49979 12586 42788 1854 39858 11763 56258 36038 18920 54064 41338
+5683 44058 14498 48684 22163 43084 4707 37878 22485 58013 18136 39807
+57237 2691 62871 39632 14683 31670 54786 7348 24264 50473 26376 8688
+32743 39718 260 37022 17794 47316 10736 45309 29951 39547 523 33585
+49445 22691 40019 32485 11060 62894 23643 42818 6730 27406 53659 4794
+62305 19634 52618 21711 8397 28732 44431 22767 50310 24146 44021 20211
+38117 56734 16207 63872 32950 3409 53803 25922 42334 13537 20196 44592
+34015 28052 54021 5566 43501 11501 39341 62276 28603 8315 38005 17318
+46459 28263 15690 60667 23827 10427 50723 25039 36959 5306 53249 35504
+3786 51471 15915 60608 20352 55617 40119 2151 50491 11846 44546 15849
+48983 25054 35564 53601 2318 60014 11184 32481 42480 22383 36487 26332
+49452 32312 13315 60281 23821 38323 18218 55321 13085 47469 7091 39039
+54883 4907 63981 27987 9132 55704 5281 65211 15007 40562 17840 46492
+1691 63809 33572 54718 8451 61486 13151 55073 17289 48014 24195 65093
+4690 51408 35445 6192 28661 50026 30025 45041 12788 38369 65285 16377
+56279 13126 53059 2181 47423 9724 43216 31540 12366 42089 7844 44107
+13683 41076 16197 48240 38086 17473 41118 11439 47614 23456 38030
+20589 51940 16832 35249 57713 44462 21022 33319 55535 18145 65273
+26671 1245 45433 8748 40107 54219 6558 45346 9734 49714 36249 64454
+6978 54971 31888 9201 61148 1953 54736 11197 59345 24850 51312 16252
+40639 14773 47367 31120 19713 44513 15369 48324 9076 29707 44113 11543
+37864 53232 18401 49258 16086 40003 28079 37210 18376 64622 23833
+52126 22298 46014 28392 8222 65090 2146 26687 56576 22607 61666 29238
+9480 65360 19003 48197 31748 193 53623 11767 26450 51341 23220 6315
+59401 41657 18429 36711 56751 3455 64111 30608 54930 21033 53244 11398
+61875 26909 55256 15216 64502 19123 53349 11892 38417 3711 65514 16087
+47022 29210 13041 52552 30976 45438 12648 41124 33068 7327 30937 46145
+32340 50786 16273 39174 6547 41499 2230 53426 31384 4070 41997 8066
+47989 38843 14959 47404 6017 39354 61704 24600 7527 48130 14464 38486
+22954 58935 29709 9903 35609 60152 22632 55733 2308 51919 35912 8652
+34720 57021 18776 63836 16944 59565 27468 14521 62471 22947 37140 6889
+46924 9596 30371 59151 19114 56854 21546 62577 585 42699 9320 29895
+43980 21255 38568 56483 863 61729 11582 55391 4350 64451 39112 3394
+50903 10944 62844 2279 44582 19494 65522 31360 17367 43664 11779 37503
+51778 21629 45482 18649 43642 6536 61338 34437 23641 43396 5799 26083
+46172 34119 28300 35319 62275 1171 52903 13826 39914 29949 15210 63205
+39496 10992 61844 17017 56571 855 32160 41741 4715 36645 25513 59777
+32347 20810 52281 918 56425 18197 60156 22868 53118 38 60848 9028
+27559 57535 1570 61593 28983 4193 58977 33409 9653 64995 6014 27362
+563 37642 51191 4849 44920 9095 35718 52700 28628 60457 17244 32863
+62159 18937 56139 23159 2216 33702 46777 19549 38726 50176 18844 42486
+21910 45232 34782 2840 36167 65017 23338 54640 4771 61393 32926 421
+54269 25198 36025 52441 1417 64429 25698 4917 61187 32706 25067 62573
+5507 52430 33009 6619 38227 11155 62263 4573 58509 34093 24697 35456
+47397 16934 39808 3919 45667 35017 26221 52044 12098 62589 40663 19928
+46553 33902 9889 35070 49179 25692 4144 65489 11520 29436 44460 13761
+46905 5833 42770 15523 44394 32127 2673 33128 41269 4766 42748 22326
+61542 18307 43002 24655 51682 1036 60067 38072 4155 61685 15936 59190
+21092 55329 28228 64346 14007 56592 4553 63389 12886 55652 17774 62203
+35340 15281 60646 23623 52201 12863 27486 56456 21818 59363 30678 236
+35094 57524 22398 62903 17942 52019 1712 44776 25009 51050 4357 45407
+12258 40046 18248 58219 27219 49056 979 43489 7561 46615 10929 38311
+48798 29200 9993 56586 43224 24431 64056 15470 37325 32657 6673 38631
+33379 27771 58483 22594 55945 14671 63319 6177 19910 40695 29638 47296
+17441 41825 12254 30759 57722 19792 42679 21858 41259 15302 51189
+35998 1182 60660 26568 56721 31984 1905 41481 11213 58377 30200 50745
+27271 12687 55430 15409 38972 59284 20067 2602 51626 7709 25495 42992
+19708 36483 58817 11281 53374 31991 20964 52421 5163 42914 24409 47058
+19641 52038 28290 63092 10203 40644 6433 58042 24784 39493 27577 46960
+4040 37953 11631 42751 24440 36299 50643 13075 43222 20166 37145 54153
+14724 49182 23899 40578 30308 49989 61411 25223 14816 60083 32491
+23211 58647 21368 13450 34170 51523 2001 24239 42941 5055 41279 60365
+25638 10374 62446 3536 26945 56345 13516 64149 6527 28279 57455 29508
+7357 46160 12747 42743 16792 38975 59532 28402 7076 60273 21676 41375
+19066 47136 28694 41210 253 51138 12881 47557 15616 59984 26127 54844
+33732 19830 47869 18166 43304 13719 52644 7214 60344 11487 54383 13548
+57615 2333 30066 45148 6966 24323 58868 4977 64877 21715 44812 16261
+54248 29979 43378 22141 60713 17923 41024 22379 59501 18826 63800 7271
+54261 23684 58967 17146 51889 13319 47991 6127 31721 57326 8500 28676
+44245 16918 32246 41581 23394 49649 479 38779 9745 50087 2476 40197
+19302 37688 26922 42522 21847 46956 28453 5538 49372 21008 44921 18566
+58344 36528 2056 43199 12186 49113 27638 46653 10235 40815 2942 42736
+12879 48855 20233 64745 13454 41966 21685 62626 24266 44375 5045 42078
+14370 53044 26147 38894 30250 51973 20838 1344 54097 34818 19473 32538
+32 35143 52062 5071 63166 27085 53490 10573 49640 15260 40428 4852
+36879 27746 50683 33518 52586 7992 25608 59572 22195 54523 18699 35289
+47569 7563 53506 27554 58961 8935 21616 48966 34982 6435 39434 14042
+61801 22447 53087 34139 408 20323 56833 41051 3974 50515 31127 9637
+40906 64769 22360 37924 57615 12231 48680 28987 3120 33950 41887 1622
+47446 13093 37814 18678 51187 11847 61036 7501 39497 21830 50412 15987
+48229 34976 12758 65127 8465 30377 57421 25628 64339 20412 55582 6253
+29268 64884 16773 56021 7397 30935 42094 1216 60710 13851 56162 20372
+11789 46838 29583 38418 12735 46506 3998 40805 64013 5545 38804 29893
+48048 15929 51897 31373 16902 53981 39799 16345 51148 36817 7652 46068
+35696 23784 53502 10111 49393 22389 34276 62969 21037 52648 11783
+22285 49211 33706 14942 50693 12619 55156 7695 59652 21284 56699 33682
+23125 38252 30349 9442 48906 682 44491 31248 9157 54492 3237 61432
+23263 37464 28306 46606 21161 42297 19482 37550 61131 17129 36248
+51037 15199 36889 29176 53223 1451 61759 8414 39373 10251 52683 1074
+48981 9433 50179 1843 36973 28786 40588 20534 47712 9810 44757 30891
+59933 26881 34868 50170 14587 35520 53590 21736 56176 6405 57821 10820
+30331 43920 18859 45892 17186 42930 23523 60311 12106 53805 126 60009
+8997 33439 43144 11754 54668 1046 37860 7099 30832 62725 19504 53514
+6700 63503 18898 53058 20643 56057 31854 61099 30142 7212 34251 48022
+16142 49677 6408 53360 15027 64338 21892 59303 34094 11660 61909 3971
+23494 61035 40729 13578 64751 5845 57700 45001 28008 12903 47868 16888
+42374 19872 60747 3671 31308 64221 25431 53234 11920 41964 13399 23109
+65305 43290 2155 46369 8353 51208 985 24939 60861 30751 4050 37420
+29309 57368 24783 12172 50354 23307 45856 17087 48373 7375 24876 63244
+36278 7890 24678 64436 35748 17685 57847 32862 14048 46927 16921 32712
+51153 6596 63743 24766 55304 16141 59769 19337 56019 26241 64284 3254
+31555 36893 26116 56835 1531 34057 60501 26473 3415 49239 16498 54056
+37124 14663 50253 5123 44450 14003 49009 37668 3197 45632 34337 26533
+50347 16023 47277 25768 37651 4524 43684 54321 7030 63711 2238 55113
+28932 56647 10913 32427 53716 12256 59314 8091 63516 35276 12729 49104
+5783 30446 58754 24654 12607 59819 31085 545 48395 15170 41456 17790
+60166 1510 30484 41122 3375 57756 35502 5008 63491 40288 2743 44954
+20718 31536 36677 12150 39021 9209 65184 2258 57755 42146 14173 63685
+15958 56341 36726 20805 45708 30554 10175 49923 512 33065 64513 5251
+50619 24689 8648 52848 27763 3031 42282 56544 12867 19458 43732 35951
+22681 48282 26774 33492 38386 24620 58124 34969 26189 52023 12939
+57868 3677 30184 62803 24965 1279 37421 10546 64094 2537 30514 59456
+4652 39311 12402 45679 20192 36648 64670 7868 56464 26443 61481 10965
+47720 6900 42177 16673 48645 34692 24013 52695 17093 64997 34542 27801
+61341 24522 51377 15775 38190 24322 41288 13950 37220 5237 45324 27094
+8529 21829 41590 56864 27690 428 57607 36148 28206 32738 37665 9576
+48202 3473 29071 45450 19650 55075 34985 9091 30740 46003 21552 42230
+26397 9416 61557 42867 23134 54788 1669 47089 14153 35774 45132 11026
+46628 18058 61410 2841 58785 39106 5341 31645 36892 16393 63050 28613
+33942 44732 15994 40499 62331 13525 45970 5731 33427 55222 19789 63604
+4211 58631 27337 35329 44067 16065 45719 29142 48775 21494 8983 47361
+841 26685 54535 6099 59498 3700 28224 42129 13249 46842 7898 39008
+25479 45434 6736 43451 13867 40172 59121 15282 44994 18261 46512 29095
+8137 36316 62271 21569 43756 33087 2276 46043 19393 39663 27465 61871
+23716 17395 59682 24679 9876 58645 5207 63084 29547 8633 50711 32174
+17522 22891 41931 19673 49361 34641 14208 24109 50394 16169 27232
+46438 22051 40748 26010 820 57374 33909 21299 45600 1396 43841 29308
+38640 15757 56249 33008 61320 4476 52465 35627 25710 56082 10482 43984
+18446 47739 31206 17217 29999 57566 15514 63215 43184 3593 49907 24384
+46664 19002 44248 16760 31288 37176 23524 46799 5791 25788 62942 13060
+38303 55815 18799 59545 14972 38461 30817 15779 59239 42821 14196
+39505 60503 30424 8097 35026 49679 25679 11134 57102 3140 63103 12887
+59795 7179 32551 11013 61620 6353 45912 23376 37871 50637 8081 39851
+55017 21171 52736 19488 40164 48604 15845 43705 19353 63650 25994
+54590 3286 24768 47012 29187 3912 33478 52112 25749 57487 20753 63921
+30225 10223 58460 2940 44426 25708 7759 47539 14253 42603 10298 45742
+4408 60284 21701 54421 28315 58756 17046 65505 33097 55160 4127 18318
+51335 39701 21038 11022 59957 1527 56029 26248 39313 20879 54534 7083
+48585 15255 44250 25786 58349 4477 50560 14226 52880 38010 20236 4222
+39911 12142 59785 33100 25600 52667 17483 57606 1248 39759 26829 48461
+31107 17009 55213 15014 57990 26693 39086 13852 49296 6503 52327 10451
+26481 49665 18064 64401 40533 2693 43531 13326 41736 30055 9564 56137
+3284 59776 10495 52008 2349 40067 60478 28600 53024 41645 11704 44365
+21707 38597 60907 20198 55871 18152 31685 62692 4095 29302 61232 21643
+54413 27826 9452 52943 4398 64737 10781 52601 20646 44715 14418 51168
+5921 24592 61368 22532 59178 11237 52317 1781 32622 47722 12201 53652
+39170 21479 42622 19554 36717 56652 13285 64420 39068 57991 16117
+45508 30723 8258 59054 41716 338 61689 38059 3475 56434 14349 52451
+29642 42029 8820 65483 23733 55176 10861 63752 4929 47128 26899 8218
+22806 43129 28061 12178 48145 16024 50151 29460 64680 10989 41613
+55701 8411 38456 32324 6540 26142 53831 17020 61569 5265 55624 32399
+53392 4274 58833 7927 29099 59864 40882 1565 51038 27738 6119 44498
+25437 49183 7730 53458 40591 1352 32511 64167 6538 21957 53993 20472
+63633 4336 59171 33961 27709 50838 17420 45451 19376 40935 55767 22788
+42047 31716 17224 65162 12301 22286 56620 28659 12606 42552 5601 45891
+24882 9290 62560 26932 50547 1819 41476 15095 39248 52452 11937 36242
+58039 21052 36660 1613 31898 40594 4186 45968 27527 35882 49901 13722
+40211 57287 19600 53982 3483 64682 27316 49676 16335 42830 2566 44059
+11305 39981 949 50648 19681 35986 59756 9411 26329 63984 34993 23451
+45944 17294 50563 12818 63253 35977 22971 33094 65154 2322 52619 12807
+39268 28328 59371 2532 23808 49815 30148 53191 20858 36536 8455 65066
+5478 38547 23588 32983 49878 7186 36737 9979 50259 24966 45538 9455
+48859 3707 56750 22396 64872 23620 35207 56381 304 38665 31150 16644
+59163 25707 54392 18924 53388 32714 15350 47732 35911 23040 32220
+62326 18928 33220 10751 20700 33953 63430 15576 53588 26085 10157
+45977 587 37461 52136 14672 33746 50342 10471 38895 158 34790 48771
+20368 40804 32735 23696 35727 58809 478 55585 28993 35641 46680 10330
+40847 6926 43507 21756 36778 55018 7693 43996 30894 761 48408 10692
+53076 2796 23583 44322 27466 1657 11041 50945 3764 61044 27349 36346
+17543 48203 33212 18511 44547 20654 42600 7155 60671 19273 50972 29090
+14307 34872 48896 20545 52220 19226 62724 31758 54144 17165 64402
+38496 6204 58958 26883 5365 33314 52254 1915 28797 46580 18957 51257
+36256 58449 13713 39916 21743 42519 27795 8345 24731 42859 14946 50632
+38454 16628 32811 56973 15209 41369 63828 35563 4328 29237 62680 12621
+33992 55513 17507 25976 47389 34183 790 41158 24048 44968 14030 47272
+6806 37912 31483 5274 53282 28805 2471 48092 13971 53658 39550 641
+44988 35262 5141 33863 63506 22483 58734 15109 55800 31617 36389 7124
+30914 55533 18447 60791 8635 30249 62465 16091 41474 9000 63182 28337
+53231 15166 55230 13109 60997 5859 22330 62543 30592 1776 37387 28703
+33110 39441 12405 34599 55584 10670 64033 18579 51443 23075 44742
+30629 9814 43428 22476 33957 47239 4642 53960 9039 30001 62368 5343
+41921 31382 192 57703 10050 40222 27941 37077 20169 63567 8501 36580
+31046 62915 10441 58080 7363 31357 49355 22509 41852 28367 51507 8828
+62817 13664 54722 22896 63742 33282 120 35617 62034 20854 42465 32023
+9826 36590 3162 44018 20289 32930 60111 8089 51155 10694 37019 6992
+42997 768 39765 65060 26368 5617 57564 12562 41455 6737 55573 36097
+58684 5200 25179 39871 1795 48135 34559 30551 65475 22132 8876 41177
+57008 16947 31293 57765 23761 63497 7268 30338 58278 13734 55008 5367
+30475 42925 23344 12057 64217 17605 56564 30380 54509 17880 63486
+12878 26079 60651 35061 14571 63924 32933 59185 16883 38224 60455 6663
+54848 36360 62063 25311 39975 13072 52172 5767 64333 25911 7769 58271
+10456 64760 32704 47825 13724 38429 3343 40447 58317 6045 30354 43070
+13303 40544 3664 42229 10704 45984 2153 24726 44779 19373 39729 53871
+13344 37797 24317 62684 12289 59166 721 21079 30778 47471 1704 52175
+10916 64074 36602 56375 20219 63119 33609 2608 53721 10685 24284 47954
+22787 9443 20084 58318 41058 18101 44811 23922 9233 35984 51668 11394
+58600 27691 51425 9067 29556 55168 21789 64609 18657 57506 34974 12250
+64249 20476 33533 62592 4872 29311 57124 19134 60913 24117 43651 2229
+50943 8739 32912 39237 93 57752 21200 44452 9959 46814 34797 23425
+43753 800 49162 22869 50314 13996 42464 6168 44471 20247 38882 23021
+47369 33024 8601 51095 23703 60437 11147 55273 18301 59144 675 31163
+37040 26110 39042 7503 61992 13655 47892 26723 62758 2179 52901 15561
+42239 19842 49956 37423 15357 32506 52725 17815 43579 24953 49827
+14337 59703 6629 51396 23347 48201 15219 43295 16492 45280 24748 35002
+63364 3464 55150 13252 58726 16676 31701 42466 21215 38235 4399 41961
+19550 59347 28111 5838 52776 13158 60368 29006 54067 25954 58773 8759
+51983 22366 47081 20061 44570 27848 62676 22468 57229 23985 8559 44696
+33071 19301 52647 23749 50733 26401 3033 42068 29918 55183 19553 61538
+16819 56637 7118 27547 43941 58659 24888 2239 35678 47138 5670 49733
+16357 33239 44230 1926 46912 36261 19718 63288 9250 51997 33022 3810
+49982 27419 1021 35190 47353 4785 40083 50996 3495 22432 54233 27448
+8207 24147 45971 29857 11942 40535 31668 21128 5318 46416 19101 42975
+21013 44974 14913 53883 35538 19918 46897 24333 1758 27713 53123 23519
+62819 11697 36281 26934 61579 2416 57505 24596 55412 16226 59309 30024
+34370 57122 14543 62278 96 23530 60977 16905 49738 6865 42087 22744
+40104 64963 8921 34465 60544 22790 45369 15746 30585 1082 45981 9759
+25271 48469 21535 65473 35608 3572 59070 31430 53112 33801 10349 56331
+2582 61567 29497 57254 3697 40369 18442 46436 15295 62067 39080 1963
+43242 10688 41596 34 46040 26042 36207 49525 9705 38163 21442 47598
+14432 49521 9061 51583 15988 47053 34949 27625 60687 17480 43397 12804
+51245 23783 59638 31877 4908 53675 16957 58730 35619 5665 34231 55812
+18949 58288 24828 65422 923 54339 16259 57921 38678 15103 45109 16806
+42928 4635 47826 24078 52041 19589 59962 4896 56552 21155 34343 52627
+5546 54544 14362 40466 28910 61245 7744 56273 27114 2706 43355 57958
+8024 28769 61446 6154 29554 54247 20861 45040 31705 634 32533 53973
+6077 56032 28854 1140 47467 13711 43813 27198 39868 367 35066 55763
+3310 60376 27697 56872 16164 52030 12461 32372 44697 22844 40808 1429
+43591 17460 46746 14641 31738 41496 4535 29699 63314 1725 52556 12436
+47540 14329 36425 54917 17372 60271 39205 1104 43253 11456 38327 64191
+13794 46917 8677 43806 13012 42342 21056 50551 40179 4504 19386 51579
+29161 64496 15694 43143 12374 37749 56623 17946 62594 26277 9901 50222
+28100 40570 16298 59384 38712 15242 41847 62848 13914 23488 56820
+28893 16705 37368 49058 5748 44781 31954 51502 4142 65109 26037 52682
+13926 43662 56124 12243 63217 1127 57686 29113 37983 2648 50727 30101
+5132 54663 31575 61330 5714 41796 20241 54394 18607 51285 16399 41450
+32114 9036 33069 50163 23288 6908 51398 9807 49568 28580 33700 43633
+8056 45543 27716 56744 17954 54834 13044 33291 52881 25792 11560 41154
+4066 51350 35931 60298 18257 39129 55126 12146 43829 6943 50352 30076
+13608 47356 1153 21239 48515 24907 50848 16165 45791 19848 43410 23262
+63267 5872 37285 32376 17192 59886 31123 54093 20773 61386 15652 52011
+5706 31214 56498 24541 59261 8358 36897 25889 40212 27852 58136 9940
+18617 49238 4502 53172 22736 65096 35133 3567 39490 14062 64036 28859
+46218 10433 25248 64859 27092 2338 46538 31506 8357 32659 43698 12367
+42286 3527 28480 64202 6607 53354 25507 63222 13377 40709 7893 45537
+14238 50827 27797 46999 3174 31622 38908 22802 33317 49119 12115 24618
+45582 18235 39690 60411 29169 12244 35930 48516 14974 35107 46517 2938
+38924 13587 62259 27606 57440 21078 46005 19207 38437 60238 18323
+56466 35664 9766 61205 24853 48507 15030 30731 43856 11211 34450 46718
+7472 39982 57166 15621 63446 18015 54996 12001 63888 5562 37416 61381
+17140 54810 38114 18407 42108 21253 39045 4866 61573 29256 2540 50601
+10243 30590 63115 18219 56374 21066 31213 51697 23486 59913 28877
+52731 3543 62792 11245 23828 60223 32969 9862 42489 7476 54253 28568
+61523 29851 4014 51104 11437 34967 59911 22716 2667 57104 33893 6586
+25868 48877 8463 25077 51735 33512 9767 42715 65414 12428 28210 62233
+17847 57327 20629 43344 15639 46586 163 59600 17530 26029 37634 30626
+47399 24149 8880 59822 31573 14036 62347 39462 15511 43073 17599 49874
+12710 47544 247 42240 7287 46266 21209 64833 26394 44086 978 37241
+63368 21075 43350 35198 6501 53305 13820 57968 35667 2939 34328 44629
+4623 47711 24034 3262 36092 56252 20007 61787 24262 7578 28223 52469
+4869 31521 60924 26601 40199 17049 61919 37074 25170 34844 64375 28616
+7393 33550 40389 6309 65231 12929 53353 14737 30969 56376 3994 49214
+23511 6303 27883 47500 8830 40936 23335 60633 16633 40852 1496 42395
+28525 53495 2798 62273 6025 37769 30167 64449 22023 40633 14744 45530
+6758 29297 47905 19725 49917 35967 7681 21879 56599 41858 12976 49015
+39207 16274 62098 28310 52372 18753 60592 26390 52904 36603 20260
+42044 31658 9324 32692 44235 21763 62094 33994 28777 40095 12574 35402
+60769 16701 58138 8241 63713 3799 57056 38317 1108 65246 9924 21744
+51933 24165 64406 1867 30756 56618 19388 63934 23957 48840 7754 42799
+10672 40985 3605 65382 9208 30063 44610 5180 22176 50275 20073 45002
+7619 64554 37533 18180 50682 1764 26028 64817 23917 2972 51068 8203
+47913 27871 36403 20647 51315 27172 2203 43455 25006 6382 56559 13310
+60786 25699 43881 19502 49395 37632 21398 45585 16456 34874 47960 4305
+44980 7886 36813 20 39047 6885 36205 27187 37202 30950 49416 14289
+38446 61885 19942 47973 34855 1335 21320 52694 25237 40902 20893 45801
+6159 38262 48678 12571 45462 29973 62013 20426 57413 32617 3059 41312
+58960 22631 355 52547 39363 13741 42315 1961 38602 11223 58097 35110
+22825 32649 49123 3170 54196 9822 19966 55833 42029 15840 49057 41220
+11482 33640 56110 9321 58921 35923 26357 34824 60242 21929 57909 11411
+52842 5268 48741 13728 60819 28322 11111 47454 2806 25677 65324 20263
+48616 26642 15160 61935 11622 31117 63794 16016 57352 29673 49954 6200
+42888 14625 48235 31559 44440 16043 47245 11727 36774 152 58109 32118
+5091 54478 8998 52196 13003 41046 60676 15113 52999 26564 32845 49664
+1787 34642 44863 16421 42651 12659 52259 36334 62967 14374 32319 56156
+3594 29341 46682 13214 51653 17760 64732 15191 44400 22774 55286 13421
+50460 1122 44224 10605 61602 34480 26321 56378 11253 61324 1244 25573
+52173 33744 2968 32301 52949 8005 33244 50807 4382 41792 10122 37296
+5404 44716 17850 9123 56294 365 59724 27703 56703 2358 54185 17965
+5995 57214 1578 64930 24434 9207 48819 29414 42141 15997 36691 32235
+13797 51036 29792 35224 46635 4112 44903 16500 53631 40008 7258 43120
+11346 41187 17689 52377 24877 60908 16184 48659 34429 25827 52483
+14495 33373 63802 31216 2726 32321 51365 23564 4758 57775 21955 61328
+35497 13978 49626 36022 27025 32963 38301 4687 57324 32131 9020 39451
+56014 11769 65279 35004 27160 46583 3411 50301 9716 56052 7614 28277
+64578 5136 58182 8916 31907 59631 14710 62047 18666 54744 22393 64880
+14058 54229 9504 58166 1079 46751 25982 3337 53696 11874 23568 58074
+40411 10177 48479 7718 60431 28982 55939 14235 32341 65304 18872 53567
+1411 44706 13197 37374 60772 20796 8112 34914 46630 25389 7145 56031
+19807 61214 23166 52332 29686 7496 62434 10309 39846 63992 28960 50069
+35879 4092 33434 65172 6130 23691 52930 919 26850 44794 22811 2969
+64186 9738 29278 45513 15307 37430 27426 39262 19445 53880 21674 39909
+55725 18296 58444 39312 12081 42388 4124 38116 50689 22993 46323 20052
+35943 43286 9906 45641 14174 63520 27620 54644 10254 57871 3012 64856
+20814 53190 18612 44993 14721 48715 36309 18443 42735 19822 46795 4046
+36347 31179 297 60055 10533 37148 27857 54706 7554 60892 25373 57950
+31621 21156 2858 38740 50359 17305 37261 54498 7707 63247 26466 36504
+6565 48737 31391 9478 32487 42314 19534 59524 29209 54092 21048 2430
+50292 15876 42233 22198 40415 58466 13579 43521 62984 14729 22454
+61452 24539 12545 56106 19790 59560 24186 54622 22457 62314 33304
+21802 46632 19179 42488 16051 46246 30128 35514 49968 23172 42523
+18393 49579 40803 21529 59 55266 26246 53442 19605 59510 25847 5785
+55515 17414 59050 10991 38101 31963 18743 60709 25928 54601 5054 60092
+34714 1791 28976 53589 23137 11438 49891 2097 58947 40323 8231 54306
+26520 59587 10318 33781 47150 12136 41754 8444 45299 30815 6345 55943
+12701 60948 22099 50240 18961 41313 62456 15114 31108 47937 15927
+44193 10836 32825 57929 15310 39676 24063 34024 46844 18734 42968
+26523 53037 19986 37902 28382 34108 47409 10110 45464 16366 48283
+25002 41425 21719 43095 18013 50025 33936 28312 36121 50414 14500
+27849 65039 18319 32004 37030 685 23406 51687 24755 3945 43283 11092
+39335 16900 52857 6811 27853 50685 30296 55484 16230 60264 29822 34225
+46895 9534 41395 4912 47601 20214 36329 51791 15815 34696 6548 21438
+61570 31043 16607 37601 28870 56939 17057 37269 63450 7631 51855 30616
+38420 24309 55766 4125 31584 63231 1734 59641 31848 7130 45319 3927
+32201 36810 9171 30342 59927 22221 54488 30284 7687 58367 946 53629
+7075 27459 59938 21764 40619 31813 461 34996 21345 39027 26093 33092
+38189 7799 62369 29478 51638 9326 26063 56718 2792 62904 23457 54985
+16990 57788 38734 20934 47433 17602 62463 20403 48236 29358 533 39725
+9464 43992 58941 24625 7056 65292 28425 15438 32159 38735 4079 58261
+32150 18573 61179 24482 53053 3866 47032 35095 7482 24920 48276 30110
+36404 63336 4344 51531 9129 31383 37969 6500 29255 47968 35291 278
+36138 45114 22002 44049 1525 47700 10933 41239 2709 49027 38392 13583
+51822 5058 65119 24875 8329 47817 11555 62925 15024 55003 6179 30915
+60170 38236 11740 42971 6422 44320 8942 40340 49302 12414 43648 33847
+26222 61753 4559 49011 12765 37482 21856 44090 27411 13193 36513 44886
+6671 39347 62108 19568 36803 28739 17327 46518 14829 42506 16171 38450
+62504 17078 53573 28951 55022 16520 59182 33235 19828 43262 2036 45534
+10870 59754 483 26056 52978 7078 34175 59367 1023 49615 17646 36921
+28535 63659 180 59751 12200 51448 13616 39869 1846 46589 9670 50324
+2882 25154 57624 29704 39945 2050 56183 6238 63300 12249 55137 6637
+64115 10756 59084 5064 32703 45907 3094 38370 55325 15036 63983 42372
+9083 40813 56443 28712 61216 21849 47721 19741 64794 38947 12010 44946
+4612 38404 10557 48445 3726 26690 54340 18155 63591 27330 56821 2341
+24762 45428 23066 57263 40469 12617 42901 53992 1873 45039 10286 48366
+32504 19083 41097 13823 57377 6412 48830 13560 33681 51470 17971 44780
+15732 36324 57045 14911 62092 17452 52423 27113 46475 1393 44722 10331
+64116 21129 40410 32053 18567 61475 38555 2027 51867 8144 59469 19710
+43469 62240 6785 55711 13487 59209 25149 40184 5668 23660 64575 39180
+15629 43910 30077 8157 28370 45425 5757 25382 50145 8488 42974 5057
+41183 11536 36830 64776 17403 55383 33773 11051 46099 30863 40651 939
+57769 43338 18915 45735 13862 53606 39872 320 46171 17326 63093 28720
+16508 57502 40532 5639 55043 10153 20394 46146 28947 56812 17118 60969
+24439 54510 9758 59000 27057 54085 7126 64528 14249 38616 28020 63576
+15456 57222 26253 6367 60801 28699 39120 12627 34396 50995 19979 38819
+3727 45137 34971 26092 51269 13496 28112 64287 18973 57410 24277 62486
+15541 30823 63449 22028 473 50091 15841 41863 20860 51986 928 58739
+11997 56179 30348 64266 15326 58446 31534 4442 42364 55726 6832 61655
+29758 52133 6023 48451 29211 1357 40712 33223 3992 25132 49322 605
+40497 62213 15139 53399 20956 42110 16822 36294 48635 21614 45049
+16768 28795 53547 23709 62060 6886 51717 11324 41874 26011 38415 3520
+62478 23805 55493 22478 65329 18003 59105 42880 21055 5831 60891 32147
+17568 43868 23432 37481 27768 41061 20604 45048 22189 39228 62382
+13089 56337 24543 6954 49353 32948 16412 53016 33686 20696 7831 34960
+51253 5158 42625 25851 2139 57984 23283 62627 21467 53470 23593 64512
+37315 14092 45693 34577 8532 40637 30506 60821 9134 48707 601 25646
+51987 8031 27043 59069 21990 62995 27800 4362 57927 24054 47304 17051
+42611 20174 61876 39687 7959 42375 23083 53115 10515 28196 49942 23381
+41927 5903 63624 16402 55954 18991 36955 25197 47907 12660 52533 35116
+9583 25396 46749 15567 44306 24840 54003 12637 30434 41483 23018 45594
+1474 49351 19413 57132 42293 1933 31231 60434 10021 53498 37520 61482
+12133 40195 64061 18112 54506 26164 58743 22817 52831 19451 32694
+48867 4875 22872 51683 19748 60449 12397 52962 30213 8995 61327 25039
+50009 8012 29564 57028 12110 33676 39016 10899 51053 31460 14347 62354
+22856 35453 52758 24504 12264 33403 41437 2053 46133 15741 42944 19539
+41529 16688 47262 34003 25680 57825 7326 30201 45123 18740 51300 30636
+36510 10753 58494 26867 54797 1161 61136 22579 57625 29480 9541 58915
+2813 34603 45852 4786 47236 35279 2012 33290 48161 3429 36332 51649
+28741 35089 55909 10255 65091 29638 46684 16739 40638 3902 50060 8436
+51462 34088 18240 49349 24930 13353 32424 41073 752 23901 64152 20690
+58090 25948 55460 14513 59948 36625 19335 46159 23748 9435 37789 26754
+65150 6674 55413 28094 9634 64216 3847 56876 37339 6065 40996 21645
+43309 19435 31942 54016 16938 57359 31757 14944 43352 7310 41866 13880
+39606 27037 8424 35045 51124 19305 37890 58569 10408 52522 2799 61064
+13482 57209 382 52325 9247 25843 42535 19344 50721 39970 27439 5349
+58171 29247 2422 63654 44266 15474 31124 59998 14677 54264 36481 17328
+43388 13992 41351 1617 42825 12759 32047 59098 886 24992 55596 15249
+51307 16924 33470 14446 42195 64483 17547 34620 47886 13956 43625 6917
+38391 51190 12113 43091 2360 65347 27866 54070 1183 25221 56247 12027
+47814 4853 60519 38185 386 43928 12618 48914 24604 38326 8690 33470
+50457 2355 29020 62439 5210 48597 29832 54824 19507 65384 34631 4679
+35988 49368 2514 52285 9484 29065 53717 36166 10452 32751 21740 55451
+14473 34849 46248 24913 958 20707 50700 30872 13736 43668 2092 37893
+12119 42250 3222 56597 8299 26421 41758 63487 36086 2183 27539 48818
+35067 15006 51163 35875 2091 33457 60171 16250 42667 25735 49783 5277
+58800 36136 1870 44405 32601 8379 60495 440 43670 64150 5793 53278
+21237 34303 65300 3756 55309 6277 60145 28650 3115 51019 12203 34954
+49605 4904 39399 11547 64398 21208 49510 3318 41833 13888 44014 16909
+40796 12346 46704 20482 41634 23680 61956 20883 54026 10858 27273
+50630 17846 35910 57737 20518 9481 59891 6712 23370 44783 26628 8252
+35214 62872 23259 45213 21657 41615 25386 265 57038 9594 64685 36379
+53668 16659 57386 33414 10576 43835 5112 46108 9315 31322 42707 7848
+62864 13542 56641 30577 51613 4465 29772 46387 17938 50808 38050 19439
+42620 26646 11407 61120 13898 47205 2384 55317 36298 4648 44844 9381
+36583 54682 19727 61001 28317 56783 5023 54001 30738 63717 13332 44437
+4625 30866 46706 18725 42349 22524 38657 24351 43678 18803 37139 54713
+2168 60805 9721 21704 61630 36165 12296 48946 19362 37295 22912 49883
+110 33338 39949 9013 27483 49054 5652 51689 27401 61040 16552 56485
+6262 39682 30067 48332 20857 42696 4496 38691 58888 53126 32328 5379
+31433 60403 3561 40943 19745 50193 15525 33959 60131 17906 52676 34551
+9904 37169 30556 47213 17474 64029 26259 39651 31798 19165 65006 21287
+57963 30188 3486 53407 28359 57664 15363 60360 38724 17770 44187 15986
+59160 3584 39561 8751 29439 58298 18360 31629 64274 22227 35864 61315
+14228 26608 63701 43481 7222 35962 49592 4538 21540 58916 31646 56284
+35531 3537 59602 32445 57015 18785 62832 26897 49184 16803 39179 58408
+21105 10161 18253 57140 41226 21980 4401 62394 32059 18032 48266 20329
+38031 30956 3460 63777 14178 53940 29624 15376 65409 18293 49185 26469
+42817 29962 16785 31808 48767 23475 59750 8625 31104 39240 25041 46646
+13834 40088 56764 19097 31449 61160 17069 54813 23887 44272 1363 42201
+14532 56131 23249 63681 31297 53853 6796 55761 31055 64552 7283 50159
+12496 43322 16584 40547 61407 14027 56022 8269 29295 46823 39130 15151
+41256 54152 3082 58220 42710 20194 6211 53969 13983 61168 17007 47921
+35644 29078 46000 21064 3010 26555 44496 12262 50351 37233 18715 53250
+23133 36046 65481 15681 52108 27518 37138 3073 42277 20088 57718 38963
+11538 61599 2713 30930 47588 14775 50363 32850 20369 52264 24557 64792
+15740 27569 59143 22399 63988 26677 5905 49560 31385 547 33067 44536
+16997 42470 1428 48916 28956 62230 15108 34310 64596 8793 55977 4938
+54037 8523 59700 31626 16017 46923 26871 34423 45341 1175 47585 21059
+34961 59476 5960 54491 11731 56720 16436 63157 30144 56154 20123 63819
+30974 8685 34516 47333 22592 43998 19850 62874 7735 57665 12344 65525
+26783 7349 36882 18589 55262 39513 15338 50885 11232 61797 26156 55342
+46 30552 39320 8317 23375 58481 19403 53464 5832 41807 29654 2223
+54231 14423 48423 13302 51136 7814 34535 61240 13847 43577 4899 45220
+32363 7274 56666 24461 40683 11406 33226 50247 23126 45408 13878 47556
+6486 38260 11046 48649 5353 34795 47804 3379 22861 59820 27765 16904
+63304 33423 11386 48657 6802 22668 47011 26606 9071 23854 46381 6623
+44220 9829 61853 34142 1524 46961 28843 50108 34002 8676 59511 28638
+38986 6672 56039 11618 65001 5786 44344 54556 22910 32518 41101 11739
+46870 23998 53341 4159 58115 12676 38197 59211 10749 39936 14041 35380
+50658 17356 49336 10063 34605 63279 22911 8939 35849 46419 628 41747
+20873 60031 15167 53176 19055 47278 34341 9756 36027 4288 28064 48277
+23850 578 37933 27550 32886 56451 1402 58661 31110 5308 32393 43181
+23309 64595 5485 26218 62095 18414 32078 37441 14269 30344 49428 34021
+28194 37415 2516 54867 10327 63019 7340 23446 59272 31889 55010 7595
+60810 24803 3221 61969 35038 13131 50117 2321 30320 41033 5476 48621
+25723 63359 8673 32463 22496 43720 33763 24950 58372 8017 63131 1596
+57473 38833 4984 42376 10322 37320 50134 13048 42356 1492 51992 37726
+11635 43946 23679 53001 12582 61748 21855 55745 25637 9054 36536 53624
+718 26052 44862 19677 47154 34694 26374 39732 5871 62987 35770 14010
+58458 17983 53813 24337 62857 8478 29941 43201 21495 41806 24815 45553
+7253 46752 3321 42437 12204 38406 58545 21100 4278 53799 11882 50309
+17125 37010 29265 46759 18033 45168 29905 11785 50094 24682 8897 57727
+28639 45749 32636 5901 31698 45255 18998 61506 29553 48173 3419 44581
+12925 60387 15968 51628 35058 22411 59196 5457 32343 37523 26780 45658
+19360 40938 22353 65122 26290 14070 51836 34448 309 53333 27757 62642
+14764 56898 1263 62974 26941 54522 16752 58959 32576 24189 57605 15647
+33184 50490 12100 53019 40131 8663 54762 41765 18971 39372 65050 10443
+55485 36833 52306 14971 39823 20267 51005 30398 14553 54285 33126
+60814 5590 23964 45528 17652 44016 20789 45081 22784 41990 24096 49139
+15532 33911 8447 46102 982 61854 33633 7162 31636 41540 22027 47829
+5039 33760 52397 3371 57253 26756 894 61657 21714 55884 27603 1683
+44738 29338 61978 16334 52669 10481 47843 3954 36741 27389 62634 5812
+26148 59365 43231 19528 61814 14199 42504 59918 17227 49110 15613
+38634 26852 36733 20089 52717 39083 796 51249 19214 34910 49491 1746
+52727 12639 63754 24205 55062 1485 60351 9782 47087 32586 26472 43452
+19024 49122 40117 12984 42211 17958 43252 15712 38907 47714 30155 7044
+58908 16970 33962 57247 17826 60309 11998 52932 21527 35523 48168 929
+59597 9166 52422 21498 37229 28329 44658 16046 30735 59972 19142 48026
+30206 7196 56651 20291 48003 16449 28761 58546 19000 64278 16138 48561
+6473 38489 11209 35012 50312 22819 16535 49315 35628 13030 59413 28427
+12035 65354 18315 50157 29741 3766 52521 7486 32609 38047 4862 41750
+25895 55120 13623 58786 4285 62096 18577 37227 23934 59583 16653 55192
+633 25519 45222 35548 28422 60369 2499 33692 53313 3462 24257 54676
+1276 61322 41553 2816 62612 29767 37159 1426 22363 56353 20282 64855
+10723 49902 4761 41860 16698 62931 28333 39003 24987 48474 10259 62329
+7549 30710 41233 56108 2639 63102 11627 52922 766 49344 10004 35956
+46576 22985 12073 64369 17440 45070 5787 37193 24720 41049 33082 10516
+40148 28164 41814 871 53320 9099 39930 61744 17315 44760 396 32342
+47763 24052 2868 59438 14735 30549 44935 20338 4473 28154 63737 746
+57361 34939 4722 45897 25985 8000 20478 39751 64334 12894 55619 3013
+63904 9986 58858 713 52504 10661 39471 59722 22024 55577 30555 16592
+48677 27035 60093 15677 54512 18008 64761 14786 25407 42691 19145
+47918 37596 12864 42599 5397 37438 53222 15874 50212 4506 37286 26054
+65220 28254 32754 56656 7950 38876 29739 50405 21462 8499 52282 29543
+37203 7643 33772 53095 4614 63072 10531 54320 6576 65446 12160 24969
+59634 30161 11510 56377 20920 40801 27786 47121 4963 43982 11527 40236
+21152 53254 18422 65011 5886 29866 52820 1927 33332 56702 5554 63233
+27525 52048 6173 21093 56660 27427 38747 25319 47215 7380 45082 23797
+33252 39282 5984 58897 15549 53866 18980 30494 39439 4759 48918 12697
+34943 51404 8974 35600 53494 700 62236 25743 38572 31966 11165 62980
+40664 7939 47344 3814 39293 32450 26649 52234 20433 60547 4093 58380
+32555 7704 54309 31065 3641 50663 33186 1566 44264 10183 56506 24207
+38938 27863 64368 11277 57169 16696 49721 1730 45914 28683 38578 10249
+32991 53941 13073 28508 48422 20698 33514 49495 9266 65065 14497 38916
+25795 43627 15136 61830 39235 10777 43177 21123 13076 45948 15812
+43912 17633 63568 40734 12338 47255 36408 23508 34984 56059 13899
+52232 34919 11315 50333 622 36984 21265 42657 25571 47462 11317 23613
+44957 21823 39670 17337 56947 34176 20754 54596 3102 59773 35588 30272
+48590 10656 32090 53915 11891 51403 20821 56028 3189 61049 13495 49838
+19469 44158 30032 5597 37281 24800 65301 21046 13340 52257 35880 26901
+51698 1646 34775 61771 31228 43081 17629 47537 31659 21366 65009 18456
+59287 32130 53559 30402 227 51058 29404 37974 16433 47966 29068 37605
+18841 62597 28240 2629 43612 10081 38145 58262 3243 43085 10580 39041
+1416 45604 27740 35495 49585 13358 62843 7987 28375 58041 23672 64327
+18793 31804 57497 11653 32814 58656 7697 39599 13995 50105 21844 45167
+16271 60401 173 33481 47870 25155 2513 57220 44970 23444 12740 45767
+21175 42216 18687 44410 17266 41135 48615 9753 37994 47801 28813 7913
+59015 10097 34736 56805 19051 61014 25705 44368 4683 41311 13417 55611
+38899 21335 61587 10662 25483 49928 30381 1103 34582 64950 41004 9942
+51684 161 63657 11721 55808 35122 1277 64614 14038 51099 26281 40829
+9867 35165 64416 17687 56193 24311 61846 6397 23290 64102 26207 15100
+43826 21411 49309 4202 59673 34930 2690 24538 52729 34213 27540 60295
+9952 57346 2510 40770 29960 44872 14000 40693 63906 18139 39700 61277
+14143 41136 57610 20283 48046 14482 43479 17542 47216 14840 44998
+30262 39755 10815 65223 33313 17898 53083 26512 48016 1353 64587 38776
+6799 41550 61923 15203 54818 23611 47666 7033 51201 10282 48126 32415
+16810 56533 26453 58640 51880 20162 54132 7081 49529 33531 5177 52692
+29605 2519 58866 9366 28811 43834 25034 6293 56841 20102 64468 30985
+55498 4006 57504 16181 64625 36539 9584 59505 6143 46302 30382 6835
+62773 27906 40276 19717 49650 4474 25478 61635 39316 16620 60741 4164
+44556 17267 47034 20393 37114 25038 64654 12813 58555 26654 55703 8079
+29348 54232 34494 6498 62522 9524 31967 47382 23213 7278 53872 11656
+58619 35574 11114 52784 13695 42032 2766 43449 13341 47830 24993 36566
+15273 49741 27376 36089 6167 50329 32560 7365 34867 51432 23428 64613
+18792 32782 52197 20034 63394 23052 56387 30639 9111 58665 2472 54250
+30512 34257 52812 3935 44162 10762 47139 6901 40778 24712 44208 17348
+53856 23256 43369 2025 63393 12454 52850 20294 37311 55960 13077 65325
+34301 11612 19852 63791 29763 35233 55616 3006 59308 28002 51675 2607
+33070 61667 22107 4136 63174 35950 24417 50636 15843 30692 39362 6907
+50958 12363 48567 22867 50372 33539 11369 48256 16289 35448 46373
+14668 37887 59073 22282 12847 31553 48602 19031 42157 21693 43504
+29783 14635 53744 18509 46017 30329 2538 62620 27528 49710 3565 43186
+13593 41173 19597 53643 33327 3040 45243 32823 8485 54730 12566 41913
+18149 45165 29270 57774 21433 12248 44530 17809 46966 23864 33262
+65190 9533 23373 55899 25622 2267 47861 10522 24245 48749 22940 8884
+37274 30775 63602 6816 60540 264 55315 23474 3456 59719 26889 37072
+12439 48873 2983 60654 14309 41181 31350 10760 57302 29577 4742 31282
+38314 2065 29937 57933 20100 64154 27458 5738 49911 36296 4207 34682
+6439 39288 28387 59676 13311 24131 56965 35537 16418 51165 37121 22110
+63929 1554 54840 33238 15356 45817 23897 7904 40455 27379 34438 49657
+1292 28672 50444 24645 52171 19639 60830 25803 38136 12756 53163 7713
+29053 57986 43849 21106 2141 47351 29893 36585 25979 63973 7537 33571
+56756 4438 29230 46317 1971 42703 14005 49427 38583 4837 46225 28106
+38401 22317 56954 16211 60049 35699 25347 49940 3078 24095 44735 5730
+48987 21977 55978 19243 61948 7183 56527 10523 60674 5075 55145 12339
+61660 15645 58095 26016 56182 11236 41811 4736 50055 8845 28019 41261
+5563 43578 12075 50384 37671 21612 44223 23911 6032 45426 14398 39555
+17015 51806 27473 59271 13725 62690 2581 46877 29008 5975 57180 35940
+17171 41513 5157 45906 30269 7029 39838 16766 44332 54525 32519 1662
+50446 8936 25533 47006 34133 8468 35992 57563 23013 7027 53554 41671
+13494 45694 2900 33521 64866 115 54571 36152 20555 63383 16575 59430
+832 25294 62565 4856 31417 59930 3684 55743 23254 8271 44313 52986
+2647 35129 59765 14856 54967 4749 62057 25850 42924 31794 7712 54384
+38278 19474 45711 14753 57072 32513 51595 51 46284 10272 39863 56627
+18503 59300 37143 17088 65443 27097 53542 13441 48607 5380 35937 61947
+1237 55994 34903 5720 45400 18090 49647 37816 6883 46460 34683 28745
+52840 33749 5656 62531 28259 55500 2572 25487 49703 28980 40827 18274
+50881 34956 21377 51956 6615 55614 16145 43974 35322 23443 49671 17727
+50946 36186 15875 53051 43962 19206 50660 35044 11320 40527 201 35567
+59830 23559 13620 64697 30520 24721 63080 439 37147 30933 45623 20538
+8048 60870 32773 5739 43247 13365 47109 17457 40502 59514 3121 38587
+61039 13097 53921 9010 20610 39820 58185 16532 38424 3372 41820 10701
+44404 1788 48254 23779 63847 41619 18488 9270 35803 50879 23969 8942
+57620 12677 38445 28571 45118 11397 51303 38205 16505 52143 22749
+62766 32196 19599 60864 18147 56081 14236 45269 3789 43273 12245 48899
+14103 39927 29545 61429 16246 58076 30528 39492 9242 37414 28232 45418
+17953 41710 21347 43537 18214 41237 20608 43147 3554 41214 21387 45842
+17986 60459 25763 35840 57719 15028 55049 18244 59848 26120 6359 62080
+11441 38606 63860 20148 56346 22525 61085 32152 17 37874 21811 36217
+52170 12975 63963 33400 11120 26708 51529 24343 61638 11353 57469
+23893 51896 30962 5661 21773 40654 57938 16400 39018 61571 13650 22232
+62782 24605 10185 37004 46572 18569 32210 55102 22528 60082 17325
+40617 28844 14090 32064 43169 3230 37792 28381 34442 46115 14229 40537
+51970 18125 44045 11801 50436 40042 26789 16096 58018 24902 7777 46092
+29263 37815 10892 49219 3640 37703 61071 22655 10773 57930 5181 42316
+23633 8276 28186 58072 22589 60743 27274 11558 50201 5675 29512 46138
+2003 38221 6616 60198 16318 31495 50833 15147 40914 30889 15814 63052
+12938 55163 211 29131 59955 19174 62789 8110 21380 58218 38934 14998
+42804 16122 51323 39968 21939 12210 56871 31488 8772 61975 13756 41705
+31480 19646 62378 28668 9312 56083 6037 61549 26205 2556 64024 33813
+6472 59228 14158 63352 26470 55009 21884 53036 9680 33908 46491 19240
+44964 52393 21874 48693 11168 53206 3720 64282 28733 41875 14906 30873
+57548 25844 32618 62008 8882 26904 51921 16651 28743 44274 18329 42097
+61835 32794 7255 47846 13208 62551 28131 55494 17835 58814 34780 14232
+32802 1022 55382 33333 59527 13309 64556 40953 18379 47833 10 52668
+15801 61891 32524 6912 57358 30887 8883 36793 3279 47364 11378 41608
+1210 50462 26003 63011 17915 39162 100 64540 21514 53479 8666 41508
+28026 1201 63168 25342 54847 4217 34155 65465 2330 54249 29285 62994
+1334 56910 27038 53920 13510 63594 1678 53532 34117 13021 44174 153
+46456 24519 38034 2920 33948 53818 20460 47596 26595 10275 48738 2132
+41387 8430 45871 20530 49758 33818 5221 30224 42290 18349 49305 36759
+59138 4118 42654 19834 39351 15867 43145 3211 62508 35351 60513 9255
+24661 47617 28057 5986 52224 36600 285 50152 28896 52699 14638 64226
+1198 36728 9089 31274 49943 6312 46906 61828 8752 58325 25354 53952
+7807 57495 20425 53556 30062 8616 37557 27914 64308 31999 4415 62409
+33899 9418 36172 62985 23278 13107 50586 32346 19292 57467 24585 13359
+48327 29307 35469 52185 16012 62160 30867 44847 11006 38346 4334 47384
+30068 37947 25005 61059 19645 52033 22823 44012 25544 39627 64541 8651
+29610 49259 7358 51385 35915 27934 39417 21647 50957 13298 43473 16001
+54547 35723 830 29944 52238 4575 60236 31879 7885 59189 33551 3985
+44601 36124 24936 47564 954 53719 39509 4993 46758 21429 40355 33460
+12031 35175 48382 22846 11577 42254 28688 45574 3812 42572 8352 31269
+43101 20532 51519 1862 57588 8992 33462 12720 27592 61414 18726 40419
+24957 50053 787 53459 39178 10165 48633 4643 37528 30361 44880 6864
+36355 54702 1826 58671 31252 4449 26050 52505 22100 43342 20381 37331
+5319 49932 27139 8980 51571 43569 26278 39314 22361 6370 38212 32331
+4841 54113 27452 60233 21005 43132 2758 24124 48261 19761 41048 59148
+17819 53942 24168 58014 22425 64161 32848 8798 31697 54442 22647 52213
+31533 6930 32744 46162 20229 51962 36351 14779 42666 16867 47187 12409
+23509 50810 35506 11246 22546 49250 31516 9507 32957 46839 19404 38376
+31012 6881 49137 19016 64286 34116 8133 61204 28821 48632 14541 41599
+672 57663 33724 28488 60404 15553 54077 30902 65013 9164 55818 25988
+61276 8297 54950 784 21114 31352 47590 13807 53723 1487 59871 26392
+49217 20778 13915 46564 29193 53810 4149 58930 33048 17702 46158 30957
+16486 60768 4463 30947 39633 24737 57792 27590 52204 13744 43450 18383
+37376 29765 15445 47670 17527 42397 10975 44328 2842 63666 26643 57732
+504 36652 13811 47549 17720 54279 28523 51391 3917 39460 56562 1694
+60162 36827 6909 50377 40618 418 65055 8932 26801 40600 1838 54604
+21134 65244 16594 53264 14267 63779 1204 52967 9931 40077 8033 62512
+11468 55236 311 21721 37744 54634 18285 59479 24872 3172 57660 10106
+62090 30392 37179 3440 49003 19775 44398 25764 64818 17462 47105 35814
+19769 44969 17142 38398 64658 16015 54059 6071 34235 63704 23642 13259
+51627 32878 64912 414 58137 22116 43585 16369 52149 29435 54222 12626
+23761 56226 18454 62167 39096 4954 60749 26002 38761 16340 41495 3248
+58892 43615 6061 32495 47948 9664 20989 59909 33356 18822 62552 23024
+55587 18297 58119 19499 65198 24517 11628 47455 34203 15504 49267
+36096 11007 64088 137 53240 15254 45789 19108 38061 60030 21591 5547
+62081 11161 54263 29327 56522 19254 49882 31243 8420 32676 41215 14160
+50437 34898 9897 63409 698 28510 44859 10296 43167 6305 38108 12731
+44383 28496 46514 6085 42092 10248 44283 28311 55127 3865 63947 9631
+26782 60094 6468 57243 31587 59464 36392 8873 25902 58426 39007 7600
+45175 24279 61372 4918 29574 55785 14435 59457 24981 52368 10115 27792
+53334 19709 43900 9425 65199 29749 50073 14054 44627 5313 35316 46935
+23426 3680 27288 43196 15750 41324 19873 43793 23214 40044 62158 9279
+35101 64802 22391 48500 35944 10440 34454 56461 38371 728 41380 12891
+43204 15713 37905 63989 11128 56962 36196 12282 35128 58862 10660
+49148 15182 44797 3883 62849 25230 56616 2075 55215 34926 5947 65425
+29096 60729 18969 38491 22119 42361 17508 53842 21639 60405 25682
+41281 1447 42782 14443 48365 32934 18347 43954 25363 13884 63970 31593
+17648 55059 24075 33977 60065 18461 48746 31902 6197 32844 42979 22234
+41675 18191 44987 34686 23736 48848 32058 18134 49572 20228 41477
+57160 32787 3901 44171 10664 32631 46826 20607 44457 24552 6251 52067
+32434 12211 59111 6670 50019 12600 41377 24128 9648 63269 1306 49286
+25390 9412 48304 22648 57936 20004 10135 36019 60324 26965 8392 19118
+45106 30638 53292 4562 61020 7943 39634 821 61421 34870 9334 49678
+32154 16980 47292 29989 11702 63641 27954 56210 31318 36286 17581
+39409 55941 14485 58237 43850 25986 8309 45924 2908 44115 12055 50450
+347 46573 14296 40723 60550 27275 6247 63562 19567 55989 23340 33185
+40647 25454 57626 11497 64902 2461 29290 36655 52724 17557 44455 19970
+42346 1556 45302 13897 63099 23012 54719 5676 65078 16733 55957 29027
+37132 25436 54984 14855 64846 29372 52953 20356 55347 4343 60657 20005
+58787 18756 56645 15077 61047 17704 43447 15664 38384 49334 19149
+44519 27513 797 20220 49120 29791 45669 3815 33754 64192 16530 49915
+14703 39787 51054 9204 44643 35312 3742 38361 30498 47314 4426 40267
+15293 51338 23476 7483 34787 61379 21236 55576 25246 9550 62481 32402
+53500 19161 59727 1792 54282 13515 57604 15298 27995 52535 25598 6322
+43383 9529 28202 63017 22920 7194 27398 58253 19726 64653 23656 55077
+2249 26131 43665 5201 47746 25212 45602 17675 42633 5449 61290 19961
+32072 36442 7677 41493 31494 14619 50594 24125 39254 1284 33853 51206
+12656 49571 5121 48105 10076 44453 6779 50884 12117 57107 20115 65343
+26573 10514 61575 6030 52110 28778 41859 11136 47637 36095 12688 46409
+4035 42809 13045 51240 26527 55597 2275 59002 7789 55971 31796 13233
+54480 2802 58454 36485 4844 45035 28491 9304 23316 61384 19561 40371
+64916 14430 53553 4631 40891 56572 15475 64356 23551 40101 32810 27338
+57316 3316 55115 33880 27174 53049 14666 58468 29170 40454 2048 29868
+50432 28251 45961 2735 42978 31455 50177 25313 10000 20152 47294 36055
+24507 57458 31726 17215 48755 26341 37330 1466 58149 13445 55270 37243
+6852 49553 13923 54549 7694 65226 29108 2011 37190 32061 4526 38513
+64955 21409 54548 16635 40319 28296 36674 26150 51566 3661 21504 37282
+53363 13866 44454 2818 46410 9714 60298 6996 30257 41340 22262 42495
+55719 7940 28275 48773 3803 65267 12572 58135 25852 37586 3030 46691
+17438 43712 25150 39577 4676 46011 11564 49706 7158 40110 33766 2171
+25455 42344 16329 49094 13430 37187 2606 39069 27098 49586 1765 37587
+23151 50729 29541 2437 52782 13872 40687 53312 33245 5710 62725 13735
+52381 17697 30981 41444 451 57846 32225 20687 65138 26622 16863 61717
+21901 57141 17306 62527 24002 57442 1964 35822 58776 25662 3530 42734
+12011 51049 39337 17859 42385 6453 47492 12101 37537 30093 45539 4548
+49143 37731 2874 33321 57890 15141 55490 32965 3851 53212 31635 49847
+11418 43949 32679 7508 31347 49333 39393 14348 53324 21303 65179 1872
+56030 29408 53285 11771 40806 57218 16998 53885 21708 63801 38360
+11473 58838 20157 55832 26283 7371 57103 16113 61333 34036 24791 35218
+58225 19141 38352 22795 44856 6592 37928 52873 22786 41270 21108 56027
+2883 58383 29756 5729 51786 19701 56780 21604 63448 7491 45564 13596
+47568 34397 27862 37621 4574 61761 21139 44215 10885 27970 56573 13130
+62924 36159 49033 14001 46344 28991 1644 37517 27360 59760 17569 31620
+38338 9119 47170 2019 61668 9976 34744 45480 13844 48155 7040 40671
+31468 5358 52333 15412 61686 35241 6857 59320 15053 57019 20659 55054
+4071 59448 32590 63239 27083 13052 46090 15380 50646 38544 5143 62988
+19293 51241 20968 44015 2896 24558 45084 20313 39954 23697 46292 11858
+52663 21558 62226 16767 55384 14789 34043 47676 9454 31743 60214 5977
+63066 10779 31019 56631 43616 12530 32085 40560 25597 58962 28883
+51736 16649 34259 49227 3963 52223 10317 20059 40287 60502 15337 37084
+27368 50435 32691 16437 61257 33758 27994 59235 11838 53612 19381
+57918 22986 61342 18874 32003 60112 17261 47120 57251 7555 62078 27070
+33589 47396 24764 65402 7954 30152 45225 11961 62342 6029 57709 34238
+24743 64696 10345 21752 60426 39141 18681 42103 22755 59839 6631 56070
+27310 36672 8145 48487 2261 33493 50420 11766 45212 1256 41287 12195
+46107 17933 31766 45437 15939 39886 54329 18648 64687 29405 1145 56078
+13175 58467 35896 24837 62830 7869 26918 64422 11805 21851 60733 42382
+18012 46249 19319 50364 38822 14584 45028 18551 61789 4664 52826 28192
+59696 10295 22884 61117 30507 7912 32530 44255 23755 14211 34647 48052
+26906 688 45699 10769 48275 3445 27302 44887 5283 42729 13063 47452
+39822 19610 45021 28807 11089 64822 2718 28780 49079 5077 61027 16003
+55366 28325 654 45736 12322 48910 16398 32005 39184 15313 63248 30805
+40303 9586 38097 28791 36614 19341 61319 24825 9310 62965 20320 48443
+24846 42049 16025 64431 37990 19238 50198 24326 2447 33526 55428 6348
+58403 21148 48491 8471 34687 47837 969 50518 27704 35639 54045 22564
+49175 16624 29154 59808 22695 56066 18665 62327 35461 23936 45593
+10584 43331 22983 39346 31865 9526 47415 15773 40752 18123 48322 1966
+34808 55446 3431 64409 8831 27220 43581 12896 46203 7521 65364 28114
+34356 59394 14538 62017 998 57857 16811 40990 27964 48514 8531 50326
+26711 42776 1665 29214 58539 37686 17650 43064 22145 54123 39597 8672
+28321 57851 842 61371 10044 36748 5105 38856 26886 56267 15598 61902
+25941 33873 63358 24201 433 33275 56076 9674 39401 5214 51837 10168
+48720 6762 38355 31644 1345 47167 12525 43042 2528 38259 52060 4015
+30429 36236 15093 31423 39475 551 58313 9043 51538 21655 34467 59440
+19801 52989 25779 41009 12692 46736 7649 28851 48381 34838 8301 25061
+49969 1893 47901 10948 38195 16205 53378 21785 60886 18864 37989 58508
+6505 42389 20081 52893 27710 54440 5027 38269 60054 9650 48124 5817
+31311 37322 8105 48111 22988 35108 45617 27673 2990 50064 14114 41751
+52028 16999 32914 47097 28884 9977 38823 397 58938 8415 24908 65044
+2143 40809 24590 37831 17151 44705 20567 36922 50697 3492 42787 27487
+50002 11455 39114 62423 3161 21472 64734 37748 20702 60296 19187 36730
+56887 16854 61556 28195 52491 4209 31331 60005 1708 40624 52814 19982
+39054 52151 14254 43862 30305 40593 9722 34630 59575 19072 64361 4546
+34853 61921 8118 49273 26035 2207 59814 27106 53597 888 58705 31807
+3509 41475 51578 16296 45540 12132 57761 6352 51230 31657 1051 45872
+7656 40541 59043 11307 30088 38725 12148 52611 31102 63346 13242 26346
+62325 16321 57900 7219 19047 42093 4881 63744 37197 90 43046 11334
+38340 2833 47519 8369 33995 56433 17748 65431 4326 52165 34942 26171
+64248 7474 54238 12519 31403 44501 18752 43089 21602 34137 59657 17641
+56639 34691 25018 39730 10389 53161 6259 48397 26772 35580 5249 30840
+59531 3443 24190 43407 30243 6430 61243 20184 52270 22726 3870 49440
+11426 47336 2344 20681 64177 38106 16102 45808 23091 51296 17421 65502
+12422 45677 1227 43867 35694 13768 47103 6318 43866 29744 45668 18201
+48161 21408 59780 24994 44184 19764 55779 13545 63575 36368 27240
+62425 20932 54483 28557 13350 42614 56484 9339 63150 43435 21274 52511
+17485 30726 40790 4103 53738 10575 42036 4630 48158 20849 59870 18659
+55629 38110 3315 53786 29310 55876 15650 64889 34800 24893 50531 31997
+5622 45775 15175 44275 29457 12419 54257 15796 63483 30758 8908 32548
+64004 13635 26854 52346 22893 63191 17549 56481 33328 13889 60191 6818
+20755 64052 33981 23285 57284 31951 1027 39143 60079 5709 56082 20686
+63834 32577 27529 35757 47729 17576 54215 15406 57256 12332 54669 1236
+63538 6710 32068 56540 15179 63003 20095 57989 6060 32902 49642 35717
+8348 29856 50964 6507 42436 30806 8070 46836 34167 15981 35465 64532
+14387 35975 54303 23782 6203 46127 27101 8244 59364 26234 2030 63782
+24641 51105 7722 31264 37564 24260 54009 20557 44164 19112 52813 37037
+15854 45047 14534 43613 16440 39929 52636 14843 30929 38839 468 53535
+17428 30534 39793 14715 60483 26638 53289 15660 31247 51562 16288
+63674 25893 41243 5527 23448 51553 40373 10537 44312 24460 34348 60986
+21702 52698 27324 10846 53826 21318 64999 26574 53411 21815 60858
+27794 515 47980 25164 44387 18675 60719 1120 29495 43208 22086 39427
+57848 9743 60510 6994 30809 53540 1709 45004 28790 4055 60359 15589
+49958 22442 42331 30004 9636 52089 34485 49700 10754 35354 63895 13194
+56762 35858 23415 46175 7853 33111 63780 19213 56339 26808 35433 50675
+23791 5238 52959 31464 7910 32704 47624 22495 52671 21722 61013 30038
+8284 58434 27493 54743 13118 58677 8710 62490 2817 36393 10980 40782
+603 50126 22451 42468 24860 9055 51784 5394 41569 10607 36328 63926
+26747 16674 46089 24996 5202 47693 9935 36964 63531 18498 44604 22849
+49203 18177 64228 13614 37570 375 42199 31744 17189 62217 13392 45110
+4694 43770 31406 12952 56566 3116 63697 39360 11615 52688 4262 62657
+22290 32682 39269 5430 49684 21686 44185 18719 49063 36859 328 41567
+11198 43995 2254 50331 25898 43246 29844 48949 9740 52928 5450 35624
+21458 55534 29653 14620 44418 24383 49999 6866 52119 12191 60926 5001
+42508 27904 46555 6105 42844 21681 40789 18851 45902 16389 35637 46754
+539 40941 13467 52280 25931 9808 54420 24735 59212 15443 32227 64142
+17777 54369 25872 377 50188 9701 25277 49390 22828 9419 34702 56790
+14648 62718 32954 17559 47552 35098 15074 46118 17539 39745 57650
+13790 45281 9341 41512 1057 60932 9009 24542 55362 6648 64506 23685
+56115 8684 26229 64852 5948 59555 33277 26487 35357 63609 3736 52703
+36439 17110 34526 65135 5236 41699 33796 645 44155 17047 54505 35819
+2712 22181 53373 30252 3622 48131 11966 44572 14813 32832 46560 17299
+41670 6480 43888 12992 41388 17201 46356 35096 12383 54000 7190 41262
+13031 37810 55672 14331 60130 5330 20461 50499 25241 35582 47819 20032
+40173 11142 52336 21234 41823 32269 480 57244 17532 64234 36239 22258
+62713 17834 31931 46647 16111 41371 122 51118 10457 28802 53861 40068
+13148 42716 32083 6732 61711 10382 34007 49106 18473 62853 27561 56974
+2195 40916 6683 37657 17025 47495 20942 40875 2037 34211 50111 23228
+32523 40832 28118 57042 23084 63812 32067 15879 60499 3939 56688 39534
+18395 48728 24354 59487 22448 5959 38751 51554 1443 37059 55199 19532
+60033 32240 5754 54318 11241 61999 1087 39357 33503 23774 54574 28022
+63254 5499 45979 22685 41890 19612 61206 35528 8603 46291 20823 42390
+17486 26777 58191 20208 40137 25203 49004 609 47379 24997 35865 59556
+2815 56380 7604 28898 61840 19763 54760 29846 59644 21339 39593 3972
+61987 15964 41815 20063 39772 61670 10211 42726 8119 52879 36079 1913
+34614 45542 21893 43550 22761 54968 31343 8714 32423 64108 28917 59201
+10852 55313 25265 58784 8891 29148 53735 21738 45252 18119 38367 61736
+16247 44396 4291 48708 39035 1824 43839 10405 39595 63283 21399 58413
+38622 3326 62339 29533 48182 16694 42897 7 37717 55592 6406 58334
+31702 4061 53858 27926 2373 49451 27144 56365 16057 48113 30234 34410
+46605 18506 42417 31354 4498 32958 49443 37474 18546 43210 21515 55047
+7257 49386 11377 42638 24637 9070 56822 2986 23750 46283 19349 53967
+22688 60325 30453 9548 57757 29136 61230 7861 38399 65523 17343 56776
+1449 39110 58172 5860 60381 31714 54707 19529 59035 3906 55417 11521
+63021 31378 19470 58674 22174 46627 30897 8920 48762 27715 34166 45119
+29637 3 65149 12040 55801 15155 62640 30455 47744 9072 54351 36811
+12176 45928 3614 53664 13033 1376 40624 60452 5705 55021 21045 59210
+18595 33600 62667 4734 23896 55571 955 60028 20261 40503 28662 58453
+14060 39308 3843 42181 15503 44809 25785 63193 13123 57397 4765 54345
+23635 64684 14774 38021 4491 49237 12217 51534 7618 47400 13918 53754
+37957 11256 43622 16303 31081 54766 9958 43418 263 40704 57654 23504
+11799 60835 32536 13217 29019 42750 15686 48340 25806 37456 32843
+27117 58044 9239 44411 7001 36457 14999 51823 11723 58758 1431 51216
+30489 14880 52546 29015 61558 7356 51524 34999 1574 32924 49718 8581
+34963 59827 19351 56723 13001 31639 40370 23712 33840 53444 13204
+48493 25923 7102 36607 10464 57853 33694 24581 53888 497 59378 11566
+26483 51207 17722 65471 31167 18796 59202 27111 10757 62380 3406 39830
+14019 48466 24130 51243 20324 3061 35586 49045 29500 3967 32675 51076
+13893 34371 60364 4684 56269 30114 1446 40295 23252 52845 12372 26679
+55496 22270 57937 32575 11994 45096 6789 30736 46508 13626 41660 4654
+60576 31554 50902 24132 11765 44768 21202 37090 62245 13227 41669
+63163 34564 6557 36262 64976 25134 11567 57150 3751 60473 10485 52326
+27955 59357 20834 1511 53932 12889 47915 15132 44673 23557 59884 18006
+48306 33645 27580 36063 50854 13658 62392 8744 39659 4748 49927 36372
+15721 45124 17855 46579 14593 32002 41439 25829 50750 22068 11513
+49587 25290 2294 28390 50544 15785 37395 25413 43040 5701 50075 37886
+13952 50622 3655 62562 25167 37055 2351 63626 13431 56976 38300 16573
+42581 3712 46415 34113 5976 24363 63938 16622 28024 61288 19814 38305
+25602 45502 56995 23160 12085 37611 29891 45454 8961 38104 48355 16300
+36930 50242 16844 45558 29640 51434 9002 44490 1501 47742 25585 55394
+20189 59549 8576 53852 19385 41864 22799 43278 32697 9421 31731 51098
+19411 60206 21909 64389 17459 38775 26802 36635 6491 25909 51355 33090
+65424 2326 35080 60966 17498 52612 27960 14197 49767 29538 41617 7737
+65165 38357 2064 57939 29883 3169 56640 12922 48856 17068 30785 61380
+26244 57083 22294 38784 32801 26217 40084 33541 6278 58425 36206 54
+24022 48705 12000 60315 28347 54527 17157 64516 28163 10269 43349 6301
+50330 20527 65534 11993 45086 16772 42984 3193 40144 64457 22073 52002
+18338 47650 12169 30884 44731 21996 47035 34680 2393 32987 38177 4930
+46618 13248 50672 37725 17082 53385 20466 58606 997 62598 10455 33860
+50155 23384 8314 43522 62261 17105 36354 64996 7017 31094 43852 11085
+47012 27052 58437 7342 29121 62215 36868 14112 47747 4807 19719 53416
+36126 27564 56476 18373 59027 22287 53187 28017 9085 20611 64099 40412
+18362 52710 10668 25934 47848 22576 11146 21496 51890 23112 2807 40417
+49728 21669 38643 26598 41054 20225 47574 12392 44099 62244 28984
+36586 4171 60921 32592 1782 35860 54072 5402 57946 11894 61527 7946
+30681 36998 26298 48583 32790 14923 64629 32066 6591 51217 28150 58973
+5340 55441 9269 29001 63196 37009 15226 39860 64012 35264 8856 33159
+62146 13747 29226 57948 22686 1692 64082 32831 42796 16160 53576 18801
+52624 23219 49417 7607 27388 51780 22491 59036 28241 17181 53338 41271
+2652 39058 48169 5788 31812 58511 8767 29035 16600 51415 28477 49328
+2999 26524 64513 24505 2272 57415 29303 8349 65392 33360 13694 25165
+57055 22438 64747 19146 42937 11729 46421 30086 38626 11282 49151 3111
+51734 14352 62187 27239 56857 6003 45195 10086 43495 1149 31532 55509
+3612 58854 29765 61783 19999 8175 27251 46069 19038 30219 48166 8492
+64470 35621 3365 55944 20845 53204 31501 16537 50642 12375 39940 51161
+22129 42114 6182 52283 38693 3413 42370 9909 46689 2527 56102 8775
+64410 16783 47238 25772 17995 56878 38490 16064 43432 19637 41625
+12902 42921 3989 37432 54047 16368 62227 35386 1408 28198 51945 4479
+60843 24139 57404 32273 14792 45151 1477 41389 7662 65107 37270 13715
+56730 6196 63510 28225 57820 20018 54102 24027 63081 4180 28584 42934
+9493 46744 29590 44257 16714 39806 55578 13318 59974 39172 14678 33662
+48040 1958 27421 49379 15857 35769 63462 14560 51758 17375 35256 46437
+20823 3018 59812 25870 42304 60929 24101 2244 50983 10555 40536 1147
+43310 11413 39334 51782 35594 5322 27046 48960 1369 59862 38762 5196
+56173 32334 60637 9891 33637 54758 28120 5383 62886 12861 53741 202
+63721 7710 38959 32389 22373 9879 50365 27157 39294 19897 49960 27732
+15467 44218 22211 47325 18963 43237 55200 1835 59415 10834 56422 28682
+2260 41464 57068 23434 345 40026 33570 16432 35692 45393 4458 32383
+55963 8239 22284 46100 20613 49304 1232 52815 44457 9407 33580 47186
+27807 8156 29835 47941 6377 39267 11496 43156 20865 36932 61311 5522
+41449 10386 38109 61770 13027 27002 50707 22333 13758 55778 42066
+15710 50641 39789 46926 7627 63420 20484 56229 41257 15465 49967 39895
+14277 44698 25577 38524 3202 49382 35607 5032 38806 12214 53245 6156
+61578 24302 209 64301 33249 26839 60775 29352 36623 658 48464 20501
+40225 29174 55817 26862 34492 48347 19091 44978 21272 46497 1853 44141
+31451 57412 13413 52121 4394 37879 31605 15458 47483 26406 38593 10810
+43551 4500 44645 28509 60522 21070 8242 64742 16038 59154 33479 14652
+55233 20058 65252 29024 49885 17555 45422 24315 53486 12492 62506
+42000 7876 33315 65356 3618 55301 7072 61030 21580 55863 17970 31700
+41575 9494 29306 55476 41201 18140 47203 34894 10154 37961 5964 51349
+31367 62333 20154 52673 28671 4651 50583 23518 40962 16866 45368 7395
+42207 12124 43842 18050 32918 56789 19256 60170 26699 7612 33395 57086
+5523 25275 45091 44 28366 53309 5803 22003 55753 40364 20737 59390
+2576 25135 42148 5863 31310 65377 10901 56630 30395 37779 9801 33116
+7842 34860 48153 17247 62922 26452 54611 19185 65263 25296 2991 60961
+30174 56905 15287 41991 31249 16028 50511 35626 334 42794 26664 47002
+15299 59232 34817 18789 45652 23503 42790 16779 31029 56848 2919 42257
+57479 16078 63190 7895 55821 12102 65415 34261 9873 62658 123 38914
+32369 17541 41752 21935 43524 17928 38511 52631 20887 11033 35125
+64096 19374 54203 25068 61942 14234 51850 18238 41532 27893 57509 4185
+59932 24017 40465 31775 18150 38324 61303 14953 54210 23493 57657
+19981 61807 26775 59434 4588 56494 17208 31454 48542 19011 54469 23916
+920 34774 56726 9723 59836 36349 24206 1919 64910 32457 4266 24407
+33835 38298 13900 32570 6659 52900 9704 30953 61535 6158 54221 14739
+59377 11220 62424 21317 51024 27326 36463 32291 17288 51339 36799
+14610 47193 5853 37733 12294 56400 25420 38830 10519 63055 2599 36861
+12665 57897 6947 61391 11852 40477 15413 54220 22443 49811 6049 41138
+25387 63062 20309 58295 33970 6350 61901 16897 59281 22215 36721 62498
+6862 24676 45945 34364 27937 47803 1860 24611 45293 8108 47432 35333
+12560 23420 60918 35855 4248 32470 39116 2824 29809 54224 10807 26254
+47241 30255 37758 25593 45442 10703 46892 2414 59220 21406 48580 22409
+7944 62941 11257 29598 55768 20526 60357 24763 9165 27373 44311 15542
+36388 58978 18091 43837 11188 52266 24650 55775 15859 61520 226 54750
+40098 7132 47634 1612 35221 65245 18028 37318 30107 61281 18302 36546
+64603 16074 41212 60856 24487 7857 52779 12404 32721 48813 19056 60195
+38079 213 44214 21918 50317 15222 55076 43365 21665 64905 13363 44676
+31289 8193 32515 45866 6984 34365 47030 17128 43838 9542 36221 54536
+12130 65116 29634 17071 58585 13941 53070 6002 41365 11849 50343 31173
+6766 61489 10786 55640 36496 19428 48160 29690 6089 37166 30853 45940
+17351 43036 3266 51894 28722 37012 25651 55993 6644 60936 11376 47733
+5623 63014 9834 33767 61577 29222 48629 13247 43525 8579 42188 2176
+47524 24103 59517 572 48852 16858 43795 36158 9923 65200 7858 55731
+4668 24865 41663 3231 43918 10438 40177 723 44571 15185 41899 12711
+46660 1844 34835 63225 8182 49392 31097 45556 18689 43659 28888 7063
+49444 30034 37265 14916 60239 9824 57454 689 42980 60615 22416 35913
+59029 17693 34650 47883 20553 42843 18561 45959 28141 41231 9469 60875
+2848 57299 41021 7463 28574 55988 20602 59198 22283 44212 7664 46174
+15839 52144 23788 49702 21555 45942 23315 38382 25738 43112 5629 64711
+35313 9190 36233 62171 21389 45009 12112 42613 1756 53985 22922 35114
+50910 908 48831 9846 20053 35077 55633 147 53585 10253 37039 30323
+63469 17874 57553 29986 670 53931 43150 5887 27509 57942 11058 52054
+23177 45221 15225 39853 57432 20766 9883 50373 936 35250 63143 20142
+52749 26137 39678 5148 58411 31741 38453 25737 50741 875 42292 13783
+47964 33221 56832 2717 61247 8766 26625 48285 1297 60902 35405 3497
+30239 49084 20980 36301 29202 15372 64035 35957 22043 50168 10212
+53708 2829 51639 12224 48628 27210 11351 50891 26328 9401 34589 44956
+18048 38788 57315 10566 54949 33721 15037 52531 18002 41006 5186 63724
+26980 1005 52723 29262 40961 4087 55843 21982 61652 14514 30593 57996
+12595 53580 22919 59437 25907 3663 33618 39996 6801 49319 36594 22927
+35025 61639 20852 44062 1735 54117 37234 19858 46228 26930 5647 59718
+11251 64342 25444 55185 809 24556 60290 22394 40510 20546 59195 5033
+49332 14371 45360 29823 52369 26232 54607 30420 49378 24169 4302 44687
+7082 51912 27639 60809 15568 56398 29874 7394 37741 31772 12089 54851
+29677 15638 52413 34538 22463 42694 30419 51384 12672 56886 31800
+64874 15689 54898 22958 52084 29385 64332 25036 53726 14083 27001
+43951 15620 52973 7398 64707 3835 37840 62361 16949 55114 6383 52737
+29289 49961 18234 47856 25441 11152 44432 3557 29092 45925 1173 31708
+58062 4544 55319 33041 508 54798 31529 18340 46149 26091 12544 52512
+39406 4160 42909 13534 50068 17919 65012 28267 59665 6658 35838 11126
+54911 4218 64049 13652 52868 16371 49398 30760 18009 59296 26987 769
+53674 7470 56350 17094 49098 13173 45263 8278 30803 41653 24849 56967
+32693 49933 13154 42197 18489 61318 20398 50516 6618 43638 34452 16528
+59620 31421 15648 33728 50504 20535 44517 16316 60051 5766 63331 31115
+2047 34957 61997 22450 58579 27252 7513 33320 37977 11841 64627 30558
+13474 51248 3351 44292 14449 61632 27645 53548 4162 43274 16570 41314
+21340 38522 55470 14996 39668 31211 12979 58717 38889 8977 41174 58026
+10954 52135 30495 12565 56259 25910 45223 21246 41452 19944 42833 6559
+54362 37630 3350 46233 30620 54052 851 64360 27067 4445 42846 28725
+7665 43390 29529 61529 11913 45230 16680 39036 49118 18981 7106 58209
+20516 33603 49575 2567 35493 50337 21315 42555 782 39098 7157 49687
+29049 61419 20172 55152 25815 9187 63492 3288 29378 49181 16985 64197
+15590 33152 58354 3381 38582 49631 17417 43261 20842 46669 14350 50893
+38151 6820 47392 12977 44765 16000 42194 19501 64259 23941 2864 36771
+12487 39164 902 19995 58440 39139 18097 60225 36198 3095 34087 46288
+20614 39784 64740 13754 42590 62593 35259 6275 45729 30676 2491 57283
+10571 63385 19841 47663 21837 6792 25945 46147 32411 9115 36540 3129
+35892 9953 33939 57944 39239 3387 60993 22859 40049 29958 49031 25208
+12630 45354 23067 43185 19453 39371 32027 62141 7262 54673 33558 65146
+23505 55389 15819 63132 12014 40513 26158 37034 20124 47664 17013
+38071 58178 8413 41989 63640 22874 15184 62672 32562 55128 1405 40932
+32264 3752 37171 22186 58200 40572 17252 41988 20350 47073 73 59944
+34351 3283 50967 12546 33120 48054 18608 40113 24579 36617 28846 60508
+25671 56114 15736 64263 13712 39377 3506 26724 63814 23198 48301 4779
+41678 12650 55921 27294 4012 49301 36579 9163 63830 41139 12170 61692
+993 37609 28869 48908 18287 52645 24297 51374 14784 40348 16825 52207
+29496 57835 4689 49941 19164 43848 35392 23047 54802 17737 46834 35131
+9440 32407 63735 23204 51826 10646 48744 30306 4282 33538 64296 19352
+44842 26304 16597 64871 28403 6302 33594 44035 3241 32364 42081 5220
+34784 61767 8117 57536 22975 63617 16618 29318 58498 20509 62958 17126
+47146 21769 36302 60665 16139 47990 24335 54115 4126 25494 49546 31730
+53412 8626 32710 60066 34781 26163 51181 9227 39091 24806 47754 5455
+63226 16217 55194 19695 64466 21466 45196 8541 42673 2177 46141 30822
+40506 20039 57862 7918 38180 28842 47572 9098 28011 51824 18374 31627
+53962 1640 40292 8286 58889 33836 15644 53692 27760 63911 8440 56513
+30680 51528 7601 35065 57376 20835 65010 22923 51594 35511 8969 29723
+47809 13750 22963 57556 24773 10593 53767 4649 27167 52641 23059 3437
+25969 60487 13069 51028 25080 39100 28191 36919 281 29759 60933 33155
+52445 4933 60428 27522 55783 21860 58542 43464 20406 6150 23506 47546
+28649 11839 58871 13460 21166 57899 39616 239 57224 11489 63684 2782
+12352 36770 27783 40725 20111 9329 41733 5500 49132 27723 51999 21374
+64347 10638 56399 14023 62892 4021 23928 50104 29862 1753 34672 47660
+27069 9131 24912 45245 11467 51080 20122 47808 33677 1624 30581 61122
+8324 56178 25046 39991 31682 19754 57041 24118 40860 57805 9946 31389
+64966 4115 58604 9049 38192 2953 40113 32903 5798 51793 18184 58256
+43307 7465 38629 15290 57762 25590 45020 19129 38940 60559 14304 22296
+51874 26728 3015 47962 17120 31706 56696 12824 25201 42113 11392 43379
+6770 46577 4459 48688 12263 44466 17450 40486 14419 55986 203 61130
+8818 29570 64101 6117 24379 49745 16239 37839 6606 29369 62850 18451
+58277 24526 53867 9460 49187 5191 53270 34431 2112 51681 22359 60707
+17148 38829 62209 17911 58769 15515 31087 47779 13757 39857 2057 33928
+45686 12942 42266 4797 39780 11574 56129 8200 29505 51721 1659 62566
+13685 33945 57777 20321 2460 28156 62800 24150 3645 46373 12531 35845
+60509 15415 57581 18587 40482 11025 36834 28594 46210 11684 41034
+16708 52107 14824 59950 17574 55920 12403 52344 25512 33587 56558 5028
+21590 61072 41204 13803 65204 8693 34197 62431 22415 44675 29190 4343
+62101 32840 2189 36118 48624 25118 1299 38013 27266 47394 10205 42345
+6843 45098 16416 56219 26770 63939 1664 54859 33346 7585 37224 63365
+17518 35149 44548 8078 48353 31334 53569 18096 47956 20147 62738 5575
+53423 18922 58945 39827 11941 44864 16319 40697 17714 43080 13602
+47195 8377 27319 52388 31779 65464 17443 55545 34638 1542 50828 35713
+7821 30695 51558 20788 37602 26478 46650 59192 17621 53064 1974 58351
+32137 51449 24751 38539 8862 35330 2708 32029 42577 5912 44321 20826
+49090 33325 14297 55528 22095 58479 5452 53415 31672 59805 17168 61802
+30954 57398 8608 63438 26972 51351 19242 44991 29892 10281 62866 7545
+44494 11432 47512 5017 21814 50307 38296 16080 46449 14826 51829 18580
+63328 20070 53445 28546 34986 46155 10073 32279 20523 59882 31602
+10866 52331 1269 62960 8927 23918 53020 32616 6774 38655 54323 22836
+39854 50869 8116 33077 55080 3887 59661 27228 64034 19989 42571 23343
+64953 1818 31599 61697 26726 34486 45507 15938 48231 37116 19035 39824
+59446 1878 55167 20121 57312 40087 78 45646 8186 42351 20941 37075
+27627 59842 11798 47526 20715 36081 48805 12323 53846 24769 10507
+50821 23350 49342 577 36876 28485 52643 25756 59844 7434 55086 18996
+51601 23295 43343 18477 49558 37314 19521 42046 22067 38166 47235 9544
+40859 55840 36274 11102 35546 54172 22269 64428 455 28513 43959 6356
+31493 53382 26191 59096 4540 34491 55947 1603 58731 30871 38603 25085
+43983 4660 48115 35705 1168 45089 14127 50936 39894 25031 693 48426
+20377 44225 27397 12646 50023 16668 52568 23692 42676 18320 50281
+22981 10706 34728 61758 18658 58125 15247 53619 28305 58692 13621
+40949 3916 46688 21000 43031 17135 45650 27534 49922 760 30546 51468
+19427 60972 15309 41255 9347 43207 1052 40109 12347 44822 14213 43393
+8450 25356 54632 2592 63647 31251 53143 1457 63116 24655 35243 62023
+392 45125 10665 41742 6553 46879 31402 17848 62899 26373 47299 10125
+61351 5553 53878 21636 4800 42647 13690 47027 35953 22164 12959 61961
+16711 57304 44693 24388 52605 13320 60498 30229 38883 8809 64836 35635
+6656 40285 12990 45562 17706 40040 3361 42196 26319 5625 23789 42026
+18462 43789 11954 39065 3055 53436 34826 26663 51723 17121 62028 20549
+37252 63897 26333 2559 52969 34099 26317 35410 44652 7181 46787 11331
+59603 1583 24241 62788 36321 51108 2290 45919 35140 22328 40311 28776
+33825 46140 2395 41435 59094 20926 9837 62827 5174 21800 64759 40926
+17476 47100 35220 15864 32831 53504 9128 54780 14075 34571 46351 5765
+47715 9980 24011 57296 28589 2624 53759 10508 32947 43498 12173 47072
+32680 14412 53066 25759 32670 61081 2468 51203 14012 39458 32905 25042
+62563 5673 29696 44464 1097 46767 34190 4393 40480 13147 55608 17614
+62816 4990 48853 21536 40463 27213 37323 10288 61984 2906 59039 26658
+5426 63899 11027 56393 6938 26959 64689 23113 13345 50304 21146 48440
+7665 43364 14603 40378 54907 17230 62370 38349 1921 43421 15246 51006
+25318 17825 47949 27116 5581 64002 10517 29796 61166 23468 15066 65529
+22516 59531 31790 11310 49972 35109 26370 58027 4815 55400 37913 3123
+60114 10261 38729 7165 57280 14140 61239 29511 52976 13461 40925 4414
+42739 32568 1999 31785 47175 21907 61113 33811 9730 34918 61849 12034
+58580 20045 42747 59204 9612 38685 1938 54493 18765 63658 28274 58791
+22085 54142 27552 61396 17246 56202 36235 20669 42512 27981 7997 22740
+42042 29853 5925 49473 13241 41109 16713 51521 29733 60538 15831 54922
+36297 4371 50178 15196 42159 24574 43685 15591 41022 55954 19576 63310
+26415 5175 59893 35084 319 42608 30994 6708 61312 17249 45764 25632
+1322 54175 29197 16354 52127 27600 60976 23096 35897 65434 11855 56998
+15471 52350 32558 48267 14147 52838 4485 58572 21587 65130 16119 47889
+4850 37488 32255 1690 53350 28646 7958 43590 59535 23514 9559 62440
+351 27511 57375 23412 42212 17286 40755 52743 21561 5479 25625 55349
+16020 64507 6391 56580 13833 54577 17550 64907 12931 29870 46772 34058
+28103 35265 46106 25900 1652 58944 28067 9400 49705 485 36743 28868
+38121 25828 59286 18399 54091 21866 63387 33163 6729 40934 60215 21343
+49292 27860 17324 65277 26913 3779 59594 35851 17183 49955 14782 40838
+23853 63392 716 57378 7980 36589 55285 15679 35387 64515 14383 56520
+28246 63353 22459 33528 43857 11097 38087 32332 10045 65515 1166 58073
+28871 34042 45642 14068 32777 53731 22700 47686 17782 33051 51023 756
+34992 59033 5660 41421 26659 58664 18883 56389 26605 10727 50664 24375
+13231 57210 32605 63678 8922 38697 61920 13590 33365 46955 22097 36629
+51660 8296 33316 46869 30945 8985 36525 2694 62622 13512 52769 7671
+36134 46651 17127 31074 43025 24833 32526 64892 26433 34877 45112 3532
+42037 6357 45963 23729 63255 20540 55350 24140 62249 5809 52155 11190
+28448 54139 25833 3388 50814 35859 5280 33967 21839 32469 49038 25601
+34352 46958 5073 37696 11453 42546 7122 36735 2884 47065 28927 5259
+51666 10803 56344 32640 59858 15635 55232 33520 19486 56286 24076
+59019 35023 2568 25543 43645 9217 45737 21452 33419 58238 2412 55259
+10724 65067 30461 25312 46033 8010 39706 52348 16077 48467 26211 53980
+12425 41230 22777 50288 7577 37182 58805 18630 41164 47431 2463 43218
+10210 50725 722 28570 42960 20337 46282 8858 63977 294 55780 28299
+37266 25914 46478 12787 42056 23563 59648 18653 55293 40268 14579
+46685 33458 19300 11271 40530 55136 20795 49159 32625 10381 51409 3860
+65511 27942 8722 47083 30971 44148 9523 29859 42835 24259 34353 47548
+4519 44042 35404 25109 55172 291 59964 14192 57139 10999 53790 36912
+14951 38757 62550 21394 57270 19059 61250 3287 51486 8293 39852 11073
+43203 3037 38887 52286 22781 11384 44219 4981 57807 34978 7227 36276
+44475 23123 8910 64669 5059 33889 56491 7053 29740 43066 22565 46363
+18917 32320 50678 9870 30795 41047 20900 37793 9011 51817 6102 59484
+24659 56731 15813 51955 23870 46327 14700 50000 7114 20955 52696 39309
+12453 44017 3433 39177 58303 15031 30526 46211 16974 31556 62086 1543
+38752 31359 5014 49484 33823 3071 35475 46458 22683 6097 28012 48325
+23573 3524 36976 57627 12278 54805 560 20615 39689 57451 3706 55623
+27661 54324 22098 42455 33237 22833 63382 15397 29863 60784 10956
+57066 14649 45996 362 48335 9921 27990 54842 19331 59606 16945 51844
+11459 44580 8002 48313 14268 43893 18538 39349 59294 6462 48888 36752
+14633 23915 44766 64946 11607 57013 5898 62061 10360 27313 57692 20924
+55237 26669 64271 23170 52251 19838 37544 65105 17961 46105 15046
+47902 4219 44529 9666 51264 37091 3569 45850 7727 21622 63571 39467
+14131 56869 30601 64546 8514 38941 31235 19148 50795 36051 1035 34374
+11383 57138 32056 20302 45051 7337 63584 20884 34045 58252 2051 28585
+62572 30820 10878 49808 5307 31353 61690 21422 54757 25968 33671 48620
+6915 53862 29663 37082 23079 33762 39296 10047 62282 7188 33455 57130
+935 50267 10837 43230 8498 27560 56633 5857 60613 36344 52087 29157
+4585 43902 12912 61076 37384 21898 44271 19223 37973 56661 14597 58523
+16758 61447 39232 3299 60301 10279 26637 61812 22179 7243 48341 11611
+43301 16645 50200 3747 42378 18852 32025 55566 5508 24301 43263 8009
+41995 12394 44145 20996 48259 27962 60534 17281 56515 26430 13765
+64378 35186 25901 51085 14752 45597 24700 60497 13323 51435 29684
+38502 26371 47335 18264 32323 52806 17609 54562 12596 61273 2593 26696
+59044 6972 54769 3113 60535 25471 42311 32384 20522 40471 2649 42721
+33984 5602 32892 56458 24652 35335 64214 28200 354 59637 24196 61740
+29494 5240 35623 60722 9925 53071 36800 15240 49216 16603 63542 37422
+13527 59546 28756 65466 9492 55546 31362 52353 16168 41719 53568 28793
+7517 44948 16448 41948 62337 27780 13043 44317 17883 41869 14525 48766
+8593 57590 3853 32115 47934 1337 39917 34037 6325 52037 18902 55981
+20768 62918 39619 11985 47550 30693 36705 619 38532 16292 59967 26866
+37757 30141 65362 241 24702 44325 12754 64181 32216 55968 8723 26488
+41434 17232 45430 23131 36122 43527 14247 47885 3607 45814 14983 42125
+12775 59691 7747 31755 40434 859 62254 26691 37869 19991 64782 26436
+14718 60269 18712 32416 53662 27649 5695 51090 23120 755 27353 52550
+17214 60773 34654 6948 23304 49405 62330 27931 37571 2928 54635 11896
+31612 39402 4450 52839 14459 32908 43943 15943 46537 22587 33759 59706
+13503 36831 7338 34937 13949 58904 18682 62105 25127 2630 56412 13354
+60143 16814 51539 22724 49308 15661 38613 31180 19444 63203 21768
+58123 36530 18056 42418 25178 1044 22045 63527 38085 18869 50529 6151
+28413 59116 13730 54740 5067 32295 36678 503 48928 32009 19971 46791
+18811 38150 50535 16322 40823 58450 28162 62312 18983 39720 20684
+45186 13567 63927 7293 43776 29855 48253 14556 51802 26976 56326 15582
+63619 32561 838 31703 41422 7302 50135 32521 1309 47234 8664 30115
+62656 636 52473 21212 48262 2826 58628 15437 54772 11313 61867 39305
+10578 44543 4509 41103 21180 48555 39340 17789 47191 23754 45105 17188
+49061 1748 64915 12533 53633 27899 58696 17184 62099 12809 39614 2418
+44791 9778 48221 36518 18450 41698 13199 49105 25463 45058 19794 42607
+25176 6649 56017 29013 43029 10105 24871 46875 21119 42771 18805 40951
+19947 45417 171 61198 10056 21351 64920 40224 19571 59193 32409 7260
+53180 37046 21775 63286 6300 58602 34988 24393 40201 27686 55736 18590
+54118 20973 64070 27103 33076 41566 9300 37783 5399 22902 58636 25055
+7751 64694 27277 53903 29391 36191 3223 50792 9506 23148 49884 32627
+17090 53060 22841 1321 39888 29998 51892 2530 53128 29917 8393 56525
+56 65394 25029 38744 20163 57242 1327 49314 25120 44598 18892 50576
+25107 36628 12446 58412 32012 2117 47437 39145 9295 50627 40669 11688
+46665 35798 16083 59453 32594 44294 10942 41972 4925 48079 29330 59375
+16657 4104 51901 15455 64621 21770 36864 60415 17950 46057 23539 38476
+65294 10026 55737 3629 53359 14770 39192 26990 56352 24046 63831 39545
+5197 42317 11238 38161 49289 19390 44438 6052 47171 32410 2297 30545
+60720 6246 54380 34869 4307 48967 31792 2913 65330 10567 52766 31732
+49046 8844 26236 57075 14946 34749 47315 1185 39685 21158 49311 15479
+62137 24159 37728 6860 53518 12781 57618 30912 860 56283 9603 32671
+3133 34621 51725 6341 61405 26429 52292 28658 39908 20927 57928 2557
+65152 32742 4356 33867 40231 6993 50913 24389 55265 19405 61550 20733
+37081 55744 17688 59109 38503 16201 41646 31607 9652 32531 41299 22420
+42907 1203 45993 29160 3305 58069 25837 65386 15181 56894 33122 11083
+63793 35148 13603 32920 58429 11478 37272 28636 43427 7169 36688 9665
+49251 28443 53409 22276 60812 18737 55900 25467 11522 57512 6693 55146
+20919 63371 8778 54449 2730 65233 39225 22113 3937 54598 34685 60920
+1061 52927 7859 54415 4206 60169 12958 38339 26995 33877 47323 2327
+26476 50864 4854 25281 47944 23185 1992 50413 11827 45414 28262 97
+64589 10770 46184 7339 41429 14168 42800 12815 48985 2600 59903 25755
+54235 32366 43270 1929 34667 48862 13963 45415 6039 57932 12936 63540
+20922 56500 35008 12370 55068 36250 7915 34709 58240 15267 61441 21500
+43722 18621 62865 34729 15585 50949 32398 10636 59970 33370 11222
+37209 16108 54923 3293 57687 9302 60732 21525 52742 7105 40703 57126
+17744 31380 63005 22760 1181 57301 19913 61177 31014 7523 48854 18771
+61785 24061 51760 19735 43126 12006 41352 47639 18640 44381 8560 50007
+27170 1588 51577 10420 59362 6380 25451 48702 29622 37943 24624 64462
+24 51764 10538 48227 3023 28452 47408 22545 51004 31344 9379 59007
+26525 40279 15022 64210 25584 45440 17931 42967 14282 46962 26545
+37446 14839 51210 26282 47751 19602 61595 14163 33670 46792 2174 30605
+64628 16859 53963 11553 63213 30090 40968 8456 51271 13374 65023 26031
+44524 7901 47979 27829 37201 23646 44792 54843 14563 23064 46367 30613
+8991 36366 1137 60288 10429 36139 28059 37829 20366 60098 18000 54438
+30787 13561 42639 5302 43854 14397 48065 10699 27612 42793 24429 3984
+55111 19808 56964 26360 63221 6723 53809 13739 63950 34983 16547 50106
+36337 17036 33849 42186 6598 24998 53454 417 27221 52899 4972 39920
+26699 57064 14113 55314 21177 61479 26178 38350 3911 43519 8577 29535
+42166 5802 50774 38253 21633 43043 32540 1633 31448 40372 18424 47286
+30997 14059 58509 41862 22794 7146 28096 44192 15064 38945 16661 48776
+34689 25076 51703 6863 56935 14261 36619 58167 15085 38935 63585 9748
+32994 60442 25098 38268 19198 49414 32838 17463 51647 20494 61798
+26208 59383 5549 56320 23417 38413 16414 47332 13128 21428 56881 27824
+60937 17733 55559 21709 40779 23247 46974 16823 43264 5110 45591 31221
+3547 63029 27568 47884 19460 45473 4868 49778 10874 39196 3980 46532
+28630 37249 18014 49493 6755 51930 27930 62881 32922 22515 39043 33371
+27982 42883 4653 30021 49131 23659 11519 50990 4812 42768 35323 49591
+14554 38576 3852 47464 34675 13335 55468 3045 38510 12517 64196 1816
+55811 24269 7526 61057 30476 40257 14817 57803 37985 22039 42082 19115
+50558 36970 21242 7972 57345 9546 30261 45527 21894 43164 17626 32846
+57834 16496 55683 1235 64435 28352 36341 3646 50078 31270 8072 52487
+10563 57829 27640 64573 7421 54969 11750 61933 21294 39455 6516 43370
+3729 38958 54592 17445 60119 40735 8226 43217 20279 42213 25245 2451
+53003 21624 42789 28460 40602 1988 35306 62743 15008 53351 5685 64125
+10949 26484 37937 65461 2200 40626 57595 21454 53957 23354 48650 15830
+50970 8491 46571 11470 42926 1687 36905 58196 18405 65341 30313 51622
+3541 38662 62888 6316 48751 33776 12527 46731 4767 44168 12875 39446
+19770 45012 30125 8527 59214 31268 12860 47827 1658 60249 29175 49494
+16553 44730 36103 10589 62945 14627 51359 4072 36179 23704 50132 146
+47507 14344 64746 23645 35074 52403 15122 62356 31348 3232 65111 14252
+47771 27769 53505 15460 57285 35384 8220 49487 33605 12584 51589 36550
+56704 18404 63096 23023 57726 28042 8806 64255 21725 44503 18597 48829
+29196 10691 49540 33569 17710 54745 40255 16236 53829 5708 62076 9502
+56839 37700 4958 43536 32307 2253 31084 45726 34739 8706 61907 31189
+4123 65313 33683 7321 46287 11010 38048 2966 43037 11634 52104 1599
+39034 26021 60740 14440 57519 40413 16527 43105 6142 53577 13078 38040
+20141 59466 25641 54934 12500 60414 5806 56308 26389 44362 16815 41941
+4563 48758 8787 63953 13235 55411 17578 38575 64430 16286 43891 34627
+28997 58649 20257 8638 28285 65236 23576 53851 17801 63835 26130 36896
+28808 53402 22464 34277 46813 15005 39037 52599 26199 590 48711 33593
+6169 30422 64046 3955 56170 28173 862 60845 41715 18010 50811 40314
+12652 54304 5734 62246 41123 7828 38515 12733 43159 15205 46360 21323
+61430 18507 57441 37572 19538 41821 30992 1569 32745 40910 22536 43488
+474 45386 12463 59180 23281 56089 28449 7009 45344 32566 15798 51908
+27734 61503 7244 57266 34823 27004 60581 4270 55803 18111 59225 13714
+29976 40500 21521 43275 19853 39709 57977 7736 33540 50873 24976 13104
+46811 15320 44040 4717 63201 18402 58663 25374 53297 22588 62206 25252
+8803 46334 34628 11901 24922 60267 29481 13263 52940 16837 64815 26758
+36078 61028 18746 52917 27430 60670 4179 56644 25920 38203 5458 55070
+27229 52498 20903 38919 11970 61611 21594 55870 31109 20561 47606
+18554 41234 59740 8215 29904 42538 19696 51467 34127 10421 59167 922
+48816 36353 16135 43895 28768 52245 9376 61087 11343 46086 4353 23005
+60335 28270 77 64085 31261 20252 3467 40743 9678 47866 1754 43620
+30818 39653 2844 35604 62686 4471 41738 59994 23776 867 46530 27772
+4110 48638 13409 41737 26160 43285 19936 30270 60569 15197 52720 22903
+50138 11472 28284 53139 18750 49754 35835 15708 51442 41015 18221
+52918 24401 64140 26689 58547 19463 32171 54933 8303 29188 50440 22319
+9106 51609 24129 60593 32356 26816 63714 33502 7238 48184 22212 40481
+20430 42503 12946 39756 2158 61480 23317 53876 15334 44936 24073 47796
+2002 46015 26725 10078 54373 155 62615 10460 24462 52015 31058 45787
+5161 43363 11055 39710 1668 44733 10244 49254 7100 58593 9393 30567
+60260 21228 10160 37146 56038 19153 61819 25222 53438 11694 44597
+14187 32779 46982 16746 33665 63171 2764 25753 60046 19007 37174 31005
+20181 51512 26355 60467 20889 54970 4992 52268 11127 44979 780 33560
+63048 5133 55191 23545 52941 15368 60367 18403 56297 28292 49748 16874
+41888 15457 36488 64178 24704 5154 56565 36377 3158 33941 45905 18496
+47533 12003 36969 32648 10200 49195 33504 23948 54725 3651 58954 12083
+51932 1433 31859 43953 12462 19780 59659 37773 3516 62413 30474 38663
+27270 44685 127 40797 6347 44009 16098 39456 52304 27365 2256 55935
+40324 15892 46607 22756 34810 43785 2184 54156 9032 29903 42595 1536
+37192 15675 42086 21987 51087 18618 62046 32126 10328 35839 5971 56203
+31996 3626 43621 6771 46139 34591 1379 61899 30934 16852 33259 64095
+13563 57578 5999 30405 46110 21617 41005 29084 8918 34081 60209 5062
+24273 44876 35616 26284 34144 62688 43305 10525 50680 24402 43843 8496
+59901 32725 54860 27058 33898 61524 14570 55710 18185 58036 12235
+26077 53205 22616 7871 38261 61497 12302 36719 65062 22713 44408 21254
+58969 3182 54912 12072 40730 33465 8339 64801 16786 58085 39486 733
+45158 10117 57647 29836 1230 31068 62377 5035 44407 10487 47233 6647
+37283 61900 17849 48588 35886 967 34307 62161 28836 2354 37235 10265
+48536 501 53926 31036 15953 64562 1572 54107 24394 63457 21313 53080
+31356 9186 32377 60617 28970 6532 35491 60088 15837 51927 33969 23261
+47273 18369 44866 36044 2794 60596 13559 55001 19608 60110 27475 54352
+22018 62408 18025 32111 42236 26538 45142 4560 42474 65407 28473 14237
+43191 10729 45778 21334 49559 18548 39675 59678 11005 54661 5377 23735
+48996 35636 7560 33352 52598 1682 58480 10792 48809 3888 40336 25330
+37568 16352 40995 29322 53517 13343 25211 48167 16224 42485 9474 48559
+3962 31837 36723 7837 30603 63725 1956 53267 10134 21361 48051 35385
+12127 23176 58728 26020 9861 54936 4774 63971 19662 52419 27698 38125
+5316 45838 11486 42256 24576 46311 22218 61182 17673 56493 29588 48281
+6086 27793 53038 22882 11600 50165 6821 34510 55782 19162 64467 12816
+57328 4603 20722 59344 41378 21807 7941 54621 344 58301 8408 30019
+49223 35422 22901 57472 17551 63610 23413 55599 11457 48318 268 42719
+14640 44897 22146 63065 41509 14263 51103 36786 18817 65164 15239
+57828 25384 42420 6229 54260 38656 3210 46973 35979 25122 60420 17635
+55188 6602 63662 25359 53184 17264 32432 56634 20205 643 50906 7540
+20914 30265 40710 17585 56917 14707 37658 48273 21940 11115 45381 5170
+24428 46611 5937 42295 22206 45547 33684 9610 35052 50133 16914 26349
+52273 29873 8949 55166 1523 51984 17149 37160 27774 50541 1109 48339
+27247 35551 44076 6581 22558 63784 25410 42018 20213 40247 55186 14152
+34611 49921 22303 40028 18790 51485 30771 3889 44625 10806 64743 25299
+46205 15703 39431 55444 18555 57688 22484 41637 18236 44327 35212 9849
+47214 17270 44128 4824 47987 13966 45960 26745 43300 553 38563 56897
+14647 31031 39926 3878 57959 7994 36459 59628 6721 48658 21147 33312
+41250 26078 36592 6819 46337 12305 41594 5278 50837 37711 86 63277
+13261 54334 22930 2845 34618 59051 5171 54972 29674 2342 35853 62398
+5950 26612 43542 22196 45199 32381 9845 56927 27669 62745 16788 46413
+24698 41910 18968 32100 63230 8678 56280 33675 65251 7768 22342 60013
+39062 8628 56638 31979 61466 17342 38922 58749 15084 54048 37794 20840
+44315 25693 38204 54987 172 62324 28680 44931 14709 50692 38016 22759
+42661 14198 44877 1361 59713 16068 64357 20054 57221 16799 63595 6429
+36549 10213 49222 4803 37104 22208 63376 42850 9709 33635 57039 20043
+60996 24619 9900 49318 27882 38052 30670 48219 35881 9614 29982 61991
+35425 27307 32973 39156 25160 62181 20037 11069 50319 5632 47261 12007
+43588 6997 40037 20506 65024 29555 51747 2989 49150 9040 25128 58722
+27543 9726 48982 29938 39425 8773 53545 21684 48973 10986 23419 56234
+28588 9245 50588 2040 39998 12670 44434 18355 42487 1823 38670 49613
+8111 40070 63876 22419 55234 36766 2134 59266 33402 5338 45662 29326
+2266 34363 64994 18992 57171 38187 17000 52358 12837 61012 1193 55180
+28416 64703 3029 56779 39856 5436 47717 20593 38639 33919 11100 32760
+64390 15393 34615 62301 13604 55260 3635 24088 49462 33301 11087 52191
+4703 60270 8407 26703 45878 23892 11859 56318 15 59856 34757 15422
+53431 23882 40356 20974 53752 10099 57048 6395 33308 44943 4440 50687
+11348 61793 3733 58410 26795 32646 57842 11389 36564 28864 57050 3840
+64661 16014 51657 20601 33714 50928 9424 61916 21241 41316 30531 15332
+31669 54050 25510 56896 9149 62139 613 52675 32145 18387 59177 23617
+57387 27227 13860 47988 23669 40041 16602 49188 20917 46712 12222
+41182 15176 39218 57634 24173 13279 51489 34805 3154 64988 12213 58222
+38771 20537 42839 4595 39408 11626 64935 6825 56801 36824 14699 43583
+27986 2191 23499 51277 35334 3459 27894 46604 23034 2757 28257 44538
+25130 11015 47708 26786 5371 56763 11344 61268 7551 31281 41186 19767
+51582 6625 65215 29275 744 56175 16717 58355 24452 40731 11169 51169
+30492 39013 30 50480 28423 33121 54273 26053 38543 28166 58753 571
+34072 19087 55549 40549 1868 42427 14833 46983 30094 36702 2769 51256
+10681 23150 63997 19280 48922 3928 51976 17338 64238 12202 47069 4319
+40573 59282 28826 39263 24446 53990 28133 60035 16519 52274 25545 8164
+33309 59794 23163 34673 46310 846 40520 60755 24184 2291 50137 27680
+37565 13176 34209 62613 40523 15145 44635 22518 34547 63180 15949
+53824 27965 56882 12129 58792 14016 23191 59633 27254 12956 44447
+17095 47566 31351 15602 52375 26449 62972 16499 56285 42976 7275 51301
+29572 11662 63804 34299 25297 35408 47559 14819 41504 16348 46201
+32771 14540 59354 23371 62417 12840 57600 27284 49803 4537 46631 9158
+25595 44826 19075 37782 61258 15863 56602 36852 15168 43279 17259
+36649 63456 3359 58126 37684 20921 43257 25262 7875 63651 33196 13182
+58926 5372 29950 42313 19912 47659 13778 28248 65284 24021 40010 20138
+46050 14317 51501 5441 38785 27444 62029 16462 33673 39315 22824 48489
+11372 59380 5012 25105 46417 28374 53528 12267 63759 44096 1845 39270
+12514 37593 31047 19001 49474 16759 64138 38304 3212 47668 9127 34428
+53561 19572 56386 5637 58205 35963 62759 26535 53634 19497 64365 27080
+8821 34104 47793 19685 56691 30838 17820 50362 25096 1157 48170 15300
+50976 21608 44063 18200 47057 30989 391 51726 19644 60925 31603 46281
+15990 44319 30597 58110 10819 62836 32827 54573 5748 64785 35282 1287
+62652 41364 19437 46730 17908 43375 22514 59958 12969 32338 41779
+10926 48526 20679 40927 32120 6389 50526 20517 46765 25667 7003 48652
+27193 37065 13264 47858 2651 62461 13632 50477 18159 41023 52075 6935
+30360 13646 65043 26445 55015 4121 58016 13207 61492 21449 56164 34313
+743 53683 25183 45159 13424 43904 5841 53391 18842 56490 31683 21506
+906 60644 10128 36384 2571 32042 44588 4618 36181 57390 13902 38102
+5257 64693 19471 54479 21699 8060 43289 56829 16648 63870 4316 58820
+26458 692 31541 59899 4791 54747 11475 26400 47847 36182 3603 34051
+45359 21523 46690 35150 2936 51311 33166 4836 58050 11638 64560 34863
+7796 38952 10041 40615 32084 13965 30671 39938 511 48210 31595 3722
+49913 8427 27433 58998 5565 54390 25239 8670 44569 31320 2131 32311
+42796 6268 45391 16605 54332 20554 58534 38917 5899 59238 28222 9448
+47491 2707 29734 62791 21808 54437 29670 13394 50764 31875 7148 61408
+9733 54499 29023 41547 2074 49312 26327 34185 51774 2828 63223 23361
+58796 38530 12497 43629 7095 53348 30222 37848 23837 60681 13575 49852
+815 45204 10150 58821 7594 29332 43871 18513 41838 65497 20000 1065
+36285 49476 5789 26895 51787 19931 64939 3652 55688 38842 6294 42731
+10728 28470 55370 19096 31135 64869 4009 43269 11639 45663 30786 8090
+32537 1098 31719 42895 3782 51333 30134 63054 219 42073 8323 46894
+35976 7074 34189 63716 12906 55868 31429 61009 2426 54517 35613 15658
+59373 12578 47449 6445 53162 10447 62575 5363 52072 18204 43443 19934
+40988 14722 45865 18268 51114 30893 16256 33713 52892 2645 32156 57260
+4688 33704 52656 3011 59409 21745 34513 57743 11584 61804 37191 13230
+63125 3373 35042 61231 14078 55897 7661 60362 19053 41691 22639 42953
+7281 64683 10774 26215 61285 36434 51119 32529 9238 31684 40251 22009
+43090 17143 41953 7558 46028 27492 39778 8511 30757 58940 20274 41063
+15211 44852 35345 9567 51600 42757 18455 32317 64443 20751 54784 12730
+61728 17074 41748 27125 53984 31906 36555 9973 30915 50820 38157 14768
+29365 36006 11603 46822 18312 41205 51815 12880 35647 48223 19771
+40514 55952 7110 22158 61201 24385 6295 64404 9262 55771 31024 15725
+61437 38444 20676 42151 4101 49480 21973 60643 20204 54569 4283 62235
+43986 17579 60462 35499 21258 53987 17392 62775 37230 21551 43271
+19545 37830 63396 17446 55426 25701 53110 15619 60375 24328 39485 8114
+36849 31866 21646 51346 17391 49821 31016 38660 24677 51056 8003 44684
+1732 47247 24438 39728 16898 48802 27775 45522 14507 50256 16213 57812
+36117 8632 61360 13539 45875 31809 8205 35338 1214 54814 15214 59288
+27956 1885 49404 10966 33566 41088 20578 55790 19446 51989 24049 35103
+62548 2348 55600 32785 7776 34339 56441 22953 14427 33477 60817 16636
+42983 22885 47573 15818 28001 51659 22111 47246 34055 8383 35772 45131
+17378 39352 21327 62199 34092 17696 48509 55556 21447 61307 16515
+48232 22062 44683 17517 54294 21211 61514 15082 59131 27951 53462
+18409 44402 28345 7418 25300 41376 29162 5924 49919 21786 39802 26108
+41482 21168 38354 25654 42111 13459 37884 117 48965 7247 60806 24400
+38273 11905 58297 43134 9790 25588 65069 39024 12501 47459 16757 39889
+24868 36003 50120 5515 31174 47545 2731 29039 54444 34054 28130 53437
+18558 43009 20992 45404 30399 52485 9223 57717 16159 46268 20400 32770
+46807 21862 2994 20382 45869 23800 52834 14336 63494 5840 54587 31453
+59461 14766 62993 18216 57089 37971 2680 50482 24747 61213 1619 23086
+65453 33817 13913 52461 41140 7797 46569 29660 38419 24532 50327 1726
+46997 10642 18718 56749 28066 61173 4146 32559 62707 5719 54666 41996
+22453 53153 7364 28101 64520 22897 10144 58512 1282 29351 44981 32606
+9857 51825 35631 29040 43346 17253 48901 35972 8653 28901 54166 15178
+55835 25216 41221 896 50553 29088 46739 24658 8745 53185 26367 6597
+58714 10637 44384 29056 2580 53534 11163 60084 321 33708 47390 7160
+41731 9911 46178 35301 524 63845 28361 56836 2421 63216 11270 40518
+283 65158 10596 58312 20351 39707 28437 59636 11269 57235 4858 64313
+35778 2394 32859 62665 4397 37573 31317 18444 47863 22955 40313 17100
+55929 25942 51228 31054 19543 49708 21570 37194 62975 16470 55056 3153
+65049 30849 7988 42692 31835 3345 50653 13506 40344 30886 16975 52158
+41040 11079 31853 59017 40606 8900 48935 4724 58128 9962 34593 63395
+13039 57526 2534 61700 21456 59596 1291 51981 14385 46806 27946 2105
+59787 11138 27721 45957 7154 39716 11686 60477 6537 40282 10204 36909
+26992 40739 2248 46096 10619 40715 4051 60243 32574 55216 10079 63976
+20357 34708 61746 3995 55911 12004 60151 1489 54925 19500 59064 23989
+63854 21885 53078 30298 2138 56988 33298 6343 23466 49557 35606 8769
+20819 51175 28592 60650 7922 55567 13612 30118 62880 17236 39836 25133
+48839 21936 7445 45882 9821 38501 2059 65375 24852 3950 33586 37560
+24667 51078 1716 36644 56087 5164 54533 38306 57521 7706 59789 1018
+44734 32378 50674 20230 2031 28227 41072 5437 51051 10434 23000 62591
+32624 8142 31301 47368 36189 6875 24294 57658 3608 26362 56856 23017
+5842 58127 9188 34658 64045 20848 58877 41310 2387 44702 13464 48214
+17582 44082 31832 20856 1582 61369 13955 33964 44995 2981 46483 29850
+37929 24191 65320 16297 57964 39032 14536 47477 261 25722 62196 5770
+44786 25599 46623 1392 42972 29754 9194 58719 27158 37347 12341 21295
+57706 36779 15517 49653 38449 18925 42034 20206 57403 39639 15497
+46707 30008 50574 13299 27834 57227 19014 65398 30385 17882 48962
+14287 41688 15978 45088 18542 42961 23296 46527 19514 44263 35196 3879
+61672 14303 32990 37521 18622 42288 30499 15110 58689 18460 39536
+24971 55966 6882 64949 28517 416 59396 37165 4760 43068 10925 64243
+39155 4598 45387 9964 33217 46406 23187 43530 18087 36509 58092 16320
+64118 28187 37712 21904 52790 9668 60392 4048 24916 63272 43308 2957
+23950 55039 19377 31713 36982 25242 43360 1571 44591 24921 39674 11832
+48701 25863 40610 30302 60824 6081 54905 35383 22606 40761 4384 34980
+57764 24390 52807 18076 31615 58909 25007 52291 5505 49435 31842 18947
+62117 24280 52405 19277 47625 15951 50472 23734 44442 9199 30682 42806
+19288 48721 23357 44900 15614 46578 6004 50606 11601 44071 9257 37538
+49934 13014 43899 28161 62084 3882 55109 29902 58472 24397 1099 35411
+45978 19692 44253 1568 36277 53367 8201 64858 12438 38874 60783 19461
+58081 23246 50336 11303 40000 54753 13025 63787 5525 30375 60793 27897
+13976 43272 25273 10085 29961 40966 18140 49220 27447 10968 24511
+46536 32970 50065 16287 44817 24781 36185 47484 14077 43259 27928
+55919 16222 59677 30196 45143 17196 37916 48833 15676 40057 49788
+18819 45138 29025 11436 37460 6365 25486 50079 21378 40526 24066 51423
+11930 37052 58359 29755 38041 24199 57373 17039 55457 20716 61726 5694
+43250 10839 48504 2492 30268 63415 19724 56487 33131 13554 50514 21248
+65438 12241 57464 18073 61929 33091 14305 48455 6685 64668 42013 1880
+31880 61750 4714 29817 65183 1407 52565 9804 24072 64352 34866 7975
+22165 61677 40050 3278 48427 35987 4901 59147 32819 55634 4247 52653
+31063 55011 5325 59983 12593 55996 6797 26562 50205 22507 46177 5594
+49453 26645 51586 10163 53218 26087 49565 10907 44821 17282 42820
+11857 52475 33156 10195 30376 62376 20423 46662 16737 33347 60934
+17566 56072 26742 6787 59963 12391 54099 5963 27285 48149 12067 53386
+6823 61364 26826 45345 19163 37882 48887 8526 21817 53213 38234 14776
+41776 61308 7286 56396 14202 60052 33542 17092 50513 29118 37301 5509
+56949 9796 24408 42336 13274 49471 8592 52582 65034 20370 10304 43284
+1551 49018 37448 3273 46269 13096 64674 16151 56589 36760 6394 43422
+11953 38875 526 43033 30852 3324 58002 27009 54141 14244 63491 7055
+36676 9992 64509 27582 36339 29818 39569 26827 54255 15585 28862 60062
+16943 52481 21184 42583 15697 44487 6162 40753 62495 16409 29726 64424
+10378 56707 15161 28009 45074 21336 52805 458 29504 42025 4898 43420
+16306 56306 27619 17376 43416 21914 48609 40414 11124 38706 58499
+18972 62651 36085 15468 64077 31203 8729 61774 36650 56725 7251 64657
+11675 55449 20656 60081 1330 29115 54511 5020 51219 10648 39153 4534
+49466 11869 63060 28792 9375 61447 500 33486 62763 3768 56342 22982
+54646 31227 62322 12092 55453 7282 63634 101 56288 25166 7700 49168
+10483 50605 5097 43372 30686 8994 34596 49759 18532 54187 34476 27322
+53456 5511 44364 10675 38898 54921 29501 2346 33563 39591 24336 50225
+5101 47185 35325 23512 53793 32265 17344 55094 14480 40449 23303 45006
+16120 47075 26853 33775 51007 4245 25887 58387 35861 6092 22925 54151
+25274 12991 46849 27449 8507 23279 44160 27018 7711 25229 47407 35228
+27707 34138 51517 32446 12974 55125 17684 64631 12359 55932 566 32018
+41544 5297 34346 55294 1174 60647 26048 49165 17791 41647 55072 15496
+33653 52757 2137 57168 8631 24999 42219 186 49194 36632 21081 41929
+22157 50366 37806 1384 42298 15482 43520 32472 259 31398 50250 13281
+33705 56697 32494 12658 30421 64385 453 27621 45656 21385 50998 28740
+9363 56058 4587 62820 13799 50980 16468 36458 54199 17926 63636 26428
+38835 23500 42659 32510 56009 18782 64027 27243 13832 53820 35030
+23152 32940 39669 9120 29526 51402 22623 57602 20808 65524 14478 55655
+38746 13622 41755 1072 47168 25583 33158 57839 28598 38903 3631 56755
+8914 59660 3019 34586 65455 5056 35599 46214 581 40059 10853 63679
+23116 53729 14596 32191 50716 4201 32884 51369 25336 34227 59783 3854
+41679 14815 36662 55707 17369 63418 28469 48100 6087 36570 61644 814
+56643 8960 25796 53628 22952 7469 51342 250 49005 32060 4243 51730
+42246 20695 3224 28512 43404 22386 38333 4002 43000 12904 37358 65095
+19316 40495 21834 63740 26176 52884 20056 41050 2013 46769 34740 23881
+53797 13681 27260 41708 15912 43107 1058 47281 19094 38821 28992 46678
+19560 38722 16638 42460 64358 18745 40200 28876 62268 13455 39101
+52982 27182 14280 60305 25136 7289 46022 17106 42154 21781 60638 23181
+6780 41713 59966 15478 52432 7149 36870 31273 11793 63803 2963 38394
+10300 49850 29412 43357 8016 58130 12111 56357 35366 6840 60857 14328
+38848 49266 16209 45858 29141 44166 9439 33075 61976 19354 54583 31781
+62584 15244 60232 32451 57436 20011 9024 64126 3240 20670 60597 40649
+1365 36692 24821 44907 16513 39754 59006 17589 65440 14255 22976 47111
+29914 5715 33946 58287 3226 28990 47094 6236 37945 25820 40672 29667
+51761 18890 63817 29106 10469 56340 2517 63313 9622 30677 60863 22957
+57174 18584 55130 21058 63871 6209 54677 26578 1480 40233 58504 5493
+44359 34500 52496 11965 39074 3263 46675 35583 26616 45379 19643 42670
+23025 64585 27556 3364 45262 31013 696 58793 11506 27304 3017 47430
+36712 7534 41274 61119 29155 9744 59763 819 54503 26567 63559 1837
+40405 8657 48550 27428 36958 8237 29150 62443 20710 58844 29604 11570
+52980 2359 49281 16481 51157 20281 47295 17837 45532 20627 31874 48719
+10475 30589 61336 19168 47498 32658 2361 31143 46816 6987 36575 58009
+14231 39892 5992 49335 12045 52024 22636 60385 27183 10673 49507 35648
+12632 34308 59604 13854 29361 50004 18565 32999 62069 2822 47723 34607
+29021 45076 17139 53904 38078 13781 23215 54904 31932 60521 15480
+53804 17881 62321 27721 57332 22687 6968 48579 11578 45365 1 43667
+12997 58703 22839 54887 13381 59140 6669 37299 30799 51170 12158 60598
+32931 52566 28418 8950 59474 3412 34378 58038 9244 54414 33467 3942
+31819 59654 2214 22665 47391 24802 380 58989 44002 3562 35936 51427
+21094 61855 12364 52249 3807 35287 58495 24636 10232 47912 22801 63108
+16861 55359 40837 19050 50844 21650 61186 24848 3845 63237 33846 27343
+48845 3187 30332 43225 22007 45491 29315 9153 56007 1955 63046 14141
+58082 38505 1273 41426 10758 43157 2278 39821 10502 42363 1050 38553
+53922 22628 44584 36072 8280 21746 43792 56989 7108 29502 62345 22735
+8742 45975 36174 29239 57456 12311 39495 63401 10479 38081 24550 63972
+11381 59997 17384 54568 14120 59530 5689 44929 13787 38873 51326 15893
+44830 34746 25418 46067 17225 40388 5082 47439 8982 39276 23980 46513
+14849 41303 62474 17084 27903 47523 22192 9655 24797 63152 18560 54880
+14667 65323 6791 34163 58936 298 47828 7441 39147 60159 12613 37365
+50260 19939 46361 61808 35432 12766 29527 57022 22539 4226 44594 21967
+36466 48055 15065 42501 19950 44612 18051 61614 34725 4870 59616 24923
+49582 5473 45017 8934 35501 43666 21074 40209 23001 61993 12703 36033
+25657 63274 7641 56151 12458 36508 58963 16376 34234 53857 7528 56041
+27350 60320 17560 55415 11433 24107 48255 20436 61536 18931 39259
+16895 43366 5638 45744 32705 3461 23022 57400 1508 24594 52316 41787
+10633 37288 47051 14920 41772 17571 64845 12343 23857 59982 11226
+26266 58968 39768 6207 43987 10189 41189 410 48360 30278 9048 34409
+51671 41248 17553 60941 23421 56791 18909 37702 6237 45886 17572 39726
+26112 51954 17872 65209 5025 45797 25825 7881 20096 63357 35777 24064
+43088 14734 23006 47485 28214 14134 43534 52639 16029 35055 56094 7221
+64938 35476 12257 21720 32081 63022 13212 37445 989 40989 32309 26345
+47458 16305 51383 30477 38541 3979 28760 45899 430 25821 58338 13813
+42847 6216 45724 32998 15162 51518 17716 37338 25556 63646 10365 55307
+817 59753 20504 32867 39935 24111 51089 31416 20258 56263 24412 52338
+17828 48723 20664 51650 21979 62856 28597 14136 49597 16591 52939
+29778 63071 25688 11774 34958 48482 4205 37650 52890 25740 2916 50966
+6593 44054 19431 32465 53281 14884 51607 18382 44023 23591 45738 7702
+47534 22653 36989 31037 55461 4085 24012 60313 28088 11375 58617 4340
+54946 12869 62732 35124 25960 58254 11824 35612 60577 22776 10218
+37031 55310 13576 59851 36283 49186 6116 41081 23267 42785 19089 50142
+13232 28340 41891 18721 53134 14594 29896 46830 22404 9561 55429 6470
+17669 53328 24058 51075 14401 33219 51706 16885 57924 6837 30117 60716
+4957 55716 10984 53557 30718 16395 45481 14985 42248 17556 53255 34416
+24226 52095 5131 65047 10964 44544 6760 41788 55622 911 29349 42238
+23124 50761 1828 26115 49463 4825 25364 43124 20565 45820 8502 39433
+26702 34796 63224 312 41881 27526 46942 2116 62784 30876 56230 14159
+64237 39038 51133 16795 46929 40511 7153 22209 64529 27245 5870 58268
+29363 50361 4406 43947 33798 6515 35542 47143 1470 32866 65195 16629
+53251 26818 59260 14819 39102 52966 21107 2804 32032 53798 4241 36604
+10009 33054 61590 28258 33996 64158 4008 48522 11666 43509 22197 40642
+18342 53453 31188 49447 4826 44488 11295 52063 32043 65429 2737 40404
+59205 23890 10025 30999 46750 14897 41965 17632 49369 28834 55741
+42357 8410 30619 55348 23992 57514 15297 64784 9307 37369 1228 62606
+20520 56851 42014 14705 60798 37219 7816 47759 26983 59101 16829 56275
+37998 207 60147 7412 53406 21154 49532 17903 37813 24531 51506 12038
+49100 7644 36995 4004 45254 11860 47265 5190 64827 28519 58150 4482
+46499 12895 43206 34053 2078 58685 10228 46901 4590 42605 28728 61165
+15265 54774 31674 10496 60347 34772 23987 62053 13838 56480 1799 27996
+42445 4905 48675 34944 924 29906 65177 34640 2944 62265 9633 26174
+45935 34271 6424 36396 50927 18739 37750 26655 49623 30295 14452 44506
+3544 48351 28203 2549 44179 51275 24910 4300 42467 31153 2119 27521
+55697 11017 61127 1129 54307 23925 38528 56767 10036 61537 34935 24400
+51794 5036 62666 34357 25917 38385 31843 8195 43814 373 38529 63460
+12118 48815 34959 26095 45950 20631 38548 25110 47230 35734 3487 51225
+31678 56909 1377 64370 31105 15378 61460 18525 48591 25468 53635 18933
+58533 30827 16920 33117 54439 14949 61546 18132 32877 44003 14676
+64019 39242 11866 59353 15418 31881 64726 3280 47516 13152 31412 57073
+8338 29987 53909 23164 8734 34626 50293 24296 11476 31586 62104 9563
+26383 60104 33656 2383 42837 52960 24304 9536 36280 57240 15311 54756
+27685 61424 18082 56064 12194 25033 48104 30850 6763 32638 46035 4728
+24724 61337 43725 12361 38023 28616 50034 26061 44492 3087 50834 9231
+25146 42412 15625 60867 1832 55357 10558 58371 2449 38686 21654 56683
+17844 61293 26560 6718 36048 53314 21088 7085 50088 36707 63129 6266
+54216 26209 57782 9465 39005 5252 19884 50932 39974 14865 46468 7791
+49268 33523 22397 49723 28146 40674 7683 32006 10927 49317 33007 19879
+53124 30126 1581 34854 51107 8558 25858 44871 20184 42050 12994 44420
+4497 32139 61617 6477 34761 63922 22104 55480 18282 64484 17182 58815
+21627 31363 36718 8172 38105 32847 26036 56262 5851 61468 26507 37513
+31961 19172 54314 15907 50202 2306 30516 40787 20898 46524 19668 43545
+15756 33123 48512 26019 35830 59219 20510 61892 13008 26938 57656
+41797 11655 24835 52188 19587 39672 58385 17492 64537 20951 55942 703
+32938 65306 9174 41721 1728 53924 32768 64473 15940 55612 33350 20315
+7616 65113 32826 53933 16606 62242 37835 19581 44650 28586 36988 11502
+46965 3862 22260 49564 30816 2663 57357 10840 40048 17271 51223 2224
+58180 40457 62935 15680 58559 25301 6124 41974 31487 1962 65275 11674
+53144 13944 62805 7265 23355 60327 28152 10007 22549 47993 35925 10577
+46072 2703 41484 10172 37569 274 46559 34555 4754 61034 39791 9487
+43412 4507 39191 58247 7178 55042 30215 17913 51678 971 37906 50455
+18458 42429 21505 52718 37934 16614 50635 36535 14609 41348 58997
+20660 1260 35611 54428 4885 37690 29145 53801 15452 39241 54656 20128
+11385 35244 62754 19642 31256 47976 2169 42136 13195 44338 22348 51530
+35237 2967 62812 22109 56152 19438 63885 35269 7780 27440 56546 18179
+59360 7256 63281 14566 55639 16936 35512 54184 19154 47009 21016 36506
+28499 41914 23082 33246 64326 9280 34834 47126 684 41252 57461 21995
+10560 33153 61784 27013 884 22150 43913 29205 3247 36845 23408 63597
+29800 59559 33590 2698 64235 35019 27344 39376 3349 53837 13202 58984
+17793 54794 36414 65016 27059 4959 57164 10188 39394 63533 12442 29499
+40403 65352 11445 54586 31793 62364 19477 39107 54274 13738 48406
+28726 2831 43182 11312 46462 26439 39194 7405 34581 60609 16577 55155
+19122 63489 15970 35592 47671 15001 44885 7237 65293 38868 12771 59450
+23378 35889 57736 7686 64005 893 52105 8067 49739 3826 39985 9560
+50775 7277 45501 16466 39876 49992 9515 21682 56349 40543 13448 48764
+28408 1521 50524 8813 31394 41202 22858 47730 15130 52272 23334 59270
+20953 8287 27369 42483 5874 40328 59619 29485 38885 20891 8904 49904
+33884 12421 58790 4151 52398 21110 59417 26058 63523 32981 7931 45033
+23002 37129 27192 59405 31298 12046 44428 15227 4629 27497 48825 19191
+52117 29492 60245 18283 53983 23199 43827 3057 41759 18668 49985 33552
+12277 41793 63355 33756 7571 26379 53822 21845 56232 27244 60486 22506
+57721 28771 11870 50557 13716 26757 48625 19116 52595 30936 11503
+46166 35328 3501 47378 32379 61790 27747 5595 57422 10221 59172 6609
+25554 60780 2976 24442 65327 4739 25877 47748 28718 61352 18549 48263
+21732 44689 3714 49374 8543 30182 61083 28759 49200 638 45609 8146
+34841 63930 20231 52262 3800 40821 9180 46721 19820 36015 45384 12598
+42929 11306 49834 29993 46757 927 42698 14037 46267 23991 32480 40445
+26960 48811 1088 59874 7967 33012 50290 14091 61878 7195 48631 15745
+43945 28391 14262 54808 33305 13370 50486 36949 48842 12998 45436
+31690 51762 16526 59956 42442 13376 46399 1435 44301 11524 25668 52897
+22815 6005 58361 14149 60910 24817 44770 4712 42889 25689 2590 21545
+51895 40868 17860 44607 21290 36315 23876 49006 4228 22356 47133 27898
+2295 24500 50813 10894 26880 42040 18907 57523 38387 16469 59420 30186
+39 53403 28055 51332 2562 41677 11179 43946 649 45607 9690 28031 57261
+20677 53641 24042 176 43114 33577 5776 47210 17973 44945 14471 38717
+26769 62735 29766 55626 16862 64816 22771 38365 25346 53056 2640 32197
+63176 33489 3918 30855 61659 7488 43988 33883 15266 35736 49140 13489
+61443 7144 31162 39197 5506 35893 48037 31396 52009 19195 57477 23771
+10612 52300 907 58059 41884 24045 6535 48747 25258 39189 13808 40893
+5679 43100 16136 37341 55643 18104 64060 13120 49204 1015 41651 65484
+24416 54100 47490 34207 8962 36807 3624 39630 10207 46637 7750 39488
+15483 56916 31630 58634 65 40398 55973 21316 2536 51866 38178 59169
+4240 42642 12331 38801 6522 43571 14242 39301 64134 20119 37200 57340
+2583 64635 35382 20918 62155 24845 17350 51073 28654 8954 21240 45237
+34721 23122 49029 28455 34239 44525 11112 39622 49007 12208 37954
+54804 9835 43576 6856 41319 12526 65037 17107 56907 33032 21603 47896
+4830 40752 22318 56063 17984 59418 25564 10176 37796 30480 62031 15743
+56501 31623 60226 8366 28233 54657 1775 38648 16781 58638 20047 64590
+22969 55035 34645 2152 58202 6595 64898 11951 31349 37761 27583 63442
+5938 52984 29925 39284 23790 56274 3127 60216 39810 24001 6036 62957
+31092 1851 24520 56455 5541 64607 10358 38264 8102 30687 61603 18642
+54650 17003 56722 41649 10149 32739 51713 19784 48072 29716 8988 35558
+64006 16026 52763 30904 45499 9112 33850 62176 2775 54733 6680 57768
+16075 60623 33584 9206 56976 32641 59280 5588 35123 64876 1611 46598
+8825 27265 47651 5848 36838 61487 14888 42122 18788 45989 23522 51852
+20649 59716 23031 53284 33912 2857 40185 11258 48163 29368 51969 16873
+63363 11498 55928 28076 32904 58505 17190 36960 13223 23243 46305
+34013 144 60505 12037 34829 58778 22124 6653 42935 53792 17838 34619
+54696 16700 61055 23555 57349 3436 53642 26347 34895 57898 18120 63068
+26119 9595 61237 541 45303 13663 49725 36534 17422 45581 27508 14026
+63941 40688 16132 53021 21919 64762 18946 57428 12051 53666 1673 28091
+42221 6008 45823 20299 54894 15977 35630 7068 30664 16736 55742 22763
+64275 28435 56116 22184 34069 62283 19757 51291 24613 9333 27804 45747
+22323 8042 32894 46239 24024 11408 20661 49252 30228 63892 18094 47908
+20673 52744 3760 24211 45918 7264 23107 45218 27887 8570 51490 419
+37351 56920 13055 65175 36698 56261 12166 52910 14991 39128 1638 64164
+20467 52014 27929 17322 56073 29426 13885 50047 30684 57633 20293
+52006 196 30901 40032 13549 63471 35990 18773 52621 8756 29510 41563
+5004 53152 29164 57589 6068 23601 45619 26908 714 21425 53691 39955
+18527 59764 24243 52022 5492 37623 10903 41543 7961 27963 51597 20539
+47196 22037 39330 56928 13080 49329 20066 44135 25635 166 59332 11150
+34291 50739 22542 8268 48108 29643 38915 16302 60586 43967 17802 40576
+23108 33621 57134 24420 52564 4551 50167 26929 37567 6421 22349 62595
+37089 12149 43053 22 40092 56695 14769 30404 48383 8435 61458 17022
+58197 24940 13797 46981 18709 42057 26760 43919 13631 52404 39075
+18408 46270 15435 30166 45233 17089 49841 23610 35076 60970 21652
+54812 20332 32956 49207 4793 54228 12116 62111 6034 39544 12700 49556
+6635 64297 19415 59968 33599 21599 62188 8582 32630 40141 26308 36816
+3401 49974 9113 54039 2495 42652 59701 5574 28529 51254 19906 44756
+29942 9116 36156 55239 24293 10812 45377 522 26686 46916 5407 42433
+12061 44523 29717 10145 45449 2175 42786 13226 53322 34531 16755 39507
+24810 60205 3833 30885 63541 8150 54711 33303 3156 32071 60287 31
+42576 8046 47974 30026 45923 17399 40029 62353 14493 56362 26501 38214
+9252 33086 57543 22370 61641 39554 1437 45246 13541 43166 14885 49337
+947 30482 42723 4466 63928 32868 54614 14637 64862 37724 59518 15229
+55212 31043 61306 34852 8310 28098 51497 1757 62545 25642 35424 55434
+17397 60353 32585 14390 55875 33095 15417 47942 26997 6702 42939 23306
+2251 26352 41783 4165 62712 23938 53515 13665 47078 4994 61924 33141
+834 42272 63557 22821 3114 34518 46397 15068 33411 58420 6585 51540
+24863 1666 58829 26559 35189 65274 16517 43853 20794 46954 17778 50461
+33988 8032 64355 32955 44621 24963 5304 48085 13356 41912 15075 44976
+21691 52525 18661 60108 38558 13682 42338 9773 55274 4784 24854 42887
+3329 57844 10102 35352 47768 21201 45509 26948 9676 35541 64956 17759
+55922 4268 51373 33765 11340 30557 55312 13810 48343 2099 45229 20171
+40887 33424 8812 61155 29578 49661 1934 26817 55520 23367 61983 20626
+33685 50805 1760 33112 40343 23323 37616 736 49537 29834 34807 59850
+10534 51814 1059 37549 25747 3403 63006 7999 35693 55284 11856 58476
+33841 13200 51731 3633 43775 10854 45240 8036 25807 63712 29523 38063
+25291 33397 57147 27450 36977 22076 41946 30898 8866 50878 3957 38251
+25335 58902 1649 53400 20118 65036 22358 40724 24356 47179 30870 11944
+35153 48110 10682 55958 4158 64386 26733 49645 14654 39111 57838 20180
+64768 39618 14821 52366 25760 63665 16434 40074 62303 19196 55144
+21371 48893 3682 43803 28389 50565 11096 37178 28081 47474 21771 38405
+18978 42182 51722 13081 28046 47098 17776 54429 35238 2838 26884 59707
+23698 8814 50852 33598 3757 60987 28160 51417 2877 46219 11285 19952
+59065 32946 53303 6661 59781 35922 26506 50732 11080 47434 14233 39844
+5254 49394 30715 3620 26618 42686 6121 47815 638 19582 55713 39932
+15653 42461 30890 10315 49910 8881 42095 1226 51676 39468 5350 41711
+63502 19598 39297 60022 16555 54465 31941 60895 19542 48344 31852 8687
+33105 41282 19117 43660 15092 37542 58158 20954 7605 35907 59499 25526
+8911 62311 37963 17799 44094 11909 46724 29612 41240 12782 44898 3092
+51067 12144 62999 1211 40611 14051 58611 41626 17431 52526 11204 61171
+30020 34498 65500 3745 57416 29967 61931 2542 43463 28969 4443 62953
+23871 45180 19052 36703 62189 15520 53318 16627 31346 64011 17893
+53914 5438 62588 30390 52885 1234 40769 21277 43234 29067 7331 58308
+36409 3616 43282 19064 60862 29431 11325 65103 21992 48560 15004 42732
+18163 58632 39009 5616 46257 11252 48997 7218 26536 62542 12839 55244
+5435 56309 32175 11550 64445 5780 28145 45941 22513 64038 19823 58045
+30562 41342 21774 47985 576 43122 27325 5146 62750 29189 40206 19258
+65506 17695 56777 40082 21920 10467 57635 1516 43319 10206 48433 3534
+52275 13997 55721 43653 23931 56906 14599 49460 17694 43480 12164
+42033 6107 48098 11090 60261 6682 56604 26343 63856 20837 38186 24188
+42641 15905 46732 1311 62579 29848 4817 50991 30773 8462 60246 36049
+1942 33080 53113 5858 24664 46771 8053 37477 24456 57155 14150 64896
+6748 54939 17787 61977 11981 55862 4633 61491 10061 23003 57192 36084
+9311 62983 31569 19880 61781 33405 6376 49769 29977 37719 16689 47619
+14987 42773 18757 41222 23520 52889 42963 25611 9699 27515 42150 24030
+11980 56738 17629 61347 35229 26382 59277 20543 36967 11884 35634
+52446 13611 62990 25521 35894 45659 24578 4783 59598 19015 55092 34112
+27120 61847 29742 48557 25334 11678 58903 23832 10116 53766 3915 33779
+45515 9368 47377 6104 43863 14177 55826 27408 58343 6378 60118 26196
+55198 9570 23932 46979 28565 48545 15872 53276 41740 21966 5258 55338
+27147 60492 21278 54325 5627 61565 19593 55714 34636 28394 37597 24666
+60711 31313 3314 29036 49646 4808 39167 16860 53182 10709 27548 50549
+23681 9093 35022 47641 12873 53116 36704 16641 53816 536 58910 30548
+8600 48151 26587 34376 46398 4657 41207 11946 38043 15522 42415 17026
+44967 13521 59525 9457 63719 25270 39604 16964 62783 28250 52226 9070
+35248 54806 27925 554 35870 53467 4038 45144 13793 31112 65280 19414
+41160 17671 60141 37704 18735 46345 20085 47691 15463 41157 52410
+19555 37016 53441 3688 40608 11837 45504 7225 49533 11167 52707 23939
+64198 15960 53765 41267 24502 9317 55842 31725 952 48642 33905 3060
+51132 42380 18251 31579 65141 22707 32390 60803 25891 38217 1159 35100
+9797 31546 45311 5115 55161 28047 60971 18693 57468 27231 37795 21762
+41973 19326 44906 1693 52735 7454 60998 11396 54105 35481 23324 42245
+12579 33030 37206 18368 46333 27868 17029 51147 19736 38598 28923
+59427 15441 33345 64028 11542 29747 46679 19508 38439 25871 45069 2005
+42335 15760 40745 24879 46584 34322 5979 50294 24886 38615 4903 51273
+10793 53330 36898 12846 57024 575 64570 24905 55124 4987 63337 10459
+59849 6255 14771 64778 31955 54855 2623 63033 33355 5390 44937 23671
+2299 50273 8970 31969 62178 23439 57639 18281 44775 31462 9771 57101
+14111 65224 37007 13337 43526 6923 47416 2752 37646 10801 20427 65372
+36761 16044 46551 34875 29335 50173 14600 30963 57954 17260 36521
+29811 50911 41 40685 12985 43118 30959 2303 32267 50534 39503 3667
+60346 10734 37716 1797 30189 49549 28967 42452 2705 36881 9451 38431
+32050 15345 48444 25343 10290 49966 5385 46080 9016 36386 55521 13243
+31901 63181 20479 49141 1405 44211 36042 18944 33885 56107 16656 27044
+64231 22886 10287 49498 29356 39053 14780 50039 27833 37950 1491 60989
+12475 57226 25464 55378 23183 58975 3934 56977 28364 52242 23886 48572
+14434 53538 299 50777 34160 6499 38435 25624 49103 5043 40181 58186
+15822 31296 63361 24896 51991 9426 33960 51336 2832 53704 30859 5093
+57541 9459 36362 27802 59483 7305 24028 44377 12988 25569 61150 18984
+55589 27717 38239 18024 61760 29267 6239 33134 37858 8476 21225 57949
+37094 15351 50408 39011 25045 12477 59042 32243 6851 52354 37364 5412
+53869 12355 40942 7849 62433 20793 58452 28128 64854 16030 41561 33289
+8214 31747 45152 13013 52697 476 62852 13720 49536 16452 41185 14783
+44066 18904 41064 29133 6372 56459 16741 59825 48102 10543 58293 3658
+53476 34233 6888 58578 11659 48685 84 30990 51040 4769 39077 52458
+1267 32166 59647 5213 30147 57780 22312 51177 19932 53256 1442 60757
+31078 15360 58493 18614 44133 22705 42100 15618 25379 47177 21095
+43312 31920 8250 33021 45557 30205 36908 26294 47707 50257 4161 39321
+19655 43721 18469 38884 52772 15432 37530 58146 16738 40885 53669 1045
+48724 8429 40123 2045 53291 20449 32834 50285 7646 30431 54165 22800
+63294 21564 58299 22544 53927 42527 4054 27292 53119 2062 60682 8176
+24681 62496 1380 39870 26190 63270 11077 23768 64890 21795 53661 18153
+47792 22020 63865 7230 29044 54243 17842 32128 64699 20161 57282 12685
+63105 15508 53778 23838 64211 16968 57267 41804 7370 32569 60057 21522
+57092 18879 51604 15512 39389 23143 45964 11982 43474 24534 58374
+13928 62513 6650 45420 220 49981 37838 5969 40975 57837 25695 7448
+60735 32247 6337 65381 17339 52420 23495 39583 19480 43380 1965 48618
+19722 46329 31823 8976 36605 2596 32199 41466 20770 45022 26548 15349
+55864 20346 62225 17167 44535 18891 33830 47772 10454 39469 6809 35358
+57910 26402 15774 42602 20958 45740 28041 41885 25438 64888 3200 37038
+29784 62926 2102 57411 38708 8615 50695 35086 4584 59494 33519 1834
+36173 56819 19076 60212 29966 51314 2073 32593 61880 6654 22214 60727
+29464 37801 15706 63122 13484 24593 46521 21269 44902 18228 50657
+29616 45987 11533 42101 2720 51922 20577 61964 22461 51424 3666 39957
+20490 46272 30858 52021 4366 57671 29225 59592 26923 54655 2863 61864
+22139 33797 38535 2265 25790 41598 20847 42910 14340 64106 25065 32300
+42170 22401 56238 41129 18871 60121 26051 16952 62427 41062 12838
+49644 36727 14281 46032 6296 65412 12673 43435 17308 45149 35200 2356
+49544 10338 55330 1225 65219 39758 4417 59206 10108 53995 19904 58740
+21717 11621 50832 130 29114 20811 57065 12615 58812 8473 51397 13002
+31361 65137 8059 30569 45926 23049 13079 33508 38069 26239 64465 22624
+36231 60842 3341 39203 27524 47018 987 38380 12451 41707 14463 44966
+7473 33215 56682 39424 17116 43772 20360 49102 38358 18054 51619 11928
+44899 3390 49320 39063 15231 46071 5215 62140 10136 52887 35909 19707
+45828 13115 40375 50262 8006 45064 26787 39414 7131 33529 40679 7763
+29591 50403 493 23764 63629 39442 2196 41585 11234 44217 32660 64943
+7140 59136 2043 54486 33047 7832 31002 41396 20072 53570 24799 59046
+31770 15477 48548 30510 1742 34504 46534 18311 41650 54251 20678 45680
+11401 43805 5704 51662 13296 64407 14470 38774 7041 62341 21658 55104
+27434 61449 6188 57676 12306 64289 41100 10214 46439 1507 52875 10785
+63851 7537 29323 60622 20675 56470 23065 1028 36192 59865 8026 63619
+10780 54924 527 49905 13625 45129 17468 48781 15154 50396 32888 16967
+47422 30508 14904 44575 16264 46616 25037 50328 13388 45697 3259 42354
+17302 46756 14360 43510 28596 54368 9472 44349 4405 47451 19569 40756
+55658 9316 60044 2026 57758 35389 4392 24705 53165 19166 47013 12431
+38928 786 47385 26214 63729 15330 55501 25551 10017 38536 27902 36141
+9432 36987 5348 31161 47438 16244 44983 8763 65249 28784 54516 7266
+62447 30136 49121 9496 44947 2810 60860 10572 35872 7245 47607 13475
+43483 34966 8924 22717 56472 24181 8480 62669 30763 39392 28231 36843
+26039 56305 7705 64291 28004 32830 61110 26741 48030 31427 16956 50211
+26324 40609 28935 46339 2166 39140 56774 18027 62538 37734 45832 16405
+41605 21637 46273 27377 60340 487 41235 27054 54778 3796 61100 29277
+56915 17228 45493 12328 49581 6727 25305 45286 16732 61985 11000 58720
+25326 53086 4396 56963 19479 61069 23657 12668 31528 62838 9535 56144
+31978 5454 47086 27762 60194 19845 55187 33168 7308 58594 27188 37048
+25360 39609 31666 4277 58779 23858 62923 607 23276 56003 35121 4131
+51475 24395 58584 17795 56095 43214 14093 33488 46116 9739 27395 54540
+22692 62521 28089 71 24410 47282 28924 40433 15921 60820 26868 54074
+3525 47042 35391 8533 38694 12078 60507 21792 55386 20469 63807 11676
+51708 2749 30351 36130 4279 56104 21325 63075 26306 36880 32408 27821
+50698 33452 25915 47688 12770 42964 17521 46643 29110 37041 3066 21791
+59855 30800 39072 23450 32901 41027 24952 51143 2431 45435 12354 48733
+29135 43634 14506 47482 24312 39977 16049 37122 23209 56810 31130
+53355 8336 43459 28360 5156 62003 35657 133 64644 23362 56323 10174
+60545 7748 40243 28549 55473 12002 63581 26830 54916 4000 40901 15941
+49270 20361 53516 27367 58284 447 31137 36606 27237 40078 31505 16994
+64075 33703 7388 57274 31156 60135 18019 56206 30906 10198 32455 44057
+6476 36626 58798 17729 65499 20961 53306 22489 63156 39307 10332 57895
+29628 52278 15033 47298 19315 43431 24152 1033 36532 56834 19151 51674
+34820 27442 65468 24202 33842 57636 2723 55410 29061 46085 3104 39814
+52923 25761 329 53955 10311 48544 4106 30457 50751 13961 47135 5607
+36599 12140 37984 7510 60137 35001 13544 61904 5378 23105 63837 29462
+6880 41211 32183 8071 29627 54190 1698 63741 29991 4982 35409 49784
+19252 46992 15999 39480 10759 43439 6998 50572 4332 58548 28432 34153
+57981 8870 52328 23190 44318 15165 40582 18694 47778 31023 38719 160
+35277 49310 5085 41607 26014 36656 15253 64400 33349 7815 31667 42210
+13256 24674 53209 35099 11450 48795 1285 51325 13672 44064 33476 9812
+30964 46423 36056 11647 19010 61791 21122 44661 1128 46884 25946 4589
+37708 59670 17380 56424 36591 16509 48754 6688 52865 31975 57748 20902
+9196 52362 31458 5711 48405 17210 64458 14845 28261 61409 22144 51718
+4084 43609 8885 45521 27382 38282 24246 62845 14455 57993 41036 16503
+46738 29806 8528 59766 3441 56415 10094 60696 588 35751 65317 4452
+51898 23756 8588 55385 31551 51343 27758 5208 58502 12070 54983 3806
+59632 14061 36563 27341 54217 19987 64490 6208 55178 34846 3619 58241
+33761 61355 10109 39443 5985 25861 60382 19221 40127 51436 13927 22679
+54028 33201 6556 31377 42223 19905 31998 65216 14992 23393 47761 31426
+7436 35245 21805 64639 31570 1672 62637 34457 8695 35632 50961 17634
+64397 14164 49385 8235 43979 13528 49064 39566 21848 5756 27687 42405
+7782 44717 21705 58199 19041 61450 28642 2603 47922 7792 46686 1071
+44314 12180 25028 51395 23537 369 40453 31767 5225 59379 13959 55195
+33667 15411 28847 41112 8802 16978 53925 4191 49117 9682 26811 44989
+19406 49897 15032 58701 32146 16681 46852 34783 22610 59477 15971
+63236 39829 19182 42619 23410 53103 22153 58972 20785 52147 29355 2545
+54541 18439 48416 36411 14404 53074 23724 55367 15377 60661 5543 34272
+50043 17465 37554 57342 21925 10038 55574 5931 62510 20596 52991 24261
+63731 19984 31771 38980 15932 47312 18729 42267 31753 2363 32687 56046
+5626 63766 28583 8567 51746 26310 64215 17887 54962 13861 59635 783
+43348 18945 54065 22670 55985 4805 61394 36164 1997 30258 61038 19546
+57381 16960 64461 21131 54559 27335 57560 6319 60818 28737 47267 31564
+9237 32722 65451 11363 35230 61106 22847 6867 49376 32040 4304 45193
+12171 40420 18055 42902 12520 37574 63771 17857 49855 36009 22680
+44482 9514 32880 50790 2320 42824 17500 40423 19607 61572 35683 3691
+57044 9491 43890 32138 7236 28938 61795 353 38289 48868 18070 42303
+22673 40673 20760 45536 18026 31207 40635 15423 60027 39980 16283
+43163 13092 45654 19559 35041 46803 16009 48993 22436 43497 57694 8730
+37735 4249 32031 46520 17642 27589 51474 22441 7084 27988 52230 21477
+63379 36456 1197 47783 10565 25199 57061 42952 9746 49813 26444 48495
+3813 52394 38027 1135 53237 35669 4931 58842 19654 56900 38156 10239
+45688 35767 13135 25329 59778 23360 11268 45551 4980 54177 20475 61425
+23424 55895 308 25864 63236 32371 54398 14551 64543 26921 53050 1889
+41016 11804 42359 54734 20026 40628 15017 60724 19216 55448 41178 7048
+37454 63436 17665 49727 35413 25192 45868 7949 40322 58882 5612 63036
+29777 46510 22093 42481 18353 62039 37484 14369 63600 6459 30910 37555
+5750 64638 11164 56079 7415 29623 44563 23792 9090 57365 754 62087
+11321 41894 3296 43268 14503 46463 24291 38965 32885 11784 52085 33956
+9398 44905 3130 48537 23447 58276 25640 10982 44307 7291 24729 48547
+33903 25765 38378 30522 48185 1445 42105 14073 37276 55503 9607 62835
+316 55067 13174 64626 28705 49995 18022 42668 16196 37181 60291 15617
+42322 11266 46042 28268 38828 23161 51176 12281 49425 2819 44380 13973
+46355 17607 50148 22574 43354 8658 44660 27909 38128 7900 47023 2622
+42023 14481 44239 20841 52515 2135 57112 26585 52148 15144 30860 48731
+16018 51606 29173 39198 14793 64472 20114 58365 23976 61709 4682 55699
+26876 2974 44080 10350 62375 584 29470 57527 39976 18501 56584 27142
+65070 11483 53697 30285 16424 49297 22797 50907 15925 39988 53263
+13868 34809 51112 15355 33261 53483 10979 47955 5117 52560 11772 57205
+7455 54801 33733 1375 29945 62100 5640 57188 30317 64733 7887 27026
+61859 35871 7171 32193 19233 33736 61512 24881 56198 9554 38416 62300
+12271 44207 31720 46597 2319 42779 11293 27830 54694 21149 65411 37277
+3538 32221 38452 20287 62673 14286 58470 11748 24082 43325 11016 45182
+21170 33562 50705 249 26267 59264 18337 52808 30111 46864 2891 39715
+56922 19799 38666 25613 36972 3335 46516 17651 37379 52123 9590 42918
+3075 46729 36155 5248 34964 48212 17223 53492 24392 9729 31855 57121
+26803 36821 32272 3819 30825 59008 12808 25916 53854 11535 61560 3145
+29625 64306 18004 31974 49632 21261 52711 808 60019 12540 52347 28755
+1778 51116 23196 42733 60356 16010 45351 20786 41967 18594 50616 38049
+2497 52843 34527 26833 37923 18116 48851 19813 54031 26554 63399 9844
+57228 6280 62807 30839 1107 60838 26620 32890 65176 12193 35536 13709
+39115 56388 20672 61653 40379 2128 64345 14402 58019 11067 26978 59103
+22277 53780 2962 26977 45056 23356 40333 20993 37599 6269 45626 10597
+59237 24932 54989 1695 27391 44896 6149 54066 34440 2558 57772 8340
+28900 61722 30015 39771 26013 63427 29043 38465 9226 65419 15866 54705
+34509 5758 50388 31333 18426 61225 22473 51211 32112 8399 33241 40702
+16423 42609 5482 38552 54703 3402 44119 10040 62091 1479 52352 30673
+38174 2616 49959 15948 47060 21727 45629 34156 28621 54820 25151 34455
+51173 20765 4952 48646 12629 37614 5582 46380 34039 793 59213 32223
+5693 33696 58487 1262 29970 60352 8938 24633 58876 5980 25937 64796
+18870 58536 35379 23727 41735 30150 13105 50862 25348 47237 18351
+49946 24380 771 37028 53961 42923 2220 24449 42494 65535 184 47844
+11491 50999 21613 43178 31204 1341 48589 15557 64223 19917 55964 18508
+58668 44558 14310 39002 7587 29708 59816 13336 54948 1980 30230 44509
+28612 35848 62317 17170 56001 25703 63184 9865 40341 30027 47276 8127
+42520 4621 61111 11960 52051 27234 7359 33496 60922 12238 52919 33265
+10915 58983 31783 15112 48490 19419 60591 24427 16684 50379 19997
+31522 62528 5614 34507 64187 38925 4523 48952 9275 43021 64648 14052
+45087 33709 42541 6279 44456 22135 38042 53091 10217 48470 2506 38334
+10842 36399 26715 37939 32133 6694 40592 59250 31806 10042 34129 915
+52035 26925 55020 3518 61649 33661 15000 49067 21268 60099 12736 54937
+32962 8380 64518 33853 7097 30454 44614 19749 42255 13169 49418 39878
+20328 50542 15898 37670 27454 46422 62277 29566 3514 45657 9593 30679
+50702 18701 42329 3993 45463 35672 17991 46786 11967 33870 59729 5989
+52792 14251 60102 25776 51401 23651 38612 3990 46394 13701 33083 52847
+20311 59090 24686 17010 50858 20250 33751 45093 21130 6844 58373 10953
+36441 514 51186 27889 33979 46884 3043 23387 63154 17398 56719 35457
+10416 39923 4499 64985 25570 55408 11099 62655 22336 59428 28188 18198
+63496 20594 40382 23993 47436 21312 8861 55283 26943 33310 37115 10943
+60207 14454 53192 6080 38272 11897 59489 7004 37627 63481 24692 44823
+22356 58646 26320 13766 48047 36767 14691 64698 17885 42905 25321
+46943 18416 38921 49574 20242 43596 35569 1635 44354 28495 9080 63235
+2353 59313 36047 20080 63990 8224 38702 11103 34316 52604 22540 9997
+20207 34041 56289 11988 26798 50416 20502 41919 28873 3124 59316 17052
+55580 24665 36693 4713 49611 9345 40937 31591 5323 32392 57697 23253
+52163 17788 46625 21621 40555 55797 6849 18492 50690 5460 46515 35018
+2659 28819 49530 16886 61654 20616 53622 24895 39906 21928 43065 18982
+65094 29656 50261 1458 42491 16791 63642 28171 38852 6044 61778 30321
+40118 8931 34159 59233 12234 56626 8464 37941 28244 51557 13401 23349
+59875 21285 54319 16130 28472 51065 22486 2390 61259 31338 16857 57546
+13317 27502 44028 21671 54212 23639 57259 18905 64712 15518 55565
+44287 20851 13814 48303 26144 54481 40776 30169 9557 32553 47629 25022
+5587 58835 28902 7829 43296 31223 5086 47360 25633 39410 15248 51526
+38073 245 53225 22581 58168 25643 8951 47197 4489 59258 7749 53676 711
+19617 47426 23104 36226 53042 15566 34941 56061 11881 54495 15157
+60583 5620 31099 65357 38699 15611 43909 20353 41957 3685 43358 12488
+53918 20140 62229 22752 36541 64798 9663 41025 3590 37518 62973 9229
+40237 65059 3489 55581 37875 23481 52265 21875 59248 12728 56883 6222
+24864 59857 40014 12187 42580 332 45483 21683 56272 31196 15339 42769
+18464 47644 3837 44632 12623 49415 35482 8227 33270 58160 12412 28782
+57353 40280 14031 50882 6392 65260 31262 1112 42109 20513 61139 19350
+48242 21801 43502 27855 10898 52655 1349 54431 9764 39864 62752 23302
+8306 53048 26720 38803 9965 62316 6497 55189 27464 2644 63340 11390
+54992 30986 15050 49894 34100 27262 50395 22034 47878 4867 41684 21574
+56157 27451 63155 14306 36259 60764 28856 51611 17638 46021 34644
+10472 57277 6523 63245 35474 12835 33406 41983 10765 58893 29291 37805
+25609 62610 15340 36211 48122 2677 45587 11752 41071 5743 63305 9477
+24457 47486 34381 22996 56685 30502 14828 59811 39412 7672 54578 4188
+37558 13307 64147 15096 56026 6320 48437 13589 41834 15684 56568 31473
+47971 4517 43566 13325 50263 25141 2323 52771 27303 46199 1247 41558
+25629 45800 20947 44030 61 45189 33722 8765 46359 1564 39325 58096
+5102 36493 54988 18849 39642 50793 1406 46714 34228 6090 62802 12039
+41631 4451 44926 8304 42780 3260 25511 57515 37263 4700 65042 11429
+19782 62761 22722 57885 14614 35092 45675 19671 39046 63786 16586
+40349 61344 14183 56537 1805 58676 32484 19090 60341 15865 45405 4034
+37271 64130 18686 42132 22005 44039 17969 41674 55060 6781 64908 13933
+31750 59969 5855 29144 46920 34106 23547 40736 28168 49284 21021 7852
+54906 29779 63246 11349 56478 17444 61235 1304 40812 11175 51145 6614
+28356 47920 22474 50003 29002 15152 47067 25553 12802 48315 32212
+10233 43135 4609 47152 16391 44814 19953 39253 52079 10554 32729 55112
+20056 61886 24813 49218 6020 37527 54182 1012 59018 29780 37357 17487
+53764 138 43532 26847 50597 2481 35295 45117 5580 26224 62846 22065
+43093 12935 39795 53944 23289 49461 13308 40024 2235 56237 14018 60620
+36357 17205 41517 20068 49171 31254 4457 55231 32841 43709 2443 56815
+34101 23044 44151 14777 45637 34459 16969 46328 21826 39613 62002 6338
+55847 14138 38897 10791 32464 60575 26639 49511 2926 44890 6580 31145
+47188 3465 44718 8402 62691 4379 59052 21751 36472 51931 16218 47424
+26126 61189 5755 50306 17611 45460 13789 50840 287 29163 51808 16665
+63774 25813 33173 60999 27384 36531 30752 58932 13570 63961 626 36257
+10498 52746 31834 18521 45768 24236 42942 18102 44758 2324 46502 29915
+38069 25904 58610 5486 44562 24023 8517 26660 57640 22305 53998 18386
+44568 35825 20703 62963 13166 54112 15169 64993 4091 57866 15723 61167
+16961 56473 26395 35565 62200 24077 11845 47633 27297 10046 49303 8217
+25428 65099 20322 56228 24635 35602 46453 16426 59455 28627 54434
+19836 61621 34701 7804 30052 46424 21482 38474 49502 7129 44910 2067
+30748 64247 12077 56655 1180 33013 51330 3024 26688 43952 20906 46027
+28157 6026 49986 10937 36163 29560 55229 14838 31987 52488 9944 56617
+30464 60530 10741 34017 27375 35428 49107 1250 40917 26532 62770 20599
+190 63535 10413 56875 2424 33260 50283 24947 900 32993 48238 26824
+36378 31062 47643 21615 43083 18588 58152 38131 13219 61609 7930 57099
+33197 1117 60378 29728 37184 17962 59941 19680 64571 25818 40802 3704
+62893 31851 18308 45870 26363 5423 49669 29331 9004 33366 59507 11732
+23430 43790 26968 12134 63985 33861 24801 56960 14462 60168 17156
+31265 53088 19734 60841 36653 678 46104 16939 48903 27417 8675 58928
+4096 31076 64748 27315 33668 46533 3424 29644 56952 7569 60265 34837
+15306 50760 36335 20727 11931 50443 17312 47834 3877 30720 64105 7854
+56241 31695 4444 57670 8396 24988 45227 21116 43215 3836 51446 16202
+37718 12543 35157 58414 18808 35826 52026 11605 58693 16787 31425
+38209 24372 43377 30122 2034 31234 39353 8228 53894 20499 38402 27236
+65185 3027 57241 23366 34727 60185 6617 30862 37507 9014 49083 833
+54301 12755 51380 3085 39611 16756 42118 61197 21025 37540 5697 64926
+14334 57225 12151 60139 30698 51700 21232 10617 63410 764 30831 52463
+18367 62796 32755 49877 10303 40601 991 65351 11617 57167 7345 29919
+42668 23062 38479 19029 50933 11291 37033 25306 49147 3407 43323 11148
+19322 50311 37383 17319 64064 38632 20746 58853 36410 14733 42870
+11279 50469 217 28010 51298 36621 13653 33932 48457 10470 51575 23050
+60539 14973 52765 2949 32257 56746 23665 35668 50391 6640 42899 24251
+48663 10610 22183 58390 37109 6467 52963 10227 35412 62397 23158 41263
+65367 7955 27217 46667 1519 38586 26710 36270 2721 24606 49612 4616
+58672 11700 25481 57597 18974 48396 8867 43711 36010 25683 46477 18187
+39579 62077 10032 40864 58789 18700 37870 4988 50448 9100 27917 63631
+4814 49527 31004 595 45413 19937 41692 18298 53510 36524 14319 54388
+6404 52781 1779 48919 30195 8868 50706 27844 36651 8184 56125 1663
+64119 34052 14355 41446 53474 16702 39922 29178 62467 7332 49307 33018
+5761 48582 9173 30191 45610 5005 38767 64804 8524 42190 13469 31990
+54473 24906 59509 4434 51865 35754 17762 34264 43989 9877 50571 7787
+21282 52073 38760 19113 44286 25800 2879 63680 28773 6974 61715 41773
+31466 59952 13122 55967 37922 20799 41612 17886 50785 37612 18742
+48159 35036 941 58192 17045 65026 22434 56496 57 53012 29703 9230
+32651 61585 15778 41156 24970 35072 48913 13074 50859 9356 40603 63946
+14686 49622 22310 40978 712 49023 12478 36251 28398 39223 8637 46542
+12917 40574 55762 19144 59351 22200 39079 20076 42222 25475 45468
+22427 50005 29097 8386 33362 49285 23572 40528 32747 1251 50162 33574
+7128 27291 58216 36041 23201 34247 46202 11172 40596 2654 45275 20739
+59731 16199 46881 30917 39461 22056 34490 55026 4788 59977 7651 47494
+27574 33425 53677 6113 39626 27918 63009 33106 55296 5852 25614 52034
+642 28735 45678 4599 31904 54061 3674 59824 16107 33789 61170 7367
+23139 63747 1630 26586 40903 16346 43544 425 45133 29064 61856 12910
+36498 8913 60610 13582 40984 19026 53839 15930 35899 46368 29379 12136
+64978 33130 24091 53906 16745 47876 2252 21842 33750 59135 17768 61719
+20137 54792 15344 63211 40820 21573 39148 17723 43260 53828 8259 38062
+16060 52786 21959 50011 6745 29438 54043 13989 23122 45139 27895 7449
+52322 13378 64982 15800 56126 38243 16565 54302 34925 15296 60451
+25842 52180 3160 44053 10625 26931 49496 22671 42312 20804 44068 15102
+37127 55838 17216 60758 14755 49260 21071 42393 17738 38642 58485 3780
+28410 63827 2314 46969 13687 52649 18084 57854 39411 15540 60636 40900
+18634 51667 11842 24466 46299 18018 49630 7432 38993 10491 36927 30722
+14967 63367 25766 54963 16054 57739 23666 36823 62695 25983 5769 65316
+10343 53978 30037 42805 16827 45336 33573 21882 6114 26459 45023 23859
+10435 52228 650 59655 9415 27222 61263 15594 53713 26447 33872 46490
+12052 40081 25081 45579 18059 64437 23956 48292 1711 29476 55405 6217
+64850 1094 56924 19778 60898 18045 32213 54890 4695 58316 28710 62746
+23578 55326 7439 53346 16541 61716 20756 53968 32632 11548 45013 4488
+53287 10941 58283 6409 65077 11359 57062 5263 54174 25957 58608 2237
+53571 10146 48194 27435 37489 19786 62898 40354 3581 49667 9285 57053
+16396 61981 21459 55757 29429 6633 35810 51420 28335 9383 58713 3184
+47787 14087 44806 18224 51789 31341 2130 42810 21993 63795 14225 51863
+7403 20728 41992 29245 60804 14621 33044 56355 15727 61943 11916 37502
+28614 39984 26124 47365 18431 44415 33442 11817 35932 56462 5140 64364
+32497 53966 20569 8216 42589 26161 49002 31576 17341 51872 25213 61008
+3767 31202 63025 4798 55715 20027 40217 14687 45287 3636 39607 12995
+54450 36875 50669 4745 43249 11768 47950 6019 45822 28294 8639 53156
+31817 64018 2309 33494 22199 61914 31144 3181 58148 15333 60189 41954
+4685 37032 55693 3513 61082 36722 22367 43815 23487 42270 25250 2810
+44196 29425 7755 49065 36031 8919 30194 58544 21954 62632 38521 4099
+63806 11228 57420 29126 62115 5255 31467 38601 942 41542 26730 59599
+11808 52678 7306 31190 48239 15059 35513 50715 19457 38792 23867 42218
+1866 26437 52162 23275 3056 63198 27976 34048 56220 1631 59897 27719
+55806 18397 64031 19731 56686 38451 1948 47139 6484 45203 35280 280
+48091 10622 34065 45631 23369 40031 14988 48071 8510 31650 58350 107
+54500 30233 64922 1874 33438 61103 25615 48403 19929 33062 46700 2834
+41328 10535 62702 7261 29156 54639 5063 60960 10090 41469 5837 42858
+13863 57478 38610 21356 45904 19200 37551 29246 43859 3334 48581 7716
+37895 27681 36171 10587 43738 15104 30961 42931 19565 44615 4057 42135
+26771 1684 64444 25469 41331 23069 47033 27927 44831 21304 37940 18479
+43730 15135 41762 16175 45296 19006 59521 21311 61950 4979 52356 11435
+24222 55506 18798 41932 25240 37543 5821 51033 11862 34521 64026 25184
+3794 61346 22792 33436 52390 25508 63479 28371 39264 9974 62415 20662
+58830 12371 30035 44308 22629 38290 58285 2052 49408 9525 39364 47074
+7632 42449 21749 49008 18571 55746 6508 62567 9434 54589 3868 58179
+27714 50081 18730 42708 28350 9294 24530 58384 38075 14547 54180 4269
+59003 38716 139 43324 11380 38064 50045 12843 44153 28331 51862 499
+59831 27063 56739 19330 61192 26698 9592 19715 56012 24513 40153 30944
+57539 13901 37584 59492 16771 9513 42161 20164 51605 40817 5321 46695
+34306 11559 37667 31797 18952 64820 32572 12717 50780 32250 10641
+58020 1906 53976 8106 61831 32596 59491 14467 57488 31830 17429 65262
+37900 13911 46995 7267 30065 45887 19418 41011 25812 7532 33404 52120
+14008 57725 23595 53615 6122 35205 47450 23248 61499 19173 33624 56849
+7906 29810 60984 4376 55723 12448 65207 36533 8020 46446 31051 37765
+6874 47862 14222 40980 31610 5199 33096 43314 2854 44393 9138 32374
+42401 22482 59853 13552 26544 61648 17370 30505 53109 16384 55905 988
+59439 19652 55510 38805 12529 42413 16480 46938 14982 51846 37352 6735
+43057 11908 36855 65247 14220 52821 21712 44372 19249 49073 38423
+21533 42446 19903 48948 27535 53953 19367 50098 33143 4647 53288 9902
+31799 51232 7119 26187 54068 21221 45342 15624 52428 19465 60418 5288
+37244 57742 1950 63088 30307 54825 14376 57598 38684 15187 52384 17836
+62912 3252 36787 10340 52633 1490 61766 30379 55666 3719 64508 29826
+36983 6187 44551 13802 42158 17514 45207 35007 8662 32966 61286 2041
+48824 27873 39031 22840 43847 13931 48551 39882 15234 46260 7043 40976
+10550 36832 502 49596 24272 33715 50224 8068 35360 55048 945 60500
+10484 32034 36637 23382 57046 31155 16983 63605 26462 53069 1741 41904
+13476 48289 22960 38443 28872 43047 15055 46280 6242 60142 13895 52425
+31563 46658 5467 33862 63877 21124 44784 18728 29988 65174 20134 55045
+26438 17115 57735 35365 8925 22727 49114 35126 9314 30634 46845 5418
+43747 31552 45561 29253 10193 64646 2911 26505 44608 23566 359 47788
+56209 24509 60349 10367 29314 56324 14758 64487 25043 54999 1796 51869
+9185 24136 46135 26721 17077 48483 20458 39993 16255 46865 35651 21457
+6494 34111 40948 2208 46443 24265 5451 55032 33293 21150 56050 12064
+59436 251 54580 43594 17691 35675 46582 9271 45067 16006 65151 28545
+2958 44056 11261 51048 1190 37867 25368 44666 10884 42775 20486 45730
+16362 28957 53581 20652 58500 17085 54689 22659 62274 19070 53689
+25251 61289 12559 51331 21516 48531 16715 62403 9672 30048 40595 54004
+8355 33015 58223 3069 42425 12814 46989 27374 37126 3948 24187 62239
+20508 57006 8829 39445 31764 18856 53599 22548 58047 30426 5570 39209
+28451 59917 4716 51754 27722 2058 63518 13569 56736 34864 2579 36405
+61869 7617 26258 63833 15142 39532 57979 15627 63350 33567 13313 59993
+24599 64986 1478 40182 13875 47611 29467 11957 49785 33527 9030 24477
+47589 7016 33357 48718 5542 43935 13179 51568 19359 60580 25049 48337
+27541 9195 35386 48784 24467 8698 50947 33227 24081 54885 30190 58810
+537 65299 26417 47577 15838 53072 13627 59991 8028 57953 113 55105
+28669 8869 56006 30158 64474 18639 56880 23388 60422 16697 56348 3606
+38066 25998 46853 15323 42138 18835 48234 21328 65376 13222 41325 3300
+48497 35873 5466 30471 58366 21309 64847 35029 2628 57223 10920 34158
+62954 21125 41268 23752 38825 2420 62313 16835 51152 27432 1493 40210
+10240 56240 7745 34254 46902 5988 45343 34244 1944 23997 61576 36476
+7015 21126 63917 40557 15688 51421 21120 62952 850 57998 36020 22730
+34237 52411 7719 63544 34097 28707 38531 3649 30410 48870 18043 36013
+45179 7401 42478 16482 43672 20714 39841 56773 559 62675 38732 5386
+64073 24229 57187 28564 12944 50993 27968 48260 17935 62429 11652
+51652 28829 41251 1481 50530 25831 40089 23732 48782 30948 10307 64280
+2454 28384 61613 30075 39163 10096 33831 58079 21556 39763 24485 64842
+20726 59227 15485 54508 30784 62201 7018 38216 59817 13017 40235 848
+44008 10458 37108 3777 42781 9908 47140 20943 39629 30208 59184 5782
+53611 25421 34734 49577 3775 20952 51021 41628 18838 49111 20775 61334
+34435 11159 64295 29652 52319 6528 48774 35131 25984 59325 4341 62578
+11059 41397 2227 49776 25166 56503 8823 36491 32103 12509 58527 37020
+18545 50665 6822 30359 58788 22812 12483 35576 44714 18684 47770 27501
+2808 42966 20216 47713 37144 5518 41960 11358 44694 22112 55950 20410
+64043 24757 38654 15501 58561 37208 19861 62016 27503 17065 60840
+24349 38019 28566 40880 5010 42795 12611 39575 57770 22108 14545 38955
+55263 13121 63463 1894 37486 9430 27083 48975 20419 53594 5295 30882
+36595 22380 41322 33413 24329 45849 17469 37150 49618 21162 1606 43104
+32028 4989 45572 12923 41655 27466 45909 13572 64706 5138 57585 29493
+52499 3978 44996 6933 53970 18705 61522 24696 12872 51466 38266 14979
+46044 6953 26939 45083 20285 51695 24174 1093 53598 12252 55122 19336
+45116 22582 40657 11719 59627 30291 52210 23331 36330 50244 14378
+28903 57030 14902 63672 29615 47924 16251 54482 30137 52583 25874 1689
+58855 36253 8422 34878 48881 16332 51810 6578 60776 17178 48665 20547
+51259 13276 22315 52828 34932 6879 58933 811 30022 51411 28386 60771
+10763 58666 33200 14935 44339 33674 15599 50042 11623 44616 4244 38054
+55228 6 64432 10155 52957 25619 39645 14905 56359 19874 64058 35281
+5167 61884 8313 36365 20600 55431 37118 24503 48768 19311 4223 50600
+25322 48415 16639 52050 6834 45272 10354 41526 4914 49241 26582 470
+34218 49628 24404 3531 47535 18289 64245 24036 57153 27107 52853 22010
+65100 29729 403 57249 9402 23633 42827 28754 1239 57423 14330 63881
+37705 29221 5468 64611 9139 39681 31372 4926 51172 17715 44796 14426
+41347 30193 2780 50644 15626 46224 21717 44340 18078 63563 14589 45722
+20465 43673 15291 64349 41775 23068 9088 43681 33666 23720 45147 15634
+46762 29537 59689 632 55621 9003 35519 62043 11579 55926 409 28871
+52823 18598 57409 28555 50232 7960 41609 2929 45848 6411 51599 28104
+891 43595 12184 50554 36553 9261 53449 383 59975 16179 55883 21782
+64188 33114 5843 42471 62494 67 27823 42007 19914 46216 18167 56185
+39091 13028 43636 15200 39826 62452 9646 56200 3923 64789 10035 30814
+63057 4727 23955 60756 38383 15693 51893 36424 21012 54626 6362 61209
+21448 51685 17879 31917 39208 8521 24967 61862 16241 38841 28687 49950
+8907 33783 57860 22974 8051 61088 34320 29381 55206 14428 60648 7500
+48727 35684 29614 44204 4337 60990 11143 53028 6455 43168 18254 46933
+12333 63128 4920 31307 61439 2462 40474 31075 7319 50836 11208 42658
+4231 41730 10731 46091 34206 12399 23898 57170 26493 13366 41767 21794
+43714 27317 41277 12206 37532 5578 61298 42426 11868 65519 26075 39865
+22867 63035 20019 3841 36436 49926 23582 4863 49422 29474 7176 54206
+21548 41491 18809 59742 12042 30644 41836 20558 44335 29179 3910 59100
+31780 6332 45256 10352 28474 48139 18564 31782 58465 4487 33654 12163
+53047 7125 40191 55962 20688 63169 103 40768 13407 62547 28835 55824
+14738 46045 17805 37141 57545 21484 9706 55343 35466 26593 51617 11106
+41318 5431 38900 11693 44386 6466 36552 52116 15341 37408 64373 15729
+47734 35974 18863 45653 24100 11500 56471 25308 36904 27838 53384
+15799 43564 25676 57661 1661 36479 60103 18066 63920 11511 36616 28775
+56253 7714 51603 28709 37343 9647 61459 289 47610 24851 3523 55087
+29080 62144 1056 55699 11287 65416 5194 52387 20976 32404 40496 24510
+50456 17349 32690 40494 24059 59399 8719 48499 35645 4196 33770 59709
+16328 54686 30017 61313 17536 40456 64803 21468 56408 2849 28674 46523
+22618 42299 20878 46163 11880 50479 2464 23189 53197 30108 11730 34059
+57417 7553 59749 25782 50376 6579 31687 60897 3118 57144 32203 18475
+46018 25226 50607 19192 38169 51242 16417 41079 53280 12620 27437
+59503 11219 28692 48246 16033 38695 12104 42424 1315 36512 54054 19632
+59068 35656 10715 32608 50890 300 37326 27072 44522 2479 41095 52597
+24548 775 47317 10268 43258 30367 39879 17053 65239 13483 26503 49722
+30521 37149 25903 64583 21329 55799 3493 37949 26694 48619 17226 35918
+52832 18186 59988 34970 22173 55855 28237 64750 19513 56260 17622
+62571 29602 52269 4003 32780 64093 3264 55653 10602 58360 1320 54336
+24919 44350 19274 1768 48205 16840 43549 13609 50297 8613 35369 54295
+25466 7764 34597 63979 18918 57452 25578 35194 60689 1537 52164 34126
+25918 61350 14273 56698 7440 34413 47084 18999 36839 60869 16370 38297
+57779 12727 37501 49819 15835 42152 51487 22148 32520 60618 22737
+35485 8096 31981 44348 22422 49962 35254 3338 33958 52484 22791 60390
+11677 28617 51188 40963 14162 62986 6646 30105 44659 20020 61543 17897
+55374 25147 58306 13278 27658 48895 31424 3617 52874 8590 61026 32218
+6795 54789 41055 872 48053 11952 60370 2123 36497 63299 13442 29076
+49964 23320 8088 33482 40585 23895 57907 737 38254 27597 36151 3665
+54861 32750 27096 52380 17952 57142 39804 14489 47144 16114 31061
+40264 25286 37099 28029 39151 8617 51483 12050 61094 3797 30318 49019
+5951 47020 21611 39000 31511 16650 62489 12966 27545 45065 35747 10257
+23675 48096 11130 33028 45620 14924 39831 58662 17495 65486 13629
+56913 6887 38963 27399 34913 49639 17595 60684 26043 48062 16868 44443
+35208 4330 36244 64386 16911 41902 25353 37003 8196 49846 1348 42253
+14182 44637 27460 2507 56844 25773 7598 34475 47158 4020 39776 58488
+2219 65254 20235 55523 22987 62716 28060 9656 43179 2585 48534 27042
+55880 18192 63886 21865 55089 14665 59995 31171 11082 39760 56635
+19409 63261 23810 3291 58522 32746 5618 36560 57793 21734 10059 48321
+608 29100 45955 14270 32151 53753 15862 35003 58457 8851 25344 44399
+11943 46215 683 39012 9409 34557 47285 2625 39169 6425 42490 14377
+48196 38573 18304 44644 25225 37868 19916 45910 15720 62648 13850
+56953 38026 28968 58078 4154 55295 34289 27516 46993 15858 62444 29804
+48129 13436 41697 3025 45239 10064 27553 46016 23224 9241 48926 5881
+45811 35655 23422 62044 11117 54699 758 26210 51260 23722 3076 52585
+26335 2044 65493 25047 9140 62764 1238 41685 12871 58683 28253 54866
+10783 60201 6009 24314 58799 27076 8364 42938 2477 39385 64591 5596
+32789 48690 18824 32365 54277 2660 49807 28378 46668 1398 41998 20243
+38210 61873 7634 45176 24575 38796 30611 16356 51977 38368 13349 30801
+61946 17972 42569 21666 49604 24413 7254 35081 45323 10850 53286 30657
+55879 4809 44690 16388 51150 18600 62072 20896 58861 16190 48756 6041
+38008 33737 7708 26920 53137 6364 35372 60253 10260 53733 3272 57815
+14040 62964 26778 42231 22429 34875 58379 12749 65255 34345 10121
+61406 1911 53220 22830 38348 52177 92 21973 58863 36573 3755 54268
+25063 5185 52572 29911 8253 37600 4276 48970 35721 28547 62798 14693
+59255 8822 45140 3873 41627 9875 52489 30789 15633 54104 12389 23526
+47504 10787 51673 21784 63775 27610 55052 20385 62066 6304 58376 36391
+11451 47977 30132 62664 18411 55335 26558 14025 44510 31945 46702 4261
+43649 11185 40094 56529 16910 64180 22583 40312 4732 45577 11609 41849
+5332 47219 34716 20437 64514 17114 32817 44385 5818 37014 50598 12079
+45569 25409 51008 2009 35144 63402 17932 57031 38846 8281 58807 40238
+7460 61883 974 23634 46609 32861 3946 56518 22866 62182 23949 57863
+14626 27156 59307 23483 53956 20779 61824 28764 7322 59612 11581 53626
+5256 65085 28039 38758 4303 49034 27203 51592 7089 33752 46048 24669
+9938 61141 2601 41258 11042 43436 1149 51765 21111 61472 18268 55823
+37747 13149 65447 39683 19317 53217 30050 2096 48175 16490 42430 21227
+49599 40521 8512 63268 33604 17597 60276 39774 14583 46063 34778 29771
+47836 18939 51340 3599 46237 16147 41900 20017 36911 48709 17501 39711
+63664 19490 55031 25523 16865 44577 23011 1667 60516 43019 17153 58021
+36065 8955 33768 63570 12307 51149 3327 22878 54120 19512 62729 11773
+57843 41559 2604 25875 59089 19907 35091 51549 6235 46223 10202 58900
+29872 54662 4275 62677 20586 43968 14875 49437 29422 60936 10632 42249
+5266 46581 12671 43461 22663 54386 11610 62858 30129 59317 17603 31896
+50333 21087 46006 17284 43054 18472 47176 35005 2427 57119 8030 53497
+16104 42528 26858 14956 49861 23596 43212 12209 46574 6333 25416 64690
+34124 8406 50656 31768 18375 59910 38356 16647 63417 23516 55336 32180
+21531 9789 54371 1313 41528 25592 37294 15649 56062 19562 65027 35877
+2372 60331 32188 49824 33695 853 59310 30116 5066 38772 12760 33019
+39743 11064 49412 15328 31375 61123 19862 42565 897 43654 9869 37128
+52983 24870 8947 18764 51244 30232 58164 24248 5944 50461 33104 9150
+60258 33787 20524 56990 17241 62136 30370 9768 45459 3947 51276 9500
+26381 49515 13776 27598 54464 20618 61912 15353 31294 45000 7198 43413
+32708 15737 51029 30921 16740 45034 20248 41419 55103 14013 64450
+37251 15459 43599 17513 51416 5192 48552 32720 8472 45355 11924 43405
+50 36281 49617 23269 41143 19032 47650 34223 9388 50517 29594 36213
+10264 22942 63867 12954 21916 59833 35857 18088 53147 20801 59161
+22578 55478 27293 39121 8245 47003 30691 5533 53710 32048 2947 58964
+36848 15510 63603 25406 53709 4622 58461 31392 15586 44540 14156 47442
+41700 8824 27576 56672 4916 53714 11160 27105 59720 15237 37911 24941
+64716 2068 53178 27932 9377 56733 1351 32010 49801 9065 34620 51942
+12549 57246 38229 25392 7525 40248 11999 23274 59663 16161 27366 47275
+18396 59544 43643 34411 1752 28641 49833 5621 23057 65393 43123 4806
+47268 9565 31773 57152 26667 39344 14964 47250 20153 42302 17119 38809
+1176 65516 26275 6985 34763 47997 19888 54029 25432 39127 1427 64114
+17075 41592 21520 42913 1910 37732 64619 4140 41523 7836 63432 30749
+55131 7028 23971 50141 19297 38738 29544 46550 1395 51935 35800 4441
+55171 17091 63590 20044 56912 41217 15426 46297 29886 14501 63175
+41915 11828 33660 48392 1468 43505 10629 41283 61091 34537 24752 33016
+47476 6147 51388 28858 34022 48861 6956 22627 45003 25550 5983 21579
+57832 39548 17478 41424 55450 16059 58641 4410 52666 28865 37289 23661
+44121 5453 50258 14476 54159 29413 64258 20689 5700 60333 35130 57191
+36430 8160 20653 49387 29617 37996 19025 47305 16562 51616 31025 2302
+49522 36005 21502 59414 18930 55620 27952 34622 61706 18262 58981
+38270 12 42497 8292 39149 59748 18829 55538 24733 4486 61265 35709
+2304 65340 25072 51522 12539 32361 50909 7916 28920 49859 6314 37812
+12661 42617 19803 63186 37525 18836 60603 22907 55201 26609 12852
+56100 2090 61006 31090 17062 56406 21436 60425 18299 57672 43818 17453
+37125 50989 109 43817 30916 8007 47839 32202 6419 36230 12310 58474
+33650 16325 63407 24421 40667 17006 50536 28803 7753 32320 42155 8971
+36537 28119 38099 6910 61643 27202 55615 5561 29300 51939 36846 16634
+43026 19683 57569 35916 6741 33045 50077 8852 29229 45046 18371 62302
+38347 15074 45812 16475 37026 28232 62018 3864 47874 33680 15579 52944
+28506 65508 33353 51845 3702 35028 54994 6018 41066 30491 9602 21859
+60107 40758 18129 46198 33807 14210 32808 55543 16990 63053 22015
+36933 3398 64941 31596 368 56889 12029 59421 25362 46428 12342 41096
+57395 22973 2317 64534 30618 8674 59798 33174 27006 48024 4310 50825
+15119 46780 24745 12556 48097 19290 51255 24890 1515 37775 29714 61354
+9641 32177 64246 5382 24278 60686 19756 57573 28645 32858 39819 3229
+36865 31947 9473 51137 4983 57731 36018 2228 28840 49889 5927 25744
+57178 31345 51648 18962 2560 49481 13057 52476 17804 63862 12168 58540
+948 24567 40342 57148 10316 62948 30081 47898 8792 26377 63307 12043
+28663 47756 22228 45031 16485 59859 411 65448 12957 54714 25111 40431
+33426 7200 23817 51441 29935 40332 21441 235 26499 63504 34750 2776
+60873 12157 53295 734 44351 7801 63140 39744 26055 8370 48912 1218
+43235 35776 8801 47008 1937 42030 7788 31571 63949 17273 55995 28696
+3771 50264 9522 34073 48698 23033 11361 49681 29052 6042 34192 60254
+3321 21713 39849 60915 20265 55377 27815 65485 25802 53210 1387 31164
+50400 4738 40967 10410 50800 37563 21739 46230 34768 8716 44326 602
+42015 7841 46461 2885 24787 49410 5893 28406 56609 20253 64376 38299
+14969 56150 23644 65110 31580 3964 52447 29748 405 49595 9642 60078
+35393 14066 44474 57707 17499 55418 14728 65030 20307 51990 32134 1839
+36440 20635 64491 22064 530 62466 24324 49290 3239 44469 23920 63908
+17304 56842 39423 13209 50613 4117 30599 54654 22417 60614 5230 46937
+13581 41572 29769 6257 59451 10418 49352 212 21419 39438 25161 45903
+15116 36631 57599 14487 36190 47923 29592 8848 56622 12905 51693 36934
+8322 29260 40923 1460 44940 12928 50112 17204 52956 37377 24357 40767
+5129 51985 21407 55203 32439 16227 50548 39896 15195 37050 50116 14271
+45301 7296 35526 58653 19150 55837 8206 57691 34182 28651 59745 9833
+34520 58599 20574 52371 14544 39740 47867 17416 51347 37738 10494
+41536 6705 45216 9625 60126 24836 53751 17573 59330 28978 39939 16548
+52871 23265 55456 15944 61601 44541 20116 6765 26766 58286 35562 22889
+62252 5442 40142 23472 44664 19033 38966 61188 14399 33377 46841 16352
+42946 14919 52078 36837 3551 53315 34458 2106 64292 9200 36322 25778
+40646 18697 46948 29147 3053 61765 12185 56128 39095 1954 48837 10436
+62097 31829 54348 15495 47854 27339 41106 23312 32466 58702 26697
+36981 13015 22204 54872 34285 15578 57347 31655 17708 63509 22723
+56975 23888 52043 19037 34074 47919 10627 51741 21900 37682 27071
+62828 14684 39542 59346 19558 40865 56677 10713 38742 28622 49125
+25912 1590 45862 10431 41729 2909 40056 16232 46010 14857 35738 57622
+18194 64616 28197 5696 62811 11132 25618 52555 19895 63425 26580 51913
+20474 40390 55398 15057 61600 39752 11181 45621 4935 26905 43141 2033
+45595 14106 51209 41336 14926 37581 57917 20383 42717 26186 5047 62997
+30668 1011 39952 27195 46725 2767 43061 13111 48088 24005 59016 32604
+9340 48288 30214 40854 7701 34064 61461 14161 48592 812 43582 30355
+5463 61033 34929 25996 46734 7000 43244 11910 52856 24121 58151 18673
+63859 24746 35852 45484 18430 41577 56445 10935 60312 7851 64662 29377
+749 31960 63145 4470 52184 25320 37739 30610 14 61428 24706 53685
+18846 57649 20354 60091 27875 41135 9427 22008 62194 16013 48454 31894
+8692 36252 3468 62996 10113 27017 47329 5953 28124 56931 20136 61742
+24980 9644 38617 29172 44089 13879 51720 484 38191 27151 45060 15790
+42224 4706 44473 27082 210 56465 11680 28358 48295 18081 62195 21041
+50464 15969 42828 5651 47417 23978 1199 62318 32820 7574 42621 9617
+40658 32597 12738 36098 64576 39422 13836 46445 9281 38039 27806 56770
+3003 30061 49620 8418 27138 53364 4023 31142 55252 1629 59010 32448
+20139 45930 18465 43735 23380 37742 28068 52061 6533 56711 32086 8469
+58141 35344 22809 45829 15983 33993 59607 18241 44256 22311 46479
+11963 42300 5592 53823 10376 65025 7011 40033 14797 54293 29542 51061
+5019 65191 27997 38441 12398 50404 5376 39965 12882 46240 14517 57682
+4634 25013 44246 30397 64767 11712 46547 1323 53275 28415 4835 46372
+13835 33429 52516 18141 63493 11495 57540 34406 18637 59004 22385
+54245 11145 59651 24361 56146 7827 30244 42285 3036 33917 46797 17765
+39444 59207 4882 48641 36438 14223 33974 62132 11775 1372 45027 32949
+19102 52181 16612 34121 53832 17159 61705 26007 38777 8622 24151 62574
+6321 33968 47373 15362 54612 39258 18437 52183 23016 61104 6261 34678
+56587 18738 59723 7589 41548 12198 53499 38942 17520 59443 15646 56004
+11904 29946 40826 20023 53994 34246 14712 49531 31619 11409 57325
+19203 65337 27915 37674 19860 39809 717 43109 11262 48530 2985 31558
+61042 8700 29546 50243 19590 32148 42144 17757 56049 40208 19835 44433
+16460 64522 6681 58673 42578 21825 48611 5315 42912 12232 47648 34923
+7402 54418 32498 45095 6464 43556 19737 60573 28611 56701 24474 38012
+30403 60001 20407 53268 34340 2878 40289 13667 52100 30311 65143 3072
+26270 61032 22293 43198 16445 62383 5813 55667 12393 65087 17960 59197
+35336 22481 33947 63106 3570 53930 25520 37649 671 56446 27146 64379
+13032 34248 44329 18843 48586 26836 65307 20977 56675 546 30131 51200
+21491 3504 54796 29569 59515 20493 48681 14122 36670 54234 16871 63197
+35883 12694 50110 16848 37547 26792 40215 5443 61890 11071 57586 7350
+60472 14204 55784 20150 42852 17643 50816 37842 14205 48778 7691 30334
+63218 4888 26463 50815 6743 40878 3689 51792 24915 59802 18603 45251
+19994 49633 24369 62349 3107 42916 17529 41618 10911 47445 4195 61366
+24615 44583 19965 53996 2905 38154 28770 35470 61528 20210 2202 35426
+49278 18412 43233 12732 36765 54832 23586 62483 276 24924 46975 5134
+44221 16257 47899 31549 5591 44564 17368 47340 30517 3849 34788 48410
+17048 51891 22365 58811 9148 55028 31390 14901 41130 30138 9957 58229
+4556 28601 42756 65272 26372 8534 58554 3144 31258 62895 9126 49093
+35553 5666 59567 30146 54226 19615 48687 25385 8898 64620 2269 29658
+43733 8183 46119 12635 50078 24212 10092 39801 26302 50357 16338 45655
+3458 26684 49944 5753 45136 35596 27128 52762 5044 62971 26046 7390
+59223 36736 20829 44560 388 39877 12432 50950 2886 61734 14425 55517
+28830 53501 22456 57840 16097 37372 26084 46400 2417 37021 53875 4934
+49448 27332 8194 52993 12128 41431 21160 47380 19324 33382 10518 32270
+63820 27206 55036 3885 23192 63451 25169 2511 59055 36229 12859 50975
+1745 44483 12094 49130 7504 54343 189 43799 9573 63783 21593 55601
+31818 807 48356 20641 53650 34883 5461 48760 10934 52708 23565 47608
+28939 36948 26080 48786 9214 50483 6299 45855 15671 43798 34904 10821
+49253 29548 36308 11551 38495 28304 60447 6941 55802 10497 38861 3662
+50567 24271 35141 60553 8487 33498 49287 25204 7330 41448 228 31082
+64959 26791 10536 42831 4822 46374 22272 35015 56823 7657 65361 13894
+51077 24744 38414 28652 50268 26251 45706 2980 48884 10267 63695 1718
+27512 60868 19487 55454 39862 20384 47052 32749 13101 64887 16582
+58520 30483 13492 33583 37760 1702 56223 29241 5395 34674 47906 11745
+61112 24443 53430 19282 44142 21271 52961 11292 60675 34889 27261
+65510 10219 54237 6892 40835 56611 23702 5895 60203 27756 57877 21250
+32809 9689 43715 29787 58215 15263 36819 29382 55936 8161 64133 35779
+27613 61105 7502 38780 62118 13896 28334 63573 11531 31665 40450 20438
+43923 1092 33717 64793 19371 53253 21949 35591 54424 16903 21324 50287
+35954 27665 34891 47297 19742 41285 29468 12790 50861 18068 46143 1465
+44072 13472 55390 30660 37921 22718 49421 16037 56084 28109 37629
+16892 54854 30733 62623 290 29631 64173 22561 55082 35206 10863 54012
+23965 2187 60797 13606 46009 10356 38426 51928 23686 2998 63342 16407
+54109 24373 59011 21632 42072 23193 44459 32299 9258 36899 6846 32614
+44279 4627 63500 16881 58682 30503 13550 62561 11777 34150 61275 25884
+48827 1883 54119 34255 4198 44092 57943 17921 37512 15286 39440 29984
+44347 10645 48656 33771 15539 30388 64448 25879 37024 17177 61731
+22654 42688 19095 41465 15761 49488 24298 44672 11984 50510 37740
+16687 42547 11651 46064 31327 18741 64190 34049 3422 39500 10220 50978
+2225 32893 40705 25056 60279 29466 57323 8256 27733 64642 19423 59037
+15040 54927 3042 51533 14461 49603 35733 22289 58471 28666 37444 11518
+46546 17662 41345 58771 16144 44395 63001 18553 54507 42310 6660 38770
+60181 21644 55132 30414 58675 507 29647 45100 20771 42439 30124 8557
+52574 279 40122 13137 32896 62507 28724 39625 24554 34030 46051 5176
+43448 28291 674 54411 10865 57431 37809 23416 44712 20397 38765 63773
+7480 49183 30993 15853 43347 58331 14074 22762 55162 32656 1575 31200
+59904 13372 37054 518 41127 31165 6349 49407 16061 44461 21206 49987
+27886 9794 51032 30848 37479 8128 42051 3035 64239 39093 16005 51258
+7602 43171 60669 2232 25457 41110 13887 53246 389 33954 50130 12581
+26751 52303 41067 795 37904 56868 6583 61671 35468 21600 49411 8234
+45278 2284 31088 47418 6747 39265 46613 3986 55869 10478 60717 7309
+54539 926 60128 22813 32767 57213 10961 36954 28369 60343 3673 43256
+11593 53235 6876 61887 34767 3289 64777 32335 4467 45284 19723 52759
+38653 6079 42811 13405 60163 31316 18762 65129 38680 17813 42133 21937
+58049 32396 15967 45401 35193 26683 47403 10640 42616 6451 48086 10051
+56465 5007 64415 20929 54617 27272 62649 14806 53371 20590 43211 6620
+52247 25561 38276 23571 46075 3791 38218 15361 60594 13348 27743 62430
+23879 7213 52926 2331 60485 9842 56610 21179 51899 17562 40894 57069
+4166 39608 9613 56307 32077 4626 53009 11196 64980 26815 58157 33084
+3897 36101 60712 5760 27378 57867 6989 62797 15099 56867 36014 7507
+25750 56556 19647 58884 23032 61974 16140 53173 13016 38516 1794 23149
+51961 40853 2546 44971 7197 46976 19968 43226 21956 42019 29802 2014
+47684 13613 45226 17141 62700 5494 51947 28431 1876 38534 11932 33190
+37217 9930 22765 49215 25003 1995 50527 18011 9203 39762 18985 61442
+11297 53974 2701 60100 33378 19509 64565 22633 55276 5795 36773 11403
+59257 6076 57493 13286 53397 15678 64630 36557 17490 42660 28626 2533
+53566 8630 55651 1095 27683 52679 18137 60106 39971 9097 26492 52606
+38523 7471 44753 26796 48725 6855 32231 64302 25721 57810 16965 43255
+23585 58592 1034 40155 13170 60940 33027 17335 63715 15094 55202 18732
+52086 26597 6722 59818 35550 20312 32209 12495 34890 52686 19959 43142
+21820 46181 25181 17864 57306 43929 5955 21748 53739 26353 15751 47774
+25567 9700 58551 24623 56316 16601 34474 61291 15820 59274 12013 19578
+41766 22838 46061 21915 38452 24320 42570 11650 46774 3517 39310 25605
+64233 16295 34309 51596 16658 59122 31973 45061 25488 11362 48446
+14045 41020 58289 28619 8425 33848 21330 57623 17055 47871 1253 43573
+34536 7891 30607 48143 4027 51270 27813 1710 64948 11043 55848 7728
+29671 60280 17936 55061 27351 36203 16596 49780 26001 46735 1987 42053
+10005 47301 30276 38933 11187 48968 17546 43846 1440 59295 16053 53574
+21499 43710 23081 37498 50299 9397 45939 34879 26399 41828 19429 47124
+33118 612 31290 61631 5919 27425 49399 21597 51686 19248 47066 37936
+18061 46196 29347 6230 37754 12805 62390 26727 14555 34212 47502 19130
+39781 22031 41939 1653 49906 29743 51437 12791 44833 35487 6940 42085
+31139 4367 64010 20933 54606 33170 12321 24307 56194 17424 39336 26514
+62936 9934 57888 7774 64131 23921 34419 61261 6152 53183 29725 40108
+14830 63738 23914 55839 31432 4533 56921 29208 61656 12943 55946 34646
+27936 35863 64171 24537 51636 21926 38375 23110 43555 17657 49403
+37085 12330 42422 17136 44838 20930 50058 18885 48190 23060 38374
+26468 41089 8842 24598 51707 6218 61555 36371 18940 42878 14908 48174
+36420 10775 42539 4512 32578 62909 36030 121 30835 64691 20254 59023
+16146 38329 50196 14624 46213 7971 34020 63161 12076 29954 52345 22255
+45250 4130 38888 47731 564 45588 25414 40270 10347 34445 49191 28963
+2725 40366 64991 21911 47576 9057 62419 4311 57905 11733 63024 35471
+2675 23236 37348 59915 9972 45727 33059 2496 51672 30053 39078 3808
+37302 28082 48441 10845 43227 27472 50856 57202 13993 63745 1737 43248
+13491 64700 17501 55663 26556 62113 14097 52721 5172 50172 10075 23753
+46054 27822 646 20691 55208 41584 19023 52455 23300 10831 50540 37509
+60994 12433 33031 40193 25405 62875 14965 49053 26982 54421 21301
+59954 18366 37707 49810 20471 41952 18804 51111 38720 4255 31814 37434
+1502 62862 29376 38364 11658 34664 60919 17917 57300 24670 1031 55665
+28015 33989 64127 12742 54537 28494 40496 10241 65278 7389 57250 3244
+31704 56098 20738 64242 13133 51353 32172 6812 65079 26467 45592 14381
+38295 53148 11301 44047 836 62485 8351 29940 60881 2401 34711 54098
+21767 47254 18467 52324 30159 55190 11108 60358 4032 53194 27372 61297
+16133 41362 17503 60585 964 27808 48330 14063 57520 37185 17401 44975
+9022 41525 61436 36135 9577 32796 59869 4541 36784 32525 27609 48428
+17269 53718 11243 28013 42403 23358 1022 57896 31841 9034 45549 14028
+50889 40792 17780 44037 3637 41155 17191 45259 11760 47079 3294 42453
+8191 44653 4418 63564 10548 57131 5952 25538 56091 3746 60927 26140
+54201 1019 42276 30834 9332 63127 2404 56796 30702 59175 18663 45807
+25562 9725 57841 26398 62479 32093 21375 61340 24949 56760 23085 14510
+50230 20970 46295 10087 41128 4731 54148 28287 3323 56054 20271 30615
+53817 3621 35640 42797 8342 62660 17672 57343 24687 16176 58680 29498
+5247 56996 22796 61317 16439 45765 23297 50470 5888 54597 26486 38893
+15500 50300 27584 40045 6868 51499 30525 64392 14957 28693 49434 18845
+65178 39947 14447 62436 17891 53730 13284 64174 5488 54932 35947 340
+34109 6174 38904 26508 49796 16187 51426 5405 48393 34344 7790 35701
+45217 18356 42612 20028 40690 63354 7382 39182 62221 33738 5589 31175
+59872 1338 35488 63179 22140 2475 26967 49269 4234 53154 8720 29340
+51770 4725 58843 11613 40623 14608 45045 8327 33099 56486 5370 61294
+33412 14989 43559 64098 20212 50146 12964 43533 3753 59921 19740 31441
+50449 7456 34497 51097 13723 60158 3421 23074 46648 31519 5649 51106
+22560 32428 47359 26418 49426 14283 40102 980 37385 31052 4857 59244
+43382 16198 52625 8460 58393 30689 16522 63727 34145 24842 36112 48800
+15261 40004 25175 58864 10477 50587 1265 40192 7866 43239 2113 38596
+23554 43831 31157 8899 32305 44527 4601 47891 24481 34511 64775 18632
+51860 26097 7892 51109 32375 58230 19796 4150 50164 27456 48743 20818
+52538 16234 54230 330 39662 33124 5205 35707 52094 15535 60208 38182
+17989 49747 35846 22241 61156 7732 24563 64328 14731 53565 32022 59168
+6194 62074 23469 56517 15284 60506 16604 49832 34484 27392 38968 30530
+45367 16563 47411 35388 8691 29079 65075 15920 56068 36665 15232 47553
+21562 45018 3973 40363 13507 49984 30804 37107 4238 40381 7897 49793
+3438 44634 12641 46951 34752 8021 59500 24656 51716 16894 45813 12664
+43541 34366 10524 36246 48252 15428 28633 50488 18208 48049 25558
+37162 11379 52747 41593 8923 36946 50681 13519 44800 1179 53195 9369
+58040 13330 32772 37057 898 49037 29345 36266 16923 55474 31883 14590
+43059 8047 40169 56008 3566 36862 8544 28430 44904 6186 42517 26047
+46930 22224 43958 25841 17388 63258 23953 30654 60306 11250 33307
+59074 27177 39576 31504 20094 50431 29969 216 59372 29014 57040 2615
+30824 53934 22170 9727 42557 58131 12318 37819 27470 47580 6544 34230
+56940 41427 14582 63841 22126 35773 45489 18390 38592 16280 44278 154
+64017 29520 53663 13234 23822 46867 25535 1101 58402 29177 8757 39648
+15764 59318 22770 51644 13605 53775 5360 37673 28293 64923 19318 40358
+21723 44550 35615 7758 61852 19992 35510 58826 310 36291 11149 30899
+61498 21988 54461 11537 57043 40006 22862 10132 37297 23407 39842
+33879 2070 46276 26624 7023 59350 13574 31255 57673 6704 45283 18778
+43374 22570 57194 24942 59502 20448 65350 17202 54036 15431 63475
+21486 58188 12220 54920 29146 8029 50655 10489 41406 2846 39329 61684
+22914 770 26640 47127 35090 21518 65442 1274 41169 12698 45298 21625
+61754 12020 57392 27190 63508 2439 48939 9604 26175 43960 6415 53882
+2695 28946 46169 35170 1222 47561 27692 9571 22492 50724 28765 13382
+32728 38844 26835 54189 31490 12651 59424 1142 54680 9975 63408 29463
+14643 52811 38083 20440 45846 4252 27845 51971 34280 11098 35560 62351
+20612 55850 1461 64135 16419 55085 20395 53043 17242 39757 19627 51875
+1887 64023 27566 40330 3798 29712 62568 22522 56799 18358 63686 27210
+60398 1850 33103 59733 5804 56979 29129 2503 49685 33731 6138 30490
+62038 20113 32135 64885 27032 33102 37083 25259 39319 28280 61594
+16106 56539 12272 60399 6504 46804 2016 37822 59157 22080 48192 25702
+12373 33630 60321 22881 54409 17254 55774 11691 60813 1520 40470 12541
+59548 32961 9012 52660 43797 18425 46872 4381 36907 10003 57630 2332
+63153 13143 56335 24722 38710 9184 36494 26289 46873 13275 37180 50269
+24432 16993 51302 20981 61714 15086 30791 49030 9162 24377 46448 31184
+10199 58614 2755 55901 22329 62298 23556 52753 35828 6111 22387 62123
+36507 10048 35011 49365 18266 53485 23757 57125 33164 5991 45703 16887
+41142 21528 44589 15832 46324 11371 42999 5807 49659 10426 58401 25639
+33375 52882 9713 18092 42549 63298 20371 52335 6249 45036 17200 46674
+24937 14107 48979 28907 62220 3604 55524 15439 61078 19788 54938 35649
+23099 50522 3077 33802 52202 12304 64020 4887 38669 14245 42280 13150
+48442 28462 46371 8361 41381 33 46828 25932 38335 14878 62616 39466
+19227 56329 22354 59698 29031 9784 44342 31420 63266 13178 56870 8093
+31786 44132 18229 60889 6492 38810 24418 47324 18057 41746 19663 42903
+21415 36782 56502 16062 64753 25243 34515 55297 10835 59392 31280
+15931 57198 35790 43717 701 42127 53077 7565 48689 1800 36854 6599
+47201 24067 41702 21302 48789 36288 1918 58746 32345 4823 50670 12303
+40904 60224 7070 23609 54665 27056 7985 46794 27778 43152 22231 47395
+12744 44139 29722 65470 9387 55796 29370 38412 15692 53166 18275 56432
+34398 8703 38960 914 50661 7059 41703 14014 51319 39514 16931 43631
+15015 38930 65018 13676 59481 26949 53527 14128 48596 3430 38181 7884
+55888 11421 63378 3717 48476 8555 42333 19699 44298 23272 53473 21264
+65081 26272 9624 54023 1259 61881 29506 50459 13953 42803 206 46575
+29242 36792 18815 52101 20175 45535 3432 51495 38372 14692 2127 54361
+29392 62697 16652 52417 24068 45784 16435 41184 6228 47456 15262 65391
+21173 55006 5880 60909 27799 1990 64414 39535 4029 43877 8077 40350
+54069 16450 37027 60018 837 54852 23726 39564 32391 12334 47208 6839
+41275 10334 25025 57305 38025 2403 48041 27314 64511 12893 44352 6782
+42381 2789 48017 26636 35490 65180 60 58126 26821 61598 2339 56663
+24120 62374 27776 53757 18291 48345 2738 40818 28816 56181 24295 8378
+34019 40733 25114 32974 63601 3977 34482 60342 1549 51775 20272 41769
+29483 48849 10601 41537 4363 45015 10912 37063 63149 17447 26961 41500
+20297 49236 28388 62762 3369 54941 35813 5041 34109 59048 19357 56093
+35299 6072 52482 33891 2004 30416 45723 5094 42945 13480 36407 55831
+14695 52852 7233 30087 39703 25113 53215 10671 55107 30418 50381 14096
+43385 3762 51509 8482 56811 13785 61866 28461 3362 48314 30699 9228
+44584 16729 41949 20349 52709 39010 5119 20806 65232 30649 15738 34275
+63043 19030 55735 20868 64808 17968 52632 15702 62388 7442 22430 31071
+40620 17767 61397 21924 56984 33035 17683 39559 61818 26 49563 32951
+15529 58804 11864 39365 5327 60635 34372 445 23652 46566 26006 6728
+60520 33133 5532 45037 13700 48272 25238 58473 32000 19864 44606 22053
+57492 23767 9741 62473 31181 54432 7863 32980 45544 19272 43219 1471
+39958 23988 58155 17649 49698 19197 43020 22131 41085 18377 52549
+27478 63954 3356 38782 10070 42145 13831 45824 33484 19988 44553 16277
+41764 4636 56671 30980 63864 24529 5022 58132 32092 9372 62927 28727
+48245 15562 29934 57941 25236 37247 12145 22950 48932 30384 8035 35934
+55148 21906 61116 26623 51938 4308 45554 15786 41301 17784 52340 33472
+15224 30931 55700 18899 57290 25411 2923 65321 32044 20188 42574 15963
+44720 6603 64659 26223 34947 57577 19372 48435 34005 14180 50615 32567
+20376 51406 4571 39749 21445 52218 28028 62448 12564 56163 8044 29821
+46784 34391 9183 39933 31910 15331 47453 17511 38232 583 41382 13909
+64788 21115 47749 5042 50147 29595 59937 2163 57389 10473 38545 28235
+53975 19536 42526 30518 9202 57911 6420 21586 54173 27940 65423 17910
+53572 29316 8857 35285 56888 452 53434 32493 8185 31472 44436 23863
+10659 52702 25867 12708 45649 29191 11532 64594 16770 48164 21730
+53859 11275 63623 25035 53265 5658 27878 46395 17656 35525 51500 3313
+62116 15587 47679 26230 2682 34294 58195 19186 65115 26590 36943 30473
+45616 7032 50187 33125 12471 39512 57485 22025 62170 4349 48528 8400
+24436 60075 32505 8707 45380 58015 4200 29324 41568 14645 44104 25142
+37976 3191 43213 13334 33005 57915 44417 10394 47007 8052 43802 27008
+2147 48736 10180 28522 43697 18497 65212 37113 3376 45423 23794 51235
+28602 10947 59082 35901 13967 58060 41652 11877 50799 23678 35735
+61996 2281 42950 10823 36910 54365 13402 48730 4348 35167 46165 26896
+178 22711 46868 24760 3891 55980 10939 63842 18669 46932 11873 41405
+29668 60425 5491 55143 13977 59291 31277 6252 32535 49871 18529 61358
+31285 55857 4067 59796 36798 7377 51045 18601 48669 35307 10946 20982
+39937 48274 14962 49757 39187 24843 5827 35795 64925 7461 42258 61562
+6427 55591 39964 665 42281 64979 26701 4105 43424 11826 37472 18207
+42011 11337 60283 29887 48431 8433 42038 57746 11104 34697 45704 12999
+49792 29026 38967 5475 51883 10544 62402 27770 50791 14108 46117 1616
+27405 52047 3871 61137 30176 7206 59771 9414 29824 55756 16056 60512
+31986 9763 36785 22347 42876 20401 52579 10628 23255 49350 18839 53032
+36762 4432 55175 12550 60688 24844 52454 35921 9144 30819 61163 19093
+44448 14598 46909 19616 50812 15543 44416 7840 48038 13398 64499 34743
+26539 36140 47040 32330 8188 31121 47669 1333 58541 24928 48226 14781
+44913 16576 61222 22909 55563 16344 60097 33639 17647 63069 40345 2634
+49845 24019 41098 32972 8549 59311 26851 36690 15546 47031 20441 41209
+64964 2392 32039 60491 18629 42402 23048 38051 6110 41003 63919 22641
+8933 46326 33931 12963 54467 792 25214 53271 17667 41038 59883 20862 2
+51214 13662 37743 18350 63951 42260 12489 49573 40271 17899 36790
+25232 51831 9135 61215 4936 53537 11705 60847 22848 56354 38769 4089
+19329 64121 24911 52249 14846 37070 62837 20195 53761 34637 11597
+52898 6442 25332 54877 19614 62978 15979 38309 54013 17956 50153 30842
+3177 32452 43762 21412 57662 9327 27491 53777 22180 65131 26423 3089
+61444 33000 25930 64602 7372 55196 32140 58203 10024 61615 37212 22040
+42054 27608 51576 4834 32467 62934 1831 24775 45967 28904 47565 94
+44647 24332 58445 15327 45429 28417 5808 23809 51455 27407 11935 62765
+28911 58302 9342 24007 43419 57401 8350 32475 60548 2575 22078 43015
+57032 16654 31791 52236 21589 28936 46346 15700 33326 58369 19962
+10667 34226 53026 23286 57450 1594 62422 27731 53772 35759 981 22487
+62786 23711 5334 50507 26583 79 63675 21344 43607 13598 58752 18903
+48412 35898 3426 34519 54619 19057 59267 39185 11355 42391 16916 46217
+36170 25572 34670 45490 18911 41317 498 46354 19877 50044 33821 1902
+61363 25855 36293 54359 3936 63940 8556 29581 45211 22595 42172 19156
+46722 4780 22521 58133 38840 15555 41706 3734 53690 28507 37098 5572
+58163 24166 61707 16472 39522 3137 53010 12628 62943 125 59721 19462
+55795 21089 40065 15742 43174 4529 64671 30221 38244 5619 47709 11177
+40516 1026 50676 42753 6836 32344 54633 20591 60443 3774 51477 28215
+39092 4295 49690 32051 429 58946 10022 23813 49242 40071 5926 45880
+12468 53789 20421 59279 28247 10294 35698 55421 27519 5414 48682 21755
+59397 38594 10951 63134 4969 26790 47289 30282 36562 26315 56765 31742
+1639 33592 55053 25666 2801 61548 10687 56290 19811 46716 21581 40038
+28102 41521 16856 46548 6810 26297 54446 42558 35573 573 33483 58550
+6703 30083 44960 4943 59694 22748 38359 30444 47159 14519 42041 7437
+48290 2742 26805 45008 5878 62148 37577 19325 64489 828 38872 30437
+49042 16872 40972 6448 46322 30165 38628 11714 52981 20735 39413 19034
+41897 15294 50804 33506 13338 54088 6407 59118 14591 36587 50278 15787
+37699 53912 21017 9761 35948 64647 21337 51904 10735 40418 1540 50748
+32239 43202 15954 39247 47849 21635 3101 38118 30231 63316 1945 26951
+50722 18322 37363 29635 51309 8794 33878 50032 956 39366 10120 41416
+20290 64104 5065 24549 51440 28949 60190 15374 46286 19237 40508 12834
+43190 6621 24000 58208 33010 13815 52906 38599 16268 60394 40716 29753
+6048 52462 23806 33421 40517 7666 22782 49670 24934 8554 37785 31682
+14984 63699 24163 54367 959 65436 12395 56392 3208 62919 13946 53834
+25187 63734 4839 57499 28467 40052 6132 58767 16312 32929 40929 23814
+58999 14615 62966 6612 56477 11888 34704 45586 26722 1162 55687 12016
+62646 35278 9539 65210 27127 39753 490 33983 51167 21821 44189 23070
+45956 16291 39747 24859 44750 5260 42866 11248 60762 30724 51910 23605
+9436 50124 27346 36381 24727 64819 31805 14670 29939 57631 22477 36542
+9587 31485 45055 19871 62156 15124 54723 18272 61135 39848 16494 37676
+55341 13769 21308 56426 29287 64440 124 48937 13618 51074 30701 44949
+1529 39560 61022 16610 41886 7766 31970 44010 23328 34331 55893 8660
+65385 5934 49224 9915 40394 52244 22899 7272 35176 51510 21372 48562
+30290 1424 35079 58679 13167 55268 150 59092 35185 29831 48529 20658
+9335 28256 50056 18543 38341 26101 49744 15911 42021 13680 46222 2595
+58084 8837 60849 27659 56187 22995 34253 63883 15396 41093 22081 48726
+8574 29449 54299 20010 60947 5110 44100 12137 52016 15348 58943 17692
+49316 1386 43442 11094 60662 5633 44011 27705 2136 49862 25933 38826
+21453 44922 29394 8611 56860 31443 6986 40472 57371 15563 33780 7423
+31759 43639 19998 62537 13314 57542 9389 63667 481 32891 55290 42936
+14859 52320 19267 47113 34552 5406 65418 10191 55984 17505 62145 14056
+26474 60400 19312 56325 3171 52849 13117 34715 44818 8871 47334 2898
+38950 7060 51602 24778 48117 21009 50246 34573 9298 47478 36123 3192
+30220 46857 8290 22041 54964 35809 10880 61526 1688 55300 28882 60468
+16425 56648 30154 61820 5211 50082 32916 7802 31395 43855 20031 47595
+21578 38518 24283 43788 32654 9084 31237 42058 14435 45431 16954 48794
+11664 30509 47773 13422 51003 1286 38096 26810 48858 32818 28500 61545
+8125 53202 32907 20674 49087 26184 16663 50447 21598 45291 17758 49109
+27858 6040 59435 11247 57364 4956 31897 56196 9780 34414 62558 22418
+52590 34202 7531 20215 39447 56277 14044 59293 2790 51027 7647 38637
+53712 4369 39428 13019 64068 28438 57212 13674 37850 1340 42626 22808
+46029 10922 24728 56955 30564 6764 34338 50245 25727 11114 34242 44425
+16963 39326 4617 62710 14422 58570 24339 9728 52460 28209 64293 20431
+52020 2121 46496 14403 38433 19818 42911 22424 60912 27385 14429 58159
+28989 63293 11907 44093 6070 38988 64521 24200 7014 44968 18466 48876
+24210 10746 65512 2296 58337 31873 62234 13984 54146 3657 64899 10562
+55671 24056 63315 27947 51643 18220 41321 32258 944 36574 12063 53321
+9075 32217 57182 12955 28153 52794 36835 12384 42384 15606 54919 21596
+62772 19665 37134 4776 41574 27089 55603 15985 47832 26763 53301 17565
+64363 39859 16459 62709 11431 55024 454 65408 22130 41126 17925 59826
+33093 2978 42149 55690 26788 60782 4503 54377 27289 38038 22935 45781
+19963 49697 24319 8839 33943 60690 6401 41075 12968 58718 31538 20408
+43727 23442 41578 4322 45908 33149 8027 47306 30845 25636 37155 27922
+54258 16324 61228 35554 22381 58890 31838 16743 63855 3654 56431 14578
+64492 30924 17173 54530 27599 65064 19716 56708 32736 12548 46058
+25669 42801 31590 17617 44467 11620 42115 357 44147 12820 41987 18085
+55854 28148 58690 9927 39875 5702 53039 11590 58976 5114 55241 27779
+59495 17797 54683 7170 64718 24494 35071 62190 3079 55527 34114 28405
+49751 9893 36668 2069 51322 20909 43924 17387 64258 38093 5219 43830
+32812 1727 59188 7378 55351 11911 63969 36992 24675 42225 18868 36869
+48953 17749 51141 27446 12218 46482 3312 26799 44585 62041 1825 28038
+43757 18392 42323 20559 57025 17111 27412 62352 21163 51238 706 48060
+6311 52342 25586 57824 11906 65496 6452 34748 44421 3644 50754 27209
+61893 1755 36416 58644 5298 24630 61260 26427 47952 21872 37881 18226
+46862 31083 36757 2971 42919 13177 34951 60627 18647 54046 24488 58896
+12767 53013 3290 44881 34659 4672 46247 16542 40759 22444 59978 26700
+11504 52829 33934 27481 63805 8661 33784 51759 17869 40515 22414 47463
+4662 40850 21511 44114 17263 41286 32350 1280 36667 9182 31833 44299
+13942 52714 21133 61895 28393 41768 20742 50417 1586 34598 61211 4692
+24496 50316 2862 47169 31096 37828 350 33565 56449 24050 63327 9657
+29849 61926 36183 2945 34760 48640 8178 28880 46332 5074 42814 17277
+47327 25200 51035 4111 48958 10626 25769 63101 23351 12226 51120 17583
+47309 35590 8307 48835 2937 35356 56311 12937 36342 64290 16521 25824
+48299 22314 51690 7809 39866 53107 531 47765 15861 51841 18550 58560
+38146 14825 62396 48362 11118 59337 1404 43690 30844 5846 50107 14079
+54585 35368 10732 38197 25771 44360 2419 39473 59099 6328 43465 10621
+44674 2076 38068 62614 3613 58121 13912 37508 63534 4597 53951 29528
+65202 19893 52252 22220 48000 2280 44521 16155 49711 23455 61989 27029
+45052 22375 41850 13090 47101 2192 50901 21607 31606 39004 882 50667
+19613 44965 22127 7864 65478 21220 57643 19857 63433 13322 40531 3357
+49762 10364 29559 60090 15009 56705 38060 20064 41438 22446 43336
+28891 9413 54974 1829 61320 27939 8683 64867 2242 36120 58951 18878
+35791 54363 10209 25231 36928 54748 6932 63351 30598 48342 11830 45403
+35068 9210 46403 16019 40607 23008 43499 19133 41180 16917 47142 33828
+26408 53196 17608 63192 14518 42409 20012 46319 12775 40058 30568
+54518 7292 41756 10811 57016 3571 53999 6805 62404 14861 56281 23984
+57582 5540 29621 41289 6677 43674 1089 40043 19183 47752 11434 62480
+21054 36090 55696 466 47755 9798 50033 37495 15766 47248 3913 37407
+29120 46041 5182 36740 56096 12909 27803 55118 11969 61074 27049 56444
+7785 60543 26600 54595 20650 58856 3844 64676 26061 45410 10369 49331
+4520 60032 35989 23435 45947 17064 40409 58621 18783 63587 27750 9167
+51171 26245 47460 8343 50239 20984 34402 45469 5309 23342 54625 22271
+14022 32430 58322 19162 53488 23820 60928 35642 12654 34201 61227
+19945 37106 50773 13970 45843 34785 1970 39769 30543 16667 65309 14392
+58735 29030 6714 30149 51360 4711 32256 53848 1111 44373 17413 61769
+26280 13759 57972 11657 64350 27966 37064 2370 24183 44534 5303 18233
+41408 21675 49726 36104 13524 63422 28930 43039 423 45448 27708 59888
+13192 29503 49133 23298 12472 50762 18453 39961 23111 50125 26361
+16933 48614 20505 53439 7046 30286 47274 24230 13368 37102 33575 4389
+60917 10931 37991 25857 63240 3669 42307 10697 37273 1410 51614 16574
+64300 20330 39015 10826 34754 56317 15488 59887 29603 9718 35737 60241
+39658 14072 43773 4203 46832 25742 43361 16722 59290 35650 23629 47655
+19356 51011 7209 27755 47935 13737 60695 2785 52466 33778 18211 49765
+20944 47119 30458 38440 24268 50203 7223 30621 64084 15202 42563 59772
+20743 12205 41165 33782 4792 26188 61457 1550 53073 25442 34046 59609
+8359 55865 10923 61718 4681 55179 30435 2805 59829 9661 39030 28139
+47575 8546 57711 17005 63550 21582 43706 15079 49164 19785 51920 23482
+42396 26262 39997 21300 49436 29745 9154 40061 25814 51194 16330 62258
+32610 55409 14139 63671 30248 38288 24355 50427 12293 30903 42164
+18956 57579 28283 2529 62714 21002 58116 19358 54835 15400 61735 26293
+7721 34881 45332 18215 43079 32054 2035 33453 50589 19132 45427 11031
+47419 23194 39388 33157 6145 35878 57683 17930 39537 30661 6817 64968
+11528 55488 29890 8082 44882 13465 39562 60133 17713 57874 13932 31527
+40240 2520 59504 16544 51809 33597 9385 60041 35695 49505 1119 37692
+12048 40999 3152 27567 54213 6171 28814 44655 999 28172 54889 7720
+61903 25515 57985 6438 52827 24716 33525 42955 17406 62174 41726 18830
+57753 38098 13619 59570 27993 37876 3511 48763 36222 24350 32417 39173
+6983 56662 30358 63545 16349 51951 57644 7313 65259 10341 22892 46837
+32486 9386 25424 61986 18867 51964 5548 33487 54218 7426 63034 33938
+26038 61299 4942 55856 13172 59629 34908 8680 33284 39342 23090 57279
+15803 39059 59022 7452 56143 27469 39381 23550 57574 13822 30183 52431
+22178 55505 19109 60822 28419 38113 7860 32584 60590 26542 49325 5286
+42898 21049 38082 58257 27565 5576 29276 53625 17830 41132 12285 52751
+6323 54721 27119 8749 62153 168 42509 12914 36517 64641 4605 53908
+26107 37558 15097 62861 39684 10551 42618 5763 53913 13282 56657 17194
+33165 48075 909 39805 32200 4177 46913 28823 52363 16125 58244 38144
+18723 44156 21726 60816 3427 29301 42884 24551 37529 21062 49359 35062
+14812 50332 36043 23471 49166 1150 33257 52311 24614 38853 7784 51669
+2642 59752 29916 36694 1038 63839 18754 57870 11818 45798 446 41602
+54457 20695 63400 11545 47189 27155 9410 23521 49823 27023 7559 57281
+2212 33428 58478 5571 65157 33210 7611 35145 53651 23363 44205 12774
+42760 1504 41082 20871 44087 30622 63100 1054 59203 8542 52965 20078
+47806 23708 5794 30807 64298 28684 6902 50782 13161 48563 24069 2367
+33649 51431 15018 47736 26632 38711 3600 49492 26100 33578 56035 5724
+24376 44302 3909 35288 64146 15150 54327 24632 43117 12276 65346 26365
+39356 5847 24985 63525 22803 55368 20439 57852 32711 14483 40069 56429
+16123 64124 38981 18494 41680 21471 49637 14995 32184 41346 765 50279
+9104 31401 36681 1769 47579 11095 26954 46265 34553 8437 50525 31233
+15486 62839 6108 55303 21922 43035 12763 49413 8952 40100 29785 24701
+45773 34771 30319 56055 2765 57271 20049 53394 33647 10140 31089 40742
+58031 19728 41353 16073 45700 549 35177 46633 19074 41709 6502 52206
+28360 64797 724 44815 10308 50826 2586 28624 42933 18766 46402 14509
+51178 5930 35083 46193 11958 39638 6890 48411 35118 5916 56714 25576
+50274 4137 44878 13870 63287 12053 54193 3528 22612 44391 18862 50207
+331 56933 32788 60578 19084 37827 21779 45951 33923 28701 52179 25549
+58762 32001 18575 44557 30047 8889 48984 32842 4246 23908 56394 32187
+63513 15643 43223 3728 40726 57974 14524 28916 53208 16731 57215 22256
+64324 248 48714 24033 8265 54246 13443 41386 15163 38126 54945 16727
+64495 2197 45439 29420 8943 62869 31934 5993 55914 13505 60221 21673
+36646 4347 55174 32167 18526 46742 23910 9458 50206 32205 12655 44206
+5111 50481 28271 64927 13411 33386 4147 43955 32194 1744 56180 31470
+44638 3848 37087 53607 17810 48792 15945 39931 28913 15156 51142 25532
+46150 10549 40493 5908 52227 27814 60463 11800 57252 3434 52186 14386
+49010 29900 39463 25427 63948 9802 35603 59520 41893 2907 38215 56583
+18951 62497 17407 55151 28815 63444 8230 59433 34936 16539 51009 32192
+14474 62887 1254 36997 29296 49900 14889 30481 53079 6905 48215 29401
+7586 35756 49229 631 44129 19772 56598 41479 10302 43716 7113 45295
+9830 41934 61574 25787 11093 47085 24047 9737 59447 3556 43997 9234
+37463 63282 15955 55558 19343 61025 44916 12583 50849 21772 40799
+60328 3772 22850 64875 20101 56492 35440 10847 33463 44611 1450 52970
+20939 36419 27286 60916 21 55142 20244 4001 51202 19135 40244 26860
+44914 4871 48753 20904 60957 22517 1298 47300 11737 52858 22253 57355
+28591 9611 64032 27507 47406 16143 42447 18602 49939 25394 61181 19384
+32959 62779 11460 54817 1342 64320 33999 28538 61566 600 56992 17323
+64844 31400 15973 46476 14698 44390 17628 58051 23352 36952 28220
+46170 18449 40844 55886 8736 62813 30647 45331 24208 7355 27505 48793
+1626 64881 11365 57116 5713 37729 10100 40659 2574 50252 11568 39097
+62320 17724 56950 29879 50801 20303 640 27109 48186 21836 60558 25974
+7850 35222 61037 6103 49249 29936 8846 39303 33029 12689 35887 50346
+32254 65217 6066 51641 27062 7431 48874 12416 52733 17593 58421 24113
+42005 15846 46338 18901 43087 29228 12090 64577 30875 15709 41116
+61544 11448 37988 65241 17719 55447 37583 16112 60563 34575 16950
+37952 23374 59664 37173 15824 58102 38812 15016 50652 20445 61377
+30895 10297 41485 26432 60105 8865 54549 35804 3535 60946 20246 55598
+18227 61872 35442 16716 33207 50612 24492 46788 19712 40846 24340
+10827 51631 5352 38011 28050 53989 21395 12162 52219 15622 33725 44479
+651 42010 9736 46301 19854 43707 22732 191 56314 9220 58901 40259
+22428 48320 20429 65291 8481 58418 37926 19281 43441 21414 39279 61004
+17637 31018 57744 15850 52069 12699 27911 50823 18189 60218 29452
+51352 21420 1607 49163 34792 4532 55340 29549 34375 50500 19467 54136
+27490 4018 47745 29235 39304 5400 23904 56086 16103 64559 7173 24158
+54443 39193 10511 42533 2071 45786 26125 58845 17174 40519 24889 59934
+4132 53760 13798 33229 9863 41935 61696 28937 11463 59066 8243 32919
+64072 24368 38310 7621 50960 35113 27230 60272 5166 43321 13669 50984
+39429 31724 1544 32502 60624 4280 55469 12264 43453 5389 36609 48672
+17220 40950 22585 44709 25400 7204 49240 20621 43003 25209 45253 34492
+2975 52942 29618 63114 224 33339 40491 8445 53169 1679 34401 61456
+14375 33129 49059 36131 11122 20127 63816 31900 52080 15171 42886
+18295 40361 22853 53695 17866 63677 23453 55645 20414 58108 24313 1003
+45388 10895 41583 8126 59020 36427 51909 6641 38892 10379 45664 29633
+50894 18086 44619 14071 36720 55809 17187 59145 27573 62207 21143 2525
+28395 48569 20483 58924 36271 19898 43690 25579 40020 6937 50713 293
+56689 26861 63682 3201 54599 33892 7058 44006 58266 586 27788 53200
+25892 3933 41134 7024 23801 47328 30325 8811 55867 3452 51877 10266
+29371 46557 6980 30537 64503 6160 41668 12576 45476 22321 64200 5206
+31482 43771 18209 45741 31095 13891 43179 806 47542 31267 8892 49167
+4723 38410 9303 29632 64666 5671 57508 35681 22601 60125 14562 43515
+273 45689 34180 26714 61507 7963 29003 51544 31236 60115 32717 4037
+30584 50119 36187 19526 45444 25453 6094 53150 11720 41480 16110 45630
+31856 1024 62131 10940 56787 1984 26549 51305 6084 34572 46411 4413
+32995 59191 2209 31614 36956 4259 24204 64714 36682 17415 59931 31903
+14291 45402 7163 26249 64929 13141 40190 58327 24094 10137 59304 32992
+43600 3198 37896 28543 33876 49524 14088 27744 52128 18536 61132 16516
+51796 4847 31125 63991 8403 29522 44213 19417 47798 39084 59734 26292
+14881 48573 35999 23490 50784 13779 41080 2283 56268 31887 14713 64864
+17433 37264 31577 16626 62292 4390 21346 58841 24648 53781 11646 37433
+26812 39195 22236 51251 26676 8750 56550 4756 52154 9549 37198 58490
+16042 40383 12420 50679 8221 22943 60074 24179 9168 37588 27667 54952
+15318 65076 19308 48917 24484 6050 51381 25990 2369 23145 53269 39643
+4580 42472 10620 61779 29807 57873 3894 43693 13477 47147 29786 7729
+43392 32573 6950 47638 28824 34262 60939 18777 47000 29005 11338 31072
+61851 22793 54520 16090 65283 2889 39292 28380 63044 2089 25351 45991
+4640 43030 7235 47093 31119 44901 9984 42142 567 29258 62532 5048
+56330 13586 63875 36340 20863 37604 8147 31381 41556 18110 50639 39449
+13283 23053 49809 35725 8298 44737 33449 56403 29034 62183 1645 52570
+27003 42244 22168 40564 26657 61647 18303 52427 21031 35585 48519
+16730 59519 257 52378 34931 20428 56217 1308 63445 10742 56748 37800
+22709 64399 34379 14863 57743 25050 63618 18900 56343 36659 15880
+43010 12682 45177 2400 34187 49354 18763 62114 13566 57601 4286 41229
+25051 58282 20916 7134 21970 52159 26339 57372 11154 64087 31368 12806
+61780 37681 17515 60844 3479 55164 35215 18484 51102 22946 41840 17175
+49050 37280 11643 61737 14017 26018 64001 38328 14561 40269 62121
+15401 56120 38982 8598 27259 53274 11940 38179 62459 19119 56879 37100
+324 44772 30436 8212 35261 46130 22470 14264 63526 27281 53298 9982
+58607 148 35557 63137 5864 48508 25188 38546 11546 34840 47041 13018
+50038 38248 14585 64774 6276 23071 2038 53099 37865 6481 64510 890
+35024 60154 18476 45853 15565 39748 48331 3740 44044 9892 55443 40811
+22915 36953 48409 8255 42076 14968 45728 21014 63341 2745 57883 10686
+64199 38389 20443 47331 27135 60734 32099 19624 52728 4197 63857 18354
+58772 39117 14290 41810 57531 13312 43587 6807 47497 29650 37836 9365
+59613 40139 11619 64539 31376 57903 8065 28385 54845 20798 47685 34953
+6847 26518 51344 19574 61292 1418 35184 49805 17233 37546 63112 14577
+56136 6133 25794 42904 2970 64393 21260 44707 16984 42209 1367 47509
+23942 32726 58531 9260 23372 54007 41326 14750 51496 19806 56243 11990
+57712 22372 63199 18012 55644 38585 11225 41436 22012 46642 27913 9404
+31930 60745 24725 53155 10716 59148 5567 26422 60890 34461 10194 57108
+18932 62736 21912 12026 42499 15505 45054 18182 58794 12983 63020 8069
+48371 843 43511 11221 59222 2890 27652 53886 19425 39528 28801 9145
+48216 36679 22854 33890 49127 21218 5741 50857 9489 27178 45461 2711
+41774 13029 43468 30612 427 54497 27086 60978 18514 53304 26495 8834
+54954 28695 38906 23222 50358 17272 46622 12430 39951 65404 34506
+13269 44382 17645 41361 5072 53808 34489 2077 29852 45995 21953 42761
+29680 6724 60292 12284 47129 4820 64823 32611 19983 45794 21852 40154
+53063 10705 22593 48007 28866 8008 49713 32460 18821 58416 41640 5489
+44369 23538 2257 48172 32412 17700 48934 21981 52664 20390 62721 2389
+54677 36945 7870 42215 17482 47157 20317 31217 46070 19355 41732 30247
+3953 55046 28073 61553 19825 55519 25757 2732 51204 35941 30363 49199
+40958 32144 12413 45756 21831 43766 26296 7092 52409 29185 62777 8699
+27843 57611 21203 50564 26611 1935 57002 10813 29869 52471 18079 61962
+5825 49686 15583 41459 19711 46389 31474 1016 58723 34464 12926 41334
+2140 43901 13639 46109 26511 37142 1770 30728 49177 5084 33119 52203
+21501 61254 24869 3469 56942 31129 15106 33610 47489 18042 44173 16413
+33882 47162 13379 59076 2811 23461 55816 39657 9950 45687 34279 27523
+54338 11040 60424 3249 30737 42680 21961 35658 50509 16564 48857 24114
+52990 4557 55387 12932 57733 35407 11917 43993 15329 50190 38447 6716
+31824 65008 9566 38111 25349 33296 39131 4108 35524 49674 13059 26206
+52250 16383 60537 1943 33951 54436 41304 4190 43602 21405 47628 19996
+32837 45279 2485 47518 20864 40640 32355 2028 35151 51328 4733 57587
+24627 37487 6013 48892 32871 24170 35760 56690 19821 41527 22642 47050
+34528 8604 32629 49701 15387 60293 30373 13112 53508 8084 27938 40845
+59586 15581 39019 58993 19184 56010 20936 54140 7052 61990 24089 40171
+7974 30016 48199 6711 65234 30878 36791 4891 48123 9109 35310 63746
+1715 54951 29706 4740 41829 56384 1373 60703 20781 48679 15506 43580
+26673 52233 7328 57111 13930 48558 25741 38604 28845 34417 53870 27200
+8886 55896 3723 58658 28986 1343 36548 56961 6335 52520 24795 41291
+230 47063 13136 30575 51625 16838 49888 28482 41029 6588 61464 10900
+57759 4913 37919 26806 50475 12930 30488 57362 21352 61636 5264 34798
+53530 7557 55982 9601 59249 33376 13556 44163 725 42423 7202 33150
+60562 22547 11235 57360 20579 62549 16501 57965 18037 53614 9951 49202
+30202 37552 4638 21575 53230 36769 13244 46182 6078 63278 32978 46727
+19176 65530 3049 44840 25397 39902 28746 56850 9017 54082 34580 17732
+45101 29417 7499 64940 17943 55915 22229 57799 34369 9836 53319 27957
+55892 19204 61678 26114 2555 45683 10098 39880 50917 20217 41818 53672
+664 26919 52646 4883 38877 62363 1242 42153 22133 37722 50602 13869
+33276 64162 24425 5165 59452 18255 41188 23682 52442 13113 54712 4429
+65387 12237 59569 36193 9896 33344 40505 25880 38331 30653 17371 62469
+5621 55223 33579 20747 49022 18672 36554 28867 60299 1090 53845 15354
+59885 25090 6446 34325 61610 3699 48069 35480 24499 49128 19714 12704
+57186 15623 62007 1397 35579 65035 14890 53907 24424 63333 5272 53541
+28084 59601 19489 46007 30178 9251 63749 28183 39664 2286 53728 9970
+28151 50289 5276 62603 14102 56969 24982 64835 4851 54366 37401 3228
+62822 26135 35446 61223 2083 24270 44507 28561 4251 50059 9783 38202
+27531 47662 17255 45746 14719 58515 37449 16699 41725 20580 46614
+17278 63012 22117 52931 26607 14502 33687 38581 18223 49274 11813
+30920 37536 10527 39621 29342 62682 8687 58210 19990 39617 31160 51565
+9956 63756 2688 57396 10224 20780 39516 50235 16709 43128 18914 41664
+62590 16637 31912 42273 20183 64975 11795 55242 26151 63325 3360 35991
+57562 8262 64498 20655 53106 25372 40130 15469 33278 60164 11430 39478
+23244 48208 966 45782 12228 30468 59841 18063 39252 23465 44626 15996
+40277 65222 21896 52752 17823 58435 44682 9353 34777 46243 27632 5751
+24468 50248 3311 36979 30949 62138 16072 57035 17268 59336 40924 25506
+179 61591 33588 24711 42623 20129 6934 40353 28450 49326 30690 9881
+58564 275 34031 47562 25939 6024 62124 11014 54447 25048 38991 31195
+10430 47096 6569 28505 62387 20336 43768 7336 40680 10583 47259 34955
+17239 58381 32169 13005 62659 6510 23577 63606 35731 10767 60664 14089
+25084 53785 17455 65155 8605 31763 60160 697 21326 52448 38477 14165
+44445 6388 48002 21145 40377 32478 23098 41385 33448 1512 29293 55972
+15642 59961 9216 63840 3494 52510 31857 46195 26665 516 61743 11369
+57513 3397 51957 22035 42725 18651 46561 10271 51480 29573 45613 18706
+42369 27205 10083 55204 5432 65328 35169 27380 46556 11753 29794 51624
+7902 28799 37772 9246 29521 48549 13910 43494 7670 39994 13369 49641
+35043 14799 52174 18613 60781 15305 33636 65297 16359 37398 27014
+45174 1865 41743 13645 44555 29516 17347 32348 41784 6355 52046 13591
+36895 55248 7606 63016 35361 23627 32442 65015 1767 34962 59680 4501
+52581 31664 2843 61484 12058 57127 1195 52052 11637 44050 3159 60517
+30651 53745 10818 59053 33049 62295 16004 47441 27675 53533 2619 24041
+46378 35009 13145 64731 548 27031 41032 21667 43574 23221 41531 61278
+72 33617 63015 13432 51498 8619 24878 50621 13116 60496 2791 36432
+21863 37958 16279 43078 32245 13947 22962 44917 31749 10361 36284 3267
+51452 27641 47372 16748 44414 5896 65456 15270 55159 26651 35935 44081
+2850 48284 11131 61348 1503 53756 26252 6368 36654 10062 39539 31007
+15042 29475 63252 1169 54561 35508 8505 39234 26892 60450 5310 24473
+43146 1763 47102 33372 9323 49469 30289 38750 11081 59593 14067 54356
+33864 58391 12821 21938 61086 35532 17718 50677 23438 13380 59949
+43110 21370 48994 15288 43592 3951 50965 35462 24779 60436 39764 3246
+48224 14035 65374 25234 54035 15592 63468 28533 36801 1438 46101 16617
+37392 49857 17199 45029 30212 20301 48869 33299 9254 49590 29138 44329
+16282 41514 28521 46587 8431 29057 56625 20625 65057 33920 379 61134
+8569 57018 14801 51494 25663 45356 6519 46641 23397 50843 18643 48450
+27969 11074 21867 60445 39574 17276 43774 26435 45373 12901 48694 7932
+63790 28463 39973 21512 64744 1697 54372 14080 59251 32804 15807 45326
+22190 43155 2670 31927 55822 39210 16869 41246 55139 15604 58024 39181
+20041 60584 22637 54239 26785 64715 177 58193 31312 4385 44324 21813
+49442 40473 3344 31893 55540 8263 30600 54881 20704 58432 35815 10238
+45854 57584 15002 49548 19496 45146 17977 31921 48296 20456 51612
+13240 47059 16545 53335 11974 21873 43784 36076 19201 48734 24699
+39400 22702 43315 26195 38789 18882 49695 13062 45901 6075 43288 24008
+2784 26152 52513 6582 64488 13686 33422 55961 21238 4312 50184 23903
+35732 57970 5524 52774 12551 49346 5961 28289 48023 24713 6542 37207
+27136 55099 38609 4702 46673 26122 51642 29233 58980 5677 53890 9391
+56460 37096 60742 857 54716 26917 60406 33747 13139 63915 1339 56512
+29876 52169 25709 40441 32849 6815 64136 14436 51179 20782 41415 27594
+37541 12131 49666 30734 56423 24770 62643 3639 53879 38690 18552 42198
+15802 46963 65474 15366 44941 18948 50896 38421 13523 53399 11336
+23811 65168 19456 55686 15976 51457 3366 31103 41206 21462 930 38566
+53636 4775 44043 31836 7976 63905 35983 3488 32405 39983 2231 59522
+19348 62733 20983 55380 28 32674 13295 51263 17756 41975 33267 825
+32107 42325 4696 50532 12259 55609 24316 59110 28625 9519 57565 5662
+55604 32448 2993 58781 41502 26336 3597 57354 36529 5929 53847 14762
+62054 34219 2406 50898 10184 26877 49071 35945 26012 42189 30292 7361
+58574 13272 63301 30018 48 36739 32123 7998 41172 58147 36068 8457
+30036 54145 5355 41454 21286 62654 16940 31386 37018 3132 49991 8417
+32737 37755 23973 47457 5810 38483 62747 30648 9053 59894 18873 48300
+21630 6198 58686 30602 3588 46488 31371 931 45635 8928 41538 3119
+37468 17352 42749 20709 47016 34407 12097 57258 7232 25370 58637 42084
+14650 50918 38265 12401 48503 4043 26096 62079 22646 874 39183 25295
+58118 3784 65427 10375 37669 106 33055 61390 5113 41111 28468 33648
+50265 25339 8320 64224 10873 55299 5241 53841 10591 59989 5815 57955
+27847 39890 23162 59681 16361 55684 31895 45219 21198 41770 18635
+36850 49779 12175 38057 61515 28783 8149 46944 14484 45103 19556 59896
+17229 55705 37631 11075 53242 29600 57211 2336 33060 19804 58075 34393
+8190 39219 10797 41266 27900 34335 47665 20875 6073 28062 40281 19236
+43092 7333 46414 21132 41359 31691 22149 9609 36627 3408 60668 13594
+52529 23619 39733 29795 62678 4419 56669 16510 63477 21478 45068 2480
+48368 20082 41683 32304 6740 59028 10750 56075 29751 34576 52801 390
+56454 9064 27506 63076 29587 35359 45306 3596 41898 7167 43704 22332
+37097 56684 8503 64452 43462 26864 16121 48045 19672 54553 39628 16761
+52386 29416 14716 54978 26404 35540 46782 11949 40001 15072 42205
+52543 22554 35142 59338 8799 55272 21816 60228 18716 56468 22818 43136
+19259 40307 3922 47621 34565 26026 43553 15884 50492 37825 13034 21103
+53015 34567 12743 30074 63194 21741 42241 18923 49787 24951 39291
+30409 58353 19234 11539 52741 2498 62586 38001 18800 42802 21267 37877
+54076 14761 43313 55040 20668 2178 50611 19776 44504 22233 64014 15158
+52530 2006 34952 58996 17884 54775 24765 58106 19703 60739 12056 34793
+57087 22676 823 49554 26581 36145 52081 10530 64092 35135 43415 13213
+62617 34995 17534 64377 14567 55432 18539 61822 23156 52935 12498
+55029 8141 61339 23777 37510 29864 45992 10333 22238 61917 24580 5956
+63275 23739 34188 47229 7494 43359 31134 63956 8449 30031 42798 22088
+53347 26027 58596 17745 38667 25375 57408 8789 62917 3265 57009 34503
+27992 45432 17967 42237 28493 36714 20990 42765 30983 9619 64800 849
+29046 41606 7798 48847 10055 61126 412 57114 24925 5762 59582 31498
+17231 42588 54474 22275 62546 28999 39023 1822 36422 32170 18593 64405
+21057 45154 17742 40187 65159 9752 43460 22022 62885 17011 55516 19379
+64244 1788 23815 62257 30988 52837 11422 62930 15695 54157 24587 58991
+8467 55337 37873 62064 18646 45113 22374 47180 34400 1820 53836 9420
+25730 45472 19881 43414 5107 41968 14465 60384 35258 11326 57813 21592
+43973 26888 49730 22082 4424 14475 31452 40895 22863 34342 46552 20562
+5928 57912 14520 54485 29272 58727 18074 63579 13532 26915 47070 23544
+12286 60354 34433 10283 62855 2008 29913 45831 6260 38484 65152 9364
+44671 5427 29923 56435 6808 61041 28766 9205 64447 5159 26094 46874
+31272 45349 11393 40121 14664 48584 6399 64677 11701 53833 14323 62062
+2010 33620 60373 7823 23467 63994 39464 6471 61157 23266 44924 11614
+48539 3769 57550 7903 42987 12609 54154 4148 34653 63474 22537 46125
+17524 31729 54833 3647 57206 9007 26138 61958 5078 27021 64555 35013
+25032 59301 3831 48846 10407 32122 37519 25846 47357 6551 41696 11710
+45202 14742 43914 4762 45933 28373 8810 51453 41498 17600 57969 4461
+24253 42874 27777 69 23581 51156 22523 10404 49528 36610 27616 34078
+47048 10871 43880 6175 38859 25419 41503 16461 44997 1252 64109 18993
+54458 35403 393 48950 29380 41970 16052 59115 17103 55979 12657 52804
+20275 35460 56411 10936 47790 5884 41603 11370 46603 7770 49782 21206
+45545 15962 40258 13886 47531 750 30711 62270 13258 56632 2061 63907
+14217 55442 34539 21822 35688 54401 20355 63390 19019 36885 30149
+50905 14552 46918 29619 41092 1495 55356 11047 33367 3063 36700 9160
+56225 24948 61959 7396 46401 3347 41298 8302 60250 11632 23094 49262
+30542 593 32062 44430 3827 42778 15322 48655 40329 12786 44048 20305
+42337 4813 47224 30106 2160 35350 45780 19935 6226 28439 51656 11889
+57199 7384 28933 59617 21461 37123 58319 13095 52909 23625 55420 18667
+52082 8334 25623 46370 28929 8783 63770 2259 35900 42597 59832 48498
+7383 63925 12135 58375 2855 54729 39245 22320 47632 26128 12385 34432
+50118 1459 39934 52551 5031 32816 54726 2903 50789 28730 36913 25307
+56457 11815 59229 18093 33513 50579 17293 48622 15873 34921 50089
+18035 47654 24218 38514 29768 57294 19483 5778 27678 52761 2657 62216
+26986 36751 29152 45242 21427 41037 20120 46882 14960 39567 29055
+48059 99 27854 46026 15834 49909 1951 56419 27907 37834 26220 33135
+63902 22932 43926 20935 47425 9288 39665 6185 50335 9775 35006 44651
+19548 48134 40352 16243 48998 37823 10830 45378 7079 34083 53174 19020
+38850 59732 7623 57109 20112 55477 22177 62129 141 38198 29597 56069
+17870 64273 40223 14657 31847 53164 11633 34143 61003 7723 54041 31250
+60252 7180 32792 56293 24276 6632 52355 3899 25491 58459 30449 56664
+14941 63437 2825 56250 27735 50185 13892 39586 5644 47349 31428 13245
+57460 9041 51740 1413 37606 29867 45516 28377 2995 50433 15768 39800
+26890 60528 21490 54849 24453 59810 30719 1144 34677 54300 23403 51856
+20463 58923 37721 6201 46968 19592 44296 23389 46229 3776 50334 8209
+46761 11062 44630 3555 32277 57766 5311 27643 42540 9688 63212 21618
+50696 16118 39318 59149 25435 49086 32352 19058 42629 13649 52132
+30237 54134 15547 48462 31860 50863 33966 5459 59775 25193 54186 18288
+61158 21174 52239 7592 33178 58204 2948 55318 14382 58639 18005 39572
+65136 12849 23743 53582 32290 43938 437 42321 19921 38577 49145 12604
+44769 5544 32189 40300 635 36361 10289 38319 29219 33824 64592 272
+54305 34801 23847 51164 20074 9488 26257 18020 44485 23664 50566 26227
+37066 32141 16599 64288 840 40374 62304 5604 23683 45936 28121 17019
+61870 38002 15534 44633 21072 59404 7584 48882 15442 42167 21595 47381
+661 30704 58279 24639 63108 1528 30830 40800 3563 55814 11690 44477
+1947 51047 37466 64002 20399 47341 30659 9259 53401 415 33981 59895
+5155 54613 24247 65311 11280 56600 16587 36772 55320 10618 58311 25399
+39390 33399 16749 61501 13262 52665 1118 36891 8768 60025 27670 55247
+18605 59245 23930 61688 26988 13615 64944 28045 2613 53461 32689 18203
+52040 22967 61509 30021 11625 43045 777 23308 45026 30533 3997 32756
+46379 15711 33407 51100 7252 23773 50399 1494 26322 59538 6518 37239
+28238 46315 17221 40080 20994 43981 15904 47925 40308 2236 42463 59328
+19077 35971 50845 20957 1522 33990 49930 19948 47811 30627 9512 34347
+56535 25943 60956 17853 53096 34574 22499 32550 39573 27301 65102 4998
+21620 60789 42435 24411 62435 1538 52440 12459 36963 2466 43563 16331
+41497 64427 26743 9471 60746 4962 43567 10178 26419 52402 22992 40452
+7880 53022 15276 37804 25350 58708 29773 61965 16523 37862 49935 15670
+39436 53897 19829 49543 36069 7883 34651 65265 23077 7127 52629 11933
+64264 4480 51134 26719 39985 12068 23640 58992 26497 1288 20507 56420
+39022 14021 42353 7216 46342 10164 37471 26172 60138 11776 24759 50349
+35741 27586 34334 50924 10800 36451 29360 49863 3748 63241 17409 55904
+15490 64618 27445 3920 61928 17678 55751 15538 65054 26502 60095 28303
+57447 3457 49044 15630 41297 18171 46946 13727 29479 61963 31802 55590
+52215 34148 3830 39454 10424 61400 7756 49112 13053 44361 10553 36450
+30103 53782 11787 58089 34221 8940 24771 49373 6520 40814 14411 43062
+20391 63628 4141 53979 26104 61680 12455 40198 7566 33023 52974 14132
+63757 36797 20572 49205 18267 61618 33189 23188 7660 43328 13011 38408
+58706 19573 50871 25530 10761 48471 31476 7161 32413 44165 4192 51086
+32925 18733 43188 29459 7552 64771 10092 51946 5464 45611 17279 31680
+55983 24285 40645 1733 30051 45066 14438 41193 865 53035 33910 5839
+36177 58934 22751 8629 60799 1224 41358 15961 55324 26242 64834 35181
+54538 13216 60893 27226 51679 9147 30411 56855 19279 63435 35817 13856
+34102 48599 21354 54292 15427 64781 1827 55709 12049 62055 4097 56581
+29440 14391 61518 30570 9623 31652 62336 7514 40085 65467 27532 5471
+43209 11718 37231 62840 22458 3976 46441 11140 40841 7094 64366 3103
+59537 14353 47593 19752 53889 34014 9466 36243 6709 31399 43761 20566
+45316 27785 61674 13040 53509 6697 20567 48804 37071 18195 41191 22250
+64906 34200 12216 57307 16893 60851 27711 33198 62826 12691 39746 2347
+23873 51527 26565 12086 65114 24830 8566 58431 2912 24299 48477 28092
+3896 47447 29675 42305 21897 40310 33354 21188 57547 738 63160 36214
+5800 43703 63586 35706 7680 26442 52395 19591 63894 35341 29011 50136
+1105 38588 30003 45776 19537 9578 63768 37 24074 56045 5600 57845
+14831 40863 12147 47005 26268 36966 9086 50291 35417 24209 41662 28211
+49449 8726 46964 5867 42328 14879 43759 20867 58156 10556 61178 4602
+57011 38470 6128 43326 1597 13397 28979 62412 17382 44973 19229 42185
+21231 51900 29022 56577 15321 60504 18432 43950 4024 49949 30441 56948
+19159 64163 26762 56224 1241 51727 27754 39472 32685 8509 34657 43683
+22721 57106 17800 42176 28090 8419 31422 59837 6396 42191 29124 9998
+36336 56997 17275 60833 4194 24228 42434 13538 63505 37941 17763 58107
+28323 52528 19244 59403 26907 8912 62557 3368 54062 35665 17987 47280
+22643 41646 21109 59077 38649 11883 46719 15959 64605 37626 5016 57359
+20497 49153 11399 45458 24362 49750 10127 35035 46440 25542 44109
+12679 49879 4483 46628 9006 19585 32055 42235 8564 40881 21244 65528
+42722 4321 47520 12266 43140 28000 61511 11367 39166 3761 44019 19524
+40869 25044 49433 19816 39229 33742 8375 50229 35661 16816 54163 40993
+17435 44963 24789 10581 35516 60371 21846 55829 24450 6610 52571 42560
+20542 58250 23431 43820 19407 45847 25869 50255 7316 41171 16558 46522
+27122 59653 19265 55787 9747 64600 5333 50788 19193 40540 23227 36569
+55507 3573 29683 50758 14265 44618 2255 49277 31581 3892 48241 36000
+58 49489 6800 51903 22291 56299 34912 6031 57393 41355 1585 45247
+35363 14860 33734 61908 10586 56495 37429 13565 60476 1069 55568 10158
+60117 7925 43568 33843 16948 49973 31141 21828 10118 52997 29782 61764
+2631 47370 27081 4425 58886 13453 54701 14915 65527 4615 56929 39735
+21584 44918 33052 16723 47875 25328 43386 22274 59935 29231 4710 59262
+33485 21050 57879 8356 52068 2289 38698 31638 19408 54310 22887 62149
+7650 52359 27602 37367 24644 41882 32367 12074 52958 16926 60649 37591
+47182 9779 51563 28072 59422 1877 55786 25734 6115 33441 48264 2665
+39786 26303 65002 14345 42438 465 38837 11583 46112 17108 31971 37317
+9708 56800 19892 60136 16214 52001 4843 33865 51329 3067 58648 45288
+14717 35227 51701 15901 54764 22019 50418 1100 48510 28487 34439 54079
+7433 46950 32453 3016 45827 11972 42871 1066 40824 14628 37516 49327
+21331 41734 19863 45185 31469 562 59914 10930 50271 3131 25496 61954
+4659 51633 33078 17798 48323 12154 36292 30417 60652 16447 56753 15025
+30133 62711 4088 54453 19609 58407 21067 39978 28708 51864 37478 2917
+63356 24960 55912 1600 35362 12987 38739 26682 58605 2456 53410 6969
+46798 17484 62902 29981 52013 10862 46835 6775 30788 53646 18625 64951
+23906 5217 46608 26902 659 57380 13188 55562 29636 50466 16925 41349
+525 49206 39088 29752 10066 36939 1724 50769 14142 54127 36144 11517
+35064 56379 13547 61416 611 51881 11388 48976 35473 23765 32673 39517
+13849 56654 4065 62580 10444 28201 39506 63262 7323 57891 28994 53522
+14632 39913 62511 25566 13804 57802 31187 43572 17454 42173 11575
+48770 31568 15365 29735 55292 17296 60625 28368 52791 20802 44798
+16782 26081 52240 19275 31756 36788 23525 44595 29889 15164 54605
+28489 8711 57875 42712 33437 17386 45837 14970 40558 11992 57308 34034
+22114 42061 27403 41196 22968 48334 31789 6977 49339 13670 59683 37293
+10159 62372 1483 51906 8165 37851 52778 13064 48463 1165 40586 32496
+14617 62950 16847 58635 36588 11950 47530 16710 31821 36313 2685 48019
+8140 51469 19484 64730 20940 41604 25658 7220 21840 57156 35959 6418
+33786 46568 18144 40305 60003 17058 37427 23168 50931 9985 35327 46850
+20592 61488 25582 54244 4431 36319 62202 21864 44116 14936 46256 2427
+40992 26594 62426 11289 38482 30300 15545 32686 56369 540 28514 45682
+4437 65240 33655 20769 40713 9461 49903 18259 61799 27626 15991 56088
+24671 61061 22138 55081 23341 64281 6035 28314 58913 13155 55891 6324
+62853 34496 26914 54645 28837 34196 48077 19476 42550 27212 7642 53358
+22569 42183 64201 7007 26260 42841 1903 40897 51710 17360 39798 13246
+37781 6219 33431 62399 13773 22467 58068 30753 14660 49898 16208 31465
+59139 24193 53874 16427 33886 45879 19658 40438 22299 51093 25783 8475
+34900 56982 17927 63552 37589 1205 45314 13437 37240 58099 15371 63808
+34403 23491 47226 3303 43637 6891 54765 13647 62135 33033 17567 59712
+25717 65046 33342 27642 61811 5401 23830 60256 2142 28631 44358 22638
+39950 20598 43291 29974 3449 53747 14804 48357 25725 34741 46103 17359
+41831 57613 12155 22050 45640 24053 11699 35765 58669 20880 8835 35187
+46065 22530 9468 26937 60174 4263 64362 19837 39286 61483 8930 34523
+47515 4416 43194 7533 41404 136 59684 39134 5051 41519 63406 14170
+49049 2550 39287 62288 4176 47938 36025 20125 2852 61343 38242 5147
+50578 22877 44439 16446 48941 8725 60811 3542 56593 9082 36307 20833
+61865 26627 53773 3965 27967 45946 21410 39119 19045 45578 16266 31746
+42079 23174 60607 15886 55217 27077 34887 46074 4264 26192 63635 1563
+39049 56538 19721 64051 22979 55798 29929 1060 34613 47653 4189 50360
+63107 34724 606 24954 49869 23292 11682 65295 4368 31481 53258 8562
+63159 16174 57370 29073 7462 50740 13699 40708 21393 48068 28678 8155
+52315 3686 65403 35514 24217 55427 13457 29125 46602 19104 64643 43115
+5968 40096 24366 62290 13792 30487 39986 8197 58543 25906 63185 13877
+41661 1739 37431 49479 9092 42308 4721 38342 8428 43437 12358 46796
+34105 1500 38831 29847 47873 15665 43882 14029 37298 7276 65250 9575
+55481 14539 60484 35147 13726 58738 2312 21444 33553 54567 18060 59699
+33215 7352 31442 56145 23460 63936 27282 52607 1812 35418 45559 6701
+47618 35775 5646 34237 50735 10392 44708 6098 62358 9820 30104 56521
+13447 59916 496 42301 58880 23398 2783 41411 32696 15120 59038 26855
+54658 2959 30837 41956 6443 49682 9910 30553 63073 21102 39508 22533
+46775 27347 8770 53670 3416 42965 14808 49485 12153 37898 29921 52217
+16438 32688 63880 6379 54487 12558 63326 5628 57448 22302 36526 59334
+356 63537 8956 27591 49694 1806 25129 51785 35320 528 61190 38274 5691
+24811 45479 29880 55606 4924 65454 32294 53686 20651 38143 16800 46012
+667 33281 49401 22883 14130 54618 23584 64065 18959 51732 29045 11671
+48673 30579 8474 53159 27134 58386 17394 30856 45320 13065 65395 32229
+51751 12713 25376 58181 17994 64655 1567 55344 28492 39300 24471 49673
+17222 33250 51237 1888 41800 9859 38028 30769 61280 6675 54397 11672
+64382 30054 56709 2547 63515 9918 29531 43728 5068 51159 9441 23036
+56239 41052 14105 44343 28817 6336 50387 12741 42294 16152 38373 58760
+27578 11598 56700 23076 16374 48745 29601 63708 15657 57850 36223
+27048 50501 14416 38838 24989 41944 32165 1674 49036 23861 34662 58514
+5829 55489 12919 60011 38188 18604 47258 27129 10844 48598 7035 37622
+57855 1134 53370 9476 26781 60489 20855 53755 8753 36001 53236 19079
+46694 31656 3692 32544 45796 22586 51567 20622 33792 64977 19018 53724
+20552 62168 26316 56983 17118 53448 24123 63726 9189 25460 57902 4409
+52816 23114 43133 16966 45050 29389 40060 199 50090 26146 39272 29186
+51861 40260 4383 48207 9505 23860 65457 43121 315 47725 10541 44962
+16775 31159 56650 11249 60523 20151 54901 27588 61608 17951 40484
+20086 49293 35082 25398 43547 4531 48417 27730 37307 32158 15257 45583
+28772 60444 5364 29790 42544 8788 40369 25395 50940 19706 43917 21927
+60064 37751 14748 45874 12165 59516 4619 34735 44435 15767 48012 23167
+54400 4915 45394 18576 43411 10384 48651 37880 18888 42451 27655 37157
+24807 41861 16101 50595 9248 28731 42764 18570 33415 54472 19653 60148
+32727 8319 47393 31028 16778 52902 29374 63419 1423 50599 12888 43008
+15213 47352 1925 44249 13642 54935 23305 59376 26167 6657 62932 40458
+30096 10465 34295 46562 14990 36348 62693 17681 56846 22933 38554 5293
+35146 50339 9574 36412 53092 23141 6798 40512 29220 47204 10981 43403
+26159 37535 32677 5605 62464 12452 37222 28212 63148 14767 58501 23742
+52449 15897 44514 18372 41780 22753 46900 26082 6361 41656 33466 24672
+35595 54350 18695 64813 21571 38614 50102 11125 32546 53216 20402
+59496 36917 17250 44793 4940 60511 9696 22493 51884 39580 14958 44401
+37060 10959 54496 8208 43173 2934 44596 9218 34927 62068 68 58725 6964
+52200 35768 19678 60809 3183 28176 45752 18099 42989 2118 31943 57500
+9096 34068 52938 19131 63388 32037 17998 42383 22252 36516 49825 12114
+46123 16045 31491 48309 2787 60754 11063 55613 23877 54298 6686 60222
+11820 57760 5703 28179 41242 14358 47525 29382 2483 35406 45471 5285
+42742 14257 49772 37514 17491 45966 12502 61015 1798 56858 24944 5234
+54353 31122 12505 62883 5579 56161 10504 18935 63362 27091 36195 50979
+20367 13845 36944 28174 59081 4945 34359 48511 19433 42777 15683 39383
+435 42220 9520 45351 3333 64079 27920 1013 52920 17300 65182 34229
+10720 62154 5723 53865 10262 49886 21364 36468 51516 12570 62493 21205
+56804 11402 60761 14100 53014 4372 25345 56914 1912 52608 35659 23579
+64193 19124 57685 28958 8225 32576 60536 25324 57012 45 62876 26661
+4427 52609 9955 58974 2814 55554 10630 61024 34449 23264 47627 6587
+57934 38498 4719 44175 12737 37771 65326 15134 56218 33904 8585 44561
+15908 41394 19846 61623 28355 37011 23824 59106 29083 49887 5222 40945
+10689 42534 51849 21362 2017 44154 58623 27323 3330 57510 6431 24943
+42635 1952 45487 12642 64913 14439 25269 60795 22371 1705 34901 56694
+14279 60332 243 54846 30072 7896 60047 15972 43942 20178 51484 401
+47532 7312 44201 29320 5444 35464 64860 943 55060 11035 58576 2892
+36938 60361 13435 50049 7675 45900 3648 41194 11641 45340 85 28714
+59914 24135 3203 48138 8965 23786 61616 25489 53193 21853 48307 35494
+5892 30226 61238 2488 58064 22087 40234 33140 26088 53877 19261 47961
+20832 30645 45122 15755 46666 21677 63982 9406 31625 53520 37437 10647
+64837 26194 51052 16215 40907 24804 60975 164 30586 39785 5289 51072
+12457 61185 4554 32070 57580 2292 34997 64055 17506 37766 28414 44210
+15436 42140 17668 39328 26494 44103 18638 32599 54791 741 59986 9351
+39912 52376 15325 30156 61217 18861 55572 28607 2646 61860 30276 38589
+18987 46988 20869 38527 62294 17329 37036 47221 16069 44376 23710
+35489 46886 30280 11070 43858 3128 57583 29252 55108 12183 38834 25878
+53916 7964 65120 3589 53616 25361 62913 18616 57462 21923 51419 15021
+38811 59618 22779 47735 8085 24653 45334 18252 44118 19570 64519 35376
+8018 55594 19889 33389 44191 4515 28988 45825 1591 39498 27630 34305
+48801 17717 41141 30932 14151 49135 9403 50710 1124 41805 63555 17818
+39435 10985 35053 46809 13784 40568 58046 23562 47612 18069 45042
+21761 46358 29051 1908 64770 13468 52214 30012 11107 62026 24051 56847
+6227 29116 41689 4395 48358 21235 35753 54138 11255 49247 34178 3196
+50986 7678 38754 11039 33894 61128 19410 56729 28511 12290 38492 56033
+22520 8204 40898 49799 20639 38858 55030 16041 60944 30030 54399 19927
+47764 32766 6256 55066 29248 49716 18881 42584 24157 38913 19583 48298
+33810 20657 52195 11339 57074 26553 40407 15762 53450 18309 36962
+46470 12884 24855 47374 20055 39518 29593 51564 14682 27818 53722
+21096 62297 17548 59049 20575 55748 24914 61533 34173 7511 36062 65288
+18083 33447 45666 767 40138 11192 41522 2148 65118 20645 54176 17333
+31988 13236 44808 3703 61589 10166 30217 60416 5314 56741 10888 36114
+55508 28919 12490 38381 26456 44938 14124 22435 51547 30513 6842 36127
+63208 4697 43791 21363 35069 54895 16805 59610 22913 44846 26274 47371
+19535 37968 25661 52365 7429 29257 50369 7026 24717 58098 131 64460
+10634 49089 2588 36857 50662 15220 44895 25775 49965 18117 31415 59553
+10973 38798 32036 7152 36641 51158 23558 5844 53844 31867 8321 51943
+11803 33387 49043 7135 22403 57655 32035 8797 60694 726 54143 19746
+61861 34089 21765 45890 6450 49420 17741 62025 14581 41639 27587 37511
+20859 43529 13046 46977 28736 37899 8210 56925 31950 6833 42855 14212
+36925 58339 3062 55873 26615 38275 2104 25264 47429 31633 339 58347
+22251 35286 50014 16375 32325 63978 10323 58700 7830 31964 65140 7120
+56453 33394 25412 38467 31230 15177 34297 51265 2425 48907 16365 31100
+55825 20836 32358 7982 34383 65513 14293 38219 7284 49756 35673 25832
+32883 39815 16826 48933 32251 14396 42062 21827 54761 17291 59493
+23844 63829 2956 26106 58952 6308 25235 56450 22301 63995 20335 53352
+27749 9062 47319 2733 37267 65029 31069 9751 35159 61605 25086 13257
+64705 28921 11110 49364 26843 7010 34730 43966 475 51790 40952 15883
+45016 9999 64112 4558 53299 11586 62956 4967 57575 39921 3219 45734
+35119 6000 63964 32655 25276 61010 10816 57786 32441 55913 7981 33549
+62854 5237 23541 45007 34688 561 40575 10771 37948 26765 49294 6628
+39404 16337 53655 21214 46306 10192 38931 54759 14689 57811 29953
+62868 15556 52495 32052 45090 10339 40746 51031 64185 28912 48247
+16664 49338 37462 14933 42406 18284 50149 24161 5037 41959 57716 3482
+55106 6250 59807 40241 776 41739 58173 23140 13987 31530 56504 13306
+46192 7698 43016 11685 38682 3414 51960 8973 65092 13975 44126 16793
+40604 55866 14876 63320 38661 18518 45155 28348 52492 20931 62454
+29957 7856 63879 33195 6474 35978 63051 4317 34717 50468 363 43845
+65439 21631 12022 57402 41208 17833 64343 35318 27477 59702 3046 30170
+63966 38937 2727 47951 28486 37490 22898 41865 31936 5712 50537 11925
+32633 63663 24249 41115 2605 47107 21943 51767 12465 58891 7064 55595
+34293 2233 48969 26090 36710 18313 54385 21463 61200 29319 12797 50392
+34585 7539 52508 30550 57265 15888 63330 27356 38595 10107 65314 6590
+55769 37349 18865 47251 20528 40163 51978 15808 28962 41951 2719 58857
+13082 61739 45201 7288 27007 59150 24104 64727 6784 36941 3529 62365
+43701 27611 1043 53512 26173 60173 20487 54137 8390 56236 3257 59868
+35891 1270 53135 26933 49501 2563 45596 34940 9501 39060 29963 45141
+17773 38912 47738 12378 42064 14407 44679 937 63113 35686 25159 52680
+21018 5556 50720 26531 48387 4842 53203 32507 1268 45835 34136 4107
+36026 51212 23945 11302 59454 27484 9224 61831 34026 25672 36505 46705
+17731 41632 22559 44834 26648 13806 65082 31038 17366 48087 12941
+54749 4134 41379 33627 2697 21542 40883 27538 50590 17598 37553 60878
+9181 55452 22644 47701 28660 57482 1766 30427 46755 12883 43018 5357
+49570 25462 57082 31070 5584 48729 26610 7855 34906 46525 23314 8594
+27161 58970 24880 5439 22701 9626 35884 56292 23760 1030 51988 31172
+62715 2391 34191 64713 22205 14895 40539 29907 47165 17494 33336 62338
+20288 9839 34612 54211 39233 10139 50001 28572 64538 19883 56211 24738
+62650 17618 40135 29325 54027 5558 60012 30662 1385 45494 31993 4922
+49791 12801 37215 5941 41276 11526 46083 25069 38076 17274 58436 12028
+28113 46971 16724 25091 54688 22340 9543 48198 39524 27555 10395 47616
+844 44134 13419 41170 23560 52478 10337 27604 51321 20209 64807 13390
+56507 8285 58819 39437 22500 60037 1541 37778 9142 57264 31736 18515
+61070 973 46167 22567 41393 26784 11449 63614 16704 60282 4138 50228
+10872 41589 1879 49124 39487 27810 16406 60199 21030 46743 11454 43401
+5917 51755 18438 53277 23226 41937 29682 8972 43647 3577 54042 24330
+198 35421 60435 21319 51560 19369 43183 4281 23138 56866 32899 12283
+43809 19481 54149 22611 50870 24827 11477 51763 40090 18596 44231 4536
+41343 13964 44476 19783 42892 29132 13083 64148 34004 7779 32988 62863
+11462 27267 52305 19334 55720 7139 62177 31778 16560 60698 5409 52437
+21559 40196 18124 46231 12705 34427 58920 39858 15223 59902 18832
+44788 20193 37255 58294 17307 54168 22634 63622 16386 57275 40529
+17918 37354 53902 21391 2277 57864 7635 28007 60942 3014 55681 10301
+32274 49616 36153 8288 59643 29427 38542 22746 49552 16720 52267 28634
+63348 13777 59130 1994 43628 12125 33199 48957 16240 65378 5849 52950
+13864 33192 64007 18485 57819 22605 62768 30059 1409 42003 20759 62255
+18690 42682 55708 20345 4017 60042 35869 53539 188 36219 47290 34152
+50628 25836 6979 43426 64566 25260 8372 38036 26969 48820 9581 52400
+35622 61708 8847 24274 57001 12008 25472 52809 29254 49439 1605 22202
+62012 24171 3238 35949 51247 1810 42556 9742 31863 59061 404 23912
+49276 36279 13229 62089 35722 19220 56405 25876 60322 21832 57154
+24020 55098 15810 59226 3823 51842 23513 39592 55214 9949 57710 37710
+13939 41749 56710 24782 2107 62647 34098 25715 58176 19977 54161 7524
+46204 16212 36511 59322 11588 41224 4224 45985 18394 49746 25774 13000
+43630 17102 48527 26325 53097 16506 50062 34830 10726 39044 15531
+64277 3921 49719 30011 36111 43994 12242 45479 19925 64656 25970 55404
+22402 6414 63700 41962 13220 40246 4265 61345 24105 40035 12862 44874
+3250 48140 13529 57522 25189 61597 32132 15080 63209 29687 46885 6012
+39489 10983 47995 27396 55610 37340 17330 49899 38014 5183 46264 14639
+42099 13324 38337 57162 33263 8761 61646 12858 55090 17769 63696 24341
+60808 6058 54370 25509 41245 20809 50703 18202 37846 30209 58358 1075
+40957 12588 47046 36161 327 51429 29661 38302 26738 60058 9731 57321
+4757 55661 28399 7203 24127 45889 372 42090 14246 63056 10684 27816
+42368 13945 47148 8978 38781 2777 30523 64459 4705 23944 49176 35994
+18609 52248 34946 14046 47649 19127 37620 54075 1164 22222 52817 24608
+2086 58170 9599 35787 62042 12351 42724 6146 37932 18504 48099 22089
+54627 25677 3151 39278 30925 44486 19426 37023 51788 10305 40677 3047
+44481 14053 37232 59382 15533 52032 12024 37480 2609 30703 50673 28577
+41344 13386 19525 30970 61809 14166 56649 1736 60911 34698 13673 21563
+40507 54376 16153 59462 18683 45636 28125 1152 22829 48302 34529 2611
+36160 43767 5514 45884 15860 60407 42252 6573 33334 58755 18148 31113
+47640 15245 54739 36713 18547 46621 35014 10528 22101 51456 27068 7862
+47800 12019 40022 3370 42525 10245 47622 1261 39104 29402 47141 14002
+44353 1561 22557 45495 27126 3175 63291 28027 5655 34766 52066 14373
+49156 6767 29579 50022 15358 61505 26261 57238 1293 24447 44782 17041
+53345 26891 38230 2234 33973 63098 4781 55588 35274 14922 40321 30085
+6051 59331 26807 55331 33020 24673 53211 14009 58270 5232 21854 55755
+29128 39246 5904 46019 11479 32870 52045 23728 763 56514 18791 44600
+29350 14408 55246 28044 34604 59946 16646 39546 901 42864 16962 36611
+48517 8169 42738 12553 52509 18359 62393 30975 7667 33940 10422 59877
+766 21985 53226 28527 57870 1557 61124 28107 4752 20062 49228 35856
+22905 32653 48925 705 36929 12265 45670 17246 48310 4294 58922 11814
+55998 5384 48036 16420 44157 22552 64557 26979 15201 57004 23885 10652
+49161 2621 30207 45452 23423 41832 19730 49800 32276 62004 17728 56371
+31994 51546 3499 39691 55648 5868 61210 27218 33607 50582 22961 44489
+14341 45840 33002 12088 62608 30559 11809 45766 23197 33491 63467 6180
+24839 61703 33456 14488 40681 48964 19063 46464 24258 813 31241 55657
+23136 51858 32783 10126 64442 7324 52099 29143 58715 8686 24638 61834
+3991 25565 43908 20251 53104 28941 51015 9503 32185 40834 4411 33741
+56578 23967 64418 10114 48004 7424 63549 37652 48543 8061 29669 17831
+42674 19306 46858 29764 58563 3602 27921 44108 5856 42601 13782 60988
+31283 54690 11078 63693 26927 55890 16780 64374 23798 37770 9450 26838
+55637 40009 10957 45839 7347 34700 49539 27250 6101 56692 11927 62833
+32663 58010 3787 34169 55033 21353 61427 23026 54685 26863 65488 19078
+33774 61080 9827 26900 56715 21638 64917 32474 8113 60571 33160 12456
+50743 30460 60846 19704 43496 22057 60413 38291 3638 32281 37092 5440
+39585 29838 54809 6007 61694 34273 9243 60336 28743 53627 19631 45248
+28135 8712 58441 3693 64701 43139 13355 47931 4581 44748 8864 35347
+45573 18692 33248 51001 24938 225 59146 36212 17905 61955 37615 9136
+46426 34861 29932 49668 8506 53819 35298 1723 62824 9568 25325 54857
+21230 60945 12156 56197 5819 28502 55399 22503 59668 25294 44000 1412
+54242 20489 64329 41851 16093 40406 63292 31537 8878 32623 43298 18779
+48005 31444 64294 24348 2941 58613 7778 38638 28742 53357 23042 32652
+58033 10790 38818 19342 45057 24758 42718 21554 61423 13518 50192 4829
+43417 34025 8785 35355 65142 18300 55360 36582 16157 51820 13859 64183
+1749 43175 11796 40747 28053 9355 22928 46717 24820 12415 49655 32490
+889 56227 10851 62163 7509 55724 17405 58808 39584 5936 41681 56840
+680 59218 9008 40867 29364 45599 12299 42067 60430 7425 31982 64222
+6485 34174 57591 37327 14472 45590 3783 59992 27050 35653 44915 16951
+42604 14315 36669 50496 14997 38708 56735 7938 60766 34848 6916 24834
+55221 19896 63312 26540 45044 13511 47010 16497 39369 25071 54900
+31983 3285 21651 52773 40760 65421 11692 55379 5768 52995 11364 35236
+61898 12848 57145 26044 51464 7724 41295 16972 45322 15403 41108 7843
+50829 34453 2946 57276 30386 48270 14300 25287 53435 22029 63728 23677
+3890 61673 41263 21778 44819 25697 6898 41423 24374 44803 9967 43077
+1859 46726 11180 44628 4665 32065 50050 17821 53302 36630 6161 41718
+16946 50296 38677 14763 52799 40111 18807 44620 11534 39491 4116 50959
+9776 21097 43074 64895 16913 51757 14492 45505 18146 43238 31374 19926
+52055 17822 47017 6371 40605 14194 61175 33672 23485 47326 15758 31366
+37582 22956 57827 19255 62335 26409 1452 61279 41216 9240 63087 33693
+15278 31326 53425 3380 24798 57480 19886 61050 11939 25777 65097 20619
+48228 31600 19328 47652 33230 6283 50407 27420 45705 19955 38058 50914
+14191 40909 3858 37762 13755 49311 32734 45166 3039 24814 51839 27761
+12552 47699 20582 62214 11061 52357 6326 42842 10152 40987 52670 29639
+43851 19432 57465 9562 49518 2343 37496 27544 62384 31358 159 65084
+10246 53680 3548 36477 30713 57414 17385 60555 28698 46245 5946 42309
+31266 8236 62804 3552 38258 26004 47155 16002 52869 3824 64530 34973
+54914 14720 60255 29550 37053 21384 45584 19169 43558 25244 38271
+27978 48058 1390 26410 49694 20551 32020 38120 25762 53023 15073 58396
+17466 51025 4333 27140 53337 17154 37723 27124 50686 20825 9880 65192
+29727 40552 19659 50238 255 24476 57195 4974 63439 29861 1266 55255
+32011 17038 47487 30716 17677 64305 40149 2368 46745 8551 51559 22207
+60366 6082 32915 59252 1336 36750 14798 43329 59432 33641 4658 30242
+39236 24175 45261 15891 31871 51185 19902 41104 31632 2063 36576 22033
+57983 37556 3715 53737 20093 44289 14569 27885 49081 18876 41472 4271
+65056 36598 662 42915 16621 50647 38920 19832 10314 52443 2664 39596
+55465 15204 64826 17604 58557 29878 37625 18151 52836 19980 37211
+58189 8694 40157 2836 30851 62019 12978 54531 5118 28590 45974 24164
+7386 59020 1160 55544 16265 64067 30010 35302 56873 24197 8937 40974
+30742 59615 7773 63761 35371 12784 46425 450 41984 13698 65206 24275
+51779 1163 49245 18039 36109 54973 95 62781 8452 29397 43689 12555
+49423 37443 28338 14574 48312 20761 42193 56516 9720 40930 29054 49583
+14714 43865 5122 52977 37885 2927 43220 12316 58462 39206 4122 52540
+37424 13981 41145 4667 64481 25426 2032 62633 19575 56809 22103 64830
+28105 9806 23282 55177 35266 8368 58406 36007 3185 53910 23902 37713
+26123 59947 16066 56149 33757 20813 11272 63090 3926 41844 20960 34916
+64812 14548 52193 7061 49864 35239 22948 32468 38507 27684 52825 9263
+24857 48484 2440 52559 21386 54771 20276 61005 23594 40880 27805 58430
+8758 29841 61287 22352 48790 25352 7453 41665 31434 2114 52168 8535
+65521 13184 59566 30168 3781 51062 12524 36551 30333 63874 16363 54897
+13471 65280 5493 32556 48394 2352 37058 23606 57017 38580 11034 47538
+3048 54958 8618 40947 48248 24794 6770 56944 11649 34726 61249 38635
+12426 46802 17865 48924 23621 41985 6067 60010 35515 709 45363 11227
+31686 58848 14993 32979 39396 349 36697 28881 48453 18165 44802 22433
+50921 28085 9087 20387 50223 10069 58304 2543 29033 63952 37410 432
+46396 8565 52614 20588 65098 33718 5365 28758 49699 29943 61415 240
+59174 32539 8159 62689 12793 51738 20296 32117 59321 13592 55013 8363
+30157 58626 33727 27874 63910 17298 31056 48385 881 49975 27409 5686
+63644 32805 6692 61833 30391 15098 29085 64153 23007 46098 19269 42548
+24647 36398 63532 2293 57272 36937 22512 41453 26602 47134 24506 10887
+45419 8 48386 28981 55240 2473 23010 47200 26692 3269 58034 25288
+62469 20609 55306 35589 10843 29215 42352 11844 54002 7279 25995 42628
+19638 51059 38255 2761 53776 23182 7599 51749 32414 3193 54364 7320
+26155 47767 18779 44518 6725 64227 26950 40944 17721 32976 58986 16828
+51918 7484 26479 64025 17811 31379 62179 22944 53584 11673 48929 34661
+27175 45258 10499 42261 5388 53477 31634 61000 6263 49021 30135 15343
+50568 26132 39712 7151 49323 2478 30438 46209 23206 242 59112 35566
+24808 51387 27562 59533 8153 25977 43606 18926 46384 15877 56624 6384
+59726 14342 47028 19147 63177 39322 12018 42823 15788 40357 12757
+45078 1213 51283 13210 47675 16677 53821 37342 5659 42431 13091 38279
+57078 17434 63426 39403 20326 42784 18178 47388 6750 35311 57474 22125
+61584 6178 53433 10182 43454 4062 46120 19503 50638 16491 39636 27320
+64544 9556 33218 20091 63204 21983 42656 18305 61612 29232 1660 52760
+38786 21194 47173 28433 8477 20581 55050 31008 40007 9367 59368 15919
+49947 26500 13266 53811 23849 49189 18574 37618 27727 57557 15974
+64947 12972 54044 7201 57773 11240 63018 5106 56778 31752 61367 25656
+35968 22407 34157 50021 9146 25119 54628 17755 62946 29075 45864 10409
+48785 18660 62536 21464 9694 34804 47461 18440 52713 36940 21539 43387
+16441 46657 6232 39391 28560 36965 26000 47427 1186 45976 13423 35654
+50633 7986 37814 33177 12649 35337 51262 15580 48418 26378 41440 621
+51458 42116 6939 49569 11926 56165 234 59550 10663 20987 49593 32879
+17877 64749 12890 54276 6488 33115 52712 18717 63079 14966 43985 19088
+36666 56421 10054 39476 54103 16034 43758 7369 38499 30655 3512 44537
+57161 16471 63846 27869 33922 60807 10312 56142 31795 15275 59608
+17746 40124 64945 17028 57975 40011 15728 37972 65406 2149 58824 13775
+52279 34300 1354 56911 29894 7066 41486 24561 36686 29968 45958 10475
+43402 1473 44499 9417 30014 42283 18802 58201 7344 30070 52945 17997
+47926 14892 43049 20844 39227 19180 61841 34532 5717 65358 14215 56467
+18105 63767 37029 8459 51870 38676 15552 47475 6622 37545 12832 39717
+30987 55532 5038 61192 24455 38766 12844 41950 24071 51084 7690 43193
+1454 21728 56302 27331 62307 4421 58582 17133 37242 29151 57572 6524
+36295 32248 18420 55805 19687 60144 1347 30515 46152 6240 24359 58443
+4906 55210 34288 27631 49509 16753 40918 15235 44243 19241 40643 21508
+60134 11109 36951 28357 60579 8519 54616 15851 41917 52299 162 29608
+50057 12989 45980 35437 15473 58395 33690 10738 62599 3328 53428 32087
+45883 26431 2264 62130 21213 37736 31225 11806 65019 43012 21127 56932
+5128 61945 9828 52479 4878 44260 20304 43165 22965 41494 27551 37756
+19929 42958 12874 46263 687 44409 62619 6055 55776 18434 39696 60396
+13201 43828 23851 4510 32800 56213 23738 42515 7428 35750 56908 25053
+12084 43044 4782 26033 59940 1415 55261 24553 61224 12508 56788 4894
+62534 14451 55882 23238 59708 5229 24983 57273 16478 61296 24327 56754
+20731 43752 11802 54020 21488 56930 31166 16487 57552 25522 38815
+27629 44451 16216 48810 39702 27668 8986 51012 4258 42640 20373 37791
+60059 3386 40432 26065 51508 4854 60220 11836 28063 50276 32807 11076
+49375 22698 33598 48844 12159 51476 33490 6893 31544 38160 4492 45647
+17117 46860 35400 5557 49842 29050 43060 5021 24899 45357 11412 27595
+60176 19510 31694 36758 23618 39598 31177 17083 48257 13038 38707
+62418 10988 54737 18 60565 18941 54330 21210 57982 24628 35788 60149
+3084 47310 13331 36265 60572 715 38267 26912 58280 2305 51585 11427
+43640 323 46781 21164 41162 28713 34274 45720 11848 22264 58258 27614
+9878 65171 31515 54828 16678 61817 1346 51821 14020 42596 29997 2007
+54147 34063 61702 2870 33137 57980 26874 54684 32473 36333 7920 31408
+47859 34530 27118 50158 11214 39014 25156 60518 200 49231 10867 44759
+32208 50888 13940 36304 53027 33004 15707 44739 26045 2458 62607 10020
+43071 9 51752 29117 60685 2672 52130 34390 23650 49060 1518 42410
+20894 34070 47933 6351 25278 59057 40302 7020 59711 31035 4514 49742
+31509 19167 45318 26330 42994 17537 63706 6259 58007 35136 24256 52793
+4422 56282 34362 2626 36110 9018 32238 41213 22339 42537 19519 48465
+26169 55992 3439 61248 10653 55375 1973 52167 25936 38651 18036 53248
+14550 23747 47287 13721 43517 3914 27923 48532 7192 40754 58782 18075
+38283 885 59591 32420 51777 2448 40220 65495 22143 56364 39113 11333
+42028 32752 8945 31514 47900 20790 45173 22235 43680 34862 9585 40213
+30465 47225 20249 41925 4007 44378 8300 40392 2398 60796 35914 5173
+36664 9349 43860 33986 4022 60391 9995 30113 53188 23311 5958 61504
+43023 14515 56322 15906 62211 29651 11975 33800 57988 8179 29700 42507
+22362 40175 65342 995 21917 61374 36326 4576 64441 16514 59725 26761
+14575 62103 43103 18955 52561 22248 57720 2409 25174 64359 22162 9117
+60905 33180 55727 677 34177 46321 5351 50241 10406 54807 8330 62083
+3895 55207 23037 60259 19506 31609 47587 15855 42637 13689 38664 5292
+47363 34745 6719 49367 14433 54526 34009 23862 49621 15698 31287 63692
+8781 33072 40143 25303 63476 15903 57010 31513 54637 10579 60337 1296
+24512 55119 42665 4078 40700 49662 21082 2699 28599 46600 22102 44668
+23325 48078 18108 58630 40922 20457 8522 27370 45622 18606 37467 13393
+41241 5828 64062 19894 54126 22555 9056 64675 3332 59540 19958 50912
+15192 44232 20946 65348 24370 8289 26571 62726 22603 11565 61532 38035
+10492 50121 36075 23427 53030 20021 64828 25678 8879 35000 46818 30153
+7107 56266 14314 62860 24595 51911 3705 23009 62421 35646 9928 21101
+53899 34204 17430 64719 36356 9213 60683 5151 55298 13183 37883 22650
+41190 15574 49538 8135 29009 44789 18348 46191 22852 52290 27835 62929
+14622 51129 1200 60561 35173 8152 32724 38366 18781 46728 24866 45073
+13742 64501 6827 58827 27790 39900 8804 34884 60017 20348 57268 36699
+19633 54011 33616 9954 49545 15250 53361 27728 12636 22875 49070 29447
+6129 48044 14227 30787 54240 17920 63455 28140 52414 2054 40653 10595
+51996 3502 27618 65349 15826 54572 1928 60546 11572 53749 29928 64372
+18833 47209 25403 14405 32326 63178 23653 59369 14745 52097 22242
+35270 62705 3256 33363 54886 18493 31021 38245 25975 45130 1896 50061
+21806 48780 16430 37047 62014 13036 53900 6744 25504 44719 34977 7979
+25123 51886 28831 44199 1421 40464 53587 24148 2658 58609 9373 41918
+13753 37662 52114 14576 33814 48316 23569 13600 39099 28524 63495
+20630 56245 25492 43786 18361 47271 26928 45601 11561 41488 6267 46435
+2635 35535 64610 22563 56439 25720 61665 13042 28219 64879 20259 41253
+26030 8398 58948 4955 34412 54879 20358 46808 18727 59728 6924 29105
+48243 22708 7845 26713 46053 20042 50429 35625 8004 32626 62604 13504
+25341 55881 32699 60589 7404 40698 10569 64086 5996 36715 9914 28544
+63620 31937 55291 10891 64446 4877 59426 15933 51598 26060 46190 594
+44120 35816 25371 45714 14674 41383 5098 63232 29685 38878 4135 51620
+33524 47857 4632 35455 49225 616 27850 56968 19440 59285 7609 29908
+45710 13788 38256 53782 22890 11606 63339 25997 39738 28985 37493 7596
+30197 57617 36247 14431 50562 30287 45063 26008 2423 48132 11217 25180
+51110 22423 40485 23662 47726 1300 50629 12032 43293 19625 64558 38448
+14086 61387 6753 57679 10960 47428 3656 44641 30297 54484 14099 29444
+63813 17509 52689 30652 5419 59767 16655 40686 22092 47037 34016 3126
+49035 64901 26776 1257 50712 32109 11770 62416 1808 26255 64304 30160
+45178 8738 40597 63863 36268 10084 58562 20822 36008 60792 2812 34655
+46059 5742 43975 16784 57734 25972 64179 18512 32960 49945 6479 44677
+26070 37675 22345 46318 25594 13584 34635 51543 10080 58775 37419
+52690 11288 49014 2094 40630 32359 7516 46567 15749 38009 47975 11661
+44728 802 59690 8374 32313 57483 28481 39948 4991 55695 32336 1642
+45126 17400 36612 58243 15668 55791 30440 58761 19225 9615 32419 57808
+22167 8404 47782 36828 20108 49051 26311 61727 31335 6432 42879 55121
+1614 35662 50543 7879 47220 14064 37844 12261 41630 1148 60731 34040
+13339 35710 63428 18173 53602 28670 58134 20682 8354 48178 3981 40807
+19973 51646 33808 9799 52846 462 62024 29487 40129 21332 50868 9597
+41808 3505 50498 13297 35451 55308 4233 42360 33720 58783 3450 38533
+13749 61530 28961 17002 37995 29648 45523 5474 43687 13102 52783 26551
+54081 18744 32121 56993 22614 50220 4139 44711 16474 50778 22758 48891
+21219 45127 30667 9569 32008 61323 16342 56895 12340 30877 55512 22693
+47211 26041 7993 56591 31305 15765 58966 14466 30343 58054 16488 32438
+46599 5480 39420 13446 47350 34194 3235 58695 32105 5344 57831 37186
+17158 51139 3519 58586 12761 55650 39089 11764 46047 28909 1840 56676
+13385 62212 36067 18655 56036 43102 630 56505 17195 64107 15058 57561
+28702 60899 4028 53825 33359 471 48796 24964 40692 28476 38147 17896
+58712 26621 11683 38004 24215 47822 2205 42203 9121 62441 35296 20846
+50345 4272 53725 10285 29329 54674 21281 16930 52651 30271 37188 6437
+46507 16518 38994 52122 21483 3320 35577 60582 20200 4019 52803 18995
+33471 44704 9058 24610 49324 10600 26963 58837 21991 37469 13108 42579
+6962 36887 53835 14887 41760 18210 62048 12474 52294 5876 40701 58005
+296 27312 42861 22684 3125 26515 45447 18704 30046 54333 17313 64494
+23848 55553 9308 25215 65188 20160 53007 35671 23241 47021 18848 9681
+63447 24962 41826 14820 51014 20413 61154 27145 4047 48954 11446 42137
+2154 46393 23927 50809 13657 35629 61011 28032 12949 65038 29715 791
+44944 12313 57007 28559 10955 31589 62989 19424 57338 22929 53484 4365
+61757 22617 52091 28396 5555 50502 24310 532 42553 33432 8963 25292
+51828 33971 28129 53227 16839 43241 2429 45292 23046 35939 46925 17408
+43777 12065 65460 25529 45511 16203 62757 34168 26840 44785 15198
+30423 60630 11218 37337 23411 54087 31244 4928 42991 57919 816 54296
+11512 63452 23598 38881 20170 43170 3623 38293 48836 456 43067 13517
+56056 23759 40166 877 36567 11711 38567 2218 60182 19397 50080 22191
+41133 5503 49257 36775 1641 43430 9843 52734 37204 18040 49638 41441
+1875 39818 54358 9197 40545 65000 18341 53997 25580 63707 21183 55949
+27336 41150 18582 48230 27974 1040 45931 21731 43429 18702 46620 33050
+20278 63785 5387 59861 35021 22694 43561 5759 50929 29721 8063 32007
+38201 12585 46132 7520 43734 33723 16551 35056 45873 22247 11488 51887
+30721 9847 54777 1804 63945 32860 7518 35614 55625 5680 43818 12467
+58521 25185 49078 15268 43796 31604 11792 62120 23454 36522 61053
+12647 43099 38864 7933 44542 16084 61152 22832 56497 28276 12126 42988
+57856 13957 24991 48488 34084 26584 43874 1207 62810 28895 54678 17410
+64686 38325 13705 47228 4184 61477 23029 54874 28108 43 59928 24250
+48905 4327 42088 16326 63465 33139 17771 38763 62231 7298 54582 31477
+65124 7928 37993 61658 5529 48695 36115 1316 41391 29060 49517 4547
+39960 31870 13743 62970 5682 51629 34836 20022 52438 9038 64411 28781
+38911 8553 52027 39705 21181 45397 18103 63599 33804 55253 5585 31299
+44701 3960 38207 52954 6213 40740 55358 21697 34304 40524 17861 58770
+41320 12622 43836 3112 41069 18419 44951 17238 47750 11263 38562 56808
+16317 59283 29410 55479 12312 62630 40665 4755 45194 12783 35874 62891
+11054 57093 14802 61066 6123 31133 57429 4292 55345 37366 1807 29207
+51868 23102 10270 57538 1184 64911 38249 19028 51888 16443 64057 8776
+41168 52467 15407 33474 48034 20451 40534 19044 50757 1811 57646 16310
+62173 25092 14442 60427 32447 47820 30366 7767 62748 26441 57424 28298
+53440 23924 41654 33274 4056 54515 13994 63522 10776 26916 62122 19271
+58239 32275 2778 59809 10170 26480 63582 23614 17616 47528 26201 6513
+43160 11977 42163 1472 43535 11207 50423 7280 63999 10372 39897 61825
+12388 55016 6568 65032 26822 442 51370 16428 42184 17736 47853 11466
+30764 57960 19759 41044 63547 16578 60363 27867 34327 53414 26440 4674
+54584 9989 26342 59692 40939 17072 62867 36657 19447 43266 20830 46343
+24884 49486 16593 65452 19498 53703 30223 13748 34543 56336 513 57987
+37908 18578 44316 1539 27207 49983 4508 24498 63165 22346 53791 10875
+43276 4345 47794 34499 8054 23402 50624 39418 6555 54543 10745 57614
+31679 15984 41942 4586 45307 32179 569 55561 24883 51548 19774 44681
+12093 47095 30663 38970 9118 34602 57608 21423 49450 27784 10585 55057
+29738 12669 46639 17130 41920 14870 50596 33500 20396 43518 26704
+13287 57830 17725 61302 15271 30275 58765 7638 50726 29299 41236 22494
+59925 420 44242 31295 21648 3709 59356 30984 16067 32668 62406 6134
+49978 26425 8817 20343 38791 64169 18352 56417 15769 25365 49578 16675
+32821 8490 63424 3352 49263 29813 5690 54090 27371 61162 10794 55397
+29965 36935 7005 63959 20435 31613 48171 8095 37154 21298 50876 31517
+17018 59852 23597 55758 934 25060 46535 30109 40114 23962 49764 15571
+34845 45962 23707 13449 35367 60705 6487 36029 47741 20724 49996 32733
+9276 46768 2125 44531 25696 48988 17754 29760 64989 9268 28217 56244
+6608 59806 15236 37356 27745 45162 11751 36376 52470 27233 8654 19876
+59104 38088 14359 43702 9101 46824 6447 65435 12476 56681 37167 18563
+43491 21413 38992 51783 13037 30310 38167 17059 48144 21783 34629
+46076 6749 37598 52654 2914 36994 56328 22128 60903 19017 52739 16942
+62256 19868 36732 24812 54410 15748 32944 41901 25480 37960 10082
+52426 41520 10744 48486 31239 55277 7407 65420 38730 15048 46350 3539
+33888 48886 6310 51915 2786 21968 62360 36435 18760 65264 36150 5861
+29551 46880 3546 25927 60186 15464 55974 12568 61730 149 40442 27948
+46128 3298 40036 63094 6434 28955 45701 24454 7806 48456 13273 59113
+39837 19073 57494 41781 12255 47969 2853 38286 25647 65322 18049 54944
+29471 63380 317 28362 61874 22426 42591 19976 38257 53593 12486 60446
+35833 15118 48033 18270 41579 11507 39671 2687 63030 15674 55514 19287
+60967 27224 11244 54008 1499 35390 45841 4545 48699 21334 35463 60056
+5299 55885 27530 932 58310 11872 53552 34512 30372 45913 7240 33613
+52194 18225 45751 26183 2763 55760 10274 38175 32065 12563 54826 36923
+49924 14384 41982 55328 623 36593 30181 14535 54346 32288 59900 29028
+246 50355 10547 34224 62687 11591 38672 60213 22921 42206 32125 16245
+65491 23891 37170 15370 30741 46671 24601 1729 57776 33255 14325 50963
+2407 40030 27061 64439 5987 39213 1923 48521 34933 9305 39109 30955
+50095 21204 4596 53656 11780 36264 64128 8894 20995 53090 28700 46737
+15385 31886 54108 4453 42514 12047 25057 54501 22036 59419 35046 5966
+32643 58553 1731 38957 23670 46034 16762 44323 30792 48419 9553 64692
+6241 54581 29286 4493 41457 65268 35969 2551 29366 54528 19004 61058
+35711 21843 32565 49535 7637 29201 60700 1982 57383 31409 6118 42055
+56065 4889 64269 8826 29971 61837 13837 57136 27482 11762 60275 30092
+9919 50425 3453 36305 29292 38046 5149 32388 49343 1916 42592 30335
+4511 59646 13998 56852 31098 15519 34075 61642 21899 3274 26596 45374
+23273 852 54751 28503 58729 14094 24154 42162 18988 59416 39273 8887
+44602 30888 1884 48107 21029 58267 15038 54470 42705 7263 50640 4828
+33596 38808 23336 50938 8755 34843 52152 11139 36390 23208 49729 16233
+40306 65203 26388 51929 32157 7154 46084 14871
+ </sequence>
+ </array>
+ </dither-matrix>
+</gutenprint>
diff --git a/src/main/dither-matrix-2x1.xml b/src/main/dither-matrix-2x1.xml
new file mode 100644
index 0000000..29aab5e
--- /dev/null
+++ b/src/main/dither-matrix-2x1.xml
@@ -0,0 +1,5505 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gutenprint xmlns="http://gimp-print.sourceforge.net/xsd/gp.xsd-1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://gimp-print.sourceforge.net/xsd/gp.xsd-1.0
+ gutenprint.xsd">
+ <dither-matrix x-aspect="2" y-aspect="1">
+ <array x-size="367" y-size="179">
+ <sequence count="65693" lower-bound="0" upper-bound="65535">
+0 48162 37632 16984 50697 28820 7846 64425 37420 20029 52759 13180
+46778 30985 650 57324 27274 16466 55035 36671 6899 45453 23687 52437
+2894 41412 21422 32368 53581 4740 28409 48442 20251 65473 2200 41936
+21113 35749 60467 12638 31852 47394 16110 58501 24933 39633 2370 47114
+26386 56222 6571 42820 26950 59825 13893 48999 25626 42799 1401 46564
+22992 61232 5177 33693 51857 13638 45589 20439 55050 12218 37036 62085
+16469 32129 45722 872 56381 28780 9713 50928 36419 19167 52421 10975
+34366 57497 1607 45333 26565 64216 5169 29190 59891 13832 42288 22116
+63796 17024 41882 1964 34588 48605 7763 61394 34351 1207 55279 26342
+43616 5905 38763 26997 47269 760 29261 60565 19508 44479 4188 36873
+46092 19172 50462 13328 35734 59826 6496 41515 21959 60729 16445 38191
+48710 13699 31885 59911 17353 43525 31627 10371 63694 37856 18135
+51444 34092 14183 57337 28295 9933 49344 38472 17310 36846 61146 8053
+33270 51595 18183 44347 7058 37713 65031 1631 34365 57760 6687 40788
+26111 49203 338 29345 55342 16108 39960 22744 48327 3267 59633 25552
+50992 4664 60484 10318 36566 46886 20370 57296 12184 39472 21598 51114
+14062 58877 23858 42810 2143 29902 62155 18133 42050 21843 37778 50876
+1649 28030 43799 6812 55878 37207 12604 42815 25325 60204 10204 41238
+22827 64898 15635 35752 46093 12084 42410 4827 54259 22726 31764 59819
+9655 37042 61138 19636 53496 5629 40837 23307 58268 14597 41757 5147
+62189 23296 40948 1734 60879 32569 13862 52146 26473 44478 9175 61428
+31186 4515 58753 11148 40005 25720 55379 14216 42181 22831 52587 7789
+44280 23791 55077 8758 32795 47900 18901 65222 35482 7538 51357 16473
+29592 63012 6321 43066 14822 60968 25114 47483 6637 50417 20808 29805
+56984 8743 44256 31053 17818 63112 21833 42616 6122 31273 65012 12133
+40370 24514 60241 2474 51151 11373 40750 23561 57134 14949 30629 43944
+4863 56646 33343 7597 45488 20327 56009 32152 12179 44218 6413 57522
+21470 35341 63464 14989 47411 20572 60580 8795 43257 14608 47028 25654
+53094 10388 31994 43399 15997 54158 27814 206 63320 31461 17067 36938
+51682 10914 45780 34436 2290 61944 24200 43270 14803 49656 27742 1024
+54514 29206 7126 62422 37738 15446 57512 28047 60586 11076 30232 58839
+4195 43834 25281 53940 2274 31992 42893 9065 61200 25249 45237 13695
+35288 63897 4139 41872 25060 58807 13308 32833 60727 17764 44427 10482
+63415 18523 35952 56714 9429 32956 52207 18244 44765 8034 51477 28801
+943 62161 34758 7733 52013 18077 63578 37615 13137 32299 53546 20761
+47561 3325 39187 23521 55836 11717 33392 59240 14408 36570 49643 16902
+29761 62693 18 41870 24806 52451 4247 28613 48603 7638 59371 25539
+39998 14690 64436 22184 44855 2397 31253 63252 16204 48816 23748 38689
+9122 50777 18427 34018 53026 2763 47476 32572 6185 50177 26250 60762
+14233 28174 44812 16573 50642 23067 39712 13417 63459 20875 49601
+11618 58731 21901 38747 8443 52870 32213 22643 62330 9638 30700 57032
+5340 43959 28499 18732 55082 34861 8704 51165 29798 4078 64529 27564
+8250 51538 37450 3178 54183 27186 7592 48596 30406 4406 53099 19500
+38100 63220 13502 27146 55724 2190 29034 46241 21515 63571 10225 31164
+56329 15389 27299 50510 11307 46635 22319 61325 13696 31832 56998
+18159 46456 5067 31953 60967 10425 45214 29407 13957 38075 44395 17230
+29530 55179 12 42693 25622 49180 5022 64151 26912 38643 9398 48133
+17186 55176 35536 12428 49827 4213 59466 27366 13810 63880 36194 19691
+52605 15588 27992 58060 917 49072 17754 37077 55518 3257 31185 48451
+8904 57203 28500 18129 51710 37861 15482 56042 2345 42644 24644 47982
+12689 39362 26545 62998 9433 31560 52831 19015 46480 33326 7541 54390
+24758 45964 10441 40947 22539 59386 547 39652 24588 54657 14839 35953
+46388 18705 51270 6662 34246 63186 3297 39644 26455 61164 12732 38702
+26995 58961 4088 28643 53505 12993 41951 24150 57353 9 45412 33395
+17936 56138 38077 9911 33546 43021 16358 62312 784 40117 24162 55118
+12987 39526 2153 49602 24494 56865 16391 43534 23411 55851 7811 31809
+42636 18973 61898 31378 4459 49874 36592 8757 63332 24882 48088 14387
+39910 24099 61718 1118 40866 25547 60801 16604 29797 54144 44 43317
+29595 7054 41190 25047 56341 17125 33783 64512 866 39495 21950 60857
+4239 29966 58863 11726 46829 24696 40941 5879 60160 19236 30570 57265
+13306 47882 21869 39177 8098 60610 34329 17228 57232 37240 11384 48608
+31281 4484 50290 19405 36225 25117 53647 15814 39309 20756 62581 9676
+35610 49340 16763 55609 23787 39363 6522 58058 22526 50315 10662 30503
+53829 18309 48515 1041 39687 22739 55808 5755 47338 24617 40611 61
+45421 22541 58802 6290 30368 61779 15143 39360 24439 54974 13703 45027
+21581 31106 46406 6044 28630 58818 327 40088 15368 64041 30622 19295
+58340 5844 50082 22039 40541 3786 54392 27433 6859 47712 35352 21365
+57905 8560 35127 64835 15167 42899 33515 11203 54457 20173 48071 6597
+32839 58367 12187 47001 22762 41290 4615 59465 14779 44265 24392 56415
+7830 39465 23536 57508 13284 38973 20403 54414 9010 36813 58272 4120
+32592 65127 10086 47082 30627 3052 52967 25880 44670 6781 41266 25077
+64636 14270 49801 1875 34286 53584 16584 41405 24177 61521 12137 45517
+26 63526 24854 40334 10428 54466 19413 34207 44386 14107 62497 28391
+16839 38325 59018 12325 35069 64817 23387 46714 1205 31411 50581 7558
+35123 48248 16189 56703 5101 40722 25224 49119 2875 33438 60658 17196
+44056 30228 4069 36213 52609 8257 43071 24073 64878 12734 41830 20913
+36436 57660 1344 34863 64423 7535 49519 33859 19181 62482 28290 8469
+35355 54756 18671 42473 1291 53468 25068 39920 6045 64694 23281 45070
+16155 36358 54721 7539 46950 30144 3448 37834 60505 9309 45242 33298
+20859 62847 7783 29066 44538 16368 60740 24994 39747 303 63146 31150
+6621 48044 19935 34262 64003 8043 30838 57348 3494 48957 17843 34524
+44733 220 65057 27998 11258 59085 38367 15035 29817 64087 4961 48600
+17072 29763 52723 10208 42648 22899 65525 2478 30451 57916 21178 44974
+11926 30803 57063 17965 42813 1857 48465 20156 52043 14454 33828 45819
+5883 61714 15976 40025 25613 55162 8941 49996 27976 3522 59783 29838
+11778 51122 22769 31780 58968 5514 45686 26934 61364 14634 35430 52532
+9832 30391 59281 1176 34589 46154 14979 53781 28078 9385 48072 24716
+57852 15619 40612 21389 53483 2679 34178 53959 10609 46699 30963 19464
+52386 5158 45937 37903 10447 49921 22487 61936 12450 52136 36829 3729
+49784 30156 9612 55095 26330 45598 13532 51953 37324 7437 42523 20013
+56105 13727 48505 26480 43946 1336 41257 25436 64342 5459 50662 18268
+30431 52712 3252 43830 22392 59065 14788 40533 24467 65528 8856 42939
+2745 34740 49432 6138 42824 24025 56409 14856 28175 42001 3976 65198
+18872 47405 33532 2768 40983 21140 62163 7332 34667 45022 16641 64768
+31354 11201 51473 36725 15091 61456 26044 54702 12464 38954 26731
+47817 2505 53125 21846 41880 10188 64995 36009 3530 51096 19128 56565
+36946 11945 50009 24561 44555 8484 52995 38308 10771 31710 45725 15287
+64615 30937 9901 60281 37203 18977 56097 10509 31954 51282 17416 27883
+49199 1810 60440 23170 41487 3466 61704 26345 40841 16614 50477 36146
+7896 54534 26922 39583 19982 61332 1111 42076 26969 64935 10715 43824
+25389 62549 632 43013 23224 48890 15072 28808 54817 19878 42620 7416
+56240 36218 14675 61986 18854 34648 57068 4592 45651 18125 39255 26691
+60248 9019 47019 29078 3140 51878 38303 19602 33899 47124 13138 56795
+23286 42382 1924 58620 25234 49618 6289 33666 56858 494 45990 21823
+40650 5566 56048 15311 37235 60726 18611 27501 58764 10452 42645 19478
+32411 59946 12660 37088 54944 19844 41700 6338 53795 23659 62933 15163
+41355 21445 59367 2717 38786 26888 54262 6260 48752 18749 28308 52076
+15006 27141 56166 4400 45460 12820 38031 57686 15549 32048 46850 11215
+60774 19532 33240 57145 11864 46768 29524 388 58488 31239 21168 42283
+11499 61978 25987 49401 14547 29666 54315 4569 42400 24756 53048 13276
+47624 33425 5689 52489 19503 46764 35084 13855 59088 25275 50875 10302
+40437 22164 52339 15181 41734 26099 61330 8737 51245 24149 39939 13511
+50501 34871 2913 56091 21164 33702 43477 8720 57748 37470 18622 61559
+5818 35004 48827 17345 44094 8455 35163 60755 17115 46535 5627 51569
+21454 30718 64393 7113 39365 23080 60449 10565 38929 26338 49501 3035
+64481 19712 32215 43796 13375 52770 21114 35334 65159 6029 44562 14787
+52556 21143 38734 7569 48031 26170 42172 3844 63529 21481 39564 13195
+48936 22758 58681 3300 34014 65474 19640 44439 306 35036 61025 7873
+29820 46187 17318 64382 27710 3879 58359 36548 13124 65269 27865 17392
+58721 34220 5996 45304 31530 18025 59433 27675 11162 57992 35367 18108
+41682 6434 61499 33331 16405 49832 24018 64916 2718 38922 21884 62181
+9873 54700 23541 38557 14016 42671 26344 59857 9876 40278 24505 63432
+7692 33565 52017 1665 45729 33275 20517 56317 44058 22707 63752 13116
+32551 51621 1266 37582 60688 8648 45732 30234 11564 51100 26318 60133
+12535 42880 24173 55631 14251 28397 50838 5066 42457 24182 57603 3311
+30102 43259 7104 50236 23367 41510 9684 63778 19623 31705 57057 5028
+45855 29498 20183 59408 15077 43693 27494 7237 62875 31592 17578 59682
+34023 2614 27653 62474 20086 54009 770 39370 25134 45128 16015 50397
+2163 40425 25769 61598 4781 37895 55420 9619 43833 26410 38885 12589
+53141 30636 8755 57320 28129 385 65110 29790 18526 56761 10267 47317
+25697 38565 14278 53290 20738 47024 5345 33037 51583 16729 29295 61561
+6629 37702 51216 2123 40592 24199 59943 17131 29040 50146 307 43443
+30572 13060 48597 25888 59046 7792 42966 22253 54894 15613 36106 63141
+10896 30040 57673 4493 27445 51480 6954 30891 61679 20105 39483 12374
+46348 22169 52527 16037 42073 25464 61858 11980 51231 20939 29238
+45556 9535 38426 53356 3730 30715 65241 22558 44966 100 50103 27637
+8624 63992 35229 14561 48506 38135 1166 31434 56300 7544 45236 25241
+50603 14894 31296 63158 12118 46162 33975 8813 61491 38199 16476 30028
+60104 20736 48747 2762 29509 65227 6377 40965 24508 50086 3545 43364
+28005 17703 61277 37951 14504 52973 6248 45759 24462 52120 2317 41024
+22189 65006 12050 31408 58615 18480 40261 1620 64196 22648 42897 14555
+61625 27556 9788 54628 37424 4004 43679 23979 60450 1306 32260 58023
+6853 47233 16747 38498 20970 58763 4568 55462 29358 17999 48884 36952
+10859 60655 19552 46953 27565 3518 50147 31670 22113 53244 11559 29768
+56028 23271 50643 275 39244 26175 62410 10076 35491 55614 15384 42025
+25197 56493 997 46494 18195 55574 31299 11715 37277 46846 5103 58456
+24306 39752 1253 54977 16914 39492 26495 56746 2510 41679 25317 64078
+11357 54704 19070 31620 50815 8192 44817 26009 61694 9057 38915 25534
+52524 6324 37865 55658 13100 28387 47329 18962 55183 9871 35025 41806
+15390 50729 22729 44807 8121 32847 49472 2753 41942 24905 50739 16290
+64038 1353 35642 48504 20779 43950 3195 62854 22817 47681 28512 1745
+58420 36700 10927 45917 26776 53200 8106 34655 44659 18906 49811 4772
+58049 20874 46802 380 33764 55016 18684 42012 12781 54334 19823 30189
+50002 6783 61044 14242 54085 7977 39814 26416 57250 10472 47164 19714
+27243 54239 15908 36833 56923 302 39109 20168 53321 6069 36693 48869
+1664 59313 20654 37052 61825 8514 33450 48189 21258 64340 13603 35347
+59114 3973 46009 28007 11093 50618 36444 17777 60693 8435 33568 49392
+1566 37398 54747 20959 40497 4301 50639 13726 38011 55427 16560 34991
+44034 9353 51036 23109 58893 6306 31828 63439 20423 46799 13461 34385
+48192 16633 29809 59926 20366 46136 5959 64005 21296 34253 45916 14446
+51519 33531 12889 48143 38003 3738 32721 63091 6955 51174 31103 3106
+60251 35376 18616 58627 9992 45712 35227 12921 55468 31731 18215 56990
+12445 37440 48038 5278 33376 64026 11377 55455 23392 39774 3640 51456
+19177 35331 65529 992 30338 50996 6773 40306 24750 49880 15061 38087
+64157 17412 35654 45049 11011 53632 28722 3592 65317 35853 8420 59646
+31058 4249 49011 38020 7900 33698 55069 2508 62809 27068 16455 49089
+37163 6761 52342 15626 35113 61540 17734 43455 30596 3202 58881 20699
+27914 51705 12099 39474 22972 61760 10570 34622 57230 622 42198 23758
+59054 3974 40254 21284 53613 1833 34568 50579 7906 41093 25797 51881
+16910 37316 56338 13738 31590 62857 10120 53615 35156 5359 48040 19972
+32691 63558 10697 39213 18182 56927 34721 8526 44796 26526 49973 6510
+37029 56813 15264 31579 53874 8691 36063 49861 2747 45652 29998 20650
+64699 12437 46835 35765 18567 51644 13750 39938 26990 64232 2251 42538
+25248 46707 14435 40802 6110 63375 22141 39364 910 53182 32966 15718
+63777 36569 12809 58455 1509 36210 62787 6437 41254 18882 33332 56689
+13169 43137 22830 49398 2677 32402 53421 12254 44661 35927 20866 62724
+6585 43119 23553 60125 16999 29411 49300 11012 63390 19129 32219 47703
+8188 61102 18915 35487 46447 6731 49386 23212 38563 176 59652 17245
+36526 53646 4894 32479 56419 17881 42175 11106 49242 29975 16913 59749
+36125 5091 62856 26326 44696 1710 58981 28563 6890 54858 34401 20586
+56518 13684 62182 21362 38865 6746 53878 24071 40917 14105 57466 28197
+9165 54499 36287 12068 52854 19504 44504 32364 5972 55673 20551 42090
+14416 59059 30023 3857 61261 22838 39919 11893 35896 63834 15938 28490
+47595 5662 61505 25582 38829 3953 59524 26182 41484 17332 30015 45067
+21726 60193 4636 30805 43250 14217 63267 35078 5121 49150 28379 9331
+64103 25118 43544 14873 62504 31316 16244 45822 29514 11447 51908
+18809 28358 55141 14520 39855 1455 52415 20546 30767 53853 15983 33575
+62687 687 40883 23529 52719 13903 39943 25176 58170 11696 28348 60976
+15927 44083 23412 65179 8725 30134 48570 5076 61460 29029 18639 42326
+11188 53652 24536 41154 3525 56801 28802 7931 65517 36882 1003 50496
+13230 35332 56274 17567 41932 2025 62190 24336 40081 5380 60581 24045
+53338 15989 41636 22249 45727 13159 56014 23152 41632 7553 50473 24856
+39683 2443 64493 20985 46513 4603 41974 25758 63304 9751 28322 54103
+15168 42244 26080 46335 7220 61671 31851 15851 57514 27823 10250 47743
+37885 13234 61027 21697 43463 2272 59117 32447 7993 28204 54593 875
+48501 18445 33108 55910 13497 45463 24730 39555 15423 57581 19620
+28178 64364 13777 42771 19441 36521 46304 11405 54578 27993 18397
+38078 57469 4303 29726 47880 9714 53611 19047 36691 55561 9131 33143
+64519 18472 44373 4858 53059 28612 16864 38328 54855 9878 30474 51115
+13475 43023 24010 63837 11224 39581 22849 61744 12422 33797 58323 832
+28382 48612 7624 44644 23121 40212 15073 58053 26337 51009 1434 41236
+25155 59224 5149 30956 48231 19251 59853 534 33092 62557 17123 27894
+49184 4381 41045 24837 59740 12802 31824 56560 18037 40852 7142 55426
+29491 4699 62443 24373 43271 5756 54317 20334 31971 49993 8204 61741
+22977 32714 51688 11875 42781 25438 57118 9754 45475 29318 6256 55054
+38370 19834 28726 47963 15897 43596 24307 59714 8182 46987 30413 4784
+58293 36315 19343 63518 8324 29605 59070 3848 32111 50237 15554 35906
+48167 2058 54396 34125 7186 44843 25717 53364 3966 41710 23317 50017
+10494 29664 57629 15728 32605 62217 13407 44005 23707 48433 11750
+27905 64839 20016 44065 1518 34534 62569 21551 54288 3054 41131 20781
+51072 11797 38675 23267 52570 13949 36964 61305 18230 47431 584 39494
+26957 46521 10018 55511 26799 42566 11906 60441 31110 5082 51490 38234
+16502 31639 65346 6987 27885 59876 14824 40689 25527 63108 746 32533
+51000 17587 43238 12885 55453 26017 51922 7078 43540 22701 56706 10211
+32800 42545 14155 55364 22104 47840 9083 35411 64478 585 32001 11921
+37000 49757 18734 58434 1929 39729 23186 55306 17055 37496 45993 12299
+52337 34558 3781 47199 21625 57131 6818 34415 65336 2680 46718 35777
+6355 60465 19801 47594 32416 11950 61241 4660 42100 24433 47453 13188
+57552 30950 5460 64218 20532 47661 3063 53847 32110 7581 51360 35825
+1155 46445 24801 57730 14795 41345 20977 35620 57116 1643 47493 16674
+36650 59421 12298 33093 52677 20998 40179 10783 57606 22733 32239
+47805 4378 29249 54344 19514 44060 7697 52189 34880 18830 43085 9787
+58027 31360 1474 60970 26549 39011 11434 63856 19296 32139 57027 13557
+47795 25869 38746 11857 60106 21822 47390 1056 35132 49887 20760 60815
+2778 38851 21437 52370 14164 38257 49306 6318 36133 56015 17867 28554
+52343 5742 46019 34236 20222 47380 14201 56013 38421 16014 62561 24077
+43564 5752 40232 23196 62939 1719 53372 34691 10561 51964 36401 756
+48056 25482 57152 6978 29574 62046 1541 33951 59692 8771 44175 24873
+55236 14898 40418 24606 63096 6090 41459 24421 49057 2217 40662 25844
+59216 14337 36824 49265 7100 27325 65382 18446 36490 58466 5327 28792
+47696 19299 55474 3326 31233 54165 9237 41925 22658 62359 16080 34319
+53268 2408 64508 31206 9294 44442 22555 61751 11731 36072 46034 17187
+54153 9211 40132 24282 52385 13941 39775 7517 54510 35499 19764 55885
+11109 42594 21520 63448 881 34955 53092 14195 45173 21069 33111 48011
+10501 55832 26832 38646 11848 59684 17737 35241 44151 1441 54921 16249
+30597 60113 4031 40053 23895 62279 13870 49592 22553 44234 4637 64506
+10514 53742 32445 3132 49433 27988 16793 64945 38202 11382 28385 48916
+15026 43676 23623 52261 13339 41189 21926 57153 8819 27605 63107 14084
+41019 21670 61346 12456 38686 27014 59179 14260 33224 64674 1774 42736
+22372 55274 5046 38960 26783 60436 3476 37545 50158 7144 29734 55454
+13961 46930 27424 8644 45411 31347 13921 58427 24218 43681 6007 63827
+19981 48582 3683 31039 42253 11206 63517 22282 51449 4811 38501 19912
+64788 2323 33971 48055 15906 43438 23714 58651 407 47366 20151 37665
+50478 3048 30411 54080 10214 46688 22855 40003 6353 64146 26931 38538
+1814 47571 18458 34296 62281 3505 30897 48823 19063 65046 1440 34404
+43610 12362 52621 27230 16430 55898 47234 25090 62261 6678 29021 46626
+15410 52591 33182 7148 61513 29755 2561 58742 19076 28933 60851 10817
+41553 25519 53908 13000 40885 24107 57903 15536 44205 25230 40839 7939
+58235 23073 45251 36488 14764 55715 7570 35875 51467 16828 46295 26449
+40706 10372 33994 42955 19031 63718 27163 12948 59300 38381 11198
+29302 47360 3214 62995 12679 50207 22598 32773 62269 7497 27449 50834
+18843 44345 5415 55197 25163 41766 15112 63145 8238 37252 58827 9928
+39430 25628 59709 12110 28708 63535 2866 48811 20500 37024 52246 15206
+44425 5027 48373 25254 54175 71 40637 22667 62297 7082 44441 26900
+53690 9345 30819 58856 18634 44907 8681 41072 24450 54568 12007 36016
+64284 1409 27452 59722 19560 41911 3302 62754 31882 16480 58044 27151
+8777 64844 37199 3763 29992 50450 11397 36271 60055 19229 51062 9781
+31841 48493 16959 27660 61327 6486 46228 22563 60566 10997 33247 53660
+14881 40412 24186 51302 13032 39061 20975 64664 7313 32766 51985 974
+45632 35181 13463 52530 17763 60257 36830 8374 31257 51203 3407 62016
+20479 31869 45519 1573 53024 16053 44573 33888 10091 59850 26492 42752
+14639 46350 23996 51016 4272 31160 55862 12026 42927 27311 17393 50493
+37534 4533 55720 18701 48613 29402 2859 57669 34255 20679 63733 3742
+42748 26257 60301 18707 43675 2108 65274 26663 38912 5495 50997 25634
+46956 16745 28999 58144 3011 36960 60649 16253 40798 489 65168 23123
+47915 3816 56337 28562 9989 63641 37359 20919 49259 10541 43980 17635
+52362 30254 2161 34802 56645 15376 39961 25147 46932 14024 38334 60443
+9342 34496 54792 1614 44628 23185 53064 6112 30967 61569 514 38932
+26806 65354 5402 30883 50994 16224 44414 35325 4845 47319 24179 55967
+430 43728 20747 50859 6385 39129 25972 53386 12539 34653 50460 9666
+45522 20311 56066 31496 15454 52899 38278 19259 61450 6528 36807 50718
+17371 64467 35102 873 52944 26841 40336 9487 45318 25363 59608 14701
+54278 26491 38824 8975 58039 25490 45110 12436 50116 22856 56991 7798
+30159 62667 10919 41705 17657 30707 55498 9495 43124 23213 61956 16118
+36931 52145 8538 33377 55966 19551 41999 10199 60362 24817 52891 11351
+40356 21991 58823 8286 39142 26590 46576 16508 58335 28919 3669 61393
+37942 8269 54798 2921 33812 52004 20792 42061 9944 64989 23670 44569
+13247 51306 21236 35375 49644 7482 40160 23715 56133 901 35784 50238
+19769 45531 8940 31044 63698 417 53694 34452 18093 51450 2782 29637
+64651 18976 44710 27847 1998 61716 34333 6623 58483 23679 48954 14637
+54476 4796 34932 45579 20080 51998 6705 36440 56438 18179 42543 25914
+39325 4507 55265 18121 45410 30656 262 63650 37168 16133 31722 60064
+2292 49731 28503 19998 52465 15984 32626 50721 542 46242 20598 35867
+54097 13241 45188 30332 6389 65406 27815 17586 33835 58975 8877 42805
+29649 10932 51784 36469 18347 57664 3514 41473 23502 51622 5577 36245
+65288 15758 31499 57287 6708 45479 28572 17044 48512 33166 7897 52943
+26115 46746 14010 37699 50089 444 35178 53953 18272 42067 23280 60819
+7444 46458 27417 2829 33753 55545 21845 45872 4789 37533 56584 13020
+43702 33439 16386 30187 50707 3260 44999 22473 63844 5221 42444 26500
+58576 2701 49213 23843 39741 11335 58040 19946 29928 62187 4488 46716
+29877 11202 56832 23692 45860 15116 34184 42910 11547 55621 38030 9400
+29362 63448 17889 49775 422 40030 20634 64933 6485 36389 58784 17563
+39413 20905 49389 5690 59147 36292 13337 60611 20844 33444 43479 7254
+65440 23505 41921 12337 49305 29970 15538 51262 33518 9776 56330 21940
+32615 48866 8428 45037 23103 58328 10581 36408 61975 8181 41677 22414
+51458 7582 30528 53642 20114 44489 11135 32985 42064 19430 52338 15089
+45723 27457 6400 56684 35371 21834 65323 8409 37360 59042 21057 42189
+7182 61260 29879 727 55627 20236 27385 51287 15488 42463 25321 63015
+10347 34595 56575 16228 42435 23585 54275 7976 47056 20160 36537 57960
+1391 28098 52334 20323 64209 10151 39512 26704 53580 11321 34692 62603
+17593 43559 7995 59489 28976 18094 62936 36227 1052 43104 10876 63925
+27350 2553 48187 35040 21887 57305 4170 28784 42668 10224 47120 21220
+61947 12940 34380 55461 1980 39209 21440 43509 5298 52939 23125 41082
+1540 61840 27033 38607 10418 41399 25771 52934 3318 36424 51039 21402
+63797 4530 35582 57143 12488 31228 46125 2100 59305 18543 28894 44982
+4458 57501 32873 17010 46101 2927 36171 55911 15317 42928 23807 49318
+5110 55624 31536 10524 51055 36084 14791 45611 22038 29149 63115 17733
+41376 5300 57740 26722 38533 736 55600 27017 40868 4841 57599 17592
+33094 64585 13458 46183 31153 10218 62881 27571 4449 52565 36937 17252
+48057 27332 11270 62331 37568 20815 49957 7049 33521 59568 12728 42605
+22022 52413 15992 44498 29783 163 62385 37635 16481 28707 61328 2482
+31633 58154 15795 27467 49326 8323 64815 21891 46772 10265 33540 60604
+13294 42117 22957 53877 9244 48082 23857 44912 11616 33317 60943 3917
+43234 23525 64687 11511 29795 58433 5126 42544 27421 16990 55491 36030
+10765 50641 38374 3357 46254 21902 61700 15963 54992 32580 6123 49730
+20790 31855 62934 13162 39923 20428 55637 28311 1948 50548 37270 19734
+62546 4154 34943 58647 11273 43533 22347 61808 9109 40741 24890 63717
+11495 28201 45505 4807 56876 12648 32779 52156 17215 37748 59304 8884
+40974 14583 65066 29850 18273 49953 27139 2650 63621 38419 8659 58937
+25160 39289 12091 55913 31537 18789 52822 9852 44798 34893 13770 60898
+26234 41902 7727 50660 22562 40281 15672 54384 26516 39390 247 64051
+22181 48289 5680 61089 27602 19342 57991 35180 6009 43473 22275 57146
+36741 13219 32645 53301 10636 29311 47611 1696 64077 24687 42256 10358
+29642 47176 188 54450 27484 15643 51343 36778 8898 56713 27729 1107
+54812 37228 6635 61467 25189 40713 4166 52884 17933 29948 62909 13427
+32986 48277 3641 30875 54194 12924 46338 27776 17564 61476 37658 4280
+58578 26331 47123 6633 62664 29685 2514 37876 60434 16815 31436 50439
+91 45212 28541 19033 47223 11730 54255 32614 17213 49897 35908 11058
+61989 37631 3896 31061 58224 6748 40206 21578 50520 3449 27957 59774
+12969 41914 24504 60540 10670 45471 18821 33948 60877 8224 42562 33301
+18223 49695 5289 58087 22488 45384 2917 30325 55568 21983 40198 3761
+51661 13031 30284 53740 21216 46684 16825 37976 56592 9779 31431 51798
+14465 38108 60057 16493 54696 26112 39640 6795 49806 30222 16669 64714
+26001 50380 8422 60956 31598 13818 55975 34848 18162 48287 5852 59643
+20578 43861 14715 61208 28101 7409 45803 29609 14023 49620 24987 42365
+6764 64455 20444 35861 47929 11485 54765 23380 40593 12578 65417 26379
+49473 9427 29510 63358 839 33653 60108 13486 40656 22331 63987 7033
+41533 25780 58978 11299 37193 8947 31118 54016 20143 44018 12049 60032
+22306 39071 9159 63382 20402 30859 45028 2083 51936 28289 6004 59095
+34098 16885 38327 57401 12619 28589 61098 9806 38190 56257 4812 28941
+45835 15558 54516 22503 39863 5167 56393 31985 9397 65411 36188 12286
+46966 22772 50392 10106 55067 21374 38170 47812 9261 35059 60137 630
+44350 31435 15322 54214 37400 2764 48926 24638 56961 6173 39986 21283
+64186 6956 38928 26835 54545 14299 47527 34628 7160 37904 55882 18389
+33290 49569 9423 62688 31313 1170 59903 27212 19066 57431 28576 13767
+49912 36503 1792 41440 24435 64850 14234 38043 48315 831 29841 52858
+7403 42790 17274 61391 30076 8438 46633 25472 53562 14468 40522 24440
+54947 2539 38743 20904 53412 5394 31102 48557 15832 58936 24277 39806
+19841 44604 1519 63947 28931 15469 47449 25988 51719 170 36836 58251
+7813 34673 53585 12312 28324 51539 19289 42999 6370 50061 21747 47036
+389 36796 63170 16322 28611 54753 3363 43218 18312 56569 31412 1778
+65103 33942 6584 58577 20749 44517 13167 52634 29229 17074 37684 50333
+2380 42209 15235 54611 25544 48452 7784 28574 62605 3041 44099 25573
+60239 15100 34542 45672 9017 57376 33969 16972 63312 37954 11374 32446
+61086 3287 47306 31116 16459 38146 62345 18985 45144 11606 34465 47936
+16605 59521 12235 35931 55027 54 43114 21288 56287 15746 40570 23725
+64829 1678 34369 48985 9693 28885 52823 14324 39579 21763 50851 12687
+33805 54231 18824 43287 5187 57840 27195 14254 53346 32996 5750 60795
+37872 2735 27590 63965 6512 45804 23446 42192 14990 53363 22428 48029
+12726 33400 61052 18420 46352 31909 7417 36222 55312 2299 39256 26361
+56249 4633 49113 16690 29594 53741 2580 59967 27009 41312 13521 32713
+61574 18408 49156 10080 32809 65414 15563 42049 26260 61151 7536 33870
+57502 4337 27858 42377 18900 63264 358 44698 27629 7666 48475 33956
+2785 60554 19567 36006 57165 4500 43083 12166 29842 47267 16166 38382
+49491 4016 28637 64198 12731 39104 26947 54554 935 35114 47553 11644
+57622 19831 37003 60557 1218 54435 22032 39899 14922 51213 27632 7728
+60742 31506 92 52505 34853 6730 44375 19482 53890 37500 11627 51189
+27886 17075 36461 53509 2471 46109 32972 18491 52949 241 47585 40046
+24662 60553 2199 39744 26215 48134 6036 52935 25802 43437 15972 47927
+7032 61123 23205 41348 15918 54810 22002 40094 3069 51345 19120 33127
+46545 1821 52980 31677 19019 43598 13088 58892 31200 963 63606 25500
+46940 14277 28459 50972 3307 41469 24798 60249 5891 39212 26851 44132
+7125 64307 17911 28154 53775 12429 39853 24252 56049 5260 28940 61134
+20526 43026 11418 38853 26796 58660 3278 34321 52091 18601 41258 1276
+62855 20332 28879 59414 15574 46924 2465 39608 23763 53149 13787 37223
+48087 8647 38462 53533 4473 34737 63440 9986 30109 59338 19279 44667
+4843 51462 27856 11491 60903 35452 15305 59475 26074 47159 11071 34887
+56371 18130 43766 208 32204 64992 7120 42415 23227 57087 12373 33421
+60145 19042 42996 2145 50767 35964 9361 61177 25777 48440 10332 34982
+57346 5204 42381 21393 56181 13910 40707 22876 62135 17355 36590 47217
+1326 60004 32455 16518 65455 35792 10507 57005 22675 45578 5430 33489
+48089 20269 61827 28190 9355 38346 48840 14703 53456 24180 42488 8666
+32505 60522 3778 36190 57398 8050 30823 63213 21179 39248 4446 60866
+19649 37486 46566 15779 52160 22025 40882 5040 55378 21305 30593 53061
+3659 27543 51419 6949 44651 22497 52950 13683 40174 25014 58671 11017
+52102 4683 32722 49857 22946 64145 1930 30893 44550 22477 50795 9179
+38820 26316 60804 5316 34879 52654 11000 43689 26445 57274 15276 36251
+63937 8463 31278 48719 958 61008 24216 41192 9667 64583 22228 33415
+47677 9253 38364 62930 16336 43442 22911 54884 13420 34762 51442 18235
+37938 57793 2086 32669 64783 8967 44250 24725 55098 955 38971 12006
+63642 22153 48775 16898 29765 64570 9006 43725 21531 32617 62505 11979
+44828 23750 38540 9421 56141 23178 48389 7038 40482 25947 57192 695
+44421 24534 54184 5162 39627 22303 50027 15156 35711 60316 11673 48921
+30607 20938 57774 15815 30565 65238 13324 41989 24475 54049 11296
+45925 28402 17832 59033 36763 149 62801 27462 9162 57589 36467 19309
+52181 9516 44519 21238 63235 15621 31104 53797 3924 43375 27121 16417
+48086 30100 8767 62589 33030 3805 57967 37355 17080 46385 22226 61839
+14442 41369 25700 59535 3399 31580 62461 18729 44996 5456 57984 29370
+20673 61247 12129 42560 24903 64755 15308 7432 45235 19565 56023 32122
+12907 62800 36844 17948 57221 3277 40273 26458 50284 14090 34903 56299
+8574 30776 48468 13920 64243 23819 42200 7026 60199 22430 40490 8786
+65052 26384 51181 7861 35719 49704 17860 42211 8382 57058 37051 16707
+58799 20461 48744 13422 31831 56919 1918 51038 20716 37518 55699 3980
+32788 50479 19820 63217 10759 46204 34934 16026 52463 7299 65283 23441
+45060 13900 50543 29581 10664 56122 25918 45345 9588 50148 36508 4554
+53884 26052 43891 17189 61455 5920 45996 27066 17975 64405 29486 14765
+49236 22602 44756 17931 52560 6980 38959 25938 56867 16834 37080 53925
+6364 45168 23801 39473 3264 53440 21943 39450 5420 62121 22913 51839
+15173 39389 26402 59245 9994 45601 27005 51267 8199 39617 23543 64611
+14410 29739 55543 5610 41011 21666 53542 16190 40285 23566 62374 8170
+33569 49596 3425 44492 32401 6026 57665 22080 42053 9702 27650 53937
+3660 44053 25465 40284 13470 59510 24930 40175 12371 53077 6918 37726
+57688 17744 27432 46437 4252 36101 62412 14027 45461 21811 51771 10495
+42459 24684 47933 12588 53299 26071 44968 11088 51144 32245 1308 59289
+30739 9669 61995 37151 18698 49155 11572 36753 62905 13827 40205 25362
+59743 2278 38619 26901 64746 5978 46210 17916 29493 43207 20799 57079
+7799 29076 42547 18329 57670 5760 33418 64488 20015 44128 10132 50011
+29103 18800 58882 6716 39306 20519 51073 3112 40812 22699 59559 16472
+34489 43451 7157 56781 25589 39313 1793 51082 18280 58808 27676 3216
+36091 52099 7889 40291 25259 58530 8738 31244 49022 13812 28669 51829
+19053 41195 5470 32609 45653 16903 57224 26729 47248 4958 37606 53871
+11080 33423 50755 15708 57525 136 40376 26655 51417 5660 64987 19930
+46741 1533 33588 63419 11654 51409 21323 38497 13560 58836 19996 48535
+11170 31715 64119 1418 43614 23823 54712 6184 34796 46926 10361 53696
+37877 4849 51586 21556 48065 1245 32993 63414 8140 52159 31900 19374
+46524 13018 38148 53490 16831 29873 46007 2129 59136 26244 39760 5201
+49818 24551 41724 12678 65133 32564 5759 58991 37419 19477 52599 12170
+44565 24521 41202 9464 56507 33866 5284 50869 36348 10907 45170 23218
+56100 8508 40388 25625 47723 14491 38044 49741 6303 30202 56111 4138
+35221 50276 62173 34017 16072 51214 4733 45765 29325 10217 50703 20671
+34970 65453 11294 28974 59840 114 40359 24393 62115 4205 35231 44279
+11449 53510 26873 39119 12327 55871 24166 44984 2969 39593 20210 59863
+28052 4240 62146 33308 21324 53459 1390 32831 44950 7487 63458 25442
+42829 17082 33523 61974 8855 29125 48518 16506 43517 6212 38957 25746
+58349 1728 40729 26371 49950 17866 38524 843 59780 20001 36755 62132
+5160 39634 17964 58332 31524 13315 65061 22983 41457 10348 51631 32038
+19713 56550 38480 3206 35383 55116 7603 31880 61931 654 40543 25159
+58077 12869 47586 32235 2046 62386 19828 30250 49177 10613 63984 19017
+34065 57652 10186 41583 25891 49020 9375 30328 54430 4526 47484 20668
+38576 1223 62836 17945 32297 47035 4349 52275 19447 34117 46000 13155
+63347 32339 2985 58482 35863 12273 51031 29501 15902 64057 24656 53322
+11481 30611 48928 15253 61666 35305 17139 49153 21176 62593 6176 34690
+52140 1958 31445 64392 17099 45337 30058 672 36509 63473 10640 50135
+29444 18429 53867 2080 39266 26849 64822 17958 38888 778 59925 32433
+7413 38298 64440 17526 27147 56213 14326 43445 23423 50490 7257 28922
+58132 871 45317 20552 31072 56576 8296 41694 21030 55652 9974 49365
+21688 34124 53275 601 63072 13504 35503 47168 15230 60485 32262 10656
+49490 24626 40369 3370 56728 17547 35590 63359 1255 32711 47651 22993
+62490 11508 42883 25750 54005 5881 45999 21382 53126 14620 30048 46880
+16128 61534 37467 8142 32496 46075 21328 56189 12431 31511 64966 1140
+47460 21290 41592 4416 62628 36867 10673 59328 26013 47438 13438 62341
+30083 7824 41535 23238 59615 14558 27943 61824 3681 40849 22690 47166
+31049 11365 59417 21992 39317 13065 42788 26502 58674 15506 39337
+26892 46381 5984 60509 27039 42804 2671 35607 56204 16539 40757 25280
+59286 8907 39767 22059 62720 3222 41702 28206 17806 61069 36128 10651
+29638 58580 16274 39558 24412 42643 5758 56996 26589 49208 3412 32150
+65508 7411 51023 23909 42439 13068 34725 61685 17877 56245 7912 36312
+48653 15215 44114 23209 54029 2596 32074 47450 18073 64814 1502 48580
+29770 19811 63166 16195 28672 58280 2004 48386 21056 38636 16223 51722
+1151 63476 27628 9712 59268 37229 17043 52256 27827 11512 44449 984
+41438 22929 63928 17165 35130 58649 1483 46375 27735 7605 51794 37952
+17294 32336 54136 9389 47718 28165 17618 59419 32116 1117 62716 20624
+48797 5435 32821 61604 16841 47738 32539 11104 52185 37200 18761 48796
+11826 40945 26256 60780 10216 39983 22405 47379 3748 53359 14099 40830
+23453 57332 1114 34049 60342 20535 51323 12211 45059 31728 18957 62541
+5838 43741 26987 54577 9634 46488 32155 14919 47957 24278 53045 1912
+44078 20809 39303 7339 55382 30032 180 63291 38256 11043 28795 60242
+15868 43767 24126 50910 11713 35386 54705 16351 42270 4243 60201 22753
+45826 14866 35096 55398 4939 42469 25618 50648 1354 28962 47842 17415
+58541 2907 36525 63646 16305 41966 24042 61302 12999 48912 25467 42220
+6801 58377 21331 37211 60469 567 27252 48780 8480 28251 52649 19285
+46923 27553 1126 55745 38145 9189 45584 19800 36012 60379 2112 44193
+28310 5747 55421 37438 11528 30181 54337 15045 47373 24059 41466 8860
+49362 25312 59867 13516 44430 20060 33061 56901 6280 42002 23790 58969
+16371 49157 5855 33625 56784 20932 43040 15036 54245 28412 2836 49040
+36471 8516 53096 33254 3496 37844 65151 16608 33162 52065 15648 41938
+4847 46869 23988 63951 12542 45834 24718 40464 4334 58327 19439 39613
+26195 44867 6147 55636 27348 2964 53553 37249 19339 62159 13119 45622
+26690 53284 11741 40181 24197 44801 14192 54769 5130 30155 56916 18971
+39063 13656 58200 32294 2598 63742 36192 5461 54826 12008 28406 49980
+19736 63409 5914 35138 49245 15901 44494 29090 10227 59878 24064 46346
+16342 28085 53184 250 40087 21397 55795 3261 34733 53121 20299 43853
+1724 51220 36935 18428 31111 50049 6300 63921 18161 35612 53076 2838
+45354 24358 55189 6664 31237 50505 3579 56853 20312 38683 10633 48113
+22845 61899 9606 29368 50797 5407 46290 19258 32942 52877 12742 45045
+24779 58057 13886 33341 45929 7251 55384 25088 43757 4100 51200 13826
+61617 22779 38995 10616 60345 21840 44511 15005 39653 20152 59990 8556
+52885 30065 2857 45263 31892 22105 52176 288 29217 62304 9621 42037
+26511 61039 10356 39756 25897 55244 14081 36528 45679 4344 53407 38233
+12800 42666 26209 64418 5771 55188 24510 44601 13270 32340 54014 20446
+45735 2674 32802 57531 20267 25607 59861 14210 30974 53071 8575 39554
+23817 55130 13336 32893 61930 19267 43280 5075 58432 22483 41725 15239
+56512 36329 6706 50999 25423 45947 9493 41149 23300 54604 14071 29265
+56692 283 41893 25007 57871 6719 31681 63127 3456 45629 18352 55935
+29913 12177 59335 37307 20431 65097 5956 45009 30502 18675 52972 9660
+42224 23149 64567 3628 37040 53219 14685 47503 22573 40219 12981 56411
+28648 4148 63979 37561 9007 30260 61837 15864 46533 25453 59828 12778
+35061 48657 16652 27347 52610 6678 46734 33095 2135 58831 18469 42773
+28914 9623 63900 33778 18989 37414 50965 8156 28786 63053 12213 39836
+21089 59167 14673 37489 64572 12126 34771 45309 19303 50917 28000
+11669 55549 31081 5255 35989 56324 15398 30132 53549 10511 45030 28709
+14901 38368 54316 17659 61530 36322 14307 44195 6769 64883 36721 17700
+30430 59134 4452 48405 27480 12505 51883 37614 14532 64691 22740 46267
+897 59757 25923 42524 7271 62277 18850 33357 55314 5015 39125 22009
+54164 3551 47887 28389 15768 61687 35357 9100 43448 26034 54795 12304
+46008 29799 4914 62790 37076 10603 44612 22379 61705 16635 28548 57476
+13365 47685 24366 41144 10421 60669 21133 54695 29816 14120 51124
+37110 1193 32030 60998 14060 47666 31895 7129 61565 16778 50331 34425
+12313 65116 38471 9465 28770 52111 750 39191 21714 57301 4640 31763
+50383 7415 60030 20091 34851 49440 13135 42024 323 65476 26236 40395
+10210 45310 22438 49669 17330 39735 26470 59896 609 43273 30786 16983
+57646 28068 3931 61160 36597 18643 50665 32360 7618 56102 38195 14725
+32143 63138 9753 43054 23981 48439 10831 65084 17340 31311 58738 8247
+45481 13340 55732 25058 42890 9160 49550 20754 30216 60178 10368 36958
+62380 16788 44699 24164 41237 12670 64351 25540 53050 4685 32888 43765
+13288 58054 36751 15915 65062 29189 2173 56129 36709 8213 29490 48201
+739 62445 22492 41905 12486 36815 64917 19906 33578 45124 1655 55701
+24382 40695 5482 54940 27025 50019 779 38654 26769 43358 14208 54874
+20485 64067 10391 34954 58435 16027 40642 23724 56667 6689 38814 21199
+57799 3633 28938 43571 8532 58728 27519 15401 32896 61350 7382 49393
+19457 41103 33219 9128 60855 37581 4477 43462 14983 65306 25757 39843
+6559 49465 8878 37800 49048 3643 42975 24940 59429 5869 47181 21234
+39480 2504 53702 24495 47266 13028 33456 64414 1732 45006 23439 40184
+14095 57802 18448 37027 63294 2545 33682 49450 8561 44143 22663 64688
+10252 39879 23511 54771 15300 39478 24614 50235 6328 35904 52732 505
+28135 49190 16160 35511 50780 10644 61715 25418 39651 7185 49147 29205
+17457 57132 28076 7991 61478 32263 2360 59193 35812 19543 49735 16321
+41389 25690 54119 6639 35240 51305 2961 40976 21994 57459 5606 36620
+61088 20617 41737 13389 64901 21413 37375 47414 5294 53146 22936 45882
+2659 30756 56500 14141 38203 52714 336 43973 26151 53687 6618 31569
+43808 4085 55597 27235 7786 60530 32863 780 37943 47162 9029 59653
+21709 40456 2074 63121 34311 18780 50159 3358 65432 34866 7738 29904
+45439 3869 56459 25532 39551 20575 54723 10739 49458 22480 41584 16416
+61411 33801 6473 57110 24571 42266 9510 32069 51354 13041 38927 20633
+53202 30773 2607 46457 23128 61293 10008 40963 26468 65275 11550 37569
+51602 1179 30366 48463 18953 63764 3158 40127 22909 59350 15716 48246
+19388 29469 58484 6161 35086 49752 106 42240 22235 59810 6351 45559
+32343 2113 47415 37274 9151 62211 27302 17600 56952 38252 7959 28837
+53659 16038 42392 24476 55261 1768 29870 48729 18714 36291 58947 15615
+45099 23966 60897 8865 43326 23068 63825 14950 41168 25350 46272 2834
+61269 31050 20652 52525 35660 7044 51264 23736 59111 12398 35128 62782
+4353 45029 20996 55591 14482 36788 47829 9971 51652 22893 39406 14180
+55196 1839 42962 22879 64244 4949 50222 27263 17755 52206 36038 6699
+57487 26635 39425 4071 54626 19190 38943 26833 60985 1104 38617 17484
+62825 34477 4414 54787 16230 47847 29036 569 34605 53078 8416 57573
+32037 1711 45347 36136 17431 63133 21804 46878 65 27422 51620 7833
+42534 22481 47197 14931 63633 38418 19840 51914 16105 31907 58341 2654
+47822 28789 6915 53945 16939 30358 48981 12150 62086 26399 38504 10131
+63595 22857 46896 11850 61029 25013 39423 6269 46655 24961 50183 8380
+28444 54852 4440 43224 22496 51919 12485 33406 49193 16019 63693 35056
+20226 51612 621 46310 37921 17418 30459 59668 3031 52772 29000 16499
+48497 21265 58320 34005 10834 48119 17689 61816 31672 56967 27561
+12117 64625 32794 14962 49760 36204 10776 61220 25944 41739 15027
+63491 36456 6259 51492 19999 30496 53269 10679 59984 34228 4601 50171
+28909 12575 53051 27216 17173 59327 37910 4369 31914 53001 17655 48042
+2118 36182 58279 12835 30853 64367 19783 41472 15063 61051 31933 4880
+57831 22048 41556 2575 31674 54471 15160 58687 33442 87 46398 36069
+20344 51145 11590 43278 23242 52603 8239 32851 60860 458 48483 21064
+58809 14672 32519 64328 12215 28910 50691 15462 45467 27897 3598 53597
+34277 8431 55754 27879 15002 61651 36421 8839 58516 25437 42612 7285
+65244 27386 17002 31514 60695 9757 40844 24154 61902 15774 46985 20020
+30272 52861 13542 44687 24549 65158 16940 28695 45284 13989 52366
+26204 43414 8765 56745 26096 39888 13697 51318 24886 57859 12522 31940
+47801 16587 60132 2409 41906 32440 7509 62904 36679 318 29483 52913
+17421 35703 47295 3002 58425 21316 35471 63879 4425 43798 16312 58815
+35252 11160 51281 36839 16947 57963 5957 43372 22661 56259 14652 41308
+24006 57953 7030 38577 26709 50811 8481 31182 53787 1658 36076 46767
+13722 55181 27091 17846 63525 38282 8300 29306 50784 18264 64173 28300
+12223 58261 34327 3904 48396 31057 10804 49197 22420 59435 2796 36415
+63640 8599 32820 43601 10366 56251 27144 4028 47635 30772 7243 36980
+54179 18778 33643 49071 1602 37364 53526 10499 34069 56315 17935 43852
+8396 28317 62308 15971 43590 31587 1917 55199 28437 9291 41667 24328
+52211 7240 28835 65188 2840 41052 24767 61945 6341 45801 20582 58630
+29463 12292 38386 47147 9038 33320 60935 2537 46124 23575 41198 12623
+61645 20581 33516 47087 5704 52594 14186 41328 25794 46646 9938 57133
+20185 31930 43841 7369 64640 25830 39642 13877 47511 20706 28731 61070
+14768 52096 27926 7141 53801 37521 14249 59074 33613 17901 60894 35416
+10168 50769 27573 4630 34811 59986 6393 45582 24463 39525 11479 56577
+18765 35348 59267 8747 39328 23797 44805 2980 57807 21227 40622 6879
+55918 34697 3743 49342 18260 57747 29471 1853 37764 62803 13964 45604
+31339 16398 64245 35742 1043 59794 24969 45249 5009 40951 11503 61772
+22654 28546 57160 6056 47619 23414 43063 14222 37012 62944 353 41781
+29972 7133 55879 35709 1898 42613 19702 4931 35912 46756 21209 55343
+447 29267 53950 18866 44324 4162 52826 30815 10154 49496 27877 16577
+57163 38235 3451 28536 46990 16361 65209 21675 36380 43309 5858 57565
+35851 11282 45861 21852 60307 12564 42502 26442 62026 9636 28641 50894
+3860 46192 34295 8086 54135 23004 45730 13774 33733 48777 11521 62964
+21091 45708 5512 39087 24415 64091 16207 52743 6083 39124 26164 63460
+3888 30615 56212 12481 43174 26483 38857 10064 44407 26272 53445 8040
+46834 34607 1421 56173 38015 19709 63576 14562 46331 23167 40666 931
+51516 30357 16962 48927 34180 11970 54332 20100 38383 49907 4434 34819
+46237 18979 57444 2297 32508 50920 8585 37982 63285 3164 40758 21309
+51679 6636 36364 57848 3963 33768 60948 10886 38923 23733 48423 5443
+59912 21973 46979 1447 39757 23126 62017 6134 38573 24119 48592 15174
+53927 23590 42822 12871 56685 22095 43877 8096 63316 19604 31443 50056
+11256 45486 18681 29635 56484 9115 39597 21243 63031 28847 43 49037
+30890 19315 52894 36320 2929 31839 60115 11044 44626 20404 55150 11916
+34348 60697 17144 42619 24596 65509 7734 32980 43912 3688 51727 31064
+12903 56586 36530 15507 44076 4558 54043 24942 40911 14756 55890 19757
+37735 65349 5175 44321 38403 18290 27262 50694 15034 46610 22123 59991
+17615 35019 62682 14122 51750 24851 42328 5188 64853 12124 29753 58051
+15711 28555 62037 6427 27455 47941 12733 54955 37577 4040 47655 21687
+59995 13924 36355 50710 17781 48269 32723 11755 59558 37432 17356
+32073 56803 12226 42964 35395 16516 48829 31793 3740 60585 35193 18991
+54688 28790 11907 37806 58595 15362 32284 50935 647 44523 27662 10269
+56416 35485 21148 65492 6763 51956 23258 40024 1916 48857 24169 53710
+12382 41799 22330 59509 5267 54525 10282 36850 42798 4032 48691 33558
+11910 56443 23112 41516 6054 50010 28071 2883 54417 37755 12552 57038
+38488 16951 29937 50093 9296 64318 22873 31532 48558 415 41750 25827
+63994 6246 53653 18412 31290 50723 14805 46014 28658 12490 64851 26174
+43900 11049 35454 60321 16640 32797 50812 3272 27107 55697 7696 43805
+23193 51326 13067 31471 55047 17520 47178 31139 8338 53207 16462 35759
+64890 11077 31570 54533 9407 27930 56617 18088 50998 22506 43884 13856
+60346 24957 51974 30030 62333 7744 41564 17373 34244 63205 9255 39027
+23250 60511 12683 37860 55817 801 45489 35763 8638 62522 21894 40768
+7932 52462 33121 553 55546 14862 47391 20816 29475 63963 1521 50012
+25645 38935 5584 51940 20075 45172 37192 14626 55703 27084 18006 59009
+37304 1761 63814 24771 42956 6718 53808 26186 38587 13006 59244 19908
+49542 9902 42113 26775 55837 13586 45207 21582 48881 15650 41126 24222
+65206 5667 47276 22107 61630 3394 31539 42107 19780 59996 27081 11642
+49743 29580 4267 37063 58267 7704 31783 62718 18808 43351 4896 59767
+22214 44739 1588 62204 28353 15467 58777 27050 12358 51993 37887 21337
+45553 14344 56698 27819 17692 33738 57412 10274 42182 26586 54222
+13204 47528 20028 30740 49679 82 64250 19352 44634 31028 8330 36023
+63450 18516 43522 9780 53262 26955 41281 10488 64319 31117 3984 58618
+26253 39948 5113 51613 25885 39419 12832 56263 29087 6863 61010 37045
+1619 46779 25537 55174 6244 44957 18519 37992 60576 13853 42499 7992
+63283 25876 50078 5779 39103 26984 64724 445 49341 24669 39678 4567
+52278 12630 37769 55947 16215 27887 61401 11414 45951 24069 40416 1505
+60969 22798 31759 46538 7966 62585 35816 481 50416 27599 15553 52442
+29213 12142 57925 34566 6298 54925 30947 230 37237 51137 8097 44156
+31777 2120 59739 17709 46247 35968 20993 47500 3553 38060 51356 18437
+44775 36529 1063 64267 29777 17257 58016 34526 10040 41699 26452 64742
+6257 30964 57315 1281 42989 21642 54237 5347 46055 22522 50828 402
+27711 63268 7442 54038 24472 40052 15093 48019 1211 64541 22843 44252
+5389 55583 28860 9268 64052 37060 16235 59879 22933 49339 2707 29930
+44121 15107 62143 28743 11255 57908 33479 17425 61301 3059 32229 46170
+16638 50070 33345 18292 65297 27130 15452 59953 38463 2031 28966 61735
+19247 43901 11457 64539 31709 15560 49145 27157 1314 62174 36651 19136
+52880 3850 42409 14973 61294 21503 52214 11969 33420 48313 20427 42584
+7806 62714 33207 1382 56643 37213 18898 48120 5543 54583 24517 42114
+9008 53650 19379 47371 37985 11461 32023 58587 19210 39049 6348 65192
+23997 40159 2773 60377 21702 32883 50453 1615 45802 22087 58915 4730
+35224 47257 12384 40453 3578 64180 26580 39275 10100 46077 18603 35153
+15789 56513 24719 51420 3243 42696 25642 57418 5518 46353 34646 15947
+27374 59210 18463 31312 50452 12658 43697 25921 60902 11248 46205
+28418 19322 62066 37279 7296 55019 16629 34374 43743 8774 57170 18039
+34393 65315 822 30343 59814 7331 38343 51666 11939 29556 48081 10009
+37971 51550 17913 30922 56536 1210 47722 26968 39625 4278 60965 22864
+38583 2169 62265 31980 7443 57475 34322 1254 52056 18596 31810 54324
+13139 39242 24830 58009 11168 48639 6028 38344 62388 18662 33336 56857
+10123 42930 25347 49494 12347 54945 24874 38964 10653 53470 32830
+17714 37716 50652 6912 47008 35980 3572 64672 29741 7540 59949 34507
+527 54402 38422 6066 47861 23683 60363 1580 38969 22651 62177 5778
+41801 18188 55884 29435 11631 38113 54079 16879 47975 28625 4684 56932
+34687 19399 59513 817 44393 21073 36266 51130 13579 44323 20117 65340
+9805 33193 59918 1089 44956 22381 54253 16115 41109 23440 65017 14162
+34346 50274 12036 57560 27403 4854 34278 54946 21086 40033 12724 46607
+24384 53684 16096 41941 21824 46298 8837 62689 33329 20315 58899 29146
+2334 48983 35611 19234 52992 5148 32316 57115 10144 49158 19307 39080
+12702 52289 17208 29529 56783 20801 45433 6990 35174 60542 1858 41227
+23612 61779 13808 45362 26241 64662 11686 28366 54002 15465 40389
+23734 56597 7543 30471 55041 14052 62831 27300 9222 59295 31691 13524
+49536 23355 41957 5714 52715 24268 44970 3007 53967 20442 47075 12925
+40140 25549 61831 13927 39372 26535 64153 8905 34163 58382 15325 43745
+33334 18502 51283 9586 57498 27016 42258 13333 34469 53391 17251 41745
+22037 47888 14486 53300 29907 6105 45581 36868 17242 59225 33197 7723
+50561 37159 19060 45851 5513 51522 36902 21373 43001 8035 62582 27780
+926 55985 37888 9148 49449 32119 17167 52528 37924 8454 32671 53447
+23756 40143 6802 57651 21253 34101 44896 9980 55017 24899 40617 13271
+56057 26733 39070 5312 46316 23471 60662 2270 29225 57093 16255 40093
+24123 52707 9558 29924 61501 15457 40098 21280 59470 550 38668 26365
+57382 4755 29336 63354 17184 42355 2286 56906 26706 47781 10797 35915
+54313 19157 43088 11803 62134 25886 39984 7761 43604 24865 53508 15790
+60733 21960 36343 49280 8057 32192 57357 1220 49800 11861 39736 6131
+45148 20514 61515 31090 13888 50805 19797 29210 64950 2882 47637 36853
+6586 63771 24763 54968 2019 39143 17292 34016 58780 3964 42719 12227
+50987 23243 30902 47837 5115 61097 19778 29865 54302 10678 41044 21970
+49681 16282 45895 27720 2811 61244 36660 16467 58084 27526 4093 62054
+14517 40817 21657 65489 9142 32670 46868 19336 53314 11241 44229 25783
+50933 20460 42341 10545 60016 26196 44965 9756 35426 62963 1801 42568
+18910 55331 36325 15826 28404 45066 598 52753 16677 39075 21052 65339
+2337 33347 45430 6409 60318 26748 42016 3299 64138 30208 10337 57211
+21980 27838 44308 11603 53881 23233 40484 16003 47305 27257 11475
+63534 37082 15307 31381 53012 11040 45825 24388 55045 14472 35462
+46687 7085 58960 27244 2215 61418 37288 14276 52085 22250 46508 11689
+31623 50551 17631 60881 7927 28601 54837 1936 35095 47094 16086 53744
+23951 41153 14422 34096 48672 4282 58667 32647 8099 52841 30057 2407
+37507 43388 20391 64533 14884 48354 29853 1510 57231 33610 10510 62036
+4183 32901 56333 14017 28815 51369 17619 44904 6513 41816 23151 63644
+8699 41489 23728 62325 14130 47752 21865 34248 64949 2613 43606 24405
+59599 5410 39844 11683 63352 23568 47951 16762 30737 53216 10539 47530
+20886 38861 5391 49233 22419 58284 3817 36113 63463 12650 48643 25962
+39840 459 45256 19824 36993 52659 4544 43027 25222 55802 10931 60750
+21074 39051 14363 63016 26827 38877 8759 58879 23469 44685 7785 51890
+35037 2339 53577 19465 45231 29399 11130 38114 55590 2963 46658 23646
+38886 5185 62070 21783 49098 3527 30019 62841 7684 33373 58874 2138
+40440 24102 63191 13642 55276 4096 27387 47356 20528 60272 319 41148
+24863 63695 14426 28756 58857 11821 48616 19218 35617 52985 14203
+29968 44155 3711 58316 27863 12368 62968 21913 44815 657 60159 18105
+47351 36220 4413 63783 17608 31261 46717 2452 59715 33500 8078 48947
+18331 58082 29951 10854 38398 54377 9339 34715 47340 4610 59072 19854
+38096 50137 3561 27842 52360 10166 43392 23660 64476 12480 45761 20643
+49626 9514 33115 54004 20142 40688 13489 33027 59904 7856 29276 41395
+3910 56822 21115 49485 14577 34229 63808 9784 31899 44746 2231 51446
+18530 29330 59700 13127 40946 23343 65118 47352 19404 54737 28355 9879
+49104 38358 1400 35820 56368 11998 42275 22861 54398 10444 44284 20897
+48573 14554 41970 23270 56001 6142 47182 30142 20093 57397 35257 2301
+63406 21173 39825 9885 52328 33670 3051 47691 26642 58198 4971 32585
+63619 13238 43480 22229 49988 8289 32103 53395 18781 46493 35066 6495
+50544 25867 43746 15720 59881 7732 34652 58102 16997 39893 5253 64642
+15289 38937 21363 49910 4895 58276 29254 14411 48129 25856 51894 4411
+30382 64741 10530 50088 22751 31752 60781 5457 47524 24276 41499 13265
+56163 23358 38558 11436 52166 21109 43911 14801 55184 36579 1074 61439
+18136 32081 48471 4690 62701 31717 9278 57936 35461 20352 50188 3811
+44893 21966 64400 7523 30381 43303 2615 62680 21120 31508 50052 15793
+44113 28139 10359 57616 33501 2912 63842 26178 40640 5683 45764 21972
+38198 57632 14292 30079 62403 18742 42546 3625 32328 61581 7315 52058
+20421 28283 43561 12817 47621 24695 62477 16578 28067 54437 3804 45613
+36259 8615 59914 22233 43612 15375 50966 37016 22866 45452 7928 60341
+37571 1230 31219 53297 15636 58010 31073 11066 36959 54651 637 44450
+26332 39123 5663 51470 16544 29839 55651 11070 34344 47984 18870 54385
+30091 3697 37513 56515 8413 33659 64310 3092 42218 24566 56821 13220
+43328 33607 18605 29277 44844 6202 52757 16969 31661 61421 10751 49689
+29743 15900 65298 21105 40511 2436 33216 46169 7812 51799 32541 126
+56436 18032 48757 30050 3410 63686 38065 16328 28378 60572 10130 36313
+50267 4253 61397 27095 17243 30663 65373 13004 52397 24889 41477 10889
+56247 20193 37114 47328 12321 27227 46069 19092 52440 8671 31654 48865
+18792 43154 30787 9061 52971 35683 15547 56737 32327 8249 49716 37770
+2248 44173 25548 56673 4851 41054 23929 63564 10916 51001 20463 35818
+47327 5628 54967 25627 39003 10992 51536 29978 14341 55683 25120 42197
+7620 53294 22614 39822 14143 65391 24198 44793 1082 35787 63194 16571
+27895 45140 14663 64977 27648 11309 34099 44906 13718 63509 31479
+17255 55691 34590 6561 51440 26953 39815 1677 59150 26737 44004 5997
+62375 26297 49405 184 43990 22609 63258 15882 46902 36300 7086 29452
+58124 790 41129 20413 55965 27928 11925 62660 37269 5570 46691 26154
+53814 4200 33936 30465 60065 2403 36629 63569 17071 27493 57990 9413
+45818 32134 5787 60373 38208 18063 30021 58971 4705 34878 61464 8834
+44290 25473 64848 14235 40431 6909 54300 25353 45717 13087 59142 26382
+41689 14202 63025 20786 43474 11513 35770 54051 19103 40244 5481 56712
+34382 20739 64736 342 42449 29235 12467 60656 22351 54701 2666 40153
+20818 51673 29526 684 36463 54007 19626 46585 31342 2810 61295 24842
+42663 17464 36705 56659 8993 40257 21568 58613 16572 37248 43385 7453
+54066 13820 40938 26607 58194 9379 31699 49185 17930 63092 4 41261
+26930 60778 5465 32525 49361 18948 46051 9456 38086 56407 13980 28236
+50278 19094 43357 1818 53502 29369 16735 58924 38158 12708 33049 51853
+15597 58594 26415 39186 12195 56936 4451 34113 64998 21493 47245 7651
+40818 24283 51438 9201 33382 61854 15785 53117 27268 4122 48159 36926
+6977 49802 26647 59020 12478 44547 29070 15518 63729 37370 530 59593
+19668 39947 5486 51141 35126 9831 61821 30774 13452 53276 26265 40380
+6902 63971 29298 2304 54149 16792 41302 25162 47794 13175 64326 21289
+39298 3873 48594 25603 59720 17397 29896 50655 9512 57983 19994 32650
+60599 7294 42346 25227 63885 1271 32163 42918 12898 60164 24871 44248
+14397 49927 28515 18062 58995 32396 8964 37567 62237 1321 46914 11229
+60332 21678 35437 57144 2906 41979 24578 55992 6967 33894 47171 12364
+54480 22996 59028 16192 29030 61706 13187 43512 26031 39486 11025
+54503 33591 19787 50898 5840 32529 48060 22045 56445 14124 31675 42464
+8365 57117 38392 1517 32929 44753 6443 60184 26268 38634 35 61373
+18340 51580 34869 4393 64859 36572 21401 57862 1014 35840 61176 12791
+45080 24485 64709 6627 28981 46968 21592 55797 10476 31227 64265 13507
+39604 22167 59276 6953 45616 25950 39471 2450 61017 18146 33250 42971
+14829 64807 28146 7397 58775 37810 2981 49759 16512 30335 62622 10864
+47576 28825 4832 51168 31615 19479 53342 7420 47850 36863 3232 51796
+21488 36478 54778 20 47750 27127 7241 49452 37452 2499 60620 22094
+42662 8843 61979 23158 38544 13781 52323 21344 38499 10543 56239 18110
+34915 52751 9183 30934 55717 13063 44196 24572 52310 16708 61465 35645
+6570 50475 38214 17103 30266 55409 11121 42322 21435 58441 15219 52300
+24326 40635 14382 50252 5273 44688 33145 18867 62769 27056 15697 50197
+27748 215 53680 33222 12284 49328 24215 39606 17759 51879 1153 34706
+60081 17054 43349 31643 8310 36276 48431 30 55277 23698 38658 6199
+59970 22742 49991 1419 30022 62347 15898 44603 28073 11350 36147 48923
+16658 56176 33043 4808 48297 37667 16702 31616 63899 6850 45753 23079
+62421 8668 28736 58871 13462 35523 48322 8295 55503 32865 245 44671
+23036 63850 6511 46803 32991 2014 57037 27435 18968 63467 34139 2822
+46148 20691 55165 6741 34613 44301 21977 53759 9085 39211 24538 54613
+11855 29794 63660 21271 42936 3030 36174 60939 8178 40129 24528 65376
+12278 37376 49232 6836 28220 61248 894 40150 24897 46358 5095 51249
+19105 29234 53289 14951 41565 617 54836 35643 18222 60177 13736 44597
+28811 1642 49127 37506 10014 64775 32085 20557 57138 10921 39034 22124
+54123 2283 35308 55850 9346 45482 22556 31932 54691 10904 42968 22969
+56638 15778 39995 23924 47808 800 59144 19809 32522 47111 11331 57627
+35725 20922 62548 4777 31894 50550 9568 42263 24240 57330 14565 45518
+6998 35098 64643 13737 41786 24390 49557 3173 40775 23288 55006 9485
+35592 48909 15709 53573 28133 5904 41035 20248 61377 701 36646 51999
+6723 27788 48911 16267 54303 27500 19297 51850 38412 4759 27867 46414
+18869 64102 10042 38840 21897 59632 1461 38655 26285 42599 6601 50006
+36020 3834 48063 21661 64609 5532 45741 24353 60310 9248 37215 57904
+17770 43984 678 40139 25236 62902 12592 49455 20245 27330 47972 15493
+53811 22474 40512 9437 56385 26939 44472 7028 28702 55295 14096 44212
+27994 11051 38052 54575 16440 28452 50376 3175 40773 17997 51730 37126
+1629 62006 16169 40906 24188 52380 3432 48108 30415 16746 53396 34370
+11762 57453 22886 48965 9378 28913 56796 1435 50587 34410 18682 46722
+13466 33562 60523 20619 45306 260 34435 57493 15537 38005 61518 9182
+42386 24922 58931 12668 31175 60986 18212 42963 8105 62131 29382 18131
+59670 36028 12586 56842 25463 45301 14289 33181 48168 18686 55367 5156
+45122 25102 64622 3110 43277 23313 60871 5384 48750 24929 39649 2426
+65430 22268 38822 5751 46166 30473 12991 47540 23001 64560 3331 40253
+20565 60637 53 35064 45282 9022 36037 6809 48166 22160 58878 29412
+13174 55113 37965 3507 53426 38487 11072 35522 64355 14297 41455 21693
+62175 2788 32352 57866 13561 45748 28764 21333 53116 3722 49476 24394
+64552 16000 29329 44353 9341 56561 26299 39981 14526 46719 24979 52624
+7938 36912 57371 2411 46822 23256 60162 6014 40596 24570 63043 14055
+27972 57720 10045 43215 26514 55598 11540 33560 50040 18785 45491 5950
+41413 22807 63260 16780 28610 53913 13509 34950 49439 18080 27753
+60428 12996 45546 35716 5042 48453 22371 59375 12641 40066 25391 61792
+14784 50268 4619 30761 64556 17185 43243 2433 58424 35307 6234 51044
+25546 59202 14810 29183 53181 19725 48103 5494 32384 55567 20675 42112
+14967 52495 23274 44160 9760 57601 20885 35884 63190 8047 42689 32296
+22746 61118 11292 29466 46128 4988 55540 20903 36459 58884 11859 27980
+44084 17346 55302 138 41877 25916 63144 6180 40529 25469 49187 17715
+30427 57612 4581 48155 16948 36828 64206 1888 32460 49174 6675 60504
+18138 42331 35137 5857 55820 17555 42868 27849 8290 50046 37850 15293
+55812 19599 35521 60573 2716 47417 26981 38731 19827 53771 1835 46967
+33488 7657 59124 36522 18501 61955 13445 44943 29041 4881 62671 21388
+34699 57172 12088 45178 26557 53961 10961 40867 23246 63192 2573 35658
+42841 9494 65204 34412 15919 56508 32666 12032 50628 22802 43594 5519
+53095 26859 44578 11339 63602 19149 53706 30244 16600 56896 38157
+11922 33041 55433 18974 41269 1712 50203 27695 12009 31310 64918 20988
+52054 7092 34039 43680 3346 58859 36820 7894 63906 31886 4104 59645
+34066 19419 48317 11809 63759 36812 17058 32705 60537 2498 51077 22389
+42185 6188 62515 34001 22049 58782 8549 27951 54904 19389 46380 35026
+5983 44610 18600 61489 35963 12634 42801 197 65029 26451 46419 6490
+31586 63305 19238 45724 13058 39546 25214 61980 4081 53641 24448 39612
+6503 56487 26035 42779 11592 50632 27504 17409 34131 54634 2048 45593
+22066 39220 5710 56399 23050 32920 48788 14312 42223 5266 53665 23448
+40304 9877 65353 29813 4140 53340 37385 15827 31093 57874 11084 39282
+26978 54910 12403 38772 26578 44490 14588 58843 20601 48132 11417
+32576 51222 19853 59233 1766 32793 51904 15418 42994 25379 47227 13482
+53159 27777 17357 63960 31149 57235 18431 42651 923 34301 65273 8091
+46751 27341 16545 31432 58201 8459 43953 25178 52473 7236 38949 26320
+50538 9689 30419 62872 8044 41626 15342 58275 33757 11791 37977 47363
+4698 61549 34503 18300 49000 3248 64967 33968 10827 28537 60741 18101
+42465 27276 9044 51762 37418 19859 55034 9260 34006 50128 1346 41294
+23391 53106 3819 38692 20047 60095 2043 31772 57295 15610 33497 51525
+3948 37742 47046 10753 60906 27206 3345 52630 38385 8319 31516 55445
+17204 42030 26422 53373 7756 31334 51860 1388 43284 29821 18621 59087
+38402 12276 34234 52402 20805 48046 13534 38975 20252 43850 7679 55789
+32829 285 37868 44987 17304 59556 27712 2520 62072 31773 7776 37031
+64719 16942 33678 47482 1922 27821 48849 17445 58121 3905 37162 48279
+16052 64127 25223 41758 8625 50684 18779 34455 62741 5471 47093 21696
+33648 52269 12828 46413 19677 31697 51696 7425 65164 14025 41430 25718
+60361 8421 28484 46366 20666 57368 11268 39058 24765 51364 12281 64895
+21353 29845 48961 3616 61531 19795 30148 58416 162 45770 29054 7726
+51772 33399 17801 63361 6130 43331 26503 61297 16995 28547 52037 11591
+30405 47737 280 52828 19948 36606 46394 14771 50525 2194 39691 23706
+65044 7194 38795 21303 58169 15224 29918 47780 12263 55782 29735 4005
+48801 27074 8430 61698 37559 810 55330 25474 40595 13930 62216 20096
+31382 48892 4340 40872 10112 60945 27784 1130 50921 22316 44615 10003
+30932 62249 16616 37941 56762 5054 34829 45020 15197 61038 18963 30264
+54358 16534 27047 45415 13711 50714 23778 41362 14536 53023 1902 39837
+25813 55900 5537 49151 24519 40172 10099 57457 30538 18568 47253 11576
+54019 15799 36267 42483 4263 59410 29473 13194 51084 25165 57014 7933
+28929 54907 21087 49077 9856 40847 17570 54376 36301 3200 41656 23991
+59809 5851 49253 20187 32477 43589 12224 63056 22154 46057 8707 32719
+64658 3606 37303 59422 7065 41621 23546 64264 13710 51155 26671 40784
+11655 52642 2758 30046 64027 20260 33964 50868 1301 45946 19580 38247
+58678 11704 27677 63027 694 42032 23776 51983 5885 42526 20685 63616
+1449 51678 32744 7489 54211 26548 45435 3745 62753 14882 39420 25890
+54767 8740 36987 57729 4519 32740 61928 7480 37574 50678 3668 22582
+48871 7714 61020 25213 41151 15406 52083 19777 37372 61900 1771 42380
+22968 54838 4053 33911 60601 19506 42379 15087 54088 36067 4542 55783
+22727 30152 46565 1896 60404 19034 27704 52662 10569 31113 58384 13496
+42905 19749 38142 55099 3949 35112 45504 12094 58004 32898 15570 64272
+3111 30013 44204 20607 61830 16161 47550 33374 12427 64451 25775 42631
+14347 51008 23651 44831 9948 65038 20368 28070 58344 7551 44365 19933
+36409 56118 12593 29525 65460 21200 44047 754 61155 11711 39127 21512
+64390 15419 33622 55517 10034 47127 27239 3461 56771 28720 6865 62144
+26394 41754 1557 64940 24807 47779 16164 38468 62853 11658 27176 50940
+6492 35965 53915 14040 47505 21523 55824 3558 30729 50690 13671 60677
+37242 9348 54381 25704 45351 10682 30256 53802 1292 39148 19563 56749
+32393 3118 53743 25374 41016 14627 61234 29764 8735 58165 35447 3219
+60122 17169 43397 21744 38842 1219 55032 35351 19260 53013 3998 34596
+44516 14677 62748 29480 3259 46685 33967 9321 57139 37964 15835 32860
+52912 7024 43240 24670 65234 14320 40587 22000 54972 10866 39411 23925
+56072 12343 40445 4802 57195 21854 35235 65403 8938 42521 25824 58872
+6150 32014 55209 18091 28573 59427 10221 42096 25633 55471 3601 34283
+44417 8203 59587 24103 40071 14530 60843 20034 38196 52917 15204 28255
+48359 17839 58393 7729 35783 46934 2675 57432 15122 36336 52644 19802
+34497 46904 14245 63120 36244 6308 58164 23721 46696 3653 42373 21809
+52955 9592 48325 29441 2267 50468 35419 10789 62626 38098 885 57328
+29713 8933 55100 35082 22134 62198 10583 45339 20858 38757 13500 61736
+19692 46638 34949 4600 65155 26027 44104 503 31091 63427 18801 49018
+9455 33631 60891 1145 41851 17758 47843 33235 4439 62361 36904 19507
+29911 60311 8132 44085 26155 55604 10774 35094 53047 16547 41912 7850
+58430 28908 1949 51638 36887 14774 55329 27133 18126 48740 30359 14527
+55793 32806 9699 48792 34918 636 62516 21020 34471 58720 15994 43210
+8490 57449 29221 17390 55040 32432 7528 49613 21827 35031 47255 9800
+57065 16899 34728 59625 11687 30913 47640 16334 40360 23570 61822
+10629 38560 19140 41907 26998 53221 6149 43500 21161 61091 17979 28014
+49354 10598 41986 23484 55873 14679 43267 11666 39261 26488 53074
+12483 32176 47350 4752 55635 28872 10795 34615 48534 14952 37830 57464
+10192 30323 48874 850 65500 28245 17978 48467 38033 11288 63679 20159
+43829 31864 8722 56435 35982 22213 45815 1072 51776 25390 61991 6516
+27633 47529 17331 62659 29885 640 50790 36864 22775 47856 11067 58999
+37348 4468 30004 56960 7200 40547 21449 54911 8439 30172 61520 5068
+39329 26474 49046 988 35803 53288 15852 32025 62690 1640 41730 23350
+50261 5302 40007 15367 51015 34343 24425 57468 3714 47625 25957 40469
+5632 62823 19937 37754 54265 16275 35603 49631 10877 44367 19318 57061
+31460 8868 54127 34550 4908 28351 55353 18143 34135 64217 10684 43167
+25123 39082 8919 45157 26187 59259 10427 43600 19931 30299 41255 6391
+65136 19470 34986 59326 14381 49821 23668 44124 6864 63540 22760 45391
+8183 35977 56228 2002 48978 20916 39503 13637 45830 26582 53431 5894
+61782 24120 46676 12713 29750 63389 10531 48723 18248 30579 54343 7312
+37130 58762 19074 27786 51760 1367 43770 24091 63674 13093 39582 22011
+51150 9256 32764 59443 3470 43787 25569 61848 966 48956 21067 34530
+46114 15845 51101 2481 39980 24246 55868 13140 38893 21174 64224 10971
+37278 47966 5620 31384 52459 13211 45444 22171 61616 16434 31204 46753
+17 53557 34998 7469 46224 30444 2269 63861 35951 6605 45118 30637
+21011 60510 10878 30112 43439 23431 64454 8176 28854 54328 5048 43038
+27177 17325 51872 37564 15180 55848 32410 12682 63422 27450 19340
+57503 38105 14589 59935 23500 47014 6558 28297 48485 17513 36306 65106
+4797 46943 16772 31599 50166 3784 59533 26383 42564 1257 54251 28148
+8783 52274 37334 10459 55997 22325 49778 12582 36977 44052 20869 53187
+14373 39069 26834 63740 10162 50430 22034 43405 14751 57179 1871 46727
+34836 13450 61826 20745 47472 795 31588 65212 22610 46539 12811 33403
+54803 16075 47265 28584 6020 38082 61649 1196 52271 23851 39631 4345
+57395 20321 29155 46484 12412 54117 27342 4964 49900 36688 22194 46371
+3947 60704 13990 42287 25177 62192 2152 40560 19189 54210 25036 38854
+2966 49334 22017 61331 6855 34114 56579 4047 43198 25960 55434 478
+49680 17673 29864 64121 12684 33765 45823 1075 56818 31694 17005 65073
+38018 1943 29781 59345 4929 62264 20376 44001 2312 63425 21684 39728
+13880 60127 25306 50787 6453 64020 18819 27839 51489 13371 45160 24679
+39408 8741 57090 34091 3255 50955 27606 7422 53707 38176 17947 48251
+5499 64018 20137 41304 12353 37349 49428 16559 32644 56893 9786 39786
+22023 55704 14438 46336 6747 32259 52631 18316 27266 55823 14975 43797
+24008 60896 123 31993 48799 16179 42009 22035 56729 11841 30917 60468
+18657 43572 9567 48705 28417 17369 57691 35465 11404 59781 31184 19710
+62544 6262 48687 18432 35685 44246 13021 59647 23147 48274 11991 29342
+45254 499 60418 21313 30577 53104 4018 39241 15225 46401 21949 61268
+12514 37096 46239 3209 49939 21151 29515 57841 1191 48342 22289 54906
+5581 38591 26966 63004 217 51453 16277 44542 23419 52130 2687 43070
+28282 9762 60409 37537 15682 31300 49420 12204 59756 28627 16637 43837
+24546 55008 6777 64516 22456 41585 10521 32166 48894 14913 34328 59182
+5269 42585 23498 36677 56313 294 43339 22429 50668 15447 42103 9967
+60990 35118 18545 55576 6155 47342 34422 2220 57863 26200 41344 16850
+52689 29882 8529 35214 44881 13392 59775 30080 6765 63227 20476 29586
+58248 16369 45456 4234 53523 27040 41605 1120 50843 22971 62897 17012
+36096 57417 1652 29338 49692 6384 41819 23081 64602 16893 28224 57442
+11632 49733 24680 40709 12720 59107 22997 50085 3508 34766 54656 18289
+48509 366 33411 50696 17813 60236 31792 12214 58458 34189 2158 65449
+27119 8234 38484 51232 271 36361 46526 7274 28719 51676 4359 42123
+19845 36750 60645 9628 51572 27380 11675 43581 25632 58026 12633 39485
+23336 53397 9537 35434 64357 14630 44909 32415 16149 60351 24895 42846
+7219 34454 62210 3521 27647 57737 6697 45560 22832 56107 2853 38535
+26179 59622 6359 40486 23534 52755 16279 28483 51418 5388 40902 24951
+56506 14740 39222 4990 59654 25959 41391 3383 63483 21048 35315 56862
+11753 43806 22155 41090 12563 63725 25575 44245 16535 60403 7329 37020
+44025 18074 58147 28470 10056 63147 38345 18418 33502 47863 6035 52627
+18023 33818 59406 7284 45868 14425 65020 26646 40161 9325 45597 25555
+50442 14334 29458 64732 12238 40158 22810 60124 7707 37174 47650 4268
+54054 23849 40101 14126 50467 5650 45224 27687 19284 52177 35564 24081
+40258 8977 56219 26958 38510 7034 57516 26524 45594 594 40754 21122
+32997 44481 3003 59278 34408 6835 62502 18763 47841 30211 12587 60844
+36924 16854 58662 29827 473 62389 25514 40208 10128 46678 26867 59081
+7760 29719 54228 2032 42319 24296 65368 4708 41338 26380 60579 17468
+41206 1844 63672 37999 8195 33853 51437 13130 39081 26481 52910 10487
+34028 63093 2535 44335 24634 51714 5810 39023 22921 64113 3623 33646
+52094 6690 43492 26075 53383 2905 45839 26725 41768 14516 55028 27837
+8179 52426 31754 2214 57137 36129 8814 65184 25361 39637 14172 58142
+8252 34105 63449 23887 50626 2013 40199 26428 58494 14476 30673 61752
+10081 41742 16819 32184 60156 13193 40639 24217 56736 11586 47002
+21613 34619 55272 5290 39154 25006 62351 13607 35673 53248 4341 47341
+24717 41594 467 52457 21197 39556 4572 61657 32473 15262 48093 28657
+763 52141 37560 20063 56759 2915 40532 22656 50950 17122 58119 9475
+28338 65484 12902 39381 25616 62167 2733 30352 48623 14243 45583 24891
+40056 11604 62877 18237 30351 47980 5558 56587 13824 37781 64482 18229
+50297 27426 3988 53266 38417 14112 49884 36743 9745 41058 26366 62069
+11900 38502 19539 59733 14365 43705 34326 4566 47236 19799 38134 63704
+14883 32349 56794 10580 35624 51981 3320 41678 21931 62574 5713 33931
+55880 18980 41991 9496 64972 26097 41221 11582 61299 25283 45833 13902
+39941 3228 45165 24910 49610 9664 38115 46303 19371 54478 29954 13851
+60659 27044 17821 58443 37630 11565 64675 25610 54927 12749 31854
+44971 3190 59122 37079 19666 54715 424 32915 63324 7110 46036 30699
+18100 49848 27353 6390 56890 36282 1989 48352 17729 56440 28577 12002
+51331 38263 16325 32854 65337 11163 42776 20196 53739 12982 47280
+34520 10922 64472 32207 3753 58624 36544 18874 62922 8525 30475 50495
+17537 44364 21711 52811 11230 36457 49974 9030 45078 18916 32334 60022
+4751 53403 28900 7967 48450 35890 1689 50985 19627 30292 65098 3064
+40480 14987 51932 30604 954 55904 27479 12841 64337 38366 9373 28471
+51225 20964 41432 32158 5005 56140 18339 52282 32822 1173 57783 20000
+36742 47857 4762 34490 56196 15258 44300 27340 16771 58347 36288 8198
+62496 30326 20434 59866 35815 8474 55547 13289 47160 34727 58680 17632
+42194 12067 53344 22297 49331 9824 32034 63049 17311 47600 8299 55166
+23144 39908 15928 53876 23805 41132 1597 55500 21429 40197 5784 47021
+33034 15497 50234 37394 13834 57727 22766 52164 2702 39194 24683 61136
+15149 34431 53055 8829 45260 30909 19228 51196 10721 30811 54198 20863
+44862 11954 58091 28747 3409 65165 20464 45193 5594 58654 27415 17087
+54323 38299 12896 34537 55147 14735 42680 25934 56595 11823 40585
+23918 62166 10251 39144 21706 58682 7627 32841 63931 1158 37651 60191
+16582 46467 24456 39749 15119 53487 21770 42721 6337 47879 26809 51571
+17319 40815 10138 32468 56633 20163 45434 6948 35302 55061 19513 44860
+5041 54256 25510 43649 2815 63395 18202 32165 42512 7866 61504 14266
+29944 57878 19203 49082 7463 46163 29433 17897 64006 10552 33959 57911
+17036 29545 65412 13678 43140 23083 53971 9546 36746 58634 18441 30016
+62218 7693 44188 24648 64160 12255 32487 47705 2141 37866 52304 19960
+44042 5446 55380 33574 19406 52752 7883 32542 59030 3739 53454 20926
+33338 46066 9020 61127 20469 42412 28250 1683 47753 32275 7560 58800
+37759 17388 29059 56447 732 27294 60314 7293 51441 21821 43080 3224
+54879 26673 46733 7061 29172 60964 12052 53857 27562 9663 51400 37102
+4825 27635 45939 20227 58905 13837 31321 44201 17222 51764 27367 1033
+48935 31724 17029 52475 5174 39149 23141 56981 8418 34426 54954 19634
+62885 7267 31060 57429 14940 28836 61413 4152 35613 45621 7878 38409
+54048 2886 29824 48537 18424 43105 1405 40196 21485 63968 16176 28040
+49714 8302 42716 24100 48905 14837 42121 21915 58816 2938 33957 61080
+12143 46251 29296 19448 64023 37746 5777 32950 47639 19180 60584 1545
+40730 25475 52445 5609 38674 26914 62828 592 28896 45659 17254 50636
+24523 41681 11732 49065 21240 38178 54272 1592 35075 64017 7580 28384
+57719 17258 29946 61178 472 47742 27558 10187 49194 37104 18330 61988
+31155 13823 56775 23998 42281 9145 53804 34801 20880 46769 8816 61360
+34723 19131 50653 37259 3478 29990 56758 19463 43771 277 58203 13598
+48427 26967 43046 10701 63790 24347 39515 9804 60816 18085 28520 50199
+8850 32559 63216 1574 46529 31226 11822 52126 22822 43969 2527 48429
+16066 41629 26653 63671 340 30990 6177 50595 26084 64708 2898 34231
+41418 18471 54075 4475 39349 25942 58319 12780 30957 64429 4888 45607
+29759 9860 61672 25963 43644 13198 64816 22408 54452 9540 28364 55953
+4485 44695 35045 12786 64502 20845 43558 5824 48520 27949 20180 57570
+13668 38284 59480 2851 34586 63195 7831 39020 25956 49862 16611 35417
+53497 10835 39876 23579 50732 14927 37594 47492 4129 29270 64704 7367
+31493 59662 1937 49500 20314 38545 16713 54296 395 48117 34461 13448
+42641 24761 47252 10758 50484 19932 29731 43780 4711 63591 11154 50486
+31222 3362 57626 34187 19836 62636 1260 44786 25973 60134 4460 42652
+15485 63907 24768 48494 581 38974 26752 65513 9416 38630 17383 52264
+23457 46180 4336 53718 35549 20184 50345 2331 42510 36199 11356 61024
+31812 1159 54200 37157 22131 48186 5143 38286 50530 7910 33683 55866
+2645 41196 25450 46608 5583 52803 12571 35667 49578 16097 29116 54087
+4952 43229 18594 61282 29722 8548 34711 60556 17779 46974 10334 41639
+26002 64381 12229 38876 26751 49426 13706 60015 566 39025 24396 50429
+11158 57454 36345 15380 54455 22452 44123 10072 64114 34324 12454
+48794 38450 17324 31545 47119 12917 63911 24686 38845 10028 58064
+21780 49422 16710 32091 42673 2876 60050 22505 47555 17791 37996 63055
+7619 33265 48502 1971 54902 28845 8185 61535 38036 20188 57883 10363
+33632 62456 19662 44223 1803 50387 27550 15373 47408 35666 22044 52447
+945 36657 49009 10628 27436 50708 18534 63831 27258 14744 49726 36940
+8821 61867 24340 56210 11063 33918 47190 5848 57580 32510 18310 62827
+35254 5049 57028 28593 10756 51199 37878 17277 43769 24369 53896 3865
+41409 13207 51938 24241 58626 9551 44544 21471 31389 55457 10451 44534
+23709 58288 14244 41609 20914 54835 8552 35585 61078 2341 30677 57918
+6060 45398 27995 15878 56920 27236 13819 48738 38411 2771 34363 52204
+13309 40518 22697 65478 16231 31444 57785 2344 45400 22803 49701 5933
+32202 59309 15490 27692 48239 5411 57880 23847 41411 15430 45515 7131
+59956 21674 52025 10788 32643 62866 15666 39184 24849 61759 2734 38590
+23076 45968 5510 55310 26354 41728 2193 53738 20301 37798 52710 13342
+28200 59517 19719 41812 6224 64427 28982 19097 57083 33441 5393 53429
+18760 45614 61342 23486 46622 14895 38784 27034 59272 10675 46561
+24147 61599 14695 36130 49219 2136 42586 22050 52730 14699 37243 47076
+18366 51657 5207 39146 26659 48568 2322 43236 36223 20755 61789 16354
+29613 50945 9193 33038 56671 16283 38094 63505 255 35987 47444 7404
+28021 50023 14859 44169 24453 56478 946 31293 62149 6183 43108 25303
+59655 1544 36152 61719 8567 27964 57164 17641 48546 22257 41140 11152
+46273 26843 63400 7925 44107 25665 59302 17656 30173 64584 4142 52941
+31428 18250 56007 35996 8558 56697 22206 33454 41871 15800 61861 24061
+45850 7622 42268 14628 55734 22940 38762 11178 52656 26918 38554 9522
+51852 17569 32169 58012 11496 46599 20553 33393 48034 6431 59659 15402
+38789 26846 64527 9997 31240 58312 17191 27668 45550 15095 56332 23216
+41134 9371 59212 18629 31014 62648 12341 27546 45551 18026 59874 10842
+35001 63270 17296 40624 23297 60846 1708 33677 58829 10164 39624 25307
+49060 13134 55705 24802 41340 3097 50335 21112 31788 56590 1055 43650
+22883 54399 6593 41582 21720 31948 48303 16087 65113 34275 4251 45108
+21589 62100 5303 40251 25513 51579 2856 42775 23131 57385 5884 36098
+60835 2036 28842 44814 6332 52717 23591 41543 405 33692 64907 8830
+53160 24548 39265 13040 55983 877 29181 50750 15714 40572 22903 65518
+12100 36010 47385 16157 29778 45731 3757 51314 25805 42715 12396 58650
+32876 9843 63766 37789 4288 59598 11523 40691 25664 64389 16636 38289
+58889 1972 33694 43387 6095 59638 31877 17275 51167 33993 5437 45568
+26363 53605 15094 40897 23245 50806 1843 40500 14109 52845 20978 36954
+65395 1066 30300 47778 6780 62703 15662 32109 58253 20282 45912 145
+39811 25852 63042 5053 41664 17802 61766 30365 3321 48516 32715 6984
+60146 24034 49934 15644 40242 22767 53327 13731 33709 64771 10513
+37862 47974 4585 60870 31447 19687 58520 10655 42710 25183 56636 3901
+29788 54420 7461 43204 23976 39599 10712 64417 20138 37457 45222 161
+62889 38014 17620 31865 51471 2479 63620 25466 39629 13817 48652 25091
+42739 6366 46258 23022 55525 8798 33226 52871 11879 60261 20705 48406
+13625 37251 62935 16810 29454 57393 5811 40654 24728 49323 3589 32315
+55668 17004 35050 50929 9075 39977 14908 60218 25348 39523 10228 50067
+1675 32762 56704 6844 44524 19319 52742 1021 31096 43609 8689 56519
+27574 17792 61104 35060 7424 59575 27568 148 57957 32444 20656 60067
+11985 33848 63336 17926 53443 7096 32581 46327 1265 59893 25386 41933
+4202 49702 30395 12529 54395 27129 17128 61915 37403 19902 58637 5244
+40202 21624 49093 15544 41586 22504 56859 12744 33620 49372 17896
+30789 53754 11396 44778 30321 717 62051 33289 19084 56180 4390 39019
+21860 52510 12435 35718 49846 6141 45324 22901 40141 14290 60982 2618
+39817 25184 46995 13752 59576 159 48522 30417 9457 36805 54732 18270
+32481 48245 5231 64456 18951 31787 59235 2552 44537 23930 62296 5686
+40685 22323 51410 1831 29285 62530 12512 41953 24917 56110 864 41331
+22519 49698 6923 37129 63592 3691 48008 32678 6111 52687 24697 44426
+3036 51029 20357 36307 56974 1432 48901 30847 22138 51161 3756 28446
+56948 8900 42416 25345 46430 15209 51259 21534 62844 661 32055 46090
+7650 63989 16197 29548 58683 6081 40515 24866 59803 13005 34525 63221
+18423 45381 5021 58216 29252 10140 43165 25187 53129 14198 31835 48728
+18903 59264 10996 33475 62584 14782 28359 45827 20113 50420 15371
+38150 56950 18238 34264 62444 13641 48966 27566 15392 36668 45436 4362
+62280 23265 41329 19466 60497 9242 34821 57094 3923 42325 24789 59354
+5356 53366 13240 34658 64255 21793 38771 6398 53603 18995 29084 55190
+14624 46644 21322 29150 56025 17798 44806 6911 53225 29674 14189 47751
+22741 55787 12391 28876 46661 737 57846 23135 41634 14053 63200 3543
+35275 58908 8716 30833 61681 19856 46527 29893 7661 55979 16555 41561
+24970 54406 11840 40249 23701 50764 8545 38825 22525 55104 13878 49135
+32464 16004 53951 28198 8880 50323 37644 19039 56012 12246 43659 36256
+4254 29967 62576 9550 46748 25220 42460 83 55722 28721 18475 35577
+44596 9703 54664 22061 32531 62222 6568 39838 20995 49562 15144 32598
+51855 12908 60639 34316 4046 55242 28457 16150 52345 27150 6728 56104
+38427 12003 29297 46113 9889 56524 34036 1420 65300 17864 35537 57929
+3725 30121 49382 16484 44253 25682 40735 7642 31006 58585 3309 34171
+49336 11787 44664 22350 65522 14942 29704 58113 10685 37813 47939 752
+27514 61691 21311 46887 3241 52517 34146 20674 14398 64062 22455 41150
+12597 60598 24878 39438 13553 65387 21054 33473 50144 5565 45106 31488
+10506 50599 38181 19984 48271 13937 35567 55164 6240 45919 28134 3658
+50043 24804 42066 15185 57214 23074 39327 12127 54938 28522 17771
+60931 34070 8375 38475 51032 3305 28568 52914 10315 43018 26616 64784
+8915 33168 54854 3944 37220 47894 7408 28232 64021 3186 41663 23275
+59477 15660 36183 51924 7655 43373 25196 47920 15858 57586 31546 2394
+61408 29326 15665 56780 34785 9727 53673 26701 48824 17379 64873 6932
+42982 29260 17019 54081 20690 38451 59073 2802 28143 61197 12237 41358
+24880 50355 8052 42359 21987 53616 12599 39426 25624 56448 7705 35131
+54668 15934 43068 23603 53102 8863 38494 21006 60842 11127 32123 55466
+15809 42769 27199 18224 57359 36682 12796 64832 38387 16487 32341
+60508 11179 44325 23806 40188 6926 64304 19188 45809 37579 14230 53112
+31942 4634 65059 37944 7094 34768 45129 20221 53888 11858 40561 23574
+53109 36464 11145 46435 19671 52040 9387 29080 49852 2564 39725 25311
+54720 14518 34985 49705 2102 63478 27878 7688 57987 38012 77 28603
+46969 20603 52802 3651 37499 55996 8158 33367 65305 10558 27312 53726
+3398 29942 43482 6807 59321 19629 51143 30447 11429 54860 35563 7230
+49817 24786 44231 16670 53499 30014 11463 50396 36890 17787 43888
+25372 55678 2346 41576 15523 46609 26632 60763 575 42310 34121 7584
+51910 38448 2504 31704 61179 20486 43058 4766 35599 62739 9564 37198
+45053 16435 65037 25585 39236 10010 54599 20115 30534 48384 15905
+41666 24876 54454 11975 39516 4327 60358 22768 33747 49948 9281 61459
+19758 34235 59374 2208 43049 26208 64836 4525 30304 59884 7717 37421
+45854 2682 64237 34376 21731 59090 982 41063 25798 64970 14697 45350
+21278 54596 33149 6654 57249 17953 36420 49526 12680 61753 5749 53374
+25072 40107 1246 50803 16886 45623 26525 63860 9116 37986 58812 1008
+27749 45979 19133 50255 11615 35893 43791 9489 58558 35512 14521 49163
+23436 61079 5729 30976 49954 16291 42145 23986 53790 12183 40443 21861
+62577 7010 31902 51503 925 64676 22387 42595 15385 54520 27446 8385
+61274 32483 104 36991 50877 7884 42160 24037 62338 12555 34138 54928
+6507 43461 31692 18368 59125 7356 42678 30797 48024 3808 54920 26878
+38520 5291 55657 26856 41239 3281 58003 18812 37312 62656 14369 27117
+57272 3877 28923 65030 8851 44477 23090 40064 14722 59082 34684 19010
+62272 10567 31425 48498 4745 65124 32232 7495 51173 36773 2556 46664
+22211 64311 13279 33368 44711 15642 60232 35065 1632 50291 20807 44653
+14116 62470 27537 17316 58383 38046 20937 52852 10167 32220 50186 4899
+40104 21644 58108 13728 32302 64958 6475 39912 24304 45891 10433 51505
+26213 39447 919 63062 20877 44071 5506 38740 26167 51782 12059 34913
+62398 4541 46675 27408 10489 37855 51040 16507 47101 30205 804 56297
+36605 16618 33437 60410 4060 48640 32629 14783 64695 27665 9243 37081
+59036 3453 40744 26494 56871 5104 43840 25394 51733 2137 29546 61911
+8629 44993 30314 349 49599 27140 7740 55400 27881 4456 34492 52280
+15786 59504 31625 10383 55530 33673 22 48834 22955 57583 13394 27703
+47826 17634 59899 27202 4065 57559 32953 17151 61573 1957 48382 22252
+32178 64847 4421 37543 57369 15881 32836 61712 7998 44366 23304 60401
+11363 41403 20440 33324 55044 12430 43657 18102 64785 36718 9382 44468
+26064 61366 13816 29974 47642 1060 37745 49559 19572 36641 58449 12308
+46530 24253 40176 1514 61133 25203 47830 13574 29673 64524 2121 32968
+58686 6203 39926 21572 63542 201 31146 60198 8779 47726 19316 32376
+62981 9217 52055 21097 30923 48862 12155 65235 27189 16209 54387 38124
+8958 47141 24911 56912 15096 31235 54618 3124 27586 51523 6897 42166
+21194 61122 2511 37178 52023 7892 28994 64634 213 49892 21654 31989
+47680 15957 55313 2605 44486 26439 39475 5261 51720 16869 29253 56266
+10256 34428 51237 19121 43478 27478 10986 57135 29630 19606 51769
+11525 36370 46475 17282 55229 7816 34672 51795 1779 40556 16007 49036
+26211 63527 3900 30926 43715 20292 34152 46715 9141 64298 30246 14072
+59508 35339 3249 43431 24115 54724 16751 35897 42718 8361 59542 32418
+21919 62405 1852 47620 19638 29419 64882 3212 43352 20244 36957 58817
+11221 28274 61669 4749 34623 51672 8419 46657 27855 17708 58940 38212
+14568 34362 56542 5210 47977 19564 35550 52547 13205 43625 25215 56839
+17746 31266 54485 4397 43764 22444 50083 16250 28432 64934 9892 41868
+25751 54126 16656 8157 43800 23070 39561 10059 63234 20616 48841 11581
+32891 52011 15273 45606 27799 1331 54876 38467 12322 36356 53032 16432
+31417 49345 1869 56502 30886 8506 51965 37721 730 55153 22109 40347
+13546 45253 24027 58544 14785 43258 25948 56412 11195 41048 24642
+57937 6564 48681 19116 29860 55899 11108 39101 26029 52333 8120 31629
+49092 360 44014 13585 34391 61196 16268 42201 25139 62850 8311 29849
+50589 1412 41762 23434 53875 14241 62321 21334 42160 7103 58471 23757
+47922 12955 33236 58927 19182 44895 2051 57064 23129 40131 14815 55108
+35627 19332 65312 5539 32987 57959 11493 44737 21308 63707 10243 28943
+44032 13791 55788 23699 41622 63 50753 18758 29929 48326 13364 63242
+20295 49504 12163 32926 65213 14121 46660 35945 19242 50807 11909
+59394 35730 15255 61264 38473 18158 36031 62928 9833 47426 27318 2335
+50104 38376 14644 27884 62428 19726 43875 9915 37443 61870 2440 31648
+51848 13904 37007 43200 6573 50926 25801 39746 8398 59148 15068 42027
+25655 50744 9927 45842 27971 17636 56225 37287 1247 30652 51861 18390
+45800 5670 50726 22780 35303 55738 6441 27948 49812 19805 54585 7112
+40594 23592 51781 15982 60155 29113 5498 55672 17691 35035 64257 9384
+31476 54389 18581 43434 4926 37145 56271 20680 41869 15042 46738 26117
+52454 8426 41518 23171 49083 14546 39790 26130 58073 6008 43669 24754
+39296 3315 55480 17063 36384 45555 4491 58548 30103 13756 35753 61966
+74 41137 22404 49132 12089 38332 59177 18659 31724 53333 11538 44106
+26823 58490 13687 34224 56077 18641 44031 10293 36662 62475 5953 41593
+19494 31820 64299 11115 48837 21599 33135 63560 7586 48415 24019 40049
+12857 54456 1315 63179 35220 14800 49603 38216 6759 60405 27563 3798
+49136 30212 20398 58189 11789 31338 62164 20265 44609 7996 40072 22912
+51736 15404 60284 2522 27987 52433 18848 38424 49768 7999 29335 53326
+19618 47062 6076 29688 61734 13764 48818 27087 5031 52650 38361 16665
+31984 55436 10261 40377 25951 53630 13993 47050 577 32490 54429 18499
+45246 29377 14971 60526 37212 1969 49748 29660 8998 55065 23825 45528
+11393 31737 63413 1816 41494 23364 60078 5994 39269 11431 64159 21203
+39834 10242 60474 32268 2775 56280 36414 19673 51486 1204 33253 62424
+26199 49080 13809 59409 24619 45174 249 38940 26417 59812 6129 30741
+63810 11021 48202 29935 20682 61529 4695 45474 22499 60455 11594 42396
+19335 64171 28575 15871 47799 25907 43000 7758 63219 26694 49039 1754
+38966 21474 62699 6233 32947 54023 574 47165 30563 17432 37343 62924
+3717 45513 24051 61369 4782 34004 57667 15923 36845 65295 21835 51637
+6343 28693 54196 2167 47818 17474 37892 55883 13080 27747 60494 8832
+44933 33660 3274 38125 52839 17803 31395 44701 3840 55152 28950 7941
+37037 63795 14051 32175 50884 8734 60752 30305 1439 45191 24490 52095
+13592 39997 24204 53170 6869 32565 48018 2333 61662 26238 38724 9717
+58664 20263 33602 61422 6310 43633 23717 38953 1415 45603 23573 54311
+5924 39378 22877 57952 3978 32520 43607 21629 53671 2858 28312 46643
+6222 54821 21934 42574 13107 35553 57386 17976 30135 54731 4125 46795
+35179 7351 53619 28433 16632 38445 56195 8611 28147 49717 18565 63047
+10966 31441 54870 18145 45267 35364 212 55541 19021 36670 63745 3495
+42587 13320 47884 22682 62408 9679 35538 58504 15232 30289 63054 3265
+45564 17148 32574 60666 1448 42186 31526 18190 63143 4158 42870 33905
+11147 45276 25556 51349 2347 42230 22121 49877 5999 34075 62820 14498
+46980 27671 8748 59644 36103 3550 61922 19202 31794 57344 10578 33890
+62358 4092 51738 19896 30816 49650 11838 59230 19628 32725 62059 9647
+28683 51006 19501 43413 6515 52155 27929 16752 58036 34430 5766 63568
+28841 15486 46188 1259 62285 25107 38901 4987 46573 21543 51057 3902
+39835 23383 59398 28850 13412 49056 25409 57499 6647 40708 24261 58389
+620 46056 18748 30017 43836 3388 60983 18274 31055 48414 22019 42539
+5134 61551 27061 18099 38460 56248 12449 33555 63761 5812 39696 25417
+47544 3166 37172 55219 13165 32641 58870 10374 45879 24726 41919 11552
+56367 36513 4438 27175 57876 15297 36745 63008 11099 32227 55690 2865
+44599 20083 37950 58022 14640 27699 63369 6361 42630 24437 60131 4415
+32774 57708 18988 38192 49296 7778 27371 64453 3337 42660 22683 56063
+13244 33728 63872 19266 46984 3057 39096 25291 57541 17377 51043 9498
+29208 45938 16685 53571 26019 49133 1962 30248 45755 15474 52692 22990
+41174 8724 46384 26349 57972 12629 40574 2998 35413 53453 6509 30206
+50305 18498 57198 9391 43597 23327 54187 15844 34167 42941 8111 52407
+14885 39710 26218 54572 7281 38839 25889 50546 3169 35393 53594 6750
+60672 21319 38519 11464 56874 18937 33333 55414 10206 44412 23663
+51788 14221 39914 20992 59693 5525 28043 52619 12092 40686 21230 51402
+13208 43515 20465 54460 3046 28013 46167 9842 35868 60143 14281 43019
+33744 21260 64353 3960 45840 36411 15559 53334 29383 12063 57751 27238
+9570 65437 36448 11672 61135 21942 42541 16083 52220 23899 48644 5839
+41184 22368 47452 17350 37479 59358 7199 42395 23182 63110 3139 38816
+26863 58894 17181 40189 20883 52622 5139 47467 16233 54283 28092 11381
+35588 57190 15526 47579 26787 62609 8475 38552 26999 60531 17695 47487
+10649 27969 64156 7287 41722 18722 34019 57701 14495 31101 48587 1000
+65293 24244 39911 5923 60973 24116 39882 15363 64668 21361 32280 58529
+5181 47343 19531 33830 60271 960 44594 36027 20449 47732 3182 58254
+29727 14390 62678 22945 47610 6762 30331 54104 19819 34216 52789 5256
+40920 25201 53956 2388 44691 21989 41138 10338 56694 24769 48412 12707
+35432 58074 8528 45326 25242 55270 14479 48285 22482 61695 8415 33122
+57548 11736 29364 60347 16124 42735 22795 55439 605 31746 51700 17494
+45844 29140 11894 50181 37356 1736 54314 28388 13432 45057 35992 15217
+64781 1080 40892 26193 52764 5765 43585 22670 40342 1569 59793 33261
+17757 64557 37475 9209 46705 19216 50824 32331 9269 56505 35497 21733
+49918 10273 43129 23513 59934 12870 30780 63736 17229 47115 6875 34315
+55596 1626 43822 18334 30084 53846 12590 35488 52520 9864 38055 59002
+14921 52019 24805 41277 6478 57655 15794 32662 45599 10417 52575 32246
+386 44654 24459 53863 15353 42136 22824 60929 10021 52978 28771 16579
+65284 27317 707 50651 36609 7218 60802 28768 17873 38489 64863 9821
+32007 48193 324 39861 22076 51088 15677 34872 65171 8130 28776 49356
+776 36418 46386 20325 51896 12692 39720 22538 50800 8395 28797 62702
+12906 36480 55177 16400 33272 50513 9250 40884 25054 52648 6133 39673
+26667 59334 15164 49266 6646 44108 34571 21035 62420 38259 3821 33269
+59719 13612 41587 23648 63122 6925 35218 58560 13444 30422 62859 5438
+39293 20821 55425 60812 22041 41170 17670 64339 11896 34361 41918
+20849 62158 2296 39916 24919 48891 3615 57620 21806 33194 62923 515
+42895 23977 59284 15139 32277 61914 12260 40804 23972 44440 2415 52512
+27003 39681 5065 49911 16998 30835 61431 3193 38625 26896 65419 9719
+32474 54542 15278 42059 24766 63792 896 38621 26921 60423 6790 30683
+50457 15137 37838 57311 18810 27096 48648 5307 55284 28169 10375 52179
+31440 18299 48629 45 63331 38442 16800 35080 46081 1790 50368 24311
+39959 6302 54524 30763 604 60349 37664 15326 29516 64291 3554 52728
+27255 10752 32102 53513 12494 41245 21548 55589 15178 45153 7621 34116
+65021 13473 42646 23456 35959 44639 1977 63950 22782 41831 4514 55243
+13037 40200 22046 57478 11737 39952 708 53166 20343 34308 54493 13619
+49853 23519 63168 8336 37409 52523 17367 28924 44755 9271 53390 21737
+48562 12001 34414 51669 1316 45733 12895 41562 24610 63801 10094 40638
+22315 54559 14747 29102 65263 9789 41686 24598 51518 5331 31242 42985
+12285 59955 24607 39973 8322 59274 16785 29037 65389 11082 33645 48477
+8146 61536 31322 17835 37033 43220 4910 64573 28277 16385 52089 20438
+39024 6119 63768 35698 263 40621 24884 52670 14461 37972 48228 3635
+33063 53163 10296 41084 25586 65176 12526 34521 58373 5193 43851 24787
+63981 15431 42231 23639 49385 7617 57707 21158 32024 45563 10429 56457
+18024 33601 64044 11270 46111 24616 53892 10158 48696 31076 3768 55894
+26350 43228 2050 55002 24664 41573 5372 65301 17917 36834 56993 7711
+32466 44914 979 54021 25677 41370 15450 51312 22583 65015 13984 36202
+60171 4450 45039 27166 16389 62639 28516 5697 46870 34355 11977 62151
+37623 21044 46964 2518 65535 28450 13354 59330 36749 20023 50289 7311
+35147 57140 1399 45171 21060 35356 49718 5002 44038 34438 21651 57378
+14483 44717 31896 1919 54785 35601 13610 27822 51619 17109 58655 23830
+42232 6319 54299 21010 40742 12876 56282 32408 18631 61386 8788 30582
+57354 2431 34285 64182 17883 46519 35173 1562 52681 22341 43337 5119
+57520 20218 30601 63098 365 43948 22133 61492 12086 33148 42265 18692
+65145 30270 819 52785 12527 27941 55542 18654 47802 5205 36290 54336
+18137 46842 27487 457 50262 36759 17776 52074 24297 44402 9615 48555
+31689 1738 52263 25753 46282 4721 56429 28667 8775 50973 36143 12810
+64679 26427 41842 9711 50084 19186 29825 53784 11251 44431 5071 55495
+20268 30177 47421 9058 57530 34988 19397 64757 13144 42432 23949 59306
+8857 40214 24732 57433 6856 41461 21832 49944 2352 34202 57019 7788
+44075 23619 58172 11628 32817 48128 18436 63429 7923 44663 29003 1124
+62713 38363 12029 32062 59792 19519 41121 6670 61005 37601 20092 28011
+47262 5305 56650 19808 28645 59592 13895 48126 28320 18400 58155 35431
+10002 46581 21797 56253 11344 34825 43510 16286 61953 36427 331 58306
+26538 48781 4765 31309 60058 23496 49202 1040 30373 55393 8902 61009
+19058 31632 50165 8089 58907 30249 18035 35467 52499 2706 43760 25240
+50097 17027 30942 62226 5480 44046 25796 38679 1581 44770 26693 56463
+4191 32976 61811 13911 37612 58925 3294 30925 44187 9097 57733 28864
+19990 55370 35985 2971 46579 26517 56648 6312 32543 51136 3897 40012
+22219 53428 13055 36413 61412 17160 48974 34282 2631 55282 18267 46569
+32599 840 49977 37914 20272 57105 15512 40393 23889 52243 474 59131
+22421 47560 10732 33977 54934 2632 41246 26362 50926 11819 30904 54372
+18889 42516 5806 64458 28151 18762 58097 27054 7355 61288 35855 19130
+49166 6906 40710 16711 53789 20537 38767 8191 56548 32270 2922 61345
+36613 18595 47823 4993 60043 26855 38862 2668 50733 20274 30672 57656
+8073 38838 26203 44251 14187 60452 23020 38790 11536 62621 20414 38624
+12989 52327 26240 47026 2987 28838 50633 14631 62079 24070 39263 8824
+58600 30400 3368 45888 38037 7164 27806 47310 19633 55792 32789 2109
+50285 37098 19100 55021 27510 911 49632 28580 9106 56430 33872 16954
+38153 53193 4723 27512 47066 13935 64530 28488 16303 52139 31126 11129
+58338 18520 28181 62798 12506 40873 6047 50050 17096 63393 25735 47671
+8122 37934 61280 4163 32859 45658 7687 62500 25557 39223 2184 60375
+26368 42277 5317 51212 24181 41021 15876 44809 23410 53203 7297 39314
+15134 60426 25716 41353 9674 59496 24720 38914 11105 53481 17996 36074
+56975 8729 31243 51561 2528 55811 27888 10027 48695 38393 19875 58862
+36621 7380 43121 23025 64795 29292 9060 42371 14460 61112 37784 10825
+57044 28179 3892 65258 34769 15577 7956 59014 37189 19424 61787 10438
+33140 40823 17376 60415 31657 21262 55584 5793 46372 16851 36138 58824
+6931 40568 15884 65240 34213 18524 37897 49131 1194 63081 27520 14462
+51454 30764 8194 36142 54481 76 44779 26786 52948 12207 48753 18614
+31500 46140 13622 62416 27125 16901 50913 36033 9983 46885 21594 55025
+1985 41437 23576 34223 56615 12502 49373 30461 17137 54553 36482 2774
+46920 25945 53745 13464 30722 50799 8653 58820 33394 12748 51632 37839
+7851 31893 62950 4110 45325 12400 40964 26069 62536 2529 31611 48061
+18986 54703 5406 28961 50337 19576 46193 9226 33461 62899 19460 41225
+10044 53856 22111 46029 14587 33433 51732 3932 45631 27336 15065 47158
+37626 9317 60139 28898 19585 64766 33755 6668 56693 12844 41952 23658
+55303 11056 48577 21146 58522 9960 40060 22679 51370 6578 47261 19774
+27961 50600 15742 63567 23294 41022 4794 61618 15692 30605 52593 12042
+39963 20804 62298 15564 43127 24955 60806 7750 33100 56503 1493 27731
+41177 10284 64410 20339 29531 52302 10841 40554 22014 60911 7158 31634
+45608 4003 63835 29519 13723 44185 36051 6794 30696 61157 15473 42291
+23596 59817 13515 44493 21962 57126 9126 33553 59579 16719 47481 35618
+1369 50756 38469 16511 29826 46752 2825 55993 22269 33448 62220 1187
+43015 23773 47930 16042 52231 23088 40767 11407 55917 22459 39755
+12489 52186 23914 62837 14681 47384 5198 42339 23531 61228 710 51609
+21153 41113 5948 53153 25235 48030 4203 44510 23075 59731 10738 34908
+61317 17121 42072 33811 5718 52987 18142 47783 34767 12344 60921 21742
+52154 16803 33691 61557 8284 40404 14581 64574 24776 41653 7011 59582
+13948 37030 63360 16041 42098 23781 47728 7391 60724 21796 45368 33339
+9659 54281 37447 3468 43792 24189 61987 6469 36865 53969 2385 31556
+47270 19027 59025 24237 38753 3462 42859 21182 58256 14963 44021 24923
+55828 12065 30085 48525 14457 55299 33217 9771 47454 21621 58270 11291
+34479 63741 3707 49737 32394 13609 56826 24593 43586 5448 51557 19440
+33008 48411 2809 62123 26397 41837 6556 27908 49111 16266 41848 22927
+47710 7847 35727 61018 14817 27167 50339 3203 30005 61613 16185 46274
+1387 32655 57971 21297 52098 4697 31614 48821 16532 45469 37266 14028
+55781 27261 17288 28777 50698 3387 43931 23662 54665 13611 45791 775
+50091 11441 41235 22791 30025 60776 1939 47890 22440 28958 52115 3391
+46219 27834 9300 58550 32765 16971 37361 44991 3605 60372 24550 41115
+16478 62071 20599 38556 5626 63961 22730 43472 1304 55619 37531 8612
+31195 59287 3874 41145 25615 64887 5988 38880 27008 60863 14793 47590
+4309 39563 22870 59078 6003 43371 21875 65091 11532 39338 23024 62215
+1601 35634 44769 16335 27120 64197 2663 44087 22596 52750 16295 33781
+55507 20847 47326 6791 51797 23524 40230 8911 59808 22725 37661 64621
+8021 40240 24438 54342 14448 44203 2146 56881 26306 38749 6219 63504
+26839 39609 12017 58301 20695 34675 64368 420 53263 24518 40753 4948
+50792 14514 46534 38296 18343 30198 59530 3187 39352 26496 62749 5003
+34944 45688 14739 64247 28257 11476 35353 60340 518 43353 32747 7235
+54415 29654 17788 47851 36945 8785 59153 25355 48933 372 35728 53798
+9146 30111 49258 19641 45445 15275 34683 58898 21017 44190 5892 50360
+36506 3617 62571 26412 43654 14156 55799 27333 17112 51698 36453 8592
+49222 21508 56847 16826 49732 27778 3847 55970 37685 7807 29467 62119
+1800 39621 25382 50072 4017 29669 43611 13981 62918 27375 8982 54831
+37422 13525 63666 26657 44507 7588 49906 28485 13914 60859 36884 4318
+31190 65078 7280 46370 31157 396 61818 25293 44763 6626 34873 41428
+21773 56087 12815 36090 49010 17015 33864 63223 9837 30514 57588 15722
+41955 26794 55490 7494 32567 49744 438 28260 45497 11400 57810 21221
+29627 64010 2253 43095 25287 49525 10634 29651 54880 339 43106 20871
+57617 30899 4887 53419 19857 44652 31396 22684 51530 8432 32198 57381
+3945 29629 50879 19146 40714 1725 62957 18509 29925 59692 12847 49933
+18160 33229 47775 14421 42495 22956 61296 8343 35745 52293 12010 46368
+26718 55106 11118 34444 51905 1129 39812 18928 63811 37112 3076 28451
+45034 17361 64617 37238 1317 29952 52629 17519 46129 28716 9834 59729
+37522 48 30643 65377 16607 36782 56159 12021 29063 44521 20751 49890
+13998 64963 36947 4181 58993 29890 12779 63962 37994 20401 45899 4817
+56171 37670 18046 52267 10632 34457 56413 19729 48339 8014 34979 43920
+17375 63873 27156 7468 59766 30031 1116 47535 38226 6043 35748 57619
+16135 32173 64875 5613 39118 26629 58512 17983 34618 63307 4489 52999
+19455 34992 43733 9939 57771 20473 36598 61014 13405 41107 22336 54174
+5890 47009 20973 50131 12601 32728 53201 4614 29393 47285 10350 56535
+26303 41890 11754 60489 19825 27999 52277 15441 42446 22806 53331
+13410 35054 55659 19871 44384 7342 52202 21246 32104 63964 9596 40787
+24744 51774 15039 31664 56295 4836 45273 17928 52021 24175 55674 6010
+38074 48839 18018 34051 57149 9653 43193 27369 1069 64728 38095 17450
+30081 56911 13197 44822 33436 1536 51785 17909 30441 47436 3342 61050
+29691 18481 36405 48306 11101 59666 21412 42305 2868 55090 25267 41683
+6808 50817 16953 29659 44037 10049 61320 22320 31905 57725 1702 27616
+61961 8370 44561 21920 52479 12470 47435 29352 17662 55552 31245 2249
+37391 54111 21023 41595 13430 56223 24900 47214 10897 34274 60062 1932
+51428 23674 43004 6968 33935 64483 14407 41346 22689 55981 2480 37301
+63878 7208 48448 28567 12540 56071 32244 15142 54277 24272 45832 8656
+37481 50840 1648 34480 60352 11617 42086 23704 62322 2176 32230 45380
+12460 64825 35983 19349 51152 11245 33731 52480 20660 45125 10104
+65458 26941 53902 7721 32964 46099 17956 58926 34196 4417 51076 20861
+39054 11366 59688 18107 32813 55020 9590 44751 25685 50967 12561 28807
+54980 18294 35309 49161 9340 29109 59447 17739 49627 1848 32153 65418
+7742 27719 57048 3583 42593 21866 48527 35579 1424 64846 13267 39900
+22074 58776 14274 35758 64280 18919 47865 4373 35458 52062 9894 40124
+20219 56962 5352 36181 62349 15921 39496 25154 46276 9262 49807 17283
+35661 60773 11635 48519 3144 35692 54333 19940 44044 14665 63868 32125
+9312 56670 35857 22595 48394 7095 41120 26375 57300 846 29535 63978
+9848 35015 51061 16165 45336 28833 221 64190 22346 39278 5572 62075
+29982 16340 59686 23650 45166 10098 49380 22612 59581 7076 30692 51626
+13724 44399 22608 61001 6829 40517 24487 47538 14238 54515 22966 44339
+8954 49605 27580 3883 61224 37456 10364 58500 1049 33303 43710 19789
+52331 10198 34933 54469 1489 28624 57142 17378 43209 9051 29309 63622
+22502 45146 5912 40182 24460 62270 15242 28291 57280 2212 36026 49898
+19150 42297 11546 54108 26128 63447 49979 22232 41228 9329 52595 23975
+47809 15146 42732 7098 51299 23284 45366 13360 28674 48642 6022 64089
+17831 32804 51172 7871 30993 48077 2620 63731 25425 40085 15443 57086
+34976 7340 64388 21945 37344 59152 15533 34063 51443 3472 38889 24581
+50219 7114 33810 64579 2625 47308 32276 6717 62032 28545 189 50062
+15628 40387 26388 57202 2484 42802 18587 53964 28661 645 61516 35676
+10692 50338 26672 39907 8216 42552 14654 59258 31427 10794 61802 27685
+4448 36594 60803 13702 49442 28851 11045 53593 36353 3667 63301 19895
+48533 28411 14503 58734 36986 11465 52382 25538 40726 5831 65236 16592
+30257 46367 8124 53247 26988 38508 10176 62467 19961 36774 59373 5633
+33965 55650 18859 45972 11526 38025 54662 15332 47628 36714 16731
+32076 65470 177 33542 58825 7132 42871 24156 60834 15941 47869 5575
+62301 23703 38785 3829 65014 22126 45274 14727 38805 20852 63111 11212
+54226 29844 17766 45674 5644 60472 32456 11446 52815 27194 18180 35546
+61878 556 42854 25099 60252 6942 39724 20979 65048 12894 29212 58167
+17927 47862 27825 5173 53065 36996 18935 57923 7555 41856 29375 1004
+47934 24290 62955 16107 40683 5666 58661 22987 38506 12816 48598 20377
+60858 2483 42353 28912 12737 47272 25759 57804 57 43583 24009 52452
+4974 39722 21615 57610 1637 33639 60174 20412 41540 3863 63169 16377
+37043 53587 4750 31033 55140 20045 44333 15290 37239 52441 10547 47142
+29717 17946 59219 11759 50241 20814 30497 52779 3446 42858 26022 53855
+8690 41560 26008 56242 14092 44224 25993 58970 13036 38760 22089 51607
+8600 32241 48712 3839 63649 22149 32549 56175 1339 28916 42279 16271
+65093 27193 6817 58081 37706 0 42685 24611 52372 15622 44172 4907
+58932 34694 19838 51845 11812 45973 19062 38243 54939 4075 27190 59945
+7607 33823 55708 18057 41995 10268 47399 25069 50570 8945 35182 42222
+4677 57106 32524 11833 36339 54102 20566 40042 4342 56458 33128 10618
+50593 36907 2643 61972 21517 39778 4957 58709 32317 18739 53598 38221
+14339 30280 47860 18278 55062 28651 7188 60176 25127 46825 15578 42657
+23462 50931 11507 33752 60325 20987 47437 203 32003 58385 14209 49033
+33151 3716 51749 37132 12080 54754 21735 30961 61542 4279 39714 20920
+44669 13261 61168 11 46426 31005 19595 56958 2737 36406 62459 18713
+31863 59439 1633 37143 57121 15358 40326 24984 55071 300 42138 24445
+56453 14566 43632 29425 8542 59485 31287 868 50822 25791 42418 13669
+55109 1934 45605 20349 30878 63391 13078 44346 17807 58098 37963 10833
+28749 54157 18557 44929 12239 37802 58632 17907 33147 63066 10479
+46947 20165 34665 60605 8393 49797 37444 14300 47744 21157 58442 3012
+31518 63682 19287 46911 28616 463 52361 38329 20126 53923 15805 44642
+23130 40678 7564 60144 32791 15306 51187 22427 42286 9772 61729 35216
+5077 55805 21975 42471 9372 54814 22568 34942 43781 649 58166 23812
+40170 12776 56019 23077 49067 1504 28426 44939 14102 49713 27273 3010
+62869 35640 7507 29616 51565 4193 27078 55950 9740 43403 23539 51042
+13398 38716 20638 52147 8935 40501 19499 30826 44482 12181 55086 26242
+40017 8348 50893 26093 57067 6241 40821 25969 46814 3599 37646 58185
+19068 27554 50124 16076 38029 46863 4757 53910 23731 39204 10594 51606
+18247 35207 49863 2713 41183 25435 54800 6301 30966 43182 15111 64205
+30086 9137 46489 25042 54820 14063 34890 60187 18624 43494 4259 36510
+55696 18076 31789 47321 646 57471 23768 39029 11242 51553 21345 62478
+35311 6526 52964 17212 31685 64710 13218 42173 25965 62613 10235 35744
+50113 17236 44003 7944 31967 56663 21729 46175 9951 40858 25692 63690
+12148 34464 47648 5441 60782 27160 16458 37932 61843 6695 40135 24320
+44926 7759 56835 18141 32927 62199 6101 39033 23770 60463 1805 39009
+22069 62986 6563 31523 48090 1115 65443 24486 41826 15040 59588 26553
+38908 11091 50779 18249 36761 59119 10408 46106 21463 33356 51164
+12259 28560 49532 17197 61660 7898 38694 26429 53583 12487 29593 65225
+3049 40525 24404 60833 9233 28869 49408 14912 37638 51991 20346 44474
+4833 60338 32453 19679 57568 2035 30820 65410 13419 46409 20179 27683
+62824 486 43028 16258 60263 24426 42261 14718 63134 27577 18704 55144
+35190 10175 50154 26247 42245 12753 63420 1891 46284 24902 62372 6168
+34681 45134 14759 50796 22672 39511 3372 63011 32033 6883 58112 37285
+4033 49348 30614 15049 53975 36979 11506 27630 60818 18913 43266 10118
+64566 25643 41496 6756 51166 15150 43446 25305 58819 8202 31666 15114
+40076 25497 63940 7445 37803 49176 14171 28491 53869 8371 40984 24831
+49670 10411 31335 61558 8682 47187 35973 19893 62785 5390 35148 52745
+20411 49445 11469 35776 44776 18350 61348 9236 39346 26437 48925 14612
+60120 6349 40303 26735 55809 689 31029 48436 20209 61593 5055 33364
+57506 22439 48114 8265 30130 52604 3648 39207 25782 56038 5412 45005
+27536 17317 32285 64501 6582 44382 29859 16030 52637 36316 5145 56797
+23127 44269 12990 33031 65007 8016 29960 50069 1994 57861 24993 39339
+4933 55939 26501 39116 204 46782 24090 50754 16220 31276 46035 1856
+59112 32738 11805 61483 20746 50246 14999 32450 63858 4659 45307 31742
+17808 57302 35547 9764 65104 20362 37636 52720 15727 42923 22935 47057
+13765 63676 38479 18757 35135 60447 6196 40105 26279 56354 3538 32600
+64589 25112 46476 1492 59141 34269 10065 49103 20118 58586 30378 859
+48145 36043 18932 61993 13872 49728 30983 12264 55248 35707 1351 64960
+30543 8994 58675 22179 43556 16463 57556 31393 5586 62081 21699 30977
+59098 11128 47349 20119 36701 57504 150 44908 19686 34671 61049 3308
+42493 23554 52804 6394 46072 25729 59290 13942 28622 45637 8687 63326
+26157 42124 6735 54991 25843 46628 4725 41094 18532 56551 24451 40853
+8266 49125 35572 3291 54410 19584 46226 29706 5622 64143 25328 53455
+13257 37773 49790 999 28057 59877 18164 48922 2616 28009 58446 20737
+43074 33090 171 54204 19866 31595 49425 2755 63374 26865 38773 10559
+51817 24877 45650 11874 49905 18513 33398 53091 9460 40605 23939 55079
+17008 33597 43302 7683 56352 31074 2642 53293 20698 42793 4687 62840
+27438 7454 52500 37837 2287 61965 18559 36057 58643 4242 40548 23795
+48054 19542 60136 1953 42501 23299 49090 16023 35991 55452 5520 46507
+35443 19598 57823 1617 29875 64900 12268 39517 22954 49835 11470 37448
+53952 16982 40447 24639 53280 6456 31609 51421 18258 37792 50025 9307
+29164 53291 1767 31847 49079 6270 43402 17037 64790 30608 7864 56446
+33652 18071 51056 35455 9436 41105 21705 58022 2314 31047 64517 8643
+47906 30499 19132 54805 38297 16738 27661 61432 9692 41927 24185 65321
+7664 50133 38224 2952 31130 53210 20250 39513 680 58128 33082 18440
+62771 36296 2571 48482 23043 55087 5296 58405 17171 30047 53147 10953
+32680 60288 4375 46568 21355 65180 16672 35626 52818 3985 44708 17291
+27740 53996 11828 29858 44591 17419 60205 3021 39571 24194 65483 6700
+51863 21212 30586 57951 4409 43406 28725 18337 54707 36151 11261 47037
+24129 59910 8501 36604 43976 15667 50606 27587 1691 36800 61094 14970
+41792 23881 65230 13806 31275 51054 10930 37901 57056 2139 42085 25709
+54675 8985 41559 21734 62356 11865 33355 47917 17097 59726 3447 40670
+25009 55010 14906 32897 46322 11817 61189 20731 44226 9124 65347 33914
+18564 57964 6100 37389 64043 14049 28874 49659 19561 42078 4079 46883
+28781 8651 52768 22079 41272 16245 60194 6548 47859 25636 41973 3852
+54964 28292 7122 60652 33138 905 58474 37253 8151 30369 53103 2488
+27769 48027 11219 59453 22296 42033 14261 50265 7766 35509 53864 16591
+28294 63652 3215 42864 14280 34094 61119 11765 27816 52151 2665 42176
+21880 59260 6644 40928 23393 46067 10911 51752 26484 40629 12774 63523
+1889 46026 25983 41448 9835 52057 16849 33950 44520 4556 62994 27328
+14400 54242 32303 10016 52168 26824 48661 13057 38754 17506 61868
+32168 11007 37729 48302 2230 54289 33062 17515 40292 12466 60387 31548
+15415 37707 64191 10058 31959 47741 1846 61869 28796 15999 58605 30581
+10829 37530 60431 15388 41764 22263 47873 2992 29694 58193 15640 34634
+52408 10810 44875 31862 14985 54540 36005 7310 50079 14018 64489 25089
+43678 9220 58188 34795 13680 47316 22380 60083 797 41061 19696 63689
+30901 3053 58426 15318 43656 26972 61755 3969 46158 13573 60209 27782
+17688 47786 35623 12000 57917 25997 47357 15726 35219 55375 20543
+29588 48714 9362 42478 22902 53676 14414 31696 64700 6251 44541 30721
+16546 57687 33861 8607 61886 31119 14179 44020 21475 62592 10262 32978
+50251 15955 42650 25253 54630 2830 31618 63184 7804 28131 46912 3737
+58619 15612 37947 61967 10693 46751 28262 4969 64474 34781 12019 57909
+37998 15961 60018 25010 40675 874 52187 24925 39484 4262 60561 28772
+13465 55901 25825 42970 8065 53813 36898 16960 27288 56460 13563 45021
+624 52153 11807 34164 44989 19391 56866 2034 33134 43987 16542 55143
+22238 44774 7177 55973 23834 47430 13476 28735 44369 10299 54563 28234
+12916 45413 33551 20549 36638 51311 2044 42092 24465 55442 15598 39359
+25826 43333 985 56037 12351 29141 59672 20676 37380 64612 2104 33822
+58106 7067 47445 21104 34043 54394 13843 46474 26749 38730 1568 49234
+17174 33676 62366 8126 50958 31701 2779 65053 21423 42840 12655 51874
+28242 3992 63913 20854 34218 56089 11024 44219 21424 54632 7477 34240
+45535 1009 58860 28375 15630 46201 22161 62643 12866 39235 23747 58684
+1380 49281 26079 40165 5919 51294 21150 31197 56451 9759 43577 21640
+63484 5803 41083 25693 52124 13393 30657 48670 4374 41697 25083 52738
+10462 40075 25986 56184 7191 30252 63356 13629 38413 59759 17820 33904
+56607 2446 46793 26425 38916 13562 61637 21181 50385 11087 38159 48121
+16848 27155 50020 10781 43936 22225 56748 14832 38177 62511 16456
+30941 44729 1125 54864 30278 17861 61696 21482 41325 6416 48462 36445
+18058 56885 25318 46725 5434 38254 55825 17486 32388 63343 10560 39205
+26269 53307 14860 61746 20175 38787 3393 54873 32620 19579 51108 36599
+14252 48986 23779 64029 1160 39391 19468 53324 30008 8818 49909 37607
+20842 59534 4809 40224 21808 65221 1550 41468 22566 55018 5153 28162
+63926 15056 42588 25219 56721 3675 48266 24163 44624 1279 52329 20090
+28438 58351 14134 43812 36160 20590 51616 6040 44358 23559 50585 740
+28907 57260 8569 34957 61748 20604 40481 9096 64962 22905 39867 6460
+61105 25080 39238 12014 56376 18858 41451 29684 6279 52847 38083 15683
+28031 55977 5184 43872 34137 16561 56599 36360 9129 54614 21239 46487
+34895 6283 50458 17679 38732 26633 52986 5595 37166 51125 9738 64468
+21716 39994 6567 32319 58757 565 43181 11343 64172 17562 31867 55800
+3286 36757 45956 11630 50174 27392 10464 55309 37825 5111 51011 21745
+40095 452 54266 26815 48157 3764 40869 24595 56855 5888 34252 61631
+9401 47695 19104 34636 44289 13125 56678 33044 21085 49138 27358 1486
+34169 55729 21129 41550 15218 52538 24850 47370 7278 28948 54443 12566
+48480 32272 19553 58161 11131 43914 21879 49505 37255 419 64056 19220
+29568 47201 11107 60348 38446 4942 33292 61946 20056 40955 26051 64211
+5246 48109 25755 40832 10899 62450 29641 4560 59413 33117 15463 38133
+63746 8554 34498 60044 4874 50804 20759 35021 65448 8990 49488 59450
+11908 28619 62993 19198 45684 5715 33916 61985 11687 52478 32553 19219
+38342 45910 6169 49925 11272 41539 25251 50880 12912 40019 25908 62193
+9749 28605 58805 4760 42047 15552 63162 23901 53752 10959 40641 22898
+44825 15286 53469 25822 41326 5786 56428 19612 35662 46634 14585 52923
+6335 42343 25744 62274 3262 39726 25460 60196 12417 48967 18862 36540
+61251 7258 31035 47899 4119 55874 28583 15118 45820 32571 9854 60570
+18630 28453 64081 12618 47516 36487 861 51279 37548 17548 31477 56677
+2326 36240 59482 16842 28329 62509 12862 44359 21211 60413 2767 34552
+48328 17134 53550 35947 1285 27153 51592 7596 40013 22865 64563 8391
+33007 55334 109 44665 29631 18319 63398 31303 2784 55390 35400 17745
+64885 32606 3765 50602 29163 7867 54090 35687 19489 63982 9600 46843
+36557 4529 51068 24301 57969 12735 30667 53357 8018 40631 21391 65360
+29650 12922 48566 4608 43628 22500 56417 90 33129 48972 5791 44194
+25063 59941 15841 41407 6831 61162 29130 4151 57331 32995 9099 45201
+24391 56731 13196 46604 34791 2350 61678 16058 42901 26233 56635 11197
+45150 25217 58214 9358 30472 48976 12199 41846 23665 59010 7359 38821
+21604 64932 9608 32570 56006 16374 37059 45892 4228 53839 27357 8551
+59913 37654 18727 65264 11815 34554 55432 13952 32194 51645 17876
+43580 5969 53110 24482 46349 3541 29589 55972 19459 42106 1464 63893
+26290 45952 3986 59391 33383 21275 62722 1923 45478 31208 20901 65211
+12812 48675 28264 6849 51347 26021 39862 10295 64705 19782 32419 59273
+116 44915 21611 63256 15396 29307 42407 1718 45866 25370 61335 14075
+48902 28303 19347 52012 36496 5624 47819 24981 62738 15829 29350 58168
+1042 34221 61437 18416 45540 29915 13714 64379 25681 43125 10659 59061
+17834 31571 63634 11290 43237 21315 49073 14321 40557 24160 59515 614
+51495 23202 41023 5634 63922 12152 36574 59297 17585 43361 7936 60893
+32654 2743 44884 19423 63508 34544 3245 44059 21815 61813 5973 46630
+34289 16860 62578 8449 31567 52829 15725 44131 35183 3602 50621 28455
+15331 53009 23163 43855 7550 55217 14047 39254 22823 56073 8450 33901
+52882 18746 42589 12826 47061 24330 52664 1781 27904 49134 16683 45017
+24757 39854 14378 55957 1175 39399 25062 31714 4218 48043 37979 13881
+57886 23051 49893 9234 30127 47468 3237 63533 27224 14935 57445 34132
+21694 61211 4883 30576 56206 16993 45691 606 37704 50519 11820 30723
+56325 20577 44585 6151 38521 27031 57672 234 48340 35242 10006 61067
+28824 16446 38336 62765 1413 29662 57713 22123 38843 11712 51436 19204
+31541 52915 8684 43672 22607 30486 55578 2670 41133 24248 52903 11637
+40468 20044 34443 65533 7886 49997 22185 35390 52503 2467 44963 34192
+7373 27110 62635 16299 28466 58372 10149 42034 21636 53213 7319 38064
+49589 1133 32133 54658 8461 39300 23277 57569 6426 27820 43377 12188
+62099 38184 15686 31726 58476 11575 41854 25046 51373 15364 39957
+22631 59951 5743 35445 51060 14545 27931 57829 6350 41485 24597 46389
+13163 61221 25820 41007 5739 52003 24285 39739 13805 59845 28354 15631
+45367 37896 282 62120 23360 43859 15593 51531 1699 37886 54046 19951
+34104 60569 8698 40549 24498 64568 13707 38584 20707 50518 8539 31740
+55661 23475 47418 11647 40000 22721 52377 16252 60568 36350 5478 28126
+64698 11829 41300 24836 52830 8110 38531 17789 51120 33466 6839 36752
+53171 15603 61237 34993 311 50923 19670 32552 53473 11738 43518 26756
+49816 6989 60708 29977 13248 63531 34358 11551 49842 31036 2627 45389
+24748 48982 5090 40403 25670 63350 2195 39094 26408 56899 12309 32909
+60648 16846 37158 45420 11569 53353 34290 21206 50901 9598 39073 19683
+51735 8077 35754 48403 17903 53442 9376 40299 33293 3344 61153 37879
+19107 57406 1534 42809 24104 53663 11194 42079 23421 56787 8210 34089
+48736 10970 55663 34048 19437 54044 8739 34864 41774 3991 56891 30784
+14573 59851 21135 42139 8730 34686 52170 19109 43505 12909 49376 27795
+2934 53312 35333 8141 56040 19191 32593 47219 6465 53132 23324 39315
+1269 54212 26544 60768 5063 30564 45076 17206 36150 54862 14492 30404
+45995 20043 52015 4127 30384 54843 22047 40536 12491 56640 26726 40531
+9730 50590 17938 31135 53753 10465 38965 26432 56753 2490 29195 54627
+20527 40696 5395 59746 22293 55527 12615 38239 65200 1680 35939 57537
+17423 32060 47189 2769 60075 29766 17611 48622 893 61081 26398 39190
+5679 62976 18236 36852 57822 9438 31797 52241 3467 61939 19522 31937
+46058 10647 53708 15801 64135 27681 7694 54360 35394 437 41630 26259
+60558 17133 34782 44097 8080 51425 30484 1361 47756 38218 19675 52090
+7530 35737 63843 22172 42753 16012 59786 37083 2891 48517 25501 55645
+9405 39616 16863 64258 20454 30578 50625 3347 36567 54071 7964 31842
+49497 18531 45155 5379 64459 26887 41081 427 58322 17448 36134 63002
+5243 47573 16276 37219 63883 9847 31799 57913 17287 45357 135 53556
+26854 40602 4979 57097 17711 29280 58903 13894 37603 48847 10929 54189
+34946 3875 47462 24628 64386 13865 44835 19590 27402 58608 15399 42610
+24816 64922 11408 33600 46590 18055 54298 32548 5190 52392 24503 48513
+3465 44598 20571 62306 4975 31011 57998 11297 42959 25572 54755 8686
+46250 37700 19475 49049 11340 59162 20688 38610 552 48873 20035 57901
+16045 32923 48547 2363 55304 34495 9968 64428 27405 17118 49819 33680
+6013 59630 31503 18904 57898 27781 7349 49447 16580 30691 52564 10074
+45707 26952 57875 2846 29895 63073 19009 43832 768 33360 65524 20318
+42622 3001 48684 30377 10736 55221 38117 18930 31926 58610 4087 44404
+22561 63665 921 29887 60451 20109 47086 3079 43169 21154 28403 45409
+13681 62705 4934 41271 22847 57008 2386 38751 24562 41318 19126 51875
+492 39858 24477 55646 15848 38236 57407 7810 30962 60682 20876 44674
+14828 33362 59076 9796 42431 21790 48387 298 55101 27115 7645 62879
+30107 4667 58767 15894 44728 27019 62319 12559 42942 25032 60529 5990
+29220 57812 16070 50445 22815 44942 12074 30007 47040 16296 62435
+37250 5254 31078 52522 14287 39595 24577 62109 3724 41382 22370 60626
+5240 30802 49535 17449 65161 22783 46360 10683 34381 53380 1490 45047
+26604 60685 4482 39816 25683 63945 7155 37107 59519 14575 48425 24082
+41814 2089 60315 20626 34734 44764 13325 58633 32195 19257 47073 12874
+36349 53145 7982 64731 27207 3091 58219 38371 9132 61794 24031 42135
+14315 45877 5976 65009 23813 38984 155 61494 20396 35633 59251 4555
+42035 23433 65495 12194 41481 18815 35892 45981 9807 63697 27911 14745
+47868 30770 6997 46359 27045 18777 49707 28774 6450 63372 21014 36841
+44362 11143 53791 20735 36124 45450 14100 57391 21335 31554 51094 6810
+39884 21127 64770 13743 39185 26721 48470 6410 56580 24430 42133 34149
+45151 17987 50534 30751 12649 62545 20881 45418 6963 55566 28629 13311
+59158 35941 16214 64219 27845 10082 57780 31753 14331 48606 27600 3912
+53886 33211 8482 28042 64921 19012 41142 13215 60466 26732 42426 5213
+52434 12897 40246 22676 58928 13790 40997 25279 60746 9424 39880 23166
+53780 13332 29569 46177 9275 50751 21976 29617 42219 10397 57482 28167
+19781 50227 4551 42740 26280 62015 13652 38604 20828 60245 11295 32208
+48511 8825 42370 25278 61461 4631 44455 27689 18606 60296 38395 8927
+32322 51451 3162 61786 33716 7857 50842 37407 4208 47838 22051 56802
+446 30533 61113 14653 41859 22008 63975 10335 38755 26682 53843 14050
+36849 49762 18884 47204 2328 39107 17984 61063 29154 1364 63809 25663
+39989 5089 52461 26862 63224 15104 44222 34812 4347 60512 29016 12297
+43466 23331 51633 4036 37221 46292 12083 54761 26235 39658 10988 47133
+4229 36989 64140 23379 42653 2235 58984 23891 39543 6543 53728 22092
+47439 11940 36036 56873 16333 49143 27862 7108 58105 32640 13782 63319
+25688 44035 433 51447 13716 39810 25660 56414 9408 38844 26979 49805
+10645 37330 57593 17117 32059 64399 7614 53601 31371 17898 38118 55510
+9919 34080 62258 16079 47011 5813 59754 26980 48294 15055 42184 5396
+61572 27804 17295 50941 35878 12251 54506 3792 49860 19643 46945 28442
+5320 64597 35574 15988 38425 50264 18677 36014 47872 14455 40460 24555
+57049 902 38725 22805 55397 3491 41046 19038 34029 42408 476 63490
+31453 8168 59552 36165 4313 49427 28170 13617 58162 22204 44091 2357
+55919 30520 16064 51670 32706 12560 46135 24386 57392 14928 43560 2209
+39356 25821 62191 7805 41005 23965 57120 13593 38832 22551 56065 10343
+32288 53623 17195 42878 31297 5635 63065 36698 16208 29007 51376 4642
+65064 27419 7548 50048 37807 3563 62751 27700 18438 45985 37568 10763
+50722 27938 18028 48575 33974 1046 56130 32209 18689 50735 36876 13338
+48664 25961 52865 6860 29243 46308 16750 55840 30060 1286 48175 25300
+57532 4806 50671 17640 33384 54015 1013 35636 51514 16159 58769 34763
+4257 61452 38434 15892 50782 30735 8974 58277 27570 3836 64943 30704
+7822 50432 35226 2640 48001 16280 55743 26802 43416 317 46845 22754
+59169 12354 40575 21249 61023 2174 27279 9644 60011 37583 3557 56123
+25268 39677 15066 50248 36333 2420 52735 23510 46554 5502 41703 19025
+54199 37413 2226 61767 21032 34956 58309 12550 47258 20124 35679 52911
+6506 49377 32362 2047 46013 23082 57212 17960 33005 63438 6693 42213
+23971 55721 2206 46257 17561 34022 59315 4155 48330 33881 15791 63594
+37712 3499 60021 18489 48703 35199 1228 54886 38287 22611 59270 6683
+41901 24658 54489 3127 41365 26448 53142 19044 63380 1558 39639 21825
+55239 14965 36874 49516 378 28905 57266 16714 40333 25605 43336 12710
+54926 27738 17231 62788 30960 8817 44198 25608 50601 11047 28587 48009
+2637 36217 56732 17685 45536 970 59526 28694 7885 65398 32523 20539
+57564 10533 36402 51463 15369 31644 55841 12025 43617 22096 47469 8848
+30539 54698 11010 42144 21635 50162 17113 62670 35879 8808 57756 30612
+19235 61313 2736 43190 21799 62865 17219 50404 33476 12594 54959 18836
+31464 44944 12165 62721 18725 31947 42746 8068 61480 27145 4379 52928
+34312 10522 38056 47137 19434 54128 7874 39387 21727 59760 18007 29917
+62651 5942 45180 20425 54370 13670 32904 56082 5564 27624 45812 12879
+49584 24238 40157 3377 59892 27727 14322 48182 29450 7953 52808 26140
+42559 17018 38511 10382 64289 23173 52776 9470 37587 46209 1090 63851
+23771 41356 17726 36925 62681 8991 38059 56488 13580 30324 53889 8276
+27942 58062 2497 32107 65355 6653 48668 17895 32568 53648 11094 43999
+26781 64805 11790 47714 23257 53903 14257 46218 25001 40527 11369
+56103 18341 37821 51504 7210 32142 64980 19137 40398 9289 59782 21000
+44305 834 64064 37430 7386 32535 51074 20923 55465 11668 32648 48458
+18134 50978 6446 31725 63385 2790 46207 20064 28239 47478 728 57196
+27085 20284 46172 12318 53962 37836 9769 46871 18706 36122 56343 14678
+29934 57358 11806 48140 34072 1653 61000 31062 13850 56983 37041 7075
+64266 24997 44045 7800 60535 28599 3343 58837 33228 10280 45464 22053
+57576 9107 33387 51063 14301 36842 60829 10845 42761 22298 31131 59071
+7346 42153 23712 62212 9235 43283 19894 29196 47858 12861 27137 54692
+89 35406 47919 16595 38249 51723 12360 43031 24383 60276 13471 41425
+23402 63513 10703 38648 20002 60698 9746 50245 30176 4609 37428 52646
+14564 47060 36068 54971 15468 28535 49220 19688 43037 5202 65095 31202
+10672 59862 20843 40415 12178 62624 25725 48682 8446 29257 45031 17499
+50730 5834 41775 26595 62946 941 45088 15207 29284 56664 17517 37663
+62711 10604 30027 49330 1139 45158 26310 53189 11492 38525 19755 65380
+30421 12288 50279 24419 42723 7074 55182 20254 28271 53177 12253 44772
+27290 15247 64845 30010 9430 48151 17613 36175 51476 12352 32287 64637
+16820 47630 5597 33672 45777 15534 57811 31071 6599 51945 27083 12283
+65139 37596 14275 52598 6192 46821 21990 60706 1403 36022 45793 10568
+55470 37923 16238 63609 5801 37282 58890 19035 51215 29721 9092 33829
+54646 20224 43176 11774 34969 52824 3911 44028 26298 53944 6049 41299
+23588 48163 3074 37071 58281 13512 32701 61533 2018 40542 26004 65193
+6630 32136 46048 1188 27718 54322 21286 47546 10353 38780 25202 56992
+7690 30481 44475 644 60170 29165 8404 51847 35826 4924 55687 25836
+48395 1079 37927 51309 17577 31083 59101 14001 43382 23191 62432 1585
+28957 45083 15978 56131 32350 3442 49673 35994 9825 52210 26509 40752
+2457 61349 23862 44050 16554 37946 58706 1638 35576 61999 11068 43978
+20516 51290 35751 814 65068 37917 18767 58396 3584 45783 25326 55129
+2037 44138 34858 18687 29215 59493 13595 34166 48388 10687 57731 27308
+1669 31361 51348 20169 46510 3373 33883 62094 11346 41980 22043 52449
+13045 42837 26577 61236 9067 40247 23621 59100 7905 38500 20678 56819
+6500 38629 27020 61994 2727 50092 20007 29406 63812 1010 41937 25368
+54053 10526 45671 26880 50138 5926 39041 25713 54528 13278 28550 48365
+17140 62948 4941 39897 26562 61190 235 39026 22203 58875 15220 41879
+25316 53002 9566 34150 65361 15639 42137 30263 7499 62116 33876 3201
+57819 23005 30183 61099 107 44428 24416 40930 8218 52059 20949 42931
+15227 52890 23702 46689 4307 41850 21743 49395 14981 35410 52191 11413
+40171 23354 53810 15159 37357 62255 1938 41662 24978 63866 5439 44551
+19818 28314 47361 3433 63328 13753 40504 25768 56083 12038 38944 25745
+52606 2892 60634 36410 7765 57245 38245 14868 62725 27059 5401 59339
+32693 21461 54548 1507 39028 26675 56655 6347 33455 46253 4027 52027
+24260 41897 13232 35934 58260 17575 28698 64496 5922 23565 39705 806
+63139 32458 8557 58215 35282 14237 51026 24021 43783 4330 55134 26852
+38775 117 56900 20506 36344 65307 11708 32088 56379 18723 38978 10390
+54306 22975 36543 60962 9027 46777 27641 4848 52103 36232 14969 61300
+21117 38958 9079 58006 26917 44602 8107 54612 35111 821 61621 29905
+17241 37257 58752 1970 41881 31114 7828 56945 37528 4955 52088 21948
+33060 62891 2234 28529 55757 8634 39446 24046 56485 12928 39056 22691
+51064 9187 37783 62766 17904 34386 46670 4840 54426 30114 17385 62240
+36764 11490 30885 48875 18574 59796 28828 3323 34331 52148 20225 46978
+32167 13962 45104 4308 64799 22907 40502 6238 62531 24224 50399 15031
+41040 23240 63105 12291 39470 21225 59770 9898 33841 64623 17077 28758
+52990 7029 42364 23622 55429 14160 38804 23046 50944 11930 58652 37554
+15929 42225 5608 64754 27000 48734 13112 41959 23804 55449 15177 40009
+23092 46011 13887 61823 20753 41752 11074 32848 65100 15334 28075
+55145 3275 45654 36533 8633 49745 31034 18527 58336 35597 5328 47586
+24062 64893 15019 42744 22157 58974 12829 46742 33906 17753 48964 4590
+65344 30813 9191 51821 28890 18626 53500 33668 7053 57942 17531 45901
+27370 12109 50463 34407 21956 62914 8329 39077 26876 51513 14693 56841
+4089 42311 25868 56064 4890 32126 45064 15668 61144 36205 10289 55731
+23183 43132 14488 47636 24630 59550 5605 39607 24106 56726 1744 38858
+20757 54498 4441 44876 26983 52703 2186 42199 25909 58297 10724 43854
+21701 35589 55333 8796 45529 35382 12997 60388 20972 38892 3498 62647
+18355 34909 58469 11364 43306 23029 60258 3009 31687 42838 21755 57976
+9792 44416 24774 53007 12919 47397 32607 8326 60574 29600 17535 50552
+4954 37469 58868 13115 44230 23784 49721 16795 41102 10490 51870 17874
+32381 54562 12479 63231 33316 2611 59351 26631 39198 8952 63696 16653
+34828 59744 9914 30545 57585 2309 29227 63040 18357 43008 5212 49637
+28058 18192 54684 30454 13059 37817 52157 15952 59827 33084 9696 50412
+35560 19537 52809 2245 45195 21576 64831 5681 31919 49448 14250 45443
+27909 17906 51466 29912 9415 46961 37812 18401 49481 9959 29922 61855
+17100 43742 11514 52788 28394 16453 59570 35935 7407 62634 26227 54161
+1693 31522 44882 9041 50865 57755 12349 43749 21758 52349 17495 47582
+27981 1495 56517 36730 16808 31921 48032 9352 60398 24484 42384 14493
+46841 4676 51946 24666 43183 2725 60292 25910 40985 14295 51327 3564
+33782 55422 19476 42580 12661 59209 25019 43629 5596 51413 24825 40146
+3437 62108 21868 41741 15471 46957 22548 51726 10606 31658 48739 14889
+62439 24172 50448 13066 32057 60389 19005 45788 7135 37525 50808 15654
+43418 23424 59905 788 44827 26734 64001 3501 29749 55751 19794 44719
+1900 28015 59595 11217 43412 23738 41421 2365 50354 25003 58492 4998
+40062 14392 53070 25140 41865 12135 60917 1714 28192 55999 21065 42440
+12443 35380 56982 16806 46286 32006 2156 60477 36369 8963 46243 24637
+57177 316 30274 52249 19657 42843 5429 49836 20647 35997 60046 9541
+33637 47852 2986 56869 20337 44370 30738 4611 59966 24709 53564 15012
+39592 1589 52014 21327 63465 6282 33132 48885 3934 56358 26780 38684
+2009 57081 26490 49588 5368 44469 37388 12699 59730 20304 27456 64246
+14956 53824 6614 40324 22193 61361 12441 41825 33221 7448 57240 37843
+1213 30757 63067 8622 52909 26110 40089 12209 55408 23111 41347 14088
+45199 3898 64012 21573 30716 42508 9441 60618 37538 4748 57278 15627
+32506 49677 20205 61219 6208 33458 44892 19973 65501 12511 39676 23230
+54257 7513 28099 50275 18691 41186 6057 63970 26129 39508 668 50488
+18116 32990 53111 12072 44619 23325 64096 15086 42141 23970 62562
+13620 39084 22147 60914 9274 32720 48778 16689 53349 5497 31814 59121
+15879 27755 50443 6120 42925 25991 52660 13409 47570 29900 1670 50919
+33773 8012 53082 37689 18360 54763 6167 47128 31082 15863 36104 64329
+4783 42352 23145 54937 1824 35723 44093 20525 55803 27234 9155 52201
+35565 1572 59930 22239 32771 64562 4297 42527 23690 48786 5206 39392
+22423 46593 17143 51034 5901 43858 25404 55392 376 39547 23157 51217
+13408 36407 46619 8332 55262 20667 33925 65252 12130 47044 3965 36088
+61182 8037 27428 47907 344 41538 24953 57130 6075 39569 26928 58115
+11213 35044 42974 17338 55175 22086 41092 6357 63889 33002 2079 58356
+35811 20595 64320 3027 33714 55533 19652 45681 4792 34535 65366 19358
+47716 1084 31159 50818 18087 44503 11633 33190 48190 15268 61722 35005
+19050 3376 41204 25898 60330 5483 34639 41853 11847 62180 21955 45836
+6547 64401 23012 39635 16112 53285 7023 34323 61370 21536 40091 9432
+59041 35691 20614 46356 7111 64565 30877 21132 44845 11488 63658 25975
+39922 2558 53563 19924 32699 64720 13474 48000 19057 31098 55266 6383
+36185 58513 4363 27521 64109 6825 43802 22989 39347 3803 45154 21532
+54193 314 41146 26153 61693 14034 29840 57815 7943 41251 17604 30998
+54349 11871 40519 21320 49347 6979 36258 61139 13025 32902 48378 20826
+57676 8221 33156 64236 20081 44863 9840 34287 48290 20823 65477 8331
+32578 45163 16827 50438 35795 7183 60306 24457 53309 686 28006 43816
+11019 58223 27275 17549 51544 30646 4641 54216 36019 17453 49192 8378
+37916 62360 16327 31630 54486 815 44969 28296 15277 61800 25304 40863
+8579 64104 17565 35799 49517 9428 43409 30288 18157 60930 37123 11793
+31030 45591 16005 59724 23595 40721 10230 63785 21671 47211 8784 29374
+61047 19143 33843 52119 7641 47344 31997 232 42202 24907 46611 17404
+51655 30748 2128 54713 23007 48904 17214 28202 53851 11927 43432 23059
+38991 6760 59189 21336 47654 6 32056 58314 24573 48715 10379 37058
+56022 2132 47912 29160 18455 53895 25795 43496 1250 41250 11825 47161
+25705 57832 9752 30876 46927 140 52586 33344 15024 62350 37957 2698
+58798 21569 47183 33262 12378 57462 20686 37026 62945 7361 29541 60040
+3671 35641 50044 8189 30929 55682 10466 34659 51976 5220 46343 20132
+41209 1180 63199 25864 40475 19113 46363 3168 64444 31059 16709 57319
+34910 9504 61522 23777 42237 15348 65324 21911 45567 10556 29683 63292
+14211 41904 23010 56260 2569 49186 18710 28996 58375 10958 39685 26286
+62602 12241 48544 3539 32758 63816 14073 46988 25113 40209 6536 55327
+20719 47548 13075 29001 61803 16117 55122 30631 9518 65451 35151 21631
+53441 11050 33750 47992 20637 60227 6757 43289 24556 61683 15659 30532
+50424 837 41707 23915 57180 15435 45123 19211 34304 53825 11830 64649
+31597 16517 46032 21858 62776 14343 31473 47876 7268 61073 30056 666
+59337 34531 13518 46217 23370 53287 16191 40991 6755 50106 24741 40661
+8164 60479 22279 30493 53712 8820 40808 23989 57668 13944 39932 21608
+64008 3088 52409 24839 42988 6572 27796 53360 64913 31915 16764 37540
+48543 15691 55344 27305 3903 53073 37617 15420 29591 47131 2526 57336
+30599 17135 49865 28539 1183 52883 31007 16712 55168 4305 29769 50130
+15629 35428 58146 495 49499 30522 7698 35480 46194 17098 57777 7006
+42179 29224 32 60020 37318 14600 49149 28395 17541 52504 38167 11897
+33505 57229 14123 46865 25445 65111 10311 38736 24675 55948 11727
+35518 46808 2873 49214 21352 35208 60638 4419 44159 25017 62082 9700
+31718 52898 16359 41373 24257 56208 4224 39469 15424 50881 26543 39002
+5928 55195 18081 29791 56985 10 42140 24479 53785 5363 62371 29995
+18381 47875 37590 9950 31944 49035 15479 62062 30745 5299 48357 37939
+13151 64335 21610 43555 10937 60905 32812 21518 55577 3570 28095 46692
+12859 63543 19020 35071 56059 4985 46784 18699 33598 51493 38 27448
+57364 20628 47244 3702 33831 50024 8586 56086 27185 2619 51190 36803
+7062 53115 25706 43684 13527 35569 54411 17142 41398 2449 57521 27088
+15685 38359 54622 18740 60033 34965 4814 63710 11102 38390 57788 13565
+29456 44061 4999 64442 20717 32087 48455 2626 60784 24983 44945 14592
+35544 63589 18165 42698 6247 34560 60947 15524 44464 27210 11452 63271
+36733 6058 50902 14780 64564 22335 30485 54822 3253 40448 23472 62021
+15704 39093 20956 58326 9247 46461 29701 16384 35493 52216 9957 28447
+54404 4101 44946 27584 16323 53678 38089 13404 47299 28333 17853 58524
+36939 31 47154 29695 15678 64334 25352 55119 12701 38599 22067 50725
+6929 56016 33258 13369 49019 23892 42169 292 53703 22441 40183 4412
+56383 26750 38733 5426 55556 26267 49206 681 33004 59034 7525 38941
+26803 61856 9380 34314 47853 20038 52635 5958 45889 21217 34504 56744
+16119 41676 30610 7890 57562 18029 50367 30845 9484 38123 58237 964
+35264 44183 6734 50409 23251 40724 1931 58033 17949 30911 61363 4689
+42190 17546 32871 56255 2920 39477 22125 53482 9851 32530 59369 6471
+39048 26808 55960 2412 48915 20495 28675 44157 4360 55570 10222 34027
+49050 1524 54494 28810 15303 44800 23160 51085 10500 40037 26431 57070
+8709 43695 26169 61543 11974 32040 54425 14191 46433 35594 511 49833
+17716 37691 59005 3703 32414 54638 6866 45711 23710 38707 12616 61117
+20467 36703 48730 9525 44069 11487 58423 2008 29400 63468 8437 32832
+44643 19037 60788 9573 33618 58904 19569 43547 12501 63329 36941 10000
+44978 25858 64045 11246 34388 46960 19486 62088 9721 42701 24168 54011
+13570 41541 22015 62324 9686 50421 22605 31323 54351 11612 43945 22401
+53041 8357 32951 63103 2441 41179 19545 60602 29273 1329 37434 55100
+6088 33807 51058 18392 43491 4632 59168 27705 16964 63780 32083 10733
+55083 19232 29082 50384 6379 39742 22926 56823 538 28844 64733 7904
+45887 21535 31003 60651 1025 42007 16310 61832 25294 47113 13131 40354
+22633 59279 10882 38561 26838 41368 13327 52879 3629 64486 25173 43010
+6604 51647 18434 36754 55942 9884 29008 50075 1229 40267 25529 54951
+6439 28226 47798 15366 37001 59536 7945 40940 25168 51406 9947 39250
+26434 53926 11780 42269 21941 62931 38084 6378 32528 60254 12379 40250
+22825 65429 17069 33774 43603 14256 62223 30397 17192 58134 399 48604
+30078 6091 64620 21144 46214 32325 10179 62645 29436 6395 50042 12249
+28744 44872 21071 50630 27649 6213 35797 59428 16357 50924 34387 10796
+55692 18790 37097 50173 8350 30511 54270 4289 28649 49763 11584 56471
+28240 20297 52643 5062 32916 47102 16783 55073 31481 19249 46074 35649
+8590 59127 18181 37125 50969 7640 32356 53850 3916 48722 26542 41216
+5804 64395 22601 44842 1309 60753 38313 15210 34183 65130 8640 47989
+31142 1506 57849 22917 51134 5745 41360 24927 60633 11391 49635 22657
+39800 2968 45126 26986 59607 10170 43384 29418 15438 58688 36860 6374
+61206 18668 33875 46131 8522 59461 31147 14391 51712 20098 42879 12115
+60544 21059 40921 16173 44129 23617 52298 12757 46448 21505 40298 1076
+65004 31682 17114 37705 60775 8780 28365 47898 398 61611 21259 44470
+34824 2704 63474 22728 43356 14510 52393 27383 17605 60253 37747 13317
+56068 24585 45857 7303 39788 19877 49211 25831 64810 10244 29477 45523
+7957 62745 26210 48372 13840 42340 23632 64093 10535 41229 23514 60515
+6927 33608 58515 17574 40410 23941 61640 12407 42629 20375 65157 33980
+3718 57738 37204 19090 63123 4175 47393 21367 38613 1302 48332 22118
+57674 4447 28430 63577 15922 43146 24500 62128 11020 28917 51578 15099
+42737 26438 60117 9687 53451 25905 41824 173 57010 18570 30360 55133
+27525 19546 51182 38061 14607 46528 23459 56717 558 40970 26389 51552
+5909 39886 26223 55662 3332 31676 54159 20359 48490 5179 41220 23697
+56464 1986 39348 23244 59706 5937 38632 26712 55986 4024 48449 26414
+39152 1887 58559 17664 33838 63853 4582 40327 25767 56055 12818 44243
+23902 53567 10133 49115 21732 43487 15834 59778 27898 9580 62207 32295
+15155 49869 37708 6862 52640 23866 45138 1656 37527 65362 15509 33907
+59197 11543 47333 18864 35217 50908 14603 33369 54877 10233 44420
+19485 53539 30731 10925 51382 3552 33665 62959 6804 43216 23626 48838
+2279 56598 20005 46206 26720 39540 11324 57944 20741 33427 63462 2955
+40506 20639 58941 15987 33988 61610 13825 45941 19869 34981 65304 1628
+50897 20782 30495 58059 4389 43626 22191 64920 1859 29943 58952 7212
+48249 16565 29143 55424 14447 42608 24652 53318 1039 29793 46745 7601
+57419 27399 4486 48003 38211 20504 34081 60320 9681 40690 23793 51496
+12250 37101 55605 3130 47995 33794 19905 57341 36426 1747 55136 14396
+37741 63201 19934 45775 536 40466 24117 62068 3994 46438 27379 16257
+62906 33549 13173 57161 36901 19667 45547 1750 36769 62329 12932 42293
+23293 60009 412 39753 10577 61676 28891 2848 48987 38210 12138 27634
+63552 16538 43035 24372 60539 12937 38595 19785 54644 11651 48542
+37244 18849 27555 55218 6472 49322 23799 40973 18623 61632 11443 35073
+43627 16944 64683 9922 39010 19525 54105 32096 7060 61626 35236 18627
+53521 4219 34533 65485 20031 45082 2057 52045 21813 28925 44139 12081
+62915 27265 17312 49007 35504 1976 63849 26960 48232 4182 30002 53279
+8291 64718 35463 3115 59771 30759 6947 56785 25695 41969 13922 53919
+4147 43029 23836 55293 13346 36790 52729 9846 27442 59280 15324 36565
+49612 6245 32425 62382 10838 45073 31154 3276 49400 34698 9170 62913
+26385 43318 13874 56543 1201 34423 47347 14934 54637 33641 17235 40588
+1841 56516 21155 46240 4821 32369 53385 13370 38809 21953 51588 8891
+47013 36046 2817 52963 26612 38930 5916 47353 17977 53992 28352 11518
+49639 25406 40968 10057 53914 26891 64576 13179 42888 33615 18153
+52482 37983 8498 31762 56207 5094 47291 19018 34371 64660 1882 39164
+20787 49237 5241 34306 58951 16308 32311 49492 5772 13498 33992 42916
+4463 61970 31683 7163 52537 36920 19680 65511 12022 38693 21456 61629
+11142 47827 23236 42164 8298 62455 18234 31423 58795 12191 44313 26358
+52260 8577 31660 47282 20534 61577 14563 44100 35072 10865 65254 21045
+42692 12408 52178 24259 44693 10326 50057 17020 34916 61777 6497 39369
+26319 64346 8165 31743 47796 2786 36164 54027 20279 45295 1097 28778
+58148 20189 40860 9527 57213 26600 42863 12295 51243 28161 3329 42492
+24705 63247 5856 39611 26190 60085 2501 38671 25651 63914 5280 37824
+58959 20326 46142 27793 11905 54640 36934 13915 63820 26413 38951 8153
+61365 16449 33938 54388 1436 46010 28849 14757 47523 24313 53757 5934
+42765 22738 52602 3414 31576 57388 9286 42476 25301 39318 14316 53591
+8702 36789 49587 17306 33091 52326 13940 45738 34515 19635 61279 2265
+44312 34808 7914 62619 19492 48540 36963 11260 53974 21149 35170 64301
+13052 52144 7302 27940 45285 15330 53982 31017 1368 61731 28089 16937
+43427 24715 65279 7233 41767 16907 60865 26206 47800 4246 32684 52460
+10240 30180 54252 13245 43022 31504 9368 58659 37962 1070 52138 24314
+40583 5762 64633 23365 48932 16522 30161 53806 8688 34032 46265 17727
+56999 23963 43925 13896 53425 20891 32308 58460 879 45665 34517 6550
+52344 21248 47194 1796 42797 25371 59333 5105 32279 63308 12785 43032
+31757 15773 59052 3123 51401 29807 20320 54150 4248 46906 21921 32673
+56237 2355 45715 15196 41894 25675 57122 8937 45749 23415 39991 11531
+54504 31711 14733 37682 57825 7335 49961 31727 2942 53192 37657 7689
+58138 21292 41551 10902 35121 56831 14762 33381 46996 17993 27474
+50456 14595 37780 53152 18449 45364 8154 58722 29387 18376 51384 35675
+5674 64042 29862 17273 38174 46118 6972 51426 28166 18679 55742 37715
+4167 28972 53989 18485 64174 27111 14836 52034 37423 3673 59648 21108
+36500 52578 12197 27922 58729 4255 42572 20505 52926 30468 12703 61354
+36176 16315 49719 25781 62508 721 43637 25667 64365 15339 28997 59379
+19462 44568 13455 60464 22711 41069 7834 36568 62377 1925 32144 58611
+18548 45261 5194 36658 50770 7676 27758 60840 2708 44758 22545 51325
+13739 40194 26107 57207 9024 41903 24931 55741 11419 29803 62489 19901
+41112 10660 46161 23285 63821 1288 57483 22536 48942 17198 27136 59989
+12574 28712 47910 4905 54775 25568 41784 1742 51140 32694 13395 56779
+25563 39394 281 51205 21775 38578 6229 65063 17571 34336 57072 12409
+39290 1373 51459 19098 29857 55049 5475 49981 26920 38568 3167 61378
+19403 31859 59401 976 28185 43362 20448 56388 3536 42039 22586 57605
+14451 52044 24144 40226 8562 64547 17583 36060 46339 5109 63075 32554
+18466 49628 3849 36896 58606 17522 34832 53905 10812 44918 20898 57940
+13551 42210 22517 52676 7604 47196 28817 14037 34377 43844 1332 58029
+18512 29410 50802 4606 44176 15492 57712 23375 50249 5216 29549 44675
+19655 59194 9221 34780 60393 11882 39441 26872 63924 8499 35917 49005
+12492 28544 50436 18660 61318 5965 44165 22669 59994 29105 12395 62206
+3384 41388 24885 57907 5711 39201 24568 54233 13227 49270 17811 32172
+56631 4912 28149 44726 16222 59299 1827 41685 30887 19517 55994 36633
+3828 63288 18364 47539 36021 10590 57828 37847 4720 47027 14551 52638
+23870 39382 8453 43958 21730 57103 15216 39445 25468 60667 7035 35705
+56273 15632 47739 29283 19989 42934 11311 60153 18920 50675 30790 8070
+38223 58184 3280 41673 22354 64120 6602 31031 51867 3989 38911 26106
+65191 5587 49573 18770 29222 55063 11120 41359 25282 64867 14262 36311
+55481 16036 34071 51211 9748 28718 46721 381 57289 21018 37591 45697
+10060 33246 60319 14433 40191 25264 62355 8571 48782 20324 30303 63763
+4701 51830 17762 33286 50111 603 60172 25175 42535 5631 62184 18148
+46492 27873 11176 64926 38365 16184 29801 54137 13114 44873 25207
+60853 5600 40109 24653 62784 1559 36254 57773 10762 44401 28881 3787
+63618 22932 34045 41037 2006 62048 32498 15182 49617 22590 43539 3085
+57237 20197 33855 64881 1406 42320 13331 58998 23435 48052 8488 36238
+42913 557 58329 32160 19597 44749 10677 50243 29555 5264 63996 38144
+15936 46318 24379 63441 9034 37955 47932 3487 27997 58005 7715 40937
+17234 31377 55326 11510 41233 4131 50701 31790 8320 54748 35081 207
+48349 25340 53392 15670 42882 22148 51389 12119 39648 24331 60068
+17038 31451 56441 15378 42236 24947 55617 10264 33276 62868 1225 46189
+20073 31405 61267 4366 45923 18253 35055 53595 2793 48004 29327 7872
+52665 36451 14404 31829 45004 9963 38285 50676 2361 35971 58265 17937
+32398 45779 9088 59166 30067 17675 64701 37650 6631 46899 16232 60878
+26669 42553 12890 53253 25271 41106 3246 48767 26347 63006 17202 33504
+59303 9523 39828 23261 45796 13999 55725 25807 47632 9420 36930 46145
+18324 55354 8858 48713 33390 17533 60324 37808 11459 32877 44559 5381
+58887 20976 33576 54998 11271 27932 51718 21480 40220 10248 60957
+25560 45375 13262 29964 62537 1428 40462 25463 51179 4097 36737 55572
+11757 31818 61359 16675 37021 51640 9468 65067 22384 32716 46867 10097
+60476 34396 20569 41934 611 47286 35539 21492 65248 12348 40746 25899
+51498 4724 41946 23452 55730 193 45133 21826 57997 17149 33295 62971
+2271 45526 31351 15688 55253 34516 510 48819 38312 16533 31730 55554
+11602 44377 21487 63383 9579 41545 27023 60690 3083 45915 21785 37867
+63705 9003 32687 50405 23491 46083 8259 61462 13983 49268 22301 29689
+42720 6491 55155 27476 13503 50870 30219 18673 58371 35354 741 62253
+26755 53773 11639 34133 64961 2797 44668 19312 49503 27522 1926 63871
+34025 6172 57956 26015 48253 3841 35038 44476 14082 61216 27280 10454
+55592 34977 13472 50979 25171 43173 9985 59241 21383 47596 12986 42332
+36555 9199 62195 20313 37734 58065 4539 33068 49198 8029 27809 62486
+2798 43909 23917 61356 17602 33913 52737 8200 27960 63629 22140 48521
+6888 35696 57268 818 43172 18362 33844 59077 10344 44348 24478 38800
+11983 62819 20559 31010 47480 10720 29038 52592 20971 40565 1258 55727
+35117 19803 47575 4653 59750 22529 38992 531 50984 18262 32157 52672
+12621 41654 21521 54716 6691 31201 60458 15707 36519 49783 9466 57438
+17328 47991 27377 8584 56165 37222 11403 60909 25954 47598 10108 29187
+48831 16320 52711 26355 38988 11193 61485 19762 27967 52787 16010
+46395 28715 6466 62172 35632 16859 57073 22718 44214 8544 34889 59456
+25 29262 51342 18240 34398 55132 11079 32004 49114 20363 59870 5517
+46629 20986 35664 57965 16444 43082 24921 63273 10705 39925 20840
+61417 4778 34757 56860 7187 30282 63788 3210 46313 29563 10600 49249
+370 34186 65040 6974 40295 23291 49421 16556 29871 54896 7151 36862
+50511 16715 28685 59467 10165 43272 24540 65218 15599 40063 21500
+60862 24580 53204 6094 62884 20564 29539 54347 15573 43784 7747 63656
+24195 39795 14366 52900 4118 43651 27892 20116 57614 33491 10532 45635
+4860 63470 36186 14584 57994 21713 44721 8137 28636 52686 4686 43166
+25225 56681 633 33085 62610 7567 41030 20071 58693 27524 6030 63341
+38035 14500 29457 54309 6935 46942 28004 469 61968 25711 49367 12798
+30371 47369 3104 36891 61380 15417 43060 97 54743 33198 16955 53075
+6237 48169 21300 36536 56492 9381 32430 62148 15393 27906 49754 279
+43093 24266 57298 4396 28064 42335 16198 56051 2841 39618 25756 51777
+7590 29095 62709 17988 54801 9891 31844 46776 2099 56863 18613 32478
+61756 10853 48716 26574 38534 14188 52938 5006 47034 24376 38936 9844
+59064 26356 40652 10639 64007 19112 27412 57425 6992 40263 26654 53519
+930 38495 26254 51840 6250 38765 20430 55784 10637 30279 52792 16917
+40745 3622 55328 18593 38849 26965 44051 890 56472 34417 11254 60766
+20771 46617 34158 2205 64085 38404 8119 28531 49462 19311 45927 5530
+30606 50395 16732 40789 23192 55435 9091 36466 53119 17253 44782 22366
+51687 12530 36675 65424 17918 28207 51542 691 36582 49183 18196 45404
+28228 2041 62990 29811 17065 49813 35404 1398 60460 31092 17480 52611
+3108 47777 27491 15617 53415 29560 12709 57427 38068 16905 30701 53358
+11048 40337 4387 49729 19384 36189 55524 2154 40814 16188 53831 28755
+12175 49747 25865 55131 6055 40907 22286 51252 1777 58192 26829 40766
+5313 56629 16558 36968 64073 8187 32437 58806 17199 42828 9000 61564
+25528 41161 14199 48760 26444 64290 10381 41864 23894 61381 8008 33857
+49725 17007 42601 23614 53544 59 46597 20670 31272 43588 4678 37292
+65514 20310 41798 856 54118 30439 13531 36293 58452 3809 41503 22374
+62805 6018 30633 46261 2460 54816 33257 5873 65208 35741 12827 55854
+23372 47672 1785 31230 50821 13451 55611 27492 18983 49399 37634 7014
+61877 14379 41731 24803 65107 1360 43927 24699 39576 14330 62001 27447
+1720 50102 34162 6113 46491 23361 57281 13912 31723 50565 16896 46379
+23363 40835 14227 54739 33795 17990 61763 37482 20873 52698 14070
+29308 58232 3876 34746 60266 11928 42204 23011 64341 12705 33779 48977
+733 39754 21985 54857 6686 33340 51368 3528 42206 9143 39972 26030
+45626 12951 57259 4225 41727 22373 30510 48654 884 56359 21794 33136
+47508 11794 60186 36041 2149 50425 19138 55523 31015 17335 48345 1051
+30888 51178 10883 60169 37184 16158 32344 64492 13330 41521 22485
+50946 16140 29834 54092 2356 36246 52456 16411 30863 50244 1770 41625
+22978 65466 15974 35609 43991 20087 54566 7863 37547 63553 18252 27411
+48647 8909 56291 22752 30119 47337 8131 59698 24828 39903 14988 64411
+5189 43937 28107 17989 47985 38384 7973 63492 32844 19881 48883 12357
+36388 60811 7012 50343 34693 21444 63137 12053 32247 57282 14807 34930
+49859 6404 43126 24310 60717 15669 29957 50528 6830 44529 23605 40908
+3943 65024 18333 39403 26944 59751 12240 43017 21764 48284 5469 53341
+20950 33173 51907 3922 47320 35583 10963 64689 20214 45334 12695 59703
+22475 43292 14676 65122 25763 41330 297 48122 24132 62104 12156 31999
+58917 5870 47007 21603 65019 15967 40438 24159 44928 5242 53169 15696
+41127 22920 54930 14002 33388 60114 9820 39706 24973 56568 10912 36988
+59109 4538 32475 62503 12970 42674 28806 8026 61568 38351 2685 31020
+46028 9520 56942 32866 16103 62488 27052 6858 59628 33573 15719 54308
+36802 7396 57962 20147 28334 45015 11796 56690 22706 34427 43179 7467
+63239 36690 545 50762 21432 41033 6375 60045 19556 35276 57899 14758
+30229 64993 11867 45258 29551 20547 61883 5165 43967 36758 20969 65282
+9337 38638 26942 61451 13913 47675 34484 7669 53405 19681 31785 50964
+2781 43993 24039 48316 4927 54686 21416 31490 50892 2461 34047 55386
+6071 44102 16581 31232 56612 4009 45292 22979 58345 2320 29051 64581
+13106 39535 26613 61644 11329 51238 18893 59340 28223 7051 50562 31566
+14878 44646 23959 63418 7371 40125 23850 56108 15501 35874 44820 12591
+60487 22934 40763 14470 51261 25724 43245 3061 49947 16443 39455 26716
+60532 7242 33313 43294 3842 57827 12442 45470 22192 33302 56666 4963
+46992 19243 34395 50091 11986 55693 33325 7907 52417 37772 19168 64715
+12686 32558 54363 2710 44043 28284 7472 65469 36468 1165 59690 27502
+8293 50440 38372 4520 28465 56757 7860 46053 36224 19571 51574 9698
+45426 28298 2444 52691 37435 5692 57448 19575 29482 63218 13987 44590
+26237 58725 12319 30472 56370 48532 33477 390 64251 37776 19568 33280
+51809 10254 61230 19187 44888 37066 6937 63014 18931 29011 53852 9393
+44509 24454 39331 5709 59003 22407 35320 62034 15766 43092 23638 40607
+2494 55501 21550 48007 5826 37313 60734 9868 34219 48296 13104 64947
+23349 43051 5196 61041 18744 35962 58199 10237 31352 48270 3927 56763
+13522 41252 25012 51224 1942 32974 59612 13700 44322 35205 4703 65177
+19003 34806 44120 2636 55940 31928 19515 49001 10283 60433 35655 2130
+58110 27169 16225 38129 56306 3121 29784 51980 19256 44225 15288 28650
+47386 5696 53837 20291 45372 1776 40628 22299 59514 17364 38608 3509
+52821 35808 10474 62583 20541 29923 57543 11625 43727 22653 56160 7782
+31745 49546 1085 64537 29177 16900 37991 58179 9074 44850 30330 14636
+60135 25421 41976 5161 55920 25199 39461 2842 53085 32397 7304 46234
+19367 60376 35106 6684 40006 26826 51250 17508 38529 12934 51989 31489
+3233 53682 35877 9841 62821 32495 20281 58741 6152 44285 25930 51992
+3607 42374 21490 64490 1303 46790 29039 14892 51431 27977 20061 48243
+183 53880 37717 14843 27260 58911 16589 49554 27172 4350 53938 38486
+10898 37268 46993 19721 52559 5491 39279 24582 47103 14724 38099 64344
+4174 36278 46773 8351 61192 19886 32382 48491 10689 43803 23962 64059
+13917 46775 25515 42472 1582 51392 26568 47055 5716 41244 22645 58498
+9743 32170 47969 17609 59944 2681 31406 46063 17396 54623 3891 42581
+30261 15456 64464 23888 42187 8805 60583 23237 39215 13785 61912 26763
+38948 10209 45013 18947 63630 27425 11368 59254 36395 20645 47916 9311
+53716 38103 14206 31732 51748 10306 45920 36000 5131 55275 22151 42163
+2867 35932 44816 13233 55949 21851 36505 61799 5142 52834 17815 33539
+51253 9409 46763 31603 196 57900 24992 42000 7632 56905 24305 39226
+9297 58756 20488 32518 63546 9797 42217 21274 48320 14731 64923 36797
+16932 29808 61209 2164 50401 27785 16102 38415 54195 8381 27400 62652
+3067 29623 45299 21759 59529 8960 30220 49015 16791 41832 23673 58250
+11923 51884 19693 31069 43707 12653 55582 36319 16452 62965 21963
+47764 11274 31811 61055 1625 43301 25714 63310 17182 33824 59130 14035
+47708 27733 15839 52123 38131 8534 32383 50295 2052 41208 20393 62138
+16213 24036 55322 14772 28569 49840 5556 59637 16047 46755 34649 3005
+27581 57491 15946 34892 49952 3434 41492 23276 64323 13600 52363 26465
+41268 11640 54013 4260 29152 49091 7574 63286 26728 45870 8924 31008
+57806 16646 27434 53131 3967 44398 24972 39697 11265 55971 20529 28281
+48421 7879 44057 24468 53629 15250 40039 23406 62604 5695 35286 55337
+17141 41920 6767 50637 27773 15956 54341 38273 9357 28337 61592 21961
+46694 8503 40459 25736 54607 14219 31063 50749 12632 37064 54167 6454
+44462 22390 64046 8565 32649 58543 878 37933 62049 10746 42116 24032
+64750 13694 33511 56081 5474 44396 25526 64376 13841 40386 24655 46575
+998 49788 16498 31509 53909 2521 40698 25066 61872 15977 36643 44734
+13672 54000 34924 2723 28157 62763 20271 43016 1496 52924 21741 31422
+47041 8841 63082 29067 18652 59047 36161 11527 51324 28990 14175 47237
+21204 64049 2116 43452 25440 61253 7518 41627 24959 59917 14818 28761
+47312 101 51240 26936 38737 11183 61217 17968 36363 50098 12267 31642
+53626 16297 37732 60953 6087 34798 45537 10342 64288 21466 30587 56004
+7124 45177 32358 12060 63502 38050 18804 27843 58557 2243 30884 64776
+13022 42491 21765 60700 222 54791 31806 10450 50829 27069 16392 55215
+30226 1944 59557 27893 17225 53016 31551 3824 37765 53834 9984 60941
+23512 38808 8895 62665 18072 33346 54482 962 42707 23666 56657 7128
+40432 23094 55679 13121 33183 48371 19950 59748 11472 35809 45845 1330
+54866 33621 18313 49943 9649 45916 34294 157 57389 22159 49230 6663
+35409 52281 17336 45451 29032 980 62352 37256 15694 27802 63537 6479
+41013 25344 60286 15993 30987 47198 8842 63245 29527 15838 58451 33310
+1668 49301 11252 42929 19955 29236 45880 2330 59501 29023 14753 64632
+34779 10654 53267 19897 32708 46838 1327 61757 18818 30665 52626 6293
+40552 25387 54738 774 29909 52131 8397 40932 25494 54248 10445 34881
+43724 6685 63357 20556 31607 58672 14003 37598 46828 16218 53461 4712
+39172 26871 56606 863 35278 60927 9801 39040 25367 47676 3482 59227
+22344 48707 6137 27900 53774 2349 42143 25359 57778 14893 41210 23060
+55412 12952 39433 6373 54286 24367 43191 8081 35888 60686 3353 42731
+22781 61692 13101 54110 26973 38669 4746 43640 11054 31403 61420 8088
+42992 23465 32135 41339 8794 65162 18536 37763 51033 9811 30399 61866
+14777 46649 29570 7176 49045 36674 1605 61283 20369 33337 44859 13946
+56546 23437 38827 11192 54346 19884 34765 47383 1515 63738 38009 19697
+49475 8327 57026 32274 199 51920 35164 14087 64050 30562 2591 59923
+34868 9377 50074 30011 18695 46451 10213 64762 31066 19268 58008 37480
+1239 46708 18172 57447 32828 4052 51322 16528 30659 59096 719 42597
+21784 64968 4522 45344 29392 18802 61689 34268 10405 40657 26462 53666
+12893 46126 27483 16523 35306 52810 3341 39344 25974 49563 11548 30753
+53628 18747 42097 7474 56722 32026 18067 59841 34971 8245 63340 20037
+35769 51109 8968 30009 55072 4174 27278 48854 7333 60587 23195 46422
+12141 34250 56510 16610 39076 7512 58525 17851 36726 50437 12941 42075
+1705 48635 25106 57765 4187 36973 54809 9094 40993 23682 57973 10799
+33359 55512 20104 45997 4855 37187 57136 18773 40218 12614 63574 23399
+43142 2378 56756 30203 7377 62369 24013 44067 4034 55931 23409 41486
+13517 57013 25238 39536 4768 51159 18507 35866 61143 1446 42834 22774
+52163 5829 34003 50504 11702 41193 24985 51474 4656 33137 49251 13916
+44309 27326 18193 62706 38357 6837 33940 51790 19277 39682 5967 56910
+36994 12363 58946 27306 17799 33212 45121 5045 56702 20726 31472 52466
+10814 39670 26119 64249 13177 38712 26874 52108 10184 28552 63454 276
+40559 24591 50679 5820 29009 62539 16163 41780 25873 59431 4095 30621
+65174 16376 51651 25498 41406 12107 58478 27801 3427 56283 37300 12926
+51280 21511 30796 55078 2999 47485 32731 20775 52542 1197 42786 22981
+56070 14030 39092 24563 52279 6407 47053 25837 64352 16628 34310 60094
+8789 53474 26086 40608 6430 49984 22227 39193 17424 48726 4508 63178
+29062 16501 50657 36921 4771 45312 23810 57609 13713 35984 62587 15867
+42953 22632 59143 4494 30710 48323 21600 56035 15498 35871 52196 493
+42856 28124 7269 57059 34789 20262 63747 12139 42243 20981 49534 15211
+31662 53120 5107 62743 18014 43086 33070 14522 37511 63939 15904 46557
+32017 19554 51210 6820 37714 64187 4298 32879 50956 19056 46344 30940
+41 65401 20918 49292 16852 30204 55606 6314 39210 24881 47017 9682
+64861 22200 50582 58093 2742 35846 52311 20164 46288 1389 57757 20921
+29517 54101 5100 43122 24227 55952 68 40493 21256 60356 17126 33742
+57754 12174 30638 48045 6346 65421 25110 42006 410 60591 26003 40286
+5074 59727 17606 43327 28901 10286 35346 60027 14886 41793 24112 61880
+17351 41159 6200 46496 23874 51017 16143 41566 21602 57050 808 33429
+60268 20648 42330 3788 49118 28937 9782 63366 25415 39439 10848 49173
+19919 35143 63730 11685 39065 26584 52518 7265 38705 25478 57066 15624
+49272 1278 42489 23115 59978 4959 48280 19625 37139 57480 7282 30262
+60141 18791 45713 6532 55450 22998 39305 363 61188 21626 29384 48683
+3075 42857 12939 55311 26813 41761 6596 46516 17476 61058 33711 12727
+38414 58826 18053 32949 42514 10493 55625 29708 4842 48198 26246 61243
+19596 44736 30375 3624 54736 28117 17057 61472 33335 9445 43942 22951
+62518 16025 29670 52896 5133 47793 26340 39160 1417 50201 17162 64727
+29585 10398 45288 25037 49285 6677 55660 19864 32925 45549 14418 52836
+22075 41478 10401 33484 47278 17380 63363 1999 31638 46651 15757 59641
+32746 11002 49349 20436 28423 57551 9025 29906 60563 15013 42756 22571
+62241 8358 35841 57366 16423 29111 61606 7275 34936 48310 2946 57758
+23207 45742 10055 65364 26232 44998 14804 50032 28953 2463 38194 64528
+8492 49191 26082 39333 13768 60382 3171 44318 21969 50864 5977 45767
+20021 59481 3483 37201 50253 18301 30894 57943 10972 33921 53644 19382
+43811 6555 55767 12154 39704 22874 52782 13120 43493 29219 4869 62614
+37922 15975 31218 47406 10641 64872 24205 40820 7071 59543 17854 35392
+43223 11580 58264 18745 37608 65049 7710 31686 48880 3649 61124 17207
+43007 36856 10456 30225 55548 4210 45189 24407 39045 12966 57642 19385
+30682 61410 2901 54215 26252 43550 12946 34100 55716 10178 41704 21712
+64231 11389 34198 49471 3375 45156 27551 7718 52881 36455 19837 64463
+12087 41534 3160 60365 29250 13212 48971 21558 65343 11004 31019 50612
+1906 39737 26308 54793 6658 61780 26043 46223 11620 41175 26660 51366
+8576 28431 56926 537 44777 29663 9308 60121 36054 11992 56149 30200
+15761 48370 27757 9978 61879 36524 12386 56200 26825 40302 9283 58311
+34372 14761 48222 19792 59253 929 42405 31635 15495 38067 27486 17783
+55954 29468 11610 63724 17268 36299 50309 12754 40474 22567 59275
+10718 39132 26370 52579 7937 28396 54254 3918 42649 23938 56096 14890
+39827 21399 51582 9149 31456 45330 13096 55839 20696 30073 49276 6356
+57367 24535 46729 3073 30686 54327 7039 38744 21938 57658 12799 34155
+59156 4497 32283 63157 7556 43723 25981 54185 8685 39502 23334 52733
+13879 34962 53840 20484 41828 5026 59361 26740 52771 2395 42943 24153
+56194 9766 33167 62009 17395 46844 8717 40043 26364 58240 13397 52288
+29561 16906 33234 65207 2696 40790 22615 50768 12394 39935 26579 63303
+9617 32090 58080 16966 46997 10122 35042 63699 15461 52219 23643 38882
+4547 53224 21519 28855 56707 460 42284 24622 52259 9491 29162 63770
+1808 47507 19108 35405 65506 13932 39538 129 51548 11729 35310 64383
+20496 45740 6165 36495 47643 18021 56727 30529 698 46792 35067 11283
+58761 20563 44655 14225 61619 24447 42540 8128 34709 51828 2711 58575
+30434 16355 37758 47911 4464 65490 25646 38562 629 60381 18942 49829
+29926 9166 51663 36483 19395 54802 6461 43390 24509 65215 3145 37449
+46549 13845 54671 35598 18246 47746 895 53402 37472 17736 27597 46275
+2503 52203 36892 19357 53978 11641 42129 29219 13717 56232 35152 1015
+41218 21703 59835 9452 33970 55117 15964 41896 23625 55964 94 45978
+23138 49688 17363 30342 62975 12323 34813 57099 15453 41036 24822
+62442 12783 47486 4976 41886 22686 64763 2932 38859 23302 49739 17463
+34701 57921 1890 31778 47736 7845 54848 33891 19743 50155 1438 60383
+21042 34130 43546 3843 54202 20149 28775 50142 9734 62095 27418 4496
+50569 28686 14816 36168 57104 11533 41361 20480 32697 58092 483 53749
+22386 39605 14067 51928 21162 63539 1143 36268 50895 11691 44271 24113
+40028 9047 59629 22461 39731 6724 60259 27001 48261 2204 54154 18529
+28816 61075 11891 33267 58438 17768 47554 1523 32177 54844 23811 45457
+17649 37373 53446 5454 44352 24627 40764 15477 60142 22974 48229 9399
+44206 24288 38664 3776 58609 21776 38523 2189 64514 18832 34899 47140
+13403 61889 22786 41188 4094 50118 24428 40192 981 59618 18410 34937
+54719 3047 42528 21993 47956 5509 52932 25395 44716 2295 62762 26277
+38566 11973 51967 23106 60221 5688 46328 63079 8650 37655 49456 4019
+41652 22890 54639 6535 32862 62700 2594 45092 34243 19678 64582 12854
+47613 37177 16171 32043 63506 8530 46462 29687 3038 58255 36793 17828
+62673 26472 48242 2638 35914 64827 15199 42247 33617 11961 62429 23326
+45349 15566 64627 26645 43751 1618 52536 20951 40162 14842 54825 22938
+39497 11932 49771 17871 35122 58855 2117 30725 61072 7119 43497 15175
+62080 23735 45340 12846 39970 21142 58213 6023 48291 22255 39487 1797
+51994 20612 36077 64302 3646 32120 45577 7090 36373 56622 10920 44125
+25502 54711 8005 33499 61445 1470 47871 19921 35528 51219 4074 43264
+25343 58942 5986 39874 25101 45828 9257 60274 33113 14394 64906 36586
+10385 47694 20642 62335 5072 35362 49758 16330 41111 24704 57850 8362
+50918 26894 43569 16048 58885 25878 47608 8175 32810 58014 14375 27469
+63521 4549 40558 22340 52129 13495 65334 26868 41628 7882 33771 54694
+3895 30363 49621 18052 60538 22187 40981 13860 35397 61907 9554 28819
+51383 18326 42118 13399 54680 26475 40310 5728 58118 22719 41039 3807
+61791 26225 40397 14318 53164 19119 30480 56400 7481 27296 43848 4172
+63974 25635 40067 13361 58196 6468 32351 65011 20962 40429 9544 59473
+22627 32668 63815 5753 47895 21016 43793 16304 61815 32914 6504 51485
+22521 43520 4320 62236 30380 12646 36783 61290 10333 32969 58361 4774
+41928 23526 48979 1198 31531 55875 7554 43521 32561 16868 54717 35481
+8346 45649 26373 57340 13988 29437 62087 9120 41288 21364 63957 14329
+39580 24368 59716 9111 44823 18386 29145 55318 8637 49454 27324 13907
+63083 33245 328 37637 44641 13034 56708 34793 19661 54725 2062 46347
+23222 62575 29167 8642 48361 24896 42014 7324 60736 25584 43407 8145
+47814 28654 15208 55365 31562 5044 64973 17092 49764 36422 670 55112
+25893 46374 14920 38586 25292 43424 8493 55438 37337 21736 51022 5287
+43962 25276 60709 14594 39772 5975 62483 28309 9929 57768 32032 19888
+61582 3336 46213 36108 6258 57456 31952 17849 63197 10887 50140 26927
+44048 14169 55084 23958 41860 5763 53464 26288 38919 10836 55771 18276
+32880 64991 13210 44803 26050 52199 6218 40649 24950 60536 13630 38833
+23645 63857 10597 38618 21597 49809 7394 56987 26949 39488 10095 49182
+20186 33889 44713 27219 13663 58923 31259 15265 60673 25492 45863
+11352 28959 48709 17104 58368 6263 31791 43367 2095 59815 24629 51627
+10745 40591 20899 61765 16617 47810 32659 5370 52875 11811 41748 22988
+51242 9521 27899 56511 738 51634 21093 39655 5589 50059 31289 10881
+56191 24960 42109 8031 62186 26805 38660 2759 48548 27038 64312 5308
+44186 24226 50826 16183 40243 21254 56782 36114 322 30868 51906 8177
+64164 34441 15520 45966 25443 60640 12004 44781 24731 54708 10815
+29055 48216 14875 61158 24790 49623 146 39405 21247 59436 13314 47039
+29484 17041 54025 37826 10934 29316 57092 18041 39940 12793 50332
+33858 19523 55926 1215 30470 49464 19375 45232 2792 40834 24001 55587
+13178 39490 22312 53898 11191 30453 56192 5693 44255 22757 38720 3289
+62238 21892 38503 5416 56029 23478 42709 1287 52922 38051 16477 31583
+55360 6854 43504 24474 38898 2972 59578 23176 48725 16399 37387 63865
+12805 39052 5418 47881 26181 53933 1121 42672 22816 56322 6993 32318
+59939 3191 44877 21015 63677 15060 30931 54037 12920 46227 29133 8660
+58318 34261 500 38201 62779 10601 50008 34458 19117 51482 31450 8055
+59498 21816 34212 49152 14825 43408 5178 55581 25330 44773 642 50170
+17590 40248 25840 54512 3721 30841 49327 11902 57574 26705 39006 10851
+48554 17507 52702 21050 44029 6236 50571 27701 16492 37542 55230 8976
+33609 65431 11646 27944 48137 21285 61057 1996 29077 59320 20468 49321
+10142 36303 52190 767 42755 25185 53254 5661 38653 26497 56053 3213
+48446 20494 35746 64373 5408 42747 31879 16247 58083 37925 7462 47683
+23247 60165 16483 29756 46486 6589 64024 26284 39548 16882 43647 5426
+53478 33947 18939 65272 11839 29537 50280 2585 37752 62413 17920 35403
+58804 9557 44879 20999 34809 47398 8268 29479 62005 19862 40676 12013
+51608 4223 65427 19378 47657 30233 258 63240 16654 40615 31004 8811
+53807 34334 20579 51439 11483 47079 36265 1127 50163 16877 34352 54287
+12863 29173 51895 19695 42986 137 47622 35119 19396 60691 7893 33649
+47525 12455 60334 32164 20758 58032 2612 43631 23982 51927 6579 39283
+21782 56454 8465 32686 62669 19952 49831 8913 31890 57649 1410 43986
+26533 54508 13555 41163 23926 45944 3831 64542 18117 30827 53717 1782
+17014 56431 38322 7330 48362 34598 599 51973 18307 35414 56420 8928
+41990 24826 54615 14351 49480 21552 38782 5835 44080 26771 54808 816
+28553 43138 8244 59636 25410 39415 15924 55319 34513 4445 59875 37969
+16201 32488 43682 13099 60950 35838 17723 53664 37352 4064 60225 17083
+30882 50774 11318 45355 24295 55712 13272 38522 20785 57238 10437
+33989 62484 4471 46439 28591 10716 54678 38330 18479 48435 28016 3199
+37819 55706 7667 31821 41009 19390 63099 5466 34621 58700 18571 42990
+9402 38650 22547 63528 15551 51021 5553 41802 23033 62457 3614 41242
+24840 64179 5360 44614 23552 59565 2256 30235 65441 10576 40600 26055
+62468 11684 35109 58187 17210 50757 30865 5949 59403 25752 43548 2338
+63430 36780 12415 27459 60723 14349 50055 26144 45678 11112 53243
+27018 40871 13133 62851 20120 28867 49257 10249 60246 19215 34340
+48895 9224 57519 21465 45506 11662 31628 55907 409 27826 52905 21058
+43718 9249 59385 19064 31512 63479 11342 40731 25894 49889 12355 38870
+25243 52450 9883 37840 48298 1511 34205 64857 20198 42952 15548 52104
+23767 47297 13111 28346 44703 2306 61941 15517 35986 54057 19890 42082
+1673 56573 29005 18243 51603 38172 13246 34399 62038 15008 37613 57362
+9853 34755 63031 14125 40203 23464 46173 1458 64737 20125 32355 59664
+2937 38976 26353 63864 14138 34726 57473 2342 43212 24513 51814 14943
+36178 53620 6239 40287 17612 52257 36624 12340 44149 4197 63238 30217
+16615 33572 59888 11645 44748 22027 61046 10005 32412 42531 14900
+53558 29866 9509 46552 23384 61148 2414 41187 19728 54899 31048 9258
+49027 38088 3288 53492 23716 42571 8366 32801 60543 13772 46894 22462
+58601 3431 36135 46800 14977 57069 34384 10791 27585 53588 4604 40367
+23466 50410 1960 60665 27706 15476 53727 33035 7059 48569 23868 56957
+15568 33026 40959 10320 58066 20533 34562 47118 12538 59752 23214
+42728 2098 63874 26103 40771 15090 58833 23099 30730 64292 7083 42600
+25734 59791 9694 33943 64864 14790 28160 53319 4799 41568 24887 55934
+1340 29427 44975 8921 49935 17529 33961 63603 9462 41740 26171 60923
+1809 30613 48685 17079 44041 3664 39789 26230 51581 15316 39239 20712
+59972 4626 34964 62073 9049 30075 51415 21094 41972 8270 61022 35448
+3143 50498 29451 20050 65325 12923 42417 26886 62065 4835 39532 23342
+63876 1233 38999 26294 61187 11395 45592 23063 65039 15391 34476 57169
+12913 35956 50611 19222 44161 1453 64362 20017 28988 45098 10908 49416
+22622 63497 7500 47225 27714 2087 58439 28848 14623 44723 21648 48649
+36809 523 65160 20293 40912 6418 60668 26850 42855 1168 52053 29414
+12331 37573 49755 15594 65302 27191 5775 58583 33605 13589 61797 38491
+18106 27880 59649 562 50785 15437 46632 25839 40655 2307 51502 25523
+55238 4264 46024 33528 18009 38253 57186 12098 32404 52428 9812 45377
+21251 55250 13835 35048 42264 16375 51675 22349 47163 6311 43486 21395
+52794 3777 27388 43956 8852 64281 35960 19081 49958 10048 32337 45958
+18782 52647 38294 824 31646 58342 9302 39466 20896 64812 2496 32191
+50292 8440 35845 56526 3975 45043 24847 41164 2045 64254 28332 14844
+53698 36985 6382 63129 18414 35337 45365 8321 57313 32140 16921 50324
+37648 4591 46598 21400 57547 2093 34136 62778 19158 43985 5087 60642
+28696 16838 57351 27289 7184 50841 37461 4385 59056 32452 6798 60813
+36970 16761 55719 25121 41509 5925 47479 12747 64450 25246 39163 10050
+62567 31617 3631 56290 27319 7801 49108 30072 2368 52895 28069 18693
+48422 5157 55405 30209 16878 37827 53590 8833 43162 24057 56199 7854
+44952 21787 53477 11243 30333 62012 18194 41558 3800 59017 30508 19608
+61646 33791 8736 47207 24184 56021 14826 42058 21369 54224 6867 40301
+26536 56442 2667 34280 46156 17523 63493 27594 551 57618 37095 13440
+50853 33689 16697 53054 37260 5036 65407 27567 15280 57864 35245 11438
+61850 20025 49856 28934 794 51766 38193 9117 29599 45321 19521 54941
+28254 6012 38230 59894 17105 32387 48305 11996 64149 29984 17372 38010
+55815 3995 43839 19250 63772 36045 1460 43753 26940 60869 5449 49014
+24990 42741 3719 56525 28288 6521 52052 36492 18946 49715 7519 35079
+55286 4290 46264 13584 39500 22139 56902 2493 38690 23455 51067 5821
+37462 57975 17262 32454 62493 9645 43712 22442 65260 15681 37487 56788
+5419 28882 46160 20201 52958 12541 44146 22642 57236 10124 34601 64604
+21205 53766 12169 33163 56424 6848 46602 31386 19281 50210 12493 37815
+56672 269 34481 52994 15359 45322 27049 16419 37408 57290 5442 41020
+23095 53988 10339 44747 20360 58107 13528 30824 46418 18221 53000 7648
+34631 57954 3519 32029 51251 8949 45091 22468 62876 6534 30558 57511
+15067 33638 47346 6006 61161 24089 39367 3512 52550 31328 16695 54160
+38039 10579 33120 51275 4917 61686 27407 10073 52110 32712 14114 53767
+22703 46403 9976 31404 63045 14549 45186 24898 59768 2536 32206 43299
+17780 52632 38041 11337 27082 49766 4726 32912 54070 10572 43535 35136
+20379 57805 8139 31912 65408 11845 39259 19313 60730 29310 8950 59012
+27112 2078 49512 27592 16421 60885 37328 696 30355 49317 7708 61942
+28038 4232 57621 36476 17280 61387 32212 13418 59981 38304 15762 48724
+28088 1350 54669 37829 16811 58737 28595 7516 61376 23572 48217 15148
+35771 55178 5913 42807 24210 46686 15822 60925 22329 41847 14781 33072
+61958 12697 30098 54993 17482 44620 33566 4351 51694 20443 28615 47609
+12329 60048 24506 40262 2824 64608 28812 10589 55251 26784 39302 12927
+54130 29732 7793 37523 53281 15717 34405 49636 8405 43890 35949 22448
+61486 11714 29680 48920 17429 42413 22357 53608 3574 30456 45612 10890
+57837 23220 30573 44666 4977 52790 22540 46971 16174 36285 43929 12046
+59165 33417 16802 65150 38092 8442 44311 24579 58197 11156 36615 61563
+5849 28210 50635 18814 41207 11846 31604 58842 726 40452 25449 46973
+5444 51135 20924 28504 46819 12557 55361 442 41400 26048 64407 5335
+39130 26956 60644 1555 38770 24674 65250 12918 48469 19558 28349 53778
+6002 37620 49570 11915 43773 22709 59916 6726 27876 62864 12162 29428
+49987 17992 45233 32962 1593 51885 25984 44898 5725 33664 55893 17558
+27174 63155 13221 35267 59195 1806 43187 16063 64491 24143 44682 121
+56117 28829 19754 42525 5452 58031 33468 10103 52132 24841 41857 11614
+30892 58540 18167 50122 10872 39451 21232 62750 14048 36255 45913
+17266 65069 31669 10354 45431 24844 61250 16470 29730 42711 21270
+62254 8518 49478 26971 44119 16313 55610 11332 46662 24395 40499 2007
+49518 21083 39463 13769 50990 34411 3150 53991 27205 18961 62171 35175
+304 58470 38023 7658 29182 50353 17717 47072 5935 30026 42817 692
+59516 24298 41262 16148 65076 2530 29434 58973 20426 46570 13876 27623
+64034 6399 31929 59725 54307 27850 9556 47510 26453 61265 2266 38666
+25857 52476 7063 36034 49867 3801 60546 26766 41935 14045 47090 29682
+17023 56423 25419 40880 2358 33230 46860 11530 53607 25881 40851 9977
+50164 18975 31848 56168 12606 42915 21605 59099 8608 45496 22732 63786
+12659 42228 34222 16649 56889 37711 6000 44905 26482 58657 3192 34557
+56302 18450 39206 5468 52690 20522 36684 56069 9515 28152 47025 1513
+57775 35880 17398 64594 38443 13939 27229 61392 6525 50228 23762 41961
+13788 54369 22273 49175 7630 34456 51990 17269 43748 34239 13746 64551
+37919 6851 28840 47218 19855 56815 12076 33556 43153 15611 54138 32635
+8710 48538 27792 60 51123 36365 7608 57227 20810 34599 62007 9552
+27132 44725 3555 50970 36261 18156 42165 4364 64066 28945 19327 49414
+12531 33865 59115 6880 36728 52376 347 57317 23944 47846 5263 35091
+46405 10023 61060 23840 41135 13798 62307 32584 1802 55211 37078 7364
+30408 51573 16089 45169 35559 19962 61344 5910 48197 24710 43391 16767
+58985 27844 253 63934 31420 18861 54329 2880 45628 15889 38156 56227
+1164 27697 63051 8881 35108 47757 14700 63610 21662 39436 66 60359
+18720 35185 57015 7175 30064 61315 1280 48333 28788 20290 51308 4756
+46667 21914 31337 60836 341 49697 33104 20510 42800 13396 54895 34548
+2064 63175 25087 47935 16987 37217 64928 9174 31822 57856 15990 37247
+63663 6656 33126 45202 20588 52780 14317 42808 22646 57108 10446 46020
+23337 53122 8207 45298 34862 3754 61859 36642 13813 58987 27173 16974
+54726 33767 4613 38109 49043 20121 42937 1096 57254 35287 9680 61444
+21637 40239 12736 59234 18825 37054 64752 10755 38423 48618 4767 28304
+52778 18048 40692 25256 50064 10367 38884 20490 52350 14173 36156
+59151 8965 45575 22794 49630 16341 29474 62630 3296 45492 22215 53218
+6261 38680 26498 56017 2398 32084 50850 7955 27395 53302 951 41372
+22212 56334 3481 33319 52431 11253 48369 425 34972 56279 18521 39046
+4996 63708 20887 33124 60997 8901 30318 54888 15873 59537 31474 6891
+61507 27696 17124 47849 38360 8429 49290 13651 44917 31021 15532 63349
+36228 2939 57894 33051 19672 61218 14548 48214 35391 7963 52427 21717
+34400 49017 9875 43825 33867 5790 53610 38459 18422 36376 47733 11706
+1038 36047 63435 14450 39769 20812 48614 12105 55475 31390 16718 43208
+21564 57020 11818 38541 20459 64111 337 49665 35296 6881 62096 20583
+50213 13796 60424 24220 38987 3125 63208 17026 29552 59405 128 40020
+26304 64988 5767 38645 26836 55603 1030 30666 49002 19377 59577 2931
+47148 29557 19244 63995 11831 40402 21138 51646 7644 48404 26730 43340
+16306 61351 7901 40446 24587 63715 14711 31022 44232 9147 55102 29107
+2850 53053 37948 16442 33723 45782 1684 60525 26739 38542 3919 45293
+26698 63754 1019 30709 55794 6190 47519 21489 52959 17512 34208 60278
+4906 39975 25065 62987 1897 46785 27220 18461 64665 37558 11960 54922
+29355 17878 47250 31693 4734 52107 13689 46898 37008 15535 65266 30914
+11892 57489 24795 47235 9571 34127 56715 1763 53433 30000 16624 48737
+27396 10856 31866 43979 19453 65185 12066 39237 22057 50867 1018 31564
+56557 8617 43635 22678 50942 14340 41665 21800 62033 9725 33278 58695
+803 49507 14094 40582 21971 65154 3547 33434 51171 10127 46509 25206
+40458 11269 58035 20417 31307 64194 9336 46522 18972 31927 50293 13302
+56888 23353 38891 7353 54321 26305 42551 15698 49899 9443 40952 25809
+50890 12452 39320 23485 63417 9231 35938 57873 16294 41017 11567 52378
+26411 39113 15414 64137 4062 47274 23188 59363 16011 30367 43846 7019
+52317 28597 13341 54759 23680 42758 1812 49922 22398 40682 13231 60260
+27750 8036 58388 35295 2402 50951 31162 19417 41529 13514 58047 17374
+30588 47424 20765 51660 7475 33020 46647 1988 64908 29371 19142 53320
+11174 31223 56308 15069 40201 24292 52741 4001 47307 25342 43235 6905
+53527 28401 2367 51010 31176 15589 60037 37514 7994 33535 62767 3575
+31295 58220 6871 45881 26477 63645 3044 40761 18918 31581 61710 1016
+36949 51341 13991 34002 59133 9529 41073 24038 64666 14671 44354 22534
+60486 11232 38205 57920 15729 32894 60071 9322 43453 25902 63489 15701
+40142 24333 60524 14528 28918 51316 10317 42267 25336 53040 1067 36379
+48641 18225 41275 3957 45275 23671 49030 12145 36332 57361 5630 32128
+59307 20732 28371 55388 5016 51079 22910 40564 12834 52613 24999 40149
+8631 54963 28400 17267 62551 38085 5237 27861 54856 14523 63149 27046
+16734 58436 30309 3562 61643 22619 43928 57939 17502 31655 52555 4256
+42830 24381 59936 6102 35022 64927 1636 45897 25050 53559 5385 40672
+23898 44467 15103 54490 26334 42484 9614 39481 26207 44635 7795 52569
+21756 35142 54290 9208 42212 23755 52116 13506 44177 23229 50952 14903
+40190 20878 62302 9214 39519 25383 43468 11089 55550 35251 1335 50221
+25530 60039 15246 38670 23014 64903 50 31056 47054 19536 53636 4086
+33485 50943 6999 60861 23792 40660 15192 46436 22949 62966 5304 29442
+55301 18452 42604 9672 57127 24325 49510 11005 39449 21601 58447 14415
+38869 26817 42745 2911 56384 12806 41715 23413 54781 14871 35384 50277
+10163 31373 52618 5238 42119 25030 58739 3211 35562 63983 15058 42360
+22918 60506 29550 6198 55172 22004 42682 532 53018 32938 16425 62552
+22188 43592 14166 40748 23826 63298 4617 37874 59976 17518 50909 3485
+40419 26315 54365 7121 29117 58670 15459 47807 26461 39221 5682 64013
+25599 48656 3626 28557 54063 15338 42825 27267 18282 60147 36346 8992
+45643 25533 55012 14808 39443 22055 59859 4124 47277 23955 42063 6292
+52222 22150 34917 59314 5297 40801 23921 44443 1876 61334 19511 31883
+48803 4602 65396 34338 20580 58048 3114 32190 60129 18539 44587 4231
+54603 29758 19617 43630 2803 59988 21172 45876 8712 54588 19101 40266
+31385 9578 49544 37124 4579 57210 19529 35200 61083 3087 45115 15138
+39427 26405 62150 8344 54035 31284 3436 49560 38314 17354 29748 63424
+9486 37526 48807 4844 62694 25486 40256 46 56658 11421 43456 25461
+60270 15713 40345 21725 50306 7025 34676 63153 3531 43761 25611 60491
+6401 39066 19510 63841 33954 13548 58135 38200 16182 46827 23027 57246
+10029 42057 21507 54173 14165 44958 26216 51003 13182 40050 22694
+55283 9750 43573 24625 54180 11764 47962 20957 43077 7455 56504 27852
+17220 36913 54441 520 48314 30660 5897 52956 35506 17856 29139 44351
+4902 49384 23932 39240 18697 50389 7273 35761 54511 4136 32267 47121
+6784 59400 32050 19850 45552 12047 57204 28571 6304 62967 26062 52324
+13229 33065 64413 656 43231 22869 51630 16138 42575 2396 63998 34061
+18358 46460 9908 60025 26924 43623 4856 64293 22410 45072 1963 32752
+46761 11947 58002 19467 36206 46003 1268 37814 51139 10534 43330 24196
+49179 8521 29996 50680 10420 44556 22385 59051 13423 30122 45948 15931
+50743 22516 40954 10818 31246 61528 16206 50318 28769 9973 63037 36328
+4706 58774 21494 51825 1086 65359 31568 18759 58334 5146 46002 31391
+18484 56943 8144 36093 61316 3282 31834 57283 7193 46864 32726 18304
+54885 5311 49652 28782 17265 61255 38045 9553 30997 44371 4649 55139
+12956 40918 25774 56843 11437 35350 59353 21562 45935 15995 29848
+49139 854 34020 59921 10096 51543 19922 34716 47902 12451 64865 20763
+31871 40428 5863 62521 19910 31986 52577 8436 45669 23647 63334 10542
+48207 20780 29693 65125 7868 46190 27836 3938 57251 38013 14359 59798
+22821 47988 12804 39553 21076 49520 7947 30679 56977 1647 45376 18924
+35444 47889 11353 59831 25855 41089 7009 36801 46663 3208 59468 34989
+7746 55482 18856 47012 34245 9451 29068 57554 20841 47427 13688 34669
+63032 18335 42782 32799 3180 59624 20232 45264 13062 37696 56997 17475
+34011 46285 6754 56203 34919 4178 51268 30561 20190 57400 1899 34688
+62919 6681 44706 19402 35030 53685 13367 62303 26163 39281 2524 49410
+16461 29511 64811 12056 52230 26820 38537 10246 57602 17452 46317
+28343 8932 53540 36435 17470 51681 10792 41324 26762 49411 14118 34637
+64387 10067 47662 26869 38530 5915 62641 25737 43417 1363 53427 21916
+62284 14857 42110 23953 46185 11585 49928 21356 32867 59538 5794 48237
+20133 43655 35591 14543 65092 23139 44501 5998 54742 20294 46624 27663
+11545 53631 32504 14417 50521 29263 18851 64223 37362 4348 31350 55340
+8304 44022 25808 57732 14499 41110 22060 51594 13202 32732 48627 10257
+55974 28318 210 49600 27226 7826 62310 32298 4285 44310 25970 64185
+639 39586 23609 60305 5536 38612 20989 62058 1529 30251 49633 14914
+33813 60499 6230 39238 26758 65318 14932 32423 47659 4487 63124 19849
+29043 42522 13626 61586 21762 49169 3023 64327 19524 34325 53942 13467
+62328 2239 31366 58957 20570 41858 14012 64129 23820 41447 17203 52531
+2953 65527 33743 16084 49685 37549 19784 43379 9547 56556 21982 40054
+15301 56220 30001 6363 60577 35909 19704 49727 11733 41108 25479 54521
+1102 38812 20767 50077 15940 34271 53350 13402 60157 23374 40186 3758
+53134 30855 9354 60831 27298 17560 57173 32941 5337 64448 37915 19469
+2428 60100 32961 7224 38350 54468 167 37011 62783 8376 29767 58535
+19348 47996 6673 33730 56691 2054 47464 31960 18635 53438 13293 38721
+26819 46376 10610 37122 50980 14288 41341 22984 63966 1826 37515 49325
+16429 28822 52868 12075 40942 23872 58914 2284 38796 23086 65520 13890
+33155 52432 3732 41917 24411 63433 16034 47589 21451 35223 60616 7298
+28652 49883 3418 42555 27622 9803 63322 37599 13301 57349 21041 43951
+31236 3146 38454 58468 7493 28623 44922 248 53954 24935 47293 14833
+42935 2578 61111 25151 40308 4490 50145 19171 31527 57009 404 37072
+51422 11276 32049 61654 18016 45639 29575 1101 35316 63276 8408 45379
+26637 60890 13956 40982 25385 53729 10573 30548 63647 4236 39264 21110
+51507 13709 61181 27759 19630 49924 30557 12880 52806 25760 40167 1150
+64445 22328 44647 6642 37578 61195 1883 28012 49524 9671 55446 23700
+40537 10808 52444 25027 60787 27 27723 43895 9015 64925 23916 39871
+13035 62573 23089 46620 7703 37854 50564 17366 31283 48025 12797 61110
+27582 924 32700 44672 10047 56532 21208 33674 53921 8180 45120 23604
+41861 6048 55292 21483 40485 2820 33493 59139 21229 43829 995 63148
+25452 38695 5684 60996 22812 53720 590 38955 24974 50692 14657 58888
+22887 42011 10686 57029 29340 13655 46244 34845 7686 58266 31596 187
+64212 37849 8531 55459 27921 16427 53060 30655 908 57168 28505 10473
+50776 37857 16550 32424 60832 1152 36079 59024 18281 44148 3952 55564
+35213 7918 46299 23766 52756 14730 39284 20491 62394 870 45992 29919
+8667 55671 37502 2144 62118 23845 45454 16816 37624 54340 14802 36585
+45618 19163 53714 36137 9351 50724 17068 32354 55756 12102 43827 26870
+56776 11240 33571 51686 17399 38122 56254 4105 29240 46397 18124 53167
+2276 41249 23562 57102 12873 35166 46765 6743 57759 25076 40275 9988
+31574 46305 15057 56197 27560 9134 45576 37616 17579 27656 46636 8229
+55887 29800 1296 49932 36534 9936 30396 48353 22731 40434 4663 58287
+11570 31976 60478 2282 46455 35923 7266 51113 24743 47260 12971 41581
+23551 55024 3534 30975 62696 7154 42708 23584 61496 11409 29512 58517
+6736 40508 25333 49622 9658 29620 65442 21417 47997 14039 35464 50364
+3020 41769 22013 52616 14714 28136 46089 20074 41610 11454 64764 27131
+18964 49244 27963 14580 53197 35750 2945 44684 25917 64277 13487 39219
+21951 43213 11199 59362 25320 42070 2748 49055 18027 61636 29426 4091
+59902 28096 11315 48690 30640 20683 62083 5473 47518 18296 33118 64207
+9697 43639 26617 51499 7547 40674 26430 58069 11583 45390 21981 53503
+6657 31733 58294 1755 43089 19178 52244 33630 12549 62271 18259 55009
+36120 2261 52239 25104 41895 6041 54416 18354 62114 27440 15449 51127
+37236 17833 56886 33010 8241 59554 35530 18730 50654 12652 33273 54449
+16488 36351 59992 9492 42108 24466 54354 15313 44921 22976 41201 6962
+55423 21922 49915 15756 42532 23865 55747 2589 38713 19860 56345 5908
+36950 50746 15862 41791 23940 58283 8173 33898 45182 2094 54121 10652
+37366 61920 4984 41916 23174 57055 15601 31099 48526 12146 55193 18845
+32199 52488 12543 44127 33640 5427 64747 17699 48896 31397 7779 36066
+47185 12476 57800 31941 20392 52439 1451 44808 32367 17487 58364 11456
+28327 64366 3392 40477 24341 55688 9139 36875 49059 14723 58291 24470
+40328 4548 62662 18322 28604 57890 451 34353 60603 11539 43974 24708
+63757 14821 49124 7681 39047 26996 47429 13050 56350 21277 45036 8246
+33550 47067 18467 57233 6834 40279 32045 2181 53019 36611 17034 33081
+65530 3524 51300 26217 40807 15360 53928 27528 18287 46754 33616 4338
+62691 36625 13490 46302 19160 38401 61372 2752 27513 56710 12444 42687
+22222 51292 8609 39285 25053 62956 15416 42102 21721 60912 1726 33745
+58226 10126 42403 24174 52295 12034 36837 64555 16540 28510 48116
+19700 39693 5136 57736 30158 8337 65228 31706 2941 59691 12459 28800
+46559 20848 61641 5930 39014 23952 53347 3128 41078 22469 65114 6574
+47126 27472 13675 62852 37227 10205 58245 21639 33685 50986 8887 43449
+25070 61095 10743 31041 53917 1911 45107 23156 59603 7400 33611 42099
+70 63377 21864 50823 6329 34209 61032 16332 40318 22959 53476 12755
+62695 21596 44068 7464 60211 19162 53277 26273 42074 16666 51649 27579
+14101 62283 30569 19738 58271 1688 31517 65167 8201 39257 26061 57007
+16448 36429 51741 14656 32442 53891 2799 43935 35427 18451 62093 102
+44771 36472 16855 55938 4586 43943 19069 63782 28377 12792 59171 37488
+8969 34450 54828 31125 57021 16178 47903 35449 3939 56382 37790 7835
+47157 21554 56062 17329 38651 9343 53037 26745 60213 4388 50991 29583
+7972 63551 35557 21839 55959 9836 34318 45647 16043 54661 35898 7272
+58158 38437 13979 44471 23878 55956 841 39108 21819 53232 13042 34083
+60817 16363 48805 364 38982 18839 56800 34816 13588 49826 38438 17158
+29760 63204 5723 44451 20561 37668 48059 8138 29409 44851 19286 65025
+10772 39171 25958 49594 11914 44607 35847 4331 59068 11322 41062 21667
+52319 29193 4967 64402 23694 42242 1341 57860 29460 6470 46740 33064
+18349 62318 8196 34606 50408 2289 64100 26124 39090 12275 59102 31025
+6205 52396 33277 11347 64852 26916 46546 16691 27967 62921 913 34303
+48421 13184 55352 28477 17809 65027 23943 44137 14923 29294 51826
+17730 46470 8075 36673 60555 2897 42094 24784 62672 4795 40137 24201
+59890 15302 46105 25296 39832 2273 53283 21647 63342 16853 28429 50047
+5800 42120 15784 61775 26592 48474 5035 35674 51851 15749 42040 23030
+59239 6096 30311 44276 18327 65311 33509 7261 51464 19964 46115 32527
+12584 52734 37169 14846 49975 20502 30337 53043 6489 41744 31695 19689
+54853 11534 61469 23142 42447 3440 37358 64670 16922 29200 59613 10323
+42177 23737 63706 13237 46117 20567 56185 5321 47506 22520 38878 10313
+61275 20794 48258 6140 30775 60312 12463 51461 23841 41014 9023 58614
+25205 48931 7466 33937 52192 15646 46365 31254 4534 64607 34102 19091
+57639 3004 45950 34174 8978 53918 26634 44790 13047 49668 29131 4727
+61199 33165 20966 49238 3033 34193 53747 7562 59341 14364 44326 25319
+51787 11903 41173 23445 50178 17879 37451 56914 1837 40603 25290 51899
+9691 45848 18275 60793 32255 10523 45763 36880 16302 53906 34541 354
+50294 25128 42292 5084 64094 17400 30567 54779 1162 39768 21896 50014
+16699 36338 64821 12310 29985 47580 16278 54380 24127 39820 9858 57538
+23378 48676 3603 32008 56767 6037 45383 26591 39128 2609 55539 26893
+38616 13708 46468 238 35358 64760 7853 44938 34112 4392 37918 54448
+17102 45570 35063 14066 53176 20512 43864 9773 49128 28930 4405 64671
+37881 10714 48017 23085 56455 12404 29129 50705 20123 59226 10807
+31329 41419 24202 55110 7774 32035 48975 573 42914 22889 62480 6252
+50126 1840 29086 43347 9458 62023 31713 18079 59681 25298 40875 5939
+60960 23732 49196 682 40770 17209 34118 46246 14036 54985 31357 16049
+49990 6107 41651 24501 57360 508 40031 20233 50610 27373 2995 33919
+60483 8732 41876 26741 62797 6797 30873 57495 3423 44211 20531 31904
+62498 10287 47146 29381 4214 64479 27187 8606 53186 37920 14371 48601
+25156 58779 665 31760 61003 17094 50588 4813 34604 47566 20471 56229
+1214 29367 63958 8885 48473 22925 30347 62858 2780 45371 16799 37136
+46797 9153 53422 26134 39122 13505 61404 22713 52198 3349 39074 26652
+57553 11722 29590 43421 16938 56716 3510 40665 25115 62176 15154 40271
+20456 50394 4657 34342 57550 11944 44927 29640 19305 61453 6440 42961
+32652 3830 36520 49298 7390 58938 34818 169 63494 21235 29174 49776
+14279 34611 51918 9926 30798 46903 20122 53329 586 35379 56791 9084
+29508 61390 14008 44627 32223 3914 54986 36527 11700 59329 24794 38947
+8770 53367 18189 29191 57098 544 46991 34034 13928 48666 20909 53462
+1662 41343 28681 16242 60720 38373 2232 28046 48351 6894 64538 25823
+39601 3871 61829 17307 35738 58465 1966 48241 26713 38574 5286 49822
+18003 55372 30556 12305 52193 1765 40782 25674 55056 3894 38492 27029
+60886 9338 39456 26715 60126 12808 50622 25263 45113 2525 35527 54570
+10913 43503 34449 1322 64722 17614 49645 31167 3298 37205 63604 17467
+27204 58011 9632 40910 22846 49370 6227 44488 24141 52125 13400 30697
+60123 20407 38909 6381 65467 19452 35486 55005 15158 43160 6893 59843
+25138 46962 15731 42152 20704 34052 62654 1273 39139 20655 58716 4652
+34097 63314 7263 31013 48158 13023 64680 29343 16415 36965 54649 1064
+27962 49364 19153 58554 4469 30012 61447 19544 44463 12376 55448 23263
+39156 7695 59271 26137 44466 14430 62137 29823 7080 52028 24676 43316
+2826 58880 36214 5656 61400 18061 45959 37087 12886 28656 64532 15592
+41777 23780 61903 8987 34040 59045 18638 42474 5649 63300 25095 54156
+19624 30253 49369 10998 59222 22524 48176 10331 28461 63085 5369 40366
+26810 58958 468 35092 61147 13763 45302 27208 17890 55698 30972 8272
+37698 63554 3987 33244 42361 6425 47587 22243 62953 2155 35900 46571
+15540 61131 23911 53128 13483 39368 26324 32051 63653 11748 52228
+24065 40241 13303 53751 1371 34050 51379 16100 44380 32217 11782 62245
+25346 43975 5612 65134 23846 39928 1491 58218 19337 32675 62454 12453
+43582 18625 64838 31421 9103 56856 38288 16748 46666 24488 54722 12385
+45963 20941 40684 15499 48194 25541 55232 5226 42823 24966 59126 15016
+36433 43923 19991 59937 27912 2997 56621 36576 10481 41606 21722 52795
+12330 39988 25819 58145 9043 30283 60282 14361 43091 34555 17580 53398
+38179 12247 46547 19715 54975 32070 10749 61874 19269 29729 58581 5336
+44880 21101 49029 10768 41415 25169 63188 13493 40148 21414 53439 5676
+47614 35051 20372 54082 8641 33939 48571 266 58561 26369 42077 9448
+53005 31738 3129 59708 35321 16372 47471 21944 51902 13898 57710 22994
+46225 19008 28319 43513 13298 56060 37794 5641 58533 27507 16433 65363
+37105 6285 57722 13951 43310 22530 48624 17323 37055 50847 7300 41273
+23905 60430 15296 40923 22814 45760 2700 55928 19965 33187 63711 6274
+43161 24691 60429 8333 39826 26443 63297 11034 34643 54505 5827 47241
+27201 10727 58713 34451 20728 54683 9790 43062 22271 46929 13794 50957
+28469 10614 45266 22507 65109 13892 41900 24192 58861 9048 36712 48288
+19029 33033 62807 13594 44878 21099 52183 6358 43673 25439 54003 785
+31924 42712 6703 57338 31140 14406 63908 19953 28077 57981 15565 45500
+25493 39615 10004 56201 22510 42509 11705 50971 38242 369 32727 61881
+12144 54526 26882 38601 9945 63910 26680 40992 651 48076 16598 57199
+25832 41578 2476 48393 28081 18510 56157 37995 11137 30348 63583 4207
+50699 27768 9467 54532 26658 43323 12723 52574 24711 46314 15333 42661
+21620 54960 4177 33732 58983 7633 44197 20067 63953 35843 8888 41721
+26327 52113 7052 40180 25996 60183 2914 33154 52483 20174 46340 11412
+36195 48997 3772 34651 55870 20953 39531 11422 53286 28628 14015 44009
+25491 51227 2056 30969 55138 7755 44954 34540 786 51739 20140 48097
+14384 29796 52252 11262 34751 49855 15541 39610 3306 60744 17713 38895
+26426 43814 1240 57587 36470 20181 52212 11994 44576 22178 50542 17444
+29829 54169 7790 34935 48766 1547 59426 21665 44327 14078 48851 19166
+60922 27936 15752 52568 33371 12581 58157 21033 40909 4877 29843 45041
+8002 58707 18140 47096 20791 34181 44363 4621 55593 20453 29333 48188
+10990 63323 29064 4876 57752 36105 18369 50734 10039 32667 53735 18115
+44986 11912 52335 26992 48363 3955 39145 25920 52312 5640 36825 53723
+15023 27923 63246 4810 40055 22550 59872 2134 37133 54178 8069 32798
+64717 13499 39316 22362 53034 7088 31663 56078 1087 49140 12938 33017
+51773 17589 28617 65335 5270 45904 24265 62683 2652 44242 19622 38007
+52775 3954 27327 46999 7256 61235 27248 2063 34082 58358 6806 42438
+23418 52859 578 36234 49489 15085 40488 24952 64782 1967 36956 55346
+7649 31767 50037 845 59349 31279 17969 65348 10964 42272 23219 59880
+16273 39304 23601 44705 12462 62796 21498 39842 14775 49483 23308
+53854 8742 36888 64183 1376 31755 40796 10483 62363 4521 36102 53056
+9949 46823 27063 18404 38337 53330 1522 29268 48938 17875 41101 25621
+60215 7979 33595 64294 4394 27779 58472 19493 48238 882 29279 52149
+9280 65450 25982 40626 13571 50689 21427 38626 11624 54467 19106 33203
+52101 2849 44745 22361 57524 13602 31991 62091 17391 37492 50466 4319
+42026 17170 60202 35979 1100 57500 32016 7922 62952 36713 18665 55737
+6733 33089 51876 272 40156 25871 61923 4822 28814 53355 7984 39262
+26485 59393 11041 39050 19298 56705 13802 45473 21218 61919 16018
+40606 23045 48784 7940 37396 52878 4123 32100 50839 6840 61481 20286
+33478 48141 6305 60140 28421 20497 53306 15015 45370 24481 41526 2115
+59360 21131 47112 6852 55713 22597 35093 51862 5378 44192 14434 37504
+63290 10345 31368 51526 305 45179 19159 35322 56491 12837 32386 46152
+18741 60980 6156 39645 22234 55746 462 30099 61519 8831 39764 25785
+49565 15092 41380 23860 51269 3532 31480 56938 11949 45414 21214 63431
+10968 35330 48552 18490 41624 13072 57906 31577 5500 63010 19264 28060
+59656 15345 44795 6099 62598 19505 34612 49162 8718 65385 18954 35568
+58694 11724 27659 53080 17172 40520 24274 59975 6616 34874 46137 1741
+55070 28857 20562 58175 9251 48338 25773 42881 6154 63846 14613 50381
+31121 16760 47117 3799 60001 32112 7478 37121 64099 3334 41337 23867
+60687 15590 40562 26132 52545 6128 39674 24418 51175 942 35490 44567
+8112 56162 25980 39384 9156 51598 26697 64959 16786 34784 53939 3439
+61292 8765 27775 57763 15812 35665 65497 7309 43133 24088 40207 14103
+54339 21186 48375 1982 30566 59113 21672 39294 3600 61435 26309 38512
+7449 59626 20499 31000 47268 11225 60670 23678 44063 1337 34632 51566
+10910 47470 18111 33862 50256 11556 28138 58679 18242 46417 1565 34627
+49482 17681 62951 27393 11739 45683 37273 22158 57814 8367 35387 47143
+15907 55416 29677 11989 34884 54536 9548 49287 31804 16212 64641 36944
+18279 55937 32658 13203 52184 38464 17216 28540 65487 13091 40414
+25244 60684 8854 32681 56270 11557 35225 51353 19196 28588 60588 14918
+44026 24271 41060 6720 46382 25834 51864 1681 31786 49647 5409 63877
+30133 7685 49171 34923 2202 56456 26782 44403 5030 29006 59027 15561
+42028 23855 56095 14578 44697 25180 54682 16726 30807 64603 2721 35168
+59372 9390 42892 22183 61768 8869 32815 54378 3322 47203 28407 15744
+38261 52893 10734 33153 45907 13545 62534 32579 17300 49642 36870 6648
+31540 59772 1758 42306 26293 62448 4612 49346 27751 14489 61405 35948
+6821 42734 26419 51709 131 46334 30054 14960 63434 25412 52092 10458
+29247 45806 18751 53423 26297 41171 2610 50157 24809 44608 14984 61082
+21177 47633 11999 34593 56609 16090 44184 22175 55537 1178 31077 48850
+22737 63102 3205 38603 26898 51713 9086 36118 53645 1855 32835 62471
+17459 41708 22471 59616 13793 40659 24360 46005 2039 57053 18464 31925
+43730 4090 65331 34424 8135 58262 17974 48830 35541 11341 31220 43285
+18370 62262 12311 29073 59685 18218 47239 27578 7352 56709 36686 16414
+61721 24011 48632 5860 40857 21462 65060 2029 37160 50033 16660 33287
+60192 10563 47864 35944 16822 51097 22796 58019 2311 35571 62512 8155
+29301 59721 14553 42640 25131 54867 1598 39245 24529 56375 6336 30356
+64946 865 42549 24808 53700 13628 37427 49791 1697 33708 54674 17823
+31207 42994 589 57820 24526 40513 5288 47883 20474 37930 62842 3244
+30662 57746 9394 42833 25659 65141 15052 40276 22146 61769 5275 44341
+33241 18771 57309 10173 32342 52265 22099 41479 8663 61739 24574 41319
+13355 55516 22930 46816 14904 31402 57178 11184 47440 35637 4680 65281
+18855 35292 56837 10434 31194 53537 13056 64330 23394 41381 3174 60371
+19326 30623 43885 1181 49916 12961 39671 25393 45392 19401 37386 50948
+397 47458 18284 30676 50192 3065 60299 33159 8452 45007 24005 64592
+15421 42254 7823 56046 24980 41852 13814 53062 23155 40454 15131 64384
+2516 39852 21650 49255 13008 56482 29939 16394 37945 65229 7153 29025
+60641 21387 41789 5955 52303 30864 21242 61508 11133 42273 3596 34600
+48413 18700 64184 4918 40510 26162 60660 1864 32099 43537 7521 61745
+38430 18059 28229 58876 160 46326 11035 28368 50737 5219 42008 24233
+63151 9196 37347 50358 3619 33705 56711 6126 44133 21549 48779 3098
+30401 59785 16622 46473 4287 33487 48380 9219 57183 19698 33537 62426
+9869 28889 58321 21043 45610 12772 41823 23765 56915 13822 53472 22260
+38907 11042 65175 20128 32913 46424 8067 52892 30693 3312 36859 61062
+7680 33798 48311 11468 41915 25096 50362 15985 30141 55822 4244 46236
+25022 39793 13123 63643 20373 35586 56296 1365 42088 23608 57109 5535
+39966 21360 53640 3685 43788 24499 56581 11123 44849 23509 52580 13015
+34214 45638 17150 37768 56331 9335 28832 48255 19727 64957 11779 40073
+23187 57060 8458 33402 47971 3119 41003 23473 64229 5008 39297 11354
+60475 18031 32546 59057 9276 38874 26844 43381 7577 64069 29626 2979
+49549 38219 12579 33900 65271 17863 45886 9726 35526 52940 18454 42161
+5123 64321 29431 16950 59037 27870 9981 37929 56026 507 29275 49068
+8853 30630 63302 16504 35780 47526 7360 54106 23054 40411 14043 51535
+25968 39770 5108 63052 23100 53143 2648 46260 36330 7808 50793 32513
+1425 54391 34906 19621 49964 4035 44549 29061 10668 59190 37165 15080
+53139 24934 46936 9704 29888 54113 3400 27966 41778 19581 64439 4787
+40828 12202 45455 26670 52840 13645 32538 48968 20935 39723 5447 50491
+18417 33130 62019 13537 43344 23013 49357 16530 33557 57225 8212 39773
+23260 45495 9650 64262 24076 40074 10623 60683 21690 49402 13296 30090
+53734 15121 56913 32486 10555 46311 25141 50629 13624 35469 56093 4354
+31521 52658 10520 47784 27654 16393 38206 64242 927 28434 53858 19892
+39598 2695 56427 26860 38567 5550 53052 26765 39008 1903 62781 26699
+51674 8489 43795 21847 29711 54892 12745 46095 28372 2599 62406 37575
+16671 29398 47150 7005 32426 49667 15021 55569 35540 11524 61590 20445
+30448 58370 5637 14405 55834 28502 10200 62370 25035 42146 12031 57167
+22840 39572 15082 56529 26789 38921 6408 52018 20308 29754 46963 11313
+63734 3 32196 57744 6457 46150 31874 17810 54483 35561 5952 62225
+24956 42697 3593 52876 20066 35281 55259 214 45353 16236 34904 56940
+9482 39872 26583 50837 16796 60188 29472 9347 54829 35929 20330 50772
+10110 42158 23371 54177 14471 48048 27429 3752 52481 36733 15575 43465
+21707 60798 37820 14993 57327 21426 45335 989 30507 47376 15869 60066
+27368 17638 51695 37291 13633 63784 25231 41669 7161 53217 26312 42529
+14246 63536 25434 39560 2531 53033 16001 43939 36917 4423 54994 17790
+35782 61612 2970 39600 26270 45239 5792 58207 25384 47952 491 39371
+17663 62684 27604 12051 56719 38465 18078 28724 51457 777 59807 21408
+39785 6786 63156 33746 14077 52165 37416 10574 59679 23753 42907 6084
+51975 17111 31910 62985 13084 44030 25397 60111 9665 38637 26989 64088
+15078 39684 21837 61262 4273 36702 58204 7578 28339 64471 1147 47474
+18443 33814 55853 3704 38918 25900 59948 5625 41690 21652 55029 16114
+30907 58412 12562 50427 33727 15616 44848 23906 54291 5754 40539 23329
+53107 1700 57912 19364 36644 52493 15263 27345 60109 7073 50810 23385
+40449 5868 57481 30117 12498 60547 26072 47302 10648 36978 49949 4386
+45093 25097 51301 13097 33626 65146 16175 37100 52272 5554 44461 27530
+13382 62219 30164 9723 57452 32515 1530 61100 19271 48191 29476 9446
+37961 58545 20088 28325 64315 15567 41522 24350 61357 8859 39711 26441
+64862 14110 35712 55430 2579 31258 43734 7181 57420 19601 36443 62414
+12123 34345 58562 7594 45957 26478 56150 17732 30866 63061 6207 38820
+19472 55535 7 35169 65505 17073 30295 57986 9744 46047 28050 4006
+55612 36193 10146 51948 19642 28904 60047 4391 50557 18547 32306 55338
+3457 48401 30306 8046 38154 63927 4204 44797 23871 39429 1423 59292
+21126 42453 5823 63516 22307 47051 15735 39680 23321 59255 2895 31180
+56626 12677 45316 17088 35162 47721 11878 61227 24138 42318 13859
+65047 20631 45813 9440 58568 21614 42787 6272 38602 20139 61976 709
+49634 18255 33078 60386 9344 43048 25079 49391 4265 54758 21504 37044
+62004 10063 28342 45980 5176 52022 25447 41967 9819 52848 32890 64639
+2835 46444 33803 20041 52820 4472 33690 46033 7546 63021 36058 957
+47315 18550 61738 32591 2804 58428 36154 19518 50136 16337 43386 22218
+51255 13263 27652 58759 8472 45277 28664 19645 48106 10069 59318 25770
+40953 12635 49314 23061 29696 62002 4673 47475 24096 58410 2255 32507
+45095 6952 52502 26138 40933 480 61891 29716 14991 57314 36304 6986
+63756 19872 37643 57611 12750 29432 64252 8613 48946 27101 3250 51837
+35442 10467 61703 26561 54672 12149 32960 43433 7817 55506 31171 1500
+48064 28273 10957 54594 35858 18228 61185 15 32042 45023 7820 56158
+20968 30409 48035 11935 60779 19944 33125 51160 8812 29305 48104 10742
+60087 19752 32627 50717 9595 34703 60564 20855 43217 6125 50798 34931
+19880 45696 7000 63751 22668 32683 42725 13039 55269 24048 44623 2191
+58362 20353 28280 49660 332 34320 56897 12027 41049 22773 50415 8500
+29779 52620 2336 41292 23545 54496 12508 42458 242 55366 35630 9198
+48773 30568 16744 38024 54172 12112 41424 24530 59075 8910 43464 23800
+53180 14086 48611 18750 34446 45211 1587 61699 24026 39623 6209 43359
+25459 62524 747 48663 19213 30310 64743 14506 44154 32011 10245 48795
+28211 4466 55969 37740 16918 31684 42884 2293 61608 27953 16867 50259
+34685 14 44656 21872 58569 14974 33517 56851 19516 42023 6448 54990
+21078 44629 3588 56838 27090 18944 60629 37695 969 50649 19874 45721
+36806 15344 50204 23856 44557 6688 34199 55148 17539 42639 10943 49591
+4310 33386 56928 11690 44932 22750 52221 6622 41512 24859 50514 11561
+45932 23499 63773 13789 29237 49383 973 40645 23404 51098 15651 38881
+20864 52929 1328 35047 50414 10136 44586 24815 61096 11173 43621 23153
+51931 12882 40309 2624 53068 20409 37724 61007 14467 29540 45677 2246
+63522 35494 10884 43156 25612 58523 12636 40887 22923 45033 16168
+59050 27365 11589 35017 52722 17006 61950 29881 9575 52245 36899 16676
+32534 54965 330 30165 61298 8916 41706 19496 49521 36260 5798 51623
+25407 59596 4111 30648 44506 7754 54869 33422 19 51329 37089 17045
+31938 49413 12994 59627 26275 46191 10276 40528 24427 58355 5705 41439
+22859 53722 11933 38860 20144 59711 15354 45407 226 34447 57896 17436
+40498 22367 63173 2053 47684 19949 36665 43196 27241 16324 58043 37967
+10853 60757 28243 17712 50541 29847 13569 55271 26101 42018 10741
+51089 24724 44983 8697 40966 26573 59459 7350 34888 62810 2244 49024
+32842 16977 63626 37363 933 55889 32345 17644 46757 5093 64118 36035
+9817 51706 17812 43256 33703 12030 40924 20191 63894 14691 38631 21885
+59316 12763 48033 18257 33410 52424 4030 45356 18123 32469 49830 1348
+42128 24870 53637 5931 35269 42125 14283 59765 30881 19043 47790 5769
+40739 20681 48790 4023 64074 24796 41544 15284 62196 20203 34288 58034
+4801 47514 24332 40699 15281 58689 22813 48943 11293 35925 64578 5024
+40102 26047 54433 627 40791 23578 64939 14264 36447 52143 1516 42647
+16022 57158 28494 4325 36617 48539 15755 59420 28987 1865 57597 37181
+17256 49054 9715 61306 28249 5047 50110 35029 17145 38228 46605 8719
+62292 31012 14682 44182 25672 64990 3068 39358 26597 61583 14995 32870
+58755 6822 45042 19903 60650 32536 16113 28456 63507 20068 53155 2509
+46498 20952 30285 61037 5234 50428 22242 39856 2103 57882 32853 9450
+63955 27927 11390 53168 37127 14046 49794 22280 57342 10707 38528
+27037 55946 8254 34159 46490 3630 58537 20094 35049 63401 13275 42969
+23581 62417 7791 46680 25074 53582 14538 36798 56509 8683 41495 25269
+64830 7473 37645 54301 2592 28467 62124 11310 39157 26424 60084 9677
+34997 42542 11113 48530 31156 14670 58726 25638 41554 6021 63691 28017
+3855 54616 37484 16612 64796 27516 118 60210 37099 23312 54040 13658
+43249 28019 3142 60560 36140 20723 58176 712 34270 61860 19366 39437
+5371 52727 35146 17410 60607 26121 43134 5677 63263 10729 44741 25161
+60008 14661 39622 23124 53796 2988 39319 26773 59214 5893 33188 47731
+18992 62901 35090 7515 49945 22394 42241 8619 56639 24601 41064 15407
+53178 21680 48500 186 31513 65216 7316 36687 51997 2348 31983 56406
+19988 46637 5079 41335 13885 48441 25481 60663 7046 41462 19083 49756
+37293 13291 45893 24086 64721 7656 28927 57798 20177 41079 10824 46669
+23722 63445 16068 39962 22528 60438 10917 28276 57702 4333 40702 24275
+53561 2308 30861 64791 13803 48295 28155 16489 55615 33749 1740 63909
+26677 48236 6594 41182 24084 65112 14185 48173 30045 7134 56848 37669
+16410 28748 55114 8352 13183 49412 30479 6432 54412 24308 43815 1904
+37404 58429 9298 43090 22205 64011 5669 39229 21495 60864 13428 34394
+55791 3751 47834 23919 39933 15866 42743 21510 56674 4702 41834 23133
+52414 11140 38391 60277 14917 30785 43677 19502 55855 3177 30846 63034
+8306 46208 25812 51132 5722 55680 26974 46831 3037 43123 24968 65147
+6712 41930 20789 58953 29612 12356 62882 22594 47413 10001 31332 59285
+16956 45786 27707 1577 55785 37629 12984 63001 25742 52543 9419 38701
+22965 56126 10234 35942 52079 6424 45670 17278 39355 21984 65214 8621
+51898 35203 3647 28268 55508 16251 42299 23783 58912 8403 30849 47669
+16920 56276 6145 46442 30003 17710 63086 24287 39407 11444 52718 18676
+30999 64126 9184 41087 24759 52352 11257 30170 54064 3690 43485 20768
+37233 57303 12333 29324 64806 7145 27463 56008 18865 35700 49195 4928
+53955 17489 34265 57858 7204 41891 20255 49761 11663 38564 26173 53006
+3489 37544 51448 6386 45270 13329 40904 26801 57384 9709 48418 18040
+33389 44715 13164 63172 30390 16002 46944 36819 4512 55634 20592 29774
+45719 7965 65479 32690 2861 47043 20072 60692 13566 43011 24250 54999
+12644 29494 51818 5963 41097 24442 54446 555 39195 21704 51313 11756
+33206 63833 5476 43893 19974 31183 52229 11971 46511 18923 31394 48447
+13934 42945 22216 52588 1384 32463 49773 16686 63109 28062 2936 55798
+34592 8582 51816 22451 47689 16743 35781 57767 12078 30505 51957 9080
+45422 31922 19209 48152 5871 31589 63376 16647 34772 54913 9240 46025
+16407 32413 53885 9774 28414 48437 15514 59623 22900 42083 3794 46616
+12468 52313 37477 18151 31700 54958 4080 33141 47998 8256 64774 20278
+33009 56450 12387 42490 21828 54601 9192 44170 28306 15951 58473 30839
+734 64619 32596 19079 51276 4661 30277 61526 7637 38902 26847 54368
+13960 47324 28097 17696 61276 37902 8793 43470 26042 63275 17845 31174
+57370 2621 44295 21630 29692 64071 10999 55924 27523 2377 54145 36799
+17521 50549 32234 1352 62354 33897 17773 50342 3236 35958 53406 7107
+30955 48677 15525 43759 22173 63719 11650 34467 50407 17086 43241
+34305 3666 57750 38097 9078 49838 21749 44002 11092 33446 57654 16098
+30160 51163 4675 39151 21082 53570 11958 33789 50827 4306 31667 60101
+45571 729 62833 36871 19708 47631 12822 64295 30821 19355 52258 4126
+35261 48195 17676 54878 30905 1583 52814 28084 19161 65265 14427 33218
+54312 10109 61002 28960 12496 47770 36249 15382 30945 58243 6758 27539
+50240 1878 61663 24029 40282 13661 53672 20481 35105 58840 771 42690
+23743 39258 9068 60942 17674 31572 55068 11802 39111 26127 53949 8205
+50497 38169 2908 33893 56309 21092 39909 4570 50916 22626 65071 11151
+29962 50035 19980 43744 2563 33541 58143 19365 42984 448 49579 20729
+28487 60328 12279 30412 56444 1872 43613 29710 16769 38130 62728 10115
+46245 32933 1433 52330 18586 35201 63404 10484 38802 26024 43030 20542
+57596 3779 31766 49575 6874 61114 26231 46408 2572 39501 23718 55160
+6588 46041 21929 65526 13729 33385 58685 16314 47687 1277 33047 54479
+15656 36080 51716 2805 43667 11233 60797 19911 30435 45562 9865 51192
+22056 31043 56497 961 42757 22688 65128 13995 46357 27461 17302 62391
+34597 22324 59488 4735 38756 25657 65231 676 28798 56675 6995 39251
+24824 51834 10989 59597 19049 31846 43813 423 56908 24740 40461 15189
+52886 26220 39562 4742 51248 21080 41070 1527 62077 37417 17622 47520
+22110 59257 8602 32760 48392 17862 59800 3715 29655 45814 16226 57739
+37609 1952 60394 24620 42428 4066 62764 23432 50615 5833 30074 64025
+18209 46787 27152 5309 53311 37864 21063 43779 13073 64971 37875 2185
+31217 60461 7436 46361 25216 40694 2833 56479 15741 37775 59296 10596
+51273 22352 39732 1243 50441 18834 30267 64507 4962 47717 18382 35659
+56777 2878 45079 30455 8778 57174 34148 19822 64144 29100 1940 58414
+22604 43717 13143 61812 26626 41025 15689 50825 5012 40673 25872 63881
+1443 38627 25354 60414 4270 48694 37175 10430 53649 25150 47513 11863
+36081 57769 17261 33096 46603 11314 62717 20515 42180 3694 55863 35381
+10460 49782 22565 58295 705 33769 50975 7739 40118 23984 47588 14593
+52918 3993 35671 44261 18056 48791 32555 6725 60839 14376 43913 26156
+54440 9857 41982 25648 57455 12968 41104 23310 62862 2517 32930 56106
+8822 39459 26681 55371 6447 28486 61059 10642 46481 27048 17551 62883
+34968 5276 59364 25040 47412 2903 36294 54589 12764 44480 26183 61076
+1512 43595 23652 63744 14207 40994 21849 32656 54905 15522 28048 52307
+3756 41709 22792 49324 10393 32921 61166 15819 28858 45363 7081 59973
+35160 11734 38104 48988 9172 43981 28979 628 47130 37005 6143 51903
+24621 64526 2617 42695 21513 53691 37978 12277 33552 45105 9323 57792
+26552 38920 6189 49694 18528 28760 64820 12510 53161 21298 33696 49998
+5982 41363 23587 61440 1146 34995 46050 16824 27702 60713 10782 43643
+16147 62506 29134 9365 47946 33687 17625 55014 6436 35359 61074 16781
+46432 29565 10982 64818 32604 16055 56799 36999 3310 50719 33820 14835
+48383 24913 58310 4557 49810 20153 31089 56969 14079 43171 24773 57868
+5492 44410 24493 49460 2151 61833 13095 35484 53614 15314 44883 23752
+40314 10135 58538 22416 44372 14033 62179 26640 38635 84 41855 26610
+50287 5938 41313 25748 62525 18525 46085 5342 41303 23268 58972 16352
+39161 26407 48336 1613 64148 23886 38904 5339 62501 17384 35898 54026
+8028 30393 50242 9946 36786 56403 1472 47918 11611 32547 54962 19290
+43584 10747 52816 35259 17040 47901 20587 62014 3207 40943 25913 48810
+7207 62812 35344 18232 46713 5907 61174 31659 12168 57945 34494 16123
+63793 36626 11210 27690 45566 4343 56521 13601 40296 26423 65058 11267
+42060 26058 55053 14135 35701 52748 8255 27509 49487 20740 39946 10852
+55336 33431 15571 37150 54008 11744 43599 34460 9202 58514 38406 14152
+30383 59886 7123 49235 20022 28272 55348 15129 40781 23177 54227 13833
+34182 62804 20762 43185 28497 3741 46096 26534 62205 13358 43874 25764
+57264 10327 41166 22532 31241 61109 11111 42468 21874 65379 14567
+40442 25571 54345 6957 39694 16740 49502 36681 7337 55804 24751 39197
+615 53261 19151 31825 58770 10646 46972 18112 31897 55968 11836 46465
+29822 14635 56925 33268 18178 44589 5315 55391 26262 41374 1825 59293
+22652 40023 5941 51202 25351 39165 15895 63800 30779 5567 46354 36881
+12205 55654 29148 15960 64982 35581 10201 59697 31538 19771 58437 8553
+28079 63009 15937 41364 24599 56373 4277 39452 21404 47495 5450 65459
+18897 33416 55060 8171 29481 50272 16364 42020 23593 61908 1156 48069
+20483 33412 52118 13391 37023 56058 429 29544 52404 18822 42556 12189
+37890 63251 17490 28121 58844 8473 40687 17156 30782 56156 10272 39665
+26302 59110 7862 19240 42087 9114 58622 34242 17471 61954 36511 5887
+57084 24663 44244 287 54206 23689 40231 14891 50765 22309 61892 5319
+31398 55258 16514 62611 27287 18173 57297 38316 9001 31850 49430 18887
+61173 8143 30185 48963 18811 65415 28949 3997 52507 21844 43435 13236
+56024 32946 7532 47908 36894 2410 62076 19048 29884 56966 10823 47789
+15782 29980 57761 5571 49312 19995 32068 55167 335 34838 52921 19656
+42628 3379 60437 37315 21591 49058 12316 27859 54276 4454 40927 22036
+51407 5854 44453 23442 61309 10025 41232 22256 64213 8222 31647 42333
+13351 61708 27097 6342 37586 51416 12077 39937 21904 61115 8103 33015
+52270 19201 45736 27979 9383 63967 32633 971 56319 35439 19077 52001
+4589 34626 50300 12048 47144 20584 61638 9559 31849 59689 19813 39188
+7839 53452 21341 37425 63848 10696 28436 47221 6333 54352 21405 40362
+13350 55536 26879 43892 10787 49277 27974 15309 59495 37799 4532 61358
+28673 20694 43916 15943 52453 23489 40041 7277 61545 26201 39584 14303
+60036 5991 43175 23398 33761 54458 10083 42150 16874 51005 28566 11959
+54033 37584 19102 49200 1935 41351 24547 53362 6527 31009 50347 15422
+60954 34556 20307 53084 28326 2203 50759 36071 6299 47240 22245 60770
+1027 41736 18842 63206 33701 4800 58801 17661 29282 47331 699 57426
+20367 28195 60679 3116 48992 19882 27673 56363 243 46231 18060 32775
+61548 4546 44964 34254 10485 64178 807 44677 29422 6544 51587 12838
+60955 36172 18708 55694 6182 39227 21574 52582 3928 35869 59038 15352
+49085 1650 38819 26857 53305 6519 31626 50914 168 43335 22042 62106
+30334 11773 59396 33725 18492 47301 9731 57023 27006 45286 6428 38924
+26541 62267 3634 51511 21509 39158 5664 61653 22892 40893 2794 63379
+23522 39518 9473 60600 20928 49164 14453 35788 53417 12523 31501 60182
+1283 48101 21567 53035 14247 27674 58896 20206 40697 4647 48688 21986
+54431 1553 40838 23376 50939 12230 38291 47730 844 37155 52916 8225
+30915 51050 13228 59084 28581 16871 49699 36951 571 46798 21883 60794
+12500 34473 57155 6887 38685 26095 42767 14798 64168 4157 45100 27231
+16152 60326 38317 8768 46744 26176 55374 7787 30958 50195 1002 32733
+45596 20836 64420 5451 46618 22635 53444 2732 34666 51390 5112 65327
+25668 39354 1727 50855 28679 11649 53046 20865 40530 14429 65002 33563
+8918 58252 30089 2896 46112 36748 19873 51423 12930 34390 45465 4536
+50127 29681 14354 60035 22418 44833 5638 39906 24043 55111 421 43501
+14167 37111 56878 16111 33909 62395 1538 39588 24781 60070 16288 28246
+45394 13161 51334 37402 4516 42617 21191 64378 36948 9690 42043 24646
+63177 11978 42655 23726 60014 7855 38981 23105 50553 14057 28684 56483
+900 38081 63408 9969 31075 48331 15171 62434 25484 39482 13153 46659
+26450 55638 5343 35722 47099 19255 54527 761 45424 33526 18233 59640
+27752 3217 53633 36804 17138 55369 27550 11728 36247 59325 4198 41027
+22028 53044 16134 46706 28044 8348 64735 38258 16720 29647 56789 7327
+40168 24422 54956 14778 44830 2451 56604 29121 12979 50230 31109 655
+55410 34468 18149 61952 31903 9646 59499 34249 4055 51971 18969 33306
+57463 2544 44657 31916 18879 46982 12914 53543 35265 7794 64681 30552
+3795 54078 34332 18633 50004 2413 56179 22640 31744 49335 15429 58616
+1356 29209 64598 21700 39847 3627 58841 30490 8792 62397 22585 30336
+56174 10319 45247 21646 59135 174 28476 43219 8986 57443 17299 31637
+44743 9770 62293 30199 12963 49992 37693 16821 28813 55642 9795 48070
+22919 36374 51433 8981 65457 22033 40394 6901 36040 47294 15130 32461
+64505 9829 43489 36982 21676 52961 11367 41482 24775 56917 16265 39350
+24489 49720 11709 58966 36591 21524 47432 27864 1764 50179 24452 42309
+9920 63991 30754 19139 44916 8264 55075 32751 20032 60098 12911 44499
+23426 62760 11383 35605 55042 15792 41537 4531 52709 25861 41172 2777
+65123 23072 38652 12225 60785 20776 49787 14576 40099 24458 43701
+13388 58094 26563 44679 8434 34966 54861 12725 48321 28602 17588 45213
+36906 3404 64910 29624 8095 57323 23764 42422 15033 34833 44105 7222
+62311 36018 3006 47109 25067 61506 9207 43722 30912 16661 62640 33662
+5009 57077 28862 20390 60406 15081 27123 63806 17995 44266 33209 2171
+37787 61487 12158 30650 55630 14732 43459 28392 4665 52237 24702 44824
+17232 59858 9089 50712 31136 18955 54815 37641 5878 50260 31188 20322
+65381 3133 40070 23430 61395 13863 37660 57515 9602 51517 25129 41600
+13543 36279 62183 17434 28321 46390 21612 43641 12610 30063 56583
+15098 46671 33530 6885 59311 37161 3413 47993 22850 43295 16099 49358
+24777 63852 8347 29697 59001 2030 40786 22603 64780 10939 34389 54059
+1251 36180 51209 15591 63442 29445 10969 58507 33029 21190 50631 8504
+47623 30175 11674 51432 22343 44533 4978 54597 35293 9444 63573 29192
+16946 58555 24223 46563 1995 32622 54495 18831 47772 3791 33796 52106
+14720 40372 25853 57789 5018 31652 63917 8510 43404 32937 18495 45554
+23266 58699 2340 33200 43233 7880 59261 34747 1190 52497 18537 29099
+58592 11862 40378 24406 63662 15141 38241 49087 8849 34882 64416 15025
+30583 49088 219 38183 65388 7252 43887 23375 56669 12845 34190 42307
+5538 59919 30733 20108 49154 1927 59346 18089 32739 51838 3929 43141
+21366 34583 63412 15926 46851 34532 8349 60420 25266 42147 14848 51049
+3360 46031 23232 41265 14469 48041 25815 61090 8412 39570 23015 64406
+6590 52701 26717 40080 496 59242 22801 41892 14667 46100 24645 62890
+10090 40792 26687 45283 12662 64115 4919 35012 45192 19632 50038 11587
+33109 55335 14944 43300 20703 51995 35578 5338 43919 17447 64997 37471
+8363 32509 48426 13012 64259 35554 4909 47081 24359 54140 15775 39807
+22748 58259 3428 32467 64595 6059 45162 32149 19534 61172 2438 43315
+30943 13599 46325 25329 62084 10255 52357 24344 40903 6038 54474 16797
+29523 62888 8045 33736 59569 1913 30457 48138 6895 61940 20036 42729
+30843 4728 53013 16549 37611 65178 11028 32638 58117 17477 45785 498
+33983 61425 23786 41994 5477 51223 26045 39422 2430 56258 17915 46908
+28532 8085 60867 21346 32494 45395 10816 57518 20052 31430 50537 5217
+43255 24191 55194 2165 32657 64363 8094 54484 34177 286 48053 15673
+65277 30591 19527 51882 1172 33655 62334 7173 50175 28265 16144 47465
+36571 18709 49673 4871 64142 28122 17648 51549 29880 11776 55203 38034
+14606 32911 52485 18409 49205 6254 41866 25082 51761 13972 35926 44951
+7737 50003 38277 3585 29462 56949 11038 46369 21873 52305 6600 40491
+24075 63222 9956 35794 48806 18715 64487 1672 33788 48610 21410 40426
+2647 58832 29033 10121 62227 23390 43918 11749 34677 56530 19275 51753
+4793 44258 27559 18365 47754 36564 2321 60175 31108 6672 49795 37687
+11851 57326 53842 8278 48852 34745 4625 63524 23422 43789 18010 50451
+27984 13424 60445 31884 5569 56030 37666 11180 33300 52401 15343 43686
+25284 56534 8015 46882 26078 41818 12272 57919 18413 28440 47173 4245
+35312 52209 18070 44638 3113 63838 26113 40584 5515 59378 36340 18097
+64469 15117 40800 23143 46600 79 55200 34974 7150 52026 27829 14232
+59389 28883 8392 38062 57428 11098 30240 65287 1729 45003 18820 51359
+36838 15028 46873 24554 59601 5623 52673 13616 41596 24742 57095 11579
+48937 20070 29495 44846 14539 63214 34179 2956 37984 51813 7490 29751
+53154 2595 28176 56824 21443 42304 5293 46107 23262 57333 13899 31815
+41940 16873 51148 30255 1609 62731 24351 48067 11890 37652 55806 14704
+41948 25288 45401 10478 64369 26895 48708 9072 28144 51378 4788 42154
+22412 54619 17438 38774 5733 65286 20669 36716 57715 7724 30061 63472
+142 43410 18323 32224 55317 11428 48459 25457 38605 10365 56683 17668
+48265 33352 8942 57704 37049 1731 47766 21587 55494 6721 36866 50874
+20217 29920 57703 8997 40669 24668 60754 6419 39202 26341 63282 826
+41422 14248 59523 25431 48496 3367 28534 54258 16348 41130 23931 52498
+10584 39528 21244 62991 1379 33722 55847 7418 43663 26038 52029 14729
+40470 23518 53699 11578 46402 27715 16798 54872 37147 4237 56408 19451
+34031 44637 1716 59180 23018 33079 51346 3695 46583 22337 50644 14945
+37188 53960 12201 44247 27722 2724 54609 37718 19274 60053 7599 45137
+19889 56231 28367 6991 51157 36967 22220 53725 10924 47559 17939 29645
+63678 9177 42818 21198 49941 34876 4864 57813 38149 19059 49051 1501
+63503 23876 38748 6709 54041 16779 33453 62984 10258 46425 25990 40765
+16513 48680 29259 12383 36916 59865 20800 42044 6396 45666 24755 57571
+15140 41314 24632 56148 10152 33920 61623 475 43065 25656 54682 10843
+36491 47180 1993 60749 23093 41688 6531 64446 27378 105 58174 36452
+21139 59927 10611 37873 65182 1920 27618 58055 16892 33699 53828 13558
+42569 25879 64654 8487 38768 26736 56549 2943 44977 20902 53733 5992
+30307 41811 14609 57625 28244 7196 53968 33322 14259 49553 35435 18034
+47735 1467 54045 27934 7064 45846 36669 17003 59823 32036 7451 63059
+14350 28495 52982 16127 43552 22277 59451 72 32480 41661 23839 59830
+14113 41234 21314 54326 1203 31698 62246 8307 42561 21998 53420 17237
+29114 63150 898 40846 23255 60243 5155 39326 17352 50485 35608 3548
+61339 22070 32778 45974 8861 62513 25936 40799 9783 60562 26902 38620
+13660 46551 20764 53761 10101 32292 48131 2855 56623 32250 11060 50766
+25602 41456 12262 59852 20555 37727 49431 5341 35097 61656 17426 45936
+22403 55640 13733 38776 26546 54445 9958 29274 61239 2630 40476 21924
+48602 17176 35468 54890 6575 38961 26321 65445 3709 38047 54584 8715
+27454 47836 19759 60913 10551 32707 46018 17743 62336 36403 11214
+51065 18981 35702 62893 7877 28964 49940 3422 61933 27346 8494 58754
+37309 20538 43755 9536 52666 27475 3636 32958 62286 6474 52653 23948
+38698 813 56465 18533 36070 61783 13491 31808 58163 1563 48078 26523
+43543 14080 49598 28247 12186 52763 34679 16156 46855 23961 58813 5059
+40154 22267 45319 1961 62028 20530 30777 42933 4372 63802 27990 18291
+51916 31414 12111 58865 34656 16319 28732 62276 49 48267 17544 35854
+54217 2749 30518 51233 10871 44821 22244 49789 17941 33057 52601 9605
+39688 22100 60181 6922 33840 61959 2641 43847 23563 58186 15236 29286
+48658 11981 41191 23600 61726 9569 38611 21107 58617 325 36003 63670
+5330 34616 57572 8632 41751 23523 50193 12159 28767 57884 17652 39416
+11026 61788 20399 38691 12282 42427 25285 65296 7320 28963 58365 17682
+35492 63566 10116 29018 49466 13568 39695 25766 53394 2977 33713 44215
+16093 63068 4852 40185 26016 59571 3403 35831 45221 16794 55759 30762
+11682 64994 27437 15198 46127 30223 9635 53315 27002 42442 13564 60244
+25581 47603 928 39012 21213 58607 7503 34823 60592 3354 52283 22101
+40489 4561 56531 33131 16881 54022 37445 8733 31575 59737 3878 39647
+21683 52420 13297 30513 58231 6624 40280 22166 56538 16564 32151 44678
+13064 57062 30624 15831 48039 38333 9360 28746 46054 3825 53536 18306
+31673 50508 11781 46411 30126 5268 62730 24097 41057 274 47638 23016
+58574 15298 42683 32589 11792 59382 36897 22644 62110 8620 45645 35556
+19707 61222 12097 44617 22375 64914 5346 41536 24319 59157 16339 31973
+63605 12988 48698 29344 618 50666 35790 19418 55240 38305 4165 33179
+64808 7639 29571 48181 16756 63892 2548 39138 25874 55835 10161 35823
+49539 12108 41223 23788 55579 2419 33088 49676 11798 42454 25274 54129
+13754 46910 20943 30982 62343 9907 28733 53214 16378 42967 6634 53600
+24362 39341 1721 54635 21838 43321 6106 49823 23571 58736 972 39510
+26768 61820 13457 29110 42960 20298 53493 4292 62832 18813 31631 44164
+3458 64677 16256 40632 25025 51221 653 32210 42362 6481 50096 21013
+62309 4368 35824 47958 17178 55908 28106 11853 64520 38227 119 28688
+61634 18271 46449 12767 51792 28424 17430 57974 36458 5017 53488 26011
+43239 16431 55723 6179 40681 24345 59218 1370 44580 27473 15966 54036
+37990 21263 47242 14738 35542 54330 18419 48813 5183 32403 63668 16524
+36601 58149 12688 43961 23161 41157 11553 60705 20933 31331 47792 7610
+41514 24337 50674 11250 39334 22967 60103 9254 34291 62607 2236 44707
+22685 56520 6019 38166 50298 12858 30788 63104 15027 51664 26395 38945
+7139 59848 19212 50983 36083 15356 44575 5774 60838 26830 42948 3913
+54279 37907 13838 42048 24995 60152 7775 42659 22533 65330 16094 37232
+58130 7099 31138 61784 2373 44296 26464 55860 11678 30574 50107 17924
+45718 27764 9168 53609 36197 5329 51343 18806 32884 56747 2872 44356
+26848 54565 6710 31107 50517 13828 44264 29828 19968 47220 15751 60482
+32948 1138 64282 36914 7848 48864 26091 54734 6458 44496 26560 56235
+887 48994 20099 35791 45750 4286 51315 14304 41317 22495 57034 348
+32983 62686 9629 42876 23828 60444 11600 48731 20280 29497 56467 8906
+32313 49378 14305 58007 27372 835 51468 38155 7357 33103 59705 3094
+50400 36001 18373 56750 3909 45998 21279 40349 11220 56056 26943 51247
+13776 42763 29908 18457 44962 11588 63791 25310 46591 9742 28051 49178
+2601 62969 22207 47497 13685 43263 26727 64525 7602 47891 23879 44260
+15602 31466 63095 4171 46392 27197 8056 49576 36398 2821 60308 23527
+51877 18880 34561 56033 12694 41260 23999 61785 8076 40027 20997 58766
+35342 12545 50371 19776 61077 10298 33981 45408 4431 54325 18840 28823
+46144 1045 50459 16862 31002 55233 3906 47970 25978 39428 158 56730
+30848 13019 36616 52072 9305 45297 35717 4492 27237 57928 15412 42550
+23248 56939 9320 44648 24770 52315 11425 40222 24516 56461 12814 35274
+9599 50271 20550 44536 5348 62756 28123 17678 52615 33804 6592 64494
+26056 44447 9004 61584 21307 39001 7362 58526 34356 2547 51986 18783
+45961 37067 143 63959 21339 33759 59381 13771 48772 20167 34959 57209
+16033 31494 63279 11872 42398 24918 55278 8211 41280 22593 57741 7338
+45841 34225 14509 38073 47668 8772 57248 21358 33721 53135 10635 44606
+20908 56034 15076 63487 25272 40259 9324 44570 24210 58101 12768 32676
+42157 5250 50357 32256 9822 53345 20135 44422 30308 8223 59464 37483
+1686 32934 45294 15205 59998 22024 41205 382 65045 20766 35873 49982
+14178 30703 55135 9708 47700 36895 4716 60837 10384 32573 58061 2294
+44595 31318 12380 55989 25100 45196 454 54244 20884 29657 50034 2751
+57252 26068 39620 5078 53379 16491 59097 29017 3093 64521 33697 19865
+53036 4511 46297 30241 18555 53930 37298 10396 31452 64618 17439 27853
+53792 3227 35955 44109 9032 57709 21862 41571 13326 47652 28967 2808
+55204 25877 48808 11328 38793 20632 64912 9678 31600 52369 5064 47348
+19425 34042 55528 12872 31996 49262 4169 27209 53841 13478 40535 23598
+56978 5867 38761 20710 63548 1059 34719 58532 14911 42836 24339 64128
+14029 30616 59764 9970 39230 21930 65247 12423 33161 47108 17816 59589
+28105 7908 61844 36493 3239 52368 22198 45265 13385 30062 53088 19225
+42366 2812 34960 63799 18144 39208 13884 60264 31911 8451 57745 27246
+18645 61340 34731 6327 46415 24044 52314 14909 40350 21252 55607 6034
+38553 26963 54777 1284 35885 46840 12401 64431 23315 41401 7719 34559
+62533 18430 43933 24603 54784 12664 40038 22829 62289 10599 39053
+24133 64199 8240 30836 58181 18576 44331 6164 33055 54219 1671 61849
+26715 38879 5837 53768 18254 35779 59066 14098 44006 30136 11286 55213
+34975 1543 50863 16631 38592 20663 60119 2434 52786 35498 10253 50560
+19338 34373 65481 14042 54006 24409 39115 11333 45058 4818 63585 17032
+30970 57479 1192 33577 47647 17666 54488 2719 45745 25194 39740 6502
+52077 21431 29927 49207 14032 60163 33707 9563 65219 35335 20102 56828
+11278 40223 23180 63348 9392 36155 51398 15221 43721 25503 55644 3013
+28398 61865 18336 38347 52533 10197 34463 64682 5864 40701 21867 61030
+1357 34814 58249 20585 42957 3405 51699 28586 38301 13510 60722 33146
+16621 46848 37267 3107 59440 24583 47466 14044 39527 20003 51528 35154
+3951 57039 26539 43475 12691 65475 24148 41071 9350 56075 17556 30041
+50878 11535 41383 4383 30245 65087 10202 41506 2993 53079 24121 39153
+5081 51019 18743 36504 64975 2227 30190 49275 16928 61383 27181 1312
+59211 30157 15350 50563 28020 2462 62044 37354 7563 30872 47665 3151
+52438 19733 35329 59266 1036 29718 53586 8019 45468 24552 62663 15706
+40215 23118 60526 4073 34987 55733 14360 43098 22941 64150 9110 31024
+49031 11236 38714 26674 51284 12569 28561 60490 2871 43370 19435 33205
+63840 13425 30087 50786 18938 45766 27848 15542 64786 23751 40727 9050
+60963 19833 33825 40633 8251 65083 18256 34257 47854 9461 62794 19730
+34678 47023 10777 36740 44976 17782 55562 10041 40368 26148 58715
+15945 43117 6679 57004 21418 48665 1261 36699 45991 9942 60887 27126
+17342 54773 29835 829 65383 32471 8695 58282 37675 14021 63233 23298
+41817 1037 51254 25623 43567 17190 56680 27950 14511 63623 38260 1487
+28299 61414 9732 45402 37909 19086 29971 64313 8654 43115 25252 54620
+13755 41501 23279 51362 7247 28983 55707 3546 40877 22435 50316 583
+45313 26624 52991 5097 41618 20750 56164 2022 39277 24118 48124 14458
+55255 25446 40136 7015 59322 26359 39885 10105 62378 24575 48096 12666
+30353 51693 4982 45931 22692 52705 16237 36680 45084 1603 49228 29963
+19574 64819 38147 9119 31231 59747 2379 47153 25136 63325 8630 40668
+21411 60884 16609 28287 44759 2223 53912 20010 28977 48068 10766 57185
+4420 34046 46766 19915 52250 403 42122 26686 48697 14840 54268 35573
+2477 48434 22395 65428 15064 40040 23203 47755 12714 56903 20646 30418
+49966 772 41420 23328 61319 5172 40001 25784 63556 19082 32491 58553
+5768 45867 24647 39955 14480 61423 20618 28316 55573 912 43957 22680
+40956 6063 62251 26685 53448 20351 38642 8355 49585 26126 44329 19646
+64055 7087 38758 26877 59735 10837 33073 64371 15875 42316 2061 57653
+25130 39596 5814 44605 23309 52398 3126 43268 26678 58552 5531 45243
+28893 17738 59540 33086 6539 63976 19648 37602 50482 12465 30809 56186
+1879 46440 27868 17566 51472 32577 12667 49963 30416 18045 46195 8731
+61901 33471 18494 57563 30669 49226 802 27589 51563 8944 57208 22223
+43750 7821 34577 55161 449 60900 16199 30460 46428 10888 53599 19744
+33112 48584 6520 35014 60800 20356 47003 5841 34978 58104 22765 46482
+15128 52049 33633 19227 61580 13098 45900 34203 20912 59822 10307
+44505 27789 15903 56161 38309 6085 33048 51397 18004 37723 54265 5815
+46040 23833 41502 13480 56619 25583 43150 12266 55103 37891 10492
+31134 47135 17785 64874 14181 38848 21096 51711 2131 31307 56269 8728
+33299 49825 16541 45634 27846 6811 50794 34929 18658 55043 5585 61490
+23416 43738 4160 57234 34857 9012 48219 25422 56177 5658 45290 24303
+41446 685 59849 33529 7057 51770 37289 3535 53656 22914 43355 5832
+52121 15370 46774 25455 54718 6961 30550 43313 14226 55903 27947 1325
+63597 23980 49309 5642 42654 23769 60994 394 31367 50073 10821 39833
+26433 61730 11751 43835 24764 58635 15754 34792 50932 5562 37842 46087
+11962 50029 23071 42356 16092 51455 31294 6186 45911 18737 58521 33754
+8274 61749 37371 2646 32314 49614 7389 44153 24136 51540 16553 33288
+59069 12258 46877 387 51731 32952 17460 60006 3990 47070 31051 9881
+36423 60635 18615 46852 31169 10737 57125 35453 19369 62637 13529
+42475 24234 60551 8273 34846 45248 17152 63036 5706 43423 30469 11385
+65126 33896 18317 54047 2313 46830 30828 6160 55273 36765 20605 61092
+10709 34247 42602 3238 64385 27572 11936 55595 32889 15432 53352 3474
+27531 57659 12116 45906 23582 41633 15266 34086 47987 13349 52127
+31151 5222 38439 58491 15585 36109 61667 6015 42679 23234 40929 16196
+64693 28737 6611 58225 32497 18043 61514 5552 29303 43882 12367 60995
+26239 38933 7152 51734 26219 58286 3692 32919 45960 8491 64828 17360
+33944 55978 10801 32161 52942 17542 46674 7066 52194 14059 42455 26897
+55655 8726 49616 31816 4563 48717 38416 8995 32710 59348 12693 51377
+30870 17651 48308 1635 43395 27011 61175 15515 54229 3500 39750 24971
+52142 13740 43995 22531 56052 4189 48630 28906 19512 53574 34900 10605
+63598 21856 49696 15583 31870 62464 10486 38835 20900 49820 11854
+32113 54261 2435 47616 23210 40599 10259 45757 24315 60212 7246 41635
+21753 62554 11919 36400 58873 3645 43188 23542 63346 5504 36826 54318
+15079 27410 47477 6352 58658 11626 36253 63117 21055 41397 15291 32399
+64942 12287 50977 29676 18033 44990 36777 5989 64053 23782 39549 1537
+59563 16909 30275 51604 2845 39976 26261 55023 14383 42054 1411 60435
+25509 39159 6277 44257 24915 55532 371 49333 16408 30920 47656 4622
+60676 35053 11462 48110 23463 63402 9135 43894 28024 13883 65504 36818
+9710 59687 22174 45499 5096 35340 64116 16509 27828 60621 5675 41839
+25119 49375 3872 33102 57405 15145 46211 23676 41350 13544 63986 27314
+1135 57782 38396 21377 62228 3101 45602 25967 40375 13792 52927 19282
+31958 46431 15394 64498 22788 40364 11119 34842 61589 18203 53524
+12622 39366 22251 57721 17031 47018 28585 13226 62507 30658 18890
+58582 35946 1997 42351 21685 60454 36736 4044 51218 20615 33877 53057
+12173 40305 18511 57247 31795 8658 51352 36835 14604 65010 22073 46890
+2889 33032 51791 18398 41074 4015 55226 29855 13815 62792 27896 18359
+57128 35424 6541 61500 28331 3567 55923 36449 22210 49920 11761 28998
+53278 14953 44558 23162 57546 11554 35621 60593 13494 29914 54125 3273
+42257 27739 20287 62733 35570 7591 50231 26114 39421 14599 64798 25730
+48900 1759 39802 13366 63386 23555 41749 7735 49690 31653 3956 54789
+37677 16051 30727 57726 10102 52024 28330 18996 58867 37628 664 50483
+23864 45543 14357 35760 58050 16915 43152 22835 58814 103 29672 47428
+18393 56766 30930 13608 50742 37774 5274 60545 21340 36078 44181 8147
+49971 35158 19868 61596 7458 54293 29579 3676 65494 36561 19278 55207
+27076 8314 49854 31410 13541 52010 26925 60185 1591 31939 50018 14108
+43467 23438 49304 9722 35101 55081 19325 47699 32281 4599 53643 18263
+46698 35289 10725 43374 21169 60298 14766 40822 25015 51554 6884 39589
+24424 57833 2757 38547 21008 40961 26367 60999 218 38910 21853 65036
+17852 37379 57372 11752 27075 62799 17848 45663 27754 3936 55844 37254
+11918 59021 21095 39311 5521 47022 19194 34397 59399 8899 31270 62384
+612 40373 18753 34958 44618 12746 60647 4870 41211 26530 48012 766
+29522 57390 6944 42436 24066 54891 1539 34754 64591 16035 42634 24537
+60952 14058 34126 58152 883 49047 17120 39267 26703 44997 4936 53541
+28357 16774 37831 54751 10906 29513 48993 19763 41997 2066 65242 37468
+21123 33955 52487 17153 46022 5726 30711 54768 1979 48247 25662 38917
+4474 60090 24525 53058 10052 31749 49388 14610 54908 25142 41960 7659
+63496 24860 48206 8664 32852 63041 18585 29447 53872 9534 45532 21818
+59123 11394 38580 26993 64016 9472 41490 23425 52248 17401 29188 54936
+823 41711 19445 35440 56994 3284 49256 32823 19876 51963 267 32796
+54062 17925 29223 47247 1811 50695 19207 34984 56244 9624 30482 61893
+19183 42806 7003 60958 28489 4862 47760 37019 17557 51591 29378 12016
+48586 19239 30706 59718 9934 32785 47925 949 62618 28936 7250 36229
+51589 1737 57772 16912 29619 42567 3161 47226 26281 64285 4503 44112
+30509 7987 56473 36827 1131 50373 38483 11039 28665 63225 17485 49293
+11814 28723 46459 17483 62111 6666 41862 25506 59837 2392 39072 22168
+61896 16985 45574 28479 6392 56139 35024 16221 59298 29598 9374 64210
+35519 22127 49469 7809 33559 48334 2390 43184 24063 53408 12855 33998
+47216 17855 64347 8010 32763 59663 2042 39718 21506 62649 6079 30344
+51046 18459 41788 5251 57047 22108 36283 49032 9181 55686 15508 40712
+23339 56346 2288 45771 21310 54163 6360 32955 59357 19314 45921 32767
+4467 54166 28191 17752 61446 38300 11086 28270 64473 1313 45987 23517
+39715 4266 48748 32310 13171 54586 20748 41286 5137 62668 28301 9508
+51515 33365 11747 37966 50206 15426 63033 6665 41296 24151 45668 8781
+58180 18342 29161 48466 10226 63919 30632 17498 54996 1053 33196 44919
+12612 50912 25600 39541 11312 59204 52 37329 45109 20276 63839 3231
+38872 16673 45821 22186 56489 11433 35966 63165 2949 30362 59324 16866
+42852 1378 63636 23772 40319 14428 59118 30036 88 62849 24892 48263
+6362 34707 54552 2068 43457 22281 62202 14484 42238 26556 60023 7902
+50575 16071 30644 54205 12471 47089 29752 3176 51822 16021 43400 33945
+1773 53522 37275 15201 63941 32137 7002 50728 24054 42665 14223 64886
+25277 50356 11621 40978 21459 55755 14403 46839 26188 51195 7660 57239
+27973 18090 52491 36517 12023 61603 19045 36211 50709 14621 33110
+60425 13250 47125 28511 7435 51650 35850 4408 53069 29578 8661 42456
+22501 55451 33710 11114 61355 20328 48980 9533 33330 64122 326 44118
+22399 60247 6103 34144 56774 16437 28182 50555 7383 27142 3540 56272
+37455 19957 61761 13866 42282 22799 58565 9577 41322 20554 47170 12836
+37671 62117 3374 28687 45320 12171 56754 21282 38867 12943 58300 22348
+44611 4068 37852 48125 13368 32939 64614 3270 42046 23620 56434 5932
+39762 21301 58239 2495 35836 63023 12867 43411 24110 61132 7471 30879
+46641 16655 27259 60412 10497 41809 26194 62532 8564 36648 57630 14302
+40819 24109 59043 11537 40022 23306 52636 521 39166 26343 55325 11302
+33986 50031 18927 58997 7322 34774 63315 4424 37319 53137 7678 42887
+24098 54629 12043 39743 17337 56971 21264 40861 10665 48886 31961
+22145 60214 9404 52128 23179 38588 11701 55126 19547 35345 60643 14854
+48651 27232 17985 55473 32769 4885 36990 53039 8038 44953 34119 190
+56845 21579 36532 49845 13978 30752 55185 11680 46558 33594 4216 54659
+37619 12761 42900 24496 53014 5375 47825 21079 39174 597 53883 19093
+37683 57577 14642 27351 64834 7378 40457 21789 60331 261 39126 26527
+51760 16353 42280 24269 55521 10638 48893 26143 40471 634 64002 21081
+46497 33704 8108 65115 18883 30590 45737 4815 59667 29648 10026 62458
+36498 12842 41840 24654 51949 8401 28110 55300 16046 42404 12082 58792
+34820 2459 51917 21125 47711 14946 33087 50283 12280 57129 29464 15721
+63371 36284 8749 60000 25049 48218 12524 36558 55022 3506 27240 64685
+8219 44145 28608 20161 53369 34980 2422 61684 21907 34201 54660 613
+42848 24420 40325 5598 58943 26076 40057 15807 62596 22425 42367 5962
+53010 23146 46221 16768 27824 57111 12069 33922 47612 20963 58847 6892
+40441 25884 50989 8601 40016 21830 53471 7842 38903 26522 52731 12950
+33547 56644 5736 42727 20451 52553 34021 12962 38394 57485 17998 28022
+64095 9987 31263 47578 4506 55641 12425 34140 45063 22176 63739 4930
+34664 41649 8477 59478 21049 36310 61932 9412 27527 58017 20358 47419
+10402 28473 44249 18721 60606 36025 368 56217 31298 7673 36823 54833
+2454 45176 25365 38956 5138 65345 17009 32326 41833 1791 63135 30948
+8479 45210 24299 54492 6307 39590 26131 52867 3759 40433 21619 55869
+16773 40061 22413 63077 11455 36727 50065 16657 65438 6226 29562 48050
+2247 40842 23896 57352 15705 40755 25289 56378 13222 39902 26123 52226
+8893 36015 61287 13861 44886 18000 64374 29334 10661 46810 26202 52837
+8061 33784 46116 17030 63728 32940 1157 57801 22288 48136 15954 36050
+60317 5099 42847 26026 53658 539 31720 51004 14978 28130 59699 7398
+52843 27627 19376 50527 36131 8540 47727 26393 54089 13644 31830 50685
+8897 45585 27593 4365 51636 37674 20364 58534 11972 36390 53621 5503
+47592 30414 15489 44545 21668 53123 6676 31557 62894 4008 45280 33495
+7192 65173 18311 48252 34421 12904 45311 21645 64350 2012 43642 30500
+22202 54581 14111 45014 27503 17056 57262 34185 2661 65326 22291 33941
+52541 4587 43247 25373 63373 15797 44465 5902 49706 35876 19637 62979
+7295 41954 26779 50624 2082 45883 28263 10575 36053 65253 8957 45878
+25195 59063 14490 30425 64132 19306 43568 12740 53566 27762 3386 65468
+38139 8152 29108 50974 20101 63918 15285 27608 49555 1707 63202 22544
+40151 13654 60207 26551 43025 10595 62050 30230 4779 50778 38279 16574
+33242 52174 10415 46441 24589 54882 12547 40578 4323 63070 35363 7505
+46147 31756 15652 58919 36577 10288 54924 28405 15637 50586 38152 1667
+53538 24681 42875 13378 37753 53027 18015 27851 49551 3656 61677 20240
+37725 47855 80 65416 29997 21593 48910 9070 43429 25487 60128 6313
+41531 22264 62022 2989 38883 24733 45055 5880 53401 22863 40313 1842
+43350 26378 58510 15470 46373 31439 19280 56067 36545 4201 60107 13970
+46937 25337 40728 11244 50273 17180 31023 62390 13901 50905 22950
+45569 10880 52628 29889 3072 55485 35212 16284 60219 30854 8744 63005
+37937 4000 51371 29573 9652 53015 35373 18367 61927 4283 32959 55472
+13280 46724 34547 19997 62156 3790 40862 23204 50512 10395 29185 64605
+16575 40935 7392 61384 28762 3156 49209 37224 15584 52469 38444 16645
+28951 49609 20237 61595 1430 31401 43226 19341 56963 13347 44291 24823
+50522 5866 45720 17081 30867 49273 7486 35524 58848 2877 52060 33443
+13657 27352 49441 10351 45227 22549 62912 15229 29272 60173 8669 51691
+20006 34337 46255 11758 54569 23168 47509 16039 35756 59567 3283 41950
+22018 65026 12537 44142 23730 62008 8325 32692 59163 413 45890 30364
+19147 58785 3247 44007 28171 18583 54213 36619 14285 62278 31268 4215
+50045 36314 7433 51567 31703 3084 62642 17725 46989 29932 1237 48887
+37853 32028 50788 6941 35635 60380 192 39424 21740 55921 4904 29667
+50683 14806 44754 25846 40737 7485 54487 18411 30506 40374 11345 65195
+18064 36073 46078 9016 62055 34330 17260 46421 36707 1022 56768 14507
+31346 62572 18147 40774 1646 61479 27830 17693 38112 57292 14959 33366
+64800 10893 29031 48374 1431 42904 24128 64403 13108 35020 58828 2180
+49533 25228 42470 12513 48178 21606 54806 15460 40664 25696 56662 3520
+29872 60007 6261 51810 27743 16908 37940 58244 10416 46454 33669 301
+62056 38110 9422 51319 24948 41038 14159 48686 8678 59606 23199 38532
+2260 55594 33923 17481 28142 56854 67 44379 24533 58645 12899 34211
+62140 17597 38307 56236 5485 42609 22613 53815 2590 39448 21906 50216
+4399 38813 25925 60759 9838 31920 51835 14728 45360 24436 60354 862
+42461 31286 7712 57881 38048 17658 32843 47191 8090 55774 32532 3726
+51374 24365 45754 13484 41453 22490 61042 1786 28596 58350 19562 42252
+5387 34741 59359 19443 49353 28558 13882 58072 23503 48254 2923 28594
+52070 19605 44015 4498 61665 27364 14074 57989 35204 6566 63089 22254
+48022 852 32872 57363 8803 35507 44316 11638 58305 27128 16639 36654
+45259 5455 57219 31224 17440 53260 37210 11886 30670 55156 18216 43587
+9459 58398 19428 49069 30276 10769 64110 33512 20418 49881 7838 37493
+61963 994 41993 12147 51236 31392 17687 38311 54371 9528 29715 65351
+5092 44579 25786 39591 2697 57414 37190 7238 32588 64613 21034 43983
+14117 50212 28114 1829 48111 33932 20945 54397 14174 41790 24012 64888
+1099 43866 26421 49444 15165 41753 23225 65233 580 29361 56170 16272
+43149 8746 60395 36116 19943 49160 1965 32097 55943 21673 44273 11997
+54201 32251 8001 56490 27390 533 59390 37640 8662 32892 46567 18019
+58018 10018 48619 23239 39342 2170 64309 32741 18674 56661 37539 673
+63228 23774 45187 16153 40399 21595 64497 5734 37152 58001 16830 32545
+52519 4565 43297 35157 20867 47228 13292 58866 27761 3444 61019 37662
+6996 29577 55622 13118 48564 27505 16630 51951 35489 1968 55588 30874
+14937 48718 27301 12233 52287 37183 7970 47771 26249 55125 13285 34761
+49640 9186 57728 24785 41783 10650 53756 20894 28877 64996 14813 45837
+20734 36811 42849 10088 59871 23853 55399 12399 44515 22345 56558
+15655 41644 25593 58078 11134 41066 24827 62677 8791 35475 56877 4258
+30688 64308 21066 43775 2263 58740 24309 47200 6766 28880 53063 19970
+40769 4824 55553 27281 11966 60924 37786 21326 43110 5159 52410 24962
+46159 11816 33391 59434 5400 41804 22476 49878 2791 37093 55447 15381
+31292 52740 18572 40663 4731 55157 22820 40343 17719 63823 5900 39268
+26406 60220 1113 32182 52133 8635 43907 22606 50536 16194 35731 42290
+9215 61409 29518 3771 53551 20085 27138 49026 14819 28631 59220 19414
+46861 5773 61180 30035 20130 44992 10322 54068 26840 45808 13313 64952
+37541 11218 51747 21103 39176 6499 48472 29602 4011 52446 27060 15930
+33220 61223 12433 41354 26811 62880 10847 32737 57843 17963 47877 6136
+42606 36064 20452 58994 6910 40898 18683 35253 56810 13848 44811 21870
+50361 5761 61498 28109 19540 43972 11895 58547 36359 17500 63669 6907
+31324 55411 15365 47725 36659 8845 45590 25525 63923 14444 30965 43376
+1318 55833 33850 6583 43366 18857 62368 33158 12320 59844 22811 32900
+41445 8823 49779 31105 20238 44899 16142 54794 35177 11868 43570 24022
+64559 16095 28507 51599 4884 32071 50282 10468 60901 23064 40936 12878
+63781 1109 44925 23181 51020 4819 34695 64904 21321 41053 265 33657
+54447 17680 44292 4070 55867 13959 30675 52213 16248 28252 57075 20813
+44625 6966 63244 27481 1445 57961 35638 21100 51846 13199 56323 20283
+47522 11785 28513 59959 17223 40949 4618 57162 31433 9178 55951 37094
+18042 61399 5453 43579 25334 59799 10536 39585 21575 57647 8127 31876
+60550 10078 47499 18667 35297 51978 10873 46151 22300 30006 47311 5936
+57275 27730 16050 52068 36775 4968 60005 26018 39434 13786 63210 18967
+34487 46120 11014 51925 22576 65144 3970 39453 26648 52294 5561 35708
+58750 15837 28549 52682 10557 42520 21754 53296 13146 32307 59931 4238
+29449 47965 9688 55123 23993 40294 2197 61289 19415 28037 48836 11304
+57561 1071 41176 21988 31736 52296 10328 41375 21527 63887 81 34739
+43634 8971 62291 29856 10826 46762 18754 38466 58122 4892 34602 64316
+16367 42993 23532 60502 5098 40289 21769 62892 1394 31591 46080 5601
+34026 59590 18608 45342 986 33984 49424 11235 57885 27496 4513 52797
+34713 19975 40969 2686 49850 13113 33363 62392 6016 48364 18096 34961
+53677 2816 28360 49320 17761 42183 23533 50196 13054 37439 51897 10442
+32601 55402 15194 37117 61108 1822 43690 23558 64106 15259 32899 51230
+3670 29331 48817 8953 57938 32052 16457 65367 37846 7924 47202 24735
+53491 13269 32441 56688 9863 42451 22305 59039 6985 35689 62178 14618
+45640 32875 10156 52663 37057 20302 56335 13216 29348 47667 17955
+62092 36883 13635 30933 63628 1499 46506 23852 54060 15004 33679 50598
+13147 38340 64748 8297 35085 55001 3935 43821 31418 15859 38292 50816
+748 33375 62437 20907 39192 7876 53220 30728 3665 58330 25400 42148
+15200 54114 19329 64624 37311 11504 38478 57460 610 44136 23507 55669
+6367 38906 21037 52078 1068 38581 26764 54818 15464 62407 2040 29625
+44526 22591 54124 10172 46931 28018 3066 62943 36928 15038 31998 48553
+2604 54282 29940 20387 49215 1136 33910 52416 19826 40014 5135 62364
+30617 18905 52716 2832 36295 53948 10035 48092 27322 16659 65515 37464
+22236 53378 8536 37286 50053 1094 43144 16146 57228 28802 3026 63743
+36628 10496 59215 4296 28380 51984 19913 46954 2837 37299 56010 13830
+34650 63164 19555 39824 2114 54050 34482 18609 49577 29572 10263 60471
+37882 16397 28028 51803 12975 46975 25565 61648 6873 39199 26814 60661
+18892 35396 45521 6388 65018 34712 2957 40421 22710 52766 14291 37365
+49243 18266 45864 7514 41835 31621 3793 60977 34501 22628 49638 1324
+35323 52233 20472 42656 12203 63453 26025 41693 7827 49515 19557 36942
+50594 2442 31179 55488 13217 41282 25211 53816 2740 39324 26205 57294
+5417 38818 26192 54667 2329 64273 18394 35222 43706 9620 62400 30139
+14686 48020 22777 43014 1743 51291 24152 41963 5929 60748 25545 40581
+12931 44702 23910 56314 15260 29910 62597 11379 40238 26141 49286 3560
+31356 57786 7802 39345 26905 50856 11359 36739 56128 17309 32154 43526
+12976 53173 22834 46329 9252 35990 64740 17814 34013 50026 15909 62547
+5906 44306 24553 58075 14308 28361 47029 18227 58648 33052 5085 49224
+21102 60883 37065 8701 28001 50820 19737 40260 2593 54470 30995 14646
+35918 53310 10905 43192 24193 48224 15261 63916 21354 39657 9880 55192
+26479 60715 6828 41808 19134 33372 63311 15188 46387 7611 61509 25754
+29604 53932 4084 45361 20944 30207 65394 9882 43831 19768 59206 37069
+11529 61962 745 34095 58025 8208 27684 62974 18958 41597 5764 49606
+27808 17741 57410 34729 10278 38389 54310 20223 45580 12959 63545
+24423 39738 13829 50314 3081 28045 55458 19756 42397 178 62708 27771
+17164 38143 63701 3767 28065 49095 16805 29202 51045 697 27307 60961
+7730 29496 46625 2738 35802 58712 7345 43334 27644 4311 57045 38441
+10360 28248 59397 17981 41000 5023 62775 22509 44868 2300 29959 57661
+18774 42174 13132 51900 23290 63501 7429 27803 56340 16958 41965 5182
+57595 25829 43393 14395 36450 46857 8692 61664 28393 2458 46139 32252
+7414 59365 27716 18833 51129 31843 9917 45699 25378 60019 14177 43113
+24524 64462 7537 46627 21070 34570 50492 11305 58227 36847 4672 64813
+17760 32704 52332 11326 41805 25190 59388 8939 40926 16343 65217 37553
+9909 60527 24998 43902 11153 54689 24712 43225 12196 58895 23319 46941
+16814 29632 61650 4584 35916 51955 11378 45308 3701 31468 56336 14996
+28328 64430 9982 36983 46820 18562 51241 12231 41212 25687 49044 17200
+37154 62252 6732 31534 59977 10773 42554 23504 48721 7921 29420 59019
+14684 47409 28219 6612 56616 35905 20406 46178 7587 56044 32944 3397
+58696 37562 9830 45462 23197 56602 12819 42445 2224 52833 21294 27612
+47678 11336 58631 25762 43186 8846 61527 30512 4435 58864 33107 22231
+63613 14154 48165 19541 44286 9657 55778 17825 30143 61887 6315 48400
+24739 39004 528 53849 20700 34867 64470 11435 27610 58415 15329 34445
+45811 4994 50218 17136 33684 64004 12164 43312 23873 59856 9093 41878
+20415 32736 50239 12392 58418 27062 849 51350 38066 7748 65328 19321
+34947 58704 11424 47896 33407 17389 55048 2371 36342 59900 7172 33534
+49976 1035 42494 21269 54463 6560 33821 59758 15003 44563 24408 65371
+1895 41555 22599 61570 6793 45824 27337 876 63657 36432 6266 59160
+26467 41770 3080 55363 29156 8082 39993 26719 53255 17233 35263 49593
+4025 31519 53901 11519 41567 23520 56125 14368 34073 42983 1171 56527
+32492 11784 59940 24941 44640 9543 63499 25722 40905 6782 61167 17497
+34341 56005 8160 30184 51208 3581 44577 23495 38942 16211 47599 24734
+54234 1847 43222 31449 18205 55780 38162 11186 35472 19221 59503 10562
+37073 53136 1471 40225 23461 55212 5334 30436 45252 16074 53098 29266
+19570 48016 36922 3218 46342 23749 59352 13256 32434 51501 7837 46893
+27431 2606 58906 30732 7498 35133 44174 671 56653 34041 18999 52849
+36667 10706 60622 30150 15472 48761 36595 7264 52468 19740 46805 33737
+9304 57536 37766 12528 54235 33885 18008 38001 50322 10775 64697 27203
+16593 53257 37415 20345 47172 14741 51435 21156 35165 45117 8445 54851
+25085 39310 12306 56221 26012 50223 6445 39292 25727 60636 1386 32637
+45503 18315 49101 30671 11189 60028 35008 19004 50058 1520 63753 20341
+29988 51228 12700 34905 55711 16289 49552 24072 43290 13092 54550 4575
+36201 63890 16725 50015 3152 34573 53252 11783 41367 17358 30296 57242
+3723 45573 27672 15973 30889 51475 20853 43720 6546 60876 22650 49167
+1 30350 55206 21051 47425 4715 28422 46097 18875 56630 3972 38678
+22006 64544 525 41590 32002 8064 56887 37308 11032 43020 21557 58502
+15054 30101 49684 20054 60735 7017 35827 44437 19408 53958 27070 4951
+61204 35076 21514 54407 309 30120 56041 9447 40797 22790 49919 16590
+29874 55373 1256 35720 57613 18841 44913 4192 41873 23642 61341 15638
+43033 2532 64324 25641 41307 14224 49875 27468 17298 63154 32228 4646
+51104 28887 16809 63520 31128 9287 59802 37140 17052 50927 5727 33700
+53980 16122 46483 27099 9867 50481 37245 229 53947 26644 39121 5946
+64756 24334 45525 10735 39850 23272 57631 12852 33860 59317 15543
+46891 28886 3785 53337 37679 7388 47964 18664 62679 22163 30341 56188
+6483 40382 21771 51138 1222 32117 52872 13692 63013 27183 4048 45673
+37035 10220 54538 31320 17573 45642 24473 55772 3350 29278 45296 5324
+63813 21166 30433 50523 14269 45807 29255 18325 64656 35349 13547
+47704 25204 62013 10940 41139 22630 55171 9056 38585 20743 53984 12518
+32998 48702 15634 58403 34680 19751 49538 29955 13446 51336 21448
+45378 11036 36724 59908 20487 42487 1575 64343 9861 39307 22363 59376
+7700 35848 64849 2684 30609 51562 9673 62789 27198 17427 49074 36618
+4509 52952 17106 32857 48037 714 57334 20714 29961 50862 2921 40544
+25456 58292 15890 34891 61717 12600 52399 4753 35919 64279 13460 29094
+59138 9828 47403 27329 600 64652 51590 6484 44082 24068 49625 16017
+29047 60582 13141 34453 47747 9532 61198 24131 40725 6981 65033 13968
+50903 28710 15770 53457 36821 47 62466 23190 42778 16406 64868 37351
+13807 49188 22001 61835 18346 47886 10036 29058 63131 5580 47698 22819
+40509 4022 57781 31945 12598 61758 24137 43735 1908 60226 23417 40363
+5060 64169 25850 42178 3402 55982 23062 43346 15017 33952 48164 23
+63017 29878 7772 58079 33150 2870 65399 19014 28986 46983 635 58730
+34512 8041 48010 17865 32431 56879 11228 40704 21718 53215 9073 35639
+65140 3070 43508 23760 52850 6868 31267 48260 17339 40734 4741 59555
+25712 39707 6792 62932 31234 1267 37015 60807 17829 29461 48503 8283
+42337 28362 18579 58440 31124 5285 61554 26300 49137 12910 32145 63648
+8253 38354 60010 1385 47289 24511 39409 12977 33793 57645 18656 40237
+10860 33294 59806 15222 35420 51913 12719 41981 25733 53113 9633 33651
+50081 14736 60820 24678 40211 2178 55173 25396 50269 6268 33586 63557
+120 40577 26037 47646 14140 51775 2502 30783 58278 16566 45184 30771
+6354 38275 65256 15969 44616 23696 58724 2384 33054 63973 8555 39950
+21192 51388 6206 30442 65085 17050 37555 51823 9152 32200 54451 21541
+39440 10508 52551 34079 914 57494 36932 8676 49311 19426 36302 55285
+8312 34614 47033 19993 53736 488 45026 30070 19491 63886 27741 2000
+38324 60617 19261 29439 56934 11657 42638 21368 58233 15442 35860
+53030 2242 32501 54544 16619 47077 4173 29440 44766 6796 62234 18885
+32392 45976 14769 60919 24975 39974 308 51858 12795 43674 25708 58913
+9499 34843 61477 15965 44126 28100 6876 38321 49498 17637 59184 27667
+13725 61742 35616 5599 49547 27919 13413 53823 37680 15950 32309 48769
+9931 61449 27285 4321 53995 38323 7825 27937 55358 3324 45068 19724
+30428 52234 36 43044 25561 60732 5069 43899 26668 63035 2644 29415
+41810 10849 54764 3689 37179 57156 7819 32053 61806 18351 48282 5271
+30949 56632 15425 44787 26948 55440 12134 41077 26493 50472 15595
+45352 27284 19205 47512 37743 6411 44911 13468 65291 21458 28237 57887
+11415 43878 18607 34702 54631 13192 42774 22763 65129 10247 29015
+48995 28 42642 22617 29867 57071 11097 39851 21801 50711 5648 35248
+53516 14590 42607 22761 37788 17201 31559 63444 8162 35587 56439 3933
+46143 27511 17472 50845 31950 1886 55665 35459 21371 43700 5168 57582
+38452 10862 30595 54783 19454 40392 4666 50494 29830 9816 53719 25595
+42995 4875 39168 26581 58666 15252 42976 31376 9241 55076 34259 19310
+49537 25315 56167 6211 40732 18702 30492 54610 10754 49913 30429 14065
+46933 20501 58348 9138 36953 61473 5645 27646 54652 12041 44444 23602
+41231 12888 55308 22960 49316 6480 36177 61152 15527 43064 27728 19976
+64253 37047 2541 46289 24753 63024 4769 28915 58394 14534 40430 21669
+54746 11849 38726 26976 62732 9105 33191 56572 22083 42669 10962 54969
+22882 41264 14323 52793 21380 45507 9418 58020 33963 20014 62653 1682
+49116 36235 11172 46039 21447 54517 377 35976 43688 19022 53941 27116
+11995 34551 52908 9887 62563 26507 43260 3529 51996 25779 64080 5927
+43896 25597 57339 1485 32189 63411 7568 30110 59987 18636 44497 28700
+5744 48118 18186 65055 31845 12663 38306 46732 16059 54208 23630 43638
+9011 57051 22577 33606 63295 11165 38320 49274 9144 27588 57558 13530
+47457 27499 7197 34466 51707 12497 45245 22081 53762 13264 43842 25686
+56348 11006 33647 48346 431 27256 62758 18795 46905 4973 59441 30625
+17869 62256 23362 42425 12346 46012 24273 59247 1599 41222 22513 61028
+5979 41128 28474 14827 57474 38470 10658 34646 47498 14619 55294 31861
+5239 48758 17264 35859 62723 3559 30491 51007 8943 41075 20182 59868
+28472 8410 64195 37091 21528 56844 13929 41426 23038 54875 2084 35483
+44236 8804 57365 31594 19967 63688 36381 4370 49254 19770 29389 46321
+3455 56778 34357 19051 60627 30053 8248 36055 52773 2683 44298 22449
+57124 16952 32743 62740 8596 44560 22943 56806 321 42991 19773 35695
+57889 16240 43401 22097 59093 14602 32856 63486 9442 39217 17022 56752
+33432 13485 48755 36039 19089 57033 9845 35764 52844 18486 44780 23352
+65081 15048 40854 24665 52320 254 40644 23903 63272 12698 39539 24812
+52930 5748 38515 20832 61884 950 34153 57677 7211 31708 52777 3654
+60195 27902 18363 51842 35739 2183 49495 38189 6174 62383 24324 48853
+4106 28853 56931 7130 36515 51746 18478 33233 62780 8956 53165 17504
+33380 48058 2469 61066 24354 41080 16835 62977 30840 3734 58765 12958
+54393 2228 43006 24797 51012 15193 41015 21228 64063 6162 36316 58397
+15730 28703 48593 11965 60069 27517 17923 32861 63859 4021 45587 28208
+12729 56812 36335 17900 61385 1396 33248 55861 12625 49740 20802 41247
+2125 57147 23631 44438 16380 64235 1199 41643 11386 32735 48036 15781
+65245 36489 5576 42421 19484 62305 36923 1468 52484 31758 22085 45778
+13977 51684 31555 19926 60496 35801 5248 58949 26147 46252 10203 40878
+25793 52075 11659 32405 55263 5318 48590 12773 41434 23042 54203 9972
+35192 51597 17800 46824 32065 6617 61252 26376 45797 1974 55648 20589
+43867 16067 47455 516 64222 26772 38517 4137 48579 24964 65423 3022
+39085 26531 51685 5604 40008 25578 52724 14797 43941 25061 65156 7209
+41958 24916 59651 13854 47551 4921 37053 58030 19742 42704 31340 5593
+54757 17972 47765 35566 12602 41756 23835 55632 10037 39679 22230
+50431 16688 47080 37505 2933 55749 12448 36584 57243 21706 43737 7615
+52353 27678 3292 62029 28773 8059 36933 59763 17942 39522 5332 45539
+19945 52817 27200 1392 61905 37771 20266 52405 3870 37532 62861 15047
+39934 26287 60653 5151 38536 27015 61981 3339 41274 22415 60238 14388
+37002 54819 8414 43636 23739 40269 15179 55267 7165 35646 50304 3977
+29883 65499 14571 39868 26177 56850 10879 33582 48856 17527 64553
+36257 4537 27055 61871 7405 51970 22460 40264 12101 65196 26348 41141
+8262 49929 23231 43747 14794 62102 25845 46238 5058 35374 50672 18444
+43860 978 51303 30649 10314 48576 25045 65434 12256 28787 48301 16818
+51092 5993 45205 27817 16318 55826 38267 10502 65043 24569 41984 14239
+47558 181 50748 22588 40950 16350 64744 30862 9279 37113 51849 1263
+41147 25377 60189 6339 39018 25369 64228 12411 28132 46485 9164 52496
+30951 1349 49781 37989 22958 53517 5386 45530 26135 64434 3806 29989
+55667 7072 46181 24327 40717 14139 60256 5314 38570 26853 49141 8936
+60899 19300 35714 54909 7336 32689 51274 2550 46337 20079 60446 13556
+43886 25483 51078 11138 41822 22723 63378 12884 35629 42563 11003
+57201 32981 16104 61443 27057 10033 52633 32321 15516 36696 60294
+11837 42126 23987 46046 2316 58088 13453 39758 25016 45490 6402 59383
+21306 44200 12839 32054 56119 8892 44008 20008 49453 28428 62239 18170
+47078 33979 11888 61434 36708 359 48073 24838 54830 10436 40352 23003
+63159 7561 34103 42577 1061 55941 37709 10022 52114 20408 31949 60353
+7205 48432 24821 41460 14841 46280 22671 59547 5903 31707 65102 14419
+37368 51767 6552 30690 46854 17885 59789 26335 44852 3170 52969 29323
+12853 49021 24706 55520 7844 28663 43998 18541 59291 4455 36062 64983
+10336 41696 2376 46504 17721 50545 21024 39274 1659 63875 34912 19891
+59497 3586 40523 22284 62399 16961 33358 57842 7283 29597 61740 15724
+43856 27404 165 57277 37241 13380 41623 17784 53475 25313 39552 5323
+58228 27027 38742 12420 50833 20788 59701 10181 44278 33394 18338
+56372 11887 44073 22402 61379 12824 32429 59223 3591 39846 19407 32590
+56868 10153 39175 23034 63026 16979 29492 49459 2827 64596 14535 40122
+25349 58929 8623 30224 61371 2201 48996 20019 36416 62655 4382 27946
+59170 9314 29106 45197 16073 51740 27228 1231 62752 30265 17177 35068
+59231 13766 45984 34429 19324 52306 1866 31936 64648 21522 49528 12631
+34700 59412 17315 43845 28286 10387 35446 55339 17722 30812 46553 888
+56884 19720 42670 11917 46981 20627 51926 15582 30858 45664 6776 50229
+28217 17348 58511 35360 1817 51387 25504 43298 16897 61191 21999 47359
+8961 33772 54382 5208 44419 21152 52395 2852 30138 46016 12106 54305
+38186 17428 32560 44111 3352 59332 23854 44810 789 57624 19852 33021
+60432 11375 39308 1526 52515 16930 30339 57870 10054 39287 25676 63071
+16031 37441 58955 4717 40779 18261 34054 60060 3172 38950 25454 58539
+10075 35502 61838 1772 33210 48416 17837 54176 5588 38998 26519 63278
+11746 31399 55222 4901 41971 23844 58126 15101 43282 21814 55341 12656
+34364 50872 18069 44012 7646 53515 32742 2693 62895 37116 19201 60275
+28231 11968 43763 18113 61272 21207 40351 10145 50320 23451 42188
+15944 62449 33239 1119 54197 22437 45516 17858 57416 2072 42684 30551
+11249 46532 25375 59511 14474 38997 26788 55922 8930 32803 40573 3229
+64155 18966 36475 56202 4785 28267 48049 19815 55383 310 29489 50403
+7841 45510 38375 18109 29104 64550 1503 40646 19474 50379 30388 7915
+63565 37959 19920 30991 55643 3814 50455 26692 38672 10150 64841 26172
+51512 838 39260 25181 57978 5843 34830 10207 51930 29092 4543 55404
+20053 27818 57910 9108 44700 19032 33157 52100 2662 45101 26296 54537
+14712 47354 28460 16880 61917 25647 40995 2218 46654 34505 18690 64577
+3766 31741 52700 11022 39968 24958 53987 8258 46919 20078 27800 61214
+12825 35693 53560 4791 39079 22409 58298 14596 34883 62773 434 45002
+17270 33204 61121 12245 47693 27548 16020 49753 29804 19052 55675
+34926 14338 63284 29328 11209 54465 32514 17078 48798 7101 29700 51107
+14464 46540 28668 1242 52301 36231 18871 49619 3464 33715 55695 9227
+47774 30850 20089 63867 4153 48918 32370 10475 62031 35789 14013 49100
+23104 61106 6988 41884 31211 16790 49876 6139 61949 25477 41278 233
+55225 34859 7931 46959 23477 55976 16040 50670 5836 45040 26139 55602
+1525 31770 51880 9477 43383 27669 18592 55779 35762 688 50500 20824
+39395 15942 54192 32618 6813 46186 15529 52781 33481 19548 48991 36878
+5051 64270 20946 35262 49086 9121 37823 53779 4478 42387 25052 56603
+10305 41402 24714 57510 11777 44262 28390 4199 55796 30374 7672 37039
+51176 3122 64840 22465 41913 5659 60029 24229 50619 10087 38490 27042
+54602 7832 64233 34508 1594 58205 19330 36215 63335 3796 30906 45514
+13268 64706 28965 8062 57181 37084 2694 32544 53479 11402 41572 23113
+58131 15738 31827 62644 13442 39577 23395 60200 1234 27547 49474 13857
+56352 29157 10439 53351 37377 16926 29013 45769 6595 54970 25092 49053
+19040 36692 64855 6062 42714 23444 55892 3380 31487 53188 8652 28214
+49566 20657 56281 9648 41988 23677 55074 13852 41608 21848 52150 15319
+45856 28221 8384 60767 23637 43128 16129 53304 7406 36981 57753 20602
+45218 14056 51201 29780 3815 63575 38217 7077 30766 59106 3019 38622
+26707 56474 13704 47365 24936 40836 11308 50791 4180 34545 55816 7479
+47835 30903 1584 54148 35378 17749 58922 2924 31349 51635 13316 43511
+26666 64201 6104 39064 25122 47489 13965 63451 33874 3867 50704 21031
+42614 5464 65519 22358 45102 15671 57941 23389 47729 7496 31145 49882
+16723 61129 33990 9228 43252 25816 64000 14616 31578 59301 4322 35089
+56054 12300 43396 26158 58909 5350 53731 35176 17826 48028 10671 59929
+22948 42301 14151 54529 20199 41267 5200 46710 18886 30147 60789 14370
+46478 22584 39216 44349 19252 63832 33116 10956 38435 49284 14399
+31252 64772 5050 41008 22311 61556 10901 39059 21022 60657 8383 36008
+50682 4776 43194 13963 56286 23091 49672 9670 29607 55544 15840 35279
+62248 345 45693 29559 16681 60216 35922 2887 38474 49123 10470 29199
+63612 20215 43107 7566 50167 25286 39393 11667 57436 26463 40391 3497
+53409 34238 8368 57926 37495 769 61778 27254 7452 53826 37466 3263
+45676 22749 62145 9526 36784 56988 18685 33681 64915 6275 44090 25570
+59932 13190 44936 24444 64509 11636 40035 22875 59455 12369 34629
+42792 15125 56153 22287 46518 7797 30301 57215 2831 44328 18794 33464
+53465 1828 58701 26569 38887 19046 53416 10674 30634 45074 16730 63952
+26603 41742 2268 31327 61725 19979 38810 8657 48443 22196 59217 16362
+33361 61056 6050 48185 31868 11100 62067 26228 45397 7616 65413 23550
+43719 13847 58457 25004 40609 355 54966 13343 60116 24793 41315 11263
+54280 18949 28194 61229 14342 39189 20388 51600 758 32248 62495 6775
+47169 35195 17154 61382 37722 10977 48107 24829 56895 14958 30989
+45871 12335 56112 25658 39373 14076 44199 20793 61544 2806 47745 24108
+40436 12887 44512 25601 53973 8934 39999 25021 55618 9654 34485 48842
+16069 41165 23008 46642 13083 60110 20069 30695 63929 29 35266 50348
+7741 43818 24400 55852 9113 48292 20715 33869 63074 8093 39708 21188
+61406 33915 5862 50317 13686 63684 35418 18127 42091 2813 53697 27746
+10528 32994 59415 18936 49256 12769 34810 44931 14858 61141 33370 1476
+43758 26661 62367 7004 46501 33775 743 64558 30689 7527 36678 55052
+19394 47151 30817 2500 58760 33599 19351 48742 28196 1608 38477 60880
+8745 34418 48804 18036 27334 52554 15433 45511 24685 64897 9616 39530
+20796 60904 5611 34668 58822 18553 44847 27359 12830 65186 35975 15772
+57968 28482 11175 47824 37314 21009 61011 7585 39272 20230 49873 11832
+31344 51048 9299 58663 28480 17370 55231 37333 13079 60224 30192 16887
+48599 31968 561 54361 36056 10137 28323 59674 19914 44760 1921 39949
+23537 58519 15715 48846 3056 40072 23785 44272 13307 53208 22999 48578
+8292 39545 21663 45704 14660 28164 61909 546 43554 32138 7226 37656
+63787 1694 32174 58794 21996 50214 12366 36170 52774 7951 32594 56725
+1611 26104 54740 6752 45229 24183 60453 2899 35460 54010 17161 28621
+56143 12766 43139 25398 52945 3642 32193 45615 13304 58527 30889 19276
+64167 37551 8032 32330 59963 19603 43752 6077 50846 27397 18508 56555
+37086 5295 44166 22400 57387 15733 27192 55355 907 34587 51668 15070
+28478 61605 4164 46556 22120 52747 6523 30546 64545 13831 46196 23428
+41041 11266 51162 21202 33281 48556 15545 42626 24894 57683 5954 40339
+24056 52534 391 47004 11808 41086 21881 53986 10182 30916 40233 4867
+51338 19410 37194 52947 2182 28565 49851 6163 60728 25971 38759 1184
+64985 26649 40715 14760 47821 25250 63547 9613 40128 23618 46300 13538
+64422 3416 34053 48430 21183 57490 4384 39418 14197 48454 22687 54186
+9618 41513 26798 64891 14311 42350 36241 3946 46268 23351 53777 15658
+41435 21886 43076 4571 57413 34350 18640 41136 3137 51105 30163 8233
+63607 35940 18515 45790 31084 7731 35870 47979 2059 58387 33208 6557
+45620 24165 64037 12120 43118 23893 49723 15645 29356 55064 2689 27225
+46410 19450 60392 455 39100 21464 62074 6799 36729 48951 1975 31605
+63767 6449 52006 26753 38769 9587 59430 18535 51030 33185 5528 46895
+22638 60875 12743 41874 21681 62430 724 30768 59004 6171 50741 26377
+38831 4361 52238 18477 46502 27939 12516 59424 38222 3573 31348 42850
+16186 58409 5424 44452 25680 52960 2159 47284 18829 39630 26602 56452
+3845 30984 48099 9328 61795 21159 35206 56585 16285 44981 124 40047
+26643 62528 6530 29728 47839 17011 58100 22321 38826 11205 50185 18775
+28082 54418 12675 42812 24738 60148 4128 40300 13549 62822 25998 41051
+12005 51833 6577 64338 36298 18120 27113 54706 13223 38432 61938 799
+32932 58337 10740 42017 22743 53118 1687 44405 24079 49094 15014 29394
+54428 595 37331 51257 17516 46079 4754 40700 23627 63299 6476 30477
+51126 14748 44649 25788 57579 4057 35237 59954 19165 41325 744 35301
+44689 7583 49583 27360 2315 53555 38356 8485 62263 25075 41637 13945
+52595 38408 4300 33465 63007 13849 47400 29601 5560 53230 36507 20381
+56405 6936 62698 26742 38699 1092 61620 17598 33816 59753 3484 52513
+37503 9961 49106 24158 57817 15405 52161 27620 17645 48324 37202 9656
+27763 61814 3330 41408 23366 65267 15226 40401 50319 16701 35063 56316
+11555 41603 22511 50583 8301 38138 47658 1305 36562 58933 7217 29429
+65532 16202 37604 51532 513 27149 49221 6365 44267 22142 52266 1623
+40618 25721 63351 14215 38120 48135 9637 27924 63977 13673 52169 33263
+6287 62057 38276 18688 46296 8079 58692 37550 18049 32201 55897 9524
+41306 25953 49798 16663 35813 58621 2657 31288 63726 18176 44220 4900
+59738 30287 9850 51429 19055 34567 60702 13176 43009 25364 61553 17313
+31148 58462 2926 36840 63338 16032 42667 25093 60944 8610 32557 57623
+16716 45215 23657 40824 9542 51911 20936 45135 12228 55246 33507 5652
+50308 17466 30517 56000 8389 34129 52383 16300 43563 27666 9267 54424
+37013 17994 60612 32238 7079 58331 34440 17827 51412 782 29814 53211
+7803 58221 28063 12905 64175 37859 1830 30639 55377 13747 47375 28921
+9264 53484 25125 60718 12752 37135 48066 16531 27443 56344 3661 50334
+23154 64954 16682 30052 43440 13081 55487 26797 48344 3163 38855 21421
+59016 4965 38126 65322 9176 37014 53025 12813 40353 25937 53589 9995
+43084 23890 50873 15546 28705 58354 17175 45689 22283 42045 12637
+55208 24893 46068 166 28032 65372 17406 37832 56760 2930 35247 49968
+7245 28120 53554 19164 44418 11786 34870 63022 14870 43148 24557 56741
+6903 36523 51570 17672 27320 65065 10219 53072 34911 19716 41125 12794
+64404 29634 16728 36710 59993 10730 51728 22266 43143 15596 58454
+25588 39097 13209 51408 5533 29712 64035 20806 50559 11679 38641 21641
+55097 3854 34787 45656 5819 51893 25671 63396 2869 35372 47288 20658
+57226 9204 32044 48706 18563 52501 35189 5374 55428 20435 45843 29448
+15409 38319 59532 4117 47673 33351 7623 29069 53435 21450 39792 4591
+50211 17572 35389 57567 12054 31330 62197 6965 42132 19701 63898 30959
+9888 57222 21967 33624 52506 8468 43380 26185 55775 383 33581 64924
+9589 40881 23942 52308 12315 46584 22784 63956 10585 52242 30445 18468
+62697 37804 11967 29357 57000 18220 44314 6774 61323 30426 18764 55616
+27323 8133 51841 35830 16172 64504 25270 44959 9033 33658 49736 18647
+41977 10329 46132 22382 55257 30221 9511 45010 16925 31260 65464 20961
+41924 4872 35402 44564 11033 62606 30237 6114 57123 38481 17584 34226
+53511 11721 45385 31364 4897 20382 62907 29417 920 37848 59463 14710
+33695 63500 17970 27291 57263 13643 31424 48855 19350 41729 8920 54780
+28216 18293 62811 37028 11387 55191 28607 16739 57200 37068 8773 30466
+51596 3452 58564 19362 34402 49302 1717 40895 19237 47501 30020 11560
+54146 32141 21679 44033 2259 64075 13705 38962 21231 60681 1596 29699
+56499 8134 42811 24834 52356 7105 38871 26812 53273 13760 34896 65205
+1319 46683 28093 8190 54772 31978 4186 37993 53534 7609 43005 24590
+49261 12553 29044 56545 857 48756 22570 41293 10979 30438 63080 3696
+54931 31649 15914 60337 36547 3181 29071 59137 19422 36126 61587 711
+42497 24094 60130 5186 47866 19530 32188 62526 1141 46110 29122 12567
+49419 26221 42450 5215 63132 20870 45849 35529 15257 49181 19125 34486
+50645 6641 44381 25649 59734 8353 34875 63367 17417 37280 48523 1105
+42036 22764 56805 5192 32124 62011 10341 43608 29385 11931 36653 52031
+5383 59773 23019 39567 9794 56904 18201 34122 52694 10463 45922 32682
+16594 51112 20229 28266 62676 4650 45509 18650 59040 31561 3621 64377
+35697 8261 53990 32698 10619 60567 37676 4275 32619 62588 16749 35936
+52309 10546 45183 29097 14582 52954 27321 16929 60367 38281 10089
+32312 56462 21583 49189 1469 31446 58431 10980 40084 21516 61578 2280
+33826 45046 14888 49674 29048 940 56480 24640 47978 4312 33342 54643
+8456 45480 27717 392 36494 65400 7228 33291 48838 1815 43996 24361
+54745 14214 35810 46572 7348 58563 25026 43180 10461 63775 27576 15808
+59583 37272 13213 31333 44415 16287 59221 5164 39091 26679 44473 1334
+65257 29226 9706 43731 24235 61337 456 34803 56852 8377 50220 27557
+17179 37497 65507 11238 44856 19176 60088 34123 14386 62980 27292 5968
+51481 37744 16383 46423 24565 52988 4465 40793 25357 46955 2055 62657
+18378 29332 59200 11911 39507 20622 49438 16758 29168 56582 2475 33878
+61266 6442 39036 25591 42388 15916 57555 4946 32271 51099 22088 47085
+3556 31161 51665 21433 39798 1531 49738 12105 37197 58269 20629 43762
+677 41091 12236 59458 22360 54914 2513 30664 51643 16344 64758 35894
+4594 50172 20204 35412 54319 2106 47116 12495 29050 60495 16759 49683
+27158 2756 54995 38209 16060 27051 51025 257 60926 27736 8815 58111
+37884 54295 12843 43820 25255 49581 7571 29118 53772 3517 44355 35743
+6067 52208 23053 62438 2362 34620 59262 21233 45926 4944 32127 48177
+15513 35023 61707 4501 42582 23215 60707 13359 46578 21061 31442 43398
+8387 61352 22715 31817 51278 9897 64905 27335 3684 57718 36474 15913
+50687 26436 45520 5788 52167 24286 42278 15555 48524 33283 12062 61368
+20798 45449 17413 56092 3746 47332 24209 41607 15190 56425 20930 37017
+45198 18030 64432 27331 10933 50028 34885 19433 55413 5668 34608 46712
+17891 36551 65521 5114 44294 21723 50336 13974 39110 24312 47663 7234
+52902 23340 41800 8193 51194 15340 41123 22515 54547 10505 38994 26515
+57675 12891 40034 22103 52791 9890 34854 64751 2843 53467 21791 38628
+12998 55478 28530 10325 60936 38280 3045 27218 62185 20171 53097 14348
+40123 22546 51229 3782 28118 57835 15161 31645 64495 11623 39717 26440
+52036 15885 35007 54491 1567 60503 21798 42414 15088 47442 34794 227
+63750 25341 44317 7201 29566 61601 13439 27626 56361 1177 45011 31951
+8214 55467 35361 11141 50470 25057 40855 13954 48478 24689 43024 798
+51156 19867 28975 56389 14367 46918 5943 40986 22939 58299 3887 33982
+63510 7946 47776 37167 2092 51815 24377 42921 5265 64880 17070 40348
+25787 44834 4763 54598 30536 13875 47949 23586 57458 5918 36441 62755
+18917 39533 11573 60397 22724 43671 15172 62232 20257 32703 57119
+14519 42466 23278 55381 11445 29891 63296 19660 41012 4274 59933 18716
+30547 41962 2187 54083 32098 18837 38244 52762 554 29628 48863 7375
+55315 19887 32824 50982 11710 61064 21460 49847 16813 37264 58408
+14658 48005 32380 12507 52855 23041 43549 13869 32621 58653 2001 42872
+24848 56613 3420 28419 48626 8828 45279 37146 19490 29587 55307 2560
+59882 10809 38938 26911 61012 12457 31860 49075 15109 35924 53387 3406
+42583 24291 62154 5507 36501 53196 13061 45943 28293 15243 49352 21317
+56182 1804 45773 34860 20200 59631 10019 42406 17365 63776 35814 9238
+59181 25799 45278 17259 64986 31889 5789 48026 26793 61737 19226 31137
+47986 7677 39829 25158 58758 6080 43199 28676 12967 56679 25860 42062
+7542 60932 28010 18514 57422 33661 8341 38173 53803 14314 34633 46315
+6950 64079 32776 13773 46212 30818 19586 48213 34093 3672 18122 51506
+33169 10020 64457 21899 46743 12580 31387 61322 15745 48172 38251
+11171 32502 44744 15304 49967 7385 29096 58099 17594 53924 2077 40667
+24813 50063 14570 31291 53371 762 36237 65333 6870 54269 24799 39803
+14380 58217 5776 44495 19682 37465 48638 12426 30537 62627 9118 40010
+18719 59525 34470 10177 65456 37338 4668 57690 26401 40919 240 32301
+62908 13030 38594 21570 59092 5404 32249 49248 10625 60327 2489 30489
+47496 15734 58211 29621 1579 62260 38121 16733 60041 8271 29833 52117
+14355 27772 58503 7934 35699 61796 417 43809 18476 64610 29846 11813
+57855 34010 21372 63265 4407 31813 46720 18269 65310 2562 35215 50647
+6628 44818 26165 57082 15836 40044 25008 44588 8466 60291 24820 46939
+2075 31768 43908 16263 57434 30654 9054 46711 37164 147 30116 58723
+10985 46164 36738 9913 52232 22062 42947 2655 55264 21137 47222 6722
+41378 18909 49749 25650 39716 6325 62441 18487 29035 53272 13501 48941
+20524 36111 55320 2418 46631 35517 21659 60628 11976 38338 48699 15494
+27221 63196 1788 43977 22064 61156 5843 55007 15949 39566 26454 64951
+7725 36744 50270 18873 31455 61107 9367 42411 26372 55015 13623 43444
+29536 17902 61754 33928 9037 54839 30140 20316 47145 10412 60972 22355
+49038 16259 35515 64086 9478 43221 20042 30594 53805 8972 42321 25512
+46884 6959 52639 34760 3032 38093 50995 7743 47459 30458 5020 61061
+37234 17804 52962 8042 31946 56959 15234 33800 48529 8962 65117 23796
+44854 14026 60548 7870 43557 22722 61633 12131 40029 23468 64092 2353
+43248 25609 40749 6779 34419 55647 3587 27978 41458 6135 63912 21407
+40423 3131 62122 25849 49329 9900 38837 21829 52375 12334 36832 55858
+16347 30988 50669 141 64628 13172 43865 21909 32289 48408 17239 54574
+7202 42250 22787 58357 9369 45090 21446 60614 11064 31375 48499 15663
+43274 22397 58313 4235 35978 62903 7117 43687 30054 17922 65239 11719
+48771 25895 39167 111 56039 28158 14083 53432 37970 4130 30059 54236
+8760 41316 23973 56882 13345 39086 4651 54120 16596 35099 63854 11023
+31923 47488 15157 53818 37491 154 63237 22068 48153 11169 36877 50960
+4007 43415 23084 64409 1031 31317 58703 18308 28508 44158 9979 59834
+37563 5351 55456 14346 62357 28083 46645 1983 58400 26435 38990 5211
+57529 25841 40776 127 52754 20982 28103 60725 4324 55180 27161 18997
+64356 38032 9815 31213 44704 22391 63760 8462 33790 59174 10731 45874
+27651 15491 49595 29636 18065 45161 2391 55280 29251 16557 33590 59580
+95 53004 24170 43081 5118 54733 25411 46171 1054 30501 53688 17568
+27693 50090 14064 44837 21553 54621 10413 43692 26664 52030 8980 40058
+26120 63563 16776 43538 28741 14716 57141 36372 6033 43499 22285 51545
+9785 28159 48312 20441 33833 56907 2049 35920 47132 19611 53376 29201
+15030 40738 26466 54095 5960 35644 50099 1733 42851 13996 48208 26229
+56402 7395 39641 26054 52195 11541 30645 61035 19054 39228 4696 48337
+11226 59462 19535 31438 50217 6412 36575 63716 19779 48620 5699 40643
+24146 54032 12741 65035 23211 48759 15767 33309 62911 20036 44163 5735
+61622 25109 39133 14709 59611 34161 12381 63116 29671 4220 58669 32787
+11502 44683 26191 57985 3408 33561 42221 5875 51330 17488 30799 62962
+8580 42511 18597 50849 28590 5397 58037 37231 17217 51721 33315 12216
+38272 47300 18888 30680 57193 3378 44826 17857 30467 57604 2241 43910
+22082 53788 15857 38972 1186 50233 21876 58000 5720 41321 23223 48674
+15687 59548 36367 3271 53900 37960 7341 29198 55912 626 40677 25749
+59742 3712 48914 17433 35807 61997 1757 32361 57592 16279 27297 64204
+18075 28671 59680 13634 27067 44864 19942 50391 2656 28701 49107 21090
+43262 867 61926 26469 38934 15925 56003 4643 41283 33451 18038 51615
+37006 6215 56362 26039 45257 14441 34044 53332 10015 62710 22818 46059
+13254 32602 57112 15861 44491 25842 53861 11016 35438 46589 7037 30668
+60265 18960 44583 6405 63466 26109 41416 4873 59288 17840 39155 26792
+53711 6740 36061 61798 3198 45682 19471 33462 65392 889 39252 26381
+51941 5780 38806 25811 56846 1444 34948 64696 8604 41240 25081 50030
+16428 32064 57284 9497 41602 24214 53701 5974 32818 60738 19381 41384
+6429 49120 34865 20713 62514 15953 46640 21786 60731 2417 34990 51014
+17957 45225 25689 57437 1630 49451 24371 40514 4144 60390 27471 17718
+51133 32695 6316 41528 26504 62487 14770 29690 56574 9066 40450 26295
+51593 11607 47602 36627 3165 56278 27465 17279 50516 23000 41604 8364
+35470 61624 22470 41909 13526 56036 21189 45085 9425 34128 65070 18680
+43293 7116 37688 47314 10537 33809 53245 1095 41570 25172 56892 5428
+51086 19071 29347 41836 3254 55620 18617 37353 59797 4718 34007 62339
+10571 48283 20347 36239 63088 9310 45710 22388 39619 14220 60799 26889
+38559 11320 57273 21566 48299 8597 36602 59172 2455 32907 63436 6326
+39396 24243 60830 2947 33274 57182 18104 45768 953 35188 55154 8020
+41508 23382 50891 12261 62808 31888 14477 54624 37090 4480 64030 12933
+45065 26142 40228 11880 57477 4326 34420 49658 10148 59887 21088 44901
+13274 55769 28509 17868 60630 35304 9758 45139 24024 62139 13745 43056
+21565 56268 1616 41648 25098 64014 17884 35901 52042 428 43039 22922
+58467 10750 29137 52340 13775 32786 61842 17793 45512 4495 31833 42789
+7989 56840 27178 1981 50596 38171 16856 29733 56116 9087 45062 28579
+607 51520 20211 37908 45756 14737 48872 22494 54218 8308 30312 50051
+15810 65143 21958 28751 58448 11284 39839 25673 57269 3492 36100 64475
+20990 40809 10169 54028 29065 4134 59546 27515 9246 63381 35255 12865
+48973 25862 60262 9039 39178 26593 62992 7276 32225 48633 19863 64635
+12595 35034 47188 10941 31702 64032 356 43661 13013 28340 50677 17850
+32750 63392 15022 42196 23713 53271 8125 38665 26919 56183 10861 44571
+20576 27916 51804 8546 38362 49117 11081 36514 45924 1298 53721 36233
+9707 62835 32886 15740 58116 35910 10238 54889 23759 41713 6878 53384
+20925 28843 50882 13287 58851 27401 1549 64723 31798 19591 49558 3319
+60230 28026 17509 48230 37673 16 58238 25198 49066 9439 35842 59402
+1820 39638 23373 63229 15700 54893 22322 41427 1007 51110 23974 39727
+13636 53021 20560 33892 46665 7753 60399 23794 40616 14161 49986 21160
+29175 55786 11277 43042 23744 57396 8537 33001 63514 20155 43934 13933
+50330 27770 17387 54571 33440 12613 60233 938 45387 20371 33748 55298
+3000 39964 26785 51929 11285 45281 25055 64303 9763 28935 51933 1182
+43476 11723 39214 26601 53348 10480 28902 63541 6505 41929 21025 38572
+11763 62194 19115 46121 34839 8754 55586 37931 12711 59484 20888 46679
+1863 53223 34509 17166 48420 21563 61242 4524 39286 19231 63140 30559
+10869 52937 37949 1249 64936 24649 43524 15408 4635 31095 52907 7777
+35120 48754 16479 59562 28399 3411 49240 25011 58230 16933 28785 63044
+13971 43484 21952 59586 15053 32790 46613 10174 37851 62098 15996
+44239 24512 52418 9488 41441 25542 51142 14683 40108 25226 56303 3959
+41311 24688 53695 7291 35283 51027 2990 42443 20470 63920 6153 40613
+24633 55013 14692 43662 22747 50930 11767 31355 55385 15458 41366
+22508 49514 7629 30242 62047 22393 48625 12860 31887 64192 3930 44424
+25789 39668 112 59471 23305 47122 16381 39699 24356 50959 7513 62632
+22906 43926 16203 61415 24111 42979 2622 38900 25164 64117 7097 33022
+48732 3907 40390 21888 58803 37 34594 53151 5951 37510 48514 16583
+31853 54606 9136 46082 28518 15074 62320 33101 13273 37431 54061 3727
+41747 22712 56477 1294 35704 50346 21633 55777 14144 35954 45447 17954
+60810 31891 9668 54072 35198 3968 49923 19614 65280 36573 13552 57484
+27143 8007 64134 33634 1760 37681 61732 20027 45706 10241 37958 54556
+987 32855 44890 6109 53866 19619 45680 14680 29363 47318 42 56610
+18566 35677 46472 14954 52472 37296 1452 53873 22885 40272 6117 43430
+21272 55744 13148 46760 23589 41320 4816 56349 26587 39865 3618 55814
+25166 39135 15075 52696 21165 37092 62332 8294 46404 27071 2405 34563
+57697 11993 47664 20819 65169 13735 32674 47381 5643 59512 35107 14494
+62999 29012 4670 56652 31735 12673 58791 20890 29603 51715 3920 46875
+22443 39936 5653 64278 18328 47292 33405 12136 37281 61226 2960 46256
+30954 10212 48127 38168 21385 53770 9259 35575 42344 13033 52173 32516
+7919 54727 29953 19969 43116 4859 64965 29646 20389 52389 11770 45667
+29204 4443 48180 34349 14505 61743 31836 10995 57244 36273 2351 64154
+29313 14939 52063 22569 44340 1404 57637 34317 10349 63142 4299 36915
+52384 13277 29802 50584 16741 40813 3880 55963 30910 7647 61502 37345
+3153 48250 30443 19174 51944 29115 8334 62097 22662 46281 13647 63212
+20817 38850 2168 54799 17767 38197 57191 13029 34009 60056 22681 49543
+5358 35726 55995 15783 33483 48561 12900 58948 26572 44140 7288 52188
+29124 13867 65088 30437 3024 49646 24049 43828 10688 39162 19954 59979
+5874 45024 31774 13520 52571 24370 43541 6694 55223 22458 45896 13048
+29837 47878 7379 53679 37597 60357 16101 42861 24722 63954 2486 32031
+42271 14272 55033 36776 12176 32903 51921 1784 46614 30830 7962 50378
+35793 4042 65181 19750 52544 27639 251 32887 57544 6284 39137 21895
+64646 1554 32846 58402 6713 45747 18772 35280 57535 12303 32476 64738
+17322 29810 56020 13142 47567 35766 16626 52511 31282 3533 62838 37692
+8017 29246 60112 19283 47564 4559 34894 64477 11515 53624 20246 40891
+6414 37262 58811 17493 28090 47955 10077 57682 18379 33636 45694 8706
+30193 55220 3117 60368 19291 41691 31001 934 55807 37845 8979 32642
+52585 18736 58041 10757 40455 26708 51950 14633 62608 27004 43917
+10946 50108 18651 30104 57836 14611 27460 63076 6815 42376 24270 59901
+4149 37473 50899 7635 27489 46592 18717 65493 11426 30128 44600 16526
+60355 28238 7260 38369 63209 3184 27638 52596 6845 41838 24431 59366
+13889 48080 26255 41542 10440 54617 30096 2984 38341 52387 18288 28856
+56267 12515 42873 27430 4588 59584 35088 15176 48304 22720 63455 13344
+38644 26774 59404 6620 33596 61675 12402 42577 22649 65452 8441 31115
+43325 18544 62020 11211 33734 49404 15813 64133 31087 519 51935 35619
+11055 62168 34168 18644 45012 14128 61256 22248 42420 7115 58857 26092
+44408 4168 29547 55601 11376 38140 60608 19214 45268 5124 39664 24946
+43906 2672 58085 23936 40848 16872 50202 195 46094 22717 42298 15327
+50663 23875 40422 6609 64969 18345 38868 26180 59486 12474 44178 24605
+52641 2020 28034 59120 16439 44117 27109 8840 63113 34999 17084 57795
+6768 30814 62127 15986 47719 27349 5484 64397 36861 16775 58976 10410
+36772 50616 17610 46818 7483 33524 60920 16525 36652 51396 9604 58392
+25018 40252 7354 53835 18546 47031 27670 10223 49770 37588 5732 62433
+18375 31917 48998 14938 41949 24543 47626 15933 32114 61145 2250 45476
+19549 59755 34409 13239 45967 24977 52557 10587 42724 21484 63631 6097
+37317 58140 16721 34569 50613 4418 30554 43954 7836 58056 22010 35735
+48205 5004 27466 50224 18994 45954 7920 31345 65404 18711 44130 393
+61482 24335 39218 3655 54409 16991 36317 60097 1232 41680 24300 47045
+15802 58141 33074 6770 63972 25619 51628 15147 40845 22294 65201 432
+34154 58195 15248 41287 32688 2603 59186 38428 16766 33667 57356 11881
+27621 560 33328 55763 12936 39763 23283 53238 8847 46479 21715 63365
+6243 41883 24007 61591 15618 40297 25521 57776 13105 39878 26476 48379
+11563 35774 60419 14265 46881 26346 50464 11062 36756 54099 16884
+28644 49109 10129 63481 28156 860 50263 21932 45185 5524 40614 23303
+62025 1362 28256 58296 8838 41733 21965 48013 15739 55961 35543 608
+42503 26518 57012 14310 44967 30908 1769 47627 24661 55444 16016 51497
+2177 35533 61201 21617 42031 5233 53617 20319 64858 36719 12389 47973
+28692 7036 53970 36481 18286 48678 13662 65187 27518 3523 46653 35441
+20609 54813 1103 46149 23347 38640 6267 57220 19936 37610 65056 8316
+33718 45358 3071 52784 32928 20692 49016 13615 30370 55186 16409 38420
+57258 1749 32072 49112 20333 54989 5011 34849 47287 10503 57671 20405
+32449 48939 11929 30320 64716 19088 45965 1012 39529 20955 61470 5007
+34750 46407 15980 62594 23656 41619 6493 50344 16500 35943 60814 9576
+49531 30927 20774 57042 7093 40110 26049 53365 2015 46400 22026 51321
+15825 41577 25553 55158 5647 39689 25020 58380 3240 50349 21378 29899
+55489 4945 41059 23691 45739 14145 59906 20833 49814 2676 29438 47981
+8464 51393 28968 1375 54551 34565 19169 48457 12242 60109 34057 16125
+47924 27791 6533 52351 21774 31966 62579 12585 50567 31671 19308 54685
+6417 30213 64535 19013 37340 58263 9912 33712 61680 2399 47697 25587
+43012 13982 54636 587 48204 33832 8696 62440 38232 19346 32503 47831
+6529 56793 32082 19420 50369 37835 3812 28717 52651 19111 44767 1047
+37397 55151 18011 29057 49959 2096 46279 20711 32379 62485 2962 28871
+56387 21201 41357 667 55519 20062 28315 43304 3313 65074 22535 45228
+30317 4644 61270 35314 20839 58133 12608 42730 24772 52977 3504 29965
+59665 7988 54039 23322 40567 10066 54952 26598 38727 6089 49891 22587
+64396 209 39521 19858 59062 34529 11599 49247 24212 42423 1621 53887
+19806 37170 60944 14632 47653 25977 40922 8763 58916 16876 33171 62030
+3077 39987 25103 52625 11052 39896 21293 30856 47071 9651 56380 19870
+32180 49808 8150 28125 48203 19431 61851 5678 39857 22339 55003 13323
+37519 47271 3395 32422 56929 7770 43052 26420 49824 9716 29322 62157
+18926 48692 8896 27613 63599 3893 43843 21859 51102 11223 28582 46615
+6751 62259 30407 16890 57430 38016 977 29618 48211 20340 55843 10017
+34807 59779 5214 44613 22537 54557 2608 30231 56449 6934 45075 23108
+40473 3632 62638 20693 29658 44785 2844 61159 20040 36531 43203 13967
+54811 37512 8486 60991 26608 49661 10822 33066 53205 17595 34748 45250
+12751 60378 28634 6976 45714 23900 64999 17146 51395 8694 39534 23487
+58411 12336 32924 61697 5636 42246 30808 19810 46222 11769 55821 31565
+15912 38017 49129 1645 27413 44180 16551 57584 33978 11208 63189 26339
+43360 5708 36121 51351 16981 59198 30297 6659 63617 37062 18163 53246
+12643 42300 24403 53799 2126 27760 47828 16085 60910 23069 40463 12071
+58781 1034 35415 64513 8926 45437 27065 17775 62887 37050 9476 42816
+26073 61054 14586 40427 25273 51018 543 42579 17048 54942 36580 5354
+50095 25887 58095 13077 32448 44794 22714 56880 8649 31497 48492 10936
+60002 21649 32264 55080 401 28213 44066 17892 64673 2714 36663 47330
+18838 61935 12421 41841 31680 8113 60549 34478 2902 49063 19495 33543
+56986 13102 45533 23775 40718 7869 61347 16861 32205 51576 10012 57857
+26571 38623 7520 44077 25778 59067 17062 36685 63262 11771 32226 46702
+16210 65003 5496 40826 23026 54171 1695 38388 63737 14409 35110 56833
+851 46182 27575 9127 61163 38182 14763 34523 43591 10717 51559 27272
+4966 53450 29786 16396 37730 56941 10844 33972 61212 19610 42205 27389
+13260 52087 30571 4453 45332 14557 65299 22660 40487 273 54250 13811
+41323 22072 63593 8072 33189 50340 22842 59704 9814 34037 61448 13664
+42130 25495 56870 9045 41613 24125 52708 10667 35186 63769 17552 47709
+32019 6737 57423 35902 17910 51742 12416 37883 55406 17511 48751 414
+40344 26638 56099 7068 36085 63720 13591 42590 25413 38899 638 64956
+21939 43419 12716 62064 25260 41598 9076 32216 53667 15833 46806 28119
+3678 38119 55776 15223 28564 64571 13200 45977 27506 6640 55497 35032
+490 64789 19745 31558 51534 10324 41471 22463 54645 14294 30077 61004
+4432 45145 14994 59788 25726 40235 6372 64626 22090 35552 56995 10271
+31931 44949 17629 53259 34191 742 50499 18952 28992 59105 11358 39361
+24085 53859 12775 35998 55580 4986 44930 22828 35806 53317 14456 46324
+31264 19175 61205 37108 22836 59086 17932 33976 50506 4082 45423 27790
+11370 60457 35268 16698 51239 3576 43965 28039 17943 53031 32304 10981
+36438 60946 15519 42869 25132 64260 13090 34855 54710 18602 47275 7239
+35052 56951 13335 47074 29197 4823 59229 21219 31407 48531 15062 41763
+3301 59985 22557 39875 5947 64275 24058 50591 2219 33019 54531 18663
+40338 5025 48607 33430 21175 62373 3235 46928 26575 39498 14972 49955
+22804 65374 9140 36969 50702 3419 28307 63063 11075 53017 21359 35680
+61847 5413 50176 23049 39233 2285 47335 21068 60856 14789 28445 41998
+9293 50208 23960 44288 10512 29176 58489 4780 34483 62035 14089 49374
+32156 9585 37196 51293 4294 29499 54957 20106 43691 15763 50150 29123
+3856 53638 34462 6517 47402 22112 58920 2664 32039 49655 7771 64336
+21118 34313 58599 9303 28111 61977 20058 41404 8417 34109 51683 3382
+63249 17962 29128 52678 1535 42949 25408 39402 5281 57694 19246 47179
+36556 11608 53683 25943 46070 14142 32261 52509 4915 28680 48489 20049
+56391 11440 39330 23066 63685 8871 49942 28215 939 59237 35656 15166
+48220 25314 54573 1893 39801 23241 43079 4059 65202 21766 52749 12503
+32012 55287 6001 41122 23346 56827 3915 39759 19846 30935 57698 8955
+35631 49212 16529 27362 51484 7701 43120 30589 17822 58419 35798 4185
+53999 25892 47660 1905 59869 18184 35647 44709 9158 63456 21708 46283
+7334 29088 53127 4113 31636 49872 8148 60680 36377 16967 58461 23497
+49288 10785 35368 56146 17591 30039 60625 10403 42759 24818 55538
+15213 40152 5088 43605 24867 53325 3516 39761 21927 54353 6387 35686
+60571 14698 31250 49493 5489 43618 27168 13185 59980 38456 10232 29072
+47591 1570 62848 27376 7975 32982 44889 22426 64443 10839 32240 50194
+17420 28363 48281 5399 58787 17035 50844 33413 7376 53212 35327 2692
+56098 15152 45152 26041 57636 7916 33544 51083 18902 61215 8917 44235
+32583 4828 37822 57523 10802 42368 23649 49556 15817 29776 54012 5898
+43622 25906 63475 1459 33785 57608 7381 47463 32850 20033 53485 2651
+31533 50299 17817 42874 1723 51452 15550 37335 63675 3835 28614 59824
+11740 42795 23934 63345 5382 34730 48300 20378 61567 2229 46042 28168
+17950 64306 31840 12079 59621 1397 28496 56656 10155 41217 5615 49803
+45487 1885 53822 12161 40805 24294 64745 15849 32374 53692 8471 40147
+26317 64070 11904 35657 48924 623 63198 24631 40901 5817 51234 20141
+38925 1333 53458 28344 9737 32816 59885 15044 41657 22991 51779 8983
+33873 53897 18191 43868 2033 65131 28740 17991 51800 34799 11643 55555
+26609 47038 14867 39068 20811 61857 10850 35006 58042 15097 28706
+53144 11122 43685 35694 17704 60364 6660 52549 36417 464 29239 47015
+17017 60013 22201 39892 6652 46199 34084 17281 56301 9777 31901 42777
+14306 59347 25188 51968 7997 33353 46341 296 56234 31729 19065 61627
+3082 36375 51052 16441 47531 30049 20243 44961 5746 59683 21098 43394
+15135 63847 35832 7070 41504 24050 61484 10290 37818 57930 12654 43320
+23816 56275 11889 30093 51744 16137 44332 24004 39614 4403 46596 15747
+53936 37411 2101 44690 24293 60017 14910 43645 28183 10119 49468 35313
+14377 64843 19814 54122 13168 45787 31052 9071 63559 24527 40381 6235
+61202 21855 41284 9326 59031 17456 35033 64105 625 43002 26325 52851
+14327 29921 44832 17626 37898 52725 10780 29533 64777 4598 44750 18896
+33593 62473 10867 53612 29742 15272 48646 37899 1032 27797 46416 15843
+60761 34060 10275 49102 25562 61438 12520 45743 21128 53518 29026 3223
+59083 37302 20296 65342 10592 50900 15856 44861 22963 39951 11410
+63828 20574 32696 55905 12603 49662 23863 40077 1057 59248 23369 48367
+17013 35856 63667 14267 45459 28188 1422 55036 38339 7575 31165 62063
+2705 43425 24745 49653 6011 33307 58153 1789 46500 30992 20665 64877
+14119 47259 33003 19254 62757 11480 30038 51002 18649 40467 1282 57657
+27766 16219 61828 34491 2445 50831 20895 33397 56243 13575 44079 20889
+35614 58505 15865 53565 5132 39332 26007 54898 2157 34945 56544 9609
+45625 32459 21288 43947 11466 59500 28635 16996 49012 37137 20150
+60407 4983 39779 22054 62846 1862 40597 23954 47494 13985 59732 23035
+49004 17441 29668 62929 3314 33527 60369 9223 41987 23869 58623 11942
+38615 20361 50423 15386 40550 25800 64061 10710 42896 23172 62564 8836
+34514 59377 20482 30024 55842 7001 42424 24800 49529 16187 30218 55245
+8425 41829 25339 56256 15310 41735 8776 30837 57927 15896 42702 4146
+51184 21561 37310 49366 15679 43102 24093 65356 17016 31963 25580
+61960 18766 34967 56836 6975 37325 52016 2715 43532 23654 57640 4923
+45703 21452 59104 14136 29762 46393 9203 57285 18731 32020 61983 12122
+49239 20983 36219 55529 4628 43100 24965 64511 477 38979 26628 61846
+6092 38828 25731 52869 9292 36024 45847 5032 58381 21469 41386 320
+32562 56834 7366 44383 26006 49904 4077 39464 25577 63625 1110 31981
+56686 8318 45534 21810 29869 57723 12128 43269 23829 56113 8263 34603
+44789 13719 58444 22942 51375 703 29792 48484 20055 64354 3853 35928
+44167 12140 58285 27381 16648 64580 37459 8627 49231 25620 42345 14437
+59454 27545 1497 64773 36630 11157 55305 26108 39442 582 54383 25182
+48397 13110 32075 55930 2421 47670 27439 17091 35740 59964 264 40114
+25426 62568 5425 33401 55493 9904 61263 32685 19654 51618 11231 31688
+64028 17701 47372 5847 31198 53755 18703 37833 60578 6146 42069 24780
+47536 2847 34506 58567 20509 43648 3682 52993 17211 48541 29740 1429
+54987 33817 23249 49926 8520 40106 24932 54871 7370 33251 62409 3832
+47848 31918 6518 61015 21857 43041 14022 37801 56466 8573 28235 47832
+19977 40975 5544 58417 36002 12028 63596 20216 38302 53274 3055 27104
+44548 18083 52086 110 41332 33585 6904 63128 17894 42675 30743 6070
+48878 25126 41887 2900 29576 61764 8399 54897 25135 46548 7372 28954
+41672 3475 62401 31979 16057 54285 36869 11558 27869 56353 2555 41616
+22616 57847 10051 32999 43698 18752 53535 27694 11856 48366 37536
+14163 64158 23429 39799 17226 52825 11665 37653 56172 8764 28878 59149
+482 42312 24074 48917 4693 34753 65446 12851 46652 19925 37149 53424
+9406 46203 19438 37546 64297 5737 40144 25516 59790 3783 51149 11619
+31271 42944 19421 60313 8674 41620 24067 62317 15191 39797 20166 61374
+1715 49951 24211 41475 4410 63230 32526 9469 52767 26828 42889 11843
+50258 30293 14615 53486 34952 6886 54497 30082 759 36226 56311 7720
+45545 25045 52084 16684 39460 20984 50854 3733 45617 26904 56647 5523
+44023 21850 51198 820 34368 57325 14524 39881 25071 53865 5037 45393
+12980 40213 22493 58628 9531 33763 62843 2881 46330 35365 18407 51087
+1477 33953 64856 22020 49969 10549 35535 54419 19817 33023 62423 6919
+30394 58597 3100 35343 50487 8159 39917 44456 4596 51624 28944 14776
+48147 20004 28140 62492 9793 41849 17451 38633 26804 51725 6960 37760
+55228 15920 43131 23357 54034 2233 39410 24080 45989 8923 59000 17796
+31761 52443 12222 40405 21638 56552 14374 32780 47748 11509 59634
+22589 40870 15887 62742 30555 13918 47785 25703 63321 9955 42749 23688
+59669 12269 31112 54230 9230 44784 20772 50474 15528 40743 26243 63176
+2567 48508 18612 37625 62010 4738 31601 48621 19987 63845 2772 31177
+43158 15170 61454 24219 39550 8989 53705 28659 17297 56733 31026 5911
+50883 35930 13136 45386 22554 53879 4502 33445 55515 7929 38021 46737
+15279 52412 22327 41712 7511 62926 33706 17446 44680 5195 61890 23282
+42234 16261 37070 64931 6005 50740 21072 30681 54655 10424 41821 22479
+48826 15282 29351 42193 1383 58177 26271 45557 4029 39299 26081 56740
+12607 35456 58939 73 46913 20342 29945 56366 11934 37894 61333 9683
+28868 51555 14356 38847 23345 59673 11164 35474 63069 18987 43286 4395
+58374 36167 13158 45630 20410 59818 10800 41875 24092 57467 15434
+41099 25146 50250 2746 58854 30694 16307 52008 36848 284 60149 25143
+46312 16870 32338 54827 8827 49096 28863 14830 56147 37209 8123 64465
+31280 20355 57011 13648 43970 26790 49962 9157 54918 34641 19528 60805
+12787 51745 36855 17064 32086 49252 453 37119 59058 16438 51147 25511
+43045 7069 48843 30315 4332 65523 38271 15387 31016 53794 6309 35002
+48154 15009 64661 27086 5163 59805 36327 19848 53308 8394 31251 51069
+3459 61043 29349 22259 45314 4315 49126 34309 18171 52046 10947 32078
+56701 15187 43870 22647 55350 8228 29319 44391 3999 59472 30928 11319
+49742 28279 18380 53943 8970 46443 19821 38792 26622 65357 1148 49368
+21910 34299 52674 11139 29397 47593 4850 54600 25265 38811 14598 57693
+31285 13003 48293 22881 45661 1065 64208 17859 34085 58705 3937 43660
+21539 65472 17053 41470 24843 61873 15502 43332 22541 39506 11988
+57335 1978 36326 65120 14925 33024 59522 9042 39181 24875 62326 12973
+36115 55092 9319 28956 46263 3566 49545 35913 15958 61594 26336 51081
+231 44040 23705 52936 13923 39273 21350 57470 10938 28766 59344 19706
+45544 5568 39901 25567 61085 62 48234 13429 41719 25148 45902 10948
+52655 18425 29056 60234 13784 54472 32639 10400 64170 36720 295 58136
+33238 13435 49076 24398 61016 1426 44692 20107 65425 32992 3185 28370
+62565 7840 41827 26532 51961 6704 63930 27007 44411 2542 27874 61433
+6467 42369 23808 50036 4072 63587 16911 30029 44374 1248 55813 28059
+7190 50763 37216 3710 53931 17492 38745 20424 52158 1860 36446 65309
+16883 40916 23450 55623 5472 31178 59048 11605 38750 22634 54804 8873
+32905 47388 16662 27534 56980 7431 41160 24694 54641 8519 32979 47434
+4829 57824 18826 34251 49849 1209 41580 15510 63287 23556 40636 2523
+59736 32436 17952 62315 12738 45149 28413 17525 57424 31123 3637 35010
+60190 18805 49780 27831 9799 53242 35423 19199 57350 9112 49700 29459
+14007 46420 32792 8507 63046 18554 37731 52983 2302 34770 65223 8101
+54421 24247 40680 12985 61701 21739 52680 7859 30291 50257 17051 42760
+27625 9194 64375 33815 4271 49896 27282 17028 48711 36305 787 65393
+25882 42168 6742 52162 21266 45226 10031 32186 54422 16680 28952 65089
+3060 48835 26910 38514 17293 51500 1542 36497 64317 10300 34786 47441
+20234 40586 7047 63863 18356 34300 50039 9765 28939 62735 2369 44636
+23460 40268 4481 61910 34817 13154 46677 22332 50160 5225 40026 24342
+62446 2310 39032 25327 59846 15202 44934 1216 41100 26161 57821 5717
+43949 21917 64600 14452 30168 55234 9507 38718 21036 61040 14149 52736
+22837 42717 7818 57171 24721 40825 18482 61457 27857 3333 38128 51843
+16801 30281 47042 764 57711 24329 44319 16062 34901 47105 10566 58556
+19609 36153 62042 12875 43112 23567 63985 6214 39038 26724 60993 1874
+33192 47679 21677 63421 15818 40120 23897 57078 239 36248 62203 15294
+40979 24713 60796 7216 41815 16697 46130 30154 13618 57035 3099 37524
+63405 16426 31181 45346 10147 65210 29159 5816 51317 35999 18860 56591
+10270 39247 25931 52039 6216 38783 24522 56262 8227 31837 47047 2885
+52704 10453 33806 50377 4316 63364 26621 46813 18305 29081 43989 6738
+54191 23335 42195 17582 53270 2823 46582 28023 16724 58980 37383 11501
+65313 19001 28745 55349 7227 39493 18213 32000 63824 6264 41449 25594
+60237 4442 31193 48095 7363 37150 53093 14638 32616 57270 8092 44540
+29166 16650 55252 36762 5197 63259 21167 36366 56883 891 39417 20338
+6281 47273 24853 42530 15395 50727 22224 46004 5966 36623 54362 15212
+30153 58604 8309 40829 13319 53158 37290 16754 31380 59938 12377 46853
+21222 38496 14271 57790 19883 35234 46291 15820 55877 31196 10830
+45289 36263 21039 57895 10071 33756 46668 19722 61466 32047 12823
+57322 26570 42003 6619 58988 24909 45175 14335 48899 28556 3355 60907
+35839 14184 51533 25149 46783 6971 43072 25833 64797 14282 51755 1366
+36822 46049 19273 60825 11876 38614 26641 65082 14542 41199 25323
+46006 10231 62451 21486 33106 52152 6946 29852 55709 19772 47782 9463
+39182 26757 51564 796 34572 63936 9212 44502 24380 56252 12274 45994
+2027 32717 59023 21585 48822 3361 39088 25496 55571 1236 35140 60699
+19835 44390 3657 50225 28739 13387 59263 27607 16402 45141 21918 50205
+6671 31027 48094 10779 41638 23341 63765 2729 36666 59776 11693 45054
+22091 54788 14845 36640 62874 7244 30678 57440 18934 44718 12807 55324
+27032 38527 2327 56979 25470 47263 7213 37433 50736 15083 42603 22065
+56570 5602 46038 25558 55664 13318 29737 53303 4878 27985 59713 12645
+43790 24483 54981 5872 41297 22119 52897 14011 34682 57006 7702 31495
+51304 18447 45300 29812 1576 60150 32470 15979 57845 36354 11327 54403
+21439 46703 4947 32485 53100 20783 63482 9232 39468 24167 52576 12270
+35466 48481 4597 43507 24262 57379 1674 46202 26884 39335 11136 60384
+34630 16703 46464 69 50461 36785 13649 58768 21299 44268 7980 62978
+22377 40960 13513 30044 61904 6210 54912 22844 41732 1226 50554 27391
+7663 32417 54181 2549 41923 24464 58497 11688 49307 20540 39954 13936
+52080 5236 34260 54744 12730 43275 22512 51177 7780 32179 48673 2649
+55121 34012 22716 50286 4714 58886 36132 20689 51783 12388 42951 26505
+59387 58 34354 52175 12345 42780 25262 58509 2400 44574 26913 60882
+13535 42329 22867 62040 10728 49415 26639 39603 12339 57869 21184
+30744 60158 13533 38791 20573 54786 8550 34800 61511 13732 49708 28212
+5 60589 31747 12434 36879 64238 20253 42624 4710 49263 21312 31042
+52693 1914 41646 25639 58363 10593 48257 19718 36600 54693 12314 33119
+45716 17076 64220 23359 41579 2389 61776 27549 17912 48787 35013 9622
+63862 32242 19099 46758 12715 51759 29643 9739 43777 26149 61750 40229
+21820 59591 3677 37767 55149 10991 30494 63659 18632 43992 4295 33882
+47490 16784 55653 25402 42481 5322 58150 22432 40627 13 56326 25792
+40625 4470 50922 29950 7981 64860 37782 1017 27658 60297 19075 52683
+3381 39859 24747 54292 14286 41844 2660 50121 24279 45586 11190 64561
+34708 16603 51405 4457 35747 56620 10607 33028 47940 19030 42303 56
+62704 16945 36158 57557 3760 40505 21420 34266 59838 10681 30129 52358
+4121 43664 20822 56437 1868 48200 35100 6581 59444 23720 42334 3652
+47473 17735 60099 35134 11018 44712 25429 58399 5180 41910 23458 54900
+14004 41167 25851 52965 4911 39374 20558 30708 65255 14650 43807 7949
+40811 26588 63344 11613 42832 22326 51806 9741 38799 25818 58508 16552
+36918 52359 9059 46399 36141 4574 63423 38070 18538 57891 662 36975
+54152 14115 29465 48897 15780 28074 55845 5557 40221 24659 51556 1850
+41224 25522 53946 10194 39713 22478 60959 5128 41410 23711 63997 12414
+39904 18285 59207 27840 179 60689 35028 9768 30603 63416 18847 43261
+6842 33786 61291 21185 45217 15872 51180 33252 2122 60712 37225 15769
+30793 46977 3762 59502 22962 41794 16200 65482 27813 10422 55407 23946
+42972 12085 51265 26274 47374 7434 29269 43502 14649 64823 23492 39915
+12058 47921 29153 16742 55522 33834 2111 59507 28865 19456 62535 10952
+33006 41124 18899 64098 8570 31881 48276 2954 55091 21455 32159 62770
+11698 28443 55492 6649 40987 25331 51080 10666 35545 55849 3050 45794
+20635 37342 49142 9173 31721 63789 13567 37191 57681 16106 43968 22029
+55760 8882 38543 27024 45701 7438 57818 22944 32027 61948 10761 46859
+28542 3096 64787 35336 19600 59265 14459 28859 44543 10955 63829 18377
+28551 43988 8502 61888 25606 39042 6928 48264 22122 54107 15823 40827
+23368 62560 8243 38717 20929 53661 7421 32730 40406 3220 54546 19658
+33036 44171 333 63818 19380 34921 49995 5555 45945 25507 41507 1293
+48969 24690 56365 4662 42441 20661 33513 52860 10840 45829 22705 55838
+7909 30051 51812 15748 34141 60287 8388 43774 23009 62103 13734 31255
+51854 2512 45838 28420 7899 61128 27269 1077 55773 35145 13053 50566
+30685 10229 52236 37131 3827 58369 24723 50303 1753 40069 26283 60654
+4099 34877 57699 14041 48844 17630 31225 7674 35062 48591 16450 28734
+58934 2416 41985 23838 56933 12706 50311 22472 38518 2028 61793 20831
+48184 11057 35319 54500 15605 32755 63255 11401 45399 18718 54423
+33650 13801 47804 21351 50860 6727 34059 47091 15335 65480 29248 5421
+58717 35974 18788 62553 8003 33225 40999 830 49436 19938 30600 61225
+13109 43368 22077 64022 7305 30174 58493 20621 34284 52813 10279 29028
+48768 19185 55906 6345 41549 23490 48212 15703 63397 25838 39860 13283
+51510 29242 19748 55146 15690 49457 27030 38739 11913 54141 23056
+42315 1564 65463 16496 33123 50076 11549 62867 20640 38579 7671 60971
+16678 43170 26818 55085 6501 47446 34434 18277 60411 22759 50232 4830
+34157 57684 15487 31492 64412 5527 43553 11489 48006 31370 892 60269
+27102 17642 54846 29703 12446 51365 34777 20395 62520 8862 33486 57486
+3833 37566 52273 19253 32597 62188 9431 42751 21434 60300 15572 32868
+49648 2958 46334 35260 20051 53354 9490 42877 26746 51892 5876 35385
+55159 21655 41548 14497 52584 37010 2597 47629 24455 58333 14851 42115
+716 37490 57187 7593 28799 46108 19411 51701 11574 64415 20207 36212
+49435 11110 30549 45858 572 52109 37690 5961 60992 21496 39686 3549
+64065 19026 34584 58642 704 49241 30921 8232 56468 35273 3708 61285
+38090 6896 49417 22826 41655 8800 53520 36608 17408 49938 6397 54679
+25940 40133 13606 57933 25356 41645 12765 52318 4654 38335 48908 17967
+35862 64256 1928 32324 59610 19354 48209 15427 33202 65220 4925 27617
+52235 17047 40620 24872 53083 5150 29404 63203 12469 40545 23672 52796
+3417 64546 19331 29898 50503 909 42239 27382 18054 58304 38237 9506
+30115 46704 4853 53512 35074 20458 52066 773 37572 55902 15641 34553
+50954 2275 45111 18505 57318 30626 8959 37038 55909 3594 32724 50068
+11372 60208 24539 43135 15355 64725 24207 45382 8004 59505 15788 47976
+25034 41119 9123 61142 29503 18470 51820 9481 64441 31906 12484 37463
+47607 15870 63758 6086 39944 25979 61429 3445 33927 44435 19248 63060
+1149 40483 26226 53972 12556 33847 48860 5805 42853 20834 64909 34582
+14997 52600 37777 16311 49479 21863 43428 6032 59897 23628 44903 15530
+65496 22574 41525 13666 45230 21653 56289 7903 30410 49463 16061 44799
+28356 2179 65008 12192 44168 23594 62845 9334 49710 19705 33592 53156
+8006 39457 26145 64408 9611 41601 26959 51298 13799 30162 64953 3899
+42134 24208 50547 5665 39112 22888 61602 1915 43566 26447 58733 9952
+30043 62917 18442 43519 8751 32838 51859 17368 44731 9641 53414 30598
+20606 56187 13744 44304 26311 54564 5795 40065 25295 52760 1551 39246
+26744 54714 13665 49397 5292 41114 23377 60462 2081 32092 43879 14702
+62327 30986 588 54241 38049 7960 32365 57446 4523 45542 36216 10007
+61566 175 41055 20623 63687 6175 36394 50539 18551 29024 54539 7215
+39663 26023 46601 3120 57666 22961 31413 47541 1666 59323 13759 40195
+24041 57902 125 44937 12033 29052 56285 21136 44221 2097 39467 23165
+53480 17914 29004 62419 15126 38111 49664 11053 44457 36971 2888 60895
+27996 6220 44840 25322 49511 15020 40888 24040 65137 12219 43903 1044
+50471 28385 13415 53185 34638 6344 56050 27631 16875 62476 29079 11450
+58850 36399 1299 48770 20596 62830 29815 12777 47569 4051 62224 27615
+16625 38400 54086 8665 35167 49548 20039 65290 10680 31498 50574 21584
+62961 8790 33929 43288 1275 55560 27414 7168 62200 37869 14968 58202
+27162 17405 48528 34635 13842 53028 25005 41779 6643 54760 22016 40217
+10657 61996 25804 42803 15606 50857 27611 18082 58151 35981 11661
+64941 26224 44487 3095 60217 22878 30584 42784 828 62053 22318 45403
+5828 31199 65050 20057 45089 27159 8543 54591 29941 13201 52348 22985
+43441 7504 29300 56514 11338 41491 19292 58749 36697 2060 61310 10748
+46544 19200 33554 49769 151 59355 30196 16366 45032 35796 6819 56553
+17443 36539 60396 6051 44247 13679 50054 23482 56152 12210 41256 24904
+63039 10111 42462 24213 60520 6715 47020 29554 13906 64870 24231 40604
+5619 60981 21029 44566 13846 64136 29413 16789 35508 46701 834 56921
+28946 6826 50578 30542 19073 36656 52904 4595 31606 56321 17665 44072
+2221 58542 35819 16229 42783 23675 59947 2741 29861 51399 18066 34475
+57194 13966 46938 22030 54654 7147 28738 46858 13691 58089 20718 38673
+4020 56293 28145 16889 59250 38377 8996 27482 47281 3890 57017 30742
+9675 63446 38207 18044 32171 53929 658 40274 29819 7652 57024 36636
+4820 53003 27913 17491 62949 36704 9167 58858 21329 35988 54133 29505
+56318 1174 38875 26861 41588 5252 61458 17218 28335 57865 718 45687
+18219 31776 60507 7522 44522 20095 33949 48701 9849 60255 19368 31372
+56043 13383 41006 23824 52217 5980 39573 22130 55124 2884 35672 48930
+21660 61048 202 41158 23028 34448 47960 2319 60222 25039 39007 9102
+63683 18755 33908 57844 11520 42317 23388 59907 9169 33408 46499 18169
+30794 64426 12626 35277 46948 17510 58183 28177 7572 51119 37103 17183
+28345 60293 11652 42249 22916 64203 16217 39509 26567 51819 13103
+43938 24701 56539 9899 31374 60408 4161 44344 22422 61388 13082 33654
+52516 17344 42385 11207 64460 36397 18982 28991 48536 8354 53434 31977
+17536 63999 36634 7589 52807 14902 47931 26821 59813 6696 45675 36404
+3269 56641 27356 7419 64072 32759 20994 56134 15233 47167 33627 19078
+59336 2393 32265 56909 7675 46709 21040 33457 60701 16606 36499 47104
+4109 64793 23137 40015 12294 50627 34500 6982 48004 18302 29958 56608
+14284 43898 8866 38106 54098 18978 32595 44241 7524 57375 30939 13992
+61668 29042 3921 41185 24078 54796 17347 44436 2863 39035 26723 57644
+13242 31256 45167 16888 53234 29074 4304 50372 35903 8071 63712 28620
+2658 57187 37226 8867 61690 26696 46391 13741 31624 53265 18878 48161
+2565 33419 56965 7531 45624 30834 246 51972 20851 39782 12942 55748
+34852 8279 52374 19992 47537 33671 12167 58921 38042 18207 50775 1488
+34297 61326 17129 36460 57496 3962 45440 28381 16620 62404 37621 406
+50620 24389 46176 6861 29359 54770 15383 42051 26122 56571 7459 41615
+21347 47923 9925 33729 62620 13160 47069 25229 41010 9013 51802 30749
+19963 62795 37733 1473 33144 60154 18648 47597 3568 35967 54919 12718
+32372 41443 19123 58206 4209 31573 54413 10987 47387 25995 39397 1590
+52812 24988 48812 5373 39672 19917 52661 33460 12206 62727 38188 2085
+55914 14131 41760 26014 63087 8427 39971 24028 50819 11478 30097 55915
+5719 46531 19653 35785 57996 7460 43281 27540 965 52494 31582 8787
+37980 59283 16420 35191 50597 6072 42004 24752 64421 14648 46907 36454
+465 54335 19293 33496 62615 13255 40096 23117 53228 3015 27901 59049
+11522 42437 25028 62257 12406 47517 19473 30734 61286 10515 34928
+46396 487 51310 23508 41660 5463 50426 18318 10053 45086 24609 59723
+11448 51445 21005 32218 46946 8912 52182 35805 20838 55991 5700 47193
+25044 58708 1252 40407 17290 53765 29504 2744 37109 46736 8280 59203
+32935 18197 64370 12410 46672 38215 16298 27508 58234 7843 39559 26036
+54797 11883 64123 19694 29832 43574 6201 51758 23403 46888 3040 28794
+49734 16193 62491 4943 38688 26248 53264 2699 36908 56214 8049 50531
+27164 4518 53506 37627 12208 45641 25261 65278 5349 47605 19458 31080
+52572 2447 34543 53769 7358 46134 21752 60756 3503 34474 45429 14231
+53066 23447 40990 15699 30747 47601 450 56390 23877 38803 6074 54522
+21979 49777 3889 34788 62590 12953 41797 23320 51116 2776 47049 19928
+30619 62170 9185 41782 19830 32963 55752 10236 48889 21375 35171 51648
+18655 42084 5000 50650 30106 9545 64601 37401 11482 53282 28027 16988
+51427 38379 4427 27293 45600 9031 54427 20770 30178 44581 8345 57022
+28203 343 59572 37988 23132 64534 4535 46091 33237 23116 59423 1987
+28056 64215 11566 49960 23990 40651 1195 51340 22058 47006 12073 58965
+33580 5203 48774 26189 60295 16120 42570 6368 48945 23968 59236 8496
+39102 20687 56410 32273 12475 47534 38295 18155 50720 31191 10960
+45287 20784 51856 1909 35388 60575 5579 42151 24221 64240 10309 40290
+22162 62153 14662 42894 25574 60500 5970 46434 17961 29293 63748 14605
+39719 4212 54338 27854 9285 49070 30194 14645 56522 24242 42533 6973
+48235 27498 15798 60370 36139 5741 47088 19978 58120 30069 13001 63388
+38436 17422 33011 51186 4067 64938 23332 38593 14655 60791 26396 51394
+4616 41056 23098 53704 1692 33098 65316 16694 47893 4328 28061 54595
+16028 49062 27271 8478 38262 57946 15998 27640 49278 1959 63257 22995
+47909 14629 35628 43531 20277 56496 7968 32943 62165 19577 42041 12940
+59243 24130 44307 8535 55291 27664 16264 48112 31690 20947 61441 9895
+47010 18558 30268 53411 3700 37392 65285 13780 40103 26089 53295 9870
+28600 48223 15483 60892 23624 40894 12972 64944 19480 27959 43732 2588
+62777 29818 18098 53602 10378 44162 32046 7491 60888 21501 31619 49649
+5247 41908 25508 57714 10435 34674 45082 14964 48417 36011 4980 51488
+16994 33548 54935 2557 45898 22924 40255 16382 58173 29264 12960 64518
+38187 16599 32214 60848 23635 40155 4803 47820 18853 34413 65303 3371
+42248 15855 29606 61998 11287 42105 26409 38894 15448 51958 21537
+31173 63469 10704 42477 24879 61233 14609 27783 49332 663 41569 25111
+53575 4141 31088 62481 10993 32512 53237 17617 47254 4540 36808 45466
+7476 55932 16346 34920 62027 10767 30952 57080 8639 43658 22636 35210
+55249 10392 43576 18817 61918 27679 11300 38058 44357 16139 63119
+31484 18933 59600 1690 39196 21542 55534 10516 35129 59128 12760 44761
+27903 17524 58191 30769 11078 37793 54953 17042 29317 62958 2067 33686
+49888 8864 64678 19233 34591 43536 10491 61807 25640 45636 9426 30526
+56804 16338 44297 27495 5574 61213 38026 16924 33160 58067 5014 40002
+24267 50041 522 65433 18303 30778 43966 12611 61575 1606 30527 58930
+14200 39131 22433 53730 211 46650 24357 42372 6607 63163 34549 12901
+58071 31212 17951 63680 37659 2196 58487 15347 35141 51355 18669 46587
+30055 9090 52761 15614 41530 19747 51403 7691 36097 53148 16787 42845
+33494 5355 58702 17698 33042 64869 8066 39398 25859 45103 15254 62348
+22078 39979 10954 52007 20429 34564 61819 3338 32253 47577 18210 65023
+1706 42632 24612 60609 5038 27891 58869 14850 36518 63309 6294 41385
+23842 55735 17543 39099 12957 51537 29709 17301 53578 36535 3454 55031
+31990 10820 50153 21547 35551 56830 1624 42191 21540 57634 31935 17205
+60003 37332 3226 63250 36048 10362 52548 20620 32881 63891 975 50444
+31358 14157 54052 25124 42162 8513 34735 53157 3569 27541 56377 9921
+39632 20659 47392 11697 31872 53994 2325 45494 19651 32278 59915 11355
+29423 58114 19619 44839 10923 34585 56770 20967 44622 6958 36442 64419
+19334 46146 29675 5964 61249 36683 18226 30166 45338 9449 53343 27315
+526 63980 37323 17805 50307 27686 7179 53463 37410 2862 31363 65022
+18372 41414 4112 57851 35891 6576 52215 26932 39458 1154 55093 35338
+15436 59671 27794 19983 48368 548 59132 21468 36632 63181 3846 45048
+32540 10432 56829 21588 48634 5171 33538 55502 11568 45442 21555 36722
+57803 1657 28729 52477 17633 37797 55857 11800 28493 61670 18666 44179
+1374 51386 20725 64647 30313 8705 58013 20651 30191 60937 9396 40896
+26651 63938 7214 49218 32603 3611 54887 37485 8074 27591 47641 3017
+53249 8769 63495 35425 15323 56392 29178 10369 48870 23148 55575 37261
+2281 49972 22342 63904 4645 46294 9359 57304 34996 3565 46249 20591
+51653 6943 37935 56654 16316 31362 51258 9313 28104 57635 15580 37576
+49387 2010 42772 24628 59962 13583 31800 57216 18114 28305 49580 1300
+42635 22209 52589 17971 33170 65166 416 47811 20112 31070 59487 4150
+36095 48227 20317 56976 783 28521 49121 8807 42485 24727 54670 14436
+43716 26554 50398 3304 40494 23547 62729 6271 49271 35933 1297 65013
+25000 41647 5651 48399 20026 37384 57578 12628 44660 28682 4593 57217
+21223 49105 29502 2429 37985 63732 19372 46537 990 36966 58954 14431
+45930 28543 10621 53965 20825 45428 13016 60751 36872 16586 28827
+53800 4681 47715 25896 39386 16570 52951 23476 47763 5944 62243 26512
+39777 13742 59694 19588 29558 48970 1479 43516 21627 52957 5707 47967
+29093 13926 43782 25308 61550 3706 40913 13010 63126 35149 20872 57955
+2506 32385 61876 21968 46452 9996 30705 61126 14268 45427 24901 52067
+10770 42052 20960 56955 2225 31448 48256 7326 55321 36230 86 30095
+56649 14069 41429 22776 54961 9277 39808 21893 31248 49513 11442 53547
+20958 35155 46157 334 54375 27601 16503 58068 33902 9965 47615 25772
+59269 1073 34273 46901 6606 58852 28041 15315 48809 38268 4528 62982
+30118 13519 48148 24375 51605 5673 41197 11227 45143 23947 53133 16293
+28660 47184 4743 58644 12864 39830 24035 43997 9818 59678 37206 2582
+64707 23408 48123 12064 37263 61116 21686 43772 1142 49956 26404 58945
+6487 40048 24906 62244 9125 43756 17778 52379 36184 7971 48704 25684
+42013 2587 61585 28805 13436 53174 31383 346 50934 11720 40751 25596
+52805 10691 38410 56734 5013 31995 60309 19409 48636 29281 11943 45865
+3775 55486 36089 16205 60473 26258 45774 11204 51891 21618 28690 44972
+13891 60703 20386 42375 12015 64082 23386 49785 5431 33604 46215 9009
+56627 32922 18128 43982 7027 52048 27805 17249 54868 36484 2291 45728
+24736 62209 15675 40939 24228 60541 6843 48199 15505 33498 63654 10918
+46021 27098 3148 50745 38461 8340 33934 58598 16840 29390 40843 4550
+55526 17872 34194 50419 1894 44361 23616 56501 12789 38710 21124 59238
+11766 44727 22376 52857 14559 33463 61525 19320 43529 53681 13720
+27982 49885 164 36795 58407 19461 43823 8236 32906 59176 18726 43488
+12499 38555 26906 53195 14767 43646 26282 59416 12759 30446 65259
+21502 44342 5057 36816 61817 19206 46235 33924 7292 56155 18435 29396
+63428 6872 40112 22317 50226 3251 35510 64630 14726 39701 24833 60760
+5227 46184 14298 40357 25928 54359 12040 39432 17503 51478 29443 7289
+64765 33201 15251 53087 36042 20769 61493 4281 32550 47208 7127 63915
+18050 36962 56735 9517 30131 42706 15271 54188 23039 46700 8646 32389
+52346 14877 59506 27889 7084 51266 22152 37322 53460 14439 41863 7465
+59154 35194 13581 51811 28463 10863 55750 32628 20154 51558 7089 34647
+64842 1838 42452 25073 52558 6464 31132 58629 12113 40451 23655 63289
+8084 33045 57517 3693 42691 32556 19644 45493 11990 55345 33379 8209
+50134 37805 15664 61781 24682 39669 11306 60470 20354 35600 56364 6877
+47283 19941 33071 54267 22839 45862 5691 42336 25430 49999 14572 40619
+5019 54260 24811 40322 479 55026 20518 38548 3488 60739 27036 49751
+12790 37018 63580 16485 28261 42764 19766 64554 10159 45588 35872 5422
+62860 25191 52419 15680 43932 6494 61588 25790 39791 7849 64163 19011
+32377 43714 11760 50169 28973 4056 65090 36392 7917 43159 22527 62580
+13539 43880 20610 35187 65420 8708 27286 52436 19647 44282 7446 36781
+59342 15328 34110 64437 20432 48259 497 35238 60498 8810 42917 37061
+21479 30544 56809 7328 47938 28187 18696 51601 33279 10553 54923 18582
+45206 31520 5945 52371 18374 34276 62542 12642 42227 21936 56956 14293
+38846 26907 55437 652 39969 22579 64031 5140 55761 18361 32041 49786
+8313 42954 23985 59011 15000 33887 55819 21003 47192 2770 65152 27470
+16668 50129 37437 15102 41599 8618 58572 36159 22518 61510 14000 29179
+49246 9735 40840 20275 58732 252 36614 62275 7670 32266 49144 2570
+56578 26166 38575 10419 43881 21001 62436 14515 28955 42505 4837 61560
+24545 48907 14750 31823 64655 8161 42831 26594 56292 8929 35995 50100
+299 30197 52925 19245 39721 25145 51256 5414 41442 20306 59968 34437
+15736 65101 22841 48763 5921 35961 54143 13650 47724 25078 42766 7745
+63193 22592 39385 6132 46749 25517 52336 983 40569 26292 62447 5701
+39542 26098 56953 1546 39114 24944 32782 6422 38027 62113 17359 46065
+27596 5405 64225 38318 16181 28008 49204 6159 60664 22915 40794 400
+62960 21267 39557 6542 50781 34433 1813 47065 17774 58479 28861 13085
+42578 1208 64692 21497 36425 50605 11695 44724 25451 54207 12617 30258
+58979 19007 44554 9213 54507 32022 11392 50752 37276 21004 59116 7665
+30247 63030 2470 46998 22338 55499 13381 40856 23913 45373 5549 57948
+11692 41156 25924 55962 13554 39848 23194 52856 373 28115 46606 19154
+61353 32106 4014 57724 37138 13357 61790 20613 43053 842 33271 47243
+17250 59847 2730 32131 62510 16807 27787 50871 20011 43157 5882 60329
+24586 41088 4076 47914 25932 59717 15357 40409 22891 55011 9724 38996
+26702 49571 2935 33719 55505 9581 43460 21778 50125 15444 29027 64230
+10117 36269 58639 1991 41018 21632 65341 27925 3460 52112 35369 7137
+55105 26778 43050 700 50608 16717 31085 64263 11810 39766 1641 60179
+18118 31553 55205 8672 65534 30259 18965 57316 34432 10846 63822 26933
+43279 9356 56676 25866 46037 6225 40648 22641 55987 9662 32849 52984
+4376 49064 31858 13386 57950 27682 17720 46807 36911 956 30423 58551
+19723 45795 2468 32630 56816 13721 48662 27253 6945 57409 37320 21692
+53920 12721 45660 25023 52769 11279 39322 26630 56190 2387 47999 18473
+37880 57982 781 33178 61541 16986 46648 28049 2789 53832 29245 8166
+38380 55039 14481 27833 50388 18388 65276 2119 49028 16949 33837 62129
+3797 42536 13690 57947 25678 39982 1663 63064 22290 42987 14550 57404
+28970 8215 36974 53382 3016 33139 47767 5757 63485 20241 34173 50568
+11870 45962 26291 39321 10114 62402 20145 35046 53724 3861 41117 22980
+60821 5614 40051 17893 31369 44147 7829 57663 29416 1212 63572 24497
+43785 4583 53552 16667 33482 44535 1463 64276 32611 6166 55764 25488
+43940 14525 50532 24230 40265 15777 45483 21386 50198 6197 58063 26747
+47618 1880 35688 55403 17108 47230 34088 11317 38255 57717 1482 41214
+22655 53198 11885 38939 21215 58317 14669 33987 65439 12570 44762 3713
+58846 35290 13969 53489 29787 8703 55484 38405 2127 30919 45329 12243
+62736 22052 38723 122 60422 19110 33180 45695 14463 58308 28519 10591
+65226 33492 18844 55864 13994 30516 50896 19958 42865 10870 48262
+17465 60077 42354 22564 51887 9315 31475 54442 14487 42496 22552 51226
+1634 35817 56121 11046 32221 47874 17684 54948 30322 13712 49078 25559
+57766 11275 40944 24594 52996 8048 35681 55945 23169 48149 10723 31781
+59541 4302 39271 20611 61427 568 36207 52539 6127 39015 25883 62415
+1832 47968 17289 28752 56817 3610 35401 52284 15623 44631 23745 41143
+9775 32653 60073 1465 52286 18068 31873 47232 22880 63538 2264 38706
+26977 60385 10891 49041 21053 34406 58324 6847 41776 14345 50731 21691
+28526 44485 5365 55514 36649 22851 63530 9349 43838 35230 20475 52064
+8583 47563 36909 1167 65358 29981 14717 48588 36462 17130 63399 22117
+43073 9245 36044 56328 4479 30463 62793 13437 44791 21406 62024 16009
+41096 24236 60091 833 35772 54436 7055 44387 22808 51969 12821 30361
+54151 6322 45908 18580 56230 30831 14473 46362 22572 62970 9594 40540
+24346 57441 4882 42065 25949 52430 16486 28831 48828 12151 44385 24087
+39479 996 47083 13353 49522 24135 39379 6682 52526 21477 39043 14666
+62078 35027 17919 52292 1098 44423 24700 59411 15556 39280 23686 54030
+3109 33629 50885 8217 60059 23164 48940 10798 36029 56045 16141 41042
+22895 52612 3810 35548 44792 17554 62712 1442 42005 32357 18239 61312
+3197 31491 57695 7232 33614 51873 15759 45200 30215 11477 51047 21381
+39771 6554 55297 19144 35258 49291 11941 58485 21038 31215 62499 6223
+32661 46179 13362 40355 25803 55830 8328 36961 50738 19807 32148 46027
+6565 59842 30286 13299 50614 32610 4476 47100 24142 64287 15917 44378
+22575 59777 13049 30825 43151 16588 54432 6714 29353 61071 14093 33172
+54790 1106 45025 27713 14591 64176 37350 9643 47961 26276 52535 10239
+62290 21467 33628 51491 13235 46580 34722 11571 55202 19761 31249
+49978 10061 58090 24914 40134 15587 52354 21877 39388 8169 63293 31079
+3926 58450 34742 8835 65172 31982 18103 40329 11577 60417 22313 41755
+8117 63882 27077 3317 54461 28475 16894 34035 60096 6278 44592 26063
+61728 3136 41298 25810 52172 5724 38661 26650 49429 16847 27935 62294
+791 38040 49217 17090 27213 51158 15238 59140 25631 41180 9272 56554
+26970 48659 10180 28759 54841 2720 35852 49839 19583 42338 4010 48876
+35246 8379 57689 37701 2473 64726 31353 21077 55128 4227 63152 12992
+39662 25324 60786 2754 35184 57154 12035 31457 60206 15001 42089 23904
+64794 3034 45081 9993 34759 62313 4398 44841 18297 35895 60079 2982
+29611 63106 16916 43458 6024 29775 53862 15970 42167 24203 55460 7990
+30944 48953 16418 42071 23681 57435 13252 43214 20380 34953 53662
+10316 44217 24338 63888 12704 30971 49663 6046 61430 25707 45970 14332
+39675 25105 62744 6551 39505 14213 50180 21141 54355 8220 33296 42215
+4805 64645 12892 45077 29430 16891 55198 36198 1783 64058 18421 47926
+29485 12153 50382 18907 28606 56304 5061 41213 23006 58046 30273 12868
+44940 20708 52699 33724 3018 56624 10062 31065 46155 329 58499 28233
+16536 50830 37284 18756 41867 1343 51977 29897 7643 54020 31913 13868
+48002 27384 16931 61321 34581 4217 41922 25554 62802 14896 38722 25245
+42965 7948 61281 37142 2519 51051 18314 32634 54100 11083 34232 48486
+18387 58677 7814 37796 62600 3864 33545 51095 7286 59635 29543 19939
+62761 35684 4116 58212 18403 32819 59614 2366 48240 30018 8497 46836
+26508 63130 19592 41511 7430 33510 61021 11073 44275 21250 63327 15195
+42308 29241 12784 37997 64657 4230 28163 47382 8559 63187 31129 19665
+60322 10875 47815 29705 21002 55057 8693 44582 26065 50352 14313 40045
+21724 63248 9953 28870 59520 4380 42480 25617 63905 13128 45501 24289
+60974 5166 40424 25444 44392 1881 53606 18852 41463 24624 52255 4145
+61065 19898 29652 46682 15608 63443 172 29002 52974 16576 41795 22756
+56144 7579 36936 60696 16968 41450 529 32067 56135 7013 39594 26611
+51717 1941 60492 23259 36065 45204 3511 51372 17303 40653 24560 58743
+7559 50556 29216 17540 56137 32187 1799 36810 46320 16317 55469 3515
+41116 25630 59605 5488 40850 26800 62774 2533 40173 23516 47870 7041
+35736 60166 3438 46216 34578 16597 53669 20856 47368 13126 52573 24991
+42203 880 54116 25694 44433 5144 52552 30800 15274 49678 38453 12915
+36596 62125 9597 48084 24461 39602 13051 51277 18835 30832 55872 10819
+43343 23928 59864 15127 54834 6591 32197 43924 20835 57505 12712 36013
+64076 6846 44508 32660 3328 53323 23058 45869 7174 35450 64239 15684
+42394 22964 59448 6692 31543 53836 15862 27871 62646 17929 44337 27179
+13492 52429 36588 7533 47339 26323 1123 33396 53138 8013 46750 20231
+27965 48720 6789 44209 23301 53651 7654 33327 48745 18943 28578 56972
+15771 39996 24576 54331 9574 31750 50209 19288 47416 12439 34188 51737
+21245 60674 3134 34215 63901 9266 40778 23470 58591 11964 33447 65390
+3443 29720 51246 7768 61562 27444 4206 59392 33243 18618 41575 1001
+56124 16687 38704 20684 50572 4041 56386 35495 10950 48102 20212 57312
+34062 3813 44979 25152 59449 15480 47423 28425 18816 53233 36412 3157
+62625 23273 47149 11371 32976 42314 7595 58638 34831 2976 60646 38161
+13253 31343 64271 15824 46200 4241 37912 58883 7306 27217 61615 18211
+37870 49319 15821 54676 23420 40711 12265 64616 33459 6265 48150 26125
+60908 11037 35625 46248 19356 65075 3390 37118 56233 9062 29976 48645
+19398 57966 8679 31801 49590 443 59620 19927 48196 29232 13646 44673
+25441 59164 5490 39312 26322 64984 2928 43619 20733 34145 53655 14674
+27464 56470 11001 41759 22698 53654 8149 41095 14719 51786 26245 45327
+9910 39967 23540 65119 12573 33846 57100 3818 38890 14190 58241 26301
+50661 1794 39895 25875 49930 6651 34710 55235 2787 46277 21779 51801
+14085 34522 53893 18396 44263 669 40307 25381 51824 5479 36731 59437
+15136 33231 64296 5899 41671 23661 54264 2 44299 23474 49629 16521
+36179 54232 9154 32409 56088 1347 29421 42973 10900 49985 21590 64802
+13122 33962 47758 9284 59183 17246 34689 43652 11430 57279 5353 34776
+43043 22958 58719 9502 35887 65000 2944 28415 49841 10370 47797 21376
+28517 54209 11842 43177 23927 65465 10409 33506 48091 18895 41845 8727
+57054 21580 30179 64902 10813 46976 19383 33879 42519 4627 60080 13639
+45132 24635 61709 6545 29085 43412 20065 64711 13905 38764 22897 52471
+7557 45116 21842 57036 13572 31712 65531 17603 27721 49604 10586 29244
+56944 1669 42794 26795 38649 5842 61271 19179 29949 58697 13007 34230
+62898 18575 37605 57345 98 27477 51789 19986 42867 4317 53494 18119
+33186 64268 906 46332 36563 7091 63020 20915 40083 1851 46747 36331
+22457 63570 9600 35000 48343 2904 28980 42722 11360 56861 20991 39499
+12690 61853 31988 18798 51677 4426 30684 55998 11601 39905 26102 61711
+8844 37478 47401 362 32320 59787 6562 46560 29488 16543 56218 23560
+44902 21472 40874 16326 65149 30871 10538 58325 36439 17886 63615 3802
+39179 26842 61495 12762 37405 51654 6323 31429 60822 1475 43307 21978
+64283 5617 40496 26313 56547 108 39841 11200 46119 24814 49965 14713
+27920 53399 1676 45303 21933 54750 10141 43915 35243 18694 48903 37795
+14204 45762 22953 50101 8894 57830 34898 25715 47954 9562 64974 26929
+42688 15120 30620 60873 139 43801 29218 15910 65510 37474 11984 31719
+51577 1137 34826 57528 8801 41004 25043 49711 6553 30290 59895 21268
+52073 15029 40601 24355 53206 10330 44532 25416 54408 8 49264 19449
+29119 53848 14031 35682 50022 11957 44110 28205 4773 63003 37214 7606
+29745 52685 3471 45094 24693 57016 14129 39733 21751 58982 5230 42498
+25358 50288 14852 40078 24145 63624 1751 35298 45271 15743 53418 24643
+40598 10612 36208 56792 4517 34528 63804 11834 41194 21370 55929 8826
+32018 47068 12657 61184 29973 21 47905 38265 17381 30978 63627 2726
+34840 46453 17838 61407 32101 1480 50021 20419 55115 6082 41674 25237
+53336 16843 43709 24348 54580 5712 42705 17132 34778 65375 11648 29868
+59007 16379 40383 25392 62472 9082 39106 26700 60849 7146 29686 59013
+15349 33917 56351 9583 46866 22434 40435 2005 52953 28373 16858 57113
+32269 12848 60765 37926 7552 31734 64684 2925 41309 23150 50433 13943
+36622 62287 18002 31302 56562 3886 39654 26251 55517 5783 38986 26689
+51117 1122 64060 22578 30994 48358 17382 55290 7935 39913 25904 51185
+12546 45159 34575 16131 61992 38348 5141 33903 59490 18598 49746 3242
+38676 21019 57716 4940 29831 63174 15657 37968 49870 7138 34835 55351
+2456 29993 62900 15874 48273 22621 39730 8886 53997 35249 20830 53140
+9318 32753 48693 130 57271 31409 16331 61336 37809 10965 35326 54263
+723 38378 51754 6320 31529 59091 13836 41524 24002 63655 9630 46220
+23400 50993 10669 37381 45052 4367 49446 27094 9530 46781 29789 16024
+64540 34536 11015 59438 31189 22464 57031 8655 42294 28458 15124 54271
+23397 48567 13352 29207 60771 18086 50351 4356 29045 45374 19217 53748
+14240 61471 22115 33644 46673 5802 58518 25258 41552 1048 47547 24397
+60631 16992 36391 50328 1660 43311 21476 51235 15108 57218 24317 40740
+12095 54473 34378 3728 62910 38180 9046 58773 34822 55359 4578 42750
+23032 51575 535 41498 24434 49443 14296 56540 20641 40803 918 58646
+22136 47364 11953 40998 26060 56265 14061 38926 23859 58835 9935 44518
+22276 65099 18295 32757 59145 4639 43130 35593 16844 62715 38080 6598
+28209 48402 15787 63207 27124 256 58209 28989 7307 64499 31807 17046
+40379 5377 60615 19664 38493 2983 49294 22970 57046 6914 41452 24178
+54561 9183 45852 21882 52970 7318 42022 24187 62213 14212 43694 21586
+60938 12472 34170 57091 18941 44039 641 31483 65094 5740 48409 19301
+33083 62381 8242 40320 21457 33827 60987 5985 42997 24449 64894 1450
+32132 59658 10431 48144 19676 31784 58853 13701 42029 21304 61362 8423
+32612 54373 2401 46909 33960 18332 53313 11852 33312 57188 7255 43447
+20594 54774 27958 12372 59960 37326 5877 64690 22156 48800 15445 27798
+52388 19488 45646 1169 51487 24239 42434 15811 57784 24017 39781 9866
+50848 23356 58346 5618 37034 49970 15804 28033 55984 5154 39813 23544
+57451 12057 38551 27021 61031 15267 48868 268 35622 63948 10013 31679
+48617 20416 55810 9316 45096 23107 51743 509 32472 57166 12365 44293
+21021 56241 1639 33350 50000 19087 45685 4744 40977 24651 65314 13459
+31032 60082 19270 44019 11095 48689 37195 3609 50658 19498 28113 56476
+14601 46450 29287 19663 57526 6744 43876 25174 52093 7958 46837 14309
+33059 59920 15968 42429 22093 61659 12397 40113 24003 49371 14664
+41002 2765 62674 21997 33452 47701 4352 57735 21226 31359 53568 1454
+27316 55829 20285 45746 8023 41807 25699 60949 14133 44838 25629 53530
+11027 34359 48950 39 27595 59702 17772 43826 25476 50953 8517 34940
+56523 753 30340 49168 18084 59432 3159 30898 62591 12534 40495 25157
+44394 8753 51028 28753 3981 56205 20247 28189 47532 15269 27154 62089
+19812 46512 35239 4916 54240 17403 34510 57787 2673 31308 64761 16934
+28408 56898 14855 33282 60138 3612 50915 24410 41716 5582 55216 21027
+46892 2381 36560 48825 17193 61314 35294 3415 59006 38447 7969 35009
+45702 11742 55418 20385 33018 58691 7510 39845 24491 44813 1532 55896
+18504 31467 51320 14957 35104 65384 9918 43620 32672 5578 58125 27657
+13931 63681 33886 4737 45524 30450 9823 64391 22208 43422 15750 49406
+27986 19538 50760 14205 7259 48660 28523 11439 56369 37173 19208 62268
+32329 5886 45709 35300 10517 52251 25233 44829 7952 33016 62920 19170
+50617 8411 31210 53199 3639 47845 32664 14773 52097 38072 6459 29169
+47806 13447 55323 27064 8467 50758 30896 17751 60283 37339 5272 32499
+55753 12509 36094 52800 21237 42482 2602 48631 26499 54018 13074 44389
+25167 55685 11380 45816 18488 32363 62570 12419 38905 26070 60167 2427
+34773 56246 17905 47734 4992 39253 26714 52290 2147 46165 28055 10448
+50524 35729 17247 53981 37498 11898 29211 57347 2551 42785 23883 55089
+11177 47246 17159 30105 57052 9206 40772 22862 51260 15586 39709 26077
+55509 1950 42958 24171 53783 10406 39942 23252 49682 16705 29388 64438
+6832 40879 23344 62559 93 39377 26506 60456 10903 36173 49359 3608
+46270 27277 17341 33039 44122 2175 58160 32332 8282 60854 38101 17553
+30210 63254 6488 35520 52657 3421 45050 22180 64359 13069 29376 45425
+20724 61982 8581 33414 48139 19533 64759 10764 44376 26564 52668 4314
+43341 21295 30294 58602 11664 45305 22789 40115 2492 60772 26885 38766
+4920 61894 17944 43276 23882 48861 5687 35433 51460 15581 42694 24413
+63692 8766 31341 54405 20172 47606 2909 35849 52205 7978 39404 25485
+57970 7007 29947 62362 22486 42399 5117 52227 34576 9363 61713 38310
+12271 31641 60304 2540 39700 19487 63544 24122 43736 293 52667 10043
+31122 48115 3385 57030 29886 7253 54367 36275 20273 50402 12182 28066
+60513 18047 39249 10602 64188 18990 37987 48062 9095 30792 63550 15484
+37509 50529 1062 31969 56625 7736 39931 22190 61468 16413 46052 37295
+13356 53963 4135 39224 21491 60596 14019 42111 24928 65262 7401 44645
+23983 41701 14746 49815 23295 58222 6027 34657 63457 18584 46847 33177
+12558 38160 63903 9055 53430 36341 2807 43483 11085 59974 21628 30530
+48550 12185 43195 21130 54849 8713 36200 46921 1310 53229 20213 36473
+44054 12350 61103 18013 39340 26351 44633 10373 63313 29101 6181 52464
+27249 10622 47251 31305 19765 57206 27488 5116 63949 24660 42932 191
+48783 17479 64826 30801 10945 50313 35144 8400 62834 27529 3749 48990
+28618 13431 53907 22424 46269 17607 37811 55431 7045 28678 48407 18321
+58475 36851 2318 51954 31585 7016 60012 37737 1481 31238 61771 22453
+39990 16065 64040 33766 3486 50301 12289 27680 54055 15633 60042 30319
+4107 65516 37171 16537 55496 28153 2207 36479 44720 17621 63582 12096
+39491 25002 61957 2472 27642 57679 17194 34076 61555 1088 37390 46771
+19587 56193 2766 43078 22514 52322 14755 46383 23338 40385 9327 62614
+18245 32781 59560 8595 39476 22491 63407 7189 38788 27026 58797 1762
+40371 21442 51708 5325 43111 18433 49084 27832 11411 63714 31214 20178
+54650 8515 32333 64515 16370 36791 58789 3826 27451 62989 7954 45548
+22217 51521 16837 32185 60031 6498 38738 26908 63318 2258 48700 18569
+37595 54147 3941 31141 57540 6669 46759 18589 33046 64131 5782 38931
+26807 62365 751 33426 58366 12044 43291 26547 56820 10435 31962 50906
+18796 44885 4747 51658 20048 28846 57408 13975 38163 61810 9607 47556
+23969 41118 14651 49792 28468 5001 54386 36676 14924 49227 27835 12061
+60517 31127 8109 37911 47504 2107 56751 13958 39818 25433 54001 749
+42819 25338 38856 7048 59460 17750 34263 63370 8966 47389 18604 34256
+50968 6538 57700 30524 18807 46794 13761 52325 25302 40671 7887 59676
+19363 29135 64833 10608 32761 57993 4422 41931 17531 36814 61183 10266
+28993 58727 15847 43147 23742 63048 1112 31956 53709 18474 45982 12342
+37529 59762 16904 27355 49355 899 43034 22637 54567 15321 45419 26683
+53715 5493 34056 57402 17066 40018 25740 63097 13804 35124 45752 19224
+65386 15374 32373 59545 6178 46917 35057 725 54356 26266 44036 6482
+51690 28141 14513 59155 35087 3958 53150 19345 28689 62201 12782 42296
+23848 52455 3679 30327 55055 8903 31898 64510 20131 42826 11427 51987
+26459 47129 5861 39140 19739 52765 34579 10548 56790 36437 1560 47215
+19816 30137 52009 14508 39780 2198 60086 25701 49409 5731 32665 44802
+19302 57995 32462 16812 51035 37828 367 62996 28230 6785 50123 33802
+22466 58990 14168 41642 24352 62465 6540 30354 50266 1992 35211 52989
+7484 58021 31838 16644 54730 38076 13540 32917 65034 18405 51751 1338
+38137 49582 15562 33777 52889 10404 38989 23201 56396 4922 41392 25702
+60235 13157 45792 19416 37975 57598 16568 36770 59553 7634 30387 63118
+2576 42513 23078 51844 14617 35429 53977 8315 27233 61084 20258 41454
+14792 46123 24176 53675 11799 44714 2629 32010 52425 8872 46594 29291
+20082 57931 38175 2003 47761 22292 42862 13844 48563 27416 5259 52695
+38315 19732 59950 6650 49381 20911 34724 56922 8799 46826 20450 35271
+52846 7682 43778 22446 51339 14980 29120 64824 9872 40521 26278 59310
+7096 29986 61836 2162 44098 25137 51059 4658 47097 20862 29386 56875
+702 42131 23967 52069 14054 43528 25518 64325 8288 34764 54973 23134
+61688 8914 37246 51411 3441 35668 44819 15018 56864 23653 40915 5981
+48888 20453 37858 55396 14475 41547 24845 60845 4739 40864 13449 45388
+23634 55728 9561 41670 22084 34258 52435 12190 27841 63638 15010 43904
+24792 60632 9855 40783 22581 51868 14916 44546 19918 55656 7796 41692
+24363 53531 3062 38741 20917 47904 6158 61488 29771 16460 37703 63969
+8512 33214 52863 1011 28241 50623 19122 58944 3866 33740 65170 11500
+44459 21831 61389 2423 32395 57025 19582 42796 15521 58796 33056 17966
+52180 24469 42919 5995 60721 18998 35159 57085 13414 46735 22904 50814
+1892 41270 21890 55476 31857 2991 62431 23956 42015 15244 53627 36274
+7526 64283 33314 3369 54543 35911 14255 48233 38397 2305 53572 27890
+13348 47134 23530 52842 216 39930 25666 50715 6093 30515 55846 12180
+41505 21928 50937 9040 36431 64876 2140 31622 43776 10134 57924 30403
+17683 62540 38006 6157 33076 65153 11388 38967 21750 49894 12477 30476
+59452 6707 47106 23021 55038 8372 28570 43265 2076 52240 21710 28969
+42518 11146 62342 23789 48390 13748 32631 61426 2343 41996 23454 54845
+11982 36589 49097 5657 46001 25221 57958 10321 36052 63774 14372 43206
+24542 50187 5462 40193 24515 57151 1270 36252 62707 15050 31748 58665
+3604 45458 27184 16387 63805 29098 9718 54364 38225 4798 59178 23741
+45069 9417 41098 17747 57399 28670 13166 52321 4629 27975 64461 8260
+45942 27170 15270 56642 38440 18922 61673 4580 44062 32181 8063 51915
+37761 16664 46301 22364 65338 13604 28873 42558 20727 49484 504 43523
+25133 58506 4553 44632 36157 9640 59483 30316 21609 61805 6933 41611
+26576 62938 13778 35584 46514 18827 54558 2073 39203 26759 55347 6221
+30653 51869 418 40177 21525 50673 15893 36357 56872 10974 33000 64892
+757 44752 17095 37429 47813 10760 56825 32826 4903 65028 18552 36032
+58963 23761 56142 14786 40833 21656 59728 6334 44024 31172 17402 62747
+34752 7203 57256 20503 34165 61845 9893 28888 48385 14485 41885 25761
+54776 731 30188 44336 16627 60161 5258 40331 25462 63762 11562 32439
+57329 4401 44870 33467 18132 49122 12758 54530 36706 16520 33164 55210
+10915 35478 60480 16044 43202 11676 49914 35663 17765 61442 5083 36903
+53763 10519 29453 49657 17462 42214 944 30980 46965 16970 57439 28903
+13027 61154 37185 289 29724 51263 17343 62107 28383 10113 47943 29956
+1414 52697 36900 17647 49267 26627 65294 903 34538 46588 16081 61552
+4620 31205 58352 7858 42142 34210 484 50182 19373 36262 56085 3154
+30523 59425 8605 47688 25179 38656 13038 50001 19684 63480 11298 44237
+24245 54605 13590 34030 56567 2584 46796 22258 42095 15880 62661 36695
+7769 42623 24976 53820 15604 40365 24385 56027 9052 39095 26866 51886
+7365 46879 36099 916 49099 27423 6969 65308 34783 14947 48746 27910
+9081 49574 29321 3925 63870 32663 15413 58127 28866 7344 44074 14754
+53042 37378 11239 28691 59795 1264 44531 27933 13026 50117 29931 17101
+56811 27214 9002 62230 32108 18012 37889 59492 7317 34078 62791 19412
+48671 11745 33469 64424 17528 45127 32967 4950 61579 29049 17496 49216
+27603 14880 55227 24053 47769 4719 37321 53240 10643 27303 51692 20397
+42313 1746 58236 25029 44514 3680 54297 18940 43103 32093 1252 37453
+61013 11775 33264 58445 17334 45241 9265 53760 35821 18493 41050 4691
+55096 36992 16562 29637 58076 8476 44869 27774 16254 64435 31365 20593
+40967 2515 51807 19114 32366 41276 1752 58612 17263 36428 61186 8100
+28826 53236 20742 43665 8984 28137 47565 19080 55531 32772 6816 46463
+37346 17155 61943 27609 11609 50189 32421 15539 64650 24667 48221 991
+36858 61193 22369 42389 14273 49269 36209 18426 53860 38151 3335 33152
+52597 10498 29698 48171 17697 64019 27490 3028 57762 34156 8673 54915
+38008 4083 59860 15466 33260 62000 11656 40634 21788 50747 16269 28269
+54132 13997 45348 4196 35829 47584 18993 53998 2973 32094 59185 7974
+29337 48549 21318 62346 11432 41714 22265 64536 14579 43348 25536
+46562 8925 61424 29014 4159 49297 27108 13281 56277 30651 21560 62208
+3256 28527 42507 13310 50576 24864 41285 7636 46876 51244 10694 28108
+61951 952 36082 49572 14424 27103 52862 10171 46780 23723 40693 237
+51053 17847 36119 58989 3221 32286 62556 9434 39831 23907 64981 12620
+37412 49279 18646 31650 54109 1845 46364 20934 41203 13795 50454 24016
+58086 619 39866 22144 46812 5516 64269 20336 29299 49289 1408 39921
+24760 65270 6438 30953 55419 12440 47107 30946 19861 57604 3747 33995
+59961 13009 45203 25299 64911 5807 40716 23055 49828 10357 46015 22102
+59602 7757 42342 32814 3090 57897 35479 19328 63515 12639 31415 57002
+7534 39965 21134 51979 10944 56720 28127 19184 50686 35837 13523 47213
+22005 54541 16567 29142 62126 9295 41467 24443 50861 14236 36086 65190
+2110 43562 26390 59922 5545 38513 27010 57888 1262 39703 26328 51937
+12193 39170 25551 58783 5125 48461 29614 12722 54976 21499 46986 6148
+36943 59909 312 30702 48833 18950 43244 10978 64101 20235 28875 59816
+11486 37516 55000 20084 43960 2974 62235 32748 17049 59161 37106 12651
+52866 23740 46071 9661 35457 61547 19148 48085 27394 4669 64929 38355
+15935 47238 19444 58459 34670 10139 61652 36711 836 47264 38213 20420
+50938 4846 44527 24615 55856 14385 29622 43871 4132 55059 22894 40396
+2406 59232 21147 48156 13577 36998 57343 3293 33854 60915 8206 41243
+22071 63855 16008 32183 45657 3025 57148 30829 14872 50386 36352 8230
+61416 26945 38598 10477 64485 21728 50469 14127 44240 24544 51434 5646
+39276 23884 63779 3155 30504 58977 14899 44988 22928 65080 9565 50925
+20202 34197 49611 361 56032 37395 7393 59564 14929 44189 25854 60448
+9200 49394 21954 29346 54653 11772 47644 19230 34195 46333 4866 59246
+16722 33472 64333 2065 39666 15649 61053 22302 52365 501 34024 47686
+19589 57834 3774 37148 46044 7913 30575 55066 19791 44500 9964 34379
+59205 2069 28971 62387 7492 30243 55558 13632 40865 25239 59457 674
+34307 53899 11361 44730 31100 15899 48347 28094 19593 52448 25747
+46103 7223 39232 24140 56618 8197 34439 64332 2678 40931 25480 60624
+16919 29341 57692 10092 39956 26028 52082 12739 34663 43145 15830
+52713 5224 38600 26222 56566 9761 49608 33819 4545 59942 35650 16422
+38476 54576 17959 37936 47174 5487 36371 51075 10160 33849 55004 18206
+59594 34 34055 61517 17308 30602 4692 34834 45136 17060 54249 30088
+8628 64638 37580 3720 58751 31964 13469 63735 26760 43345 11467 53532
+24592 44233 13676 47448 20545 56593 7167 33519 50962 3868 28818 59551
+8614 41230 23693 62353 7399 38703 22852 60427 9332 38597 26964 62870
+11801 52047 25604 39655 9610 57662 19096 32115 59032 9171 34841 51724
+18784 44103 27983 1990 63933 37953 15693 51391 22411 39702 6514 56374
+20012 38709 14849 54031 34624 4221 63215 28150 16121 34805 54374 12935
+46788 25870 51943 6898 42093 25723 50329 3983 44593 23122 58962 14933
+31974 44572 6638 37756 60303 1679 40777 25064 64398 3644 36732 57355
+6291 44897 35011 18200 57999 7149 45986 28897 17059 34217 54762 8931
+48350 21795 41215 15123 46138 22858 60737 7412 42924 21530 65502 8235
+45705 32521 14560 56421 37757 2017 64331 30440 13627 51757 27313 16963
+62873 36337 5223 56628 25985 41001 3571 54093 33999 17653 50688 4605
+30936 56634 12324 39414 23685 51808 1552 45432 26059 39587 5508 56486
+20910 40546 541 54978 30092 10312 51524 33348 21438 56614 8470 31640
+50771 3674 42633 23754 53335 14749 27945 60052 6824 30298 63512 17238
+41248 1345 51333 35476 9639 58315 28112 13839 51128 35209 11264 53226
+25776 41181 7764 44429 24636 51614 16563 37022 54379 379 28899 49774
+12070 60151 24559 40534 9014 63333 29312 18204 47433 13150 53105 20662
+41523 5917 56433 25520 39225 4037 62813 20544 34459 57549 13305 41349
+25739 50312 8129 33142 55886 1586 38968 26636 44270 5432 62629 17599
+28895 43189 11453 51093 22040 32807 53776 6249 34951 45781 18385 63029
+6771 35786 44135 2959 65135 27114 12945 49691 37694 21923 53501 11029
+41975 26620 50813 5458 42390 30585 18678 56307 7301 43469 21546 29633
+62141 13614 50888 17224 35197 63182 4115 29608 54519 12257 46697 23821
+41650 16349 48021 21761 64899 6073 45051 20110 50700 14706 39514 24322
+60072 6729 36581 62726 1128 43067 11132 58838 18150 31665 63532 1795
+51483 29553 15106 46586 23636 55935 8761 34939 51307 643 42922 24105
+61240 5607 45000 20394 65197 1163 46809 26961 60743 17973 42517 2818
+47456 29446 19790 53172 12301 27533 57310 1823 32443 62529 8102 28809
+49834 15397 63608 25955 44115 6204 48832 29933 20523 46469 10032 38266
+57291 48669 22182 63100 6569 38985 23023 51207 18891 45789 27875 16365
+52032 36583 8115 55289 20249 39013 6098 57854 22406 38546 1651 53049
+26881 42515 15883 58045 24791 47690 11323 34067 54840 15336 42104
+25719 55483 3102 42565 24858 53793 6170 48307 21111 38539 2874 55639
+27012 43436 4861 53819 17411 45955 27283 3327 60777 36612 14466 56198
+24134 46061 7942 32756 62344 14192 50502 26665 42950 2534 60828 30642
+19446 50592 9802 37710 56696 1901 40316 23405 64809 11103 38571 22618
+59196 14643 36430 61747 12172 33751 43227 2703 64226 24374 49564 12332
+28750 45859 17841 53504 10784 42906 30239 15500 49506 22884 63136 1189
+32066 52276 20335 61068 4938 41557 22872 58589 13730 33533 64047 4156
+51066 30376 10778 55504 36144 3279 53844 28035 17940 60279 38353 9301
+27196 50988 17394 35822 44017 7470 58052 34293 12221 50526 23479 44210
+14158 61702 21357 39291 10046 47404 26550 63562 14147 42430 25543
+53713 7279 40971 21338 63078 8335 54091 34645 13596 64569 24888 46935
+11924 37749 62231 17654 42433 2160 48762 26094 61149 13582 38700 21817
+64130 5603 37442 49804 16170 34941 54984 10722 47990 21545 28514 65203
+15576 45406 20744 37075 60975 5808 41888 24206 62453 735 34142 49508
+19370 63635 5366 32063 46309 11061 58986 20636 35070 44446 6983 54950
+19929 33966 43768 4552 56355 25919 39353 593 58950 27022 47913 15037
+34339 53604 18344 44955 10806 28462 47355 96 54162 18908 29532 61170
+12361 43057 24139 48820 13441 58676 20773 35324 47224 6608 60823 24567
+40288 3469 64854 17842 29020 56807 853 39784 25710 51639 15240 28435
+55247 16782 33284 57705 290 30795 61862 7022 44089 20508 56031 13897
+33215 60442 12418 44552 25912 65378 10277 35804 53957 1870 42170 23708
+56743 6435 40890 22708 50080 16474 37399 58182 8000 32258 60231 1395
+39489 26456 51765 11117 38582 26975 63437 5235 46523 19241 53576 29230
+14705 51188 37382 22523 49624 4804 41178 21396 48179 12671 43096 36664
+5445 50109 19323 30186 62599 13089 47064 20730 38609 11289 55163 26994
+38606 13613 54221 21900 38509 6463 50716 24541 58992 15151 37928 63798
+7895 36831 44866 20948 51121 13783 40957 25566 58422 19685 42926 1393
+38913 21224 60714 14253 35477 52035 3884 64161 28253 16497 1798 42285
+14020 55626 26615 41563 2586 60827 10805 34000 56808 1416 42068 25814
+47950 4013 61278 26985 41773 8999 64202 26133 41342 10874 60711 31469
+2628 44920 19400 64588 27866 313 36717 60868 12647 46681 32237 10713
+65350 17407 31143 44368 13002 61207 26520 41333 10449 63723 21436
+34077 49641 12929 37719 55127 10407 29584 50115 4573 41617 20192 58593
+28285 441 46520 35318 11144 58103 24558 47378 8444 41943 25297 58570
+14068 45508 20850 32079 52827 5152 44277 20264 54625 549 45751 30519
+6317 51013 27734 18876 53191 35690 9778 56080 20882 36694 62266 5770
+32291 58772 20134 48098 8680 32827 53449 13864 43615 27270 10858 47942
+37460 15346 31458 52798 270 47209 28506 9370 42251 19956 62136 37863
+16088 28791 47674 9736 34744 50350 570 44994 20466 61924 33811 4190
+59191 19843 47833 28793 2783 55666 38204 8407 32874 52297 1407 45758
+24161 58453 5853 43495 22854 38526 198 60280 16651 33856 57533 11096
+31550 47549 17534 27991 51295 3473 43354 19711 57377 27726 5364 36323
+54246 20795 39821 6661 43905 24060 57373 10719 47762 18945 30996 58900
+1956 45328 23184 41899 3885 58590 38164 7549 32146 54590 2975 47502
+18139 29046 56305 9229 46230 16957 29564 57633 10215 40021 23200 55740
+15440 29994 42920 3979 65512 17458 32718 46197 1457 61150 16817 50866
+35501 9954 64083 23396 42618 7427 37032 59957 2383 30464 61934 7722
+50007 36549 19916 64644 15341 36387 49470 3823 40958 20942 63183 6940
+32784 50296 2722 41263 22693 54220 13322 30531 57685 15723 35732 48785
+11860 42844 23120 61647 9932 31716 58413 4194 36995 50489 8339 45655
+23235 51154 15186 39234 25401 59574 2487 36929 50190 8054 27954 55376
+3103 40138 22498 49541 14812 31416 59982 12554 38817 26559 53209 10469
+33688 65108 3078 27538 49486 14926 42981 23140 56765 13334 32965 60979
+2432 42754 22295 54549 12944 31796 42504 3430 58156 27134 8809 64587
+30386 19041 55368 34850 6900 59331 24832 53067 17116 32646 58229 3479
+41377 24604 52316 6217 64124 23031 42207 2437 59395 25086 41480 9330
+63232 27043 40479 10377 34347 54170 855 28029 48341 18503 58109 3650
+31602 64713 10423 48764 4790 33946 52684 11505 57321 24908 41944 8237
+54681 22278 44768 12965 35328 58571 51689 17532 31152 48079 8386 58178
+21116 31336 50215 15372 43666 23449 65237 12024 38697 21889 50016
+15411 33839 55557 19361 49260 4989 39039 23292 53845 14998 36321 50659
+6549 32484 53404 16936 48464 28803 5039 56094 21760 35421 51494 1241
+58668 23746 39000 5738 56798 16737 36955 51560 40 28632 61474 6938
+41720 22771 63243 17244 37494 54401 9163 34241 48278 17333 65183 23221
+41032 4913 52514 18556 35678 63807 1200 31437 49042 7118 62737 15011
+42625 24778 60343 9410 39544 23330 63869 16943 37570 55268 15295 42378
+5127 62815 25835 40270 194 48051 15712 52262 24783 40400 2464 65444
+25880 39401 4722 60488 19578 36516 55395 2854 64779 24677 39323 11699
+61597 19192 36655 55030 14696 48583 27344 1713 57267 38449 12788 63114
+27118 17272 57590 36383 6610 28369 52135 16006 46088 36477 11125 63673
+21807 42615 15312 59639 27955 17899 64729 38248 12551 32729 50327
+18453 61497 9195 48348 26937 44738 5191 50852 22931 41698 2023 61137
+36817 15796 59585 38270 8527 32348 49722 16634 59053 9471 30851 65471
+15113 52721 35016 115 45343 26391 56136 7781 40245 25153 62060 12877
+33852 52540 17639 27135 56537 14847 42908 24650 61937 8163 34856 50094
+20303 32236 64978 4839 42479 26100 52838 1945 34206 61661 8533 50508
+21379 38238 54042 11629 28184 57534 22262 40126 6340 31463 46259 18728
+51697 11474 57150 20158 28830 48510 12978 41379 23912 56637 3450 32009
+43786 8447 59710 18005 32015 56596 10196 39150 26845 57808 14445 29892
+64090 11126 33579 48815 1358 43454 24033 55762 4700 31400 52546 7773
+37048 49210 20046 43251 11161 63306 22137 40705 12424 30071 64125 4674
+33842 52888 12114 45359 29656 14721 63549 37913 16454 32359 52933 6749
+61614 24986 39796 4461 48934 19631 58486 200 45142 28763 15842 55649
+38054 21047 61733 4761 36281 52381 8750 46427 20568 29455 58477 9239
+40806 24912 62340 10631 45934 35196 17623 54223 37906 2210 44207 13821
+61628 22793 45234 315 35865 65503 11149 44259 27409 15932 56564 36639
+12413 32608 46623 14799 50374 33656 7180 53108 20097 45315 3268 56109
+20980 46621 14194 31943 61655 6674 40889 24949 52474 15609 43164 23629
+39375 14708 61895 19145 31379 45969 3086 65447 37294 15256 31775 56533
+7402 40413 23427 33584 63830 5129 45498 23861 39992 13477 62558 5799
+34902 57706 9333 40145 26625 54728 6701 30755 59642 792 44530 12717
+32406 61609 20940 43471 8305 63488 24507 40762 12296 57176 22673 43794
+9503 36049 63266 16260 45396 8951 39698 25992 47136 11423 53592 18877
+30736 48589 8541 32936 57791 20931 46728 15854 35721 51344 1561 45565
+28728 13011 61773 27122 3149 54881 37762 9990 30758 60074 15888 44664
+27968 11835 53029 36603 16770 40900 26791 55758 2238 36885 48585 16471
+32290 53809 8051 46471 29315 1807 60528 21121 34143 46023 8802 58480
+20228 33311 43481 8011 57770 18797 30869 46098 11703 56699 17880 34233
+48581 10143 30349 50961 20820 42127 6803 56395 26010 44891 3544 31507
+60054 7056 35669 52562 18208 31319 48419 4879 37186 49654 11768 41519
+25038 65005 8806 32005 56169 1144 41497 26053 49931 6380 32121 53545
+4058 34973 48130 7875 27810 57513 2324 40332 23798 54462 11795 38779
+20309 65051 15169 30094 53370 12055 44858 27222 4889 48859 29258 21046
+62746 1185 42664 34519 24364 45331 4039 49295 17501 29665 62617 12200
+39270 17386 51611 21075 43670 5102 49338 29401 8303 63094 38457 436
+29969 51805 10676 40116 23096 58935 1610 43197 14541 53670 35058 18733
+59811 12125 47336 20030 43817 27745 14796 58640 30618 7613 36465 48572
+3426 43242 14413 62229 25614 54582 2026 38778 26875 44865 4770 65105
+16642 32734 55296 9453 42686 22310 58690 14006 50646 24284 39927 5987
+52566 22165 47557 693 31593 51901 18881 44525 5122 56894 19639 28714
+62300 10380 39520 21394 63590 12883 28313 59370 1644 34732 52864 17442
+30765 47290 2653 54535 24254 44900 16241 40086 21392 61257 6193 48858
+23101 42226 793 58596 25427 47298 11166 35043 45884 16777 64300 9549
+43726 34383 20857 61125 11182 47155 30880 7347 50809 12770 44910 29089
+18399 63700 35377 3881 55768 17646 48014 36004 24 52801 32957 20400
+60671 7050 28730 48286 12037 57545 26118 39169 9130 52529 28386 14831
+49343 31419 7881 60493 38165 1427 48376 22114 57892 4831 29506 61971
+16692 40341 25915 60049 11222 38663 26837 64015 4972 36149 50533 16757
+44049 21544 59308 8677 33720 60533 291 44742 24819 54741 6524 41574
+22704 51288 17435 27636 59108 827 42627 26212 60302 11458 50281 28374
+18637 56930 36166 439 52739 25661 47521 18353 29186 53498 2879 42998
+20797 63028 11031 36512 51912 18251 29083 47377 3463 56347 16975 34502
+46849 1377 59175 21163 38596 4143 61463 24657 49509 2188 30462 52832
+20176 59969 4357 32061 64349 22620 42383 2491 62214 25192 45061 14014
+38993 4339 64749 30635 11416 59146 33077 20608 52614 6376 36552 49561
+16696 45416 22274 56250 7502 34008 49903 3339 61273 24258 45238 4694
+59343 18769 30483 50060 13426 28441 62411 3755 42260 24343 58302 13587
+35899 49165 11718 27453 55818 16973 30108 49360 4261 61259 27917 14393
+51286 36843 6827 54225 26487 43155 683 62941 24729 46306 5170 59761
+17690 34175 50139 12609 63269 22700 40566 13488 46477 21925 64590 8058
+43955 23992 59044 15403 29534 60501 2354 44191 20871 53976 14876 40100
+23483 57205 16601 34111 62479 10726 44553 23264 60590 13086 37791
+49868 17550 31612 62719 6753 43819 26087 59544 3042 34335 46536 7508
+58439 32885 18868 64009 34416 9813 56770 36542 12669 53250 19002 48215
+11159 60719 19900 32971 56849 7162 43378 25911 58246 3043 32869 64686
+14501 36578 59769 19124 46060 11707 35398 57411 18724 33069 64068 6025
+48960 30498 19024 55790 37454 8568 28538 50365 3687 39734 24613 64314
+6276 35833 52197 1005 46900 23832 63171 12504 55565 21261 29610 47206
+8505 41658 23607 60841 13363 52931 21398 29773 49750 932 40187 25576
+62595 5522 38682 26951 46731 1701 61762 26136 43322 11330 65249 25679
+40703 8030 60678 34827 16494 37672 50638 6833 42042 24996 53235 3285
+33449 48444 18921 42486 14402 56261 27724 6420 62101 36286 19746 59836
+9591 31782 57041 1311 46951 28609 11460 56498 36587 17677 51959 9290
+40524 19829 59494 28454 1604 51942 32625 22952 56563 5232 40420 25929
+54134 2574 37258 64097 19793 33958 57600 847 41614 14193 50132 25428
+45190 8275 30521 65243 16154 27544 50120 4429 36308 46856 14146 62863
+23289 41589 5559 53868 33255 17794 63337 37393 5034 55120 21664 45903
+16845 29010 63125 10285 41253 25489 48919 9101 31656 55362 75 42611
+22624 52178 13243 43342 23348 54690 9631 30171 55876 2688 39646 26159
+50247 12438 30033 56947 9560 47195 26761 38696 12432 62299 5333 36610
+48679 13938 53830 20664 38781 2978 14907 55256 38141 8948 30487 64866
+17221 41465 4527 35648 62043 12681 49223 32465 14905 46168 26160 54142
+5511 34625 64484 13621 39794 26085 52218 6916 29158 54687 13379 45216
+26767 52071 11185 42637 34720 17559 57980 7529 42208 26540 50580 15806
+40492 9483 56154 31856 19573 52285 7440 60421 26656 43668 18786 53410
+27485 5671 47447 38071 15377 57794 29372 8876 62916 35291 858 41591
+26197 64549 14533 30541 40996 12831 54850 21836 38729 10793 65402
+34640 5694 56284 20059 30113 51625 11013 41387 22365 65042 6805 38127
+52608 2948 35256 64036 12983 42621 21529 35103 47617 2038 63709 23633
+40068 13693 58247 22445 39787 9403 33012 54024 14982 44287 27552 1907
+47583 35366 6297 55988 26528 50447 915 30201 40630 16927 53732 3705
+34580 51541 10983 39383 26418 50540 4995 31158 61140 10260 43964 3258
+28172 51204 19832 40321 502 53101 30329 15939 55801 4935 46377 19442
+34367 52367 13578 41772 21781 55142 16804 28086 49337 679 42733 14668
+52590 25232 46915 3234 40571 26360 63611 5830 38873 26816 52364 2466
+39667 23664 54513 10079 38719 21757 52391 9190 30535 47892 1462 27989
+54115 21689 42289 4623 52976 13667 45502 26307 39147 13017 60623 5433
+45595 25309 62937 18051 32493 57040 12685 45799 28804 17921 60061
+37974 9798 31482 40720 18619 51037 5361 34115 64523 17320 49061 29507
+6920 46045 33635 10386 62954 17624 33612 56216 12605 44454 21273 52946
+10527 31187 54320 20195 38852 7423 55677 33926 15153 53525 20630 28199
+46970 2994 59319 20289 31975 61329 14150 45208 22308 58339 9539 29746
+65488 4953 39805 23610 45485 15760 50161 7716 40315 26403 51610 13434
+34660 62839 17168 43363 32427 3303 65001 21768 31875 56786 5029 43308
+18371 62314 37265 11938 48146 19023 30553 60481 12974 44409 18496
+49130 28225 6253 52645 27338 17769 62160 31277 9943 59883 34134 19566
+54982 5672 37785 59008 11420 29936 56935 17314 43602 1029 33536 51024
+15439 29022 56738 2801 45953 23228 41431 14319 59821 32910 3862 51289
+35077 18793 54077 2252 36541 64976 19735 44213 15600 36889 62633 6889
+33758 56398 1730 39626 26446 65320 13919 33014 48023 6116 63058 22848
+41162 17473 32347 64274 1973 49772 20457 30938 56288 16151 28704 45262
+6823 61375 24920 41992 29639 5541 59952 22356 48574 11743 43506 24782
+59312 16082 45240 27619 7140 58830 37120 2090 60978 21325 40472 9962
+48948 22542 58258 8566 36169 62631 18561 32895 41336 5590 60197 18540
+31779 64139 8670 47186 23978 39243 14625 62983 485 33490 59274 21348
+45971 3750 39809 15162 49437 22947 40733 1058 56964 12217 34938 50413
+19731 64112 2277 40563 23580 50390 14752 27767 55288 18092 44228 6603
+54284 23640 49313 8883 33930 57935 99 42229 23935 53227 16136 37736
+46076 8752 57394 37128 1093 50149 33114 16126 47059 24441 56651 10294
+39953 23644 53934 8495 59928 16978 31459 44650 9021 56084 34837 3858
+49081 16356 60675 25414 40925 7321 64162 32745 18522 54502 23827 42576
+10942 58481 20239 36127 61258 8889 42909 23641 63794 13576 44871 21607
+62039 8457 29360 57816 14097 35881 49423 19359 63902 31535 12317 57734
+23885 45609 9555 34298 65409 22677 42055 10504 58793 28448 1238 64165
+37649 8721 31970 57796 10895 36378 61882 21291 40478 5592 60872 20077
+30271 58714 13373 42080 23831 55865 7961 43863 22484 59531 14170 41843
+26777 63277 6017 41796 23494 56724 15753 37593 59129 10297 32623 63452
+16865 40579 24316 59971 2172 50325 20536 33642 53437 16013 41684 64
+51337 10690 37633 48226 2800 31826 55925 13508 44995 22270 61969 2439
+42911 24471 59256 14864 39524 205 56954 21028 35604 58579 3179 43059
+23837 52254 6144 40934 23318 58015 2940 35232 64380 15850 44141 4250
+60559 30781 19333 47063 2024 37230 62523 12338 32954 55088 9930 44134
+27354 185 54663 38069 8022 34886 50370 19509 46104 15105 53693 28275
+591 57542 34539 20455 64667 3822 42358 25170 53130 5310 27645 54865
+10564 49170 25056 41169 12665 48488 20511 36386 50558 7170 27497 55058
+3493 38107 52920 8114 41394 23880 62818 9905 34963 56989 14823 36734
+46862 5403 51680 21772 42255 1861 47334 24703 50761 14930 41226 23044
+49146 7926 37446 64804 20702 27535 59695 8523 44000 19393 36087 62045
+9601 29391 50577 10803 43514 23964 56320 8172 42155 22543 58343 13070
+30488 51296 4562 57472 28002 12544 49586 29979 19615 59696 16309 47210
+7229 42835 22359 53838 16510 35775 46577 4103 55477 14228 42700 23401
+54366 8448 34714 44027 3351 63519 33863 19265 46815 11955 52563 37678
+17756 46102 31470 2374 57415 33564 7767 50607 36434 1134 55881 31549
+17478 51414 23208 43849 12525 57461 24749 42912 85 32305 50156 20433
+44202 2814 55479 15625 46271 26314 51106 904 39804 26000 55629 4709
+34204 52041 18456 44096 29060 6615 36382 51103 18518 65138 32882 10093
+58289 35399 17671 46574 24846 59924 7021 32636 43329 13986 56079 31037
+5282 60716 38349 11484 30066 59528 21012 39504 2828 63403 26083 47092
+15283 29736 62147 7668 44941 27756 2623 60745 33409 17934 27339 61984
+14091 28985 58584 4655 43230 20018 32677 62586 805 44973 26558 38946
+5249 53190 19959 29288 47256 12672 62494 21241 30525 45038 1381 53081
+28341 14196 56700 37639 4504 61841 16475 32624 45130 3008 52299 17980
+31803 55563 5376 39565 25939 56294 133 33933 47362 17982 38091 54677
+1836 27073 45885 7762 38229 53764 4577 36760 61307 18776 41289 2633
+51703 20649 31018 45627 14687 49407 22436 30034 53622 3736 42393 23269
+49946 6625 29528 55927 17795 36107 49936 8277 45541 33050 375 51358
+18542 36893 64372 11866 31388 47692 1026 51285 18610 36243 60250 3537
+33480 49597 6787 44064 23481 50480 2819 29395 55037 7815 34705 43729
+11681 64599 28626 9862 38274 61398 20384 30402 57934 16765 27598 63410
+8782 36191 50359 4764 28592 54444 17000 37436 49530 7911 32428 53389
+23226 40816 9216 50789 16832 31221 60273 11952 38896 26676 61863 8723
+32021 50476 11596 28449 41813 21695 52020 9729 36747 49793 13186 58910
+23994 41301 6068 49477 18573 30712 64548 13249 47323 30392 17285 62940
+27406 2254 59712 32323 7456 36538 61537 16465 47928 29757 10617 54182
+37458 18283 60229 9386 46017 37208 18022 57922 30720 7314 59829 34527
+2262 63384 29171 15816 57915 33880 13955 64734 28821 17667 35615 58401
+1202 28757 48445 20076 41820 3230 59089 23159 40163 13129 56397 26606
+39173 18803 64181 7308 35233 60289 2543 31068 55608 18784 45472 4002
+34717 47451 16054 54439 29782 6537 47098 25458 57380 706 35883 64500
+13677 39745 26599 61723 6369 45484 24857 40090 10443 47707 35516 21384
+60928 2507 43804 36723 9906 51667 20846 35272 62090 936 28173 57648
+11735 29478 61238 19767 38569 7225 60333 26926 45928 13189 58747 22240
+41723 10281 54932 30857 1342 64322 27343 53993 7198 62896 23933 41068
+15071 54847 20146 28102 63703 13953 48381 35505 9414 65072 38403 4732
+33567 47574 16602 63180 27310 11901 58786 38269 17437 31668 65436 6406
+39141 22304 57779 14148 43565 20305 61990 11542 31274 58536 9859 47543
+24939 61120 12696 28186 44658 1954 53737 27882 8167 63601 37622 4098
+30478 49008 16403 61897 28647 8509 47959 35724 19304 51909 1685 33175
+47706 8009 53251 31608 18914 43545 5971 52291 35715 20136 55417 12624
+36794 49110 19760 54190 5306 36385 46690 9603 51070 34662 21571 60940
+10855 51641 18391 29354 48879 7600 59103 17742 33053 64712 2750 40465
+25209 50341 5889 38980 19717 57465 11946 45949 35652 8762 51385 22195
+29723 48360 10107 65329 24190 38807 11259 49989 19497 28884 59889 9827
+41310 22417 52671 7043 28259 64896 13181 48560 33845 15579 58718 27361
+17576 50321 28633 12045 46515 24564 56682 8594 38240 63241 4293 35828
+60710 10030 40119 20103 59094 12949 33623 62947 15379 44400 32702 2583
+65246 14336 28302 57074 20625 43036 10529 58038 28984 4576 50634 35834
+20721 61571 11008 31326 46198 13094 53256 27441 16679 65268 29851 9728
+35957 61546 19272 47175 12627 57678 21255 30269 47720 4433 55389 27188
+7565 49434 34147 3490 38482 53466 14132 44283 21634 58901 14955 34151
+46730 10928 64919 27970 20009 60552 5781 44274 15531 63721 24855 42323
+4991 47994 23611 53194 1402 43704 20701 54988 16935 36318 48545 408
+59604 29644 17545 63511 4688 29304 45255 14865 52968 21287 35228 56432
+4026 41738 23443 53668 5279 35768 51430 12390 43490 21698 54903 13757
+40311 23950 42598 5621 58274 22378 44458 2105 30432 49796 15676 32141
+63942 78 44894 21473 51170 15451 41889 23548 52508 10389 38002 45220
+563 49983 23287 43889 5639 51146 16270 37556 55827 6964 31987 65422
+17033 44413 31765 9593 63261 35969 4269 53870 12248 46517 26537 42010
+13251 53381 24746 39894 9197 57839 29228 13300 61026 38455 1698 33025
+63866 21453 40340 11963 52033 20462 30842 46786 3365 52919 17888 32825
+49765 1108 64193 29314 18217 53634 8593 31229 46791 17819 63749 28524
+5073 57159 30379 13374 38220 48650 9180 34200 51091 2890 44960 25499
+53089 16345 40810 602 51966 25524 38662 5865 60826 20129 36059 50112
+13156 34749 16989 48075 37218 9505 32080 60594 4063 46723 37144 10892
+44092 27058 3340 53985 29184 20194 56755 14694 28347 51206 8988 37647
+54501 4358 28439 50640 11090 42302 24943 59804 8879 35500 53548 3225
+29380 45894 22639 50066 1709 40178 21878 54464 4886 37508 57253 11065
+30900 48565 16162 42676 22003 55051 12676 45071 23381 53529 278 41726
+21430 58391 12093 43003 24014 63884 13149 41200 23488 61006 10191
+36092 57575 16857 28180 60228 3590 46555 23407 64480 10157 29138 43168
+15846 63651 23809 39574 1933 54592 16401 31584 45772 3480 36715 57650
+14614 41945 23815 51947 10292 42903 22659 53904 12104 34172 61639
+14734 42770 24095 64522 4038 29772 49034 17616 58745 435 39877 26214
+53298 5859 41898 26198 58902 2070 35244 47572 16145 63330 32375 11593
+58096 36546 3882 42940 22177 60769 5940 36123 46897 947 64447 32768
+6242 59855 35713 16390 53758 28227 11237 48507 27304 17731 55936 6194
+43551 26471 51585 1600 39016 24788 54766 11725 47937 19360 37025 51768
+4233 30806 62316 16301 39870 23995 45805 14820 54782 7653 41433 25376
+57988 6421 40277 22937 55613 576 37973 48142 18199 56404 4291 40004
+22785 32989 44804 948 62003 18174 32783 42866 13775 59479 36857 18591
+65352 27053 7102 32482 61101 812 39412 26457 57255 6403 31805 43862
+1498 51656 35921 18735 56342 30726 2669 36593 54647 19798 41076 14809
+65435 30804 13225 57638 33851 5357 63281 22353 45988 10352 34360 55895
+20827 43094 9053 57893 31478 993 63896 27180 9500 38057 60360 15292
+32754 57643 10699 40589 24671 56611 7109 33435 48244 3188 63661 18670
+46086 32945 12532 62247 36396 20892 56601 6121 47944 22809 41517 11196
+35083 62460 4054 30124 47791 6286 61367 27165 17870 54509 35778 11653
+61852 20270 31038 59380 9288 40980 24810 51962 12522 29653 54560 426
+48949 28498 15337 43593 23040 58573 30674 1244 61539 20752 44238 6191
+62685 33080 18175 51865 38116 7323 27079 55046 18265 44788 5367 33996
+59997 17089 42860 8645 60916 25448 39200 11948 58744 21957 42839 14104
+36272 57175 4012 42159 23577 55770 10698 34015 50411 15041 42171 23695
+52744 7891 60092 24608 40988 14853 65054 21349 39869 5526 62826 34281
+19699 57853 9018 49396 26946 42977 15428 55916 4638 44662 29233 59609
+182 51183 21964 39890 12596 52901 19000 29424 61674 7343 52253 38079
+17188 59958 38485 8027 35161 45441 2568 59549 31315 19294 47000 14622
+61361 35125 1867 52874 18298 48741 30714 12290 63339 37306 7178 54917
+18152 37074 64543 13259 28742 49052 17455 41765 24623 63101 6331 33520
+59617 2760 40610 26057 61034 9999 39030 26020 65486 7325 33799 53983
+3513 28416 46319 18395 56937 4834 39134 26619 48559 1320 33133 51381
+13312 42548 29408 7008 35270 50911 648 58024 31325 11216 45369 18959
+59983 26116 42149 8588 64871 22982 49703 11873 33760 63185 1571 39819
+25691 60105 6587 36976 56588 55 31301 50949 7662 36735 46832 20422
+55237 9273 36559 42898 21171 60792 13145 44676 22132 62462 9411 32457
+54807 13377 44216 27245 4483 50904 38431 17248 27583 49282 10518 55689
+31133 19804 53430 9755 41939 21805 55094 15241 45131 27072 1787 49540
+37501 19559 57591 32651 51 47645 34392 18672 64702 10620 45035 22012
+60240 5262 40962 26066 59249 9538 40785 23110 54056 7410 33895 48962
+1661 59677 30385 18166 64792 34617 2359 46952 30592 14038 62692 19851
+45194 32095 11406 52583 25652 42262 14863 60519 6921 51380 25653 39985
+9205 56968 22986 46739 1854 28036 54073 11399 37517 51662 15661 43253
+22860 52997 10308 41219 23569 48398 16077 59445 27532 12583 38004
+45499 9839 61308 27250 11595 58123 34302 7983 45561 26005 51617 9584
+41493 26529 49724 14218 39017 26521 53328 3196 48105 24417 40169 16329
+51071 38250 11788 32840 52423 19741 47768 2546 27744 45700 20520 64964
+1206 42216 22665 60521 15444 39431 24600 52411 9064 27737 47395 4857
+53495 14743 39336 26046 61093 8285 28713 57527 16227 43653 22272 56090
+13481 33174 42401 9808 56970 31528 4826 47542 25399 42402 2375 49615
+33717 18177 62517 3982 47410 35534 9069 61165 20879 34704 59539 8184
+48272 17001 34518 52394 10455 39021 26105 51328 14574 47787 384 27807
+63555 16965 49023 35595 10951 58748 19947 49003 30146 2150 54434 33514
+18560 47649 4707 55441 34038 7450 61403 26618 51584 11303 32679 63280
+16515 39380 524 60339 24673 39078 3477 64466 18911 45417 32517 1595
+56665 36368 9998 55137 31544 17830 49201 11494 46412 23564 39083 17093
+64801 2485 39889 25505 62469 10085 41241 15877 45744 25806 65397 5702
+43055 24707 58673 1849 35041 46030 10355 31170 49858 631 27247 62295
+13762 53258 24264 39945 9886 64730 25738 44011 7631 30844 56215 21577
+45438 5392 41085 23253 50609 15481 44528 25193 59650 3942 32977 44406
+7709 61607 31819 675 55726 20837 45147 13797 49937 29679 18738 52051
+5043 34493 56559 13384 44539 22247 49994 15959 37900 62538 9395 33675
+44924 20803 52470 14966 65016 22696 44254 8424 61809 21145 37618 58996
+14552 47016 27171 17601 36779 55831 4437 47947 30628 6580 57308 37592
+15607 28911 46466 5616 54058 20288 31552 57089 13640 47052 19344 27860
+45784 15511 60595 27215 17728 53579 28666 2372 59839 33522 14887 51778
+28697 7159 55765 37841 3396 29289 46429 19796 49686 28481 7749 56011
+36550 20365 59660 1307 34654 62282 18768 45446 3029 39978 26596 61804
+13659 49866 29373 7985 38352 62886 17327 29405 59356 6924 40989 15059
+62427 23467 52652 8226 39776 26982 55559 13290 31269 46262 19879 53514
+869 33735 61246 14915 43857 25366 63498 12458 41327 23538 53361 9916
+39929 22031 50114 16177 56973 35937 4786 51642 28559 7713 63722 35558
+2011 58137 19839 48476 31651 11124 62871 35513 19028 50681 6296 37557
+58710 17660 32770 45933 4108 62734 27458 9036 57641 36672 20722 63946
+3838 34983 52490 8267 32970 63019 3356 48814 29538 17740 51191 37871
+755 48882 22833 61600 3996 39060 19842 59277 2166 32777 60758 6645
+43703 19703 64837 12840 33321 58546 6288 28003 61254 18154 40886 6772
+62658 29714 16833 58778 37085 8359 52458 31203 16895 50706 29738 9701
+57261 31908 811 59159 37406 17147 65292 24387 42233 1478 47156 19786
+52688 37600 2919 32058 54247 6800 39661 25471 65077 1722 49250 27915
+17240 60203 37905 12375 64033 21777 55356 10346 39575 26510 43575
+14137 56047 26168 41029 17824 53011 2731 40516 25531 56495 5785 42891
+22454 64937 3638 34106 59282 19392 43699 37426 10125 31046 56298 3135
+41031 23945 45692 6778 61864 25698 41743 9306 65118 26962 41026 13286
+50664 23048 43810 2690 39022 20548 48867 7042 54475 26289 44227 18970
+52038 13715 47945 31247 6255 58171 22778 43897 15478 27725 50783 4430
+43319 24672 60694 2087 32282 58956 6452 50509 30717 20860 46804 12517
+51939 22735 58464 32438 7020 56494 19481 29702 48984 14401 38132 54642
+17669 27295 64361 15245 37056 57566 19095 44055 33912 4898 48789 17724
+55254 35150 1078 52005 20653 40335 10811 63990 29320 16706 60619 32353
+352 57594 35970 10195 29983 47788 14814 56151 27089 16613 51988 36984
+11471 40876 26040 54735 7384 36972 62666 15007 31751 49225 20447 40408
+2148 59832 32077 10624 55684 24737 48428 722 29744 58531 11059 42101
+4226 38728 26935 56061 17949 45572 2124 32013 54823 10630 38102 61538
+8118 42324 24251 62925 14529 40384 23528 52105 357 34914 62061 17505
+43314 28533 9941 50363 35889 3290 65261 33323 8591 49709 38246 4404
+35018 63581 10973 45448 25403 40036 4997 62233 19387 47953 32407 12018
+63944 35710 15828 56394 720 37297 64663 14569 30968 52422 8797 44016
+27148 11899 53020 36919 22450 57306 7374 33075 47367 2257 35407 57867
+19753 51465 4462 33997 44095 12521 54697 25186 45269 5896 38589 20906
+61642 2211 33297 48845 7171 63755 16527 38836 26883 50152 10857 31120
+55633 2951 38677 21276 57241 6702 32575 47396 3950 62112 29290 10663
+42821 24249 61245 12212 46446 22674 40283 15475 53507 26754 38708 5209
+45619 21898 54065 2566 41968 24399 64177 14432 49283 28852 10310 55169
+38000 16482 29991 46925 2216 49666 17157 29053 54943 11473 40747 24047
+55700 15132 40130 20965 58891 5591 33589 64166 16292 43324 31209 11247
+53657 25335 44101 13631 52746 22695 40204 15043 56594 24868 41488 1272
+50535 20507 36075 45873 3580 55551 24015 44088 13390 50434 34499 5685
+54357 25059 43952 11516 61087 37305 4648 46874 19155 36017 49908 12947
+29075 51272 10190 44947 31515 16585 60459 38293 12020 27105 64241
+16941 45219 23057 58735 14258 34403 43163 10885 53239 32988 3366 48377
+23818 41500 6061 45341 23114 52835 1508 60790 24157 38735 4937 63803
+10828 33508 45538 20157 62018 11334 33503 50366 15299 40831 24000
+53162 11116 29019 57507 4729 50435 21616 44434 15133 64701 29256 12576
+51131 35733 14838 55955 22666 38866 228 53222 19353 32211 62988 9937
+46541 24641 57743 14478 42591 30145 4377 59015 34511 8756 61402 26088
+43246 12090 34610 49523 7576 59035 33868 18823 63943 12572 33741 53817
+15228 45323 24318 41787 13973 55443 36910 8087 61532 30037 3769 18095
+36645 45044 13559 51832 36362 2795 63355 30760 8406 49350 36110 3773
+55718 28598 6632 51831 12011 29596 63461 21343 42703 7262 30979 57809
+12307 45056 26374 53833 2712 35950 47545 12995 51763 26146 43254 6052
+65032 19526 38053 50254 2303 36187 59469 9388 43426 22560 64394 3183
+28642 58964 20127 42902 1227 57696 27542 8714 64189 30149 17021 53175
+35531 6078 42274 19432 61338 36203 14263 49767 24963 62829 16246 49148
+5845 41295 25144 64147 17110 48170 28699 3971 52355 32300 18241 49687
+2448 34925 54096 8870 42726 20974 56401 12326 32390 54901 4045 44735
+25048 58028 15860 40417 21802 55224 12640 29339 52406 16262 41803
+23606 57223 8287 50832 17836 31262 45164 1484 54067 23102 40972 6039
+59368 25765 40236 18956 47759 5080 43061 22396 62786 15737 33404 47740
+6118 65365 16464 40859 26033 51469 14936 63387 23802 41423 10340 28834
+47169 15962 65096 23667 39136 3138 60439 26909 50713 9896 40503 25208
+58528 14986 40444 24030 57299 3359 42592 21559 64955 6108 45527 26032
+51529 13443 40111 24954 59079 14423 43873 19173 55387 35003 1224 53596
+17650 36502 50889 3744 32808 59820 9077 42738 23217 65086 13433 49299
+29999 17514 55944 32089 8598 45405 36112 517 60824 23314 44081 5655
+62130 18846 35422 58360 7439 32435 45853 19195 60402 350 43542 30540
+7169 46801 23557 53124 13014 27952 46084 6415 57257 18348 36270 64669
+7545 30724 47552 4436 63084 30302 8626 48733 37009 16029 61973 29147
+8281 54131 37374 15647 30389 59741 470 39891 23729 64141 14941 38983
+3424 49671 28492 13908 53821 26150 64360 6698 39783 21995 61682 3731
+34064 56772 7387 48906 29136 4505 55281 33354 8711 51332 38019 922
+30698 46994 7501 62927 27242 16468 57838 37283 9642 54084 30345 16693
+58810 38028 13401 32709 46345 8636 57276 22333 49902 16823 30169 55170
+4402 47407 29214 19127 57018 1947 46916 30420 7626 62393 35886 16447
+41483 25592 61194 7136 34107 52486 967 42537 21871 57197 4335 31502
+48776 11694 60267 25424 45918 5467 40210 17887 53827 31144 1372 65462
+35285 18517 56127 12833 47152 23037 41065 1951 54709 21748 62463 16755
+29180 47304 134 42363 25564 52137 5277 40166 22128 57539 9263 35532
+63253 1006 28080 48958 14879 38399 54274 49895 1578 28528 62323 8039
+27080 54074 11824 42713 24020 60809 12756 45097 20329 33973 47229
+16243 58897 35882 2240 45940 25084 60808 15710 40907 23727 62396 6187
+39288 22800 59022 8104 38639 21170 56695 11348 40580 24055 52679 12252
+27655 62273 17627 28662 46639 5398 51424 34743 16490 38458 48318 10189
+35706 52853 12293 45662 37535 19118 51780 3837 44086 23097 57450 15110
+47110 27698 7447 56422 38136 2600 32257 46278 20513 59898 13076 33808
+53393 6655 40346 14834 60989 25847 39958 9364 65079 19985 28525 59407
+13674 47084 26738 38834 7428 64305 16424 38777 21195 52081 7143 32420
+61171 1877 43232 26329 62379 6371 33232 59026 937 43527 32559 22853
+65148 11398 41978 25976 61169 13479 51118 34775 17694 44432 8572 51729
+26938 57189 12232 35525 50071 3582 28711 54400 17986 44935 31097 351
+60089 9923 43921 30822 5199 56339 21257 50151 809 32587 53674 9366
+43097 22261 48898 13357 30860 57043 17454 45914 4176 52981 35473 8908
+47048 25926 54883 12674 32243 40507 19650 56264 8174 30810 63057 156
+52134 26890 38516 6231 47983 25964 60026 9454 41043 22007 64248 13456
+29500 47249 19223 56475 259 40011 32378 7628 59573 37739 4061 27918
+60180 16643 48743 24883 40293 13282 54453 20383 31166 51508 12565
+42814 24520 65041 5106 39120 26585 51479 16623 63477 37156 14182 56310
+32805 2091 38063 60889 19899 33213 49467 1556 40097 24402 55357 15504
+34815 45114 18198 58376 27691 3820 55187 35039 11671 47345 23136 65332
+6994 48479 20208 35907 53090 9809 42295 21812 57877 33770 18828 63050
+36393 1622 44630 21119 51952 14389 42038 25941 54666 11827 40555 22908
+63426 12856 36771 43971 15231 57184 20261 28646 61658 12482 53569
+20893 35481 50446 4960 44388 28727 19520 64503 236 49013 35555 7986
+29112 62997 19317 41520 14861 47205 34272 886 59833 25933 39692 13605
+63988 37004 9791 31934 60350 13597 44070 22755 48609 1456 56600 11844
+32203 54304 15948 40032 25108 59442 9695 39031 26566 63993 15764 43450
+34228 8369 57979 21719 30125 60747 12198 48225 26067 40736 9685 51153
+27013 43296 5698 63579 30924 17581 48848 38290 4211 35653 53639 11362
+61036 20709 38550 10291 62221 27041 49025 3401 30398 51629 16412 44732
+21441 32908 59707 7506 27309 12012 34068 55681 15183 46922 32254 18185
+36905 59188 4981 40234 22868 52467 1295 61576 23549 41926 6115 49308
+20778 54752 8616 33474 51671 3613 48268 19085 30195 55766 13779 42021
+24263 63614 4043 46062 18925 34033 58242 1437 47138 33318 8060 53686
+35514 14544 57421 30981 12121 54348 27093 6065 57001 29194 17163 63161
+32613 5505 48319 25051 61964 13071 39748 29903 1834 64778 33304 22241
+43994 13653 60764 27812 8675 55513 37779 223 29707 47231 20024 58421
+23908 43069 1217 56946 21623 33583 48952 5501 41668 23597 52567 3058
+60344 22431 33570 47634 1020 58746 24401 41956 13950 49379 23198 55891
+9720 39183 22467 50418 13406 29894 55107 15569 47422 3686 52783 20868
+39057 6680 46656 30713 2893 54933 23923 61875 16836 38863 1627 60335
+23480 40358 19427 61231 10615 34279 56814 13416 39444 23501 50326
+17276 58967 37476 13947 42658 25380 61045 11804 41464 24321 58656 7573
+34756 64200 1289 42347 32864 21622 63353 11597 30750 44010 18187 62543
+6814 35864 48929 1873 60391 15496 44448 36289 18653 48410 11349 42467
+21803 65426 12964 44621 20162 31163 52492 2864 43420 25728 55415 5730
+34237 44783 16281 61130 24280 48074 12244 40658 22629 52050 10976
+34642 56742 4510 31510 64631 7752 47682 27363 1355 57003 36221 9479
+46543 21738 55990 12405 36148 47803 4102 27614 49567 10702 62418 25405
+41067 14689 52002 8973 28677 60034 21415 42742 10070 62288 28087 33
+54069 36297 10588 49886 31192 16753 59566 38407 1819 31771 44343 10909
+57107 28783 18320 62052 2424 47461 30151 6295 54842 11167 41532 25388
+56178 10457 31040 58711 2761 47885 18578 36854 57977 374 28128 46889
+18590 59965 2577 31563 50005 6064 45477 25828 39343 2133 60850 18406
+31306 59187 11280 46505 25946 40121 14540 59873 21281 45776 2860 53528
+30791 6477 65189 23803 43047 12160 52561 21390 44980 6711 51169 26486
+39823 18465 52873 5542 33991 65369 17321 39690 26460 49568 3770 28640
+63226 13749 43365 21106 53966 7018 46307 28464 1884 55260 37336 16923
+51363 3266 43087 34736 6444 55670 20954 62152 2918 38505 20111 53292
+14976 36997 57509 10525 27732 64948 14707 44584 23065 39636 6031 56074
+26710 45975 13372 38823 20331 65289 11155 34790 58070 4775 47005 19135
+37585 64575 23822 50836 5362 40551 21478 61311 411 49843 28942 14811
+54979 33424 10183 48595 37956 14537 31769 64531 11517 39400 26333
+60051 14496 38864 26090 65251 9188 34922 46323 848 52726 31465 10544
+48959 25598 61210 9582 29271 44150 15702 63895 25966 41640 3429 60918
+20644 44320 144 38038 65319 18214 33305 50604 2554 44460 22237 58771
+15237 30661 42827 8373 58273 18460 50773 37642 12473 54608 4970 48160
+18929 34609 50981 15853 43922 24692 63317 11884 39376 4956 52675 18628
+36242 46833 11301 54699 16736 31045 61834 12533 39765 24446 45633 9626
+53400 18020 30236 42699 8874 63362 36886 4713 29725 46287 18661 64107
+3147 41152 25927 60988 6930 39883 22170 34661 57403 10301 29366 50375
+19607 63632 15249 35496 48637 5796 41983 25031 46595 13909 54929 5534
+44330 25817 51271 2581 42357 25579 63584 8402 46233 28779 3295 32975
+64048 7248 52887 18588 31454 51659 2728 37720 55201 14502 27872 47303
+16116 56114 5540 39301 26858 59619 471 50310 20672 28653 58208 14325
+42885 22383 29403 50667 4346 61033 23535 33525 58129 2635 39898 23937
+48628 5326 62250 16727 33603 58821 8700 40216 23957 62527 9940 29170
+52799 3364 34488 57076 19788 42677 1748 63274 23615 41612 15214 50393
+21903 41417 10786 33871 61774 14449 40079 26152 54094 2709 32984 61396
+8946 29567 58588 18168 44334 35606 5440 54112 21682 43099 3577 58210
+35250 17326 53179 5052 46958 19966 37981 50693 14106 27106 64358 19616
+44985 5895 52607 28278 20697 60966 14333 35284 52061 5229 46612 24938
+40914 14352 60416 20677 50422 35602 17286 47897 5228 62337 37565 16109
+45209 24414 62816 6330 32346 52341 10038 34696 50573 21302 41444 10994
+63702 35139 19036 58395 13321 48955 24480 42980 6882 51871 34292 3597
+55628 22702 50947 5822 39357 25212 56660 12771 34994 50886 18506 38970
+7888 58463 31610 3204 61284 36163 17127 57680 113 42391 24492 55980
+14440 29747 46872 9150 59055 20242 36162 51551 7930 47325 30449 2910
+36607 62242 17025 33097 47581 10868 62817 24378 40623 14176 64286
+24225 47568 15557 39628 25041 45726 11544 60534 23333 49871 959 31678
+46542 7040 52223 33619 2639 59661 24602 49837 16167 41675 1528 60038
+25247 52758 6913 41034 22973 50105 13550 29231 56211 3194 41785 62878
+29126 17039 57088 35370 10935 46378 20489 37750 58307 6917 27251 63727
+17107 28072 56924 4444 45018 24256 53114 224 30167 47279 7106 56312
+21974 43136 15351 58549 27765 17702 61925 35767 14961 41476 2950 51335
+36767 19971 54633 5120 48802 21428 38752 10303 48015 25952 56360 15503
+28091 47533 9225 59527 25903 39864 9733 33739 49712 466 54824 21187
+34442 47562 6908 28054 61724 21419 41964 10540 64348 29521 3663 59252
+35993 7156 54983 22896 48989 16132 33195 58918 7706 29615 63600 4114
+42938 25669 55933 1494 50191 29487 14328 58257 35757 6451 61523 20256
+48329 28218 15361 56356 38231 11451 52000 31965 20348 54273 12328
+36007 48356 18462 62973 5301 41641 23506 60290 244 33227 43739 8317
+57797 20597 29144 64979 11181 52979 37728 18402 31739 63090 9474 39117
+21193 58404 5797 32586 52247 18984 36309 55888 12536 44694 23254 38801
+4184 46133 21533 62759 16505 29916 44445 8390 61343 34267 19909 49527
+12234 54076 22623 42276 15203 37182 51889 4736 33726 53413 7865 64586
+17530 31878 41746 8922 54294 16495 29582 50835 9282 56605 26688 38657
+11030 53894 19659 28892 49917 1548 33256 51197 14641 42156 23719 64767
+6508 29836 54523 16180 45817 29470 7166 60597 35202 2965 56209 24023
+43101 17844 48765 4704 60093 23047 41695 15891 50141 25218 39650 1221
+52224 31542 9627 65194 26711 48424 16078 31525 46525 10700 63826 25999
+39660 13170 60514 29987 7031 56224 37327 2839 41259 24924 58698 9572
+36236 43205 3961 50013 27264 17085 63819 32130 11951 36661 55736 9063
+43713 28410 153 59476 22600 42596 28376 7950 52975 34738 10984 28920
+53916 14659 41393 24532 64884 6970 28932 53183 16373 44484 28193 3940
+54916 36347 8547 30123 65454 15886 41047 23599 62566 12461 44836 18383
+32931 62041 10582 42019 26387 60516 2021 47867 24349 44013 16056 55394
+23515 41291 9519 49390 22106 34120 62612 8483 45001 36334 2364 61436
+24945 42448 5218 54859 18642 33266 57374 12801 44757 24618 49461 9161
+58625 19263 29806 44360 5010 52171 32537 10471 54949 440 31094 59745
+8433 53625 26954 38667 7625 44923 25535 59418 13976 40490 21026 56918
+17114 46043 29091 7852 64084 35755 21538 48100 9625 43498 26923 59213
+512 36196 61885 17349 32233 45291 10626 1775 33663 53038 7206 43338
+24762 65132 4284 51193 17686 34804 46153 2071 53618 36145 9826 40723
+20477 58496 12803 36117 62616 17061 32400 41771 3105 53689 31485 7699
+37686 50087 4932 43930 23206 60024 17362 30372 57492 8890 40317 25332
+59201 13536 42506 23175 62452 7195 32118 52373 4050 41396 23583 46266
+6788 63817 21332 43624 13454 62196 26903 40780 4499 60336 16976 45810
+36280 968 53316 25033 40538 15184 46726 22334 51923 11281 32566 42573
+2739 65370 24255 45008 14420 39751 22314 51568 17908 38647 10399 44208
+18912 64659 37341 4371 49159 16700 32563 53922 2332 34907 44686 7612
+60518 27398 506 37271 58603 8186 45734 28350 1704 55676 31426 15051
+51756 37180 10926 48391 24869 55316 13873 31505 51888 2192 43711 35172
+7270 28427 59294 596 43369 24432 55958 12849 41279 23052 47032 15032
+61929 1466 41659 25732 58159 10193 47773 26899 56589 12393 33249 48335
+5809 54238 24302 40760 1946 59029 25922 44857 3908 31957 64345 8511
+44681 24101 61475 11498 39887 25741 46789 1081 57383 20374 45223 35670
+4893 63637 19152 33378 43578 765 60874 22770 47443 6053 36927 63935
+13295 45087 22221 55599 8024 32371 46550 18577 50507 9810 33428 58566
+12548 43305 24861 52225 16436 32845 63639 6462 53388 31067 20829 44483
+12103 52521 34227 6124 64054 20720 43178 15115 59657 24155 39873 12220
+55241 579 39351 20600 50858 6228 33836 57096 1955 41474 22625 48667
+16829 32500 62550 13044 44338 21767 48727 15320 63160 33223 10554
+57488 37697 1083 51111 24083 45798 4355 30580 65121 16091 34574 46693
+11716 54459 19386 36250 64629 1780 48460 19193 36553 60933 3435 47296
+17707 37046 56132 1132 32489 61906 9975 48456 22098 40227 17705 56668
+616 32582 54243 7368 38797 26864 57288 1359 38659 24281 49363 5257
+54832 21007 39849 14362 63471 29203 4868 48655 35451 13421 64593 30895
+5850 51934 19674 30687 55214 13152 49229 21196 39067 11325 45905 26263
+64152 559 40312 23311 60951 5846 38715 22197 53635 1235 36277 56226
+16130 28222 60102 18894 37552 44853 14874 49607 23613 41371 3789 64653
+21180 51702 10185 39005 26770 63167 4679 32878 42500 10711 55859 32511
+18799 52347 5070 31613 56769 18366 39062 10627 53375 25432 42886 6232
+54673 20777 48438 60400 14229 39659 21946 57872 11660 38830 26915
+44397 9501 60374 19429 28926 43683 14009 61913 25644 42762 6423 51297
+22797 44513 9767 49799 21062 60934 13024 44948 24835 64234 14443 31086
+56120 9966 35116 52581 540 43075 22135 64703 6745 34472 52906 1739
+45983 29127 17227 57607 36486 12850 61503 30182 14869 52706 35773 3089
+56101 24967 38711 10084 52403 19061 32918 54017 11009 29520 49172
+17786 58386 8136 31802 63038 1703 39089 26614 57114 17119 30227 53882
+8589 35115 50184 564 59784 32834 6838 62772 21342 48174 34090 8342
+51527 20927 28765 56718 10894 40164 23920 65461 13411 49651 19885
+33787 53812 15981 42557 24502 64803 13758 35299 46770 19067 59228 7221
+30042 64433 18001 42768 4671 61324 37367 16388 27223 58641 20170 47139
+14531 53750 34108 10949 49879 29854 3699 65199 35436 8083 50936 26623
+38977 20148 53368 4865 32451 64606 17797 39231 225 59801 22199 38841
+10744 65491 18599 32162 47816 9218 36554 56528 16395 39568 21792 54477
+2404 30918 48083 19006 58788 13871 38687 26831 49901 11150 60118 17414
+30746 47313 10068 55714 26184 41687 11670 30238 57949 16980 42978
+27811 4179 59192 37134 19436 60984 659 41334 24698 63018 4624 39105
+21526 55710 1028 36787 48913 9026 27569 46232 15084 37520 62519 132
+28638 57307 10967 45019 26357 53436 8603 32632 46695 4276 56739 33780
+17643 62169 24989 42235 13751 54648 22021 45016 14688 31216 61524 4607
+53782 27182 8116 38326 52122 715 30346 54997 7231 27092 47844 15991
+43740 21908 61770 8578 33105 58379 19141 49006 6857 38952 26400 60063
+3851 49418 29785 13266 43883 22447 58139 9270 30973 42681 21935 59199
+8563 40082 25863 51866 15620 42348 26555 59491 5344 46811 24052 41718
+13682 48183 21937 61203 11634 31486 48047 17461 64769 9028 43708 32105
+11987 59446 36485 7426 51827 32811 19847 56764 1612 41947 25360 46949
+15776 59999 3595 39435 26392 63713 6455 32293 58190 17706 50119 8524
+31168 52998 14742 42842 25637 51704 9903 39578 26743 61801 8033 33587
+50143 3502 46355 27420 6939 62601 34644 12302 57615 22580 47212 14412
+33067 56357 2142 43201 22745 48275 12954 60847 27708 690 50200 37589
+15046 62768 23793 42791 2996 61303 22664 46141 14353 33470 64214 12157
+39180 24937 42419 26352 51982 3542 41436 23684 61720 1161 49675 21643
+33199 54749 7598 48355 32335 3389 56002 18620 33762 64930 1756 40323
+25590 56481 5573 38507 26695 55463 1323 40439 22246 50976 4133 27709
+62555 13376 47948 26264 38963 11497 50302 19016 28258 63211 14992
+33285 49403 4758 42259 24862 51404 1091 44874 22559 57914 16548 30424
+50963 7290 44740 23669 65224 2382 42349 22143 59561 6195 44315 34160
+19690 55739 13258 44302 21330 61419 5423 47095 13043 40719 23189 57742
+12370 30647 46174 15674 53848 24852 40059 3316 58834 17271 31462 62142
+152 43389 22871 59173 5551 46073 25935 39098 3735 62814 10414 31547
+51547 5086 40759 21409 57879 3526 32973 43109 23002 54168 2691 40795
+21403 33884 47030 8025 53377 38433 10376 33099 64221 4838 40092 23316
+62133 17469 37816 53022 14556 28655 58845 18712 42081 6042 61304 16239
+49310 24584 40576 9133 54863 26489 45181 14948 51793 25200 41546 4891
+52966 21084 62650 13800 29379 48551 5654 60168 25116 41305 9705 62376
+32749 3662 45644 23119 56018 5703 40756 25024 44116 1984 58390 24232
+38897 6739 65142 21841 51836 2213 35580 54155 14897 48210 31314 10550
+51960 28501 16704 56327 36768 11069 49315 26513 44144 14358 65498
+28947 19262 54139 38264 3698 56469 27100 9747 51090 38283 16451 30852
+59208 2559 39924 23493 61921 14153 39295 21425 51367 7751 44887 29876
+3141 58406 34847 7457 65405 25094 51509 10394 35800 43696 18384 59384
+28116 11920 64753 34546 17596 38429 60076 3348 30641 56238 12577 40361
+25420 53979 2298 41155 25257 57157 9874 45272 21947 40647 15455 61727
+37153 5056 50887 25550 45698 16216 54518 5563 34074 49864 20437 62623
+11877 39044 3189 53935 19613 31972 63836 9513 44722 26605 57749 4428
+39454 25989 55464 2967 40553 23323 52200 15911 27956 53786 461 45875
+27688 15765 62105 37369 9991 50406 21658 58290 6951 29132 44281 20521
+54579 10011 41717 24429 52400 2016 41631 21912 35835 59675 10832 28025
+64879 2538 34718 59080 19904 48735 11677 43869 21905 65163 13191 35844
+56723 17538 29542 50801 1654 44152 25994 39462 5547 61635 18415 29365
+54587 9210 34844 51041 16519 38022 45119 20300 58790 6667 28978 48495
+13117 36264 51361 8356 30560 58495 2453 41390 22063 56541 5548 18863
+63561 10024 32837 56076 13214 45558 31054 15803 58636 5245 40526 23017
+63236 15695 38185 49844 8875 28754 47515 19775 59518 11869 39055 27035
+62972 9098 47713 17284 34897 59854 11622 44303 37893 16360 29938 56426
+5721 45648 24124 57286 3780 36324 42946 9035 53911 22129 60783 11234
+38681 19907 64889 10304 33985 40679 5436 62942 18483 32231 55332 12039
+39656 25901 56687 9435 38815 26684 63932 3014 41028 25848 50656 6433
+39537 24323 52819 18017 34058 60852 3859 43211 25743 62425 5825 28639
+42327 13046 55702 19669 33184 48749 11316 40899 25210 54729 8587 38549
+27028 52390 12447 57293 21210 43963 28928 17628 59474 36631 11956
+48877 23922 53231 9924 62675 16404 34927 48793 11187 57628 27643 14647
+63394 29678 1274 56115 22734 45909 15400 31265 52268 2425 46351 27132
+7441 57101 36766 1023 47749 24114 55401 13206 29661 45112 2088 60285
+22489 43530 6613 35972 62162 3039 30452 57764 11937 45244 24926 39918
+713 58378 20478 32391 46064 13224 51546 28053 17748 53086 36792 10695
+64108 19550 34375 50449 8460 62806 33013 14512 53339 20220 40590 12519
+46229 33349 18439 27427 63368 6273 41352 23814 61916 2916 35651 46293
+6841 31304 60323 19923 52669 8360 33058 47358 5529 57932 12881 32222
+61512 16569 47309 31955 20493 64449 5033 48309 19072 35317 54438 7249
+29863 49303 1735 58849 27907 19197 63586 36689 11598 49351 18497 45831
+28839 1050 33176 47058 15653 56773 29901 2634 50168 37115 20498 47420
+9104 53746 28336 18500 49693 36647 5546 64452 17882 34176 47177 13858
+50907 20492 33040 63588 1290 48487 29151 9005 56418 33259 18787 64039
+660 39643 26662 60223 14005 43754 2222 30214 46503 21746 58303 36637
+10790 50515 23087 39037 1910 53008 18549 34797 64227 10426 46122 19156
+34087 60366 4682 47604 33776 10708 58353 37751 19483 47322 4049 54350
+30068 13925 45690 33792 17305 64261 37141 825 47491 22736 60613 12359
+38794 26822 63000 15732 48615 4222 37176 54555 18231 47702 30719 13698
+41527 4564 55585 26991 38798 2237 52623 24531 40330 5283 59060 19594
+35596 63664 8231 48944 20350 35408 50465 12132 38331 57826 3620 27211
+65232 7488 28995 53241 12568 36635 56145 4329 32147 64739 20259 42056
+16234 46817 24982 52617 9480 32858 46495
+ </sequence>
+ </array>
+ </dither-matrix>
+</gutenprint>
diff --git a/src/main/dither-matrix-4x1.xml b/src/main/dither-matrix-4x1.xml
new file mode 100644
index 0000000..46d6817
--- /dev/null
+++ b/src/main/dither-matrix-4x1.xml
@@ -0,0 +1,5569 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gutenprint xmlns="http://gimp-print.sourceforge.net/xsd/gp.xsd-1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://gimp-print.sourceforge.net/xsd/gp.xsd-1.0
+ gutenprint.xsd">
+ <dither-matrix x-aspect="4" y-aspect="1">
+ <array x-size="509" y-size="131">
+ <sequence count="66679" lower-bound="0" upper-bound="65535">
+0 54481 28629 16669 50007 36603 8133 60381 20398 30495 48890 10730
+62798 23970 40322 2802 54344 21688 38442 10209 56353 25482 38320 2124
+62617 23786 48600 10308 39832 22001 63565 1184 43579 25561 54292 10403
+41040 21906 57902 5990 30748 45450 19953 65463 2046 32297 44526 13515
+55978 24038 41526 5487 63718 17032 37060 50207 10248 28360 62025 17711
+41907 1927 54848 34655 20809 45069 11007 59493 26847 40535 2713 51548
+28271 12561 62923 37996 16374 29028 48217 675 60338 24251 39673 11001
+48607 21548 56750 2856 33891 45663 15665 59890 27975 7615 49365 37553
+19984 55682 10616 42429 25285 58403 1259 32401 52086 19355 43194 10741
+63987 26867 39972 6453 48528 21545 61487 10237 34918 44087 20496 51690
+2914 32050 62153 12872 42852 23635 51702 1359 32813 65367 20101 46196
+9728 37522 52534 16718 30182 57089 6229 43656 21601 51358 10572 32555
+58716 18260 48003 732 38598 26902 64930 12411 48153 30803 2789 54680
+35624 17222 50347 8071 33372 58016 21033 44269 13152 31394 61158 6915
+48730 21913 39460 14506 57671 30309 4605 49736 37823 18459 61110 686
+32886 47994 17271 54551 10422 39263 23326 64754 8270 32141 51869 16805
+47852 28974 52 57719 35743 10833 47309 23281 65071 13849 31614 50729
+4104 45189 28005 15482 59521 35393 741 48737 25845 54453 9375 41626
+21578 58478 14048 32352 45900 6450 65471 23712 42191 9239 52173 17111
+31042 57970 4788 44913 28176 15462 52291 35497 2181 64853 21691 45228
+9396 33026 61727 16918 44731 27418 917 55703 38133 15671 29448 47046
+3278 65005 24723 39589 14307 57141 30498 638 51230 35996 17877 58770
+4442 47228 27128 39483 13413 60090 21967 43681 4984 56553 29154 15259
+50549 36370 10306 60064 25190 48121 3424 39333 21505 59129 10842 30865
+50469 20018 41894 3107 63160 31076 17015 50266 37726 10021 53087 20380
+33854 65169 5244 41873 17519 52200 30762 9114 58287 38045 15738 28089
+48900 4537 62391 22662 40876 11988 55112 26901 38757 9620 60223 17370
+47452 30772 3233 62181 34922 18709 53934 9634 44026 35206 20301 56560
+6846 49173 22245 41009 10690 64725 31343 15869 49795 37034 2310 57563
+23634 43283 12105 52468 17782 33953 64217 8829 43360 24976 56341 12755
+38991 21869 52565 4449 33246 65300 15052 44342 27421 9687 53878 35434
+14957 60988 28118 3284 50031 37002 16470 64983 29159 539 49751 36358
+18438 62371 5386 32673 53728 15267 46284 27728 7963 58927 37508 14582
+53933 28828 9595 50133 37382 21042 65240 2872 41948 26053 57912 13865
+48678 32990 1741 62774 35536 17775 53117 7747 32237 47777 21022 55260
+11511 39239 26718 61911 6384 48640 25100 41694 9720 60009 19784 36623
+50568 5577 29184 60845 19804 47245 8254 31891 57708 18983 43063 5282
+52609 21138 32551 61341 1879 46989 18286 32040 60255 11172 45422 20953
+30127 55231 6769 44568 20340 32212 59678 11112 48800 21783 40293 3219
+55636 25750 39175 12512 58720 22746 48302 6298 34077 54156 18739 42463
+2451 60030 26430 40000 14648 52630 29423 315 57001 37117 17701 49576
+10666 30528 65130 19133 41338 7240 50482 29211 14047 56734 37660 4565
+49557 27311 16884 61202 35447 13174 64425 23599 44288 3461 31633 57703
+15434 43949 27535 6460 55011 38106 12669 29836 48467 19609 65089 7500
+40814 27256 60214 12428 40055 21313 50986 6304 34108 56069 12053 46174
+28273 16564 61314 37946 3829 31363 53527 14125 43058 24547 60771 9092
+34855 52207 15612 48524 27681 3458 59917 37169 20843 49639 8294 32363
+57015 20630 45958 6755 32930 58311 15541 47870 28324 5745 52543 35826
+18519 65165 9529 44159 20959 32845 56712 4094 43620 22437 53461 9550
+31565 62440 13619 47062 25556 38502 5083 49266 25161 65147 12671 40728
+21763 54687 442 35819 51099 15058 31071 64411 5284 45972 28096 16418
+61179 38221 8953 29619 49214 18028 57044 2112 38653 25373 52989 13371
+32480 58182 7224 45310 27956 16870 54356 37244 4581 59392 27336 16165
+49298 35917 7897 57835 27954 15304 49756 35442 4037 61899 25139 47503
+12379 39957 24253 64251 4331 41900 22718 56478 9699 32328 53489 16045
+45411 28824 6628 61994 37115 19723 45407 10183 60360 26879 38962 4529
+55371 25450 48004 11209 40717 25195 64151 1215 34324 53963 16797 45676
+27873 6852 59506 35674 20859 51734 12293 41255 26663 61593 2142 46156
+28746 14667 55971 36922 4247 45875 24819 59913 13004 40538 24670 55071
+5685 43057 21382 61121 9313 37825 51877 17050 30624 57715 6594 46349
+23920 38658 12743 63637 22518 47221 4637 37759 56783 16662 28608 50124
+1577 34738 59725 20692 45882 11947 41495 25771 63030 7005 33521 47118
+18945 56832 11882 38993 26843 51280 4412 37555 57541 14256 30464 48197
+7537 62892 22193 40157 11757 54096 26939 43546 7106 61750 19956 33038
+46585 8841 55624 22624 39729 11363 65185 25517 43303 1893 54181 17939
+35663 49755 8596 31639 64217 19079 46703 6049 40493 26662 55456 12817
+43834 22800 64544 878 33622 47216 14847 52950 28226 6465 58241 35527
+14222 49387 27633 1473 59639 37296 13477 45753 25249 56063 3216 38970
+21785 63435 13407 44825 30445 6848 52147 37129 18281 60742 2495 33657
+50414 16291 45975 28719 6266 56979 37752 20755 51696 11681 42688 26342
+64071 224 30431 47562 13548 60608 26001 38503 3060 54860 24259 43530
+9152 59423 17954 30037 47817 7419 62817 25406 39526 4723 50293 19148
+30469 58439 1777 41333 23103 62197 10002 30757 46908 16869 57142 28665
+2335 49447 37272 19451 62125 8152 42826 25381 52507 13150 33901 56144
+6839 42971 23452 58341 9349 34489 52051 14298 42439 25552 61813 1327
+35377 49859 16571 31575 63530 4522 45124 27655 15611 60120 38212 7746
+28946 55068 18725 47550 4497 39205 23256 56514 10191 30237 44744 14181
+63824 24716 39320 4242 57383 18274 31409 45626 2013 58647 22409 38310
+12697 54774 26088 43829 3094 63170 17040 34690 52392 10126 41923 25030
+55513 37 38670 27083 63573 11666 48025 17393 34267 56719 8206 42228
+25656 51011 3634 34257 62351 13222 42029 24520 56767 2279 39432 22493
+52733 14157 31934 65013 7585 44755 30961 18499 61095 4430 43928 20825
+31511 55480 9385 41332 22622 62969 12935 33207 50238 4225 42972 22593
+63787 13494 32486 44375 4939 52678 20691 34683 59171 1439 43497 23119
+52172 9984 32941 62874 16012 45284 27864 6013 53021 37634 19647 41663
+7603 48651 26740 56158 13135 34594 46537 1609 64052 20854 33760 45815
+4710 57678 17975 33864 51707 561 43476 25699 53597 14096 32937 59035
+3308 45060 27463 16893 64734 38099 7499 30136 55233 11401 47688 20415
+33720 57385 649 45983 18015 29736 64036 6826 43784 35482 17518 53947
+10533 34612 62416 17207 42268 263 52515 29132 14613 63872 37106 3677
+50143 27337 16393 60077 38128 1019 30610 55309 15580 48291 27710 8114
+63466 37101 17572 49828 2246 33674 58357 19662 44461 7142 33523 50128
+14399 59137 26513 38623 4302 47906 24581 61619 8619 41134 24064 56082
+12028 40488 21767 51055 2763 33300 54929 17301 45510 5952 33099 62230
+20779 42805 11783 48841 26846 63499 1121 40183 22970 50667 11115 32948
+64689 14158 44601 27822 6551 52343 37607 20502 63026 445 42948 26481
+54699 11665 39014 21384 59314 1668 33538 52859 15556 45039 28668 8195
+60738 37505 19548 51029 2466 42639 25925 59194 13837 31782 51406 1352
+42724 23893 65108 12942 41024 21595 52324 2955 35677 59045 15421 29753
+49979 8078 42499 22709 62568 11719 40666 24987 54858 3650 43730 18102
+57918 30044 9542 50106 37039 18728 62843 6692 33515 52610 20444 43003
+9856 63843 21986 38481 3067 48867 26682 56332 13043 33278 44381 1802
+64012 27525 14859 49831 36777 8722 55899 26635 43368 3090 61266 29475
+14695 53506 37003 7960 46571 24167 63724 10524 39274 22197 56192 3468
+37727 50460 16114 29598 60603 470 42421 23802 53131 8682 31623 63904
+16697 44420 27763 1839 53303 36948 17029 58581 28628 5024 49780 35596
+17777 59619 2467 37650 53016 15539 29430 45282 5461 57850 29014 16812
+50766 36237 7418 61218 24625 42516 12204 56845 22528 39037 1417 53402
+30605 16005 62325 35359 4096 49814 28632 16831 56617 37273 5023 45416
+25173 61072 12329 40783 22805 55350 8297 45938 30646 16570 62235 35163
+5872 47760 23460 54113 10968 40784 26299 56817 601 49113 20379 34174
+58073 8975 42776 24560 53725 13382 31710 64809 1367 43903 27452 14735
+61099 36512 5837 49860 18045 32922 56922 9129 44264 32009 19332 53827
+6399 42352 22669 63185 12055 33745 52092 20158 45119 890 35186 54390
+14888 30630 60471 11229 42361 24226 52160 5989 34120 54544 15053 44466
+27546 7469 60234 37433 12313 51375 21398 32508 57983 5102 45660 18255
+31590 63276 1014 41463 21829 51194 14874 31987 64210 3556 47377 24151
+39737 11156 57493 21472 43599 6889 54700 26044 39218 11201 56648 19754
+34103 51963 406 42838 23210 62424 10683 36135 50715 15429 30728 59358
+6705 48939 24791 40988 1087 60162 22536 47164 9568 33546 53973 13517
+42113 24568 65320 5850 34115 51584 17323 42835 8772 57895 32637 20942
+49825 4665 30595 62219 20504 44548 13318 34374 59920 6724 42772 24123
+54629 3124 40654 22939 65410 10315 36689 53806 16381 29223 48187 6379
+58459 18825 31355 46909 10699 60535 26356 38380 223 49046 22632 56860
+10143 33890 46755 14995 62313 27900 1628 51155 36125 17259 58208 5564
+47537 30502 16170 53213 37388 7250 57522 23889 46009 12587 31244 62142
+8151 41953 24004 54829 12592 39508 21813 60027 2542 42827 23165 51552
+10615 31628 59496 33785 63386 14938 46736 22626 39259 5515 60937 29658
+16134 50937 36432 9197 55834 24726 42925 13027 59630 24188 38768 5627
+61605 22351 48431 9107 36538 56881 15461 29546 52317 1429 43331 23299
+60191 13840 36846 50063 5715 29407 62632 19322 44003 10245 32071 49632
+20963 58175 2729 31130 46598 19702 56645 5904 31035 45293 21176 60979
+9278 34797 44231 12812 57650 23370 41274 7425 51143 33799 17932 62199
+11802 42129 23571 52366 4631 33434 55964 19941 46499 8859 40902 26203
+61646 12252 48783 22818 40373 1373 54101 18387 34308 63422 10885 45348
+17955 35376 53652 1738 30359 60398 14510 45142 27432 7735 64972 36221
+19840 52566 10374 41763 26021 59205 4348 39685 21952 55416 9403 33233
+46822 18485 60996 5983 38639 26461 57189 2395 47743 18479 33569 55814
+8833 41744 24464 60089 13137 32904 50922 4844 42543 24688 57373 10780
+34681 48578 19744 62421 5910 34055 47091 17387 57978 10198 39721 22668
+53196 4324 33698 62622 16339 45957 28678 5954 56759 35777 17550 50643
+9912 43389 23507 62271 4894 36548 51403 16054 29232 57253 1880 46567
+28616 15004 65496 37937 7928 31834 48326 20457 60392 5366 34706 44796
+16100 56784 27991 1248 49778 36258 13464 58155 23787 42098 6503 62349
+18253 47061 29128 10582 53889 37247 19042 58522 4931 34149 50899 18476
+41209 10481 59673 20889 33317 51640 249 42568 20226 59031 29199 5134
+54296 36335 19267 49548 12758 32497 62339 6052 41095 22404 55037 12907
+33863 46408 18221 59090 5062 41772 23321 50644 13056 34483 61465 7995
+42787 23778 55343 12236 41205 22398 48068 8610 64511 24780 40924 12265
+49327 21700 62095 1043 32565 44655 15401 54960 28923 3594 49575 35184
+19772 61823 8009 46232 26058 41513 11208 58034 21925 43633 7025 52233
+31051 14370 63655 35884 10271 49933 21954 44456 2101 32369 65091 15406
+48829 28435 4230 56812 36670 19234 50116 7891 34166 64202 18195 45442
+12156 32078 60903 5294 47915 28852 15967 63152 36622 7189 51770 21170
+35002 48234 10120 58801 20271 32260 45133 2781 54875 25061 39507 12353
+64446 22182 48871 1902 34101 60197 15119 46481 28476 3664 57979 36418
+16487 50770 27938 8025 63987 37624 20305 46214 2752 55960 26746 39723
+12427 64610 22063 48695 382 33778 62682 19865 42686 4163 55390 29809
+15782 49677 36534 7791 59616 24102 42319 11673 53487 27181 38339 5496
+60248 21157 38316 12814 54874 27159 48942 2023 36791 62999 15947 30041
+51096 3885 41994 23942 64899 12856 47034 29355 8080 58766 34539 19884
+53258 2317 32798 46223 20991 64588 12582 33352 45351 8532 55563 29971
+16632 51047 37256 2928 62439 21998 46017 10394 32210 57111 19528 48471
+723 38902 26992 64008 11025 35032 53053 17539 46251 2773 32840 58128
+16240 46011 29222 8728 53314 38078 14412 31191 58929 19115 43890 627
+50275 31380 14998 62849 37827 4911 44961 24915 55059 8130 41669 23862
+63756 13328 39257 21074 51104 4071 36062 59007 16678 30217 49710 7803
+42643 23885 65209 11217 39127 21730 55216 937 43831 26654 61558 14085
+36278 50757 2736 28431 56078 16941 45037 27747 6065 64873 35084 16901
+49058 29632 8866 57266 35582 18214 50567 1198 12432 43977 28496 3685
+52849 36306 12248 57900 25153 47207 7252 41307 18898 62059 30101 2470
+49964 35828 17153 55052 10601 44805 19411 30918 62936 4473 42535 23421
+50221 9963 33594 63832 18356 47035 3642 40354 22509 58589 15007 32510
+53578 1803 47199 28232 14654 61337 37308 8060 44730 25551 65249 12208
+40762 23027 51655 3823 33407 55056 16844 47808 27473 1982 64761 36323
+19187 53726 5417 42992 26572 57026 9075 39264 17248 60828 29597 56
+50112 36856 15435 64198 28528 3655 52288 37998 15398 29987 57639 9106
+42921 21114 51625 29054 6593 60813 37588 11758 49724 27513 16961 58673
+37830 3813 50636 28887 15222 55674 38000 163 31137 63307 12777 47175
+28485 16615 52238 37517 3210 58398 23861 42889 12941 53843 22383 41044
+9838 62674 29770 14588 50449 36989 3320 64465 22646 46948 14782 36307
+53692 7691 29938 63621 17341 44664 3590 30320 55033 14710 43911 28112
+301 65433 35439 19970 45100 11624 55445 26548 39424 7501 58385 23644
+48597 12443 40543 22357 59986 577 31676 53836 13914 47023 25568 40222
+6525 60497 19250 34538 53185 9989 42882 23824 56782 352 40294 23036
+51929 13409 31754 64402 3407 41903 22569 51448 14322 31993 61892 8087
+45544 28561 16628 54527 37913 512 31402 60040 20225 49140 8340 31874
+44083 21103 65217 1962 31472 52820 16507 45075 28488 5631 62571 35776
+17530 49531 9456 32736 64522 15946 45224 27729 1865 52746 37156 18238
+57732 10278 42027 26970 49052 2952 65312 25694 39629 10231 52150 19120
+31592 57767 3990 46828 27615 15149 63606 36060 192 50361 29205 16321
+58214 36050 3846 44840 26050 56132 7726 39072 25071 48870 11014 63893
+21605 38938 6653 57368 27021 38789 10094 51420 17599 33565 64863 2648
+48205 24445 38470 12646 60265 26168 41615 247 56340 29587 15615 51275
+36685 7230 58424 23710 46978 10898 40963 22427 61726 1050 39974 27125
+51872 14392 32534 59569 2890 42626 22603 55140 12933 39909 25311 45991
+1953 57002 17446 30966 44137 4461 62754 27758 15202 50122 35956 8542
+61509 23357 47112 4749 37061 58313 16341 28798 44675 7613 54697 24772
+40989 10322 61986 21889 40073 13342 56107 31773 4460 49446 35542 17867
+61336 9469 34550 51689 19589 43982 6537 31759 56827 16616 45864 28886
+9204 58664 36266 18167 51803 1956 43440 26651 65190 13907 38404 21194
+54780 3016 43714 25944 58025 10178 41601 23819 46715 7409 61514 19384
+31249 44230 5172 58506 23064 41180 10529 53091 31173 16956 57343 35934
+3271 50368 24243 43507 11432 61858 17482 36967 54254 4146 29487 44057
+13861 61277 24368 39981 5245 56735 28533 15635 49771 35223 11883 59926
+26026 41315 4414 53274 22485 40372 13089 60505 25248 40339 6408 56587
+20019 30167 48490 12021 64524 22928 39651 1589 55995 28102 13084 51345
+36890 4589 63820 25824 42582 8675 53309 28337 12371 56819 36195 20186
+49941 1829 35564 59217 15087 31287 52163 5992 42979 24669 62651 11656
+40951 23070 53399 3368 33742 57222 13654 46758 26108 41059 6475 60206
+20171 33544 51546 9432 42730 18318 64259 31971 5365 49922 36482 14848
+57762 29523 580 49883 37657 14642 61778 28022 4267 49345 37878 20707
+59060 63775 22282 49159 9930 32405 55600 18870 43095 272 65304 23393
+38485 11056 54047 26615 43747 6333 63338 20443 32434 47898 983 57976
+23993 40569 11739 53872 18659 31227 59404 5598 41877 24799 55897 13325
+34419 51469 6994 42324 25839 64413 12061 41386 23838 55566 5160 34492
+48809 20199 54412 793 39056 27058 59860 13390 46459 28179 7695 61948
+38176 15613 30440 56360 10062 45902 21084 31598 48562 2958 63320 20414
+34699 44505 12135 55101 24731 39877 6471 58718 19293 30811 53746 11340
+42935 23266 59979 5393 32385 48738 17286 64747 2933 32229 44661 15372
+57306 29455 5743 49017 36559 20298 62457 8147 42170 26182 47996 11160
+57774 21458 39000 5713 53679 30270 14978 60387 36141 8470 50235 27797
+16506 65206 37971 816 31647 48678 19940 56224 6186 32093 44864 19780
+57029 11178 39503 27096 61541 1011 43235 22154 52103 11790 35034 60566
+20427 47780 8557 36387 57078 15456 31480 48384 6411 61389 23780 41587
+1957 51788 30060 15797 62944 35399 3544 49652 18342 33475 64437 8848
+41733 23620 55793 11948 38330 21531 63462 3222 48811 26672 39246 11375
+54286 17310 32723 62635 8394 45658 28182 15769 58362 36107 6158 54510
+24490 46855 11349 41548 22135 57260 4359 40383 26370 64599 9774 39308
+23253 52124 13429 34590 61743 6091 47015 28266 14676 54233 36978 9132
+60213 25017 46895 12342 41325 21814 57747 3360 40424 25074 53867 13045
+35573 61101 8688 29974 47727 20179 63195 4528 38326 23463 53466 11630
+38282 21314 61769 1308 45621 29280 15698 54555 38038 6814 31391 59286
+19182 43516 10755 54464 26755 38867 6206 63202 21333 47642 11786 33263
+60328 18692 45151 3095 34106 54226 14015 43594 24425 60939 510 41644
+23369 54361 12054 39314 26550 57450 6508 43952 21280 52666 8883 33392
+62716 19217 42464 4500 54790 26082 40165 13341 63071 25924 38401 5002
+54627 21431 43827 11946 58764 24044 41457 7228 53645 25828 38968 10092
+64959 19559 48863 30720 5839 59384 35735 20928 53203 10743 46916 18927
+37542 57966 492 29575 53414 19490 42039 9317 63426 20964 31346 53100
+12609 47831 34657 3956 65241 18577 32064 50290 593 43719 26181 59764
+9764 29701 52986 14196 42953 24063 58898 1261 32590 46949 14733 61979
+27785 4388 53183 37587 13679 48149 25178 61112 5735 38980 22447 54182
+12823 31954 47246 7128 61860 24665 40083 11159 51932 18282 31900 64666
+10 48748 26689 38493 11846 56544 17980 33060 47818 8844 63728 24846
+39577 1149 48663 21672 60803 13551 40051 26876 56191 6123 39177 25262
+49191 10114 64010 19486 34063 47518 207 57677 18862 34252 52241 8139
+43072 24189 61919 1653 32691 47628 18682 58881 9215 33185 46728 20336
+55506 2212 32122 44811 15791 61941 35825 5529 51585 25680 42864 9650
+61017 30560 17034 49520 35398 6536 57573 24101 41176 10838 49906 19552
+32014 61748 4076 44354 17368 30817 64260 8740 42981 23664 54773 12788
+39565 21388 57590 775 36719 50263 15444 28964 61869 8684 42097 23600
+52876 2092 37094 63548 15632 29592 47835 3497 54759 24722 40580 10978
+58593 23160 48924 7724 41643 25590 60569 12036 40356 21948 52901 7116
+32054 55933 15870 44411 30456 6545 13291 45427 24928 39986 3118 61505
+23793 49038 13035 40921 21729 58172 4299 32935 46105 17548 55617 12273
+40406 26400 60754 8250 46464 29957 14552 64999 37621 2825 51815 22323
+46014 14575 32315 60978 172 43416 23986 56611 10460 38557 21142 52514
+3052 32439 59538 17870 45090 8951 30806 62850 11856 44074 18473 35604
+57931 4957 29573 52803 19931 47398 1141 33620 60615 17554 49195 7168
+38566 26804 59154 10711 31305 54184 17723 47469 1753 31379 65310 17167
+43464 9685 50804 20981 34649 61296 760 46438 18746 35557 56747 7916
+29920 46994 20641 55229 10787 40148 25251 61650 998 35060 51510 12792
+29285 56331 18556 40977 2965 63940 27292 49264 12047 42632 23581 61872
+1691 34451 47647 19885 56892 5049 34116 45428 15332 59757 28212 8574
+50877 36408 17461 60943 2621 42552 25860 54297 9509 31904 45594 13879
+58100 25056 40632 5297 51292 18042 31810 64577 2796 45839 23792 41154
+12534 53014 17832 30393 59765 8922 42045 22602 48140 11333 56919 26886
+39253 5500 51607 19729 29850 58252 2351 43609 26596 50712 7326 31742
+57503 13264 45396 31356 20054 59797 4477 34907 50341 19015 42683 2261
+53701 30365 12183 61071 37708 19566 49668 1549 36631 63324 15337 29883
+52672 7248 46108 20371 30581 57627 2388 44302 27499 16999 59042 38197
+4242 30924 48585 20084 56609 1131 39272 22835 64201 7528 33852 51918
+15530 45871 28714 6320 58762 37863 17655 51525 778 42701 25539 55677
+14280 32097 45745 7312 59962 26304 40407 12537 55965 22838 39559 5550
+64717 25037 48965 12508 40342 21959 52005 3227 31255 60958 13927 42271
+23794 55204 1393 36691 50319 15272 29396 56630 10366 41348 22645 65459
+6107 35319 50171 16836 31248 55916 4338 43437 21622 63433 15131 36184
+49655 1677 29056 59178 16733 45785 35063 9970 51924 20618 33826 60462
+2321 43071 17306 51666 30996 9472 64027 35290 18769 49797 3778 43561
+26944 61901 15433 31413 54530 26 44390 27847 15051 52079 37860 8562
+63698 25390 43841 3997 34321 60920 13807 42821 23626 50651 7035 34708
+57391 17666 45750 1546 41547 23379 60405 9008 40482 26225 55757 12492
+39590 22855 51383 6927 34163 63649 18694 47131 3204 40992 27155 56576
+12072 39471 21687 51077 7153 32143 64872 20531 43947 2480 33180 55832
+18805 42488 10648 63709 26292 41449 779 57224 34773 16799 50296 28625
+3952 60043 37393 13518 45452 23604 57657 8203 41339 21855 52483 2502
+29018 59841 16226 46288 28398 6789 55533 37982 15409 30337 65446 8984
+43205 22100 52893 1832 36451 58434 15646 28752 44831 4909 54523 25015
+38762 9417 59687 21666 46597 14321 37713 53799 5583 28609 63128 15201
+44935 28248 6708 52491 37371 12661 64971 24430 48873 8874 41835 21629
+53242 457 33721 58519 13763 46686 22177 41346 3408 63190 28736 16236
+52142 35130 1185 59763 22288 46550 13430 37579 56217 7052 28304 47088
+20646 59666 2484 38347 27258 49746 10358 29985 64766 19185 45629 5538
+32280 54616 16166 44504 27807 10576 59278 35165 17843 50622 7457 41050
+27156 56848 13208 38338 21221 62873 1538 46962 31065 15776 53702 35179
+3145 64091 26232 46366 12398 41592 24352 62467 1854 34725 53720 60390
+4726 31842 48271 14631 55220 26016 38519 6991 59575 18489 30531 47704
+9870 63851 23222 38950 1949 53543 30623 16019 50077 35639 4192 56369
+28466 16883 49577 35332 9280 63161 26155 39967 6478 50813 18696 31720
+62129 7810 48321 26579 39815 12906 65045 22290 43277 5938 51899 34141
+20564 55222 2457 45701 30780 15022 63473 36617 8345 44761 25170 54701
+13191 38838 22230 64497 3421 32349 51624 14982 45164 28037 6071 60344
+36749 20997 51874 8741 42094 25638 62008 4826 31967 45096 13231 54712
+24446 40527 9569 62775 26810 38795 2061 50707 17170 36960 59351 5191
+28509 49341 16006 37763 65393 6990 31787 53979 14609 46488 25260 38261
+5395 58966 22034 46253 14219 32334 55586 7313 43869 27368 12708 62309
+37343 20863 54199 3956 47705 26515 40460 10543 52749 20613 33580 64174
+7338 47813 18169 34978 62173 2038 46983 17019 37148 59730 10408 29371
+48824 20922 56344 7188 39183 26821 62513 3921 48833 19156 34025 55901
+1129 39650 24216 63964 14117 34046 46817 8273 61744 24564 40697 13200
+54688 23096 39297 9254 64699 18534 34132 52220 1044 42705 24108 62242
+9353 39896 21936 52536 14561 34583 65083 6632 44886 28366 16492 51972
+34450 10745 58160 24794 44145 3531 34041 55809 17873 48836 10418 37312
+62890 14343 29748 53831 7772 46339 27296 15594 61452 36251 10025 50559
+25978 42715 13418 54843 30501 2533 61890 36046 18951 49783 10479 31975
+64982 15616 45761 29001 5808 60840 35920 17380 48635 2721 58256 20035
+34423 47165 9153 51598 18337 35803 60330 874 30095 47895 18472 57448
+9451 33294 46844 20577 64416 6996 40008 27147 52970 8900 34421 62383
+19526 43286 2295 52684 28594 15459 57636 37100 8220 47540 22948 61493
+12354 39665 26190 51768 5796 32791 55850 13733 43035 23336 64628 3489
+31406 46891 17601 57882 7911 38528 26720 48855 11520 56141 24324 41771
+1517 59643 21648 38849 13405 50844 34842 6560 57311 20361 46665 35835
+9405 60049 18198 35246 53981 2298 29244 47303 20439 56243 11251 39133
+26758 65087 5462 32392 52084 10712 39785 26455 61838 14219 36001 50868
+5022 31040 58740 17667 45842 2214 32562 61054 20676 40999 8326 54923
+25735 38735 10854 61737 22548 45576 4820 36765 59938 15540 29453 53539
+8567 45306 27552 14941 59490 36531 4988 52589 23278 46650 14454 32826
+60633 6668 43399 22503 56104 9797 32871 47836 19295 64059 4898 39409
+26381 51216 10867 33682 62867 14801 44067 35504 4234 53891 23562 42275
+12637 59460 34672 4886 51720 25416 44720 11252 32037 63182 20257 48766
+7513 40581 26055 60517 12811 49522 22738 41175 2489 64755 31084 16790
+50101 36134 10991 56688 23399 43865 953 32085 60140 16368 43845 28010
+4075 58299 38004 15377 30771 54471 10901 43480 23287 60113 7437 35730
+50692 14495 31094 56512 8302 47225 24969 40256 12215 64686 26546 39395
+3072 51441 17910 32487 61263 9370 42028 24343 53333 13792 32806 56670
+4601 41731 25407 60262 12484 39538 24344 56237 3999 47320 20012 36357
+65391 82 31273 52482 18955 43920 4308 61439 26399 39659 12344 54258
+21565 38690 5248 48400 24111 56559 10564 39630 21415 58620 5896 33700
+50810 14350 41230 21632 24289 46025 11328 40203 22888 64387 1077 43332
+26892 52016 13732 34729 54330 3509 42949 25103 60687 13563 41185 22226
+57274 7406 39760 26391 61835 11058 43339 21325 52949 1744 33899 58027
+13270 42462 24591 60063 3209 40091 22121 52933 14386 33581 57217 1344
+46491 28064 16485 59020 36104 8522 47937 24234 61449 12623 41178 22213
+55851 4360 32976 48087 18366 58645 6708 41892 25703 55803 11460 41207
+22029 62661 548 33684 46268 18672 57932 10495 39287 27143 53522 2476
+35008 59033 16450 47725 28836 5697 57339 36728 19806 52871 11436 43456
+25698 63673 8332 33183 54231 20046 45778 10400 41544 24710 58269 2528
+41484 23333 49122 10417 62926 21106 40873 603 54345 26808 38741 10416
+61317 18185 31878 52500 2172 45113 17600 31814 64812 11642 43130 24098
+57972 77 36819 50243 15565 29693 55694 4944 44022 21140 31113 56897
+8832 49420 18909 33242 45048 618 63706 17187 33235 44143 11141 55203
+25141 38830 8320 46894 21681 60614 12359 41899 26318 54479 4190 30786
+45200 17894 59104 114 35072 49597 15363 30263 60977 4903 46922 27687
+15244 55544 38023 7050 33083 57930 12948 43731 24827 50157 4782 32627
+58538 19946 43411 764 54660 26664 39571 7998 60884 21866 48162 14434
+35369 64844 5792 42503 24550 50754 137 31448 60878 16792 44020 27567
+3213 52254 37837 19281 63598 5193 33237 47874 19008 53320 11522 39814
+26110 59019 8236 47414 23559 40821 2029 57346 19315 33429 51115 9348
+42126 25371 64157 13951 31145 44453 4283 54880 25721 40809 11371 61832
+22093 45355 7576 35212 55758 15100 44209 28885 1967 59512 34935 19090
+51169 5203 42154 17750 58485 30264 9717 49343 37128 20362 62880 3745
+44863 29249 14660 53376 35649 956 59655 23638 46378 11370 38992 21149
+60983 7926 48319 26573 40857 11766 49238 22491 62321 701 32735 45325
+19950 53930 6358 39306 26757 65430 14514 32396 52723 5409 43201 25018
+62466 12789 39678 22861 50458 4616 31156 64527 14132 41926 23368 50752
+7485 33933 60444 17795 45597 1182 30520 55187 14815 43183 22284 59499
+3134 30436 48715 18956 64122 8342 39944 25401 48672 11871 57074 22211
+42310 5881 53235 30541 15419 65483 35283 1687 49903 18641 31691 57594
+11960 47380 25460 38912 266 64017 19274 31555 47521 11285 56769 17816
+31309 44628 1818 62608 27833 12326 51241 37999 16910 28965 54294 2744
+42152 23049 59252 14143 46445 31095 1415 54039 36577 18590 60755 8582
+30412 48892 18460 56241 498 32128 45910 17580 62486 14003 37373 50260
+3460 28942 56322 14904 44176 34696 823 61996 18508 32808 47916 6655
+55755 26576 38578 9722 58368 19435 48088 30242 3268 63633 37496 14264
+53614 22556 46888 7561 31820 61671 16984 48053 27606 2429 62668 37287
+14718 50053 27631 4839 65278 37452 20835 45602 1728 61276 18436 32213
+52793 6208 43403 23428 58430 11515 29973 54498 20816 45943 353 35266
+62982 18273 42808 8199 50996 21060 35048 63795 1480 47678 17670 35381
+51965 9757 29626 57798 13463 48398 24030 40528 8396 59968 22389 38254
+10455 55198 27284 43752 6934 64590 25631 40650 11591 59572 19423 32830
+51769 428 45857 28423 17018 65175 37004 8523 54220 61952 36629 17999
+50805 6309 33842 57585 17500 45814 8727 31768 62777 17191 40920 11762
+50564 31361 5014 58942 36796 17522 47516 514 54187 22988 38441 13600
+64582 26977 44328 5279 50474 17959 31425 55466 10829 45276 17555 36034
+61707 5048 30081 51445 12317 40898 23973 63641 4138 39247 18953 54044
+29039 305 50057 37231 19286 64221 11443 40393 26946 51333 2223 34441
+61785 14444 44671 28215 8464 52715 37317 16875 56877 28881 5818 49239
+35320 20489 63511 11589 43016 22867 50328 8376 33645 64632 18099 44660
+3484 31152 60596 13321 41714 23498 50338 356 30524 58115 17581 47986
+4380 38956 26500 61070 13178 38411 21620 47639 7423 55780 27051 38824
+12945 64638 24793 43992 6130 50840 19926 29449 58358 9715 42006 23006
+55163 5391 35508 51394 14894 29756 61309 6892 47276 24493 40225 10820
+60057 19238 33600 46111 3466 63092 25672 40193 11299 54595 27001 40180
+5691 58460 19226 47684 29800 2574 61775 35872 15577 53281 29167 6233
+49850 36162 19036 64956 10170 35091 47552 21066 56362 6280 40139 26211
+51511 10058 34802 58499 19585 45125 3808 29944 63943 16265 47172 28446
+2513 53063 35898 16048 63248 29186 8585 49299 35913 17517 62477 11699
+43214 26015 56668 2851 31812 46593 19169 56277 10874 34087 52894 20796
+45820 6656 37649 54802 13833 31886 58090 9579 44722 27783 16385 59711
+38160 609 29370 55882 17803 42020 3815 62081 26730 48754 13154 35410
+53238 6479 28448 61333 20869 45574 1 33907 57216 18978 48393 8903
+33716 62759 17653 44147 2304 33530 58326 16185 48251 27650 4153 53495
+37736 16589 63905 27498 10124 49466 36793 20578 54927 316 43075 26385
+59903 13394 32495 51915 7201 43779 34667 19928 64781 10598 48818 26898
+40690 4766 58207 30402 16426 50919 35686 2536 63914 20042 35367 50231
+5162 29805 57355 18586 42795 9198 61499 29265 16354 49894 36575 2749
+56954 22076 46754 11398 30573 59013 1282 41718 25778 55195 10383 38693
+21053 58036 3389 43773 26723 52539 9937 31838 62896 13274 42454 24391
+52549 6517 33793 57313 17888 46415 10348 39083 26965 54593 146 32440
+46712 16037 63005 29491 4012 49932 37301 18201 58174 11035 41964 26214
+48191 8954 54604 24005 39173 3764 60509 17875 33164 52006 9842 43048
+23992 61644 3238 40405 21722 52072 8111 36852 55235 15313 29871 45611
+6009 63429 24112 40970 10464 56828 18511 35703 50219 7130 28880 64389
+20323 42910 10459 50789 21551 32755 57911 5512 44839 20568 35927 58976
+8524 29356 52456 19300 45134 6528 32641 64847 19037 49225 8637 39462
+26709 57537 11870 43274 21443 51327 5065 33494 62606 15018 44322 27506
+7896 51880 35172 17757 57968 5039 37907 49966 13671 28734 56350 10197
+42247 23669 51239 5686 35133 57644 16725 29464 49318 10052 34551 55782
+13571 42165 24579 58242 4303 38890 22045 50146 14645 33764 63522 5490
+44317 33599 17129 52339 9693 31858 58798 20331 46373 3867 32063 55170
+15068 44810 27914 9027 61684 37419 18941 45893 5885 58733 27064 38597
+2360 53939 21158 44254 13828 62413 25992 41310 1270 51206 17734 31542
+55691 3734 44623 28260 15450 61626 38055 7678 30519 55573 15125 47839
+27974 2271 19626 42389 8006 52714 21101 31459 60973 5295 43954 20701
+34197 56577 1590 48680 19493 35679 65513 7883 29073 52703 19237 42662
+10475 60143 26581 41206 7007 56696 24096 39845 10073 53366 19779 33488
+64094 931 47794 25452 39330 9301 58057 21110 48038 15077 34223 55729
+6643 42446 25928 59830 10016 46920 17061 32870 56216 5455 42728 24000
+60293 9185 30986 46678 16267 53654 29559 4006 64722 36194 15653 49596
+27609 1904 61049 37844 14791 50371 28306 4176 59465 38051 14438 29337
+54873 1102 42848 24570 56492 14551 33253 51842 6998 43751 21953 64072
+14173 34497 53587 6040 44399 32234 19273 62253 9671 49488 27118 40193
+3540 52222 30123 15997 59559 35503 1916 49395 29531 16601 60605 37772
+4182 46783 24535 62646 12015 38874 26908 48912 3114 58816 19055 34299
+44537 12984 64004 29275 1515 50582 37683 12940 55227 23689 42128 4628
+60453 21466 38755 14128 52206 32545 7664 65281 36625 20739 50341 11722
+42847 23434 55545 1564 32852 62295 14347 43220 24863 51879 3098 31529
+59591 12324 44533 28553 15908 63316 38066 1683 31020 55208 13533 48791
+24523 41025 8171 60645 22141 39336 11573 55150 27006 38847 4915 57337
+20476 33714 50782 1732 41730 22587 60051 13131 34301 53674 7452 44009
+27295 16022 59388 38169 4052 28697 64311 16498 48117 27379 1727 61975
+37410 20268 51404 5664 33677 48556 20887 65366 9832 32977 46256 20848
+54661 5501 38941 22386 63926 14163 37345 50601 7619 31048 55272 17963
+41236 11184 59885 26868 39169 3541 53459 22582 48363 13086 31440 65152
+10264 42427 23531 51506 5787 36005 57846 14469 29838 46740 7511 61343
+24392 40159 12103 56354 22088 46233 4928 29507 62047 16695 45973 28036
+1996 57085 37990 16003 30839 55288 7714 49161 22594 41370 11093 60525
+25159 40020 6801 52385 17297 33814 55431 12517 39491 24869 59263 3716
+33187 51279 13772 42515 25099 63471 7710 33858 53161 19398 45386 14569
+33807 63236 6897 43471 24149 54069 12391 39953 21903 61407 661 34536
+46850 18402 56337 4214 39724 27046 48784 14115 64627 35041 5354 44649
+24885 61429 11549 41471 21414 58213 6318 38750 24263 52629 13128 35621
+61906 1025 29994 46094 19768 59276 7292 41092 25461 64329 13199 43649
+23385 54038 4916 39447 21432 57384 12988 38418 27102 48295 10497 65055
+24519 40299 4155 59742 20408 47847 31377 576 52972 36899 13710 61603
+23534 44210 3580 32901 55890 15260 47555 28449 1964 61884 37243 17239
+53266 11967 42592 26410 63623 2832 40713 22657 55006 12040 40053 25706
+58547 1457 42692 22834 52447 13603 33609 64081 3035 44534 30343 13438
+54741 24294 41781 321 61247 20148 37896 49493 9018 29166 65200 20063
+46103 1396 32703 60700 16681 45919 28478 8138 64185 36837 19669 53717
+139 42198 23091 62378 6799 32715 48090 17847 54745 9268 41201 27010
+61829 1009 30596 53887 13899 48182 25646 40439 3254 65074 25021 39582
+12388 56126 24073 38745 6809 60069 19366 31837 51576 2982 43508 25813
+64405 14223 34022 50871 7774 43289 24972 60501 11293 38891 21792 56447
+6356 34814 46596 20239 63323 9286 34070 52326 13450 41401 25244 58319
+5082 40389 22839 52145 10372 33213 56795 38949 12345 59119 26431 47137
+134 37512 54442 14964 29963 62263 9088 46829 24866 39632 12216 55912
+23558 47208 3386 34020 63265 15768 45607 29718 2132 51600 35443 16438
+62119 29264 4103 49367 35775 14293 56182 23042 43703 8050 62556 26973
+41777 1949 54408 21960 41108 13249 65397 23479 38431 2635 53118 26652
+41418 12144 62985 20430 34346 48334 1416 54459 23200 39725 12024 59282
+26161 39475 6985 51697 19874 33086 55905 11986 43208 24165 65521 6845
+33848 52824 17093 44948 27598 7835 60871 37339 19663 45601 10841 62662
+23269 38676 2193 54435 26772 42123 10087 56926 28288 16181 50463 36834
+1269 59199 24133 45277 14851 34151 63216 6421 42792 23814 56613 11585
+40224 21711 53411 7855 35841 57648 14993 30198 50139 1069 42533 22195
+65455 14190 30618 46666 7698 53245 27958 16439 57262 36351 5675 49492
+27794 15858 62045 36727 9452 53485 23038 47382 1209 30026 57811 15405
+45033 27667 5003 60340 34642 18097 51498 7530 43833 25941 58775 12143
+41048 21471 55118 5934 34513 47774 18877 61560 7829 41396 25295 52842
+11283 41150 21587 65253 4197 30804 51507 14345 35131 56578 265 47708
+23672 42314 12542 60391 21332 41867 9578 54000 28943 16188 65420 37020
+4486 49646 28185 16703 51674 31363 1313 62713 35073 19932 50365 7193
+34254 56263 15040 44226 29359 8169 53879 35766 18132 60013 12794 43770
+30110 2342 57560 37376 17315 44896 11072 55989 27097 40375 1478 58173
+27803 16787 49450 37126 4536 64801 23693 44885 13395 32373 56389 8042
+44695 27591 17001 59638 37714 708 54070 25752 41337 12816 48941 22225
+63243 1641 34505 44315 15227 51489 28172 3382 65309 38215 15037 31393
+49138 7933 54323 23750 39863 12003 64211 22246 47060 3797 34339 59074
+14696 44872 29076 123 54242 36119 13925 62573 25856 42524 1801 48300
+23334 64919 8218 41023 26424 53277 11918 38731 21521 57909 396 44571
+29879 13539 60440 37722 4098 51152 28193 16445 59806 37940 4941 30691
+56738 14364 48689 24945 39421 8414 63726 21902 49300 11742 38336 23118
+58165 1625 47431 29819 15992 52358 36667 3400 56537 24839 45230 14596
+33350 64751 7634 44629 27841 16370 55746 37598 4585 50775 28523 16557
+56962 36316 1975 49448 29625 16009 61187 36701 8418 48773 24864 62991
+877 41806 17841 51309 30224 6806 56223 35958 18801 50416 9044 34109
+57843 16011 45056 28553 6412 59514 36886 18938 48750 10102 65121 26315
+40122 8164 51188 19455 33272 59982 5985 47586 25274 39328 10456 57050
+18691 33752 47724 5204 61368 18572 33769 47421 7935 56450 24593 39886
+11173 59164 21718 47669 4582 33872 60379 15480 45514 28389 11075 52863
+35955 17149 57334 4481 42300 26826 54919 12526 41301 23820 56853 3591
+39698 21847 50586 12901 32887 58267 9189 46289 27361 16405 59964 38214
+2838 30627 56906 20011 43622 11107 51063 34809 17682 57744 6967 42525
+21989 60655 10133 34208 51436 17912 43509 1162 54068 26993 40893 8426
+62007 24497 38936 12020 54839 22304 42423 538 57382 28816 15856 52231
+37951 3542 30075 64967 13497 43216 24241 53403 5377 30069 59914 16106
+44987 35507 917 49130 21793 62387 12821 34413 45057 2991 63974 24712
+55910 6899 45215 18240 35605 64756 10719 28111 50079 19656 41740 2913
+53562 33369 17312 61193 6150 44561 20111 32308 57148 8717 49186 23527
+38747 12876 61077 25890 43104 6139 54742 22110 40669 12327 60230 27071
+38381 3342 51170 18074 33214 59279 11741 48569 25220 38681 4432 56316
+26924 43989 10484 60883 17374 35510 50972 4901 29676 58824 18228 44914
+9844 32277 55717 19986 42148 2929 62765 24639 48554 10350 39435 21796
+57858 145 31586 51387 13269 42402 22330 62082 2737 31991 47854 15310
+50976 28490 4013 57045 35456 17275 50037 9433 32665 60153 20668 47293
+4253 33151 65077 14379 43938 29483 5312 57716 36615 10249 51517 22223
+47144 13716 30984 64392 243 43704 23154 51479 13212 33367 61133 6341
+45178 28105 16820 54018 37417 9004 56327 23964 43971 4038 34711 63310
+20419 42733 9974 51425 21255 32951 58727 2880 46319 25209 40677 11765
+64552 18289 36646 50604 8705 31105 54940 17299 42418 354 63228 27241
+38532 10641 54318 22252 38356 2853 64264 27113 42824 13760 53334 29085
+817 57106 36950 20334 49640 5552 32910 59010 14974 45572 23542 40430
+6962 62301 29067 16500 50059 34634 7728 64100 26517 48472 2733 39562
+21904 52229 6395 32867 58656 14033 45522 27304 8190 54229 36917 18461
+57194 11641 46013 25996 39374 4830 61199 21673 49065 11740 41117 26157
+63660 3143 32215 46374 16704 51935 27349 8840 62461 36218 20249 50311
+5025 33082 63113 14984 46575 29643 8108 60787 35043 16193 50136 28724
+1797 53747 37221 20287 61637 6020 36656 49936 14839 30707 62386 9611
+47132 24175 38810 6844 54676 19767 31214 60487 5446 45959 29268 16957
+53841 37405 10512 59644 24475 47136 1079 35174 56022 15031 44662 28683
+5672 60204 36820 16556 50987 27799 8983 63717 37437 18991 49607 5778
+30902 58429 17077 41369 10450 51804 20715 34540 60291 2995 43428 23087
+55935 9692 32712 47373 16606 64328 27727 8660 49665 35328 18416 55774
+1789 44787 34749 20351 65381 9643 42413 22551 52297 2599 33816 55226
+18908 47842 4965 40532 27288 62544 12613 39913 24119 48887 7740 62092
+22393 38846 11957 55091 26854 49023 2428 40217 22422 59839 11337 31432
+47851 20565 63563 6716 32752 44705 14714 53010 28240 11799 58891 35111
+5486 46356 26719 54454 10899 38248 22754 58637 13713 34462 47435 2314
+62277 22826 41446 12098 48962 25937 63912 3064 39997 21877 54051 13246
+45026 30747 989 57600 35940 14543 45448 23828 55279 3206 39383 22041
+62669 14136 35161 51988 106 30216 65360 12221 44048 28170 15991 54084
+38013 2609 30969 62766 16549 45177 28329 6357 52369 37647 20479 56093
+8073 42182 24977 64432 2156 33991 47587 20516 61871 9973 39004 25155
+53009 7089 33428 63722 14287 43571 23078 52538 2022 31162 62711 16042
+44314 28401 6301 51808 37194 18703 64831 9811 48684 26036 39600 5167
+62616 19740 32564 52976 2195 45397 28497 15876 57036 38009 6062 29792
+62710 20202 48180 10679 34609 58443 17840 43097 5105 52034 29666 16626
+63023 37138 6745 49570 24316 43520 11627 58388 19021 31539 50753 1862
+35505 48070 19244 56007 9014 40045 25847 60853 14122 31668 53873 4572
+41674 25487 51203 14477 32075 1974 30122 52423 20615 42657 4441 60226
+29525 14591 51612 37293 7753 58472 25228 41462 13117 48996 22779 64913
+866 39649 27062 53491 5077 43712 21572 58437 9745 36643 50120 15184
+30092 63453 43 43322 24293 54118 11032 39038 21556 64658 5526 31246
+45608 15589 53158 29554 8170 63259 35714 19667 49417 680 31493 55086
+21034 44007 8463 33813 64113 17218 49278 5960 38274 27214 59704 14620
+32426 46442 5300 52432 29287 16801 63702 36360 7587 48227 26482 57054
+11132 41139 21434 53954 6045 34964 58597 20210 42203 11402 64513 26207
+40789 652 55580 18205 44920 30042 6796 52119 36276 18931 61532 11587
+45657 20806 31323 55341 2882 41709 25476 58549 8838 35712 49381 16692
+28710 55750 3702 41930 23080 62249 13804 35432 50382 2424 31399 60310
+12321 45265 28316 16138 58426 37977 504 30702 55602 17561 43723 7681
+62446 19788 36030 51227 6172 29087 56666 20498 44429 3261 33825 61269
+19681 48703 12892 41866 26383 57236 6672 33965 47063 17499 60196 11463
+39901 25247 50888 5079 32305 63027 16314 44674 27662 9023 61326 36499
+17948 53775 2078 30175 48539 12696 58068 24181 39955 5480 55406 21422
+39748 12323 56809 24958 46340 9019 35668 63371 16899 29868 49368 647
+37806 61401 15551 30670 47732 3262 64772 22039 41030 10177 47862 27211
+57823 355 38332 22670 54989 12198 48231 28342 6857 59345 37659 14605
+54326 29006 909 49276 35108 18714 58951 10813 42103 23057 54446 3340
+40160 24094 56694 12772 39726 21755 63516 9267 35539 49285 16345 28982
+58613 2524 44285 20589 32991 57067 3928 49003 18106 33390 64082 9437
+43177 23236 50584 13263 31667 57372 2656 44883 20207 32156 61959 8777
+43839 20972 31268 63283 6898 49451 19588 33162 43942 2277 56793 17706
+33625 46252 11597 61102 20862 32796 52821 4544 46405 19279 31063 56879
+12886 44915 27884 6520 61690 35995 16040 50531 29120 4778 55303 37069
+19573 46039 7171 62279 24739 41142 11134 53230 17808 32769 58862 6458
+46202 28067 16723 57033 38139 7512 30650 60074 17523 43745 9571 53555
+20897 32173 56286 830 46163 17717 33639 59311 4899 45859 19571 33786
+62822 8822 49330 18917 33735 45381 468 57980 25250 38764 9630 48532
+21703 62537 3066 41243 24341 55657 13601 39211 20880 64503 3660 43825
+26637 52295 7737 32657 60426 14960 45440 24879 38893 4986 55796 18157
+33462 46243 7939 61148 24950 39187 11448 49291 21590 62264 5135 41749
+25980 48527 12392 58793 29768 6943 50297 37198 20252 46599 10041 57799
+26277 40307 4156 49311 21574 55592 10515 40990 23999 58114 13122 48591
+30478 1109 63400 35230 18105 50916 10716 32055 48530 17619 58468 5723
+31473 44933 16094 50774 28492 610 57815 36843 19064 47429 8349 59660
+26178 40941 11650 55239 22575 47695 3830 33131 61419 14936 45589 28436
+789 55699 36943 17070 46419 11678 59898 26807 38664 7471 48623 23927
+64074 11748 41112 22737 55536 4325 33604 52822 17055 44656 1646 30380
+65441 21171 44565 9344 35417 54251 15089 30560 60637 2601 41585 22588
+52956 9573 34203 63646 15723 44199 28661 6245 57819 34280 17567 51124
+2586 46381 34859 20487 61524 9387 45886 18345 37140 63382 55143 28615
+8408 49912 37155 12520 56973 21381 32643 47588 1351 62955 18138 31295
+45203 5614 55181 25811 38488 9792 59859 21018 48858 14789 35771 62658
+2676 31938 52415 19073 46041 6494 33513 57908 20353 49184 7839 41317
+26557 55880 12973 42960 23654 58773 1251 39186 21463 51676 14417 31573
+59635 6574 44942 27808 15289 62315 37041 2778 46757 25770 57329 12801
+40892 21251 54245 933 43122 25553 61692 12291 40198 22915 54099 3239
+32546 46168 13919 60493 23123 39230 1290 49067 26007 63014 13796 32438
+44344 3370 53261 18419 32361 46605 7958 58335 25578 38683 12879 62418
+22989 49151 1800 39275 26912 57126 8446 48118 17996 37270 60848 12668
+28793 52931 4888 43152 22016 63616 14812 35879 50826 7114 29703 57230
+18478 47880 10449 38977 26554 64969 5542 33166 52283 19164 48093 8433
+41063 25732 60911 12784 39897 23877 54824 2127 45845 17085 32454 63773
+7493 49028 24516 39326 11438 59316 23585 38989 4459 53735 18595 32188
+65057 2014 43386 23239 52977 8645 34043 59055 14090 43076 22827 54784
+3638 33696 47186 13092 56814 24801 38943 10489 52351 19009 33673 64603
+3555 46739 28762 15708 52224 35361 1172 62123 29409 14949 50233 37622
+4819 57880 27401 14700 53287 38225 7494 28928 59822 19595 43584 12250
+54670 26702 38300 5283 62221 21217 48667 13161 40095 25855 65120 4193
+32730 45136 16086 61018 27817 9755 51298 37931 20490 64446 6415 45104
+29026 15865 52739 35753 8932 60258 26217 43470 270 51834 17384 31709
+59149 5180 42593 23473 52650 12985 35040 64589 7787 47502 25459 40338
+11980 55892 24812 39455 420 60054 17595 33618 52390 7159 42378 22714
+58928 11755 29725 51444 17809 47841 4050 33578 57688 13758 42001 23940
+55060 8467 31403 48407 20338 65254 3153 40969 24938 55184 9863 39340
+23934 58892 863 38422 22547 64528 9292 30580 48184 18184 54162 2152
+39370 25884 63130 13032 44423 28667 973 58658 35935 14052 51716 26159
+46449 3486 30230 61581 15204 44447 27330 292 64274 35941 13805 50957
+24513 42053 2846 63317 19232 34242 51264 7141 42676 25104 65044 9805
+39418 22046 53272 13258 31200 56878 5768 44135 27540 16769 54119 37142
+10547 65375 23149 42608 4863 51638 29965 16323 60900 36028 1303 50573
+26906 43157 10098 58091 22366 40167 13134 55673 28884 172 50112 36455
+9979 65321 22149 48243 13782 30189 59181 1496 34950 52496 16598 44597
+28056 7051 56137 38019 16211 32145 63723 1866 41528 22727 53639 13721
+33340 61103 5758 45008 28747 15753 60139 36744 8593 46035 25949 64286
+2102 32880 44138 20107 52918 8706 33109 60082 14225 42964 25312 55590
+3382 38686 24376 61023 12626 41377 22312 53840 6664 34444 63065 15177
+45295 27993 4208 51683 35682 15041 65517 28874 5935 50198 36261 19844
+58118 12351 41981 26056 52091 7482 31016 61052 18483 44183 3418 31195
+54750 14976 41988 22220 59343 198 31863 50989 17602 45354 10138 31158
+60710 20934 48758 7166 33079 56934 13794 48066 24447 40961 4454 59083
+18458 36234 49897 8058 29213 61818 16665 45899 27592 299 59437 37886
+19690 47322 8150 65137 26291 41053 12408 54778 26165 40300 4905 57789
+23220 43498 13417 49270 692 33524 62551 19104 44404 6544 34407 60731
+20471 42205 9182 53787 26093 40189 12776 64159 23720 48261 3788 40686
+22456 57557 13259 30192 44416 7624 55568 24632 40168 12170 64385 22673
+44777 1897 37323 61249 15214 30044 46054 4030 62373 25313 40504 10983
+48691 22875 64941 3552 33874 46312 12589 56868 23864 41319 8141 52624
+19271 31208 61195 4433 48445 23965 39237 11118 65208 21935 48769 7264
+33637 58413 17884 41832 10807 55653 27100 38559 4918 64224 18874 34121
+46246 10225 55146 22464 39766 7375 61425 24878 48424 12343 39806 23902
+63815 3074 48438 21932 40465 11850 55100 25499 42983 6526 60129 17016
+33779 49599 807 30119 65227 18968 47241 10557 39588 26545 53920 1973
+32317 59877 12757 44410 24924 40524 951 59183 21541 43766 13187 55069
+25204 41299 2704 62553 29339 15172 53673 36803 4268 48428 26237 59944
+12118 39086 22717 48427 10277 57270 26778 41165 835 52020 18845 32241
+62450 10212 41521 25677 50747 7333 38505 21417 58227 12533 48787 26428
+39618 1371 61978 17755 36199 50352 8201 29585 63873 19058 41997 534
+46250 26339 60773 7268 35095 43873 17474 54779 11181 40788 25526 59789
+6035 48341 24369 39505 11469 54514 18290 30844 64226 3765 43746 22982
+50560 13285 33421 57447 2121 42142 23205 52266 8489 32912 59225 15996
+44940 29269 6476 52188 36109 19393 57685 2256 34574 50001 17586 44044
+5318 32089 57195 21119 49031 1836 41229 24984 62002 12551 48260 22074
+40853 6223 65527 27190 38563 10975 51054 19278 31533 56199 1288 45197
+27793 15325 59479 35860 6263 51491 21875 42004 12505 63661 25874 48045
+4304 40455 24323 54507 13567 34045 64907 1463 43069 26202 52945 9429
+29888 60651 16284 46397 27845 588 58969 36101 11012 52398 26025 44431
+14335 33222 61766 6731 42302 26266 49034 12333 54517 18510 33318 46136
+4005 60904 24973 41602 10185 55594 21603 48846 14680 36563 57214 5830
+29731 48151 20247 64121 8249 39224 23131 56375 9365 33970 52745 12764
+42520 22885 53664 5468 32898 60740 14956 45404 27904 10846 58627 36398
+17298 49535 3264 33004 57894 14431 42346 25558 50331 1729 36616 61041
+14786 29419 47180 3917 60017 28415 12747 50324 36845 20817 55347 7092
+33015 47548 19153 59420 9062 38413 21752 51646 5325 32068 63476 16935
+45976 27493 8686 60763 38114 16847 30907 54244 3287 43659 24485 56387
+12546 41068 23197 64448 3973 34390 50150 14873 30211 59611 8038 44714
+28068 16846 56975 36861 3820 50780 27649 16892 64696 35748 927 50166
+20519 31129 55936 9888 47640 17748 29845 62049 6481 46085 27983 15784
+57250 35944 4446 50259 21684 41945 11968 65084 26484 49237 1514 32587
+44260 13657 55893 23374 40353 9076 60572 30532 16679 49463 37254 1216
+56655 25243 46976 10532 40549 22198 63531 2345 34924 54048 20900 46172
+10452 34891 64612 20672 47965 6371 33140 57797 13525 43876 26371 52570
+7733 34572 64349 19832 47349 2793 41620 26747 62411 12464 41487 23052
+55002 848 38872 26964 63918 11500 43826 20520 51617 33582 5623 56699
+36521 14910 49793 28225 4081 55273 36601 14595 45847 23924 58859 1491
+38499 17464 52814 29484 8931 64322 36356 19212 41791 25417 52053 12996
+30649 55474 3422 46866 27850 15487 57485 36730 1787 49658 20422 32700
+59231 8512 44206 19163 36262 61715 552 33218 52680 18565 46756 11313
+32664 60361 5254 48718 29256 16865 56808 35623 9097 50523 20574 32367
+55278 5789 47448 17511 35366 57891 8579 29983 51071 13689 42989 22492
+61660 1850 39517 27196 50768 14201 34903 58564 9098 45072 28445 16420
+55444 38024 3694 29381 60002 20416 47700 1743 34732 53047 20076 43846
+6718 59370 25275 39992 12662 52879 29258 4119 58226 36920 16550 50181
+28077 1972 60329 36097 17615 49835 9232 32109 57446 16720 46773 29834
+4065 63140 37609 21096 53526 9584 42487 25909 54383 13419 32760 59172
+4346 43327 24187 51281 14512 36990 63101 6113 30499 49044 17927 53443
+9519 38309 27239 64325 4724 38268 22857 50684 10908 32995 57572 20573
+44321 8766 31416 63158 20473 43103 1736 53265 18160 33209 65345 6141
+44844 17096 34530 54893 12483 42993 23961 57521 3720 34567 52648 14065
+42408 23910 64177 6058 33081 46213 19459 56563 9861 31946 44191 21054
+53948 4847 36249 59191 15069 31080 48265 10036 57389 20781 32477 45222
+2960 62613 19846 32466 44478 9965 57247 19683 33537 51341 1843 42511
+23659 60618 11022 40685 17964 52940 31100 6630 62989 35386 18197 49701
+11423 42784 25227 64073 1192 34333 53929 17822 47347 10645 41424 21068
+62903 28803 8124 52712 36621 19395 63388 11291 46189 31015 15268 52139
+36058 4422 58392 28286 15022 50078 36205 8409 55095 25411 43372 3582
+61416 28467 16017 50291 38166 8664 30970 62949 19328 43861 2888 55098
+26940 38698 9001 58484 18616 35845 50125 6561 30001 61226 19558 46790
+11336 39689 22487 56684 3554 34491 44559 12868 62198 23653 40049 9209
+48806 21895 64105 5157 30726 46565 19178 57179 1600 34190 45209 17342
+62410 5390 34916 43871 14656 57498 21638 38328 7562 47037 27176 65148
+2650 34484 45031 18277 60147 12004 40817 25827 54158 4496 34073 45749
+15657 62135 27732 2460 49669 37241 18614 59202 8826 30137 48548 20673
+56397 1345 39512 26559 51943 6334 30908 62722 20297 43457 9487 52042
+18352 32060 64144 6837 43070 24607 52532 10791 35185 56048 19776 45967
+1053 35229 62034 14365 28789 44493 3193 64615 25503 41000 13620 54999
+25424 44765 2051 37554 57740 14529 29511 51103 6169 42576 25198 62772
+11864 38626 18463 52299 31752 5946 57910 36416 19150 46794 9545 61447
+25764 40359 398 54307 21709 48339 9749 31414 63133 13346 43518 23568
+49562 7144 32601 58493 12950 41883 24763 51451 3310 34920 59594 13531
+42096 23230 51835 478 32672 63738 19688 43413 10428 55074 27224 38294
+7622 58770 20089 34987 46967 5299 51149 19414 31885 63901 2712 43462
+25273 58918 11129 41198 21397 53351 7056 34386 60873 18678 45176 9051
+32316 59431 17105 44031 4139 31909 56279 13967 49396 24919 40274 1825
+62186 23668 38666 11951 54333 21562 41489 4185 56261 25947 39070 11131
+59453 24219 38898 6599 53166 18575 32819 48869 10046 57734 25792 38448
+2411 53439 17835 30831 64819 9420 42998 23033 52102 13443 32931 60418
+6502 43877 30314 19678 63012 11019 42915 22656 50634 3818 33766 58145
+10984 31282 47030 5008 65267 23330 41305 14328 58982 30491 6997 50646
+35311 17504 63662 10263 41598 27132 52097 4416 30488 55917 15809 47569
+27612 8992 65371 38209 16639 28384 54966 1204 41765 23392 59156 12780
+32919 47084 2784 63942 24944 38863 12660 60745 22516 43575 489 53503
+28442 16062 63507 38230 5744 30854 55647 17965 43670 7055 53896 21006
+32902 63921 217 41269 22494 52284 14024 34517 62705 8299 44077 27755
+16746 56053 38153 9801 31417 65008 18196 42285 518 48409 26412 62176
+14372 32968 44658 6919 56605 30894 18581 53420 11040 42159 26246 64875
+16 34771 52921 14843 44654 27838 8016 58657 35139 17067 51752 2301
+34408 46468 21193 63869 7443 38572 22538 55877 9778 46782 28084 15925
+58288 34800 3050 45962 23349 61490 11936 41921 25725 56449 7305 40481
+17156 52919 28269 176 61840 36022 17150 49414 5047 33414 55983 14440
+46853 25093 38522 8468 59241 20029 30589 48229 2242 61579 19793 30057
+45767 9539 63341 19479 31475 47295 27 55259 25523 38989 11659 61090
+22407 47838 2728 37332 63166 15771 28610 51920 8812 41596 24888 65497
+1931 39104 23207 54124 13727 48917 29352 8371 58515 37483 17242 47939
+4498 65031 20968 31809 45897 9441 56562 26305 38537 947 48446 22342
+58523 10339 38965 27093 55818 3096 35362 50897 15499 30938 60825 9059
+43091 26542 58396 3549 37333 51583 15451 30268 47076 558 59184 23756
+40502 7182 55241 25806 40047 10192 62283 19851 34985 53457 1089 30124
+47393 18649 63865 9962 38826 22710 56644 12740 34427 53475 4675 42636
+23818 57617 10466 31880 50659 13516 43492 22811 62583 1819 34176 53378
+15605 43968 28199 5214 58024 36348 14751 48413 23848 63536 5834 32031
+47033 16975 53669 29560 1955 58176 37815 12044 50191 28222 15544 54956
+38131 7279 29898 59548 20317 48859 11483 39648 26776 63630 174 49519
+24206 40451 11219 53820 17243 30829 58304 9228 42845 24509 51079 1261
+31845 61342 19401 43052 7802 55805 20870 35580 51504 13042 31464 64989
+4774 44967 24899 40760 13103 61749 34621 8104 46446 22824 59640 12642
+40651 26086 54867 75 38777 24805 57182 12180 41423 21473 50882 2777
+31687 63357 15520 44045 28071 7468 58286 37840 20325 52705 10211 34478
+48418 18711 56579 6064 34284 46508 12374 60174 20388 33319 46452 4389
+52872 18579 33843 58622 894 47375 23425 41511 10132 48760 26260 63876
+2236 40007 22258 55324 11139 33143 45254 13610 60233 24728 38668 5029
+55683 18364 35923 51240 2315 29057 61995 14780 42641 22693 53042 8161
+32091 61443 16143 45205 28302 4695 56677 37022 16740 49443 28592 5816
+60399 36709 18354 48279 2260 62811 26198 40071 10116 53433 17102 29589
+57554 7398 41952 23944 55014 12155 38462 22586 51072 3693 31844 62865
+15730 44179 28030 413 52692 35976 20068 57451 11950 47161 26833 38771
+7900 60490 21633 43282 10973 55097 26734 41774 5829 63665 18291 35127
+50669 9606 31545 61123 18783 45083 2006 36552 55635 15621 29485 46224
+3687 63360 23860 41420 12600 47298 22246 60819 7673 39124 26589 48834
+1111 62361 21665 39847 12298 56528 26387 49250 2898 34564 47465 13848
+55375 24148 40838 7617 61780 19899 57127 11646 32823 45408 17612 54526
+211 38633 25442 61303 11239 43676 21815 54105 2532 33773 58652 13754
+45787 23451 41125 6365 60554 29431 14428 53940 36919 4003 49545 20680
+33435 62959 7303 45476 28187 16701 53565 37168 9613 57494 21771 42350
+6310 51825 31441 14672 60192 35919 9680 49078 27347 16384 59015 36303
+3859 49628 30116 19703 60541 9233 42115 25389 50313 13000 35761 57764
+4523 30002 49829 15287 34198 61725 2850 45238 27642 14683 54570 38018
+7722 30721 58799 19543 49156 10491 40741 23133 63322 2830 35001 47308
+20555 60752 5643 33376 46302 13646 55843 24823 39116 4947 62707 19902
+37082 49539 10196 28586 61224 19330 41504 3637 56443 26432 41261 13060
+51995 30408 447 60779 37729 20313 50132 7809 37336 54832 16212 31658
+47159 1644 63736 20916 33557 44710 10500 58089 20184 37584 50286 6805
+29019 60639 19417 41270 10765 64069 26546 39969 3131 49331 22552 55976
+11958 34965 43975 17789 58592 4545 33370 51245 17200 44170 8743 30064
+60046 18305 49120 5339 40462 26764 53324 13302 33094 58273 4533 45221
+20669 31932 55637 11039 47269 19554 31847 59966 6605 45449 17913 36325
+63119 210 28439 44295 18693 55023 11706 40402 25543 61706 6230 33590
+52080 18984 42777 12195 64674 25545 41633 5736 47606 21310 62167 12887
+39727 26479 54494 4868 39525 23347 56032 10296 43626 21894 61540 13812
+33216 54440 6051 44068 27899 16410 64705 36687 2780 50396 28926 15979
+57599 37848 9517 45835 23443 60083 6518 41173 27142 52303 2352 43818
+19028 60933 30173 14069 49284 37302 666 65115 27700 16542 52221 38111
+7413 29899 56842 19822 47450 10011 31721 64364 21046 44637 59 32190
+54917 10695 42345 25730 59337 13566 34791 51267 6420 43809 27380 16903
+61260 35745 3346 47078 23032 65022 10214 39388 26962 51862 3814 31223
+55684 15425 45025 29012 7049 61213 35840 18994 47961 3136 62815 20724
+32943 52585 6522 39653 21955 57064 10925 36932 49825 16171 29179 62554
+614 47111 23825 40991 11612 55003 21549 48997 2154 33277 57705 15189
+43310 25758 50672 3588 33201 65167 18756 45403 7927 34010 61375 16054
+47417 29644 5689 60272 37548 20265 49836 8736 34835 56779 18359 47342
+4357 32311 61526 16424 44874 28432 364 63923 37975 16422 30852 49013
+8353 62449 24310 40798 11063 54563 21965 39441 7380 64996 26647 49217
+12470 39040 21352 59432 5728 33108 53304 15985 47886 28473 4293 62645
+35562 19098 52000 8632 43065 26199 65491 11999 40826 22877 59130 6261
+31707 47226 18648 56913 1479 39451 26751 48451 10875 64947 21302 39546
+7143 51133 34750 12621 57495 24199 45158 8445 40272 23798 54684 11667
+43583 20877 61655 31420 54 49765 36215 20291 64585 4595 42665 26889
+60289 13985 46656 29228 6608 56917 36812 17898 47171 9885 65172 25923
+38982 5385 48810 22584 63081 1119 33972 46101 16619 52201 29746 3781
+58989 37558 16218 49444 27748 654 57400 37086 14691 47733 25525 65314
+5666 31897 44131 19664 58643 8930 35977 50566 15591 30933 55685 4841
+42175 25324 58661 11168 46482 30539 16833 55081 36178 5456 47967 22439
+64606 10272 31599 44494 15894 60966 28131 2074 51594 35693 17764 26118
+40410 4419 49111 22833 60059 9656 33247 46048 16080 52756 28121 5908
+62226 37746 15209 50015 27765 8229 64315 36483 20278 49666 2065 31697
+58264 16995 44615 27384 9756 53006 37655 18912 59881 4456 31949 50230
+15046 44696 27931 2167 65056 37413 16620 54932 27632 4729 49484 37904
+19535 52854 1507 32692 64704 17563 47192 7971 33502 56787 15610 46247
+29508 2155 64415 37454 19472 53646 7959 46734 25050 40688 11862 59557
+21924 49127 5208 33904 63628 16304 45531 28317 1567 52118 35836 15166
+57123 27670 9017 51429 38161 14947 28735 54521 7773 41591 23627 59662
+11743 41280 22131 52271 1223 32766 58099 18046 43020 7004 51421 30862
+14948 62154 35587 5532 49386 20466 33679 64759 10912 45174 18527 29649
+57424 4216 48485 27969 14741 59706 38094 8395 30234 54624 17514 47784
+3296 31180 59629 14661 42823 23171 51653 1291 34537 55281 17470 45380
+9612 35790 57794 15932 29216 47434 6758 62417 24487 39930 11373 53623
+21093 35064 57082 1563 45798 20873 33944 64811 10193 43187 18999 51283
+30096 6958 62039 36824 18360 50194 904 34648 62741 17114 42937 5320
+56665 27091 40264 10805 51464 20690 34358 61039 7643 47012 29757 15999
+53689 37295 2408 58999 28029 15536 49277 36405 4070 53632 29480 16421
+58274 35954 8653 50200 24913 41567 70 59825 19632 36957 49734 7750
+30723 65355 18532 47648 2514 39596 25816 53079 10964 31474 60337 18179
+45853 7635 33728 56026 20946 44799 4092 31988 64345 14373 42703 24600
+54630 11664 38271 21403 62523 5418 32897 51439 17926 43176 9305 58045
+20884 30097 54019 4118 44996 27539 15072 61933 37468 2768 50741 27683
+12731 55903 36913 18634 48745 7694 61536 22153 40967 3046 52711 28890
+16609 63073 37335 7966 48199 23898 57278 12751 41029 21580 54388 757
+32164 45077 13478 57929 21747 38515 5493 60142 25434 49328 13872 32123
+44173 8528 55688 24845 40843 12725 47178 23872 63796 2244 31050 46886
+18932 59876 5171 32500 44709 14300 57365 26074 38489 6541 63452 27228
+38335 10235 52668 18638 30016 62408 6043 39943 22126 55807 9843 30516
+47665 13307 54104 22866 40102 1808 58142 26955 39478 10340 53296 17591
+32629 64771 2196 43774 27438 14647 53437 36710 9830 58777 24524 42404
+7258 54449 21878 40723 3508 57297 30012 16088 50314 35296 1723 61373
+23929 45525 14490 33228 56862 3688 42663 23254 51549 13487 29922 62058
+8186 43908 27310 16488 57421 37441 1309 49536 28013 15919 53415 37924
+3654 31993 55045 17553 48700 9175 40551 26188 63224 12450 38437 23019
+54305 3736 32832 58865 14466 42866 23015 53140 834 32285 64338 15923
+47497 29372 3482 59963 35143 18163 50253 6421 34601 59287 15964 45673
+27835 8872 57121 35310 18486 52106 1631 41811 24948 54634 11660 40491
+22732 60591 2961 49348 27266 41232 11149 55349 21077 39792 14207 58112
+28510 6507 50002 35344 14091 64898 22691 44479 7321 30340 55072 13666
+42877 22470 59992 8581 33648 48793 12993 54762 22960 40197 22 62083
+26002 48358 12096 39634 21371 64556 2764 38383 23338 52010 8518 32580
+60198 15362 44096 29781 481 53191 36500 19166 59306 5991 33896 49694
+20717 42416 9987 64079 14768 44603 28100 8052 52817 35906 19197 63396
+2903 31375 50499 11930 44219 31023 20651 57822 1040 34352 44936 18137
+53690 10936 40415 25661 61981 6660 36369 50570 14243 30701 64620 325
+43987 27673 16259 54297 37749 10232 61302 30533 18828 51202 6866 44085
+30240 13880 56226 35036 8708 62193 23744 45283 12104 40622 22206 55437
+5362 38780 27012 60097 10801 43926 21790 50815 6853 32365 61168 15642
+44237 28151 985 57113 37962 15533 30150 47592 6330 55017 24633 40319
+11121 60563 20404 37743 49858 4663 29441 64565 19587 45781 832 34102
+61291 16220 44789 27767 3415 65398 36650 17395 47546 8677 54603 26574
+39430 11565 64147 22010 47307 1694 36940 57508 16735 28718 50808 9235
+42704 23567 58967 2582 33251 52965 16547 44046 27313 9736 65510 35069
+19871 51748 5164 42328 26525 63416 13435 34291 46791 7376 56647 25606
+39030 11989 64937 22644 48702 5658 41083 25818 59761 651 33727 52926
+15060 44672 28231 3373 64314 37697 14707 50151 27646 7568 59808 38036
+16219 30367 55432 2445 48674 24426 40105 12651 57670 22071 48894 8471
+40251 25693 54486 12834 38715 22438 64209 3250 43364 25795 52943 13129
+31366 56612 5018 41783 22956 51125 13744 33002 63627 8077 43392 22122
+55661 11551 41288 24681 62842 2049 43805 21730 52158 11301 33211 63932
+15043 45376 28008 6286 52667 35024 12995 58944 23186 44620 9052 34449
+57009 19199 48771 1431 41016 25597 62519 13408 48693 28519 9007 52968
+37149 19689 57863 175 48360 26972 39910 7793 59067 23466 43964 13544
+55471 26302 38858 1997 63176 32933 14547 49969 36835 6077 56231 21072
+33238 48278 9361 60454 20497 33454 45159 4672 65374 25255 39603 9712
+54359 24706 45011 14083 32827 55894 1176 43874 27691 16197 60847 36319
+4474 50480 29295 15927 64312 35812 8188 48195 26478 60781 11304 41200
+22933 54367 1584 34743 48334 17492 65534 4375 38345 27254 59160 9747
+49205 17673 34599 44912 7353 55284 25581 39474 11965 64688 23642 49030
+1742 40305 21856 53481 13819 32250 60290 3307 42478 23477 51211 13484
+34756 59069 943 44089 28122 16736 63808 35249 4700 51560 25801 42377
+12728 62879 22483 46294 6435 29615 56159 20736 48778 11289 41347 22797
+60899 2981 33075 46846 18435 52244 10924 33644 65225 15506 45651 27929
+5038 59716 36731 18086 51393 6547 43139 26883 63595 10886 30567 52886
+17953 46530 643 34323 58999 15534 45927 28893 6276 54193 34861 20008
+64042 7317 42673 25736 56619 12781 39762 22317 61137 220 31351 45775
+19327 57462 5619 32893 44345 15599 52062 30389 7588 61912 25759 47285
+11770 40494 21958 56361 5454 34144 51751 20510 42651 9342 63468 26463
+41502 13366 55454 30900 2941 50728 37761 17057 62052 29393 9821 49453
+37139 20182 64171 5879 32967 45430 14482 57773 21407 38249 7444 48216
+26372 62497 2054 34760 44167 19797 60849 9435 40098 26221 52913 2723
+32415 61945 12570 48273 25627 38728 1587 51522 19017 29502 63174 4680
+44493 28300 16649 57873 36986 9527 53088 23339 43513 6059 56532 26915
+41267 10593 61060 19087 36952 49410 4164 28127 62584 18024 46457 9791
+41225 26163 56468 13637 36826 51119 3314 29072 58414 54337 36696 847
+47305 24505 59443 10106 40276 26095 56024 13636 34329 47977 5581 65098
+24727 40674 12748 48392 23051 61130 3659 38660 27073 54668 12336 43699
+21685 59150 5302 32635 52437 19653 46924 8182 33339 63353 20801 45110
+3943 33903 57242 16969 47597 27393 1045 60327 37589 17128 53637 27564
+3401 50214 36849 13945 62846 25386 43278 444 53788 22874 39797 12766
+63304 26588 39453 3322 55115 20155 30954 48152 8798 65323 25678 41241
+13148 49042 22418 61406 2337 32974 44544 18276 57801 9465 34099 52544
+13707 42373 25400 58724 6077 31618 52202 18946 48411 10203 31240 56687
+20584 43628 4679 59250 30604 15511 50045 36968 6182 60319 25328 42007
+13966 54771 30556 4074 52445 37370 19206 61924 12383 45493 31250 6016
+60594 37442 18492 46811 700 55215 27234 38319 11393 57964 23691 49192
+1947 39051 21693 61300 14202 31437 53777 3755 44376 20723 31342 60786
+9177 49428 20363 31970 46456 6073 61698 20169 33603 48228 10940 58782
+19969 31907 44820 4036 53043 27411 14161 62820 36982 9735 46747 25808
+59293 4323 33332 44985 16109 61721 28770 2178 53027 34356 17689 47039
+9222 59429 19787 34769 45695 1502 64888 18111 34079 45337 9737 58024
+24921 39275 465 52472 30331 16000 60016 36069 7133 49315 28272 15911
+55133 38082 4333 30008 56946 17030 47879 27346 1700 61325 36429 16920
+54206 29548 4066 49989 37067 12861 63210 23994 44983 6637 34452 58058
+19319 44153 3191 34558 61242 17807 44054 10913 32488 55065 17079 42064
+3891 64978 26420 38966 10870 48457 21328 53254 6926 40815 25802 59457
+10751 46362 17573 30457 64088 907 41394 24212 52696 11170 40137 17525
+57702 30165 1718 50743 36179 19193 59929 6722 35166 48843 20770 63883
+9256 33977 46802 13201 58450 24891 40120 6200 53099 18520 32837 56495
+2472 43081 21161 52363 14553 36562 62485 6867 29889 45974 19747 56598
+11723 40223 23041 52882 455 31713 62246 13393 41858 23444 52916 3536
+33335 56333 18412 46836 10267 32062 61724 17793 48379 7088 39003 26467
+57263 14805 31862 47214 5141 53769 27541 15799 61617 36618 6983 47129
+23978 55135 11010 39055 21409 57602 3570 37015 50618 15182 31495 61461
+681 44894 28042 16785 55126 38025 8359 29929 62596 17195 49180 1423
+31518 44330 12306 58315 23631 39545 8022 54964 21393 38975 12980 60323
+27281 38433 2843 55291 19679 32653 44487 8904 64764 27460 14362 50273
+37725 3169 56894 24940 41647 10407 51555 17272 31535 62554 4673 47865
+29300 14704 52107 36875 8380 64214 27736 16636 50065 37268 1969 59834
+21960 44930 14027 35907 53834 3211 30791 62972 15174 44278 27787 7705
+60701 37342 17407 53768 1078 36972 49518 15151 28622 65358 7853 46578
+27314 14323 53512 35854 4786 59144 27840 16810 51675 35635 697 48432
+26395 63405 10202 40514 22752 53187 13800 31902 57160 5027 48158 29025
+16363 55255 37250 10490 45359 23774 58042 5974 41836 23074 61353 14080
+31442 53530 7119 40972 24126 59141 13615 46857 30005 2280 51809 35235
+12409 63585 29391 16214 49601 35533 1220 54744 25081 42545 13337 57851
+29301 8003 51110 37366 20906 65523 1704 48163 23226 40781 9327 61216
+32242 16992 63822 10932 40867 19608 52039 31692 6225 62861 37402 19707
+50954 1765 45294 29024 16909 58861 35953 7260 51100 19749 31828 56496
+10425 42956 22667 63761 2867 37605 49302 15322 28447 55854 11613 42169
+24545 58623 1798 30125 52997 12471 41076 24335 59589 7675 36879 49898
+14360 30734 65422 9483 44625 28573 15913 58540 35255 4704 51595 23810
+41603 11288 56990 18812 31204 47068 6072 58921 17806 33484 51608 11644
+43267 23840 59946 4178 39035 21274 53992 8020 38691 27216 64011 13934
+30602 47013 3899 55012 24157 39251 8118 62910 21523 46594 12977 35085
+55420 2464 42065 24301 63740 12421 39597 23589 52406 338 32444 61805
+20391 44146 12149 32112 56568 7769 46691 27894 16247 64326 35793 1161
+49656 27697 14967 58019 35637 8176 51123 23890 42938 12951 62854 21286
+41678 5875 48421 25963 59182 12893 33725 45041 7054 51376 19216 33962
+63874 10979 46116 17892 36275 53494 2611 29751 58447 17986 42411 10285
+55639 26569 39174 1164 52157 17179 29663 65306 8406 46871 28722 15681
+56567 35506 404 51742 21504 42483 14292 64033 30940 6021 50446 37267
+19229 60173 11103 42406 26800 55932 3992 32787 48447 21017 54171 11224
+40153 26174 61825 6490 49177 17420 31728 46041 12425 62509 25511 40355
+3502 51659 19240 30895 64531 8346 45546 27712 14581 59604 34896 5586
+51114 38194 14330 28440 63551 8665 45425 27504 15492 55200 38196 766
+29150 59941 17198 49106 8244 39039 26735 55373 14178 48491 29600 5099
+63642 36620 20655 49986 8372 33844 58583 19541 43482 1221 55967 27251
+38304 12331 62696 21882 48096 3198 33761 55041 20051 42368 8569 60050
+30362 14290 53649 35802 5261 49905 20941 32857 62699 10562 45313 17428
+30130 56997 3909 44261 27425 15516 54465 38178 2203 29728 61866 20426
+48535 8657 41565 25720 63281 11143 39007 22117 47873 3970 59081 25966
+40301 10069 52141 17049 34135 63332 4989 44280 28207 15849 58136 36792
+5893 49896 28546 14966 61237 36139 8652 44338 24651 59288 2798 39864
+22707 53628 12655 33356 64417 342 44236 29468 18143 60820 8149 37803
+52159 12315 30942 45120 19353 65365 1469 37005 49970 16582 29035 59811
+7907 41798 25040 54185 9513 40063 21921 64096 13612 34446 51179 5173
+42654 25070 59204 13454 48105 22144 40503 3911 49688 25571 63138 13778
+34185 46316 39 54025 24589 42279 9369 63277 22465 47714 13142 37465
+58092 5337 30643 52111 20587 43099 11507 61639 21327 33023 46636 1617
+58962 19671 34588 44554 11686 54789 24319 41140 2804 58904 19864 32051
+46270 10563 55385 25650 39744 6485 65113 24960 43096 10474 51136 19598
+32908 57034 1756 46344 19063 35286 59036 9920 29986 51349 18920 45155
+4369 33585 58296 16807 44092 28294 1948 56313 38119 15651 30333 48723
+7836 61144 23909 40377 12881 55147 21082 38266 3024 47114 26824 62005
+8749 35234 44514 19272 59865 257 40917 22371 64249 14756 31829 52342
+3302 46333 19927 33939 55629 9698 43143 17924 64726 30330 3777 50003
+37404 20053 61268 10341 42622 22542 56947 5313 32763 51322 18322 43395
+9395 64271 20294 36336 50093 3617 31935 59729 18634 45305 6947 34994
+56965 15514 30063 52064 5635 43547 24336 12752 35295 49800 4064 29696
+57256 17143 45353 9105 30466 60533 13015 42008 23246 54252 4130 32469
+61770 14474 45377 27351 679 55330 36180 18321 50094 9558 33448 60891
+21155 45487 5950 33811 62723 9958 41523 22659 51310 14452 34315 64116
+5773 45796 28444 16277 53092 35419 2654 56415 19919 46249 30732 6163
+63214 37783 19192 54017 8654 43655 26363 62224 2446 33633 52426 13609
+41686 25028 64289 1267 38859 22133 52625 9803 33459 58261 14918 43837
+25942 55484 126 41164 21786 59220 10294 35982 50797 15501 31477 60730
+1493 42811 23221 51903 14388 32494 58181 5345 46660 19994 33613 60877
+8955 44681 17251 35683 53792 5052 29606 63326 18809 48542 2128 40035
+24975 59308 10445 33401 54426 20092 44334 4564 37797 53753 16767 30170
+64510 2344 40624 26328 56190 11088 38638 22607 52187 2994 31068 62207
+14401 42145 24484 57460 282 40513 22794 54716 6595 39315 26978 62655
+12417 48488 24894 39687 5016 63576 20933 32596 45965 9639 57731 19463
+34645 43879 3769 60829 22782 39683 12159 54022 26675 39514 7641 58184
+22716 48484 12173 40861 26027 52232 1230 30277 65133 14889 44644 28241
+8085 61021 38033 14636 29314 55734 4652 47728 20975 33754 60127 2210
+42630 23671 54807 9226 38585 21624 58676 14906 37085 49642 826 32656
+60646 19001 41443 10494 55802 20961 30645 49696 2364 37751 58231 17066
+31531 48940 5086 64886 19907 32526 46441 10129 51955 19799 32177 62826
+1670 43374 24820 58316 12529 39469 22346 54457 2689 30599 47185 17335
+62030 11421 40191 25761 51631 4914 42932 23284 58827 13066 37679 50509
+6355 29204 56978 17045 46786 27399 2402 64730 38210 16522 29534 48108
+8279 55547 25600 39331 519 61415 20174 37716 50969 8685 30622 64842
+19046 45560 5670 36722 56406 15756 28765 51680 250 42678 24018 57298
+15393 35798 50086 8858 30855 61831 20384 46321 1208 30534 54710 20984
+49092 8648 41384 25468 64867 12048 40441 22904 51841 1466 31526 56669
+19959 46396 9806 32286 62734 16629 45525 28374 6213 51013 36581 19434
+59213 9502 33592 46117 20837 56850 2702 39807 26191 58512 13852 30420
+52767 5633 44531 34393 13704 63559 22560 46905 4521 33534 58012 18652
+46566 2498 39176 26982 55930 10665 38396 21248 64434 6678 38372 27204
+56460 10009 47113 18942 31039 60907 5556 41823 22864 57091 14403 35094
+50699 3602 29081 56062 16882 44847 27889 1060 62426 36007 18471 53814
+8513 37910 49721 14658 28531 65180 5227 40022 22496 57728 9534 36410
+49794 15426 29642 62278 4316 41715 24185 51167 13476 32018 57935 575
+45527 29021 16546 61398 37218 6972 47968 25782 54888 11543 40877 25513
+64384 5236 39736 22571 53467 13940 30788 61898 8407 48681 23781 41826
+12352 62781 22344 46543 4025 37204 57321 16189 31176 47829 5959 64800
+23883 41882 12162 56777 17345 30820 51927 5340 41808 25347 54261 13218
+34534 47969 7870 56705 24825 40289 12034 62956 26911 39977 1013 52691
+19854 33647 57420 8092 45747 27647 14643 55040 34910 747 45630 23931
+61554 13007 41505 22157 52866 2507 31405 56840 14241 42920 24377 63093
+8871 40557 23503 54460 12632 39728 26885 62103 2370 38277 21123 56111
+48001 22564 64963 14026 39945 26006 58681 105 43136 18292 51290 34918
+7668 64501 28309 15480 49384 37721 5506 53237 27950 16230 64150 38177
+7919 28585 57601 17176 43449 1368 51950 28990 15957 57102 36680 3559
+49868 27804 16505 55638 38015 67 31297 61833 20740 47945 8909 40060
+25625 60093 10951 49116 22124 41053 896 56179 29966 16430 49246 36481
+10261 59507 29520 18103 46160 6534 57550 35178 20024 50490 11158 43040
+26878 61289 2805 38460 22813 51670 7442 38279 21169 62543 11923 48348
+26072 41697 4785 57299 29967 16962 49723 36443 6629 64449 24628 41825
+9828 54961 17761 30274 49018 2927 57808 24966 39425 10122 49105 22549
+56956 13140 34798 45058 8193 51314 18647 36739 61043 6204 29111 47283
+15531 57437 27503 8902 49921 35880 19083 60263 5580 45706 20857 34172
+60954 9213 44607 19383 33956 55124 4982 47810 18339 35195 65178 9936
+30222 50948 14712 43288 21686 58152 1895 32850 46330 17496 54846 12006
+38551 27088 61459 2946 49280 24339 40311 11227 56064 17544 48011 29929
+5541 63645 35017 18873 46114 2807 61440 26953 38608 10390 54881 21253
+48401 7206 36694 58378 16336 30022 53313 711 44506 27635 15765 63835
+38189 7577 28739 53573 18131 41004 10685 63377 27107 48454 5213 35496
+57084 13588 27985 53516 9638 42840 24843 65195 3326 33526 51652 13323
+41986 23827 60304 7989 46776 25622 40110 11971 55775 22003 39613 3270
+60967 25579 42799 11879 56190 23440 40571 6775 51409 18993 33315 64521
+9676 43297 25408 51789 5527 35015 57390 20858 44546 9151 36158 65479
+16891 30013 53263 330 44818 27624 15821 63349 38186 9742 34953 51824
+14880 28480 57410 4177 42617 23159 60682 12138 33717 46921 15801 52367
+28168 4772 58122 36063 17373 49554 11090 30544 60588 21433 44021 7140
+37389 54669 14288 29796 65212 3406 43381 22539 53497 6631 33567 58507
+15099 43764 27819 12523 56242 38129 2904 33140 59717 18023 46049 4754
+33919 55013 17258 42605 6925 64156 29428 15507 51080 37396 4685 58400
+24007 41979 13348 55501 21640 39631 4345 64912 27007 48587 13108 31917
+54208 6798 43344 22736 61956 11541 32552 47032 18718 56275 201 36350
+50912 15855 30228 62462 7464 42002 23770 49147 12231 59872 26085 41212
+993 53312 22621 48565 15340 32754 62169 2633 43211 24656 53493 12151
+39686 21636 59951 6702 36465 49692 15709 31303 64216 10251 42295 24540
+51158 6297 31777 59323 15645 45299 29526 2544 60369 35732 18698 52380
+11017 42868 26527 54152 792 32499 59624 18637 43465 6913 53656 20820
+34846 63532 9516 47080 19354 34335 56239 4653 49175 23981 40329 12299
+62612 22329 38679 3333 49040 21330 57739 12858 35169 44289 286 55773
+25245 39553 5806 59739 21230 38692 10320 54840 32561 14831 51480 28267
+962 60154 35946 19600 45097 10594 53958 26192 39279 1557 60885 20200
+33191 46826 10067 65392 18394 31019 45169 2262 59299 26231 38423 6683
+51776 17292 31919 60470 10307 44290 27869 15693 62529 36783 5523 50924
+29353 17013 65182 37072 7594 47903 25469 59960 11649 39765 26776 55552
+6500 38821 21902 49857 384 31103 58755 17607 46615 4840 32705 49691
+14578 60239 25616 42017 7396 11459 51668 30479 3678 55404 35692 20399
+46028 10492 62520 21153 32185 44457 2177 57039 24896 40068 10876 59469
+20151 30640 50587 2628 41624 19625 59924 30868 10291 54057 36663 18906
+49580 7082 32280 65025 12983 46702 23776 41767 10511 60536 25544 40479
+7243 50946 18551 32599 57613 3075 44050 27984 12320 62029 35418 14981
+51062 27442 7378 64571 37741 20767 49810 3938 34014 55979 14044 42339
+24174 62938 5092 31557 53275 18018 45249 9393 32144 64944 14426 43431
+24610 56356 3311 39903 22234 53210 14244 35014 63279 8548 46727 28001
+15909 53595 38022 735 31002 59467 20727 47481 12271 40660 26256 64860
+7421 45852 18363 34123 59925 1003 41671 24439 53305 14853 31340 65160
+3391 42583 24088 51857 13649 34980 62755 73 45320 24471 40031 11824
+53198 17161 31928 57422 1456 47252 27923 15695 62548 35928 7779 50880
+28312 15368 58706 36836 4179 46799 25317 55865 8411 40328 23260 61241
+11068 49072 26279 41355 6238 57265 19052 33422 47222 7435 64660 20741
+33067 45247 1632 60302 20241 37807 49965 9421 28811 56087 14760 42342
+24204 56998 4938 32537 45509 14124 63094 24883 40435 5599 51373 20827
+34430 61444 10631 46997 19143 36780 57698 3672 30053 51800 14641 43317
+22015 59530 1613 32854 46008 16742 51166 29492 6531 61740 37381 19196
+46927 11751 54791 26759 39416 5873 63020 18604 36122 50312 303 29843
+62146 15347 44489 28348 8820 52673 36973 18423 59077 5503 36025 49295
+14694 31307 59835 527 42075 22957 55860 11963 31538 46061 18937 59576
+1790 31688 52531 14977 45479 27709 7968 60205 38202 14727 31197 55681
+3443 47251 20891 32058 61779 7294 45127 19356 35746 54619 11287 30407
+44739 2130 64419 24351 40601 10096 55321 20773 32496 44952 1360 63609
+19849 33743 52409 3760 46467 19420 32289 58667 9408 45881 25013 39712
+12206 60623 26866 39148 2520 48752 22165 64396 9157 31382 47101 16301
+53202 28328 7211 61508 37111 21026 47258 9535 58780 19287 33499 49875
+758 43189 23472 54175 11331 31093 61559 2192 43490 22941 51330 10088
+32681 56108 19824 42316 1076 62987 29774 16223 50759 35744 3874 59321
+25232 42277 9012 54513 21740 41120 11189 60600 26956 38415 4999 52481
+17450 31624 64953 9083 44433 28660 14171 54855 35719 6279 57989 23767
+41258 10376 50679 18060 32623 65415 1372 47212 26272 41303 12746 57610
+23291 39476 2379 61383 20216 33412 46671 7912 54431 25300 38882 12593
+56023 22849 43887 5995 63342 30664 15715 51144 35695 7642 47202 24621
+64575 12723 39573 26599 50525 2491 30718 60163 14764 43852 27577 8260
+52693 36474 18309 58237 1326 31802 50705 13875 43572 25140 63273 7973
+33092 47718 19177 52510 10853 36240 65066 15862 29764 50109 2404 43131
+24764 63151 6761 34674 46844 17456 55587 8998 39434 27195 63937 4540
+34719 48679 14072 58863 23308 40089 3695 54884 25899 49157 8450 38967
+23696 63282 12504 43821 21619 49992 4405 33708 55438 20418 47934 1881
+40936 25838 57923 11778 40562 22314 54506 2874 44834 29170 15073 57609
+35445 4228 52181 23821 43706 10784 61905 18154 33860 52503 7596 42415
+26216 64655 11054 38477 24374 48627 1375 57727 21030 38463 46411 18704
+61507 12498 39335 26529 48534 5424 60480 17238 36828 52728 9024 28897
+47121 18564 54515 6193 33730 62267 13115 42718 24003 52213 4817 32765
+63537 13913 41215 24937 47466 5449 61164 20409 34290 44957 2138 58931
+19128 33264 54191 5055 46377 28929 15614 64436 36683 10084 55054 20544
+47749 30447 5451 52413 37891 19438 57301 2028 32578 46667 17043 60121
+10997 40388 26397 54437 658 30221 47243 17205 60455 8148 34152 48255
+20980 54434 1702 40730 26888 59734 13432 35515 49686 5602 29102 58530
+18584 45245 1992 33436 60469 20778 42461 11099 54582 26180 40725 6166
+61445 33323 17115 51093 3772 32751 54854 20133 47966 11495 31056 62531
+17460 47364 5412 39800 22092 57883 12624 30607 46410 6940 54626 19503
+32020 59190 10238 43046 22720 50814 4295 29682 64905 20990 42382 10759
+54445 23115 40897 2824 47399 25298 60657 11753 41398 21758 52853 1039
+33467 64335 17768 44851 4720 34952 52197 15016 31151 62494 606 44538
+28702 15710 53758 37368 9300 56531 25222 42027 13583 52234 31031 6893
+62261 35837 18446 49530 101 34175 64304 12974 43459 22349 51938 2602
+32065 59994 17802 47726 9355 41786 26505 55236 1909 41290 22804 65416
+13173 32610 46823 6719 54540 23492 39758 12045 64391 25094 43243 4090
+55344 22127 41291 13841 59452 29758 1276 50033 36340 17403 56473 9312
+43223 23132 53346 12824 33423 57433 4555 46165 27387 16527 65337 35203
+1999 50379 27726 16675 54879 38167 8037 28972 63100 16732 47529 27878
+4775 53177 37857 16299 64065 28354 7203 49807 37775 19597 62344 4056
+34905 47846 18676 54015 9288 40567 26726 58527 13026 36080 50165 1001
+28775 63098 16573 47345 27478 5537 58280 35524 15293 49915 29349 6241
+60277 35441 14297 49664 27594 7573 53749 37762 17075 62284 12875 35820
+50307 999 30887 63013 18268 47454 7030 32403 56952 20073 49585 10958
+32661 44642 18764 62066 15 39288 24613 56437 13491 31979 51198 3069
+40865 24553 62314 12647 39817 22261 52740 6720 33795 57967 12249 44793
+27796 16914 63891 37987 3557 29913 47278 17479 59893 11057 39457 25871
+54902 7479 48740 21610 39823 12666 64576 26748 49142 3187 39047 24515
+57534 12956 43850 21726 54986 1892 33556 48830 20110 58822 3753 41628
+25881 50973 14989 32067 62899 4437 45578 27943 16111 51798 36574 8678
+58925 24223 43054 5217 52074 17516 34431 55082 9090 43977 29595 17569
+64833 335 49274 21720 41177 10127 60896 26976 40807 3355 48404 23718
+55051 11974 39932 21737 58290 4117 33873 53315 17287 42513 10698 56972
+21252 35487 47646 6105 61887 20627 32710 44676 9957 60599 28760 15851
+53329 38181 5561 29140 56358 17752 41054 2817 61255 21186 33883 46682
+7223 52009 19099 35646 58810 11136 30652 50978 20292 40662 3113 61632
+21272 34165 52840 10099 45994 18947 31592 56573 6364 44894 18141 33812
+62232 10800 42482 17732 52151 31789 574 57259 37965 16279 28455 60705
+9425 43548 23467 62319 14215 35992 50427 4857 30156 63877 16398 46693
+28206 7015 60916 37436 12092 49750 27854 16015 64160 38054 1659 29960
+48497 13167 60370 23799 39140 3196 54618 22231 49215 13138 40231 27018
+63533 5931 32524 42177 24828 58869 963 31638 53961 13523 42092 23975
+55956 3150 40323 22610 65362 14183 36984 50459 1175 28960 45148 16687
+58009 28152 9021 49809 35565 20684 56479 415 43769 17616 53243 29379
+7684 57458 37680 16691 49408 28753 9810 63074 37457 18147 51352 1450
+44954 21126 33205 60814 4007 44907 18266 32674 63770 13287 47527 27686
+7894 61531 36151 18376 51750 3548 33021 48717 12457 65285 36170 20165
+44336 4397 56755 26918 39812 11433 62336 18599 36600 50952 6735 30178
+63737 19752 47578 10736 40881 26003 55961 7632 30360 47438 15382 65475
+28259 3017 50145 36676 19066 56213 11708 42803 25440 63600 8539 38927
+22295 59113 2343 29254 44442 20052 55302 9522 38480 27269 61606 1342
+34467 50904 15010 40859 23025 63564 3139 30506 47674 18424 56051 8404
+32965 45961 17665 59891 5996 38466 26895 57052 13205 48967 23783 39429
+6786 62954 18732 30696 50084 10321 35468 57833 20470 42950 7328 54378
+25615 39103 11566 59515 24767 43673 5169 50993 17972 31819 63040 2479
+46427 27930 15755 58438 36994 4221 51212 22365 42994 11236 55603 26655
+39064 6684 60780 19350 34585 46023 10488 57213 22862 38999 4402 51711
+30740 15663 59239 36039 8223 50023 28382 16396 62609 37947 162 31061
+57205 19397 48710 10772 38984 26620 53065 8063 34326 63721 18109 45085
+5383 34083 58628 20830 47313 2746 37599 64241 14861 28689 50832 6613
+41617 23661 59318 9841 37813 53951 15158 28989 46683 3628 61473 24256
+41306 10493 56330 32136 14814 49549 35540 3109 58097 27453 13932 48821
+35425 9622 55950 24183 43990 13422 32070 61390 2250 49252 24179 41902
+6192 59859 22254 41452 13986 55788 33520 7992 50828 37400 17925 61124
+10840 42190 23328 53965 2999 41257 25118 65102 11466 46469 20682 35684
+57836 4470 28687 48080 20800 59541 10008 40478 26293 54996 13485 34343
+44602 2053 63947 24554 41043 5814 54692 23112 43321 14486 58890 29478
+6466 49925 35950 17494 65454 10483 43088 27085 56351 4108 35055 50706
+14146 41573 24563 60924 4983 32168 48835 14832 52523 28313 7920 57467
+35648 20870 49981 4620 33386 61517 15692 45333 29212 1674 56963 36860
+17897 45950 8413 61794 30080 14944 51138 35891 6131 60686 25356 47355
+10007 39145 22303 63802 12713 45173 29947 450 54458 37162 19717 60713
+11547 42162 23088 53667 2823 33889 63735 19092 46478 10681 32458 49248
+20853 60490 4332 33915 47133 14353 58895 26235 38297 5579 48922 21115
+57147 13149 38461 25840 61564 1663 33612 47038 18350 62840 10001 30750
+45836 20592 51554 125 32287 65461 13528 44785 27412 3692 51780 37320
+14678 56702 27343 1915 49568 36226 20142 64469 9225 42534 26464 51565
+14313 30392 59912 4598 44853 27716 16465 55393 38063 1249 28534 64595
+18519 42430 8153 49060 26388 57896 13553 32549 44117 90 61209 24585
+41107 14459 51855 28805 2516 57614 35537 20711 47337 5605 63650 23461
+41854 13049 54334 31043 3449 50602 36161 18996 56446 7339 34158 47430
+12237 59030 21071 33867 43880 160 56236 19811 33917 46056 8243 59262
+18802 36091 50756 5905 28521 57185 20026 44749 8719 33595 62296 18178
+44384 5154 35314 56557 15192 29420 53373 9187 33583 50799 8256 44845
+20551 34438 64323 4987 47908 17054 36138 52049 8387 30158 60123 12576
+42856 23204 53070 7109 34486 62611 19110 47816 3490 41735 27056 64693
+11061 39412 23047 50647 13472 31960 62218 3785 43984 27363 15215 53915
+36018 6405 57442 26338 42312 14252 53409 29859 8265 59002 38035 15374
+28570 54300 261 42895 23700 56607 9711 39646 22966 59012 14730 30756
+53680 5582 43988 27933 15733 61921 34921 9000 51973 24862 46032 3079
+31770 58653 14749 44193 27885 407 54263 38149 17004 31796 61637 4157
+43535 22620 51651 10472 35066 57598 17971 44329 5738 34373 62162 20958
+49002 234 41074 27222 52088 10393 34524 57284 16216 46375 32934 4443
+64133 25628 48981 13020 41862 21445 60253 6335 32517 53630 12111 44786
+28264 16463 61323 36519 1979 53810 26592 41754 11445 63897 21276 40170
+544 51805 31497 16064 59349 37328 3784 49424 27521 14483 55210 38184
+2267 28679 63643 16803 47245 34341 3607 56659 21845 45291 14028 36389
+60101 8125 28862 53152 20495 44223 6195 33267 65396 13308 42085 24663
+53381 8061 32790 58986 15574 47467 29437 1489 52708 36844 16473 64646
+28153 7045 49867 36942 18876 61999 11956 43700 24693 56271 3184 40608
+21218 48979 11702 60420 26673 39153 4922 51410 17621 35226 62327 2285
+31259 46296 20601 57366 12121 41233 26037 52144 7293 32734 61232 18441
+44060 10404 32441 60185 16049 47458 29191 1094 52204 36359 19428 63798
+12178 44324 30751 6100 51678 35291 18667 60726 1459 43128 20908 52571
+30812 8478 62862 37547 18462 50516 748 32624 64502 16536 45344 28537
+6861 54477 35871 19019 46737 10895 65271 26936 39892 4482 52937 19696
+30976 63484 1701 44228 19620 31984 56314 7783 45960 28540 16256 59667
+37473 476 50346 18481 31585 55812 8121 44225 17818 33496 61286 2718
+46833 17219 36671 53231 6155 29173 58067 18220 47232 10588 38601 27198
+51985 4851 34624 61005 12810 42160 25150 54215 1395 30857 47056 19863
+59196 8718 30849 46510 19723 62981 1778 30503 53685 19142 46010 9091
+34723 60175 18781 43958 508 37490 64776 14819 29062 46645 10055 53802
+22268 41070 6689 63206 25819 48903 10361 34580 55317 20118 44870 798
+33750 64242 19303 41939 7370 57240 30029 16228 52355 38080 5225 28331
+62097 18317 46713 9467 33635 56125 20737 48529 6396 40288 26132 57910
+14034 30818 53205 864 40471 25031 62869 15114 31110 44719 7283 55355
+24337 39677 11734 47742 22683 64035 4070 31729 44717 14348 52665 29844
+8165 57049 24923 44034 6369 37403 60437 14837 29088 54965 5372 41872
+22983 53616 15674 31078 62566 8428 44356 28280 16399 60836 38067 6780
+31504 54475 18213 43754 619 57934 34949 20369 49832 9521 31467 61981
+13854 43758 23004 52583 6422 33693 57100 14513 45817 23662 38539 5076
+63036 21141 47651 12611 35493 53695 6951 30809 65221 16036 45454 27422
+9128 55103 37970 15618 29444 59448 7706 46749 27339 16782 58399 38213
+1307 29418 46077 16743 65075 27921 3930 53285 36037 18526 50242 9854
+30328 63356 21175 42635 2682 54617 26054 39323 11848 65478 17186 32100
+47992 572 55422 25749 40948 11669 59409 22748 47778 2584 37488 63257
+17064 4213 54325 37299 15549 58104 28505 10671 49612 33451 18068 61783
+1821 45484 28270 16254 57215 36264 4356 46748 25073 55230 11614 39282
+22523 59122 9434 38595 26064 53913 2372 43354 21756 60308 8594 36489
+52546 16942 29998 47496 615 65462 24036 39411 11235 48144 22247 62482
+2690 40583 25519 48458 11341 51774 20062 36337 64739 6388 31088 50515
+20949 42762 2239 63407 19029 35114 47583 10312 58328 23556 40953 1145
+54695 22138 42815 10817 64064 34805 19770 49827 7085 32529 60104 15555
+44999 27408 9011 54816 37984 14937 28698 62928 1394 41298 24930 54306
+13185 30047 47109 7813 58703 24128 38500 13195 55348 21964 42725 5662
+60659 29581 14176 50441 35850 9923 58511 22466 39293 2893 47765 25235
+56164 10141 40248 23730 65344 5231 39358 21717 51908 9900 30832 47482
+14218 58576 24486 38250 5352 48028 22013 55752 11105 41132 26511 64714
+8010 32324 46501 18285 61358 12503 31067 45884 7759 58964 25667 39624
+12513 48726 24034 64790 1441 39990 22606 55096 10435 37656 50403 16350
+30153 57040 802 46878 27886 16967 61616 37036 3888 45567 24121 62983
+11785 40910 22009 55372 3446 31033 45213 13921 58466 22173 39540 1021
+54036 27005 38727 10309 64166 22468 46382 6326 33753 56121 14002 43004
+24249 58855 7183 41629 23829 54659 9533 48860 17184 35592 65047 632
+30216 48145 15956 55022 27574 4021 51339 35936 19248 56379 8995 43089
+23125 61001 4945 32258 48165 13787 57184 22998 40895 7794 64743 26436
+39799 12350 57129 25566 47790 5280 41705 20238 59743 29010 10560 53310
+37178 20759 48102 3686 60635 26448 39670 12355 55885 21395 38649 111
+58123 29576 15255 49789 37691 8715 55299 23540 48415 12658 39058 26535
+57658 3378 48617 18533 31622 64162 9443 43026 24752 53295 13751 34494
+57470 5457 45328 20349 30989 62155 9142 43158 20245 51462 30921 12718
+59461 36699 810 49025 22301 64640 14911 30685 46132 3578 57296 20109
+33990 44600 10779 63610 17169 34685 53057 5987 44246 17168 34815 56683
+11684 41908 25253 64195 3168 39422 25101 55084 11981 47463 20685 34794
+58463 5545 41831 25580 56030 13768 36179 50513 2550 29724 60194 16452
+43900 28253 4574 58158 36866 17652 50579 10578 32257 55777 20633 46313
+2247 34679 60307 19845 48665 7323 37511 52927 15262 28956 59284 1662
+45036 27818 16471 64386 36399 7597 50783 21969 42042 11454 57076 26813
+49026 3049 41466 22623 62252 12981 46226 29820 1212 53570 35300 18524
+58617 9118 33930 50861 15352 41886 21947 64442 2162 32453 52287 16175
+46315 27828 8544 63657 37506 19930 49372 1038 33301 57445 13123 48385
+24315 40540 4465 58806 22535 48919 10075 40023 26020 63788 13564 31943
+53023 7581 42687 23856 56122 3752 39139 21427 63599 12261 30823 48245
+1794 59497 24784 41335 11122 48928 22160 55915 3507 40365 25106 59125
+13588 37748 49507 4509 29255 61739 18971 41483 1769 50953 32099 14563
+64458 36551 4479 49754 27604 15509 61591 37044 9094 48958 24436 60072
+14318 32518 44542 5098 55530 27570 15465 38165 60467 8978 29853 50545
+21092 42245 3766 53661 19452 34829 62793 9884 45617 17576 36657 52443
+6862 28517 61178 14457 45419 27492 64045 19942 42660 278 52277 21554
+35551 59553 6933 43961 20927 37868 53139 9943 30655 63230 14029 42595
+21706 51356 795 33057 64023 17880 43638 6754 50931 30076 15510 61745
+36626 11487 46131 23580 58421 6053 41089 24674 54576 12394 43441 21594
+59188 7017 36815 50465 16855 31483 57221 9403 42633 22825 55598 3263
+33971 46307 17491 60275 9273 39071 27172 53244 14237 32375 55551 4966
+45417 28774 16324 60355 35657 8281 50426 31169 17978 57202 5328 43610
+26241 52033 13697 37439 64793 2563 29405 48594 20263 57879 5232 31277
+45757 19249 59582 8988 32820 44004 18594 63885 2318 32419 51871 16283
+46095 29780 3730 64736 36430 16737 49533 27979 887 54447 37448 20297
+63186 8024 43342 26958 52100 14030 33152 59207 386 43249 25983 53040
+14833 33304 56761 3525 43505 23395 60931 8598 40872 27149 49045 12480
+60181 24700 38671 1664 54271 20529 29376 50914 5446 36291 56410 21181
+42218 194 52070 18858 34873 60712 7076 31238 51191 11836 45756 18155
+31595 62074 4743 45459 27668 14686 60929 37976 8604 31374 54799 14194
+48638 27730 5543 38138 53221 16804 31569 58183 9120 48034 25880 41049
+6154 62288 25121 47530 11472 33767 60669 17284 42878 3883 55460 29528
+15881 50462 36682 1452 61651 21761 47876 12895 39489 27205 60371 3586
+38419 22294 56142 13621 44419 28229 7605 61988 38223 12466 31089 46404
+21057 63569 2426 39751 26627 50666 11155 34391 58882 17716 45262 31
+36802 55171 15934 31128 48246 3372 53794 21470 38614 13260 58778 31219
+2373 50289 36048 17562 62280 5641 44984 30934 15239 58153 36874 7307
+50929 24724 43597 10048 63924 18403 31889 52056 4884 44807 27887 16072
+61664 36065 6470 46655 23649 62712 11282 40837 22229 52518 4278 33810
+58585 12494 47512 23390 39798 1543 64788 25967 48950 11390 41469 22524
+55334 3096 39213 24884 63437 6573 45346 19974 32134 54976 8760 42414
+24205 61709 12106 39024 22756 51791 5438 30028 55829 20588 41343 279
+60666 21639 32026 47658 7738 55557 18085 30006 44443 9922 61387 17707
+31460 44382 6468 53567 17360 32522 62633 1263 47922 23701 40485 11490
+65127 20086 31952 54074 7334 47807 23766 40263 11937 62291 21662 40156
+5799 48343 26659 65499 9481 30576 43948 13001 55076 25529 39510 3996
+63431 20526 33087 50195 10966 42849 23344 61038 3690 33741 54425 13197
+46029 24255 38818 5021 65275 21455 38560 14011 56154 30866 7113 52621
+36873 15994 60096 27464 6132 49496 37778 20813 61733 4843 46169 23465
+39130 11737 55723 26661 42642 3856 58528 18058 35375 50425 9684 29608
+61472 17753 43529 7229 55633 34028 21008 46124 2066 65307 17270 35175
+50771 5090 28773 45696 19591 61069 2664 39971 25305 51456 10521 32457
+58586 16322 44374 28278 6116 53269 36697 15607 64865 28634 8775 50522
+36714 16272 62311 28541 921 50310 36494 17578 57810 9455 34311 52946
+21259 43468 6974 60044 26466 40151 10545 52063 19641 32431 56151 6199
+44988 23619 40184 2396 57232 21682 38514 10959 49162 23378 62642 995
+34332 44892 17598 53283 7152 34501 61411 13831 45809 25107 39856 5269
+57752 20783 34686 49773 1581 30334 56786 20539 44265 10105 32925 47514
+17487 55656 8834 31328 45389 14224 65233 27572 5212 49983 36767 19816
+58866 2949 41859 26267 55541 8627 38871 25894 60565 12685 41878 21996
+53282 4561 34354 55312 16707 47827 28441 1924 64090 35555 15875 50405
+28073 4187 55825 38047 14939 29203 63521 1170 46958 27972 14567 61456
+35617 5292 49854 27750 16398 62756 38172 7782 29832 56885 19622 49168
+809 41560 26308 61574 12098 39902 23735 48661 2800 65118 21820 39033
+12230 53941 27165 38650 1612 61807 23939 41803 9889 55666 17741 32472
+51430 7969 41745 23366 62086 13958 37446 50671 4116 28604 56681 12254
+46442 35894 20289 60250 7120 42114 26285 55766 12796 32377 46066 6804
+61539 25402 39446 11002 50698 18405 31133 57211 5557 48122 24214 39269
+11316 61961 21341 48949 7506 40901 25192 64459 12684 38797 21282 50977
+1196 34249 62402 17770 45410 4758 33898 56833 17459 47523 8789 34631
+61669 15477 45196 28126 9484 63993 35658 15210 54063 27901 3873 49364
+37600 16369 63274 27941 2581 52125 36674 19418 57612 9868 42709 26408
+48956 2108 59476 23660 41407 9820 63440 19900 34110 50906 345 43352
+23595 65213 13157 38263 21351 53683 2685 43435 18115 57745 29893 9178
+52567 35887 21010 48127 7439 63250 18687 33112 44482 9753 54293 25003
+38378 5558 64687 21209 48592 11853 40687 25727 52431 2007 32171 59236
+16819 48884 27318 5647 58050 35583 17872 53524 8549 45885 20556 36605
+62375 6347 29127 51978 20328 42387 8865 63215 25762 40295 11577 55701
+22942 46741 7107 33662 65140 15830 45474 27293 9003 56343 37779 19527
+53496 1548 42927 22935 61570 13836 31933 53078 3242 42264 23355 59329
+14289 34125 53846 1988 42638 25276 58659 12932 41119 24714 56046 881
+38573 21329 50675 14463 29624 61977 8614 43993 27866 16436 53876 36704
+5897 59935 29317 15703 50058 35727 8234 58746 28788 13277 52815 35763
+17257 49524 4549 29323 58446 18666 45612 2163 33389 60114 15861 47316
+27416 9191 62435 37936 15330 29641 48675 5011 64540 19923 36645 52121
+1845 34187 48511 20712 58093 3995 41168 25875 51532 8166 30459 56558
+19301 44848 9316 38415 27177 58919 4186 46306 18393 36043 51704 120
+30608 56756 15742 46150 28420 3293 58805 36764 14623 53748 24271 45763
+1099 32611 61765 17743 43510 8853 56592 28346 15718 53501 38226 6027
+29262 58441 16784 47788 27702 189 52736 35764 18884 58845 9588 48704
+27033 40981 2268 61301 20183 34089 51201 9682 42886 17920 65054 29105
+533 53967 35694 14025 48328 23888 59849 7625 38361 21509 48426 12849
+63262 25972 40645 3097 54281 24934 39078 12093 60144 23587 39049 5714
+52300 19165 32008 56359 9244 43365 23384 59524 13983 33260 53781 8017
+47464 28387 15495 62126 35603 343 47197 23209 55788 12859 39787 25690
+60365 2220 47489 19837 33049 55106 5459 45610 19374 32753 60994 10825
+44922 30413 20725 48642 2875 64028 27191 38267 12885 54891 21699 43924
+441 63127 28558 16554 53395 35380 8156 48299 25572 63725 12635 41091
+26739 47385 5531 58467 20396 37087 51029 10530 29033 56317 20348 47153
+1917 32436 64474 14745 48387 28027 8083 59032 37065 17304 51782 12851
+36644 60721 3402 30010 25443 62397 11900 40763 22769 52987 2311 34348
+56367 16044 45227 28901 11048 62729 35099 17546 52608 6338 45717 31114
+15760 56880 35545 1638 46696 24818 62881 10003 31388 44947 13948 59669
+24562 41520 5606 56608 21971 47672 13133 37235 60617 8460 31296 53005
+17014 45028 27322 7662 54172 37264 18326 58884 1745 36916 50848 15136
+31793 45338 4406 63934 24993 38628 10662 48831 21655 57406 7246 31751
+44436 13941 55029 25794 41162 6621 59755 21223 47680 11074 32879 58095
+19466 46040 3669 34394 63156 15758 44343 28216 594 55205 35220 10223
+48030 22425 64681 14699 32013 44556 1098 54121 24699 39159 11358 63018
+23184 48882 2771 40028 21478 53987 13912 33089 59707 1666 45047 27324
+16475 64169 38125 3893 31126 55367 16271 46147 29068 2381 58474 35795
+17291 53983 5747 43707 26418 56534 9548 31745 53208 13058 42887 22973
+65235 7215 30409 53434 19746 44239 2686 32043 57893 21108 48929 6211
+41762 23147 60168 13538 30593 50632 8583 41419 24617 55574 12631 40943
+25878 64407 5785 39741 21405 53959 12431 38534 26322 56428 6321 46675
+17513 29603 60506 11081 41606 24740 54749 7648 39207 22810 61530 11797
+49154 26649 39718 5111 64487 18921 31941 45795 571 54657 25891 39090
+11893 60081 22681 48481 2923 41026 26935 57818 14356 36072 51101 6767
+30521 62951 20232 46559 8881 34378 55697 14924 44347 28365 948 65188
+38037 16276 29510 55421 3539 43646 25394 57852 13702 35833 50149 5321
+30177 60333 17738 45515 1272 36929 59320 14248 28778 52562 4450 43899
+28031 16386 63517 35018 11024 50203 23985 41589 6484 56823 19599 29896
+46763 10453 65019 25540 38371 5405 48980 21242 62430 10236 38492 22056
+51493 5774 31185 63862 15359 47169 30625 7165 53955 35783 19869 57105
+2551 33017 45909 13448 63291 22118 39152 191 47451 26368 55695 12220
+40012 23609 63809 1811 46738 19325 33312 55584 8129 43083 24580 65346
+13591 30939 52243 6712 44222 34961 18545 57831 2638 43234 25815 54870
+10162 40032 22735 57203 13315 29347 45147 6986 63477 28725 16318 52790
+37059 11008 48185 22651 60901 2842 33829 48951 17501 63920 12501 42105
+25116 55159 7847 41281 22567 62947 13100 34044 52639 6354 42444 22443
+63729 11542 33244 50824 19186 42507 5342 57951 23179 38836 13449 50926
+30226 1914 64653 35921 17950 49307 9229 34277 61431 13632 42682 25358
+54936 5548 32997 46942 17478 63123 11249 31851 45819 14965 57898 28034
+3770 49244 37535 19964 56859 10953 32228 51656 17855 43126 5848 62905
+27240 39747 1518 52505 34221 19062 56172 10323 44579 35076 20782 64780
+449 34911 47635 13292 55387 25164 41708 7800 62883 24790 40643 1310
+51990 18636 30406 63333 5696 44752 34776 19093 56530 9707 42965 26827
+64297 4424 33219 52387 18904 46115 9293 31302 56383 13695 42940 25788
+63455 7330 38688 22185 53590 3651 34870 56227 17231 41186 11562 58135
+23148 39151 5971 50821 31025 14931 58553 36310 5109 50105 22134 42870
+14001 59326 29840 3303 54450 36720 17307 49706 7846 33056 64980 14382
+44212 27467 3837 59973 38146 16705 29875 54814 6419 44616 27367 15906
+61812 38228 4471 29656 48795 20002 55043 7788 41716 51413 19575 36054
+58387 6473 28992 48076 19396 60890 7942 40038 25134 51064 642 31890
+57751 13617 48391 22739 40258 5415 64987 28856 14794 50381 37537 8173
+57988 23438 40695 151 54248 26442 38815 9345 65192 18223 31427 51647
+2503 44439 27429 16372 62297 38218 4017 30174 48935 19722 64909 10536
+30282 45687 20743 55250 5798 39805 22618 58377 11886 48027 29241 15780
+52599 37024 3763 62042 28463 16431 49947 36495 36 63527 28390 15895
+50737 36770 4503 54594 24282 42185 13209 60860 29807 6543 52910 36961
+20608 47179 12295 60269 25303 40315 4742 56229 19805 35279 51373 8230
+29181 59642 18535 45207 6032 34153 56891 13211 42999 24240 65109 8449
+30417 52612 14590 43936 28700 6259 53883 35576 14305 60732 27908 8500
+50585 37018 19484 63666 9750 34296 51671 13954 41329 23175 62709 3807
+36309 50081 15181 30591 58148 763 41879 24065 50639 9872 34069 62821
+17366 48221 11281 40397 25362 54655 1760 32630 64986 18567 42590 5210
+53529 34616 17109 57878 523 47097 31106 16202 59136 35462 3597 50649
+23144 42952 13569 63998 34940 1837 49890 20732 33149 56011 4735 45620
+19139 33663 57109 1334 46610 28400 15416 58942 37379 8385 52090 24074
+42293 12738 62564 21890 41105 6589 56228 30880 15720 51663 36099 10186
+63861 21940 45813 239 34465 56594 15079 43847 27674 4725 61565 36124
+19990 52628 12820 34578 47260 6834 59389 24307 39403 11839 54484 21477
+39290 1938 64551 23190 47599 9852 33661 57398 15097 43017 22414 51102
+6216 32446 61950 16971 46004 27342 390 57575 37957 20458 52794 4085
+43098 27114 62901 14108 33636 51626 1061 42082 23011 55144 13712 39895
+26999 57011 2889 48212 17421 33399 59976 11924 41710 25564 55190 4625
+38785 22452 65431 10928 47881 30765 16857 52959 35652 6398 59123 25112
+42778 9274 51664 17476 34136 60486 4275 43337 25629 54052 9646 39576
+22031 60844 14425 35029 50645 543 40052 22917 55441 10167 29698 63244
+13692 41723 23423 52170 7549 32676 62122 17107 46992 3427 33801 59087
+14725 40534 22898 54400 668 31694 62473 13254 45947 24024 40162 8644
+57430 21891 39341 1599 52479 30463 16779 60306 35253 5113 49336 27925
+16335 61219 35357 10093 45784 24822 55297 2483 40016 17103 60869 34425
+6828 53994 24831 42471 10642 59574 20259 37788 50073 4808 28158 55998
+21366 40828 2641 63930 19741 31466 45220 8816 59940 24815 39764 1508
+54386 19263 37173 51463 8314 29873 64101 15669 44667 27743 1991 61075
+36367 19792 49910 9310 33083 55034 13319 42433 23022 61870 4892 31119
+46869 17300 59254 7760 29814 52089 15639 44281 28147 3566 58031 37114
+18388 50561 9520 34737 60346 21135 46781 11191 41250 25796 59079 3102
+39261 21920 54380 11442 36585 50529 15835 29835 61434 7043 43925 27855
+15440 58055 35371 662 51285 23526 42144 12390 60085 26061 41618 8787
+51140 19872 32666 65429 1213 42335 24795 48317 8586 62574 22795 40427
+12406 53950 26661 39260 1682 64683 18978 32296 51658 9725 42923 18675
+61022 28361 215 51616 38240 16176 30473 57862 8631 49077 24489 40869
+11788 63713 21970 48915 699 33866 54085 18456 43039 12115 63365 26629
+39099 1433 45010 10351 33821 64859 17092 44459 2660 36863 53966 14883
+30035 63570 10595 47064 23593 40531 3926 61847 19603 36907 51005 10279
+30743 56160 19982 45297 3640 32254 61367 17288 43756 11274 51039 20929
+34932 58679 6777 46547 28371 15517 54469 36377 9241 57959 23956 47072
+13489 34344 55874 348 42136 24544 59915 13455 32140 52463 8474 42731
+24555 64514 1918 32920 45038 18962 55339 6153 40976 25380 59286 9946
+33284 47059 18348 56303 7518 34303 45534 14854 65341 27746 2012 49542
+37130 17762 56852 10674 42107 25858 64389 2741 33349 53579 14411 45722
+27831 9188 62760 36933 17484 49470 3860 33103 61885 15904 47713 28754
+155 51258 37562 16566 58021 27511 3241 49281 36721 20644 62352 11852
+48425 26175 41538 650 57786 22687 46603 6895 30995 49207 17582 60385
+1782 32485 45288 16024 53691 27534 6955 61420 37740 19228 47065 11775
+60543 27067 39295 5075 55374 19901 45736 29763 7725 59098 36290 13908
+52663 22832 46181 9130 31942 61917 20994 48822 11516 39882 26601 61004
+7645 43589 21710 54438 11692 40086 25754 60022 7185 47828 18212 30385
+62377 10650 42577 23524 52344 6661 31556 64902 12153 44194 34273 16760
+53837 27680 2448 60987 36077 14763 49469 28410 4639 58334 37217 20517
+49847 1771 42748 26361 58972 8047 31896 53866 16252 44284 28218 9628
+60060 37423 17887 46925 2747 54894 26558 39366 10159 61880 18807 32096
+52290 4107 42843 26137 60695 14500 33072 50735 8280 41757 25458 56100
+3731 38732 27112 64161 12808 48136 28282 8145 55737 37580 15247 50831
+29138 10033 61074 36238 18189 47296 7771 55186 23578 38394 11420 60519
+27037 43797 6031 58577 19242 35881 51737 9716 30276 45863 19227 61339
+434 34527 50857 18719 43675 9892 59573 26043 41630 1747 51860 28196
+14410 61497 37811 3920 49769 21073 31953 54921 10788 42330 20050 64753
+30017 6886 50591 36400 20159 56219 3604 43668 26332 62762 8999 32314
+53743 17489 47716 4150 40093 21129 59930 29160 1024 50034 36985 20879
+55631 11496 42670 25960 65296 5970 31887 50269 11364 44549 27705 16567
+58560 35980 4968 53894 26032 47209 10836 32739 64167 15427 47058 28502
+3567 56623 37509 14858 51116 29689 941 59304 37738 19371 49438 7972
+32120 64882 20896 42899 11222 51745 26840 39120 426 62672 22870 47931
+13276 35138 53278 7646 31645 59009 18385 43644 10778 51482 28649 16142
+56221 36715 4490 49413 21058 30129 60783 10379 43219 24012 55689 5505
+34409 47339 13753 58204 24397 41035 4031 52578 29640 15502 64901 36659
+8013 49848 27856 15056 57239 37641 2636 49404 21130 31644 60680 10865
+46198 20345 31567 63715 6592 45906 27935 15395 54821 38075 2182 29882
+65099 17749 48741 8248 33030 57125 14210 41938 26201 48450 1157 59864
+19701 33908 45064 3919 65011 18310 37127 53901 10112 30213 46981 18865
+62933 2642 36423 54512 16811 30266 47318 6812 57394 26120 39669 10937
+52669 18782 33128 56804 2590 45507 20705 34054 61426 7369 42591 23301
+55763 13576 35444 49509 4584 31446 56518 21143 42871 9585 63029 19896
+33541 52655 2254 45545 18080 33107 57137 5840 43698 25666 60422 10227
+41130 22920 52161 4891 34663 57606 17230 59768 36851 20580 50834 9269
+31003 56679 20167 43907 4644 32192 58575 16822 44424 27578 8847 54217
+34898 16663 59403 28227 2095 49514 36703 17823 64293 12033 41390 26648
+53028 6181 33564 55853 19362 41778 3366 63132 29740 14045 50642 37798
+1454 60552 20582 32230 52727 6317 44276 17626 29537 63604 9134 40325
+23501 50107 3126 36353 60995 15015 29458 51397 8915 41283 25486 62930
+13051 39234 22572 53444 3272 39225 26470 62409 12303 42897 22287 52808
+5196 31136 59518 16309 44595 28347 8494 51971 34733 19675 58644 5618
+44836 29951 16816 50920 36991 1335 57252 23745 43346 10822 51092 19716
+30083 58448 7679 44292 27341 14914 54205 35951 5761 63529 31134 18151
+52126 9237 43257 27026 55986 4764 39717 21476 65533 14615 34360 53085
+8926 40744 25633 56883 11710 39999 21492 63237 5273 47768 29506 16646
+52240 35718 8945 57164 25676 42606 3005 52114 30979 15569 64630 36539
+1125 49718 27451 15228 62384 37227 4141 49433 19989 29447 58423 2661
+44502 35382 18150 52641 4579 33713 65470 15679 45243 28829 978 56027
+36241 14494 52772 24771 45700 2985 35867 57326 16330 28506 46938 9601
+59477 24910 40002 4165 48507 21529 56129 10860 31349 44890 20097 63397
+7940 32927 44849 18462 53423 10477 30231 60799 13688 46862 23988 39865
+3479 65508 19323 33034 48437 6176 56944 23969 40214 11510 63389 20509
+32745 50514 1667 46122 28165 15413 63949 36118 10667 46672 22187 53093
+516 31537 62738 18430 45999 10353 32339 54610 20467 44486 2122 32949
+60636 19478 46977 4867 33210 58470 20999 44608 1776 34818 63734 15939
+31005 50650 3575 41486 22511 64643 12957 32732 45521 2045 54315 24248
+41279 7863 63587 22725 42911 13102 54553 26931 39146 4131 57620 17680
+35489 50144 11575 29504 62838 20641 45558 7070 34876 58338 19082 45311
+950 34748 56661 13402 41743 24655 59780 2299 31443 49411 17440 41034
+10915 58393 20632 34229 52502 6295 45468 19786 32003 64861 10803 49187
+17957 34019 44175 5859 58179 17411 31333 51567 2394 41488 24683 53650
+14421 36150 61552 7712 32149 51236 19006 41339 3041 60590 20746 34803
+44583 7139 58062 23422 39172 12155 48287 25058 62528 9388 41160 22207
+52642 5497 34557 56633 13590 41769 25653 58192 4238 31222 53400 15039
+46732 28812 8681 57163 36395 18319 45502 3234 65154 29135 15216 49670
+37516 752 62316 23475 42066 6765 57523 26243 40594 11629 52371 17117
+36343 63343 946 30361 50364 19205 42074 6666 62514 26736 38703 10071
+56380 18745 31792 46483 3 60474 20657 31927 44332 6219 53868 18627
+33170 62719 9220 43229 23471 51538 898 33931 55948 17686 43967 4391
+33189 61597 13511 42502 24887 52622 6424 37673 58222 15187 30641 45734
+4632 63512 22340 38761 8036 54811 25023 48856 11147 41913 21489 57514
+5549 41612 26402 50343 8330 32006 59243 14675 44112 27788 5101 53707
+36467 13765 61942 23446 44090 4398 37497 60254 14239 29493 47362 10224
+54569 18410 31655 46874 3585 58072 25351 39890 11464 64291 29361 15277
+53551 38109 5909 29414 48804 12553 61275 23120 40001 7656 54003 27194
+39506 13075 65325 21647 38997 3027 56602 31433 15446 50061 28655 5849
+46941 9 41482 26721 60764 14316 34744 47350 8284 63953 18660 37188
+50872 1283 29226 47773 15361 61198 36136 7231 45421 22402 56570 9580
+34561 44358 20634 60007 1005 36311 49485 14804 30355 61608 9651 45157
+21133 33096 56958 5481 44053 19495 30620 49098 11242 62404 21222 34000
+46480 4244 57013 20286 34724 45894 9976 54348 19213 33976 58614 6665
+46933 20899 33985 56302 961 45726 19757 34036 60570 8608 43393 17217
+51905 30144 1472 58236 36108 18887 49818 9331 34416 61293 20694 46346
+385 36681 63677 15360 28826 54059 7922 41974 24691 60805 12992 39377
+26509 64203 3357 41404 22051 52551 13939 35491 62203 2171 46568 28362
+16623 56499 37774 9940 50216 25345 41742 1527 61790 17365 32351 51717
+10682 42768 24311 59816 2629 31488 47971 19939 54871 4045 38256 27286
+48868 14366 59410 34762 5 44587 23454 64085 13213 38313 21937 48603
+6587 56073 26012 41174 11701 59882 18985 31038 44691 6075 57158 17611
+34371 51994 10499 41634 24559 62678 8381 31621 46958 20140 57444 6847
+39110 23258 51053 10302 32127 63549 19318 43316 6042 58489 22755 40398
+14792 51305 29831 51 63849 36641 13916 52973 23937 42774 7078 62360
+17319 33623 47282 884 59459 27514 15496 50842 37574 3152 64075 23455
+42465 6191 55287 29655 15878 50694 35784 11038 61019 25329 44833 800
+35196 53984 15842 30554 57592 7232 42340 23228 52877 9168 33672 58404
+19967 48112 4541 40059 25610 56420 13458 43762 22040 59826 5637 35451
+50493 14902 29373 56932 7607 41916 25285 64949 10785 30435 48827 13900
+54232 24244 40884 5554 57518 21930 43804 14744 52223 30398 7354 59387
+36133 18501 47636 11344 55721 27080 38978 3144 58906 17213 33221 51288
+6272 43330 24502 64367 9205 32741 45812 19533 55588 2627 31258 44034
+17314 60320 9849 31079 52724 14240 40997 23318 63242 7649 33113 45828
+18966 53572 5858 34830 64140 15659 29817 51106 1287 41906 24196 59472
+12376 38291 23167 53204 3080 30709 61746 15026 45680 27789 8366 60481
+37504 19815 46612 10518 63839 22233 38987 1339 55972 26870 42547 9727
+48774 24909 64925 13055 30917 46608 360 52883 18686 32342 59721 4694
+45179 17507 36797 54320 8197 29083 64301 16043 46447 28511 1471 50984
+36298 17995 63327 9883 43917 21094 34243 60368 6118 48933 20006 32481
+55125 11586 41932 24615 60117 8436 36270 53517 12771 31972 47925 20227
+64489 2871 33718 44735 18965 54928 7828 41260 25455 59343 12335 43577
+22822 54089 3119 34115 48220 20729 59056 11939 38935 26414 51325 8726
+36302 64248 16111 28915 47558 4715 56526 25392 38845 11497 53355 19311
+29822 64676 7011 47843 20775 30876 56771 10798 47679 19830 34878 60436
+173 28527 48537 20080 54167 9594 41046 26725 60964 14697 32918 51405
+2349 39722 26360 62444 14127 38518 22228 51867 1487 34320 64390 18480
+45926 9790 33771 49309 18293 58634 61 33882 45566 16739 64783 28411
+7650 50453 35754 20262 63045 850 44224 29155 15654 59781 37185 8657
+52311 22451 45043 1532 33905 61873 16357 44806 27715 3180 56202 37596
+14881 46086 23806 59606 1229 38296 21128 51219 10826 33172 55225 17874
+45895 8920 34031 62245 18959 30540 64277 13421 48563 23723 39091 2797
+53363 20540 29638 55741 6690 42329 23340 62588 12804 32579 51645 5103
+41770 25332 53621 13915 32491 62132 4291 45821 27679 16026 58209 38170
+7213 28935 54859 16689 47360 27630 2316 64822 37029 17285 46271 8977
+58075 26320 40207 889 51998 17172 30801 64287 11995 41379 25304 51003
+2362 31704 61747 14407 44133 27776 4546 52947 37443 17834 64945 10571
+47229 21227 31872 55745 6231 46290 20581 33088 64129 11276 42338 24488
+55797 3727 39131 22597 57568 13946 32687 51282 6982 47420 19091 31794
+59022 4362 43582 21933 52689 9257 34224 55593 16985 44543 31109 6698
+59892 24325 44036 10693 32029 64821 20735 42680 4262 54787 23984 38998
+12999 58382 21985 38408 5252 47845 26561 62976 13814 34945 44795 7532
+57289 22410 42192 12296 64839 24437 46193 6033 32125 55046 12242 43121
+24052 57907 3632 41334 21164 51503 14272 32515 63383 2307 43237 22916
+54234 9785 33550 47396 20447 63845 291 30382 45166 18929 54990 11384
+39132 25833 60349 2003 49134 22006 42371 12211 55196 26706 39085 3676
+59688 29134 13358 50026 36756 7702 61304 23801 42442 11548 55671 21839
+40576 3476 47436 26829 58023 10678 29813 44186 20888 55148 7495 31097
+43973 19458 57218 10828 31797 49926 20923 41415 1513 62852 26257 39241
+7653 58238 21630 48893 12573 40929 23044 51593 4591 33950 64557 14439
+44740 28749 2361 59879 37112 17385 54146 11202 42284 26920 65294 7742
+38862 19474 52677 30054 2827 62399 37181 13280 49352 20805 34664 53808
+885 44782 18631 36590 62623 6764 30121 46199 12137 60267 23987 39171
+161 55066 21390 43560 13703 62370 29629 4217 49566 35107 17831 61513
+8917 43433 26149 54046 12627 38399 22023 60332 685 48210 29908 15636
+52753 37595 8184 65021 20876 33983 50681 5205 46672 20215 29755 61132
+3267 48430 28465 16250 57566 37648 10113 50305 25124 42224 4439 61308
+21198 38327 11663 54037 27244 42435 6931 63050 19324 46681 35299 9835
+57041 22362 40842 91 51883 30719 15716 59209 35752 4848 50395 24220
+43417 13306 59854 21784 38259 5128 53168 18278 34272 56138 8428 42351
+25157 63336 10378 41093 20755 51389 29250 2350 61527 35199 20132 50040
+11410 43340 23424 59788 7008 33802 53575 20045 45496 2990 32773 61834
+14705 44279 28217 1285 53094 37344 17571 58483 4747 30673 50628 16841
+46407 28090 5317 60496 36147 17262 49917 9986 30434 61762 20911 48449
+3635 39284 26782 65530 11033 32794 45777 17542 56000 7281 39982 25224
+62153 2309 43556 22480 52809 13474 33658 57308 1481 45191 22508 40237
+13979 62087 32209 3178 50010 35627 13635 58735 24917 45112 1970 40693
+23268 63115 7557 32281 52379 18272 44063 12844 34993 64215 3445 31642
+46059 18654 56836 7254 41527 23122 53149 12364 34178 58324 4604 43224
+25463 55253 12560 39788 21838 60720 3203 39163 25858 55838 12558 42690
+22751 51577 3983 31772 55461 14980 44364 27775 8839 57556 37096 17704
+51556 5388 41851 26877 63873 13909 32577 46996 6694 54916 25320 41066
+11070 58975 18760 35271 50041 5368 29200 64549 13556 48422 26067 41928
+7158 61976 24996 38689 2157 58002 20307 36244 50399 7105 3790 40240
+21496 55781 11503 42924 26923 58968 9378 48944 17194 36252 60352 3285
+28543 46297 14946 57443 21911 38775 392 65359 27202 43885 10795 50825
+19576 31653 54209 2818 43093 23218 63730 10721 33666 51882 12936 42565
+24278 56036 5860 33007 48500 18950 60997 10542 34525 44989 20742 53404
+5260 32836 59390 15604 44525 28069 7072 53629 36951 18222 63289 9037
+35387 49501 15290 30592 57785 2727 44079 27757 14766 61522 38141 4752
+29158 48886 19617 54246 6995 32958 45786 17988 63255 9880 40627 26671
+55015 1869 38933 22276 62552 12026 35622 49711 15527 29577 65219 954
+46590 27576 13717 57419 36516 5053 53546 18775 34970 48799 464 57136
+17302 31864 46238 7163 61279 26286 41073 11021 55696 18885 36128 50229
+1020 29274 59332 19259 41032 10215 53946 27134 38478 1900 60734 18591
+36247 50283 9338 30181 62022 14935 47629 25601 38885 5399 58993 25291
+38497 11157 55217 19489 37440 51027 7298 29708 56135 12923 42167 25211
+59485 5488 34705 53430 15439 46261 29486 6385 64553 36599 17613 51801
+7975 34485 62582 14254 42062 23213 53241 1649 31551 57027 16840 45255
+27520 4469 65168 35811 15301 49815 28214 8647 52729 35816 18413 61843
+2194 35181 48392 17131 64733 5005 34448 46143 14624 60180 28019 6909
+51291 36718 18001 56441 10749 42504 27139 53641 2968 36776 62250 16838
+29798 46816 7990 55844 22515 40533 12207 48983 24837 62887 6644 32482
+44742 18004 51829 1159 33969 58694 17072 48288 10731 41915 25645 54679
+4249 31318 61217 17406 41221 9290 59057 26860 39185 14776 55043 28315
+3880 50532 37367 14406 65492 25154 42012 6177 53759 26765 38953 11966
+57754 20610 37435 50695 1237 29141 64102 19577 46589 4777 32271 56132
+14757 44650 27928 6691 62192 36004 13596 44926 24614 56426 1409 40033
+23079 58908 12991 33400 53924 8980 43976 27394 14916 65211 35119 349
+53082 22856 45719 14620 32789 57099 9137 43816 23764 60358 1650 38610
+22520 51486 13527 31139 54651 5471 41959 24295 64626 13040 48033 26384
+40412 7249 54797 17787 30134 62294 3258 48046 25293 39310 11689 61433
+25264 49158 2015 39497 22129 58933 13495 34786 49338 6084 31069 55821
+18296 42326 9690 58353 26533 39464 3226 54769 24851 42118 12189 65386
+17152 30288 48544 5638 57464 25869 39197 12759 49123 23045 62749 7336
+34150 43951 18838 63866 2303 40596 25014 55380 12175 40421 22069 58536
+281 32225 52275 14460 44298 28704 8232 57219 35319 20315 51112 1178
+30396 60625 15028 46964 28857 9102 53618 35216 18963 63204 5276 37881
+50448 17025 31019 59782 7362 48368 25817 41599 11837 60932 24025 39987
+6288 55314 18960 32876 51654 10027 46470 28094 16710 59740 37427 5301
+47663 22705 56010 10123 40099 26071 61622 13662 36130 49744 529 30497
+65334 18108 45406 9043 32092 48728 17229 62735 6463 32727 44590 15916
+52771 29230 5711 63879 35932 19106 46626 10130 59955 20898 34186 52848
+1954 42348 24517 61767 11138 32849 48106 19890 54123 2634 40310 24264
+60343 12161 48910 22164 39353 371 62641 26624 43388 9747 53321 30710
+16320 55490 36079 4243 47036 22531 60564 9592 40852 27020 54107 12918
+43185 24565 59458 28173 16203 52995 37932 1105 31635 65107 18177 47071
+5769 40526 26052 52460 14144 33566 63418 7066 48213 24571 40724 11574
+54822 23903 38321 5968 60662 17587 29909 46877 9116 57118 24918 39318
+4698 59260 18684 35275 50317 511 28988 62141 14953 41688 24927 54602
+3334 38705 22382 65276 13864 48604 29225 1783 57695 37552 20868 46532
+11694 60058 23157 40680 206 54196 26838 39790 11065 60862 19699 47666
+30018 7888 55087 36529 18014 46798 710 65477 26676 38809 12997 58346
+25288 42057 2866 50964 20168 34434 61320 11069 42735 25084 53715 4002
+41296 23117 58283 9944 37445 50451 16913 31496 61642 7538 48055 24053
+40125 11087 63411 20407 30161 54472 8924 41642 23196 51516 2449 33127
+64591 14235 43324 23900 53374 6659 32336 63827 17280 46127 4447 32788
+58066 15025 49117 22697 40154 7274 57051 27065 39053 873 52513 18569
+32833 63096 8641 45931 17674 33171 60804 1399 45035 28345 15847 65069
+35459 3598 45963 22692 61225 14138 32612 50521 2458 42572 22703 56304
+12474 39851 26745 58633 639 32448 50300 19439 46062 9679 35121 60350
+20872 44391 7272 37764 51848 12347 30439 58217 20850 44105 1046 37585
+59896 16180 29164 54188 6482 42022 25505 51159 11618 29726 58017 20079
+42232 427 52397 29395 16610 61677 35062 3954 47146 24876 65061 14104
+31233 45446 8892 53036 27800 15284 58788 37948 136 29550 61496 16867
+45596 27917 3498 57309 35810 20303 49743 9807 31701 62038 20258 46800
+5967 38349 27218 63990 11975 43741 21695 51040 6937 33955 57206 19700
+42508 2431 48998 23437 61465 12914 32479 44229 9015 57816 27946 16417
+49774 35987 2684 62964 22627 45968 9632 32420 56044 17017 44058 7502
+37632 59802 15859 28571 52376 10343 42067 23614 58698 2987 33531 53045
+18857 47633 9164 35278 63760 16397 28813 45385 2403 52035 35607 19168
+61729 5507 37885 49645 16580 30233 59836 8293 41795 24222 55477 3986
+40018 26823 63837 12141 48419 17881 32729 56295 2753 43502 26251 58361
+11404 38565 21290 51238 2185 34289 63238 20549 44899 9262 40297 26547
+54240 13703 33322 57201 6509 45712 28638 16503 65204 37732 4280 54194
+27876 15972 50635 36188 829 61963 23241 47280 13714 36064 63644 7567
+31389 52381 20533 46180 50 34933 56112 21206 41584 10434 61243 22256
+40734 3429 47177 26296 55835 9899 30318 45439 13645 57875 22172 38801
+6569 52702 27066 43555 10448 64765 19605 34532 47281 5668 61250 27611
+15387 37889 48381 10444 63596 18258 34620 44277 4105 57486 17821 36640
+49772 11330 29442 58368 15483 45565 27820 3574 54049 36684 13526 64341
+22142 45933 718 33476 56648 15697 46848 29335 3800 65401 37961 14893
+30468 54972 1355 43407 24081 62474 14121 35823 50069 2663 29717 55162
+20106 42926 6008 59651 26065 39993 10381 55919 20435 35523 50981 2037
+29647 58731 19078 47623 9632 40756 24590 56737 1311 49240 17083 32591
+43985 8440 62726 27704 15575 49662 36560 5835 56163 22367 45443 9668
+30819 65453 14719 45206 28703 4233 57542 35938 16647 52110 28443 8910
+56776 35156 20436 45343 2580 63588 25474 41010 11969 52146 18787 31839
+56625 844 46840 17279 31319 62703 7743 44861 5249 43661 21987 54876
+13237 40574 25663 61488 9729 38657 21734 56636 1805 45240 29976 12754
+59720 37526 20318 52374 2539 42628 26913 59224 13391 40605 21811 64541
+1556 34404 51195 17445 45044 9816 30888 63194 13316 43586 25132 52116
+6558 31522 58390 12442 47741 23881 41385 7486 59762 26462 40391 9721
+51417 17916 35322 55117 5892 30209 47979 14000 64030 24826 42385 5520
+56610 17253 32220 51562 2227 41909 23433 62653 10149 35211 50597 16078
+31117 56454 5899 42996 23093 52664 11868 30810 60322 17232 46700 5017
+30847 57130 14846 44677 29030 8259 63966 34528 19773 54703 3189 45562
+28898 15505 38095 58480 1795 30200 51176 16379 45107 27500 4736 60965
+36142 17708 47645 10382 58838 27048 38724 3601 50546 18100 34305 56545
+9207 41904 24926 51730 12934 34937 62331 3289 41980 24166 48344 9074
+65390 21375 41562 12110 54756 26090 40230 4383 57261 23549 49206 11934
+40715 21873 56408 9253 49171 25783 40804 6278 58020 18327 37284 52574
+8906 28846 64106 17774 47148 4200 31576 61648 13412 42223 23681 52719
+4929 30394 64836 16525 47918 28085 2290 53912 35859 18794 63126 5096
+33324 48020 17817 50599 9347 33046 64339 13095 43062 23695 55759 2725
+38817 21679 63076 9211 35177 49458 15128 31973 55704 5940 42151 23657
+58713 12039 39696 21350 52011 1842 37068 60524 17031 30454 50380 6331
+43138 21905 54857 9935 35948 50967 15800 31438 63793 7356 42121 24789
+55035 12826 39830 24746 57945 2589 41426 22774 53223 14336 32889 60274
+326 46827 24732 39843 13171 63339 29488 8321 54374 35645 20840 48048
+1354 64236 19403 30967 45347 7191 55486 24281 40005 11098 58771 19628
+35570 49735 4981 28745 65173 20181 45394 2229 33487 58239 20131 48902
+7314 38823 26538 63075 12290 42966 23949 54756 5853 41099 22047 60782
+13911 32231 53721 7408 47244 24467 39535 11744 56116 22270 43618 2945
+64451 32019 14155 49843 35961 10184 54291 21990 44816 5998 34388 61916
+20036 49197 10326 39680 22953 60692 7445 43802 25308 53012 13678 32484
+57943 4287 47575 18612 36137 51402 573 30194 62540 15687 44168 27378
+9470 52019 36273 19789 59928 7709 45992 25471 40536 10848 57220 19283
+30662 51550 4039 43258 18669 59018 28637 10544 50142 37530 18224 60048
+6402 34143 47998 16541 52685 29681 8987 64303 36977 19410 50423 673
+34817 61047 16126 47290 28515 3816 62471 36318 14073 54343 23496 45873
+1848 37008 57820 16367 30744 55223 3338 42961 24832 51722 7052 31627
+59138 20281 47888 8140 40985 26817 65199 405 40199 22194 52978 10175
+32395 58926 19476 44169 8499 31174 49436 20500 59466 5615 41292 23565
+54419 12677 43600 25859 61238 5945 41657 19044 50668 29157 8335 58543
+37285 18264 49325 6975 32875 64558 12688 45483 28438 15468 52942 37462
+3962 63109 27971 14925 49538 37031 6894 60416 26468 43178 11648 51382
+18164 36857 64934 6729 29849 47649 20114 57634 2879 41525 25603 53297
+14035 33656 60946 678 44040 27617 16890 55075 38191 8002 30714 63438
+19997 43642 5042 50656 31026 15115 61694 37397 7721 49584 28098 15955
+58190 37486 5546 44715 24333 64750 10538 39700 23129 51527 14088 34204
+58265 64048 11672 35685 50979 4016 30808 58496 15933 45398 28980 6598
+52023 37208 15836 62634 27548 4489 49690 35890 17120 58065 10377 43935
+27289 56208 5251 33289 47491 15728 52963 29388 7060 58732 37514 20647
+50097 3155 41289 22999 61283 14261 33424 46229 1402 54078 27976 16611
+38057 62882 4188 31201 47250 20237 56693 10815 40922 26722 59309 2976
+39203 22512 53449 11471 33680 48186 20855 61273 7383 38807 26786 53463
+12112 43568 21399 59396 3177 41011 26447 61804 8731 34442 47457 18721
+64695 1219 34988 44708 20998 55219 10658 39923 22649 59700 83 48885
+25898 40547 10513 52419 18098 32776 62393 6880 43142 25266 53022 9824
+34633 64975 13009 42180 23516 51948 1180 32451 56854 20015 46050 13508
+36987 62872 7224 29533 47484 20275 58397 248 29930 44185 16671 52868
+28350 6696 59694 36695 13844 50562 23063 45517 2855 33576 60667 16241
+45500 28669 7857 64258 35853 19966 46170 3199 59174 27120 38634 12518
+47122 23274 63000 966 33963 44473 20134 50218 9604 34162 58005 18954
+44889 6513 34630 55735 15779 43932 27430 8894 58354 38199 14148 30826
+48918 7902 55534 24142 41158 12864 61758 26801 39240 3175 52054 18853
+31560 57440 7210 46201 34507 14546 60894 24237 43309 4516 54360 24230
+40595 10082 63556 19032 31762 50881 3572 43743 26386 62687 13309 33490
+46158 5369 56072 23576 38766 13015 64866 25851 47832 3351 37739 60357
+13952 29092 46731 1561 50588 18218 30964 61294 5327 45917 34606 18847
+64482 7446 44945 34869 18128 51586 9633 32044 58602 20761 47958 3343
+41263 25908 52179 9924 32098 57255 13486 41812 23276 53145 5410 33715
+60098 15132 44458 28230 553 52914 37715 17985 60610 8442 37233 50373
+13012 29080 55139 18270 44049 4491 32011 60149 16107 48622 29270 57
+57642 35713 18389 50485 3900 42872 26611 58125 12472 41465 23677 62656
+1122 48113 18182 35532 51367 7817 28817 58955 16881 45513 28047 631
+63406 37992 15929 29338 57295 3775 47100 28863 15384 54253 34796 1163
+65327 28181 15373 49363 36296 8012 60227 23707 42390 12197 55562 23278
+40145 5498 58464 20342 32800 46234 1652 63743 29310 14866 38100 52485
+3516 30746 62791 14674 44273 27488 7157 55977 38085 14540 31857 64721
+2535 41727 23753 53146 13384 30383 61657 1906 44337 28370 15378 57197
+38107 4958 31210 54279 12363 42081 24086 56929 8622 33466 50939 19960
+42403 7219 59991 26103 39667 12786 51222 29086 6370 64190 35832 19481
+47205 9794 54615 23062 39889 2588 62563 25836 38506 10626 49251 21365
+55376 14622 35010 44804 5807 63629 26394 41300 2559 55795 18006 34868
+47689 10507 63072 25907 38904 2047 49016 21744 57949 9439 38451 25063
+53182 13179 32662 63999 3309 43067 24556 54775 11550 40691 23551 57062
+1075 47981 21009 31463 60856 8553 46743 24400 40731 12219 56329 23858
+39655 273 61828 20319 31373 54106 4648 42365 23835 59848 10680 38921
+21611 51691 13265 31893 62392 4875 47543 28919 16482 58985 36477 10847
+52455 22925 47264 2107 33250 55926 13230 41843 24154 59424 1199 38952
+22453 52990 14231 35568 55298 3547 30472 47297 19841 59733 9031 33870
+45979 17604 55988 2509 38576 27223 8126 41556 25257 61030 12888 39354
+23255 48828 232 59921 26483 40818 10938 55271 18546 33123 44460 9279
+64792 24964 39773 861 53953 22723 38439 12855 61002 21305 43523 2665
+54845 26787 39899 11907 63385 18017 32607 47771 7852 55472 25807 39179
+11777 64406 22403 43775 6149 57549 29593 14784 52001 35606 784 45682
+24045 61972 14334 34269 44619 8444 65142 20082 34915 46125 1377 56921
+17702 34799 45181 5010 63077 24257 38509 13474 55718 22726 48125 5608
+36810 52022 15011 29783 54620 10210 42349 23361 59025 5357 32530 51895
+15345 45964 28055 7497 62948 35354 14398 47631 23713 55929 4951 40846
+22658 59433 14081 48316 29236 3972 54250 37212 20236 60468 8310 44884
+25849 40196 11731 59572 24435 42737 2700 54493 22132 39973 12481 64377
+26639 48671 9515 34317 61203 14958 45264 27375 2050 56101 35093 18814
+51775 10549 30256 58247 14626 43950 27328 429 53173 38195 14255 30204
+61516 10182 49256 24272 40286 7006 54265 17135 31360 60151 11153 42407
+24093 54073 2916 38979 22070 59810 13827 47938 29288 1460 63526 36690
+20625 52148 4023 34912 61131 17009 45640 29415 372 58934 35051 20478
+46762 8774 55327 25206 41963 11411 63741 22544 39968 1426 53234 27247
+38467 10957 57659 18411 35655 49902 743 30142 59932 13613 42900 23982
+56289 8503 39093 22078 49149 11410 61186 26411 41259 1070 54384 21345
+45858 11126 32592 59008 20113 42558 6160 53074 21402 34183 56170 9614
+41789 23151 59197 11538 39265 25180 54090 2966 30858 62274 12694 42727
+23400 53121 5802 34160 64848 17744 45393 7401 36830 61151 16242 29721
+46433 3957 62677 25936 40742 9291 49022 22055 63480 12575 41075 26206
+55475 6050 30601 44716 15331 63852 34563 1328 47472 25048 56404 11177
+33980 45128 19446 64879 8628 39976 26551 54393 11238 39102 24730 64038
+6307 46707 20041 35991 53554 9454 29501 61031 13113 42371 25240 56713
+5158 36501 52618 15148 31390 47860 9560 59916 22883 41475 6641 52718
+25395 41060 9575 58781 18804 36746 50600 4745 30067 62038 16245 45361
+27731 1922 52255 35824 14955 64495 29278 8897 51008 37182 17943 48652
+6281 56726 26240 41278 9904 58874 18041 36983 50372 1331 29243 60809
+20652 47532 8275 29854 50809 16479 35208 58509 5175 45156 27699 16876
+50923 36822 8618 63063 21676 42596 13855 49202 23145 65046 2810 30098
+46257 14573 59256 25217 39327 1468 53778 18577 33835 63150 9781 46724
+18010 33383 53944 600 42056 26475 60664 12075 35707 50483 15458 32581
+56045 6451 43299 24596 61797 1579 32408 47102 17603 57586 10663 38640
+23191 52360 7850 32720 60507 15543 44774 27968 6553 53136 36894 18679
+61852 11599 47566 26881 40646 230 57114 22361 40064 15170 50491 30632
+5056 62147 35262 17531 49954 9644 33593 58191 17254 43375 2828 54223
+20714 31734 63931 5234 46473 17618 36435 50339 8968 28673 57169 15074
+46463 33993 1751 49136 26571 63669 6989 34887 44822 18779 56541 8942
+39551 23077 50356 3527 32288 64525 15303 43916 28247 6404 61366 37265
+18063 51374 11616 42054 26580 65181 6078 48236 28903 12459 62195 36818
+17560 52520 494 41990 26213 63044 6871 32476 53805 19536 47242 30306
+57795 18657 45614 5593 32644 62076 18653 42708 8431 54376 21257 31827
+48943 2866 61155 20100 30376 46444 5539 57191 19413 33419 52015 7732
+42750 25673 64245 10280 38880 23065 48531 5674 56765 25336 42077 92
+52981 30055 15463 59598 35339 3910 49482 20329 32278 54490 8715 42289
+24284 61136 12543 39791 22035 55498 7290 32649 52346 17627 48444 3792
+29857 60500 13229 42076 23899 51171 8357 31006 58684 19175 48329 469
+39939 27087 64331 11148 32940 45762 19761 57363 2057 40433 26151 63558
+12869 48026 25614 38816 2980 61506 20093 37418 53848 12552 30742 45935
+2389 64404 25346 38318 12192 46993 21483 56590 612 33445 44780 15428
+63545 28659 6260 49494 37892 18695 56265 4880 47950 30784 16644 62165
+36554 8018 51557 24360 44673 4088 30351 56969 20074 42344 5483 53552
+29494 16441 63213 37460 8475 46685 25113 61821 6328 37610 50013 16885
+31508 63485 5246 47236 27696 15993 55762 37991 2158 31866 47735 20826
+65259 4423 40019 26855 51604 13017 33805 55984 7241 41996 24857 61846
+11383 33198 51306 19174 45457 5976 32106 56981 14639 44065 27415 10480
+65293 37143 18404 51572 5215 44033 30285 14933 60137 36468 4236 53835
+24692 42546 12799 49099 21542 59377 5060 31501 44713 12463 65451 25181
+39536 6523 54677 19737 36598 51475 2469 30905 64320 16235 44377 29027
+7073 56631 34508 15661 49862 28263 4128 63258 37524 15518 53789 28053
+8780 49320 37122 17362 65405 604 47423 30374 15704 51709 37816 8127
+57717 27999 16448 50047 38208 1720 30004 59671 19953 43595 11455 56377
+26626 39704 808 51528 18518 33926 58961 11943 48235 21389 38308 1876
+52274 31300 14990 57855 37352 3600 48324 23911 60928 10728 38848 21442
+52105 14167 35525 62304 5622 40552 22053 51470 3440 30615 59565 15329
+47093 29582 1608 56018 35160 16517 51369 28341 4143 58580 38236 16927
+32238 48959 2111 65467 21806 40537 11728 54461 26552 43436 4567 62829
+25325 39076 12891 55268 21229 38574 2553 63746 26969 48374 12469 41038
+22115 56262 6771 37638 49988 16873 31515 59283 10045 46926 25097 41069
+2765 61330 20623 31453 54949 11212 44980 20389 33114 48201 4930 65033
+20014 33121 44594 10362 54093 17424 34117 63481 4347 42278 24477 53561
+9649 32848 62592 12603 42473 23277 54804 1134 39166 26979 59450 6752
+38553 26597 56176 10255 44604 18854 36925 51764 5465 30477 61479 13261
+42963 23304 50436 4407 29968 58686 13184 43253 23727 55335 8492 38434
+21800 65010 3879 30100 47163 19579 59540 8806 39125 26948 52588 13853
+41625 21535 60134 3828 49070 27030 42219 13180 54552 29563 920 64958
+35924 17352 49971 4651 31596 55714 21214 44141 8163 33792 63654 19254
+47439 6144 37340 59937 12488 28674 53862 20793 46363 3825 39389 26767
+63222 11290 34840 49882 18448 41078 7197 59211 34703 21090 51968 10622
+42084 23208 65114 3506 35023 52037 19081 41410 9796 58745 22379 39827
+14291 52580 33845 1055 61927 25426 42853 11830 53025 20243 34975 58408
+8316 46007 19534 35589 53594 3188 30378 59091 19358 46876 8710 33695
+57860 18500 44659 4078 31447 56258 20710 48092 8481 34398 58872 14876
+42816 24409 50362 1977 63509 8702 36540 54138 14684 29313 49512 3636
+35147 65368 17602 44582 10332 34118 55713 17274 42231 7161 63497 26029
+38701 11250 50118 17159 30974 59697 1926 46361 34618 19065 52193 11733
+32678 61723 17641 46931 6877 38533 23854 65531 9969 41888 17678 52524
+29842 1822 62546 36642 18633 49289 5132 32605 58047 18297 44991 2358
+30062 63369 20749 43866 9713 33059 56041 16931 48883 27708 5370 61475
+38027 15380 33111 54470 9773 43238 24824 58164 4495 39558 17132 51531
+29130 8251 60629 36177 17145 50169 5733 34302 56102 15982 45195 29498
+6908 58699 35897 18642 52564 11534 42907 27122 60532 5589 35342 50682
+16729 29897 61735 9171 43823 27308 16943 57611 35857 1971 50497 28866
+15350 60084 34969 9906 46701 22514 52967 770 33093 60906 17796 46902
+10546 32733 65039 13625 41519 24172 50778 1245 33849 59027 15217 44687
+28588 3683 53711 36437 20276 57682 9500 44463 21212 33063 60683 6638
+43813 17677 57092 30155 8289 49930 35644 14634 62163 24744 45582 157
+31780 58510 15744 44496 27865 3738 54053 37672 17078 63749 8818 29821
+48493 21379 60495 2592 40676 25636 53706 8242 32189 57868 16153 47711
+27806 1874 64397 38065 15757 29919 47311 6210 62683 25490 38247 13817
+54730 21211 48476 3316 36953 58569 15950 28721 49595 8179 34402 57867
+14669 46549 27608 4946 59785 37773 20204 51820 8301 35305 58317 14169
+44274 27301 2235 60999 35403 18762 51204 4666 32218 56915 14646 44547
+27827 6135 61889 36384 16651 49114 27316 4531 62870 35581 15229 53733
+27689 6469 49791 35331 18583 60938 10275 42829 25146 54133 4657 39786
+26975 61809 9123 32994 53970 16685 45336 28481 6614 64712 35257 19781
+46843 9162 54532 27235 41658 2666 57832 23217 47884 9853 30913 61194
+13999 42239 23794 53535 6906 38774 21485 63448 13988 36872 49749 8352
+30617 62269 15707 44979 27409 6760 55274 37251 13364 47475 24618 58380
+7515 39268 21337 51121 977 33193 61183 14655 43624 22577 51911 7672
+33132 56801 18027 45532 177 33245 64803 14043 43144 24649 54953 3857
+39428 21670 62810 13674 34295 53270 6971 44113 28070 15781 60281 37507
+297 53945 24406 41841 12440 58074 25950 39585 2710 48995 24417 59359
+12496 39167 22025 50417 493 37818 57489 15658 29738 47722 7473 60209
+24695 41152 13289 53299 21224 48104 4231 35834 62064 15826 30944 48683
+8969 57095 27358 16491 38118 53179 2377 31833 63896 14644 46018 22392
+39917 6145 61866 26974 39562 11419 51496 17648 33353 57303 2021 42939
+23283 53762 12413 31371 64516 6164 47867 25630 38245 9977 62348 18434
+34457 51371 7428 42980 24893 58457 10905 34464 45501 20240 62654 2263
+36209 49532 14640 29959 59223 10440 43537 23000 50851 1840 35781 65260
+15676 31791 51864 8949 42518 24024 53825 777 32129 60373 12962 42947
+25032 53677 2135 32256 57512 16937 45132 27830 8191 60295 38101 16020
+29776 55452 4306 43722 25086 60761 9288 30798 50751 16144 45883 28428
+5139 63863 37944 14325 30987 55992 114 48100 27663 14282 63223 37519
+10646 44745 23966 54862 1750 39227 21598 61312 10037 33430 51048 13359
+43485 25321 64922 4927 30166 51999 12990 41336 22791 16533 56547 37670
+737 50308 27861 16068 57354 38056 7819 29635 59405 20423 48115 1191
+35994 53665 15454 30904 58502 3658 43350 23868 54872 12244 40570 25342
+62398 8617 43090 22469 55583 3448 40644 26136 58794 12616 39879 27079
+57336 4590 44144 21479 50761 13842 33181 55668 7801 44968 27752 15914
+64715 37432 11225 53722 25382 46778 4701 35004 59071 15224 45225 28994
+1104 57723 35997 14057 44751 23721 64617 3077 29881 46947 18795 53833
+11524 31401 62374 20890 44401 1688 32399 54757 20483 46137 9660 31321
+62032 19114 48568 827 39420 26619 65036 9462 39170 25780 49011 1544
+55727 21907 40303 10611 59043 23468 47899 2973 35979 53029 13969 29946
+65261 7688 44402 27398 11560 53246 37687 19827 64218 5770 44092 29187
+16115 53989 37630 8315 58154 25533 43446 2937 52093 18172 31650 60431
+8836 42438 23729 56357 10083 40126 22684 64664 13740 35071 50443 796
+30586 54502 18832 41374 10708 64173 26834 38440 1814 52780 18864 32380
+57838 9041 42090 22471 52372 5753 34990 64529 19512 46210 10941 32001
+48932 21116 57454 1256 33703 44244 15145 55855 27865 10960 49722 35844
+19394 62437 5463 45080 20852 31989 56549 10636 49292 22347 39143 8119
+58417 27078 49657 96 40889 23138 61806 9218 33355 45256 13275 64001
+22869 41551 1336 53972 24254 40287 10668 62256 18685 35351 49247 300
+29928 64719 17942 46372 9954 32176 57046 16306 46260 28522 7874 63675
+37832 20048 49683 10038 34979 59850 19207 42333 2064 53341 31334 14491
+56992 37482 10005 49000 20522 37421 63432 3138 30403 54737 14860 46808
+29185 7175 65282 35799 13892 46865 22500 58352 2772 41190 25915 48595
+11467 56256 21768 40606 244 60414 25378 42982 12803 53109 24532 39291
+7487 64321 20333 33676 46173 836 56185 25975 40656 11831 59804 25172
+48109 2997 41330 22099 57371 12246 37637 50299 302 29104 60362 17027
+44078 28471 3656 64143 37938 16221 31674 55672 8771 46525 27892 16682
+58672 38137 4937 29041 48193 10262 62557 25176 38718 13227 51767 29119
+5963 60898 35495 18976 51085 10880 43607 26960 57548 1081 31781 47405
+19111 64019 9174 40785 25910 50936 13918 31476 62366 5594 45850 21099
+34736 56616 8642 45714 18245 36833 61048 6133 28576 53861 17033 45941
+27340 3841 64444 38050 16815 31157 48879 2273 63296 25353 39656 11715
+55564 22729 45922 208 37771 65411 14131 29406 45746 6246 59654 23665
+39906 10758 52013 17869 31803 57153 930 47611 35327 18869 59801 4865
+46384 37939 15225 28486 63070 8033 35389 45729 18247 51639 108 34133
+58675 14868 43168 24054 53927 2678 39106 22600 60953 14233 30871 48225
+3719 52980 27581 15528 57314 37730 8856 51031 27707 16968 55079 38201
+4838 30227 58465 20209 42914 11015 55819 25662 38359 5547 62412 21373
+43997 14720 50664 35077 8075 64455 27761 14039 49467 37390 6081 62073
+27298 13917 53995 38242 502 32815 48755 20208 62965 11488 40457 23181
+53675 2731 34222 57939 19676 48270 7754 39769 25781 60457 11350 49230
+21698 41561 4750 57635 29410 15926 50353 35227 7414 64233 25516 48521
+12095 41388 23886 60402 1148 38717 21459 53741 14568 32807 61649 3291
+44986 28048 6056 33433 46401 19730 62525 11427 40808 25144 53756 4128
+40413 22899 64331 12584 49253 26728 39352 9731 51904 20648 32533 62988
+6836 45244 19728 36216 58244 584 30474 52827 14772 45180 28177 9996
+63776 35870 19785 48765 1202 54643 23550 38251 10675 60432 27041 41662
+6336 57070 19929 31424 51269 323 42741 22562 60842 7385 30920 48709
+19563 64104 8670 39654 24396 54748 12569 47554 28810 6061 59906 37559
+17182 51634 8074 34327 58853 21154 45390 4015 34826 48989 18166 65332
+12620 40200 26957 58282 4730 43011 24592 54013 11812 41240 22766 56798
+3610 47837 17162 34463 62558 13788 30537 45846 6620 55094 25538 39502
+11354 62517 19945 37850 51087 4067 33050 55927 14951 46037 28412 1330
+58500 35245 14376 50687 27980 3709 62483 35638 19257 49961 10051 39881
+21348 63639 29214 6126 53964 37269 20087 49369 2331 32489 52690 19568
+41490 5007 59880 25852 46775 13098 33783 56257 4257 43690 23610 58888
+12681 40956 21899 50709 5140 36515 63083 16058 30258 47568 10437 55042
+25790 40366 2699 61044 18288 36859 51931 8196 29149 62958 20417 45880
+6159 37472 59258 14304 29605 52635 824 42149 24668 61563 12403 40253
+24338 55157 3040 31775 45888 18186 61007 10902 34318 45689 14637 56599
+24382 40647 4771 52060 18468 31778 60062 8624 45327 34975 15792 57048
+27483 4399 50481 37011 16457 55732 27532 6457 49918 37862 20078 61672
+5277 43892 33204 17133 53897 986 30827 56378 15449 45556 28905 6657
+64078 36911 20228 51242 8890 42831 25812 59455 8 31708 52405 15786
+45129 28274 8756 60119 36297 19376 50773 1160 32447 54585 19285 43064
+8360 62732 23502 39118 15258 52113 30202 5353 63331 35013 17839 49543
+8861 32360 56641 17551 43749 3878 59327 29679 14940 49942 36404 10502
+54672 22798 44509 6389 35370 62590 15823 29735 53480 5013 42909 24279
+64977 13726 31908 53864 8958 48175 23678 40984 12502 57474 21626 49119
+2675 41604 23341 63318 11572 36182 49940 15203 31168 55840 1575 43169
+21558 59657 15008 35654 49605 3068 30997 56775 17141 45803 6497 32980
+63181 13388 42332 23736 52572 5209 33480 56016 17973 46475 3073 33927
+59378 20518 42857 9482 51890 17046 30945 64354 1554 43296 26275 52078
+13718 33224 62216 7755 43944 28120 14968 58156 35268 8452 52517 22205
+44519 14152 32894 59106 4606 44188 29367 16753 53957 35134 8086 57517
+27643 16565 49916 36652 3454 62834 25775 43759 9181 50680 20411 29851
+64262 7460 45232 28143 12675 55742 35575 20886 50817 3511 32053 60443
+20401 42400 11314 54993 26210 39313 4569 64005 21525 46186 12597 31799
+56040 8639 44680 28060 16504 64768 38071 5349 30752 47444 19531 61462
+551 31143 45681 15592 64168 27456 7807 49711 36493 18234 61205 1357
+43519 27116 52902 12037 40438 22814 59818 2954 30594 52153 16719 45188
+29152 4647 58410 38239 16653 34009 51351 9149 29392 63762 15767 44383
+27874 5948 56029 38010 15472 30077 59478 7132 41677 24491 52104 15142
+32874 65308 2164 44575 28595 16387 55251 38164 8989 31404 62312 19686
+45812 2970 37525 57116 16480 29956 46928 5176 55507 25984 40261 7936
+59776 25365 39954 11910 48975 21696 57913 63970 9214 42814 25501 52002
+2706 32005 60699 15300 45371 28353 9053 56109 35406 19718 46709 5059
+60843 24871 41891 2198 54369 34646 15863 49358 28326 10684 64602 37091
+18823 49958 5356 37870 56401 15806 29767 46154 7475 61936 24992 41210
+13194 48069 22017 63525 2835 34376 45675 17786 58943 10169 39100 26641
+53228 12911 34592 57386 3224 43996 28162 16521 52722 32652 2126 62577
+36804 20456 50070 10644 42684 23554 63647 165 35969 49560 14468 30120
+61085 9551 42087 23919 55499 2497 38507 21266 52302 8991 32725 60681
+15811 46629 28973 6282 63903 37353 20628 52873 11397 42775 24954 59537
+4426 34875 50517 16215 31370 56433 296 45046 27764 15930 61546 30968
+6685 49907 36217 20477 60522 10927 42490 26766 55749 7349 46355 24300
+40024 11453 59758 17104 33559 52529 94 47151 17008 35661 61335 10963
+28325 54686 17564 42969 7402 62036 29290 16066 53985 37165 8613 50189
+28065 15795 62900 35699 2862 53839 26319 42594 11990 59923 25681 40417
+1146 56250 21787 45907 14400 33154 58988 6530 43013 25595 50282 11317
+30783 56584 17556 42366 3897 50690 21070 33726 64870 9294 46274 18713
+36677 58110 6011 29540 51340 18357 43206 9155 65101 21100 33160 54385
+6713 43842 19976 31257 49101 2133 62997 26051 38896 10783 54342 20326
+47692 29343 2605 61115 37841 13628 45193 22634 63496 8051 32523 53910
+14943 45150 28833 2881 58127 35842 18320 50762 11473 35090 62638 20595
+48508 4059 39984 25068 58738 11637 32615 53850 17441 45539 4858 34078
+65019 21052 41098 11810 57380 25493 40796 4174 48041 21750 63684 12102
+40964 26154 58003 6108 36915 49935 14145 30517 55816 2060 43494 24573
+58779 13067 39612 22318 54794 3101 38825 26731 65400 11804 42505 21743
+51468 5918 34344 62922 19126 42798 2487 58082 20795 31415 51713 10080
+43617 18334 58935 32654 7660 51757 36611 18498 45914 2001 61910 26297
+38791 6205 59397 26148 38353 9702 52036 17637 31125 60106 3528 43252
+23655 54412 8375 39622 22777 64343 11909 42467 26262 53888 7655 39165
+24143 59162 11244 38484 21440 55277 2136 48767 30140 15508 58629 35899
+7488 44627 24787 65528 12653 39580 23453 55492 4175 33629 47358 18843
+58786 12270 38615 22472 50551 4674 31066 55767 16383 46576 34697 891
+61502 24147 46417 12477 37209 54633 6273 28503 60970 15160 46581 27388
+9825 52781 37449 18432 61817 2010 44868 38030 15346 29350 55651 11408
+41417 23583 60245 5616 34232 53239 13683 41729 23833 57982 1381 32282
+46807 17364 61494 9855 38725 26798 52096 5707 33861 57848 14554 42317
+24847 50731 7086 33775 62096 19360 47804 1095 40152 25921 58356 12301
+43311 24163 54827 9217 40733 23192 59670 12998 34490 53609 3984 44756
+32707 21042 57324 9744 47683 17204 35372 64569 5969 31007 47471 14154
+57676 24725 41665 8785 53422 34766 18378 61484 1569 44854 28397 14682
+53050 37536 3365 59996 23322 46058 13169 33285 53323 1284 43919 21994
+62156 12698 34942 47653 3870 56898 24059 40452 10790 52600 19331 33833
+59862 919 43473 23198 51919 10871 30346 61037 15054 44181 27627 6352
+52417 36466 18044 64648 10349 47340 27283 38270 2090 52856 17628 31528
+39842 24345 58819 12709 39543 22028 54796 6390 35096 47300 18262 61863
+140 32461 44180 15816 57790 29375 7790 50335 36363 18384 61717 8959
+43453 25309 56722 4623 32200 51861 13202 42237 23202 60770 2077 34353
+52698 19262 42613 4272 59313 26805 39026 11266 53996 21232 49303 8211
+41101 23364 64858 5607 36914 49741 15121 29311 62238 9202 47690 23009
+41021 12002 59687 26049 43692 5421 55359 17462 34926 51959 8990 29271
+57139 18607 42599 5156 52975 28653 16169 57746 36406 7405 47460 25383
+63145 12328 41576 22803 51165 411 33897 58162 18061 42269 9798 50855
+29745 2165 60671 36527 15524 49232 27557 7758 63572 37324 13168 47268
+23097 59251 9652 34226 44120 18428 63979 2144 40819 25457 53700 12670
+38697 21537 63299 2508 33865 48520 19870 57176 5237 30399 45375 21585
+65440 7844 32680 44386 20996 58669 3793 33614 51108 14511 45489 27494
+1560 64908 35315 19909 49357 5467 34651 58454 19500 45751 10943 39075
+23592 49226 5895 65377 21099 38604 12125 48696 25315 62367 4583 39802
+22400 53236 13642 35765 64044 530 32770 46474 19426 61414 11927 40235
+26271 55417 2104 31856 50024 13514 41445 25500 63242 3358 33902 53571
+13923 47042 25359 39998 1195 60434 17596 47812 28835 10135 58189 36522
+17417 50032 5984 31028 64917 12805 41121 23408 55884 7462 34287 50164
+15545 30312 59165 1762 42580 22455 52004 10534 33377 65237 20867 47130
+5690 39928 26618 53097 9471 33261 57226 16359 45068 28336 1486 60858
+37668 20698 49435 9746 30243 55345 19040 43612 2258 61666 26921 38407
+8136 53159 33077 14140 55739 24184 44611 3684 32079 61313 16938 47152
+27927 10150 62326 37161 18911 50437 5947 41600 27182 60703 10426 48480
+19026 35673 53986 591 30484 61463 15694 45447 28479 12767 55306 37133
+8208 50429 27562 15320 63842 38156 1146 28343 48609 20649 60855 4246
+40321 23233 55325 9771 32384 52832 14909 43694 23892 55214 509 40470
+21860 65364 12525 39449 26502 51348 6742 32284 57942 18892 46884 4014
+33781 61850 17644 48814 787 41536 27234 64942 13127 40459 23474 46856
+8318 61734 25906 39198 11243 54581 21669 47988 622 34689 60748 18848
+43329 10413 53135 26586 40215 2380 63492 26035 43501 11123 53484 21210
+39010 6855 65186 25710 41220 11625 56857 21564 40573 3170 50893 31034
+16296 64579 38076 1299 31059 49083 20570 56841 5866 30925 47655 20491
+64828 7716 33846 47315 20205 56928 394 30542 44418 16206 62626 27909
+4173 50163 35068 19979 65249 11600 43292 25472 55178 2673 41402 22630
+63459 13317 46263 30430 1720 60663 36876 17724 53408 10370 43047 21098
+59690 29356 6074 53465 35878 18554 49707 2849 33298 63825 20744 46868
+6921 39554 25634 52256 14077 29916 62919 2569 41887 24708 56017 12549
+39499 26454 54354 35 39012 21759 63267 6624 33442 46437 20116 56247
+11052 39821 23046 65478 4976 48095 31532 17023 57957 36196 8547 49919
+27395 16808 64623 38134 5472 28966 54705 19269 46123 9036 31986 58808
+17327 45250 5905 37249 64371 15354 29044 50406 7764 41387 25814 54363
+3451 34514 63303 12667 42986 23337 51078 357 33418 58730 20130 42014
+12596 55960 26622 48734 4992 32970 60619 1403 45622 18235 31090 49412
+11066 65218 24949 40188 8264 49010 22504 55622 11563 40129 25723 63875
+3062 32992 51418 14357 40793 22676 59328 1464 33978 53566 18082 45668
+7744 31602 65094 15336 47853 28139 9126 55726 37897 15104 31524 48469
+728 63153 25148 38293 13038 56524 26987 43686 1696 52569 19748 34075
+60341 4633 44763 18878 33474 56074 994 49073 23990 39407 11180 65421
+20842 32036 45755 2787 61687 25044 38479 12005 50730 20468 32911 64769
+1420 44039 27654 14771 54145 37030 3862 59273 29450 14750 49957 36115
+5979 54548 21464 34856 64891 11887 45121 19241 37859 54075 6070 29234
+58345 17002 44396 27406 2819 53642 37095 17431 57662 4804 47108 21277
+36580 55138 9195 31239 47353 19482 58230 6010 40664 25916 53069 12027
+32391 60400 17574 42941 3185 50540 19705 30527 57527 10187 45832 18367
+29877 61126 6264 44027 34650 17945 56788 10342 42770 26512 52633 14220
+32371 61718 312 48560 29380 16537 52638 35475 9399 57463 26406 41646
+2217 51977 18566 36675 60521 6903 28727 47189 19883 54204 9925 40899
+26575 58418 4501 35433 51467 15470 29995 57574 6372 43262 21690 59400
+9983 31849 51736 17864 42873 5562 61500 30368 15668 55539 36021 8439
+52094 23714 44614 3643 33879 61929 14499 43477 24597 50945 495 34739
+58479 16854 46870 27521 3802 52971 37360 19388 62376 9057 36607 49714
+15608 29667 55975 669 42802 23548 59888 14061 31376 47995 3033 64309
+23048 41721 13355 52679 30384 7647 63039 35762 17893 49998 5206 35390
+59053 16164 31202 51070 10439 43786 22749 64300 451 37145 50205 15180
+28991 59597 8778 42189 24882 52788 1007 33071 55085 13586 43074 23822
+63945 4799 36250 52634 15371 33008 45970 7756 59034 22316 40621 9968
+47956 25296 57436 2067 32428 44858 19491 60035 5333 36295 49636 16456
+30207 56792 8146 46570 27792 13079 64669 35709 19743 50431 4967 42693
+22417 62345 13773 36582 49866 7824 29412 56005 20611 46432 1896 34230
+61417 11234 44480 28380 15962 54761 38171 9190 30814 57516 20656 43709
+5639 52289 17883 35293 60393 2526 29384 51057 18605 42068 4562 63683
+32165 16283 50246 28110 5757 56703 38060 15086 31561 60107 8347 48237
+21939 39523 3560 57287 26842 44335 12827 59927 23342 38290 5324 51839
+18307 33417 55783 10722 42183 23176 58151 6681 47443 25182 40517 11221
+59867 17143 35801 51984 2732 29082 44310 17333 60658 10471 35233 52242
+19071 46337 6554 35614 59228 18386 42409 9343 52498 26674 39693 4949
+58420 19469 47864 31352 8851 51449 37167 16912 57428 27427 6224 49571
+35356 20322 65503 3571 37810 49461 14521 30977 62498 8317 42163 24841
+55361 11528 40042 17315 59101 29519 1593 54550 35947 19088 50029 9397
+33425 60857 20187 45783 4427 33966 60023 17382 48047 10022 36930 51708
+15841 28740 60811 3195 42790 23771 54451 13155 33198 45312 7253 55968
+27373 15146 38234 60544 2365 29123 52082 10955 43525 22828 59715 13789
+33967 51460 294 41667 26493 62783 12897 38584 22081 53153 2623 32631
+57317 18373 46102 9511 29686 59037 14135 48394 23882 39620 4678 57393
+17255 30936 46303 6928 61795 23815 38445 9566 53349 18379 12205 40659
+26498 48354 5700 56276 20327 34138 44069 2438 59249 28918 16928 50938
+35566 5218 60021 21437 45491 13611 30154 55489 6316 47797 28145 16586
+63575 37263 9860 50222 21043 34718 57694 5617 44327 18365 33070 61556
+3619 49194 22222 39674 11997 60099 26457 47092 5216 39956 21724 59248
+13959 32694 47051 6932 54452 23416 39144 14351 62675 28572 8222 50988
+37172 16001 58662 28911 5923 49651 37180 18125 56635 10072 48323 27199
+41713 4626 59333 17763 37456 52575 10292 29571 48380 18819 62631 6516
+40604 25986 47135 10761 61824 17305 30724 44154 3283 57738 27636 14470
+49940 35115 1139 62727 23491 42984 12487 52414 29116 8772 64559 35594
+19795 49486 7135 29911 61357 15327 44663 27744 536 64737 35642 17878
+51033 9861 42812 27099 61970 1490 41136 22765 51644 9263 34122 56037
+13360 42202 23951 63102 684 32083 47823 20572 54833 8486 39619 25213
+63460 2597 48749 22343 41199 8065 57510 26818 38707 10486 46601 21543
+63764 3844 32531 54213 13216 42542 23623 47789 10204 58132 17037 31062
+44148 3225 64784 23760 38814 12479 48626 21751 63114 7394 41275 24685
+48198 12850 54455 22817 38886 231 64581 27213 38258 12900 48138 21412
+57576 2847 39226 26578 48410 12069 63909 20597 31955 54930 5444 39778
+22181 53200 9799 32535 61046 15188 44107 29497 6785 64554 35767 13059
+47598 24594 55369 4109 40241 24347 60722 11367 38883 19468 51712 28894
+8027 61793 36839 19888 45851 5880 55234 26516 39490 12179 58584 23021
+48232 3266 41194 26170 56909 12196 40505 24136 62385 6258 39108 21284
+53612 11322 34085 56459 19551 45369 4227 33406 64918 18930 48417 11829
+38530 21982 57753 8564 31498 46980 17981 59601 1708 29329 44232 16834
+55030 28395 3491 62020 35805 17938 50176 12953 35128 65111 7652 42540
+24258 53186 12601 40962 22854 63175 3478 37357 52296 15168 31186 44503
+1443 59549 25448 39137 11583 56392 24800 41350 2919 52776 17338 31882
+63091 9203 43986 27461 16587 57174 36695 5854 50838 27385 17059 63810
+37280 3398 46635 24492 59760 10171 39447 22202 54924 13505 48031 31582
+6850 58291 36855 13492 54006 24158 46426 8373 34369 62649 16520 45713
+27556 1241 53798 35117 16041 61040 28849 10100 49397 36456 17373 55211
+127 41950 27200 62579 13694 48785 25197 39228 2297 63632 17799 35608
+50488 8338 29702 62131 19239 43002 5012 54002 21287 33610 63898 8390
+46068 20751 32470 56466 4478 41138 25042 54287 14687 31141 64431 1210
+45772 29048 15871 53886 35866 10697 60240 17851 29500 45160 655 63159
+28363 15220 52838 37918 8458 46679 25027 55326 12401 41575 23303 58311
+307 33293 52594 20250 47325 5058 31957 61683 20246 48742 7908 41434
+26582 65193 11279 39360 23216 48282 6146 57928 26131 40755 11187 52328
+19829 31547 64829 1960 41403 23214 55280 9382 32659 47428 14709 62530
+25339 38568 690 50554 20010 32437 64003 11780 42903 23014 49588 7997
+32263 57279 17868 39848 4660 61310 25057 39188 10077 55690 21358 42624
+4245 48960 25702 60219 13434 39575 22527 51515 1558 31755 62489 16205
+44490 28305 6253 53604 35483 19630 65426 11760 47935 27054 40887 2570
+49349 22728 63748 59180 36490 17819 50479 9285 31816 63218 14779 46139
+27522 6803 55174 37654 13687 48091 23413 64897 851 38616 27232 52900
+10561 34996 58897 19636 44355 3301 35534 55370 14900 29463 47050 366
+63058 24747 39679 9955 54207 23968 42884 13652 57758 29962 2549 50303
+35302 18287 65157 7521 48844 27203 38591 11847 61742 25953 41570 2253
+56345 21579 47933 12630 32048 64053 3644 44897 27294 16412 53156 35470
+607 62929 24114 45115 13627 35978 54308 8543 30738 63758 20913 44778
+2276 40681 26183 56943 13769 38482 22281 48682 897 55659 26695 39381
+9234 61153 20279 47542 30883 7503 53365 37777 20394 56873 3890 34365
+50935 14539 42209 24120 58804 1596 39837 26644 52004 10293 34180 57186
+13568 47761 25228 39501 5044 59290 22159 43788 12395 54662 24817 38974
+7278 64334 18791 48173 29630 5576 52601 37909 16128 58796 27965 4708
+49581 36509 17029 59520 29610 9859 53782 38061 16900 31132 47990 3444
+62497 22167 40740 14759 51599 28949 6999 58714 37298 16963 50168 27636
+859 62094 35942 20302 51024 8531 33591 54838 15453 46838 29110 1580
+59551 36823 16489 51018 27949 3579 61000 36686 18231 47312 10584 56709
+26632 40161 7436 49146 22846 62611 10461 32465 43902 17811 51535 970
+34751 58971 17419 41989 11461 48315 26249 57791 2694 39617 22895 49131
+12071 54427 25934 40673 1364 60238 21968 45788 14390 35350 53114 6937
+31124 63807 17074 42441 2312 54719 25660 40834 10907 58046 33999 17675
+50182 254 32312 65145 15165 45184 28054 8940 55009 36285 19698 50616
+1361 34270 60278 15625 46309 24754 41913 5316 58828 29429 15839 49824
+37083 7991 60211 23372 42026 2591 48930 26407 62911 6935 39305 21592
+51368 12452 31485 64667 6308 48865 24385 39531 10855 53013 20173 31625
+56077 4211 46885 28140 16014 59111 38003 103 32748 55242 14349 45506
+27537 8580 61815 35194 20492 53534 12744 34511 48686 6703 64114 20924
+34172 46078 10300 59000 19529 34058 44937 4159 53260 29425 14306 61599
+37899 1211 49313 29565 14229 55924 35792 8510 50790 28642 16543 61173
+36431 19 45518 24156 64247 11657 40025 21474 52862 1873 30562 61145
+14465 44132 28827 4318 57607 36712 19985 51086 9339 42486 22872 64102
+6423 33085 51944 19436 42833 10754 59238 25954 39633 4493 54410 22391
+46875 10205 30688 60389 13806 43418 24605 55569 579 36236 49673 15680
+29766 58978 10034 40735 25714 51073 1637 30168 61674 13206 43367 22113
+51030 7058 34598 57441 12928 48059 23746 40947 3026 62105 20973 33650
+47140 7342 56364 20235 35104 44102 11759 59267 29413 2176 50184 34825
+18037 61196 5625 45341 34877 17391 64305 10158 44405 28763 14891 57075
+37822 3230 44455 23690 59615 13198 34182 53208 828 42666 21824 53997
+14314 35755 62778 3375 29257 50249 13335 43233 24733 58210 8143 30070
+45081 19442 59664 6018 41239 26777 55036 10525 43855 17692 57593 30336
+5440 51111 37001 18628 63188 1201 42550 26337 53991 14479 35289 49931
+6832 30950 65058 18544 47378 11603 39688 26949 63347 5148 46986 17609
+33699 56593 8857 42656 22463 59741 13023 31830 50528 1036 42711 22890
+58289 8792 32873 54362 15939 45098 28434 4048 13521 42199 25000 61298
+616 40221 22441 51833 10866 36096 62276 16104 31312 45889 4554 57304
+24383 41568 12281 49104 22217 62803 5815 31335 46237 12634 60492 25572
+39989 8035 54264 22026 38355 13345 59005 26841 43978 6128 50890 18723
+34067 63976 8491 42267 24178 54202 11089 38844 23782 57491 45 43276
+21324 50911 6378 33178 60236 15381 43843 27531 8714 53969 36333 14617
+57307 27501 6838 49062 37838 19996 60026 10909 42918 22701 50376 3013
+32395 58082 18822 46961 7010 32693 61589 12467 49374 24552 41840 5130
+64232 19365 35876 53809 12060 31513 50603 17575 43110 4692 65502 28549
+15038 49346 35494 9384 62187 19023 31603 46545 5458 60677 35089 13776
+45302 22044 55542 3115 41118 23905 62902 8747 33800 53438 15538 46770
+29385 3435 60568 35574 14187 46911 25726 56419 2030 32913 44247 14827
+61736 27423 8178 37438 55576 14213 46553 27857 1304 64486 35750 15773
+49678 28338 7198 60909 35338 12515 55165 24538 44578 1706 33820 48389
+15471 65037 28646 8159 38193 55934 14542 29720 44522 4297 60653 24778
+40671 10835 56321 20464 31600 44706 6688 62018 20126 30873 44555 11418
+55264 24531 40480 4644 64189 17645 44727 30007 1958 53949 36504 20501
+60133 6619 30247 46577 13630 65318 25225 39043 5813 51501 19895 36424
+62046 9180 30183 46079 19673 64111 4358 32721 44634 19003 57285 9931
+38452 27255 48770 5296 58534 20309 33532 44824 9415 50492 19130 32137
+59618 3982 42288 24146 48909 12608 61233 22579 39759 4607 52382 29514
+16057 59268 38175 7391 29050 64678 14273 47581 28004 3497 52017 35522
+13272 63268 23261 45103 1540 35056 54161 14723 29706 57171 10018 41324
+24139 53268 14852 34591 61056 4588 46275 24833 40498 13684 57937 23128
+46809 922 36532 63593 14788 28999 44297 7190 60167 24558 41747 11194
+52709 20144 30689 60750 5777 47262 17585 37826 56581 2059 28254 45548
+18715 59714 4737 31434 44242 16151 54970 27505 365 50345 36969 15827
+65166 28184 6917 49551 35301 20115 58709 11813 46220 25189 40886 2742
+64694 19687 32618 47490 6535 56591 27639 15498 38087 50571 5470 30675
+57756 15271 42383 25809 51619 7827 34958 65119 17570 48519 11608 39592
+26666 54282 3377 34265 58370 15103 45793 28032 1950 53622 35282 16404
+64762 29522 9147 49728 36862 19957 58711 4063 41982 26239 54100 7361
+39433 21746 65283 12349 41839 23270 52325 4024 34350 63139 17820 47781
+11113 40579 26959 53852 3332 31719 60539 15408 44931 27919 8109 58864
+37089 18495 50816 5848 40082 27168 64159 14208 32010 53454 4396 46001
+27353 16502 62731 37712 9230 53148 24418 42050 13755 58084 30032 2751
+51235 37104 19390 55049 7448 35864 50153 15968 28769 63710 5783 45969
+28388 15311 51334 37510 4794 57124 24574 45587 10811 34382 61796 19309
+47326 5004 36549 56742 15787 33333 47894 1444 64360 22375 39427 13756
+51485 28867 2695 61008 35914 20365 47626 7734 54721 27226 38837 12311
+61755 22291 43772 3111 55451 26186 40545 13469 58899 29660 626 51146
+35915 20650 55342 8128 37880 49851 15494 29171 64594 3608 36200 47394
+19016 54908 9804 40561 26274 62859 4511 38665 21885 50913 9695 34319
+56855 52506 5314 46860 17390 35736 54028 7687 29552 59874 19211 43116
+1901 53724 26088 39054 10147 60776 17907 44711 31619 2683 51819 36912
+15196 56887 23704 43970 1158 32670 64368 19230 49091 4122 41235 23381
+53531 12485 37092 61167 1545 28777 47661 20600 56050 4618 41149 22319
+62496 12877 43828 26145 52047 8934 36672 63812 16793 30395 46805 4292
+52276 29049 16795 59315 37928 1495 50192 28477 15328 64318 31727 4395
+53549 37930 14875 29168 55962 7825 41880 24704 60482 11501 39156 21660
+52993 1605 36313 59766 15412 29865 46745 8336 56467 24424 40539 2073
+60220 21188 34787 53552 11220 42146 24702 58113 18 39735 22359 54541
+10747 30089 48414 17631 64103 6920 38403 26997 51466 11651 32274 58563
+19714 45625 918 40379 26143 65306 11174 39663 23651 55077 6781 41846
+21517 63179 10771 37305 50108 16936 30011 59840 3587 42498 24361 53216
+11422 40885 21753 58008 4932 40703 25565 50660 14427 36810 59255 5988
+29677 48936 18426 60424 11424 39164 23028 54357 4935 33697 47332 18504
+62827 9554 32233 45645 18089 52785 2948 33194 63370 13338 47849 24043
+40839 1084 57914 17119 35259 52801 9616 31256 48477 20593 59483 5955
+33134 47224 17003 57248 9629 33344 44389 18894 53007 3955 32179 56411
+14923 44427 28191 1636 55243 35157 17277 50323 6566 34881 53180 17211
+39937 11180 61297 26459 49219 3182 40679 22979 65504 13839 48008 29567
+906 53892 36388 17309 63108 10166 47685 27245 38305 5912 55848 21555
+43402 9995 63488 35022 18936 50985 2525 43170 25927 57679 9659 33388
+53845 15312 43302 24028 56866 6961 40048 21182 61015 12084 41868 25772
+51192 5588 33598 65222 19483 46413 199 32784 56400 13019 42611 23343
+52761 3281 34349 60203 18770 42769 10319 52436 20894 34236 56399 4970
+48167 30232 15667 62748 37187 2595 50719 24155 42240 10065 64555 19456
+36740 50060 7811 30269 62117 14211 47932 28038 8845 57330 37968 14810
+29127 60758 5926 34546 45661 20203 54934 10950 40767 25654 62068 3639
+36723 51818 13890 31654 55423 8187 44123 27947 11888 62310 37573 19367
+53155 3214 43567 26605 63392 10762 38397 22431 48367 5072 59665 19317
+32640 46055 446 56058 23391 41692 9766 62975 29602 16771 49923 37274
+5907 60484 22416 44865 8167 32493 57093 18521 42696 1177 53101 29711
+16325 61562 36207 10769 47758 23582 56535 2557 32956 46213 18646 61003
+9418 30835 45292 20400 57577 6103 38471 23375 62394 12397 48898 25948
+39607 65 65131 20432 35081 51930 11188 30629 55640 17178 43041 1571
+60834 23575 39666 12760 51226 28976 6617 57112 36572 19781 49353 756
+32775 64979 19449 47541 8262 40242 26563 62241 11772 39390 24327 60079
+1318 48312 19068 37828 54301 10514 30043 63067 18021 44379 8623 31629
+60475 17634 42221 438 54900 26473 40179 13877 51308 28733 7741 61306
+37935 16544 29137 53882 4518 43448 24051 58101 9895 33420 45583 13895
+65245 24103 40931 3976 52038 19093 32556 58349 9908 45730 17848 35971
+53476 6222 31948 62184 18056 45304 10221 38895 26380 59501 2225 34542
+53215 16886 45697 28033 5734 60991 32023 16344 50965 36095 11394 55955
+24638 43369 2063 64092 20392 30919 58557 11359 43084 23351 65201 2812
+33670 50854 13024 40100 23316 58185 8886 33308 47776 19505 64550 4874
+38841 26303 54847 13164 48464 29309 7344 61904 36000 17535 47329 10970
+54828 27150 38820 5781 62648 24997 43697 10893 51512 17987 31705 59577
+7785 44368 27749 15970 53442 37906 3851 31790 58648 15714 46906 27703
+2730 54654 34997 13741 60673 24229 45235 9058 34015 48436 20017 61271
+6442 35153 45362 21044 57565 11987 40009 23039 51262 237 32985 65029
+15785 45641 28909 4959 50781 35334 13650 57986 24153 44421 6793 33316
+49085 19855 62939 10035 33156 45242 18901 51746 3722 31926 63757 18244
+45268 7878 32455 55982 14209 42290 24720 59219 1891 32613 53358 19590
+42991 4924 62248 29078 15940 49643 36420 7833 56115 22066 47231 14793
+33311 59482 4597 45535 27706 16435 53477 35044 183 57340 24715 44956
+9034 33495 65067 16360 47368 28437 6910 54584 35176 13453 63670 23741
+43726 570 53541 19338 32900 56968 9283 45804 25412 41203 2624 64131
+24543 48895 12509 39463 21812 58260 38 38341 27210 49126 11976 59128
+21851 41875 5433 52069 34899 15631 65519 28267 7658 50160 37058 18578
+60826 2506 42562 25484 54818 11876 39978 20989 62202 28717 416 50000
+35633 20750 63337 11610 34914 47913 18338 60719 8000 40849 25623 57587
+12578 43848 22731 62600 72 31846 48052 19672 56150 8823 33776 44414
+18488 55188 7304 39521 25115 60376 11782 43113 21733 56413 2790 33328
+52994 18735 41834 13818 60171 33704 1247 45229 25271 54864 11470 38672
+21136 61586 5151 34871 50284 18587 39836 664 63846 26966 38781 10892
+55064 22219 47522 3171 36117 58325 15469 29923 52892 8850 44182 27658
+16494 62069 38113 7339 30437 48351 17084 64244 8734 39138 27060 50655
+1643 32572 62341 14098 43889 27332 7837 54260 34811 19141 58440 11881
+43737 27039 51684 3801 33589 57807 15587 44165 27431 1034 54195 38144
+16877 29669 64375 3117 43596 23751 52458 12931 38918 22204 63233 1531
+37297 50113 14973 28764 57399 7275 44125 27365 16945 60850 36536 688
+51344 23263 46088 14381 32074 60136 9642 41111 21645 56858 1406 32119
+52692 13709 43319 25241 61902 6686 39092 22018 51495 13901 31925 59442
+2644 43422 23114 55469 10414 32243 47976 14037 63487 25064 38696 5000
+49115 21794 62369 12939 31930 45395 3495 51274 18939 31116 64257 8487
+42517 24932 51733 14585 34746 59153 1017 42793 25518 50683 14811 33516
+55021 3703 44527 30717 17583 56606 9621 49221 27164 41711 2905 59820
+19150 36376 50121 9915 29790 56556 18923 43653 3680 63513 31381 15825
+52315 35171 9858 59902 24939 44353 6002 31489 56744 14556 43469 21652
+50723 4352 31144 58535 14729 43757 27875 6811 56918 35316 20521 49792
+2041 34504 59017 21047 48369 7160 38648 22764 63880 10406 32354 48396
+18668 56425 2831 42353 26608 58956 10797 48880 19121 36103 62871 6593
+29862 50857 19122 42357 185 56507 29129 16081 50091 36175 8168 60042
+24736 48056 1735 38985 21674 63577 11903 48896 25562 40507 3810 56762
+21941 48842 12762 41698 27008 61645 7079 33174 51630 13400 42101 23615
+58660 24 46643 28927 14992 61609 37330 7430 49777 18759 33268 14835
+56501 38185 8829 30575 54402 19607 43669 6124 62075 30297 15473 49625
+36944 238 56174 22502 45308 14301 33561 59756 6447 46867 27836 16419
+57887 37801 3562 50959 21038 31242 60112 9605 45951 19981 30687 57108
+2902 41037 23547 65481 13290 35149 46970 952 55519 25804 40426 13803
+64445 28906 7806 50224 37532 18797 61974 10657 42917 22976 50633 762
+32356 65255 12976 42234 24048 54841 3513 31160 47878 17240 63252 9122
+42058 25316 47432 6445 56498 24090 40309 10701 61935 17937 30558 51991
+3743 34754 64344 18433 42227 705 53128 28453 15638 60980 37372 5567
+49785 27607 16559 59271 37348 10061 52330 22156 47369 3388 34334 65159
+15920 46207 28461 8225 51091 36368 13585 56463 24652 42287 3605 61361
+28579 13783 51317 38158 2338 30295 63929 16163 48333 28873 7569 51081
+36795 19050 62575 12304 47763 23090 40250 2180 56651 30299 15161 49991
+37192 3324 61423 25294 40113 12130 51610 21566 39408 4082 62627 35012
+17442 50507 10628 34207 55841 20777 44743 7145 32911 61990 13685 48601
+22930 41429 6452 55828 25470 38959 10559 60299 19506 30411 46386 3718
+56293 22950 39883 12357 54148 26848 39020 8821 64703 17206 46282 31111
+4095 52501 37054 17402 56489 9136 42500 26204 59305 2944 30853 52068
+20425 43232 5329 64817 27137 38334 9489 54094 17917 34032 46148 4627
+59367 24297 39195 14286 62885 29586 1890 51986 35270 14249 47367 26469
+64274 6438 39214 23108 50435 12958 30860 62532 7948 47410 28951 17086
+53318 36301 6640 64517 24197 47840 12825 41681 26433 60433 5993 32175
+52522 16124 44692 28514 8676 62225 37279 17134 49934 28262 6549 63070
+37734 13136 45802 22886 59230 2170 34091 52350 20098 43129 5408 54165
+21406 31696 56995 11605 45009 17772 30301 58722 4277 36013 51637 16315
+45462 28265 474 65333 37952 14829 31436 55605 7204 43467 23224 63540
+10904 31739 48514 19801 60518 6538 33995 46431 20988 55151 9438 40135
+27229 58894 4619 31024 54211 17905 46486 9391 31630 64080 15917 45538
+28651 4961 54071 38093 15417 30603 65447 7953 43667 22168 56086 4670
+33724 51173 14962 42554 25376 64461 4121 39935 22995 53536 12783 31961
+58139 8690 46350 27825 16403 38071 64923 4781 30273 51357 19999 41946
+724 58490 26642 46144 9364 32921 55546 14614 41456 24039 60200 6757
+40419 22711 53593 13427 35455 59783 5521 30251 47796 12614 55337 23621
+40245 7150 63315 22655 39413 11691 60005 20738 32888 47407 5551 62908
+23049 38787 12588 46780 25221 64622 4661 40775 24786 53853 8158 38575
+22221 58607 13006 48039 26729 40896 1827 55113 22119 40324 12348 61759
+25976 48386 2473 39768 22896 63376 12444 34261 53392 8732 44580 27326
+16349 64652 37628 4011 50908 27600 15369 55491 36329 5587 46515 26265
+59866 13172 41436 24557 54288 4385 39813 23679 64957 12275 38995 22611
+53176 1877 32302 46957 17208 55322 9479 40344 26421 63719 14901 34300
+47156 4401 61528 22474 41666 9494 56407 26943 41430 14059 52400 29227
+5601 60719 36608 13963 47978 24765 64172 1320 39401 21283 54064 11027
+38531 26884 64981 3352 38457 19532 55128 30084 8669 50359 35258 20808
+59990 3858 44500 28299 914 33756 62953 16481 47270 27860 4073 60195
+36447 17715 52334 10710 42901 26795 63701 7541 30339 53257 12188 40283
+23941 63086 1831 39873 21596 53195 11700 34362 64807 18033 44008 485
+35031 56439 17039 48732 7396 36726 54810 15127 28633 48772 6407 61338
+32671 19225 45475 9677 56982 20703 32105 44532 1847 55315 24712 40069
+5693 57172 21203 38743 14423 52839 29940 7207 58071 37534 18325 44622
+9738 59829 26872 38931 1870 52774 30690 13411 61094 35831 19606 49592
+2371 34088 55028 20987 42771 8090 57280 26097 39229 11171 51568 17175
+30848 57763 8597 44171 28311 14342 55357 36408 1292 44736 25478 62816
+13631 31825 44099 7325 57352 24456 39870 11092 54346 22819 39380 479
+63334 19159 47493 32550 9760 53710 36897 20164 58453 6268 43353 25375
+55436 11269 41090 22629 60288 4241 38960 21258 54743 9689 38382 27002
+60649 6293 32866 51669 20075 42429 10821 58997 27135 46839 5360 32262
+55804 13320 42405 24200 60125 5752 30600 46503 19415 65229 1108 31060
+52281 17922 42495 4009 59475 26244 39134 14800 51302 30003 1529 63732
+35615 17371 49990 8683 33182 62240 15123 44665 29365 709 60246 34981
+19222 50900 6842 34700 57866 19119 42691 10273 63692 23352 38716 4770
+50386 34720 17303 55837 10336 37864 49892 15546 30079 56554 2434 43605
+23489 61573 12902 39749 26343 48580 7016 56803 18012 34239 46680 10469
+58323 23922 38706 3530 54899 20982 38299 11011 59363 26465 45771 525
+37337 56509 15980 27533 50169 3740 37988 58772 14678 29121 44694 2161
+55896 21514 38645 11084 57515 22421 48325 2917 33794 59048 14334 46265
+27327 1130 56561 35054 15918 53508 27967 4404 49424 35886 15886 64498
+28620 10802 49821 36478 18016 61231 2826 33857 47869 20591 63991 9787
+40182 26126 54612 6841 32714 48429 20386 61016 11377 41455 25987 53138
+3256 39445 21732 59085 13414 34574 53800 5159 43819 27682 16389 57023
+38096 2302 31950 62757 17862 48801 11917 42372 25230 51162 6588 34306
+59400 20838 42788 1989 55991 34691 20352 46634 11091 58823 26077 40472
+2658 54786 25557 39534 11984 62837 23323 49008 7527 38621 21238 59047
+11894 43884 26566 55282 1733 34596 48999 19136 62115 6005 33924 47344
+18110 54731 11457 38430 22635 61329 5779 47730 28878 15705 51765 37476
+2121 65474 25655 47577 12142 38469 21216 57987 255 37604 49946 16286
+28619 63944 4305 44029 27518 16684 51627 36457 2236 57920 25876 45981
+10239 41135 17160 53157 29824 1325 59112 35414 17836 49659 8948 32571
+57192 15141 45399 34531 425 62350 24946 49079 7477 38373 21413 64229
+14692 47696 31092 4202 53328 35151 18369 60221 7826 32394 51643 16959
+45664 29194 138 60986 35716 21025 53682 9307 44300 19825 30797 58147
+11938 43313 22148 64418 1150 33675 52596 11771 45001 19612 36222 57132
+7024 31311 45995 19756 62071 9179 34637 44876 20847 57008 3232 38746
+22648 58689 6244 32187 53068 12134 44938 28782 16802 55351 37915 2924
+30736 64813 18995 46872 7612 32543 57543 16857 45666 29131 4948 55852
+34962 19002 46639 7348 60080 22661 42011 12400 56423 25456 48434 5441
+41569 17265 62213 31610 10427 53730 37566 18139 49236 14007 50689
+36593 8070 57167 23611 45101 12448 40878 21881 59232 1353 32932 50513
+14518 41967 22951 60380 3927 34030 51209 15882 44951 28451 7851 58497
+36458 19583 49713 5401 29870 60508 21267 45201 8973 31305 63329 20754
+44738 2240 33195 58940 16464 44016 27392 4930 53211 35392 15315 62307
+28082 7151 49763 36476 17650 63313 12023 43796 27279 60019 3922 34415
+46621 16275 51457 27402 2900 61853 34874 19952 48482 11456 57207 22332
+41595 5626 51738 29011 16168 63546 37794 9119 49199 27613 16116 59578
+36801 5182 49583 20925 33900 64965 2698 45573 35665 20282 61993 4617
+32756 47793 19613 58736 10823 39300 23271 53001 2308 30148 61697 17967
+46750 5069 33668 60075 14530 43534 25348 55845 4475 30223 45367 16342
+64782 27779 8525 50148 35150 17919 61092 1154 33305 52620 13930 42078
+25187 57652 2992 48808 22214 41389 12736 64661 26209 39028 968 53080
+17810 32936 64060 9681 43335 23234 52192 1833 34678 57827 16904 44012
+27545 7861 55292 37447 16232 50011 28605 9641 61006 35704 19831 54058
+6080 34785 46832 18730 57571 11552 40515 23563 47814 2792 54801 26344
+40692 11668 58469 21922 48253 4691 41539 26031 62915 13312 30525 48215
+1772 54763 25744 40904 11849 60037 20861 46918 29193 1037 64067 36466
+20956 46786 6240 60574 26094 39833 10222 52411 18724 36132 63482 786
+29975 51002 20354 40918 5682 65016 22372 40779 12169 48993 26990 61949
+5392 40795 21991 51760 13898 32057 63948 6980 44636 28458 16993 60961
+37326 8482 53626 23376 41973 12380 48155 26197 65329 7194 40431 25892
+54371 13327 30342 44202 5050 64137 29142 16839 50565 36655 7654 61694
+23946 42744 9890 57079 21519 40260 767 58905 25267 43674 8456 53167
+24569 39924 12749 59863 22873 45923 1370 34436 56233 15788 44523 29169
+5437 58077 35601 18506 49891 9665 32299 63056 17798 47119 726 38645
+25343 51796 14378 32304 65093 7091 48284 25337 41480 9850 53906 19460
+33090 61235 213 41837 18399 53544 29513 9818 61964 37780 16642 49995
+27980 5953 60386 37071 17852 52386 10145 34410 47360 17660 57187 960
+34496 45834 16977 61568 29153 3472 50050 36713 18165 60425 9206 41246
+26105 45523 12412 56292 22305 40611 2951 63127 26980 44976 8783 35430
+57459 16726 31261 54197 7071 42448 21874 56939 14118 33404 53255 5185
+43215 25109 62637 11357 33947 45720 19938 53765 7579 34474 56813 14234
+46167 29481 9029 64973 35465 19736 51164 6239 34080 56057 19680 42717
+10883 61519 26986 39591 3157 54768 22715 47149 11257 30262 60456 19692
+41937 9600 55448 26645 39249 5863 59214 18981 46022 28675 9596 55949
+37820 15339 49613 28256 3517 65395 36166 13731 48441 22576 57603 6375
+33751 46371 17116 62501 2255 39570 27074 54671 7924 35739 49720 16416
+29443 61878 3682 46801 27842 15308 60597 35265 734 50536 28392 15270
+54421 37985 5117 30842 60115 14563 49081 25342 41776 10380 64272 21900
+39795 940 49053 25718 58436 10053 40512 23106 51723 13110 34215 60351
+408 44178 28133 15282 52327 37802 11530 63088 25877 42763 2522 52647
+24508 38244 10482 63750 18229 34832 49394 1788 28303 57996 20044 43050
+7109 64786 29074 2530 53300 37795 16965 60821 27369 3405 50085 36901
+18662 55538 9917 43264 26340 65335 5123 31179 53796 19738 46611 10839
+35368 56697 20920 42479 3038 62512 27098 38869 11034 54077 17203 37245
+50389 4682 28644 58078 17876 42024 12782 53900 30449 8328 64136 36848
+20607 50961 186 42743 23279 59331 11414 40597 26756 54878 2442 38301
+21285 53488 9401 43460 22796 63658 13399 32528 54091 5943 44019 28080
+15194 64564 37960 503 31468 55149 13965 43635 24601 58504 3932 36751
+50363 14743 29727 62510 1051 43665 23552 54527 10672 30024 48062 17502
+58295 7840 40633 25005 54212 12433 49234 24321 41751 5994 64057 18474
+33642 50563 8566 43641 23264 56959 13296 30317 52239 7031 41608 22350
+62624 12131 34669 52899 1757 41159 23648 56871 11985 40087 21741 47822
+5737 63801 26604 39594 10179 51390 31184 15766 59625 35959 7466 47456
+24364 54339 11814 41516 24032 58375 6626 39705 22109 50476 13920 31597
+63041 8918 47075 28418 15253 61254 36084 3564 48249 23069 56912 12926
+33330 45003 2004 64642 23203 40395 14184 51813 29299 5122 62524 36365
+19778 50281 8311 31166 64464 18153 45131 6063 35360 52391 15688 31159
+57476 7881 45435 23874 41345 14842 61134 29461 6314 53937 36485 18092
+49510 8421 31559 58565 17110 41287 11255 51069 21340 31813 57439 3369
+42958 24707 50225 13961 34414 60011 8076 44250 28017 16311 53705 36635
+1449 60733 23429 45117 14525 33287 56336 3001 48337 25708 38582 11901
+57626 21606 49235 1816 31920 46454 15176 62980 29541 4717 50750 36486
+19282 59713 122 33199 46668 20537 61334 8327 35190 48613 19921 55597
+10609 40768 25637 59873 3039 39393 22106 51438 11996 33058 55462 14996
+44704 29648 6977 65449 35481 17256 48512 3744 55331 21646 38449 8106
+63305 25738 49124 12732 40312 22008 62459 2296 43055 25776 55038 7526
+40078 22189 57347 11278 43580 26718 61474 3895 39942 21321 54969 12595
+38740 22962 59871 4222 47989 28580 15355 50772 37879 7600 64454 27477
+13998 49373 36542 4364 56882 22771 45153 13656 32471 63592 3782 42235
+23841 53625 8961 30429 64690 19113 43974 11475 32828 56552 5746 42484
+24482 51844 13519 32047 64034 164 48483 24089 38776 7692 58948 25786
+49617 13061 39467 21865 49036 1264 64207 25977 39878 11478 48466 23016
+62010 2783 38910 26811 48522 10423 55931 21914 41161 1717 60691 28381
+15197 49366 37206 3288 62179 27812 16532 50111 37062 687 60427 28491
+15810 49454 36421 4861 64393 23765 43748 14188 50467 31076 7217 57865
+35757 17158 49425 5100 37847 65305 15761 33255 53056 2398 41237 25322
+51477 14020 34476 62909 1004 42394 22699 57625 10914 33146 51878 19208
+42773 5425 54536 26994 41031 10085 59481 18588 31969 51892 4696 42561
+23980 63359 10220 40553 21621 50827 13820 34367 58342 5826 42108 25436
+55182 12107 40908 22975 65290 7667 48575 26028 40946 11754 62469 21364
+47637 2493 30722 55715 14270 45469 28251 7862 61808 35236 17687 54439
+3410 37391 49445 16378 29846 62550 9675 41815 23448 58300 4307 32223
+47219 17633 59386 9413 39911 27268 54418 5972 44076 21515 60558 14062
+37787 50083 4995 29344 55889 16978 45490 27585 14693 63439 35105 9056
+54041 28314 16039 49287 35106 5661 61836 28058 15690 49273 36564 8434
+57741 24785 41491 791 52408 17900 30910 61139 8257 48078 24599 41179
+13057 56218 24015 43693 1388 64698 20077 32938 52694 10652 47196 24906
+39262 3093 60010 17976 47574 29218 10446 57415 36449 18437 49489 6057
+33906 64892 13651 47479 24527 41055 8202 59145 27013 38625 1082 56427
+19609 37466 49844 7798 30308 59014 18699 48200 10173 40863 23415 53327
+6616 33158 65402 18964 45789 10017 33621 55527 20312 41189 7192 60824
+34626 19808 51271 5759 32162 63414 14865 43957 28116 274 56272 38032
+16581 30999 60135 3501 42946 25233 55398 11523 38699 21202 64649 992
+35213 49877 16677 32118 57638 3811 42879 24880 50930 14864 33273 62124
+4711 45212 29207 16222 58712 37908 8322 30056 54554 19910 43500 412
+62804 21079 33934 44444 4656 61954 18618 35428 51161 2607 30470 60266
+16010 47356 28614 4154 54473 35479 20067 57281 264 42291 25287 51377
+11009 34047 63441 19922 42307 7100 51923 29895 15819 55630 35250 9150
+45702 24526 58907 395 34094 43923 17233 52521 10799 34340 60038 20875
+42337 2106 56128 24980 48727 10893 39115 21183 65171 179 34001 51437
+19810 45944 3705 34002 62714 13220 42581 24413 52674 1980 34095 65351
+19682 42323 7539 54010 34906 17549 62031 11798 32186 47585 4171 56588
+19368 31290 45674 11049 58139 25059 40117 7644 52787 19906 31332 64545
+10386 42537 23227 52258 6109 34544 62290 17056 43858 27338 8072 54280
+37644 16347 58348 27583 9913 49332 37824 17180 56774 4326 29825 52048
+15822 43822 28020 1779 62813 34947 17508 47446 7195 54943 37710 16332
+29031 63427 5646 48143 34967 19361 57814 2322 47310 26506 41579 13294
+61495 25926 41368 10732 47188 23404 52649 4796 32152 59408 17226 46864
+9101 36963 52511 16513 29609 64823 4709 44941 28694 15891 53170 35678
+9907 56458 24809 46209 1340 32914 62521 14369 45356 29989 9013 52992
+35440 20367 58223 1746 32717 45656 19551 55212 10433 39069 27063 60668
+531 35901 50318 16007 30909 58347 6068 44748 27811 15475 51642 37325
+1885 60672 22613 47904 14671 35950 53435 6765 28832 56863 19963 44127
+10436 33073 61722 18785 47719 4321 35989 53975 15976 30704 56551 9689
+45279 19695 36083 59650 5323 30711 52640 20141 42032 8015 64645 30697
+13011 50430 35952 19056 53116 6262 33946 58749 21102 42296 10812 54788
+22952 40915 7447 58266 24287 43504 12465 53869 22080 41703 1976 56438
+27217 38285 12145 62458 20639 37220 51037 858 28814 59653 20971 45710
+8759 29802 56212 12547 42695 22640 61106 4950 32114 53601 16224 45553
+28751 7009 63983 36775 14216 47261 24208 61798 1397 38386 22786 56002
+12341 35158 46720 20463 60529 6740 38511 23574 57559 381 32090 52076
+18528 43179 9624 61604 21774 38474 4191 51234 30706 16191 59070 35154
+1602 45825 24388 57288 9374 39333 22334 52329 16577 36636 59550 5064
+31301 50262 19437 43068 10579 65520 27035 38914 5884 52759 19581 34443
+56672 8480 45045 19382 35400 55090 1140 30281 48239 18919 65112 12674
+38669 26794 56238 564 41148 23297 52764 12410 32677 61752 6650 43933
+27297 30039 16650 58293 37956 313 47974 24357 61076 11796 42073 21462
+53532 2387 33249 64014 18700 45258 10247 33354 59817 15640 43945 34936
+6134 49556 22394 63799 2720 33012 45868 17751 58825 10019 38792 26471
+55248 6501 43748 22059 62429 11915 34214 52484 20930 44370 4237 37724
+62833 14361 30962 53175 1647 42395 22563 56084 14896 35252 50800 4259
+30985 61409 17681 42509 10694 52214 28925 14711 62818 36032 3349 46400
+26215 61011 14296 36902 49978 1566 29332 56985 12925 42541 23081 51609
+3249 31684 59189 14326 42176 25522 47638 2031 56844 18075 34702 46075
+8880 61569 29422 15466 52586 36153 6880 46624 22848 53538 14172 32796
+61013 5306 42497 25080 51450 14367 36937 59705 8901 29331 48089 18390
+60688 7720 40432 22680 55137 12848 48705 25453 41167 2576 65456 22889
+48850 13303 36867 56393 6944 30050 52101 14898 46529 27877 9615 55937
+37377 13821 44867 23485 65151 7736 40422 25252 45987 10782 52717 18203
+36664 60737 6524 29999 45365 15998 53962 28012 2515 59747 36649 18455
+47891 4654 58245 25835 41222 12241 48888 21993 63814 7770 32147 45579
+20162 55403 3522 38742 26948 61867 13524 38429 26685 53113 4351 34104
+59300 13982 42658 24630 53343 6787 31808 57168 16307 44598 28169 7843
+61412 37481 17053 49627 4866 29816 59886 15478 47401 28617 473 52233
+37789 20937 64691 9468 42041 23573 52930 2159 33097 63120 15198 47069
+28799 4535 50390 36884 18025 58609 289 32988 46820 15389 53627 29202
+3849 60616 35228 14375 50095 28532 1281 64025 35409 20566 52210 7433
+34147 47277 21289 64933 12952 34547 45792 6114 58682 21112 32366 44373
+11270 52405 20335 34048 60241 421 42375 24386 54414 11352 39399 23113
+62502 8912 39206 19053 56310 31188 5891 51213 35110 20387 60409 47
+34049 44949 20201 57166 10990 38694 22909 50383 1236 32778 60314 13190
+48081 24838 41672 2840 51260 18442 31218 64196 7984 44204 28045 16605
+57397 36892 5322 54503 24372 42455 10554 62130 30356 15081 51224 35464
+3379 65258 25900 43107 13160 54177 21380 40097 4828 62974 25418 46212
+14251 35675 54272 7053 31140 62236 19465 45925 10398 40609 25715 58517
+4112 46436 30486 16071 65330 36479 2374 52212 24942 44024 13993 33819
+61127 7364 48694 23235 41397 3282 63354 29017 13080 49752 35030 17430
+58871 472 45017 28725 15850 56875 37190 3725 46134 23420 63779 8824
+31881 44790 17413 52307 1565 33732 63401 14142 47504 26112 39513 3737
+59981 21244 38853 10553 63758 26379 41543 5724 52309 18722 32792 55577
+10164 43810 17923 35267 61938 3356 49573 17404 31977 46528 7296 58608
+25096 39694 11407 48747 21972 55753 2199 39319 26669 58916 8123 38861
+21137 52747 11356 43711 26694 64874 3229 31087 48204 17739 54795 8971
+41558 25741 48861 11919 64278 22971 40279 2383 54045 26938 43883 14018
+62720 28844 9066 53505 36634 18915 49730 6532 33500 64110 13606 44035
+27910 4089 53860 37839 13106 61149 23915 46418 1424 40072 21651 58846
+12586 48573 25354 40265 2249 63472 29399 15021 49997 36808 10859 60968
+24431 41640 7038 52057 23708 42618 11537 62401 22176 47391 8093 30450
+59803 16599 35782 47047 3758 50329 7205 51873 36098 20254 56113 10558
+45876 26693 39365 6504 58639 28891 16371 52595 36332 7834 48258 24141
+56539 3796 29650 46897 18961 61918 8781 40229 25207 49004 12530 54147
+22166 41758 3865 60751 31566 15297 51095 38016 567 28507 57003 18777
+48049 8088 31153 60774 16686 45926 27769 6730 51318 35162 19694 59897
+8621 43163 26045 64054 12177 39216 24209 54520 2679 47834 20117 33314
+55320 7291 42698 23616 58170 11623 39733 21641 52804 8694 34053 63079
+20354 47534 5293 40496 26010 62368 11447 40357 22244 54694 7651 38398
+27166 64379 12806 49189 24014 39731 3088 55550 23519 39684 12030 65126
+21465 38865 1851 55733 26640 46182 12066 39858 22801 62300 2870 43914
+21789 55512 13752 33626 46332 144 64285 25857 38971 5374 52450 18445
+32624 58166 9360 44762 17800 31968 61206 3963 45721 28175 16848 58080
+38007 1935 31452 63355 17974 49275 5400 31283 47657 20020 57700 1419
+35849 50048 14679 30157 63930 4483 41724 23427 50883 9224 34837 62109
+13116 46943 24465 40905 8023 65435 29122 16391 50292 36073 1411 53471
+29008 15600 59752 36049 6699 50354 25175 43147 10356 57178 22573 41695
+5812 64018 21443 40882 12617 50895 28825 8742 63122 37252 15424 49259
+27471 1186 59280 36169 20733 49209 10573 35046 56042 20484 44287 6234
+33881 57796 12491 44214 27443 16709 59402 35240 5211 51452 26590 43101
+12680 55954 24481 39682 7277 61363 19316 33808 53824 9210 41787 25120
+63419 12212 39484 22112 55470 7556 45790 24963 41701 10359 57170 18081
+32959 46063 5146 61579 29933 18465 44301 2672 59277 26520 40616 9598
+53450 19051 37090 57423 4145 28555 46622 18557 64746 8364 31540 45536
+16602 51154 28865 3474 59369 35232 15314 49257 28324 1768 54011 36654
+17430 65027 9476 47748 18689 36762 53256 6162 29424 63568 14740 42019
+23880 54597 7411 38913 21410 56903 10638 38317 22592 61059 6441 34526
+53774 20234 48506 11078 39129 22489 63456 2478 32459 51259 16179 46347
+28250 7400 58666 37380 18758 49685 5359 40015 22449 57520 9146 34397
+48494 12486 59851 22272 38322 2583 48990 25008 57692 9497 40625 17543
+51215 29737 1124 63523 36525 15299 53849 27481 7047 50022 37786 18191
+60313 11902 30235 54239 771 45879 28413 16897 57854 37184 11086 53608
+24269 43275 6568 61753 19389 36448 53375 8699 31337 48074 13862 60631
+24421 39699 5699 55641 18211 36042 50322 11381 29628 61228 18744 44218
+4587 32151 57349 17282 49178 9490 32759 54906 14975 43549 25246 58552
+2735 35436 49884 14932 30418 64740 6539 47850 21111 32318 57844 10748
+43836 19510 34292 48792 288 63784 17857 34100 44052 8757 60377 24144
+41002 12862 47876 22224 54913 4215 41651 25457 59746 9635 39906 21799
+51588 13473 33479 62835 2674 44149 29196 16402 55731 37925 5199 31583
+60087 18032 49204 8172 34613 46087 17671 56698 3298 40186 26606 59895
+14385 31341 51590 84 46138 27300 16798 62848 35281 8663 50701 27717
+16132 57477 35435 6449 53634 26452 42800 11145 60159 18957 37135 51228
+4990 28255 57369 19943 45748 2769 31519 63955 17415 39196 4210 54950
+32602 15019 50039 37591 1607 56646 24495 42362 13223 63597 28279 54724
+2146 42106 17623 65155 29613 4055 49812 36462 13451 62229 22958 46769
+1300 41077 26783 64429 11387 38798 21859 52778 14036 32344 58340 69
+44734 28103 16411 55945 38049 5652 30272 64968 19764 43358 9740 53425
+34597 21191 63413 4862 37854 49733 14797 28487 54718 2795 41550 24561
+65279 13398 36908 49309 745 28767 55579 18425 46511 6467 33241 58188
+14267 44070 27349 5448 62210 37039 16053 50641 27862 102 64225 35118
+17533 49440 4284 30692 57656 16382 43832 27616 9523 51497 35538 18821
+57578 672 32475 50272 18788 42782 4576 59894 20978 33472 46544 10327
+50905 17432 32864 58829 5020 47470 25683 41564 9879 63055 18933 33768
+48722 6319 54605 26780 38748 11676 59142 26440 43515 7251 50628 19519
+36190 57290 10746 29719 46988 20480 63505 1316 39970 25004 48558 11380
+54249 21983 40952 7999 60576 25413 48131 13003 38931 22248 54005 6808
+34225 61826 15423 44203 28307 8846 59677 37720 20481 53635 11793 42637
+26259 55923 821 39325 21897 58000 14618 32139 52829 3220 43196 23603
+57073 9390 39985 21745 63028 12770 33528 46806 3011 54935 23406 39644
+15001 61468 30255 782 49952 35269 14870 55154 25586 43689 2578 60582
+19195 35559 49841 5264 30511 55199 18852 42970 8536 64204 32072 17308
+51300 2221 30252 62878 21497 46907 9926 37617 55194 2740 30869 47045
+19842 63771 10243 38620 22484 49869 1114 33568 58878 13385 42789 22643
+50867 2577 31544 56905 17354 43148 4732 50921 30856 16351 65150 36496
+2019 47792 22067 60287 13267 38644 26311 52682 6874 37010 55296 15278
+31064 48826 11913 63626 22652 38770 972 50718 30760 12461 59115 35751
+15627 49593 27813 4787 61943 37557 13048 53447 24860 42343 7775 63767
+20197 37808 50158 12557 29950 57533 3898 44339 23989 39852 12019 61682
+21892 45619 1858 33504 58774 13559 43511 26623 52953 3459 33925 64604
+14961 46882 24453 40696 399 58187 17617 33599 51783 4748 43028 25604
+59809 13268 39652 22337 56169 849 43542 25943 61324 9636 31661 53419
+14141 43562 24776 63823 1442 30682 47128 18928 55521 6510 41359 27157
+65001 12367 38659 23807 48196 4487 59814 22218 40150 9445 55730 33705
+13816 44647 24988 57890 2915 31711 43859 20558 62769 10033 40434 25038
+51408 5687 35082 64488 15105 30135 49437 1841 41036 24085 56288 11920
+40140 22208 65183 3000 43348 26142 52807 12883 29839 62957 984 47343
+23808 39402 6949 56143 20791 34523 46326 8371 65038 25495 41522 169
+47900 23831 61827 7319 39951 21404 54190 11540 43127 26242 59229 1418
+34202 45529 14333 54240 27648 4361 62099 36419 20706 50662 13165 30526
+57012 3894 47933 29009 15503 65009 36378 6489 50918 28356 16583 61628
+37966 611 31664 56957 16579 45744 28195 7327 52979 37361 19035 61014
+8575 47462 26667 41738 12416 57088 22553 39767 1022 64787 26349 38772
+12035 53252 21807 43409 5194 63309 23544 41510 12574 54278 29090 6930
+56851 37528 20393 49471 3350 32651 62322 14099 47139 22336 38803 660
+64572 24060 43528 8996 55543 30898 15699 49729 37846 6663 59727 25186
+43420 10331 53071 19425 30530 62012 5776 45830 27826 16817 59107 34713
+8535 49464 20769 33535 29238 9741 59984 36725 14442 51521 23430 43474
+5811 56470 31053 15326 50956 35125 9060 60146 21166 42283 3247 48690
+26489 63197 7289 35142 43795 20009 60193 9590 33712 52175 14462 46540
+27362 1764 57958 36361 17318 50080 7042 30897 59798 16187 46266 34900
+10744 62183 22561 43334 5851 56167 29562 16997 52235 37851 9047 59679
+22415 44699 15309 30626 63207 1933 48796 27989 16685 38232 53049 7589
+31262 59672 20284 47301 9340 41796 25619 54647 13565 34605 64880 2206
+46677 29209 15137 60908 37210 6353 53714 24914 46175 10917 35916 63888
+15598 29749 54072 1341 42179 24738 57128 9371 39362 23141 60868 14031
+36463 51126 555 29979 58108 17435 47019 10485 41353 24797 64846 2209
+40497 21461 53298 14236 31075 62691 3336 44624 27410 15559 55678 37313
+8454 51530 28635 15252 61638 38127 4988 31220 55301 20285 49179 589
+40753 27047 64825 12051 43565 21511 50958 2384 32398 56692 16528 45307
+27528 3286 62660 34849 18768 49462 7620 34313 64376 18593 47928 10266
+40420 26564 61356 5888 32121 51494 14393 43733 26612 55856 5266 39552
+21275 60960 14101 31660 51541 7350 43682 24228 64995 10974 40143 21354
+51705 6970 33161 58310 16073 45653 28108 9985 61510 36962 17469 52476
+4033 40794 25800 58026 11214 34283 49853 19233 41896 5436 60515 29382
+15702 50847 36347 11921 61668 24514 42813 3977 54897 17463 36785 50940
+8810 29907 64453 16099 46429 28287 6413 62070 36737 19898 47426 11077
+59382 25974 41187 7287 55131 24356 40363 11480 48677 24306 63211 598
+40773 21557 57628 10409 47594 25563 40039 3438 60309 18493 31906 46785
+8767 55869 24393 40484 2471 61029 21524 46129 10121 32878 56781 19904
+44633 1193 35888 58555 15630 31682 52412 4975 45409 27420 16392 61253
+37513 7209 48268 26100 56156 10441 30304 47256 19161 62801 5709 39404
+22385 51007 12302 30419 55158 6878 42885 23387 62054 13416 31122 45530
+8790 60670 23084 40555 12160 55092 30980 6284 49738 36056 19916 63982
+11425 41304 23018 50327 3056 35294 59503 16832 32838 49953 7867 42188
+25046 61290 11693 38928 21349 52383 333 32981 56935 15975 45624 28150
+8638 62488 37560 18355 49852 4943 35183 64745 17568 48224 8135 34113
+55232 15343 46771 29539 3673 60538 36975 19203 52917 9054 42557 25998
+59522 13888 32273 52227 4738 47055 29069 16433 57690 35363 7136 49553
+20553 33329 59692 10032 42210 25060 53548 13578 36931 58873 2854 30503
+50702 18123 39303 11360 60560 23020 38243 9081 56680 27291 49195 4643
+33343 46420 19364 63189 12372 39250 23584 51379 7944 37695 56118 15048
+30761 46919 6446 60513 25431 38738 10540 55130 20150 31985 45335 1645
+58339 18406 30916 44572 8546 53356 28119 14665 64239 36596 4860 49775
+20594 31626 57675 1258 42865 24196 63720 13746 35702 50535 4018 30425
+55407 20057 45413 7033 32418 61520 15935 47720 29046 9565 58043 34806
+18563 50402 2632 32348 65015 15235 45118 28462 10256 53219 37412 17956
+56396 5630 41856 27004 51886 10392 30899 59140 14498 44773 27414 1968
+62990 35308 20675 51726 11817 41898 23259 58351 150 34820 50413 20530
+42755 9829 64711 25916 40302 3105 56980 18757 46573 5381 63253 25428
+45379 628 31548 57881 18542 41104 10856 61602 22665 38877 4592 54275
+27276 38281 10696 57453 25341 45092 13691 31879 55476 2333 47166 27359
+16830 61636 37474 5267 50428 28028 16167 64235 38183 10155 28668 45383
+19859 56386 1233 41047 25292 51928 8891 35717 58826 15306 31411 49798
+2282 41316 24642 64395 12728 33631 51175 4336 39638 23487 54157 9240
+34205 61230 12961 46104 24138 40522 3120 56204 18409 32585 61772 5032
+45300 28142 15588 51850 37485 8034 57059 24274 48086 13416 40030 21498
+62100 2540 39872 26222 58116 8625 48598 18142 36294 52171 6480 30443
+64483 18374 43231 3292 50141 20763 32583 56320 9127 43117 20182 61545
+29551 5629 52108 38048 15866 31572 56131 8269 48252 24654 40131 12073
+60419 28939 6461 50018 34928 16558 59347 27485 2027 49377 36841 18626
+63933 7582 44610 17082 31213 56504 10608 42425 24448 59338 5137 39730
+22821 52467 8258 34387 60489 12833 42995 23242 52071 4876 29803 58693
+14985 45519 28417 2257 56652 36287 17661 54262 11761 41905 25432 64841
+524 38447 22215 48803 11311 58649 26030 41845 1886 54014 22024 38592
+12238 59228 26321 47761 3359 30990 55687 13595 43023 24122 64506 1497
+40500 23314 50758 12184 32844 56711 19998 43629 362 65122 28693 14668
+51799 37416 8800 58369 23565 45144 1436 34194 48790 19210 57150 7593
+39052 27154 60827 11196 34253 45571 18776 57408 3399 41131 24953 55446
+13708 32872 45499 924 52512 29175 15213 61708 35659 3159 49732 18232
+34983 58807 8541 30239 53311 16158 44129 28124 5986 65532 35715 14134
+54040 23921 44855 5414 36397 51979 15169 29240 64282 11863 42603 23002
+54706 6859 35896 50276 14850 29788 62747 5961 47117 23959 40443 11631
+64347 18733 30557 54982 657 42506 23310 52440 13392 34401 60534 2964
+42195 24684 55595 14174 31611 45317 964 63911 24675 41476 14260 52388
+29826 3989 56043 36024 18840 50179 1912 29672 65425 14632 41712 25201
+52845 3550 32690 58524 17349 45049 8233 36898 53064 15684 29467 56326
+5650 41833 22901 63163 13885 31706 51265 3806 43728 24608 55001 14179
+36546 61781 7392 30500 51004 19835 42230 2062 53547 21023 29841 59495
+11524 46586 23709 39708 1421 61446 22265 39180 12266 48629 25888 57674
+6969 33885 45699 18375 63574 41 34184 45504 20834 61784 11228 41447
+23513 53693 2184 37861 64046 14467 28135 51794 5084 46523 19995 34833
+62088 9111 28899 46873 20433 63688 5922 42000 26710 54531 12638 48475
+20944 38555 2305 62048 25502 41676 9507 53380 17069 31695 57640 3112
+45053 29239 16862 65450 35467 1049 52497 22175 45405 13949 33098 63345
+2978 48618 25554 38937 11942 62190 22802 49654 3733 35042 46648 20119
+56371 11292 41660 26711 60661 6864 34742 48009 18126 54314 10589 38587
+22085 59294 6226 33118 46896 17247 60778 10890 39390 26704 51323 2069
+34991 56089 15070 43849 27659 6576 60247 37784 20660 49614 8217 34853
+60887 21237 43963 1699 34124 58588 20815 48267 12937 36745 61931 3053
+33177 47299 16751 53816 28648 7979 56936 37642 17258 47556 4845 64292
+26752 40603 13784 52321 29043 6456 60503 36724 12067 49759 29446 15351
+53581 37232 10153 32022 59414 17324 43171 7682 50367 20455 34336 55285
+2625 42474 24947 64570 14076 48965 21263 39846 854 59026 22105 49035
+8831 37484 65389 15273 29077 51151 3395 35052 57161 20088 44788 7875
+34836 49167 18093 59536 4384 32061 47954 20985 61856 11767 39181 26441
+54236 3756 42196 21974 61482 13580 46795 30323 7426 56739 36242 19944
+53371 11729 42036 26280 57359 1171 48361 29761 16199 65385 35808 7057
+50374 26537 39307 11926 53918 20218 31260 63608 969 44235 19912 32452
+60498 4169 43298 25904 55183 9376 32102 51795 14129 42306 23506 62967
+3942 32142 45094 20341 55909 11308 38720 27034 61802 7765 46440 28493
+15117 52884 36842 1630 57342 27669 16742 49644 36231 3721 63300 22188
+43336 15047 56996 32088 776 51573 36320 13867 65347 23624 45605 5533
+40626 20221 57469 29646 10926 50439 35809 20893 61285 3707 33992 48802
+19405 54644 9336 38510 27212 61665 14383 46569 28871 78 55764 38124
+16783 31680 63135 7263 42936 24620 51098 10900 31263 62180 20532 44621
+3948 31776 49082 18547 58126 9763 31681 45218 15557 63529 29762 6248
+50631 35241 18949 55951 4586 42931 27250 62898 15155 34623 51353 6325
+39504 22285 57619 9510 32679 51989 20033 42756 5883 62053 26354 39561
+9488 50277 30834 16328 55340 35423 3274 47943 25379 63299 10388 39477
+22087 52127 13815 31289 64932 5876 41998 23971 53054 25 48525 29304
+15566 62788 37943 6747 30590 48746 20559 64093 11636 40133 24659 56455
+6739 33041 51407 19920 42453 10592 62215 27145 46960 3761 34167 56924
+12499 42644 24286 51343 1665 33869 61888 17931 42354 10144 56305 23486
+47897 184 36648 59800 16518 29334 47386 3827 55702 25010 40149 10580
+59044 18749 30896 52029 3173 41554 22568 58306 9701 36606 49702 16998
+30481 65231 6579 44564 28246 16079 51830 36111 9398 58111 20764 33364
+48029 5336 60124 22232 39801 11458 48948 26378 62679 7921 32780 44394
+16676 57569 35045 5868 50819 21944 41970 11955 62191 26631 47887 97
+40636 23622 64946 11776 43614 21195 52209 2068 38369 27230 57069 9359
+40933 21507 60864 12779 32082 50038 5138 44953 27475 16818 64310 37154
+10298 54973 25691 44791 6418 34231 57377 13109 42836 25745 53151 8674
+33619 65493 17512 41992 2567 54522 31546 14589 50375 27464 9972 56716
+37240 17423 49546 5474 36705 58922 15595 31101 50992 8451 44690 29294
+16451 61012 38117 595 30675 54869 18249 42739 4350 57760 31854 16313
+51042 35124 1200 60067 24459 42783 11855 56031 22240 47811 6794 34587
+64374 20718 41380 11213 47589 25682 60832 5634 40612 23073 54639 12264
+39488 27076 59052 5389 43323 21308 53360 14934 33886 56751 7101 43860
+30324 19033 48852 9990 63068 25773 39321 1994 55467 22923 45461 13838
+30647 65153 2957 40766 25872 56287 12227 48366 24529 40614 334 53851
+21233 33574 64362 9246 44895 20001 31096 62172 4289 48274 17490 35988
+53474 825 29457 56580 17657 46689 9392 31191 64148 17095 45464 4827
+30143 55293 15554 44174 28257 8629 65339 37141 18924 51183 3469 33616
+45432 20947 60925 9762 34130 54092 18707 46485 3847 34468 57969 16688
+45073 28236 1183 56114 35448 19475 50301 65468 3330 39771 23173 54519
+11897 38580 27197 62916 6759 30404 51459 17858 41354 9768 56248 27025
+47447 5495 33787 60036 13177 41581 24164 54336 6646 33125 46403 18560
+60410 11827 39061 26617 62809 431 32452 52602 13182 42621 24494 57257
+5676 33446 45199 14566 65043 29096 8662 51017 35136 16786 60025 27957
+253 50569 37684 17727 63667 5153 31767 46084 17497 60648 9833 40926
+25237 52616 14017 32158 59510 2116 42492 24403 57350 10352 46286 34902
+17357 49059 6762 58842 27103 41172 12312 50742 19154 36556 65234 317
+29299 47830 19140 58641 7880 34635 47709 13295 53367 24395 40598 1144
+59375 29961 16091 51465 37750 6066 65202 24595 44908 13572 31732 60354
+8045 46354 28155 13302 54203 38008 6119 28962 61886 12245 47779 24193
+40833 3059 58937 17584 31562 53576 9085 42933 24161 59953 1179 30549
+46279 17990 55654 11658 39781 26327 64280 2560 47508 17597 35847 51628
+6275 31456 65322 19275 47671 11192 40620 22462 53364 1673 35210 59307
+17269 46688 6094 37576 52617 15486 28474 61236 7453 42379 24673 52152
+2883 36277 57200 16861 28367 44929 8635 61757 24931 39520 12016 48707
+21828 54800 116 41493 27061 60318 11732 47617 17812 30631 63501 2264
+47067 27678 16496 58477 36228 3833 53251 22996 43061 11399 61839 26530
+39518 6825 56591 18861 32056 46091 4110 55707 24672 40429 12702 60148
+21487 38538 8185 55776 22959 43710 10079 59051 26117 40275 2187 51792
+17164 35905 57562 4315 28589 45021 13764 60004 23085 39715 1475 54406
+25747 38520 13599 64509 21583 48395 7174 31823 60808 19507 41500 11595
+56864 26941 38524 4594 51255 18741 31230 62503 7550 44238 28043 13436
+52915 36653 20152 64824 1592 34471 49937 13207 43608 24985 61135 7626
+31521 54491 14659 45000 27319 1961 53048 36267 14610 59555 27400 4223
+49600 37424 18621 61922 7848 44501 28631 16908 57379 36735 2701 45988
+24359 54856 12739 39094 21701 60286 1135 30245 48015 13655 56003 25701
+38420 7167 59744 17679 31347 48985 4550 55808 26306 38713 13304 59086
+23317 48289 6307 33122 64145 15928 45867 28095 1294 54549 37539 15065
+59583 33437 3344 51832 22327 43939 13532 31348 63256 602 48994 29089
+15867 59983 36433 4751 49945 21189 31266 56820 10373 44434 20099 33394
+63168 6312 43120 20004 60070 29252 3875 52979 34901 19103 46331 10216
+64881 25366 41670 3243 54407 22108 43564 13677 58678 28252 9276 52348
+37564 12944 48177 24211 65226 7832 40836 22271 53737 12871 40560 26932
+62567 5432 39258 17447 52881 30208 401 58996 36255 18129 49351 9323
+32276 56773 19977 42199 1993 48276 25952 62630 9453 39254 22892 51766
+12522 31584 64535 12 45733 27391 16262 61082 37146 4962 53885 29515
+15774 49603 37197 7797 59970 20332 34156 51199 5801 43291 17844 62589
+31512 9172 50678 36214 18891 58757 4913 31358 47896 17908 55201 11582
+40219 26119 59100 7352 33374 51313 19812 43114 11372 62920 26295 40446
+6215 54289 19547 35088 48849 11116 60514 22968 40347 456 48631 26549
+58551 10026 41849 24362 53280 13099 29990 59374 1363 44521 25171 39789
+10703 63479 19947 32702 48794 7415 61491 22557 40913 11880 48154 25873
+8239 33640 58832 13334 43590 23789 53033 1505 40218 21540 60301 13672
+33062 46000 3321 62318 24210 39215 11045 51326 17646 31018 63856 1640
+44256 28712 15745 56791 36662 4086 51596 23852 42584 10756 55093 21893
+39587 8367 63543 29964 16052 50450 37105 1936 55823 27791 15833 49426
+37597 3387 57144 23508 45002 11176 32252 48440 20882 58449 8094 40118
+26833 54525 2750 38458 21359 62505 5824 34018 50732 17958 40164 8551
+64463 21040 33065 52347 3611 40860 24449 63015 11489 38881 22583 53008
+5351 33431 55700 17636 45059 10151 34889 62363 20822 43929 2659 30779
+55362 17503 42556 9921 63707 34792 21088 49564 4161 34081 55738 12678
+41828 22250 58965 4800 36517 50208 16980 30405 63996 2151 43863 23569
+51249 15432 34661 57641 7181 43363 22249 52185 11653 33536 64457 19351
+47291 5031 33006 62217 13336 42142 23037 53486 4196 38395 27158 58753
+13696 38324 21863 55966 8555 43613 25421 57616 3868 36716 50087 15652
+29657 60846 8453 42532 25414 56152 12539 39121 22541 64598 872 34228
+46971 19025 55244 9275 38253 22590 62614 13460 47911 31606 1346 53126
+37409 17737 59427 5006 32527 46043 14627 63829 23907 38276 8198 53811
+22781 44669 5445 37699 55650 14748 28936 45066 8014 61212 24749 39859
+12929 54310 21836 45856 733 33643 59794 15783 44282 28394 8981 53398
+37453 17427 63583 1611 46899 26684 41690 14544 51536 31449 3625 61394
+36015 18328 50213 10757 43744 27120 65244 7879 33746 53394 16280 47408
+30397 6097 63097 36511 20308 52041 9823 42250 26680 58220 4917 37216
+50114 15218 28917 55109 2754 43133 24525 64089 9422 33714 47376 14354
+58491 24363 40416 4226 48954 22641 56430 9261 29675 45253 16643 61894
+27851 6148 53002 37949 16334 28783 64022 4649 47605 28000 16853 57588
+38005 8365 31102 63298 16761 46166 28174 228 55294 38059 15513 31291
+64708 9065 47417 27942 15094 51912 36373 6575 64107 23155 47044 11102
+32681 53613 18467 42860 3215 61601 20985 32853 45204 7982 54311 24370
+41951 10911 46982 21396 62610 2950 40281 26375 54023 10148 43060 22406
+58117 13541 30874 50593 5585 44311 27352 16972 61141 37776 9705 54537
+24496 47022 6029 40243 22637 62079 9950 31487 45901 17969 52395 3475
+34662 59401 16295 46910 27780 915 54963 38186 16097 33302 48927 9315
+62522 24438 40747 1317 55365 21502 39311 11807 60620 26785 38868 5819
+50693 19539 33200 62790 1758 45170 27651 15965 57152 37967 4010 30215
+48914 17696 61058 2546 33345 46291 21050 56948 8517 33144 50822 20105
+42804 13248 64040 28818 4199 51650 37363 15232 61340 28066 8131 50744
+35778 18083 58143 2681 46358 26205 40879 14630 56052 30027 6611 50412
+35690 20678 58883 12514 43281 26236 52768 856 32364 56676 10888 42257
+25069 61065 14058 37213 49799 2275 28910 55450 17044 42809 7943 63085
+20810 37113 52938 1338 29328 46651 14185 65427 22585 39400 3467 55473
+30555 15012 50177 36678 1923 61486 23812 44158 14078 32547 56355 3925
+43111 24498 62898 13904 39036 21754 54560 5485 32597 46477 19400 63961
+8263 36366 50576 16150 30914 56222 2687 44296 27626 16493 54772 38130
+5680 31175 57107 18380 46216 30197 52261 5149 41399 25739 62000 14597
+34435 48731 6151 57351 26364 38368 11865 53276 18896 36800 58545 6026
+28995 46380 19348 52645 7680 34498 59218 18989 45552 9352 32598 61939
+13868 41450 25269 58442 2977 47314 19379 35768 53165 6778 28416 60739
+19448 44718 9871 32340 62986 18664 48097 8177 34057 61969 17108 41700
+4571 52285 19386 36113 64665 13082 29848 47681 8803 55663 23952 41798
+12415 58990 22698 46847 454 37670 54166 12802 30250 56658 18531 46901
+9625 33505 61104 1796 42030 25454 57778 13065 39547 26789 52208 3726
+32855 59523 12692 46217 21319 34146 58014 6249 49022 19404 31730 44866
+8913 53729 18910 30683 62536 55 46777 28439 15978 52272 37867 8656
+58336 24995 41195 11580 55941 21456 38866 4570 63035 29811 16983 49802
+35450 337 56195 26432 43794 9739 37756 52773 16526 28597 58254 7315
+48208 24903 40858 10059 63269 23541 49265 912 40202 26784 53384 10240
+32000 62832 14070 42186 24643 51370 2036 33554 63664 18067 45727 5160
+33159 54098 14558 44172 30099 8400 60336 25409 48646 3577 41885 25117
+56269 10103 40233 20013 65418 29742 7365 50156 35669 19971 57998 10707
+34196 48098 2908 56445 25864 41128 10686 65072 18808 35619 50556 1052
+31702 56856 15726 46979 28538 6250 63059 37953 14908 30019 49089 10844
+65383 24890 40056 2766 50611 20969 32953 59253 9866 43870 19524 36472
+54404 5800 29474 57081 13537 42707 24798 62356 565 38436 21423 54831
+12863 41768 25045 60679 2545 40810 22356 48637 11083 56197 17690 31112
+46735 324 62702 20563 34417 45948 9528 51854 19167 35492 59974 6391
+30357 45946 19084 54076 1010 41830 26503 63520 12040 38784 21336 60339
+2752 32851 51601 12836 42445 23725 58870 507 39316 21809 50903 9324
+34727 59956 13555 43217 25307 55254 2504 41064 22961 50575 10015 31009
+60347 13663 47819 24425 41409 4978 53763 18451 33116 60875 2072 44758
+29115 16067 57031 36002 5310 45709 24679 63247 10023 39980 23188 55381
+13119 34783 48220 1509 64561 22381 38288 14414 56280 31104 8374 50388
+36759 17541 61270 750 34096 47249 20907 59838 8100 33707 46082 16290
+53773 29178 2320 64430 35383 19513 49547 11203 33325 58010 20534 42452
+1693 55618 23518 40370 12954 64006 28970 7952 50487 36035 12867 61688
+24586 44703 6609 29993 57869 12148 47052 28590 16919 51605 35578 4669
+57417 23288 45387 14276 36206 61714 7357 29773 53790 17936 44151 12337
+31744 64441 6679 49550 25445 38945 10922 52860 18948 30260 59167 4900
+44047 28711 15959 60478 36941 1588 53490 22806 45623 10468 34023 57661
+19406 44388 5941 34201 49220 20849 63412 8946 38377 27273 53019 4722
+35016 60259 18792 46126 11535 31994 65324 3431 41626 22574 51020 9591
+34429 62780 16625 44871 29235 3809 52936 35498 18574 64697 9840 45516
+21122 32944 59878 4455 42038 25576 50653 10738 34400 57490 19109 44352
+5703 32235 60294 12077 47336 28296 16914 58107 35239 9640 47573 25724
+59695 5187 38712 21387 54992 12714 30421 50511 6748 35116 61280 17468
+48362 2450 40544 27043 57328 14579 32370 45929 6583 62328 28310 15397
+51145 35708 9306 61089 24113 47563 389 35486 64134 15988 49233 21748
+59703 2415 32689 45996 18020 54815 10363 41947 22413 64906 187 43715
+23950 50466 14014 32124 63137 2580 42364 22955 54415 11726 39045 26677
+64363 1029 49254 22074 43079 5729 53596 34293 15319 65197 27998 8993
+49459 37636 17065 56235 719 36191 46690 21495 58229 5238 30515 43793
+20785 54809 1752 38711 27140 59346 12010 43654 22868 51519 888 34470
+60270 17005 45078 28460 3824 52435 36140 15710 61897 28234 7697 49290
+35484 20788 64041 3361 42116 26116 51134 11928 31254 60111 17952 43575
+7456 50508 21177 30091 56522 9532 42757 18048 64532 29389 1490 50889
+36870 15586 62917 28375 3160 54959 36610 17181 49870 10125 34707 60483
+14277 43946 27482 6590 64283 35103 20145 50776 1349 42874 26998 53520
+13540 34260 60201 7590 46901 23837 40675 13126 59531 22505 47877 3221
+34297 63687 13984 45183 31918 2080 55434 21362 44513 12386 32554 59773
+17729 43226 6143 50613 21005 29545 58621 3167 45286 20434 31228 54792
+7701 43451 24412 59807 11482 30904 48753 20977 57552 2475 39898 26444
+63977 11175 38508 22130 50852 13722 32178 58812 4281 44842 27386 16113
+53738 37912 1610 62337 25078 42297 13745 51672 19060 35800 57407 4290
+29866 46851 13156 60502 24398 40011 7431 52259 19467 32856 59131 3156
+43304 24503 52750 5592 33126 56764 18341 47603 8028 36752 62414 14770
+29674 53151 4357 47910 27629 16683 64767 35457 7388 48063 22174 52955
+11896 39844 27028 59339 5174 48111 32310 15334 52199 36074 8383 63857
+26435 44678 3551 34412 59842 15721 44064 27515 7623 54508 38203 16316
+29812 65090 2147 43648 24091 55395 10556 38759 21481 58035 14850 35839
+50227 4693 30291 54817 13825 46628 25427 40665 7226 65442 35201 17454
+53606 11781 42003 26184 56049 3715 40085 23629 62737 12262 38593 21372
+52040 6604 33916 65073 18751 43182 3750 54889 26933 38521 11854 57225
+24075 48763 7434 41437 21121 62863 12385 40823 26426 55019 562 48244
+17614 36524 58121 5927 29637 46325 18070 60545 9428 40487 27049 51566
+4728 32928 62286 16377 45598 27559 6687 52928 35509 19424 65291 11154
+40771 26434 56094 4232 35026 52365 13818 43931 27566 7467 59170 37675
+15194 51320 28607 4485 62966 35102 14285 47321 26129 54413 5516 32540
+44213 15211 58717 23747 40550 4250 52194 18972 32174 64533 2070 43995
+27315 14653 53780 37693 9865 63936 24755 48128 275 40761 21798 56487
+11125 33841 47335 3419 59847 24870 40206 14150 55643 22022 47070 772
+35882 63500 14803 32512 47083 7103 52257 27593 12152 63024 38237 15261
+29333 55424 3464 41196 25334 65079 14113 31205 47338 934 55387 24941
+42156 10501 47596 22633 62138 13423 32742 44071 1573 52280 28014 16490
+56475 38028 8026 29112 48373 20030 59175 5499 39109 26390 48850 11916
+56120 22507 40330 646 57981 26905 39087 12500 51969 18530 31641 61689
+2878 47195 27963 16501 63494 37735 8587 51428 25695 43371 225 54793
+21819 39346 7683 64609 23199 49263 11626 40862 26799 48762 1093 63804
+18803 33755 44741 7962 56708 24854 39016 12009 48908 23013 65059 806
+34919 43835 13605 55238 24967 40778 4042 59216 21486 43570 10377 54467
+26528 41308 12715 7245 47157 26369 40238 11635 63678 25179 39350 4671
+56247 27192 38729 13093 51785 30401 7855 55888 35413 19968 49523 5268
+30754 61471 14195 48013 24346 40489 8577 57884 21234 38289 12214 47738
+24245 55578 2510 40220 19858 61190 29690 11110 50932 34726 17797 63941
+6515 32975 52752 17289 45252 10633 34774 64914 21219 48976 5732 39671
+26541 54116 13910 31552 63478 7177 48307 22871 39867 12629 56838 26127
+43550 5088 59458 17493 36733 51332 9068 29327 58270 16248 45591 27590
+5920 53407 36827 20104 65076 781 32219 46318 17101 61480 4684 38808
+26887 47487 11004 54971 22004 39933 7332 59676 24041 48166 12209 41218
+22647 53456 5085 31876 57643 20449 45066 2482 37081 54086 15323 30785
+61676 10259 45866 19151 31931 56876 3653 44270 27751 15590 64990 36869
+6738 50942 30613 20385 57465 5656 43909 28249 15945 60708 36798 9025
+48992 26099 65103 4069 39068 19631 52841 30759 8137 62492 35931 18237
+49511 10723 34235 57809 17537 41656 256 52226 20375 34715 62289 9793
+44972 17486 36594 53130 6959 31170 56789 17846 42890 467 52561 34804
+15251 62067 28180 8031 49490 36711 18893 59861 12387 31357 46890 5571
+55161 24735 41687 8966 64175 28359 16258 49913 36766 2453 62506 22298
+41838 11933 55439 26792 39242 9255 61643 22253 46142 13995 35092 58427
+1793 43100 23010 51200 11326 33710 59607 18349 45486 879 33548 56066
+14355 42213 25991 60401 2801 32372 46119 17721 56147 9992 38811 22399
+60881 1374 30975 46652 19014 55129 9231 39126 22787 57856 12899 48452
+29032 5259 61140 36441 20222 48085 11899 57488 26670 40823 7795 47802
+22461 63111 5427 32223 45634 19751 61512 10228 40940 20909 57597 34619
+1358 49660 19308 31843 59723 5344 46304 19108 32586 49019 9160 60801
+32490 18665 46231 1091 55711 27082 39991 8212 58305 25611 38602 12434
+48294 22377 61883 818 40094 26367 59942 10297 38641 21616 52112 3697
+33438 58708 19202 44747 9389 34061 64346 13457 48968 24769 40813 2719
+56900 20709 33709 53265 11000 42485 18553 58604 29401 3483 50204 37836
+12904 56933 24872 43636 1983 51474 18650 31699 62684 9141 46466 28587
+16923 60767 36009 154 49340 27435 16780 56718 37872 8607 45670 24366
+58297 11028 38833 21360 65134 497 47785 29869 12224 53655 37318 21083
+61098 7895 37019 49776 16495 29572 58329 5384 44407 34480 19715 60001
+8174 43007 27249 52446 15147 36788 59001 6392 28938 51364 19179 42501
+9911 61521 27110 39539 6019 49074 24709 58168 9978 39017 19291 50419
+30345 3798 57249 35963 20883 49361 8976 32131 58696 18806 48866 6394
+39285 26925 61550 12722 38562 21344 59353 3197 36407 53619 15452 28807
+47279 7123 63860 23834 40827 10531 58032 18670 32818 53671 1773 43009
+23024 63671 13343 33549 52410 8235 45698 29568 16446 64184 37046 5228
+54012 23737 45007 8960 37291 56421 14907 30837 52755 4855 42093 23895
+59413 10687 39887 23383 56839 13801 33498 52611 3176 46476 28934 16672
+61855 35903 9026 53540 24027 42164 13488 59247 29936 4083 50995 36288
+17970 60384 8911 29645 53871 20508 47026 6112 31336 58105 17745 48660
+11351 38632 27162 62844 3043 38360 21107 56724 60948 22328 48970 1324
+31011 53890 18443 43800 9653 60451 20251 32502 47010 3939 62541 27529
+15292 37887 58759 8938 45551 27496 16477 55382 37945 2000 30102 60207
+18057 49500 4667 39627 27215 62346 13372 33366 51870 7696 42765 23763
+57455 3850 40868 22374 47604 12699 60251 26501 40269 3127 55213 18774
+47028 28920 8751 61265 35325 17720 49924 4207 33757 58284 15864 44712
+29117 2399 52007 35074 11079 63220 20198 30875 50287 1226 42672 23350
+54777 13971 37234 61980 2822 30465 49939 13437 42214 24849 56014 6627
+34255 48611 20561 59110 12025 40851 25760 51725 3434 32298 63613 14165
+46584 25475 39190 624 61381 17669 29754 47442 7918 65489 24390 40146
+12081 48292 23826 58069 4313 40190 22934 51523 7823 29403 60807 12785
+47646 34801 20700 55401 1684 45391 18617 33789 61525 10165 49388 17610
+33577 45892 499 56034 23844 40340 9982 47120 22043 57487 14629 34593
+46230 1380 53696 27977 15474 60161 37757 4466 47676 25043 64940 12955
+38596 26678 55209 3428 43150 19665 59068 29521 5309 50234 35057 21076
+64777 10276 45246 19882 31271 57461 6448 46406 20940 31167 55366 2587
+42734 23913 63391 11429 38819 21552 50240 648 34181 58723 20722 41412
+11137 54489 26048 45488 7945 33547 58322 18204 48453 203 36314 51248
+16140 29114 64428 4662 44081 27771 16497 56180 38041 6479 28840 63841
+20127 42867 10487 53931 27005 38552 4955 62962 21918 47459 11406 40428
+26316 52590 7037 33257 64426 13955 43025 24473 56945 5937 33690 50856
+14481 42063 24097 64840 1132 31396 53132 14836 46215 28409 3961 62166
+37289 14677 53662 28349 706 49956 37255 14009 59411 25131 43210 3054
+51954 17946 31821 55307 8219 42988 24662 62050 11185 39742 22311 57146
+2341 30036 53822 15365 44495 28144 6237 63619 35238 17295 51177 10700
+43604 24283 62995 2972 40144 21368 52349 14897 33359 56457 6157 43015
+23795 50811 14584 35656 63566 8465 29977 49944 20807 42820 1676 54103
+28676 16699 61359 36189 8807 49681 28233 15683 65064 36243 319 49272
+20803 34112 63011 9067 44266 27821 15814 60854 38040 6911 29012 48971
+12441 58206 23960 40776 5447 55267 21830 43493 12927 64654 30841 6161
+50349 36165 19147 61026 2416 33449 53150 14907 42242 24530 51250 6981
+34237 59975 18332 45458 3390 31469 55560 10742 42906 22882 63121 13365
+31677 48506 2716 54728 25481 38828 12164 65004 23762 48904 1430 40492
+21984 62454 13239 33031 45986 2891 54524 25688 38312 13238 65485 21391
+43729 2093 54751 26859 40930 11368 62666 17651 32253 52563 205 44303
+27512 13813 64319 37459 10146 46390 23967 56519 5181 41432 17767 51181
+29861 9704 57435 37812 20357 49790 453 34111 58582 14503 44195 27455
+4542 50674 37276 14109 60446 24604 47077 6704 39756 24441 62104 2511
+39280 21854 56743 11468 35097 49379 16268 29184 60609 1167 44177 27468
+12506 64920 35588 20139 49359 2522 31037 62739 18813 45270 7019 31454
+60685 15987 44018 27437 5870 56388 37727 20716 50209 2561 37629 63278
+15353 28520 47115 10244 55237 19937 31274 43960 3339 61653 35640 13286
+51424 25742 42650 1642 64692 34600 19582 53658 8448 48256 26140 39952
+13072 55616 38132 14657 33299 65280 8558 42967 23500 52528 2779 34325
+57083 12063 44882 28475 16667 54235 38081 773 32382 63368 12800 43632
+23023 52644 7276 33529 64600 19860 42374 10664 48383 26047 56572 308
+31486 46430 16674 63690 27666 10142 50350 36742 18078 58625 1378 35347
+49874 14516 29700 62504 11310 42091 24410 56704 2 40975 25684 54650
+11803 40445 21801 65529 7748 43455 24941 55379 13112 41414 22397 58018
+5718 39608 26781 48938 10656 63826 19852 33115 44372 7379 54247 20821
+34555 59636 9993 44483 18515 35893 64200 2300 30416 53090 18269 44316
+8950 34453 57629 17363 43033 5930 55827 20636 34027 48955 10435 59099
+19712 33859 43808 1813 53003 29103 16768 63302 36557 9645 49726 20316
+34671 62431 744 42347 24349 54142 8485 38793 27084 63421 12163 48599
+25066 39849 4508 55099 23229 39122 8659 62698 31135 15154 50716 35159
+2907 61378 24816 44017 12659 33011 63935 6434 43466 22057 51828 11391
+32232 56301 18116 44569 5949 33129 61428 15305 47510 27843 8907 51613
+37555 16225 60128 28159 1919 49589 37021 15882 53428 28658 3864 62704
+36282 17174 49885 9386 33683 60765 14079 43538 25299 52660 4547 30609
+56117 18712 43153 6606 61960 30305 14611 49497 35100 4994 64850 23863
+46328 12430 40829 21795 60728 6521 32588 53724 20244 46881 12460 40335
+25861 60325 3374 35452 49786 15488 32332 57916 7700 47536 24239 40663
+13352 58887 21024 49015 1855 36571 58039 15649 29710 50652 4566 41351
+23238 61803 12716 30280 54395 3492 35058 46526 19544 58216 9964 33943
+44220 20748 59558 6905 39810 26017 51922 10906 32126 64254 20542 42249
+8319 56621 28902 15838 49768 36893 6782 63780 22768 46963 14408 29714
+52149 4341 34758 64546 13728 42716 23637 51526 8483 34294 60156 19265
+47370 4740 41824 26583 53884 14164 31322 57971 5572 43019 23431 50409
+9770 31192 65331 13641 45172 28875 2496 54136 37294 16356 59245 27510
+5217 52425 38173 14706 31788 59614 7235 43387 23656 51692 4034 32066
+55426 13887 41827 25135 59668 7234 30611 52396 19856 46069 3706 32620
+54939 13781 42079 23510 64785 1190 34941 47875 16348 53164 29837 3741
+38128 58742 16101 29091 47105 8296 54863 24031 40613 12636 62511 21526
+48492 3794 30510 56178 13479 41071 24011 63806 8438 37819 50332 15571
+29163 57133 974 34682 46646 18925 60942 9733 33607 45099 17498 56370
+5610 32442 44823 16131 57872 28146 7510 50201 36755 19758 60523 10737
+47795 23083 40805 4765 57618 31310 16087 50089 35957 6382 58860 24582
+45468 8661 34747 60717 19731 42292 4162 54883 30617 16317 51540 34541
+1871 62578 23640 45165 13562 33380 60833 5649 44977 27603 16658 64827
+36918 8386 51826 20643 31044 62891 12185 45890 33929 3553 54836 19611
+32433 58218 9368 43218 22865 51335 13774 31722 61185 4248 43300 25053
+53533 8462 34247 57766 15609 46342 28882 6167 55100 36717 17245 51695
+9358 34219 57564 14217 41704 24131 51360 1504 32582 65224 12949 45315
+30767 17961 52487 7233 34259 58462 21080 45015 40 33949 64294 13757
+49063 24566 40178 7752 59623 22084 39371 12113 53207 23329 45794 4926
+32574 62201 15276 44733 28708 6183 16974 47007 28006 4265 58131 36121
+15824 50228 28364 10510 64149 37498 20974 48653 5089 61086 25697 40331
+10750 51589 20343 30487 58977 3771 47204 25270 39334 11911 57779 21602
+38651 5165 53640 34954 13715 61036 23140 43856 6034 30729 55031 14487
+48075 28961 8696 64536 37480 19891 52598 4013 34016 46455 19445 60951
+7604 35700 49672 16251 29769 59610 5442 46939 28205 16982 53431 38014
+1536 31507 61572 18398 48263 8835 33190 60364 17214 44973 3158 36078
+57775 15418 29852 51074 178 46395 28088 16590 61299 37703 5093 48254
+22517 54631 12710 40314 26309 60598 1065 49319 22636 40371 12841 64855
+26227 39783 2909 53247 17011 30882 57237 8570 45263 27476 14871 60160
+38039 3147 30426 56348 11842 46422 18543 30428 58936 5804 41936 22373
+51205 14344 32709 57946 2465 44197 20039 32767 64629 11346 43255 19726
+51894 29201 7148 58954 37278 18397 48764 5040 54997 37898 16278 29246
+58691 9475 48423 23174 39672 2313 63089 26252 49243 12346 39032 22495
+53271 1032 31865 64423 13618 42749 24371 54825 5828 41320 22279 63221
+8964 39537 26278 48615 12283 58677 22401 39103 1205 54081 27221 38269
+7286 65289 17527 47127 35083 9819 51277 27723 15626 57944 37385 3045
+51827 27867 16508 54844 37902 1483 30658 57155 17642 48782 9524 40641
+25641 63312 2169 30903 54392 9506 48377 22259 39965 13593 60957 28136
+437 53440 36269 19031 45301 4001 65486 23439 39147 10947 54568 24549
+43396 8633 63544 18225 34246 53754 130 45754 27665 16298 52461 37487
+7983 63395 27961 16560 50135 37311 1660 55744 23058 43478 13159 60530
+29654 5710 49615 36396 17726 54423 2454 32924 62382 13410 41764 24796
+52865 80 33796 60612 17827 43245 10760 50471 20609 31490 59234 1680
+41931 25821 54638 12168 38850 22604 64316 373 33403 48605 19796 59391
+8729 32957 46524 16466 53072 29354 1386 60575 37455 16889 49326 27417
+7559 62354 38219 12556 30959 48420 20462 56297 3290 30163 46071 21125
+63925 10295 39473 26273 57535 12473 43927 22210 51295 2585 33605 63759
+17418 42575 10779 56710 21215 34939 48159 5902 59631 18254 32962 45811
+8599 56253 22860 39492 12058 61756 25504 44860 1559 37040 63636 14703
+30040 51579 5257 43486 22877 57925 9647 34745 45089 15953 58938 28529
+1925 52545 35530 19637 46998 11441 62443 26070 41082 7472 53617 25837
+39753 3565 48931 22033 63591 12572 39252 26287 52279 4198 31181 63162
+14816 44608 29198 458 53511 35858 17199 64234 8589 48552 26218 40109
+12070 61719 21826 43414 1533 56008 30433 16863 49883 37152 10714 63927
+22913 47170 6102 41553 26247 58205 10647 40308 19601 50812 28780 2657
+55873 37093 20055 49455 6618 33736 60102 15134 44639 28074 1391 52766
+37571 17911 61915 8923 37942 49830 15689 28860 46687 100 65052 28166
+17010 54755 35922 10982 50016 22014 42060 1984 61788 25756 39979 11931
+48448 22914 63813 554 29383 46694 19933 61240 4641 38618 26995 55169
+10627 40103 21576 57396 3767 34331 48044 19750 62157 8559 40040 26176
+56284 11499 39369 21934 52508 4502 31929 60917 15066 46197 29394 2052
+54516 37028 17532 58458 10029 41453 26474 51951 483 31873 60549 7345
+40983 23359 62479 11800 40848 21653 55270 1100 31870 47535 17635 58411
+7432 30271 44136 14475 56232 29161 2437 50055 37000 18175 65484 9473
+42563 27179 51581 1516 33080 60555 16257 45248 28685 7898 52120 36970
+18183 63148 2088 34173 45234 21109 57992 4768 39387 27027 54201 10180
+42443 22686 57857 12971 31224 51293 2554 42745 22984 62921 13725 37399
+50595 3609 30482 64194 12085 45324 28117 16172 57016 36910 4825 46030
+26038 53344 11745 40712 21721 65301 6869 43522 23302 52962 12497 33630
+57361 8584 43969 27331 14802 62560 38145 6220 31171 46595 18815 58085
+10020 38605 27287 48322 4885 61771 20917 34493 45444 10930 51547 20839
+37661 62652 4524 31491 47272 13499 54690 24461 40958 7069 48825 22488
+65129 13241 32740 47565 3436 55800 24690 39871 10508 60366 18107 48891
+29003 5797 53417 36322 17414 57183 1619 46267 20955 34076 60589 9812
+44981 19847 33601 65466 630 43002 25712 53188 13972 33227 57720 5651
+45182 18771 32155 60595 9457 43172 26250 56405 4393 38630 21713 50676
+10600 31604 60806 13404 43778 23546 56907 3255 33470 46322 18555 54998
+8469 41621 26150 59502 12750 40559 23007 52246 2153 32113 60152 20264
+44898 6110 31832 63766 19727 47868 8350 41813 25169 59528 13120 38948
+22761 62353 5740 38778 26917 52028 13050 35263 56139 19654 42305 5253
+64128 29452 16964 51307 38001 8563 30846 62247 15233 48134 28737 6883
+53294 35986 16929 61088 27959 5422 49401 35650 20256 59421 10992 42428
+25280 50495 6652 32410 60282 13367 42987 24701 54572 4883 34516 46985
+14259 65356 25396 39493 3259 52891 19924 33196 58670 9411 45139 19207
+30152 48630 6313 60109 18497 29833 45816 9896 56328 24483 39568 3329
+61773 27183 38298 9077 55906 17281 35877 49927 5861 29374 57056 15629
+44814 35011 10872 62013 24077 41949 3432 55142 26607 38733 10519 56586
+18609 35277 51570 5805 29364 57623 15356 46425 28297 0 64795 37009
+17783 50320 8615 34775 59933 17157 42655 1266 54353 27185 38384 6586
+61930 18849 35164 50025 9686 40830 23494 59049 871 31761 52906 20295
+42470 11544 63372 26705 39958 2691 51023 34639 19157 57680 5688 47697
+20832 31962 54608 9135 45928 27555 16600 60435 37954 698 29558 54538
+19173 47240 5900 33106 65406 17296 42919 9320 54942 27152 38834 5155
+58532 21146 38333 10233 55482 23397 43488 14458 60421 29411 1903 49855
+37467 18702 58875 8530 41166 26446 55522 12193 40135 24276 56967 5822
+32626 45831 19915 60237 3141 38412 27208 52770 13720 34316 62884 7236
+46098 27571 15126 54169 32683 1042 59285 36840 20431 49929 12975 35696
+62282 7489 31760 52154 18090 43308 9952 63117 21265 31412 47009 4260
+55063 24541 40158 10989 58330 20836 47253 29248 5115 53980 35610 20069
+59422 7592 37765 51847 14821 32180 45903 3294 63203 26497 38622 13118
+55548 21273 43652 5535 58671 31672 16694 50801 37758 7830 44648 24703
+56984 13273 41058 22690 50685 6036 30972 63414 12243 44780 28079 16055
+53909 37978 2869 31568 59093 18509 46705 6339 34469 63002 16192 44485
+27823 9099 51836 35552 16427 64480 28211 3748 49242 35188 20402 63292
+11409 42627 25239 54056 49846 15036 29363 56941 3712 35560 51571 13950
+42222 24408 63025 9412 33310 45920 19819 61611 4822 33770 52267 15860
+44094 27487 7096 56902 35244 17369 47419 11449 62143 23418 40332 4142
+55166 25256 39533 11334 56991 19893 48780 29747 7417 60203 37157 18522
+51160 12402 43443 25897 63387 955 34694 47352 18088 61553 8041 39034
+26822 55383 10921 32684 46259 18466 58914 8640 41818 26603 54681 597
+43684 21668 60578 9683 32516 47755 18778 62212 2033 38374 27124 56090
+13675 37791 49231 3589 29799 63446 16922 45585 35264 1719 56244 27805
+16721 51400 35337 3843 61080 24071 45568 14523 35852 54135 7173 29279
+59270 17408 43867 226 30179 55985 16375 43790 27345 8304 63899 36402
+16932 50748 27987 1240 56950 37926 16868 28872 61292 8870 45140 28565
+15685 54628 37956 132 31669 62140 20626 47551 8876 40317 26769 64228
+12671 40175 23445 50870 3481 30583 56890 13255 47098 23613 40987 7403
+62334 21428 38919 11114 48899 26907 54766 1605 40508 23646 63625 11576
+48515 19292 32669 59468 7917 41987 25573 54355 13 38802 21301 61535
+14520 36787 50915 6332 29716 64252 20355 45054 4824 33220 62121 15736
+46241 29148 8791 55582 36924 15078 50547 28425 331 60714 37993 16859
+31543 48854 4414 55839 26366 41728 10421 49125 21560 61176 3554 33936
+45278 17765 58169 11571 33136 50397 1244 43727 22532 59855 12446 41226
+25400 56342 3055 40201 22038 50630 13144 33935 57508 1654 44142 30388
+16765 64275 37290 3652 51975 28210 16917 57479 36284 2334 48071 23331
+62744 11983 38958 21975 57669 7273 31455 51514 18592 43173 11295 61365
+25805 39604 1227 49279 22262 64659 13183 34008 43934 5051 58327 21019
+36274 49911 6635 30087 53772 19221 42299 12358 65248 25137 48051 3904
+40619 21506 62619 13440 36612 52183 2461 29653 47682 19107 57824 7625
+34638 44319 13282 64618 23925 41691 3803 46697 22700 60897 8001 35192
+44529 19807 55455 11713 41102 25036 61362 4603 32333 52974 20096 46753
+9776 32520 58901 14443 42543 24587 52716 3231 31689 65376 14681 46310
+27790 8634 51058 37326 14097 61405 30180 4833 46642 23785 54026 14294
+31150 60949 7980 44346 28104 15500 62864 37804 3103 52357 23630 43273
+11261 64253 21436 39347 8096 49090 26042 59416 11774 40448 22545 51052
+3172 33884 62065 13932 42109 24173 48687 85 64794 26897 40418 6567
+52923 18914 31617 54892 10734 42311 22969 61958 5224 33270 51026 18421
+46409 2281 34159 61138 18130 49141 7520 41079 24943 55529 12435 42369
+21292 49054 4538 57204 29670 16591 38229 51728 9623 28771 65082 17656
+46113 4906 30778 54082 18817 43006 2357 58939 26814 38465 13471 56721
+28699 714 50542 36027 19504 65445 12915 43904 32279 7162 60851 37053
+15219 50280 27738 2652 64123 37955 16702 30578 56414 10091 48699 23722
+39840 6168 60028 21707 48006 8758 35312 52132 15263 29863 62572 3657
+42700 21787 53197 11670 30653 64568 2291 47392 18233 32825 59971 9460
+43266 24217 54805 860 40381 21992 61537 9556 49218 25087 42308 14497
+52954 28705 1255 57101 37499 20196 47288 5426 58959 23586 40729 14139
+55240 29685 8091 50140 37163 18330 59592 2191 36698 61258 9777 33615
+45269 17038 65014 27584 5677 53081 36537 18257 48570 1883 59732 26762
+41645 10688 55442 20865 35038 46026 76 63887 20514 32130 44994 5624
+52758 19508 32202 58435 9427 44562 17266 31276 62585 569 44291 28468
+14928 52493 35741 3526 65252 22924 45694 9537 32834 54962 14203 40262
+24908 59186 4996 32153 52969 19877 42976 1928 64847 26377 39135 6563
+53716 22554 38278 11286 62441 18113 36185 50173 3944 30225 53828 13875
+43410 24019 58813 5867 35261 49872 16604 28568 60012 9227 41535 24521
+55283 13073 33484 47348 7571 64317 25357 39231 11247 48969 21438 57302
+2115 32942 44588 20103 64621 9831 34872 52710 21419 47824 6550 34503
+60559 14587 45542 28061 2572 55158 38155 15366 31743 59869 6147 46834
+27645 14670 51502 37374 4124 63180 22116 47914 12946 39232 26837 58004
+4790 36089 51128 15101 29987 59365 6788 44398 27890 16572 54256 37611
+6087 60822 27656 16664 50199 35490 3020 55914 24078 42975 14489 61215
+29683 6960 52021 38011 15171 29094 56837 2492 43078 23738 51913 13846
+33772 65006 7184 47374 23936 41622 11207 56315 17356 32890 47942 923
+57687 24902 38916 13021 54675 21852 49094 3397 41124 24873 65105 11944
+40239 22844 57401 7029 40155 21482 52782 11639 33923 64503 18656 44826
+916 32478 58626 15578 48133 29084 6179 53350 37545 21021 64679 9780
+41761 26046 54126 4716 38906 23957 61830 9997 48789 18207 36924 63183
+7496 28854 52059 15110 46657 27389 8944 56565 38174 14721 29948 47461
+5951 61751 25867 38994 9603 51492 18066 31910 56527 535 45837 27601
+15706 63973 38126 3679 30712 55249 14315 43701 23891 57107 8079 35193
+47193 17520 63013 1894 31733 45334 17173 55585 11353 41020 26144 58949
+875 39008 22614 51488 14616 32663 60367 6662 43421 24118 54882 9914
+39745 21938 63586 14507 32002 53401 746 47975 28386 16835 58605 35794
+10882 49871 30796 18346 63144 1781 42942 26269 51088 9971 34345 57322
+15729 44925 28081 2355 62725 36630 17784 48286 5620 55152 22919 38736
+12128 60131 26514 41433 5274 53956 18176 32989 57726 1812 44243 27497
+15677 64337 37383 9976 50627 21816 40875 258 56989 35078 18136 49873
+9400 33765 59291 13293 40835 25326 55412 4622 32696 46592 18570 56678
+1448 38710 27261 60702 13242 43765 21765 52797 4514 32675 57402 15872
+45822 30107 8606 59769 37315 20851 49429 12930 34487 64422 1118 45915
+27751 16612 58177 37623 11120 52864 23252 41375 9148 65269 29885 15900
+51328 35346 742 62120 25798 46561 11570 39162 22387 63321 2573 45316
+34959 20065 57800 6287 34943 44651 21334 55613 8646 39312 23407 63490
+11652 49029 24696 41895 6351 53881 17350 37620 59637 8089 29004 47608
+17515 57005 1761 30325 51648 21162 41052 11811 55127 23405 39480 8534
+62178 26167 43677 936 58503 18767 33656 50734 10796 43461 25491 65277
+1461 40864 24657 56543 14120 34328 45898 7285 55634 23748 40320 13626
+58598 22073 38391 3981 51859 29561 13462 64388 35411 18301 47017 4697
+55743 27242 38425 12721 62507 30708 6923 50434 35586 18558 65174 11124
+42883 26593 52706 738 34245 61437 13063 43022 24407 56569 4792 29927
+47388 19892 41381 25599 58952 322 31272 49481 13558 34466 57845 8343
+42491 24979 54198 13186 38888 23130 63294 3903 30833 48132 14662 53037
+28452 8429 60110 37191 15713 49914 27846 2921 64456 37440 20885 48311
+8066 54396 25658 41254 12146 59529 24100 40358 6498 56536 17639 34982
+50098 2776 30727 61222 18601 43844 6667 50991 29426 15673 56484 36992
+9332 47499 23529 58422 14963 33847 51539 4458 42844 25466 56304 12555
+40259 24330 63697 7686 39482 21909 55191 11978 42573 25774 64808 886
+33044 51729 18846 43085 4779 61967 29398 15740 50688 36887 432 54397
+23194 42244 14049 62851 29884 8194 50720 37078 17113 56626 4755 31924
+46460 13314 62273 24773 39793 4113 57115 19897 30294 52032 7745 43377
+23682 64466 12222 41627 21512 53323 2809 33519 58802 16773 44005 30458
+7727 56515 25122 49505 11053 41574 21635 63789 2040 34515 52579 18611
+47327 11162 33588 63390 997 44360 29671 14713 52929 37175 8412 64680
+25449 40738 11768 48574 22170 58384 4047 33074 46360 18308 64164 9169
+33671 46176 18219 60449 5450 30553 44472 15951 53259 27981 3063 59621
+35737 19450 51735 9808 41864 22019 63538 6207 32511 46627 17438 60634
+9478 39079 26658 56394 2016 34286 51575 14238 42553 26417 62784 2953
+46698 28900 15966 56534 37387 7368 53518 25136 42564 10808 63124 24318
+40408 2075 50887 17166 30186 57672 12916 45087 28947 8215 55973 35670
+17263 52356 621 31990 44955 21207 54482 5603 35892 60547 17139 31193
+48636 1057 65207 23639 41750 11231 55032 20231 33851 46504 4551 60394
+23955 40128 13597 50941 29684 6023 59718 36051 18899 50501 9938 42147
+27209 53509 4615 31945 59995 20175 42384 10516 50619 21306 33507 60930
+4166 47206 18256 32594 63910 7404 44200 25674 55000 10119 38687 21225
+56629 1754 35722 49999 16217 30535 59796 4836 45791 25007 39271 8811
+62262 30273 15221 50763 37651 2858 56047 23528 45563 9346 33943 58033
+13873 42095 22704 63648 6004 31123 52205 20612 41977 8189 56105 26312
+39379 11736 64153 25530 43361 488 51147 19614 33478 55872 10229 44821
+30390 20833 60494 7087 48736 34658 19012 52614 3975 32799 58157 13989
+43200 24989 65116 7167 31131 51956 20176 42510 2081 61908 30538 15157
+50129 35676 7322 63457 24026 41702 11323 53478 21064 38303 6251 62516
+26646 48355 10630 39515 18837 63907 28385 2626 50046 34824 17473 56601
+5730 44488 30366 14650 60652 35829 7778 53647 24689 45126 2651 30616
+57457 14429 44400 27945 4329 59103 37700 17977 50444 6721 33878 59641
+20935 41472 8384 54349 25605 48716 11041 31601 60187 18243 46661 142
+32343 61661 15307 45609 29217 3953 57714 35394 14441 45937 24010 64276
+4636 32909 44766 19763 52656 10318 34011 61235 19652 45424 6607 33840
+63503 18077 48465 4578 41580 22354 52140 12456 34565 54727 17094 41344
+5286 60417 27022 38314 13279 54125 21120 43862 4760 59681 29456 16766
+50193 37578 280 62244 25918 43573 10207 50180 19302 36392 57755 7122
+31753 45492 20645 59350 10324 41680 25951 54079 2241 40816 21503 57795
+13406 37205 49370 3140 29266 59731 20954 41313 9809 50837 18576 31685
+63781 6578 46292 17260 31978 54835 8802 62841 10286 32860 46814 15364
+55453 23870 40192 3083 64199 20180 33809 47413 6440 57258 18117 33100
+44313 11294 61150 25123 40337 2205 57438 20753 34209 45989 10039 56266
+18371 33055 43937 6283 61385 27923 15296 51432 38072 2186 32593 63792
+19783 43592 10948 53771 25743 41019 8933 57404 24480 39212 11374 62476
+23294 39182 387 48926 21249 60442 12176 31922 44944 2895 63938 24416
+38796 10676 48991 21256 59588 1618 33855 46280 16916 51987 29538 3348
+61180 36547 18265 47215 7551 55820 26540 39046 11606 59192 21612 46451
+7002 32728 57120 19666 43213 10218 60158 27207 38583 2841 55523 25234
+47123 11628 29715 61503 19494 42612 1453 54335 29894 14983 49865 37259
+9006 62841 18148 34627 47357 547 57531 25062 39803 8737 61760 26476
+39791 11166 49057 22432 65270 1512 34510 46465 17853 60914 5406 32971
+45855 14352 54806 25170 41583 7792 60086 22030 39796 12186 58088 25055
+47476 5045 32157 56728 15525 46074 28581 293 61555 37074 19542 52651
+8162 41722 26830 54219 13104 40591 23300 57532 1117 48214 34976 19759
+63007 9200 37551 50008 15191 31083 61877 5063 43650 25990 54370 11949
+40246 24394 59237 4127 34298 52941 19991 44393 10478 32236 61207 19094
+48819 6582 38800 23410 59828 10552 34984 49909 14212 30665 61610 4093
+40966 22599 51636 12519 31041 59394 20482 46099 7360 33346 62185 20266
+48487 2655 39223 26853 64974 11366 29806 47003 19236 61197 3826 39611
+26229 51246 12839 37355 59399 6978 28457 45273 13866 57017 25129 40106
+2885 51957 17073 29910 62940 10916 42719 25514 56267 7797 33790 47564
+20986 64955 2390 39716 25238 48157 12126 56268 21658 39855 347 62730
+29527 14862 51914 37199 7954 57267 23817 42122 12090 54237 23705 39868
+3037 61489 19670 31798 45801 11428 65012 24877 40411 7420 52492 18969
+32616 56444 12011 43362 22286 51945 4051 32414 60071 16991 43956 27982
+6714 65514 37707 15570 53815 28319 4261 49680 35778 18059 54877 1066
+33839 61533 14253 42616 22490 51806 3633 33139 57060 14878 44757 27973
+8062 61928 37662 15563 50197 27637 2465 62876 38190 15411 30725 47043
+8573 55378 25229 38680 12120 60179 23193 46563 3246 29330 55189 15798
+48596 27484 6001 57984 37681 20679 53977 10013 43151 26336 59533 3148
+34157 47488 14783 54664 23272 40820 959 58817 29566 16156 50865 36440
+7602 54698 25258 42647 10509 59006 19951 37383 50044 4418 28831 62305
+20066 42112 10031 52065 34363 18830 64095 6028 46548 20910 36444 53688
+9564 29144 61481 20135 44385 1350 32575 56294 14813 43972 27745 3599
+63768 37709 13271 52597 24588 41366 7841 53938 22408 40378 12194 60998
+26172 38947 1206 48372 21623 56432 12482 40004 23482 62934 3318 36391
+49504 14685 28720 58129 358 41962 24743 55430 11200 38432 27237 64869
+2809 46684 19214 30257 61623 9304 42760 24238 57621 2117 39595 22682
+51433 12414 32538 64083 8107 46496 28086 16051 54347 34803 5712 60189
+24476 42251 13025 53580 28167 1583 63010 36543 17392 49837 5504 32505
+60252 14206 43645 22845 53432 7601 33954 63246 17640 45838 8707 32774
+56748 15024 45434 28402 4115 57871 37538 20667 53359 2354 43351 23050
+58197 24951 39378 5865 51251 19030 35517 59438 9143 29097 53115 14952
+44902 27829 974 62405 35973 19509 50486 7831 37790 54754 16462 29277
+44440 4920 65149 28408 15324 51925 36006 1181 46546 23180 57374 9618
+31581 45149 16714 58572 27760 5120 50506 35353 18003 62108 1414 33274
+47073 19961 55428 4266 33560 45707 13886 65028 25757 41609 7453 53893
+24507 40766 13005 57387 22212 46323 4921 35215 62860 14619 29664 54302
+7046 44609 27733 14537 58381 34890 9994 44567 20731 52654 31203 2378
+63314 35343 16027 49629 28291 4043 53030 36321 13233 65423 23618 47745
+5540 40938 21927 52681 13643 34741 58419 6344 41231 23449 52128 10431
+33774 64943 20780 45954 3627 33124 59737 21235 41532 10136 51296 30236
+16177 55904 36047 5511 49770 19742 31841 57529 7126 44272 19256 31577
+55057 8432 41844 24150 58514 12052 39080 22501 62037 3789 31484 50385
+15400 45823 28051 2190 54586 36790 18036 62629 7490 44055 20695 31983
+47766 12114 56245 17401 33465 44770 2653 62515 24334 38607 6152 59325
+17241 31164 51632 11929 42436 25512 55207 2215 39375 26696 58212 11055
+38637 22902 51254 1510 34206 64408 18550 48352 12571 39834 23517 57582
+592 33877 46391 14767 64070 29052 3913 54060 36464 16358 50787 28091
+1405 57345 36754 19370 49465 8852 35000 65228 18514 44813 64 37398
+54304 15045 28578 56564 4539 42314 23358 53201 14504 33309 58196 6795
+42274 22790 53000 10303 33255 63915 18800 43376 2129 55088 32183 16973
+50538 35090 8382 63352 20665 32950 45808 5705 58640 18596 32839 44971
+1445 54708 17127 31138 44062 10438 60718 28842 14792 51434 37277 5379
+59065 23273 45833 13441 34279 54861 6269 44227 27834 16562 64826 34721
+2087 49427 28945 16352 58624 37292 8370 49779 27568 16461 57323 37420
+4140 49423 28688 14722 60918 36732 1222 46956 24087 64269 9784 41294
+21429 55384 13535 46368 29387 423 51699 36245 19345 61764 8565 46324
+26774 39077 12404 60606 23591 49196 6902 30283 46365 18122 64993 10463
+29891 46245 18053 60055 4701 32358 48226 20966 58834 6381 31553 45639
+20178 56760 11818 39496 26863 63689 1110 48907 21065 41586 6436 52427
+34807 18552 62308 8520 44631 37894 12384 30049 64062 19277 46183 424
+34938 51324 12274 29878 64939 16809 45108 28606 6891 55943 35218 12682
+46225 23724 63019 4815 41376 21916 60298 13589 36010 51354 1710 29858
+64757 12087 45494 27382 15383 55720 37362 318 47754 25497 60141 12086
+39200 22353 51611 2113 33913 56878 17337 47806 10457 34660 64849 16288
+47287 29325 5510 53391 36248 15921 58760 28806 6873 50137 36036 19380
+65354 2988 31383 48736 20274 54592 9761 40772 26942 59988 5478 36127
+50807 16194 29125 54931 9158 43175 22843 60550 5903 34573 52786 20192
+43263 7884 59508 25810 40586 12837 49080 21822 56127 6305 32345 45547
+18343 53031 9893 33468 62084 17047 44426 27547 3529 57327 37121 20474
+51022 11047 43347 22419 65505 3009 37842 49268 16136 30949 53342 8424
+42476 22510 56255 11834 39278 26451 64885 129 32409 50360 14809 44879
+27870 4650 60744 36692 19691 53880 1655 36171 49663 15938 30546 64818
+7666 47620 25801 40114 12507 14303 35970 61699 1408 29611 49716 13793
+43333 24267 65417 5243 37160 49804 16824 31211 59980 9477 42263 23411
+56452 4189 33886 48656 13767 58980 25387 40965 7331 55055 24405 39900
+13396 62484 21494 48586 3596 34052 54614 13029 42887 23813 64778 7227
+37899 49337 12548 29887 59073 20967 42321 8399 52359 29815 16569 58250
+35851 5110 50227 28293 15805 55994 38043 1074 30025 61028 16516 48248
+27781 8854 51144 37120 16141 61751 30845 119 49975 37103 19635 64519
+5168 46793 29306 14969 56763 36707 8441 51185 22478 43518 12001 61248
+25973 39919 1651 56618 18030 35140 50284 8746 30444 63172 18052 45402
+774 31400 61006 16155 44331 27405 7480 57738 37594 18516 50606 12373
+31605 54715 3137 43162 22762 63579 13368 32603 44952 1152 60428 27922
+16095 53607 36595 4463 47505 26109 62442 14126 33447 44510 400 52052
+19987 33759 56482 9919 43356 19125 65338 29860 6406 52180 35020 20194
+48168 10832 59907 26665 39658 3710 49801 22136 65065 6881 38773 27148
+48768 10614 55790 19011 33248 45742 3854 61116 22688 40003 8351 48839
+24536 65535 12994 41673 21376 56059 5475 31871 45260 15091 58830 30094
+6964 44207 26490 53895 11062 30766 60411 18313 48202 7901 39828 25072
+58383 9270 48408 21510 41312 12756 62695 26004 43124 4734 52535 17062
+31612 58487 10287 41794 19349 50721 31747 6115 63409 36362 19719 49476
+10090 43521 25664 60622 1387 37415 49761 15937 31030 57080 5142 46517
+23447 38873 11392 60210 29432 15431 53036 37643 219 48378 26158 61257
+12882 41405 24840 52559 9325 29530 63708 20663 47901 4100 35009 55646
+16955 44688 27350 8739 64372 35407 18881 49980 2969 30490 61547 15568
+46489 27323 9069 56210 36475 19027 50760 4890 33102 63357 14959 44939
+29991 168 54016 35059 12967 62151 23206 43010 6737 50849 29282 16656
+57482 35065 8134 49889 26518 39470 5720 62481 18420 32292 48021 7534
+59127 25368 39625 11430 56390 21518 48616 3393 32161 59088 14899 44245
+27509 2197 53898 36427 20546 58275 8605 35122 49951 20157 39811 783
+54663 25791 41876 9559 64636 17399 35007 52830 4505 42055 23697 55173
+9667 38426 22307 60834 14484 32536 47519 1626 55999 20799 33269 47379
+4758 58868 17436 31398 52626 9208 42527 24603 57409 5358 39050 22097
+49001 10504 61738 25841 41779 3018 51411 19557 33084 56230 11754 42104
+26345 47616 7028 57310 18755 34310 43920 3621 61105 18347 33638 51582
+9663 45998 17899 32945 58243 7095 43066 25843 62955 13928 31502 45692
+3907 53253 25679 39243 7676 57724 23315 49005 10313 40661 26254 61859
+1792 44589 20957 33952 55305 10387 44080 17895 33910 59527 6680 43427
+22595 52867 11003 32589 61909 19137 47176 1929 40648 25848 64707 10012
+30441 51120 15898 45281 28243 1379 56281 37905 15144 31221 63855 3936
+47474 28194 16468 61252 36545 578 50006 28897 15476 55500 37997 5375
+30329 63420 14905 48365 28695 1867 53455 35572 16443 56810 29124 6800
+50096 35292 14075 62721 24758 46187 3615 33961 57405 18049 42962 9444
+51706 29614 16319 59105 37523 6715 51189 24367 43325 11491 62420 26359
+39628 9033 52336 19724 34761 59439 4543 41821 22036 52109 38790 26487
+56548 11789 41943 21912 52176 4032 32240 57570 12673 42059 22361 54691
+1981 37012 51355 14341 29730 62830 11060 46912 24423 38558 656 63553
+21356 47963 11832 34191 53181 5760 43307 26000 57874 10246 40594 19146
+60866 29574 212 50875 35848 15846 56889 27596 3881 49974 36669 14535
+61879 27623 1998 49304 37282 12832 59728 22876 46171 9176 34821 64223
+20122 45543 6743 33974 55016 21007 42341 2645 56976 25302 41028 11671
+59425 22037 40700 7977 54150 25608 40474 11725 60757 24861 39962 1128
+58715 19247 35681 52268 6625 31421 46722 19334 63782 9758 41668 25492
+55304 3595 40050 21196 59494 14295 33539 51620 4687 47717 28794 15302
+55121 35616 1715 64108 27773 16627 49390 37179 6397 59066 27915 15746
+52263 37154 9108 47703 23979 64798 11746 41919 21845 56203 3010 37408
+50510 16308 29914 64263 6673 46522 28213 14405 53473 36508 4719 59080
+27334 16390 49572 37875 1235 63493 27713 15973 53854 37853 9212 31237
+49097 14246 59169 24782 42412 804 53316 22910 41213 12280 63850 26864
+38723 7081 53779 18304 35243 60280 417 30316 46637 16613 52430 28334
+8888 63173 36734 19826 49561 2420 34520 62460 20979 45647 5833 40476
+26080 52530 1905 32567 64904 16634 44558 28728 5763 59269 36220 20260
+54055 8521 33514 45990 21118 63828 2755 38765 26325 48304 12365 55765
+25404 41284 2211 59683 17451 34617 51578 13520 30141 64478 7306 44910
+28072 13420 52495 35584 17859 62189 4040 48230 26742 40369 7509 64583
+21268 39105 10213 54210 22333 38860 4286 57394 33632 17313 50072 7187
+32560 59246 14021 45774 28015 736 61170 38074 15749 31549 54466 4805
+43359 24127 57742 12828 33722 52662 1112 42742 24534 62436 10128 40313
+23146 48148 13545 56521 28508 5809 50131 37760 18629 59602 9362 46641
+20525 33804 63906 3325 41328 22251 52196 13968 32697 60839 2447 42785
+25462 56273 12276 40399 23367 52031 1697 31516 64547 16162 44596 27610
+6433 52730 36794 19725 62688 9236 33655 50250 13680 42033 25364 63535
+5702 32704 52964 17209 43616 10879 61529 21213 32895 51237 2922 46012
+19791 30635 62581 11206 43696 25333 58979 5305 36203 49594 16105 29713
+65494 8867 44098 27530 12813 54065 36761 20602 62937 2518 35476 49457
+13071 30372 61020 19373 42211 1369 53189 31209 16633 57131 38070 7996
+30363 65363 18055 48619 585 39219 23417 53636 10806 32647 63380 20768
+48250 8843 40523 26429 54820 4251 31367 63819 13008 42031 24775 51060
+5326 34571 55708 19266 42130 10969 60735 21097 33291 45382 663 63602
+18011 33371 46932 12017 56398 17481 31996 46204 4676 62445 28560 15641
+51487 35929 557 64518 29139 15414 50172 36446 3795 57332 24912 44924
+14522 35773 55940 4854 32804 47387 17728 61208 11494 40871 26480 58867
+5508 43588 22243 50934 13480 34764 55570 7519 40610 24974 58646 11467
+48501 21738 41816 7200 59868 24584 45691 12775 33994 55047 8753 42021
+23935 58797 12068 40021 25670 60792 715 39088 21323 54922 12639 43801
+27003 61380 7124 31408 46692 20359 63571 1389 39752 22639 55907 13785
+34850 49431 3070 30073 59845 13622 42602 23962 56021 581 31899 46717
+17311 63350 7149 19416 42863 2547 53731 30253 16444 63751 37814 7633
+46336 25142 62072 10555 30254 45887 16593 60580 27952 3663 49996 35770
+20306 55554 7516 42646 26796 58193 15183 31055 45368 2594 61284 22241
+38547 14598 54865 30793 6768 49540 37174 13682 63363 23059 44593 8795
+34759 59911 16944 31154 46388 7580 53250 28489 16770 63227 38152 6218
+29312 55411 18562 41428 3364 51759 29022 15481 61951 37147 9546 49762
+28076 16762 65104 36345 5765 53348 23564 47524 15179 35543 63082 3523
+30364 47912 17377 54539 9354 30462 46813 13624 62062 24308 41017 2608
+53095 29302 15512 58843 35437 11941 47265 26701 54591 6633 38887 24450
+65132 12259 43294 22476 58150 5659 31107 53406 20616 45592 8306 33512
+62395 12835 42600 23250 55332 2463 33493 45904 18050 58550 5197 38684
+27108 52308 12641 31378 61178 7565 48101 22125 40516 11841 59949 24830
+40501 1908 56009 19572 47580 30978 7238 57849 36371 19560 46831 10134
+61009 26233 40866 3086 47983 23189 56500 5886 38262 17126 62116 31471
+9089 50615 35287 18505 58029 3142 47235 25931 40751 10625 49708 22050
+57769 13759 34643 44091 3470 60935 24646 41003 13163 52364 28686 8005
+56826 37214 17210 50612 9975 33982 61633 14038 42381 23187 55810 3500
+32224 51453 15206 46764 28641 833 61800 35747 18073 51263 9847 32430
+56706 19935 42481 6773 61067 22758 39193 9662 54068 27105 41015 4829
+58687 21910 40181 11030 48459 24203 57581 820 39417 21628 58537 9902
+42764 25510 52537 14116 34071 55706 2353 43326 25444 60526 12136 34790
+47511 18753 65444 1748 35511 44189 21127 53418 9049 32069 57475 19261
+43647 6429 50980 29921 16781 63562 37671 8348 49391 27684 16988 59206
+37354 7098 51363 20674 32032 60794 2565 44184 20376 34684 65378 11532
+42486 25119 51244 1621 31058 56834 13301 42157 25713 53936 5489 29827
+58876 16047 45652 34632 9450 49153 21577 62888 4420 33989 45014 19615
+55067 9266 34007 43805 12965 60892 23285 41184 214 57545 28547 16065
+52701 35485 3057 47331 23221 60395 12308 40458 26790 55020 1763 47371
+29823 15291 58570 37406 7871 54299 28220 16483 49963 38020 62 30371
+56220 13512 42973 24462 58149 3319 35554 51346 18315 42391 6766 59910
+29547 15295 50438 37582 5733 56153 23012 44881 9873 36192 63733 14593
+27997 50432 4125 43491 23075 58803 11265 37737 50548 14895 31045 62161
+5121 44104 28258 16083 58495 36784 2024 52951 24192 42598 14394 57947
+21848 38292 1254 54102 23457 43895 14419 62673 29292 2836 49700 36614
+17122 58559 8292 30424 53858 20637 39643 3711 49430 23267 61157 9525
+41438 26869 49148 7220 57418 22049 41042 12815 54189 25489 46493 6217
+41652 22048 62659 13146 31510 51964 7845 42450 20874 63325 29308 3004
+53734 36364 19765 49481 8514 36211 65139 16103 29734 52818 2393 42810
+23061 62853 14545 33232 52178 3312 45913 28224 16640 64637 36586 1101
+51686 27446 16016 62027 37821 4517 46045 21929 53914 7994 41999 27264
+64268 10845 49169 25549 38799 2612 52889 17545 34892 54819 10605 42137
+24415 58040 5762 31032 52816 18680 42977 9637 65303 20571 33517 53971
+5136 45143 19231 36087 58809 10612 29579 51484 33259 45952 21016 59545
+8658 34974 50220 15367 28557 58337 156 42677 21957 52864 5843 34418
+57022 19200 43897 9139 37502 64055 16429 29440 53865 3337 34913 48588
+11493 64962 24859 41103 8801 56456 26937 39270 1692 52823 18279 32695
+58533 4506 46278 28783 15093 54080 37159 2630 64668 24619 44508 13428
+34288 57238 560 43280 22143 50975 9562 34066 57955 13151 43184 23249
+59950 1434 32660 52991 18300 45618 4611 32521 58056 14257 44128 28003
+1844 52384 37407 13078 57030 24008 44960 6439 33948 64718 20346 43250
+4953 55532 29969 16529 49887 36352 8084 60879 24302 45296 328 41061
+21569 62542 11190 49064 26532 40607 2444 51289 19144 33410 61940 11302
+42601 17130 50393 29627 34 57507 36031 14268 48335 24961 61454 7261
+40112 22201 50743 13997 33654 62618 892 45916 23846 40565 15122 57331
+29069 3583 52454 37959 16038 30218 63099 8837 45274 27711 14736 54200
+38110 2722 29145 59418 14726 42376 23752 53559 7974 38409 21298 64468
+13452 49183 27188 39485 2386 54944 21951 39442 12966 60777 27173 42085
+8666 49100 23170 64758 4849 38909 26679 48668 10282 55425 18736 35318
+49985 4434 30799 64526 16310 46513 27549 170 60581 36279 20272 47086
+4936 54268 25903 39149 11822 63404 22335 42424 7685 56977 25711 40689
+11823 48523 25158 59922 3465 34039 45198 15884 52407 28809 433 65419
+36183 20027 50392 11819 43768 26289 63060 2899 32952 52769 13893 43000
+25989 53718 8506 33321 64056 19054 45865 3240 31477 49155 17529 62664
+8247 30951 45392 20932 58248 6093 39337 23389 51304 11675 31420 62014
+17891 48162 2873 41361 26123 62814 12866 39244 22616 53218 1828 35843
+56637 15062 30764 45636 3700 64584 28664 16186 49895 36088 9377 53785
+18368 31748 58054 5108 47517 29133 16032 53073 36401 7244 62690 23643
+43716 10290 50553 18101 31313 64797 635 42197 23914 53397 14464 37546
+57019 6552 28656 50082 15747 35731 63754 3561 46073 27880 16954 55516
+38046 7808 31637 48518 18833 65156 10157 39155 27186 56033 5230 38273
+21468 48897 14149 61189 34960 4355 44686 25639 64871 12229 40668 22775
+52340 6221 34433 63187 14577 45190 27372 7671 52245 34275 19648 63379
+9491 32542 48320 21124 55514 843 39073 23530 64624 14162 47736 28690
+3341 58406 37543 16511 49715 29322 7358 53968 36673 15762 60798 27737
+2417 49288 35384 20067 55879 8358 46434 25226 40832 11750 61629 21791
+48911 6835 38889 27220 65187 10939 49252 21184 40759 6212 56306 26687
+40590 11486 59832 20794 30547 52014 4689 43164 25054 65230 10946 33731
+46301 13843 55105 23816 38450 2141 59126 21144 38400 11076 47266 27189
+63989 2813 38358 21241 59215 11296 48654 26264 40043 1054 60378 34822
+19634 47008 9219 56596 23055 41272 13973 52799 33739 60 57668 23522
+45471 11434 33734 60439 19043 47953 6856 41470 25919 54600 13252 37351
+57684 8007 30926 49667 19709 43192 9505 58196 29810 16794 50237 35237
+2709 59952 23688 45241 13192 38350 22730 58331 6491 47909 20428 33217
+60334 4686 45936 27489 16510 64084 35474 11994 49928 26106 40228 2085
+60913 22384 48067 11861 40483 25272 57426 7904 33236 48141 18170 64578
+4718 28870 60976 10965 43857 25560 55660 5371 36979 49339 16898 33231
+64760 8228 48035 25559 39363 11756 59143 23156 49434 1356 32817 46097
+13711 60014 24783 39111 6348 52789 18726 31784 47173 12267 59554 23943
+41933 5338 48137 22458 64327 10670 40249 25024 52251 12123 39452 21614
+56471 5574 41356 22745 52008 10317 31194 60727 15003 47664 25536 40711
+4655 65464 28454 15936 49590 36679 7786 54403 25744 42796 12182 63691
+19769 36927 50421 6733 30350 62587 16749 46385 29113 8809 59617 35466
+18029 50541 689 40721 27040 58482 11477 38972 23035 63962 3154 48018
+31021 12294 57412 36315 16376 50185 28663 5915 59833 36023 17336 46262
+9061 55675 26018 40635 4413 58896 24901 38900 9330 51941 19502 32389
+63818 4910 44832 18780 36293 53999 8495 29040 57995 20138 42434 12022
+51677 30105 6235 63470 35720 20095 49727 11347 41889 26565 60796 665
+34337 50711 20771 41442 10818 64952 25447 48000 4435 32148 61504 12307
+43601 25422 54590 109 40706 23878 58531 11199 45827 19867 33000 62875
+6556 43429 24134 53293 1474 38421 21250 56935 11873 34129 46966 17742
+61534 1068 38495 27253 58234 9252 43593 22257 53286 13639 35209 55667
+6255 44150 28160 14954 57275 37995 9449 30518 58739 20450 48349 1633
+36995 53336 15777 30106 64382 5570 42896 21559 51900 14312 30128 62463
+8307 46450 23963 40400 13665 56260 29678 6015 38092 60212 16366 29007
+47930 9901 56746 23152 40777 4382 59547 30565 14869 50391 37489 6734
+61051 24455 42124 11993 56634 19321 35035 50274 1002 29535 55323 13737
+43018 23803 59843 5274 39276 22098 55612 10770 38535 27262 58428 6922
+49121 21247 40998 11553 61658 25002 48662 5636 41503 22011 54428 12319
+33327 59943 546 46507 24340 41144 11111 58844 24224 39522 3130 46353
+21377 60300 13749 40509 26985 55414 4258 38619 21908 57782 13153 36964
+49967 7740 30703 61891 11795 44553 20640 31958 58811 1498 42174 23769
+52465 13681 31725 61614 5563 47492 29281 15735 58501 37211 1312 51909
+22788 43400 11476 63057 26351 39548 6807 52174 17991 32268 57595 9951
+43141 21762 54642 2294 32368 46975 15794 60397 29315 3877 50134 37411
+16744 61695 28283 1823 38238 54850 16229 30199 46162 10649 60249 25537
+40811 6454 52734 19000 32513 62139 10935 43140 24442 54666 188 40101
+22060 63231 10091 46752 29326 16476 52298 37271 4613 64566 28731 16340
+49596 35395 814 56307 24631 44783 13942 33834 58912 2986 43008 25283
+54557 12550 38829 22555 63464 28 34189 51247 18538 46458 9864 32642
+58011 17815 40511 1482 50873 19711 31662 63006 7300 42320 26193 48536
+12181 61630 23164 39775 5222 48720 25166 55619 14106 33481 45237 7131
+57940 27863 15763 52421 38135 5030 29778 61989 12938 49048 25147 39101
+6256 64302 19190 30994 47987 9493 55108 24451 38767 4519 61971 34784
+17776 49822 1547 32350 59488 15173 45061 27573 5223 63611 36173 14089
+53582 27690 6380 49188 37096 19642 64727 9557 47809 27009 40912 1672
+54127 18934 30445 62015 8862 44454 28985 15129 51960 37856 351 56464
+22341 43221 8422 58847 32004 16160 52198 37963 3573 30699 62924 15961
+46314 27472 935 54429 37979 15550 24368 56720 2947 40054 21451 52922
+13534 29912 61895 1838 41362 23296 55156 13461 31769 45130 3099 61391
+21664 38346 12649 49088 26330 56290 4335 41114 22086 62745 14276 44768
+28433 460 61458 37014 15832 50714 28368 8231 57208 35376 20661 47066
+1028 61946 26697 41855 9125 59379 25477 47520 14192 34728 62742 3630
+41752 22540 51286 8545 35422 56674 16561 30471 46479 3030 62134 23742
+39774 10234 55997 21915 39529 295 58995 26091 48816 11271 39042 21295
+55555 3014 43405 26555 61624 12599 38612 21567 52813 4515 34248 56657
+14638 46328 21663 39853 8804 54391 25882 42127 4457 62979 18316 30935
+53519 10148 42331 24897 64520 1033 35758 50739 13359 32033 60969 17722
+43450 2971 54331 22936 40449 12007 60041 26334 42951 1585 51992 17592
+32386 64399 4273 46714 27524 17007 54020 37616 2289 56872 25393 43056
+9648 53279 18209 31308 58616 7595 43145 17505 53212 30303 5653 57468
+36904 15308 50833 22990 41311 6819 57071 18400 33258 47449 9710 64026
+25717 38569 3535 54636 17684 47946 29757 9547 59659 36122 14586 48559
+24803 63378 4136 32239 44958 14339 54224 23716 40521 7640 63958 21355
+39949 2820 50879 33003 18842 59977 8568 30792 49160 18180 65343 3776
+40840 26409 45760 10265 61841 17713 32899 44750 3006 55754 24500 38663
+10944 58784 22884 47494 1347 35861 60696 16981 31921 48847 4366 54653
+19342 33678 45374 1815 62358 19172 33922 44208 7865 51649 27978 16540
+63590 35945 306 49609 28601 15899 52920 36075 4908 65086 23161 46072
+9334 36831 52604 16233 31571 63785 3558 42044 25652 54556 13170 34375
+52291 32 43032 23703 64948 13991 33348 45124 3394 57086 28429 16509
+52012 38163 7988 29109 63681 19550 41820 13340 52134 28781 6929 63034
+36488 17593 48347 9876 54967 22853 38577 975 64355 24469 43581 9726
+51440 18859 33024 61234 2269 44779 27355 15931 55620 36817 5070 50697
+27795 15344 65257 36883 7424 48017 21680 57068 10810 39572 25979 54625
+4733 41566 21231 62211 14359 31306 48342 3276 55712 34384 13659 46053
+23912 60078 559 39583 26494 63816 12672 38525 25083 53339 7416 43197
+21715 58776 11912 40566 25620 52846 6030 31765 56481 12663 43161 22807
+64365 2897 36609 50858 15080 30614 45642 4907 59050 27507 14820 38231
+50894 7703 31786 56727 19369 42426 12585 59155 34454 5749 44451 22513
+55408 9416 41515 24215 59948 12562 37253 51014 6192 29378 64206 19713
+46557 8507 31431 60353 19525 46179 5078 35204 52550 15379 31235 60577
+8695 42208 23324 53362 6711 34533 64124 13377 42817 24046 54222 5559
+39419 22075 58548 14130 35541 51299 269 30667 56753 17778 42578 10763
+64994 26716 39221 2439 50686 18329 31795 63469 9815 46311 18094 32498
+57096 1882 43512 23706 51902 14752 33035 59235 3612 44585 32724 17495
+58146 12676 43284 26185 51633 8680 30864 65223 19132 41181 4058 56097
+30206 16987 50994 37719 209 61403 23757 42243 14872 56778 29433 3787
+50845 35631 17625 62570 10597 35426 50288 15581 32747 56916 4123 42902
+25145 63225 11640 33043 54067 16874 37835 49301 6474 28859 61515 12989
+43403 22937 56533 5619 36806 49920 14625 30529 62388 8944 42270 18362
+48072 10230 38337 27259 58599 7337 32503 51524 16173 45289 28904 6117
+63192 36923 18344 54137 9862 48382 27032 41219 5560 65106 17630 47474
+32265 8175 54760 37288 11254 51278 20293 32393 55736 3994 46768 19537
+33022 63165 10068 41793 17379 51082 30634 7021 55709 36344 19100 49766
+2079 32805 57828 18193 46588 11452 39555 27062 63836 925 43881 21961
+52657 11345 32862 58600 14855 44540 28292 6090 52293 36149 13964 60974
+24198 45352 7715 40881 22773 64049 14005 32831 48353 5525 54941 24865
+41965 9658 65352 24711 48584 13054 32841 59702 1437 42898 23231 61274
+12056 33596 46242 20233 51744 2278 33365 58366 17837 45423 10896 30415
+57244 21151 48455 5604 39359 26880 65526 9967 47951 29765 15448 56893
+35321 6622 46632 23923 55862 10691 34370 44139 15460 59682 29176 7134
+49955 35148 14032 65198 22435 45438 3950 34862 61600 13386 48878 24612
+39027 2575 63679 23232 45896 12544 34211 55389 1306 43434 25997 61932
+13693 31325 52438 5281 42216 23499 57718 13506 36520 50321 7657 31738
+62017 19005 46109 2505 40111 26967 55864 9414 39714 18427 60052 30988
+5429 51229 36157 10660 56974 23243 45261 13957 34966 62043 1253 43882
+21508 33973 47707 11437 55409 19644 36017 52253 6345 28969 59791 12706
+47955 35075 19039 62855 4798 42539 26793 50558 13014 37207 57087 7147
+28171 44550 12830 64832 24402 41013 8877 48555 22114 58852 12332 40010
+25085 55719 3520 32761 46923 19313 58355 9095 40906 26141 55863 11514
+44923 18655 32021 57072 1921 43044 24546 59486 10887 39857 21631 50878
+7044 33010 61523 14799 48650 24577 38376 5821 58833 18615 48375 30289
+9440 52805 36567 18940 62332 1499 35636 50119 15264 30668 56910 4298
+45378 21067 30828 54377 2243 42530 25001 61557 14258 33307 51781 5764
+41683 26189 58631 12919 31913 46065 6492 54170 28052 16814 63226 38151
+9988 30009 48743 19521 60215 2791 41371 24999 53712 12686 40147 26738
+63381 688 43383 23142 51574 13236 34004 60228 7335 46462 23523 40974
+11791 64477 25956 38986 5530 51454 18697 31541 55123 8768 45549 17643
+33634 57181 4791 47515 28957 16146 65265 35855 987 50999 21586 45829
+14773 36752 61154 7247 28963 52519 13373 41881 24132 54648 8323 33458
+61567 19850 47473 2025 35663 65030 16576 28612 47099 3946 53226 27364
+16750 64000 35706 1574 49621 28016 16724 62061 38103 3546 30111 48099
+15256 57159 24042 41467 2202 54904 17422 35926 51184 9561 29917 62359
+17861 42685 4194 56436 27036 38344 13698 50056 29699 1864 61165 37048
+20085 47274 10320 55928 26832 41400 2931 60285 24990 43657 10154 54696
+20108 33373 46287 6427 60790 19604 32648 53154 8830 43186 24040 55338
+4235 40955 23101 60068 11735 39738 26850 54621 6884 38714 21199 63777
+10809 29604 47437 20683 54635 867 39123 27045 60785 5944 41848 22911
+54024 12453 34090 46118 20604 63046 5725 40748 23003 49893 12399 30884
+58725 7533 46352 22304 40142 11596 60583 26900 43734 971 55831 25391
+39875 7449 47289 22609 59568 9894 39023 21441 50836 3423 29445 64926
+14838 46093 27325 1268 54387 38157 17021 29925 64295 10861 43717 24058
+52807 4492 32854 59775 26187 41192 391 53932 22705 39041 12097 65409
+21311 48583 3381 39750 22940 56780 14278 32929 46031 803 60642 24310
+39161 13445 53273 21499 38472 2413 59310 29665 16121 49699 35480 6770
+63928 23158 44156 13974 37572 58879 3031 28726 53781 20970 45693 4812
+33687 65256 16731 44000 28684 9599 61464 37394 21056 52811 4353 42779
+25885 55761 12618 38544 21163 61311 7504 40409 26630 50708 2232 30480
+63146 16953 46424 29013 4311 54298 35349 18799 57584 1322 47004 26449
+39283 10889 59985 19337 32255 52189 2286 45020 17849 37070 58790 7389
+29029 46818 16747 55478 27739 5131 50800 37586 14435 63474 28097 7102
+49402 37533 20824 62239 3306 43106 17190 52373 30068 8476 56465 35558
+20526 46305 516 62866 25930 39710 12628 49342 23116 61786 2756 39918
+21861 49066 9586 62740 26890 38934 236 55509 18872 37395 51180 10311
+29066 56181 20631 44006 7012 34673 59939 13859 49076 21962 40623 8697
+62792 29303 16843 49565 36706 3200 55987 21484 45984 15275 30679 64837
+860 47411 27881 16442 53874 35531 5041 59166 24354 42859 11297 52264
+19954 35585 65050 521 28830 49630 15088 42521 25733 62795 3345 30241
+52643 16028 47715 28101 7763 56575 36471 17106 63601 2596 31643 50384
+13644 42574 23894 57471 271 40890 22236 52444 9597 31012 54925 15035
+41459 22123 64031 3698 33360 53380 16717 46539 29789 727 56474 36070
+14922 50394 28289 6584 63116 38112 14363 30923 54637 10834 43149 23996
+64685 2782 38517 21766 51321 7281 34179 60952 14806 46630 28040 5980
+53783 35274 18988 63107 12201 45581 26989 40078 2631 52911 20154 32882
+64066 11633 41968 24159 54957 4534 39664 22308 57885 11851 47821 26323
+40506 7216 60694 18882 35374 48405 10624 65125 17223 35453 50190 4923
+29462 57686 19149 45737 10520 34338 63960 20364 48211 3661 36257 51142
+15095 29636 58141 115 42653 22615 52401 8761 33664 56816 16082 45414
+29341 6277 61169 35513 20038 46900 9918 55947 18217 31407 44115 3749
+57362 28200 16950 51472 38068 2118 30386 58840 17429 43738 7256 61350
+34895 14012 48043 25467 62323 1550 38879 21394 52452 13310 34309 57899
+7985 41572 25056 54496 10522 40061 23172 56736 4132 47625 19096 32685
+62650 361 44196 28322 16238 51961 37503 9839 58001 23511 41578 6294
+51838 30612 14473 61163 37753 8496 44809 23779 56904 13379 31118 53143
+7218 43423 23401 58405 13791 32821 44993 5332 62825 22430 38427 12838
+48259 25548 57119 1026 39804 23293 48551 12270 64951 21589 41321 3493
+54914 24956 43472 14389 57713 29147 6462 50064 36143 12289 62159 28654
+16755 49618 36838 3974 63693 22674 41766 13074 51921 29643 1295 58568
+36292 16531 49637 28786 10396 62281 36888 18798 50574 482 43119 25617
+61282 13640 33279 51544 2859 42135 24634 58750 7930 33733 48701 19284
+62657 11277 33212 46647 17332 56829 1775 39498 26234 59061 9223 31700
+53709 14409 43397 25896 55177 2145 34377 65436 13882 42738 23683 53469
+6197 38556 21278 64192 12133 48913 31054 16234 53345 35889 1853 61166
+25479 45429 13906 31525 55778 5398 44155 27953 16346 60076 35933 9544
+48881 25707 56194 2406 40367 21919 46711 12896 63659 17826 44893 11211
+33276 61583 4887 42669 26353 54571 13284 33815 46674 6557 59777 24853
+38763 10328 52555 18921 33941 62491 4677 43014 24280 55464 9407 40945
+22922 60956 12819 31648 46308 1133 57434 25067 39904 10993 51606 18886
+30973 61100 8716 44025 27620 15490 59193 37652 46 50232 27618 14527
+54951 38122 6726 28797 64170 13761 49087 24140 41341 3915 58903 23237
+48655 9518 36647 56908 15941 33996 51688 6966 43244 26260 64916 9804
+41540 22147 51303 14781 34722 62114 4852 47762 23185 41497 14785 63266
+30327 5852 54130 35405 18888 50355 9113 34368 64361 15391 45079 28801
+590 57043 34880 19392 47041 8612 58754 25607 41726 12014 54994 25352
+40070 5073 59462 18512 31963 44249 10569 53386 18236 33545 60374 4022
+45615 28035 16090 58516 38044 6178 30461 54474 20253 42023 11908 48298
+25740 60975 5087 32604 44829 17510 64076 1422 32052 52323 16208 44815
+27742 4494 56807 35471 16125 51270 27486 6270 58893 35222 11959 48920
+25932 59784 7164 34458 43959 12535 55024 23728 40900 8497 63191 22082
+45161 13425 36702 50933 6830 30467 57806 13052 41753 22369 51891 5963
+34852 58461 18850 46729 11365 40227 25969 61121 4658 32208 54115 20585
+46670 10945 40252 23382 60316 5419 46825 29599 16551 65085 35925 8819
+46552 25535 61221 2452 33384 45754 13397 58201 24895 39266 8102 48986
+22325 59266 11906 39743 25483 61991 4252 32028 53004 16887 45635 28959
+1520 59823 37073 20299 48310 8443 54255 26835 41842 12292 62251 22997
+40130 3901 58333 29438 16364 51471 36949 1297 48262 23884 60073 7611
+38501 26033 56723 9709 47786 17185 31270 59519 853 43651 25753 50624
+14320 34177 64505 5476 42619 22993 52420 13750 32519 56339 383 44689
+23796 40273 9242 59221 21844 40138 13653 51431 30637 1410 56098 38026
+15724 29221 60886 7138 43024 22929 53598 11622 33803 64684 18382 46090
+4621 39440 26347 59208 11405 43355 23572 53393 1804 38857 22184 62602
+5731 36959 50036 15288 29553 64938 8282 47147 27542 12717 53732 35814
+20960 56733 9553 42469 23086 50740 3941 32859 58030 18408 41971 10659
+49133 27106 63008 5308 32191 46156 16894 60874 28391 2367 49516 37492
+13826 63978 24814 44722 7970 34908 57234 17766 48247 11342 34611 60788
+3471 43506 21749 55902 13658 33016 46542 1031 58707 28046 16842 49406
+37064 3426 62465 22072 41976 12165 51505 29516 496 65515 36763 18414
+48571 10740 55308 27227 40582 6772 59998 18597 33203 45723 10395 58612
+26352 39006 5767 53144 30442 15109 60169 36225 8884 46619 22525 64250
+785 32701 44934 19457 53352 6038 32108 58053 14358 47498 24422 39436
+5491 60528 23737 48751 12210 40769 21864 65524 3305 31980 47095 20567
+54108 8361 32012 57973 16447 47302 28755 5784 64796 34860 17982 53337
+9754 44240 35070 17076 55457 3735 42117 25970 60284 7564 34998 51232
+19818 46631 11828 37569 63515 3163 28892 50609 20845 41268 10140 52306
+18104 31875 61093 3568 47641 25429 41006 10462 57787 24935 40349 4593
+46821 21318 62812 11197 40079 26577 48442 6988 58163 19387 34927 53292
+8869 42309 24182 61782 4203 40682 21291 51846 14147 35759 59118 7129
+29417 51220 5648 47415 25508 55571 13938 39301 24095 59133 1174 49193
+22020 40351 12475 64152 26405 49479 2248 31147 44108 15064 57974 27844
+7455 49833 36338 15700 64439 28987 4255 50524 36637 14606 55295 23545
+43878 6274 34843 64799 17189 48659 2325 37766 55891 14247 29855 53514
+5673 45016 20599 30867 62533 9948 46984 19914 32614 57647 1572 44772
+34828 18716 54578 10897 32504 64567 20619 44869 599 29584 61776 13633
+48443 23901 38721 2803 53653 17725 33443 59473 7914 44450 28378 13594
+53372 36159 88 57847 27508 12199 49529 37744 20734 61575 2845 42566
+26376 52488 10357 35019 60404 18181 43202 4340 53745 27144 40757 14082
+65002 31426 1861 50075 35556 14056 61245 23178 47213 2543 37698 64284
+15136 28932 51753 7932 41659 24718 55558 11362 33744 48065 17458 64611
+2009 33342 44721 13786 57198 23265 39616 8098 54729 25709 49037 11617
+40361 21825 59609 6359 47948 30169 14724 65243 37310 380 46845 23733
+54444 12913 40801 22339 63830 2125 29779 45280 15670 61350 28743 4077
+51749 37883 15402 30930 58518 1553 48648 28235 16552 62407 37754 3669
+53819 25531 47053 13891 33397 64562 1721 41935 22757 55674 8799 37257
+50030 15560 28908 64193 755 43940 27906 16513 53024 36624 7525 56476
+27397 14228 49653 37874 4212 59334 23830 43082 11361 55920 18034 30290
+51473 6136 34656 63514 18970 44361 2140 36627 54732 15750 29402 46880
+5793 60915 25797 41814 10583 51564 18323 35477 63264 6012 30212 46157
+15248 56510 29237 477 49984 35306 19347 54926 8410 42336 25971 65220
+9877 40525 22052 55114 14004 45034 30981 3202 63424 36592 20693 51779
+7288 41411 22891 60584 10329 31951 54584 19447 45779 3146 34781 62620
+11352 48823 28602 16297 61027 35005 8029 48079 25689 63261 3521 34499
+44406 16976 53214 27450 8963 58991 38224 17235 31675 48614 2688 61983
+26416 39556 9447 49075 23441 57733 13834 34529 47025 3275 63844 18095
+32783 51016 8692 43042 25955 57631 11925 39011 21808 52428 1116 34767
+60459 18464 44471 4973 32955 63442 17124 46607 245 36271 52908 15901
+29697 64163 8928 46512 23928 38475 2829 55535 22274 43606 14311 58255
+30937 8939 50424 35365 19565 59535 4552 31591 47158 21031 54173 1675
+40554 26681 65158 14509 31923 48840 6941 54178 25218 40870 11108 63578
+18889 34653 52751 5924 42187 24826 54736 14227 30184 59770 6585 46098
+27883 16440 53611 35101 8879 60741 24978 45690 2566 35469 52683 14738
+29588 63656 4629 47544 23811 40780 11764 62625 19643 33649 51127 2376
+44819 27664 16089 58704 35691 10987 54952 25541 41143 8205 51066 17699
+36342 64723 1985 28790 45939 18967 56308 8227 39065 26929 54518 11389
+43385 22987 59417 6122 35129 51893 14023 44030 27381 1707 60479 37237
+19880 45924 11161 56013 26040 40270 2233 62977 20993 32294 51701 10894
+45739 18620 30642 64936 682 44511 27772 16117 52477 35141 5452 59857
+19076 31693 47782 7866 57834 25398 39136 11843 54752 21480 43785 537
+63297 30391 14755 51385 35288 9341 56574 23557 44808 2485 32954 60627
+14492 43036 23099 50478 17 30870 65216 18194 47767 11569 39057 27057
+57499 1591 47737 30893 16030 61024 36769 22150 64701 2703 31756 51015
+18295 44862 9851 32165 62243 15055 44086 28057 5201 55779 36286 19881
+47699 11253 60324 20936 30349 45216 262 54984 24982 39703 10923 57906
+20040 32107 47528 1937 62144 19782 31757 45322 10284 56695 21300 32244
+44435 7262 63033 18311 32259 47483 11801 56368 25485 39505 2857 60317
+17935 30400 53556 8828 47704 28414 15479 59393 37567 5378 51866 25902
+42410 11674 53817 19918 32337 57286 5790 42781 23319 61091 11517 30353
+48156 20726 56103 3855 40530 25281 65177 15840 33486 51947 6487 44700
+28921 15226 59139 34883 8287 49525 19973 32341 56366 5569 40176 25403
+62044 11643 38662 21849 51662 6360 36700 56949 16754 28837 45192 7780
+54131 25149 39647 11634 56225 20983 31905 48557 1262 63232 20028 31465
+45005 5420 57654 24680 40718 9351 51814 19020 30191 61396 3773 46200
+28186 15438 63328 35280 2363 46494 23887 57693 12325 39431 22903 53500
+7854 32456 60893 15902 44474 28421 3896 57922 37755 19470 52905 10412
+35152 48620 20485 56899 6623 42010 26634 65458 10274 46557 19980 33868
+56299 6203 44432 19473 33763 59380 10705 42134 23356 54433 7910 38851
+27081 61730 11898 43702 21625 52888 4279 32768 57057 18259 45659 9800
+31817 62994 14927 44683 28298 1887 61427 36758 16952 53736 29496 9284
+49174 37858 20515 61997 1059 46618 25938 40341 11101 57524 20469 31338
+48241 7598 65407 23726 40791 13105 55185 22534 38498 2422 57300 27201
+47624 13936 33426 59117 4436 44430 27657 16930 64261 37540 10603 47330
+22315 57852 5513 32525 45332 15696 61477 29058 4373 50534 35993 17558
+56207 10081 47124 28967 15457 61703 36044 2340 53504 17904 37575 49472
+8199 28730 59330 16666 44221 27676 6542 57425 37150 19431 46673 2131
+55245 27050 39009 13145 57319 21643 48314 4780 32227 65487 14013 45667
+27292 5925 53184 35514 13723 56523 21739 45065 1278 33105 49648 19834
+60326 7566 40709 25829 54577 12724 39826 21886 59632 3892 33511 47960
+13894 62472 23947 41775 7093 54420 20128 31001 48851 10996 59179 26124
+41395 6753 48670 24288 55939 11738 41018 21416 59317 5609 40770 26744
+52613 11492 38453 21190 64539 716 43941 26708 54711 11263 41593 17090
+60628 29612 8735 50255 36351 17244 57623 5250 46273 25534 40982 12622
+61926 23790 38944 3087 48553 22445 57780 9941 30034 45109 18818 64492
+1785 32417 50892 12978 43059 24067 59200 3866 40707 21649 50951 12256
+31686 61522 20569 42217 8064 56615 31234 15666 50793 36484 374 55265
+25704 42830 9587 60759 18440 36928 52389 5290 30660 48608 18789 62287
+3047 33254 45309 20828 59515 9298 41008 26060 53163 13189 36480 61083
+4390 30332 47757 17710 63235 939 31163 44408 15407 55449 27948 9010
+38217 64063 16622 30794 52725 4776 44267 28141 15294 59163 37882 8504
+30065 49014 17792 61032 4374 40592 26828 53416 14041 33981 58360 8776
+42184 24576 55680 12809 40577 22706 62427 1404 33818 45758 15185 60231
+28623 5997 50051 35180 16850 53643 27586 5119 59198 37493 16940 49460
+28888 7693 64420 36164 17683 49407 3852 34285 59491 13370 40935 25589
+55360 4993 31911 46555 17443 63141 8313 38744 25879 54910 11945 43640
+53388 20441 34765 56201 8274 42080 24813 58562 3979 37358 53262 16519
+29242 48781 8515 62715 24648 38951 2983 50907 18145 35918 63239 8927
+33491 47275 18559 60674 5413 34281 44294 15250 52252 27621 8030 59633
+37349 14557 49787 27479 4706 57938 36507 20438 52338 1319 42178 22747
+65048 10443 33552 51141 15672 44438 27882 7034 62260 36786 21104 49676
+3462 33940 63603 13350 47292 23555 39819 2096 60261 34789 17930 52556
+9945 45472 34986 19868 63847 1188 32353 51614 14332 46057 29556 9093
+57097 35780 19657 47031 2149 62432 23067 41067 11554 55276 25868 40316
+1120 64804 21853 46699 13175 32275 54746 2696 43619 24734 60335 12591
+39192 21604 63882 196 32207 48463 19048 58302 5791 34307 44613 17121
+59663 7104 34665 43991 12099 53034 28223 16514 62419 35548 707 46587
+23001 55993 13097 34581 43798 5756 52960 29298 16696 60184 36409 9318
+50358 27014 43527 3019 62035 19958 36736 50504 10010 29926 55405 20579
+46338 7584 33051 63129 18241 44640 693 40046 25769 55693 13729 38842
+21926 54054 2811 36453 51660 12753 30201 61404 17361 46729 48 31712
+63502 19219 46110 5144 32307 49528 18582 59092 2328 40067 26329 48688
+12884 60910 25644 40919 5719 51868 19487 37084 58281 8416 30836 51458
+15358 45187 28132 4869 64732 35098 14508 54324 28536 7704 50035 36753
+17136 60408 3805 43896 28821 16183 52030 37331 89 59406 25360 43001
+10972 52796 21167 40208 6783 63705 26092 38579 9933 54667 18619 35966
+51157 3251 30292 60089 14110 42715 24512 54432 2005 39621 26419 48908
+11018 58232 20677 32443 44325 259 64353 19215 32746 51148 6824 43378
+26147 55549 10849 32869 65315 20058 45266 1023 35202 54798 13810 42729
+25284 64212 5823 41610 23345 52449 12059 32205 60031 6472 44038 27634
+16698 52593 37193 583 61331 28501 16806 49578 37037 7484 64115 24719
+43767 12890 30956 62255 5036 43739 27891 16326 52027 36773 403 65210
+25626 45985 9577 30410 55606 16273 44737 27848 2359 60015 37196 13311
+45632 24380 57010 3085 39189 21000 65437 13660 38280 27115 53498 1451
+36491 62782 14834 31086 47400 7542 61287 24322 40599 13354 56849 24285
+38494 5855 51641 21063 34278 63635 2762 45582 20195 33876 55402 11615
+39761 21692 59261 637 33893 53584 15778 45766 28978 9040 59919 36589
+17326 52119 4997 35388 47361 14841 60587 25917 38946 7614 54241 21214
+38786 10385 64187 27094 43782 1470 54814 17340 36789 49347 6343 28221
+65097 20461 44927 13039 31392 57546 4239 48541 24687 39367 12564 64508
+22326 41632 7438 54640 25051 40185 12050 57188 22789 48370 118 34904
+62607 16907 31649 51221 5842 45599 20965 33338 58233 9357 49208 20320
+33951 46789 3713 61388 19485 33288 45940 7458 57608 27303 12455 50909
+35512 18905 64494 290 46402 25570 41861 12117 55591 23839 38856 6488
+62016 19375 36569 50333 2474 31888 64179 17455 45364 6987 36628 52135
+16281 29585 56334 3965 42841 23926 63946 13561 37458 49293 8704 31956
+56012 19432 42985 1187 60116 25089 41790 9514 54707 21842 41137 15341
+57759 29465 6252 51319 36996 18895 62101 10995 43021 23106 52087 3161
+32378 58695 17437 42466 5933 23459 47801 573 32435 61319 17250 46393
+11519 31657 65236 20606 46044 1551 41383 25959 57344 9356 40764 21735
+52907 13243 29284 56434 6300 42668 24268 53446 13760 30031 64625 3385
+46190 35297 17024 53405 28756 629 63495 38207 16161 30654 47944 7768
+61845 25592 39160 12377 48547 23976 56653 5827 41182 22002 60870 831
+33586 53112 18475 42648 10107 58350 20344 31679 54143 6383 45685 17249
+31384 62478 8391 41451 24713 50270 4057 32462 58452 15113 44097 27778
+7663 54589 36825 18047 62968 5081 42585 26591 53586 14279 31915 58257
+6831 48040 29505 16596 51758 35609 7627 59454 27474 16748 49283 37319
+9898 57961 23182 45824 6779 33312 55290 16059 44445 35965 9775 61450
+24602 42083 3245 54995 18541 30438 47000 10195 65342 23053 39946 4368
+56325 25618 43269 10492 52249 18539 29386 59028 7324 47547 36020 19070
+64910 1041 42912 25441 55313 12964 38393 21339 56730 5836 34256 47533
+18324 64671 1724 34788 43824 14200 59556 31299 4367 47902 22733 61057
+12741 32416 46583 5655 63980 24317 41614 11556 58752 26041 40702 7127
+50610 20280 36144 57712 9718 29529 53370 14666 44397 28023 6900 56335
+36272 14391 44573 24169 65348 9084 39089 22200 55363 2998 31091 47363
+13809 63892 24842 39410 466 48725 22094 55710 12043 40752 24177 58076
+3162 43724 19955 52837 30821 10028 64213 34584 18623 50498 6829 32781
+55878 14571 43750 23538 61045 3417 38286 26594 49061 12807 57888 22324
+41224 1224 61801 25985 46968 13226 34459 53812 6682 39681 21361 62686
+11992 34058 46889 17386 59674 5698 39277 26413 54285 12845 41942 25200
+60122 4168 39494 24320 53035 12423 39322 22007 58119 5091 42440 25973
+51443 12567 32214 61613 3780 39755 21946 56209 14565 33791 50866 1639
+40518 22596 63486 15063 31879 47183 7781 58278 24116 40774 10702 56312
+19306 32081 46654 2537 54955 18062 34675 48218 10429 58795 20938 30830
+45703 7905 56766 23788 40268 12396 58556 21599 39574 6512 51939 32024
+17112 63217 35688 8601 47668 22799 55102 11724 38265 27271 48083 6082
+59748 21843 43343 10024 50533 29272 16860 57706 35598 3898 49611 20193
+32034 54168 2200 43444 17790 62090 31877 7630 49399 37066 17439 58542
+10355 42819 25420 52623 6437 31146 63241 13424 42649 22713 51500 7554
+32159 64856 20090 42359 2606 53766 32501 21012 62640 10190 41597 23362
+57180 153 33562 47871 14162 58635 24808 41297 5887 51591 19618 32359
+62056 10283 41605 18851 54317 33225 2930 50377 36955 17842 61318 8616
+44299 34604 17236 59210 1204 45456 29404 14754 53083 36779 3998 63550
+26809 44233 14436 36750 52732 7629 29583 55785 13546 41910 23972 65063
+2527 39929 17221 52469 28952 10610 56988 37782 14877 50115 27454 1476
+62593 38123 14368 32184 48110 4282 55768 24050 39662 10250 60003 18796
+33110 51831 3409 43380 23295 59062 9998 29620 46990 13467 55228 24207
+39905 4553 58839 26362 48775 10044 40194 22064 61211 12693 35626 50544
+2724 29047 58596 16539 45764 27895 7026 65041 35822 18439 51019 11513
+39619 27263 63434 2815 35109 53588 12703 45524 24275 41479 876 60183
+28716 15156 50210 35863 7373 64016 25165 40529 11385 51618 21642 38571
+9383 54417 27225 43499 5019 58202 23153 40651 10163 55136 29939 15829
+51490 35446 3396 64227 23332 45869 14448 37229 59428 1012 30716 50138
+17740 41477 10766 58595 25613 39841 7451 56188 21475 48281 13433 33469
+58526 3960 41607 22696 52898 13466 33396 59173 2410 44417 28113 16406
+54611 37123 7890 47167 25439 57729 12489 39348 22612 51388 3051 34717
+65340 13670 42037 23930 50661 350 34972 56323 18251 43955 11264 64673
+29984 16637 53445 36858 2926 48016 24309 60157 10768 32383 44201 19047
+51700 725 39960 25323 63694 12793 45185 27996 3125 61810 37478 15521
+53558 28636 4149 50257 35404 19131 64496 1755 42360 27275 51982 13990
+30315 62685 3848 46653 29136 12652 53284 36584 20762 60033 1462 48797
+26760 41588 13482 52577 30878 8333 61571 35964 20719 49354 2521 32132
+62188 16074 44369 27374 10257 57497 37258 20766 51359 4195 42155 26477
+62946 11707 40959 23071 53077 8425 31479 58483 16659 45861 27354 7299
+55731 35974 16986 51569 27939 8825 57903 36254 16933 49838 28245 1385
+62026 37917 15562 29482 54483 3988 45849 27762 16243 64298 38079 2119
+32983 48982 20003 62268 12330 34139 46917 1006 51312 19814 33138 59648
+6821 45482 28937 16227 57624 35597 9379 53361 21226 42586 6505 62670
+29692 16373 51603 36523 8693 62136 27376 16231 49432 37690 1265 57117
+23850 44906 12598 39938 25765 62671 5332 38875 21322 53379 9121 33037
+64530 16152 45993 28407 5114 55510 37200 20149 50268 7946 32829 65179
+14890 43532 24911 55861 630 41512 22949 51889 9231 31579 64013 20185
+45470 2604 33477 57245 18187 46852 8733 34549 62164 18076 45679 1835
+35634 63436 16135 31004 53974 8769 46135 23311 41509 15162 58606 29421
+7027 49647 36197 10632 60972 26288 42888 13041 55061 28707 3110 50298
+37518 15887 64614 28914 4428 49782 37464 13638 60024 25210 44477 6890
+39926 24328 61678 2082 49317 17774 32539 44072 4229 53899 29247 15789
+63704 36212 1604 49355 27436 14461 56391 38179 4568 30847 61272 17697
+49306 794 40236 23409 63972 14774 33053 52061 4575 41649 24881 54598
+13542 32313 64741 8008 45162 27685 16467 60118 37973 10347 28912 54981
+19693 42822 74 65311 29427 15238 50658 36434 3817 56643 28399 16394
+50068 36523 2097 60516 25668 46492 10585 34042 57358 13992 40437 23536
+50470 5683 34060 56300 17885 46649 11309 40216 22642 63200 4314 35309
+49742 15731 30422 56079 2150 43432 25425 59456 8925 29536 46021 14299
+63052 25494 38758 4904 52320 20453 31895 56911 10607 47079 19975 33518
+61595 7814 49269 32622 19097 46208 10281 57781 22390 40390 1892 62089
+26857 43621 10424 50722 19494 32117 59634 7242 47239 21062 32460 63864
+4933 44253 20814 35461 53479 10014 28624 58820 20064 43155 6209 51937
+29459 14979 61712 35047 7906 47917 24717 55247 13739 34668 44643 1225
+63136 20081 32413 51488 7812 44657 28804 15686 65353 35385 149 49784
+18263 30644 54842 7412 41756 23505 62663 14526 34641 52825 4525 42132
+23403 54230 14086 32301 61410 5207 43496 22522 50330 14022 33806 60889
+7170 48206 20760 34068 56620 10360 45326 20047 37520 55496 2216 29784
+45711 14689 62451 41197 26128 59513 12873 39838 21520 51483 2579 32883
+63254 14884 44995 28024 7084 60448 38017 16939 32326 48658 4934 61288
+21156 32960 44446 9670 52738 20429 34734 62448 2391 45175 28332 15874
+51551 36891 5061 65443 25488 42460 10814 55246 19297 46518 29471 5473
+63868 36208 19569 50670 10000 32688 62736 19381 45114 3728 33001 61371
+15907 45082 30886 9706 56714 25546 43261 5975 52932 19102 33175 61923
+8808 40637 23470 51747 5263 39948 26173 56925 9259 39920 22263 61467
+13225 46726 28729 4795 55134 37615 20445 59526 8929 36871 50447 16924
+31013 55083 6175 42555 22331 60630 13795 33706 46516 7969 56075 26401
+41123 12795 59813 24533 48280 5928 41264 22306 57699 14950 33036 51542
+7536 41494 24468 63586 11450 38831 22412 58109 3631 48566 29075 15242
+59831 37922 6901 50555 27469 14245 55286 38154 4879 30775 63483 17694
+48510 8241 34845 54312 14964 30117 60321 147 46706 28128 15622 51731
+37176 3668 64222 28564 14635 49717 37495 1959 60632 27320 15436 49297
+37568 4873 55883 23974 43268 10581 57196 18944 32406 48130 7777 60312
+23602 40727 11193 54978 21656 39825 6444 56503 25822 41871 9563 60413
+17325 29904 53545 4134 42432 23755 63410 13088 33215 50901 1524 43442
+25498 60835 13219 40075 21779 50264 2237 31998 58298 14746 45063 28083
+5929 53928 35402 17889 61364 10816 47856 26891 41819 2639 58225 22297
+48905 12339 41322 27130 57145 822 39734 21725 52270 11844 33188 60412
+17526 44255 2571 30033 57212 21091 41760 10752 58728 27111 38446 6302
+61152 17984 34894 48024 11216 56165 24235 40250 5112 49333 22974 59395
+11133 31574 44157 15298 55435 27858 5978 50261 37266 18806 59899 2852
+33681 48077 12109 64893 24804 40385 159 52957 20160 31835 58060 5311
+45141 19359 33895 62526 8689 43998 27441 12442 54083 35168 19972 61171
+913 33336 48621 17118 55621 11135 32708 46946 15266 64373 29557 6299
+50055 36613 20161 57645 11043 42681 24848 50963 5845 31470 62060 19363
+47234 11215 39772 26472 53041 7517 30648 58343 18943 43174 3237 54954
+26307 39450 11198 62258 21139 47142 991 36954 51763 15441 30284 57243
+3277 43708 23325 52186 6728 33142 58195 21087 47560 8048 40617 23169
+61640 12737 40600 25092 46024 5916 62824 18280 30843 43966 8649 53387
+29905 18275 64119 899 45918 26358 41993 13224 62177 29165 2936 49977
+35625 18900 54499 8117 43479 26934 65250 11859 40447 22741 52843 7156
+37170 57633 16971 32563 47855 659 55769 22355 41773 11509 64820 26156
+40081 3584 51316 17091 30686 58303 2500 43830 27413 15186 64421 36102
+5889 53926 24671 48957 11872 38702 21469 60466 3675 34858 53672 15138
+43894 28393 520 54678 36757 17457 57449 8011 30901 50461 17267 41616
+3036 65184 31430 16915 53624 36814 845 49687 28377 16266 63854 38031
+5057 31074 57403 15912 48275 28137 9116 53803 37119 18429 59471 5676
+41468 26107 55644 9498 39002 21411 61498 12478 32968 51755 2002 43295
+24606 57737 11046 39893 21708 47825 458 59505 26984 40392 10689 52025
+18973 31298 57376 1852 45067 27740 16092 62726 38021 4452 29126 48974
+17273 64500 8752 33729 47991 20575 56874 6180 1080 53659 36076 20242
+61590 8142 48129 26425 39255 12080 56983 22180 49080 117 41792 25344
+58259 12695 45373 28530 8794 54295 37051 18302 63992 4099 31457 50673
+14550 36505 57991 8560 42258 24454 53943 12439 39372 23667 60647 1623
+38516 17353 51773 31369 8110 57378 38034 15084 28598 48170 190 59562
+24129 40226 12903 54134 29828 5247 50401 36355 18810 63450 1455 36265
+49329 15660 30246 59790 10537 43691 26122 55316 2440 38252 21513 59148
+14395 46893 29454 990 51885 37601 20698 65476 8313 33295 49649 15675
+45743 28554 2327 64132 35701 19594 47366 10903 58098 26365 39015 369
+48877 23836 63375 10567 38955 20878 53960 2996 38364 21444 65096 12046
+37633 50456 865 28383 61837 19706 44759 4814 36029 56491 15813 31750
+45541 9589 54645 20397 33441 44126 459 64476 20016 31253 51719 9966
+45152 19646 34813 59383 1648 28851 51682 20543 42519 10078 56931 34688
+21316 44846 6039 62423 19650 33266 44043 11417 57282 24627 39405 5502
+53993 18738 29988 63047 7956 41860 22473 52292 14197 33473 65163 3376
+44638 27527 16635 53098 37619 802 62724 24751 44932 13504 31966 48474
+3015 64889 20846 33748 45445 10910 50874 18982 32160 58425 5956 41619
+26164 55604 10664 38491 19158 58950 32086 4783 49419 37469 11632 65251
+23289 41788 4114 52671 33909 19201 59779 9326 46472 23136 38647 4832
+64911 30911 15831 50188 36604 6645 63340 25151 45259 10289 34059 61538
+18444 49200 5632 30190 45455 20904 62993 8276 34548 53319 17359 47191
+3488 34379 49344 14093 54125 24898 41914 1552 62597 28551 14823 51790
+37972 7872 29782 64635 20153 48061 768 36974 57525 14159 29972 47403
+8472 61307 24762 40096 13091 49050 22444 56435 7766 32101 45633 17294
+62106 9216 38643 27184 51777 14688 31177 56015 1859 47959 20784 31666
+58851 4952 45840 17449 36665 51741 9117 29146 63064 20812 42069 2989
+57066 25665 39479 9703 53678 18377 33501 60861 21 45412 28672 15163
+59778 37056 9927 54267 22677 44367 2064 33163 64851 13496 48561 23628
+41413 9145 61675 30229 15837 50043 35307 5460 58902 23107 43080 13037
+55990 26300 39641 6098 62897 24855 41654 11805 50746 17220 30038 64237
+4181 44164 27718 15772 52471 35602 1286 57977 23685 47947 10994 38839
+21347 56901 3104 34951 47365 14329 59736 25384 38675 6950 51415 19790
+34579 58946 8764 42417 24443 55826 12268 39661 23636 60876 1246 39060
+21240 50543 14105 32203 59837 3367 44641 27426 12091 62152 37224 15437
+53521 29143 7711 49737 35313 18290 60155 6669 45040 20864 37645 55504
+9196 28696 47634 13245 59361 22096 39908 1035 47513 26219 56749 13878
+30354 44963 7976 61561 25205 40394 12829 48964 22519 63524 5403 34608
+46370 20378 61159 10410 34131 44946 19220 56173 6776 40210 24511 59357
+9046 43174 21879 54332 11685 41431 23034 60305 3208 39564 25598 64409
+12150 42904 22275 51049 1586 33522 62527 14071 47687 24757 41817 3515
+54351 22396 39397 14112 63984 32322 6813 50100 29253 16076 62984 36334
+9055 53813 24635 44349 4004 34553 65161 15193 47643 29829 6099 52352
+36566 18997 59627 11709 43305 25968 52083 3510 31439 60656 14338 44014
+28007 18643 32051 46533 5772 52802 28645 15877 63651 37845 4392 31418
+48105 16478 53224 29156 7937 65068 36638 18494 49820 2042 33611 56772
+17041 45606 10591 29319 49152 21383 60092 430 29659 46718 20007 61864
+6337 41183 26614 48676 13158 58138 22296 40278 4377 64774 25587 44163
+11564 55662 17915 35664 50302 6285 32290 64290 14602 43087 24770 55502
+8271 41277 24434 58508 12541 39550 26653 54720 3576 38603 21778 64485
+13210 42489 25259 48966 7067 63001 18396 34506 44103 10639 54088 17125
+30943 57272 3412 43231 24233 60640 13602 33069 52584 9311 43167 23450
+56166 5416 33208 45870 14739 61182 25911 38243 6580 55698 22776 47601
+14263 32397 58900 7271 43780 23307 55394 14420 36174 49409 8435 29590
+60571 16654 47324 27849 2011 63765 37964 14987 28691 57294 7524 47985
+27994 14731 58363 36492 4097 53390 24353 46987 13790 36982 65428 7547
+31000 45319 17201 61469 3217 39448 26753 54702 12860 49267 25033 40667
+1168 59645 23386 48815 9767 41027 21539 50955 13351 34216 58308 341
+46527 24624 39640 11273 59680 21802 41759 6791 50607 31077 14942 56993
+35662 5464 49604 27801 16553 58642 36428 8485 53667 26396 41961 197
+62447 24678 48577 13481 39382 21978 51807 3190 30139 64231 13587 42399
+23857 52851 7558 30889 56080 12730 46141 28627 15396 62927 37027 344
+51187 25370 43625 11784 56632 18347 35689 51513 1846 29439 59029 14180
+47660 22005 40841 3723 52982 31564 14972 58611 36294 1690 49638 27754
+16401 56283 38090 10160 30672 63821 18992 45528 5118 32822 59552 18784
+44753 9555 33688 54920 20829 44363 2886 32993 58726 17148 41537 9886
+51762 20902 33018 62718 4054 45495 19408 32891 53708 1477 42818 17688
+63811 29408 4703 50342 36771 18880 54328 2477 42569 24810 60264 12568
+34359 44557 7699 65287 23954 40495 11922 53599 20223 31314 59856 3985
+45298 18450 31008 53103 8290 34753 59324 14845 46258 27588 4889 51529
+37450 20804 65078 8493 34233 50241 18651 41014 3840 59003 30113 15593
+51817 36947 6000 56149 27912 15245 50885 36811 418 57312 23775 46531
+11889 40638 21546 63753 2552 33290 51342 17731 42955 8590 54276 20811
+35123 61161 1849 46704 20662 34420 55974 8875 42645 22558 59567 12370
+39891 25999 53288 6674 32388 64962 12843 42099 23166 52699 5287 32473
+54991 12458 41966 24081 61627 1863 47572 28639 16021 50982 35189 4763
+57985 29231 16568 49334 35817 6751 62895 26115 43105 10367 56690 20112
+34244 51396 5116 47532 19965 32247 63185 2218 42601 24002 54781 12200
+38961 22894 64047 235 36114 52247 16031 31868 45662 4773 62839 28516
+15844 38058 51875 6725 32892 65292 16756 47805 28099 2259 58800 36390
+10206 52098 25367 41251 13823 58070 29570 1568 53902 36971 14698 49499
+27960 3505 62992 36235 13929 46796 26152 61397 2110 30369 46744 17293
+52024 8277 33957 55970 17137 46774 5348 34867 58203 15286 45595 28188
+7570 60065 36436 18748 48456 10201 56234 26491 41496 5411 58374 19720
+34481 52018 2529 44965 19651 32915 60766 12247 48876 23076 39218 7310
+57025 24578 43623 12240 62223 22169 40510 222 54352 27236 38835 9626
+58022 19419 34569 46804 7757 65512 17020 59969 11539 44803 26692 40618
+2814 58957 24807 43049 11787 54947 21374 39770 5692 59366 24686 43447
+11146 60812 20220 30293 47882 7214 62771 19833 32404 44066 5717 52952
+17466 33239 56472 10217 44252 33039 17649 63286 3799 32632 50971 19564
+42273 10623 54008 27161 38606 2617 62128 20255 30066 45460 9329 58081
+23759 38548 1951 49808 19668 32979 63017 4462 42978 22061 50399 10933
+32138 60108 19593 47723 8181 41425 26968 53742 1731 31594 57870 20189
+45672 4559 32699 61854 19917 48817 7804 39142 26587 55508 10977 42248
+21522 62783 1539 40088 25716 48581 12468 58591 22077 40519 2775 53058
+21165 39439 11884 64182 25528 42934 1365 51771 19820 33960 62329 3980
+42589 24737 59274 13033 31947 50970 5755 42419 23758 56056 12082 40541
+21607 51297 3403 34770 62889 19264 45569 8588 39975 26536 60488 11518
+39329 21704 53603 2692 32998 56123 19471 47468 10720 30577 58144 17781
+44413 6946 32750 64890 18987 46194 9072 35221 61542 16145 30639 53061
+3923 42301 24829 64462 8797 32080 54734 16655 47907 27766 2407 63634
+37422 19639 52474 9247 42905 25297 61947 13994 37577 51075 4573 29476
+63772 18710 47769 11376 38901 22772 60772 5350 32698 54341 17886 46178
+9719 33555 57190 16888 45013 28011 945 61345 35697 19516 50710 5285
+34772 58276 20918 42396 9161 54958 26771 39593 3935 62222 21615 46710
+13502 33464 55358 7599 43209 24125 60797 11164 38490 21029 55388 7117
+43366 24959 64805 13575 33771 47924 6202 59821 22850 41282 141 49071
+26585 55008 12704 40232 24329 65482 6727 30114 48649 17695 56884 11932
+39384 26660 63581 4488 43660 24528 54329 12528 39963 22770 56686 6956
+38387 27219 60784 11578 47500 19948 33297 58768 6822 43315 22837 57271
+10305 36093 49503 16209 29357 61982 5841 46580 28093 14532 51976 37805
+439 57210 24788 44263 9783 34863 64493 12880 48313 23865 41208 1734
+62400 19499 31527 44887 10863 54183 17472 30014 56987 2614 46730 20752
+33028 62342 7371 49145 23698 41639 11878 47384 21530 64178 4126 33206
+44371 16946 61096 28504 6651 52741 37006 18261 48449 9688 60433 26831
+39095 4409 49012 22475 59436 11130 32195 44306 15195 53525 28640 6290
+62415 37359 18525 49350 4612 34038 61430 16858 44800 28208 287 56252
+35611 15843 48502 26485 61122 3593 38315 21797 52043 14177 34973 64051
+7465 42661 24022 55044 11584 40629 21833 64662 3747 32421 54112 14505
+41427 23327 52345 870 31108 61156 14761 44259 28115 9042 58587 36579
+17933 51802 5780 43419 27277 60949 14067 31764 48019 7297 55799 24124
+41012 10794 58763 19828 33040 53830 8849 43181 23932 57367 3871 40934
+21714 55356 12233 34455 46574 18333 60225 4556 33326 45331 19310 64586
+6979 41005 26284 52924 10843 32269 57842 19887 42315 5275 52652 21178
+33571 56193 10419 44001 20146 37211 63475 436 29981 44422 20951 56824
+10793 31763 43760 19949 65000 4041 32514 52075 16455 44982 28123 880
+61893 38014 15647 28701 48988 8344 64748 25575 38892 11275 56480 21850
+47237 1447 31535 55176 16821 45441 28556 3295 59264 38102 16302 30872
+48813 6992 63831 23168 41511 13661 54907 29348 2098 50473 37612 18230
+53602 5125 33701 48309 20022 57375 9961 38932 22685 61913 1239 47650
+30782 15905 52138 35126 3487 54803 26130 44320 14221 35323 57904 1467
+48889 24225 40021 11835 64475 22446 47613 2834 31284 60941 20704 41893
+9322 54579 26258 39342 1090 57020 23645 43906 9133 60047 17068 33921
+48318 4784 54866 24875 41454 11940 61578 17397 35567 51050 7674 30700
+56649 16122 45372 27810 515 62011 36651 15124 54399 28869 6393 49619
+35431 17063 60971 8957 34148 51272 14702 41153 24705 53441 143 31779
+64675 15111 45019 28157 6346 53052 36386 16355 59371 29259 4744 49938
+35205 17215 63087 9827 42634 26875 55218 4529 46903 29377 15067 58386
+35873 5982 49567 18135 29750 56538 10956 41169 23143 53249 20 36156
+64834 15576 30838 46742 9080 61214 25799 39029 13329 54975 25077 47453
+1217 31853 62024 18630 49203 6254 41498 26138 63917 12490 40444 22980
+51137 596 33653 60817 20382 46359 4614 35827 55900 15318 30020 51673
+2441 43248 24983 54042 7616 32198 59292 17947 45323 12986 36057 51414
+4761 30638 57492 15879 44409 28626 7459 60789 34628 17691 49475 1166
+32846 58161 12735 44425 24066 40205 2705 56161 29318 15442 50407 35895
+8860 59301 26539 42797 2166 51294 29340 14921 62023 36633 8101 48120
+23040 54587 9981 30452 45451 16070 64587 28261 2760 49559 35806 18773
+60372 11241 48257 26609 39343 5479 64098 30579 16879 52557 35571 540
+48330 25962 62796 12449 39732 21956 51810 2618 31766 54693 18977 42529
+8508 61925 27153 38590 11388 47905 21736 58877 3987 32211 45353 17051
+52606 1203 31558 60777 21270 46121 8027 35379 51214 15650 30915 58973
+363 43012 23904 64964 10729 39578 21832 52305 3201 30552 54977 14008
+41439 25567 64324 976 30745 52278 13962 42212 24104 58215 2865 37479
+50896 16958 29958 63399 8889 45977 28998 16261 60810 37153 5198 51118
+27434 16207 55494 38086 7065 29195 57660 20892 48786 4301 40352 26283
+63605 12726 34851 51881 8986 43981 28618 16738 60638 36223 1153 52631
+27784 16458 57892 37793 8937 46951 24474 55153 12559 34424 45349 1519
+65357 29055 15748 53698 35298 10575 47263 25520 56485 541 34142 45776
+18069 64631 9394 39191 22926 51422 2501 30795 58268 14919 46317 27396
+8561 52237 36768 11979 63171 24433 45728 7511 40115 21208 57776 11051
+47027 26996 41460 5901 56955 30126 15164 49534 37189 443 59354 23875
+44707 13299 30731 47787 7659 61851 34780 18613 44835 11071 54462 25965
+40916 4144 65465 20339 33169 47993 10405 55740 25278 39444 1616 58321
+21435 42928 15542 51917 29351 3404 64639 35769 17685 50454 1714 46746
+30564 15139 62480 35472 10101 53169 25657 42567 739 63209 20102 30455
+51698 8556 42298 24660 56550 12648 39157 21449 50974 53 29942 62170
+15790 45559 27692 8636 65414 36881 18002 49641 4147 31245 58787 14317
+46295 27370 7683 52903 37491 17813 60802 2201 44566 29662 14988 54214
+37461 6603 56757 23647 47087 11256 34276 59593 19155 44635 3003 34925
+54319 17712 42380 6006 62389 28792 14945 50876 36253 7751 64205 27317
+14570 49839 35200 10205 55963 24753 45550 4256 30657 58761 15743 47110
+27816 9928 62495 35723 42150 20992 64749 29023 12606 50278 37365 6916
+55849 25719 46345 13735 33275 64342 8974 42786 24057 57370 12225 40116
+21834 63384 5389 31115 51907 13401 41706 26034 54129 4431 37702 57122
+14892 28327 49879 6840 35535 58910 13332 47390 28228 16673 63712 37833
+5235 31081 53190 21045 43461 11006 65319 19732 31410 46428 901 59846
+22893 40937 14092 53761 28671 5642 63969 37386 12842 51926 23245 42746
+9602 58372 25102 40657 4102 65128 21898 40593 12917 56319 26819 47800
+5423 33780 59686 13288 42697 22881 56847 3524 30693 47416 18918 64015
+8154 39235 24792 47677 11679 56318 21446 39657 653 61483 29932 15995
+52576 36781 8019 45030 23719 65299 12419 39302 22352 50410 3100 33379
+62952 14701 45704 27782 7341 57042 37658 18890 52895 2436 43228 22762
+59120 6571 33738 52754 17647 43761 9184 34461 56196 13947 43108 22364
+59024 5256 35067 49764 16244 29555 62758 7719 42694 25913 53306 13215
+38930 23060 63584 6570 48388 26268 38677 10881 62080 19377 37049 49684
+910 28464 62893 19936 42070 10375 52874 21180 34778 59504 3473 47230
+20506 36289 54218 10869 28785 61711 20214 46192 6291 32645 64700 20060
+49039 9942 41577 25863 62598 4061 40384 21303 54747 12187 38923 24072
+57505 5575 46937 18401 32557 63275 1913 42674 25350 59078 12288 40750
+22722 52509 8040 34026 57276 17036 42892 1425 55833 29101 15246 49982
+36900 8105 59449 22426 45415 14501 30571 56476 4000 43165 25377 59426
+9552 34917 47103 13322 57539 23938 40737 4527 52760 29978 15803 62973
+35975 8200 50226 21037 34782 62206 10724 44149 19908 36921 54529 3768
+29208 63288 20688 44797 9328 33737 55903 13960 42061 25696 50738 6324
+34545 62292 19298 45171 12556 34654 59500 8673 46604 20681 34127 56189
+4979 45357 19095 32390 60441 7508 43814 27447 14903 56815 37338 3674
+52806 23201 41855 14151 58590 28742 1238 49796 36154 17506 62761 9299
+33485 52582 13937 43484 23292 58769 623 31252 54782 15662 45575 27348
+4810 56486 34944 14818 50519 29060 7981 63344 35317 18868 49758 3183
+31536 61844 16711 43777 27814 8157 58178 36439 20915 44469 5665 63037
+19252 30713 43811 12310 60793 24852 41051 5104 55262 27233 40736 11998
+63859 20310 37663 50196 3905 31445 59889 14170 42119 22946 54495 1582
+34072 48190 13513 65438 24305 39702 2430 53307 18926 33692 62628 9678
+45930 28276 16921 53856 35618 5192 63685 27701 16123 49845 37303 1749
+57963 25006 47150 8611 35968 59699 16716 28766 45934 2774 54179 22418
+41085 13439 63853 30816 6096 50054 35647 13010 61261 23897 45437 8324
+40121 21868 56035 11809 43401 25514 60375 4288 39610 21261 50518 13387
+33553 57761 6400 45844 27986 16530 61704 37728 2868 46788 23684 59795
+11661 41506 22238 55415 7255 36639 49904 14601 30741 57481 2670 44775
+27653 15974 60504 37426 5832 53952 28847 16459 49569 35550 11230 64117
+25277 46498 4823 33402 49027 18491 62561 9109 30822 44118 17339 53681
+4342 31316 63643 20945 47602 9333 31937 56004 13447 41707 24478 59620
+625 39916 20702 52958 28958 4813 58554 37731 19077 50445 1678 33331
+61874 18190 40850 7407 52540 21490 31944 55953 696 17329 51845 4185
+33068 57697 15678 44271 27698 2336 61081 35500 19260 53460 6140 41458
+23313 51009 346 31807 55859 18133 44891 9264 33853 61200 20772 46130
+7343 34712 59744 16813 30370 52136 712 42689 22191 64992 11262 33457
+44732 2486 55615 22530 40802 12300 61118 26686 39299 2974 51732 17331
+34698 56184 8602 47857 26357 38435 11555 57921 21673 49212 3440 33797
+45997 16925 60604 28692 2292 51043 35613 17903 47440 11096 54928 27278
+38362 1234 61395 21117 43077 11526 52904 29189 7269 63417 36693 18084
+50267 10503 42629 23402 53703 2039 32785 60762 16574 45233 28526 5226
+51395 36148 18549 59585 9540 33405 47759 20642 56797 2103 41546 26839
+59446 10172 30859 52988 20757 42259 8770 60611 29183 16584 49834 35145
+6054 63988 24265 41365 11815 50927 18834 30960 61035 4379 44878 27672
+15386 65170 36328 1878 51253 28748 14737 55328 36561 3353 46733 23866
+56585 11504 39820 21452 59959 1427 42609 27119 54469 12375 40169 21858
+56663 4919 47591 29760 14549 60382 35892 8405 53704 25435 46083 1943
+31936 65480 14430 44992 27553 8437 52184 37873 18635 56566 5145 37108
+49653 16759 30300 57649 1824 45210 28178 16035 52378 35345 11037 60165
+25020 47134 634 34576 65191 14010 43404 26096 53821 7222 40714 21597
+56409 14119 36120 50152 4872 31499 61594 19674 45911 6366 31243 64998
+21160 40655 10629 54035 26179 43102 4400 63443 24537 39931 10049 54160
+17941 36550 50279 6879 28759 61073 16979 45401 27335 1315 64230 35285
+20125 50864 10596 42726 25831 55716 2143 30483 47255 17838 56707 6127
+39894 26374 60032 11505 48188 17608 36204 51933 2425 29071 61777 18600
+47826 5124 30572 60271 15537 47002 28109 1767 56835 36541 17889 49610
+4274 29886 62799 13426 41245 25090 54422 11064 38806 23163 64020 749
+49051 19022 35521 55614 13044 29601 47539 7186 65020 20689 30753 46343
+10551 59544 24504 39884 3078 56099 21950 39063 8112 50455 34168 14453
+65522 27988 6265 49382 37350 20061 62214 11512 46716 26194 39309 1910
+57028 22608 42233 13775 53308 28800 6232 60056 36760 13121 48733 24135
+54528 3430 32573 46064 14651 58994 27597 2251 52182 37635 18417 48669
+10063 58426 26504 38464 1058 53123 18303 35577 55871 9714 28744 45765
+19685 62773 7048 31070 44769 16693 59096 28750 5184 51812 37893 16029
+29661 61438 8626 43799 22675 51001 3135 33832 58240 13016 42807 22664
+52504 6565 32686 60551 19540 42930 12202 55980 23462 40280 5439 61662
+30219 14472 50792 37541 7761 57506 24021 46222 11592 41683 21823 59021
+1103 33463 54097 16255 47433 28129 5177 63430 37950 16133 31196 56667
+9289 44134 25168 52230 2401 31014 64884 16063 43962 27321 8962 54613
+36487 15655 51816 28469 4451 64356 37865 16432 28584 48277 1791 61551
+24729 39839 11609 54588 19245 30187 50472 7450 34857 63301 19346 43199
+1273 55589 26914 38855 7903 57429 21584 43390 12922 58880 26202 39936
+246 53051 20535 34607 61188 11601 46443 25035 41084 1799 53174 29346
+15903 61635 36383 5262 49661 18009 32619 55670 9431 46006 18005 36239
+64900 11232 28876 48060 20901 56582 5382 34595 44857 19357 61147 11016
+34304 44725 63981 21159 47227 28427 7266 59887 36999 13298 51131 24017
+43134 8272 62205 23805 39566 11144 58263 21501 46940 4878 37321 64895
+15445 29794 48022 2531 56282 28163 16388 49705 37871 8300 62362 24213
+47021 13557 39368 23588 58473 5939 30824 52762 18922 48048 8160 33240
+59319 13560 44010 23797 63105 6907 39922 21979 53124 1711 31326 62325
+20049 47271 6559 40123 26134 64728 9874 40017 22628 53877 13550 31652
+57456 3786 42723 24427 63699 8339 39988 23150 50788 15140 34519 59039
+2708 47001 24246 41810 13863 54725 34220 6591 61372 27777 15020 49591
+37222 8754 55447 23594 42388 12356 64720 21928 40932 3416 54303 31324
+12894 50820 35231 18585 61673 5129 44921 35147 17252 55608 1085 46824
+20000 37025 58332 3908 31098 51665 14266 42398 26852 60166 759 46484
+35025 20624 57663 9485 30493 48496 19660 54227 7390 40124 25446 62340
+9934 43603 18271 52810 30574 6189 64470 35324 17979 49817 8921 34610
+56259 19501 46341 3089 33646 63881 13582 42791 22780 51186 6514 31161
+57053 19086 48002 11696 39468 26456 58364 4387 37079 49899 16300 29732
+63184 484 46849 27480 15637 60613 37866 8379 50344 27462 14319 64077
+38180 4873 29953 55908 20314 44653 7481 33076 53119 19775 42193 11059
+60984 23426 38652 2876 48744 26584 62468 10986 39983 21516 55269 6
+39256 26861 49112 11877 58792 18484 34234 47694 2668 60837 22095 38561
+12316 48647 26874 56768 908 41693 23008 65298 13143 34355 52607 3620
+44073 27872 15285 56157 38069 5434 31354 60138 17700 46145 9282 35219
+65035 13858 42035 24641 53818 695 36146 50285 15321 29639 64573 4756
+42200 24291 53470 11382 35050 58211 21061 43901 7340 34029 54573 20413
+42220 11312 65350 26508 39415 8192 52721 19127 32325 61055 2562 46112
+18663 31859 58953 7899 47893 23732 39862 10718 49508 22216 61120 2055
+34968 43868 18855 54905 5898 37063 50475 12787 29700 63755 15922 46887
+28075 4091 61050 36799 19522 54448 11008 42615 23478 51910 2864 32407
+59696 17760 42496 7018 48972 27011 64677 10097 33837 45978 20021 56028
+204 33393 45841 19170 64197 10967 40466 26139 57305 7799 48179 29224
+16484 59884 36112 6954 46490 23687 65194 14137 32035 44321 5766 51006
+27638 15385 61987 38098 2738 32744 56642 13851 49271 26023 41039 617
+55676 22209 43574 11991 60438 25866 40957 6430 54764 25022 39443 11703
+60100 18043 30108 49495 1008 41238 25268 64467 10473 39273 21678 51135
+3532 32509 54887 16200 45095 27305 4 64954 35590 16414 49693 28050
+3496 62700 36414 17672 52314 10263 42861 25125 61900 7762 30776 51597
+19721 41444 410 59724 27077 38700 13623 54545 21192 47404 7108 36896
+59303 14912 29924 47848 1143 56205 23497 40883 11245 58930 26125 39530
+5847 51718 18453 32206 58401 9363 45708 17268 32246 62324 4580 41367
+24138 53353 10110 38541 21776 59815 13094 48301 24677 40374 3061 54463
+27019 38468 9666 64641 22273 43725 14166 50862 29872 5028 58253 37075
+16449 49768 28106 7986 65452 38143 12438 31085 48194 20273 57580 6648
+41863 26014 60415 2409 31758 52176 17097 44275 7169 37498 62797 14787
+28840 47614 3034 55352 24115 39645 8956 19809 49816 1383 32507 55627
+19181 42047 4881 65117 30149 16408 53829 36661 1990 48503 26089 60485
+12924 38554 25355 54405 7730 49213 21716 40652 11568 62057 25143 44340
+4148 36816 53147 15190 29162 60045 2017 34779 51208 12122 45168 28340
+16305 62706 37983 7 29618 54559 18161 41282 5396 56820 27089 38530
+10399 50309 17100 33506 59146 7947 44452 28242 15547 56065 37888 310
+31716 59590 16289 45921 27735 6092 52568 37131 20499 58307 12008 43683
+26553 55427 4317 39874 21338 62438 12038 38546 25729 51021 549 31717
+56249 19488 41917 4425 63622 30681 16263 50779 34827 1465 57859 25825
+44552 7882 37685 62487 14971 27896 45370 6865 56145 25138 39697 11044
+64307 21014 31801 51036 8081 43430 23495 62422 11481 40404 25423 56376
+7574 38878 21804 53217 10774 32025 63335 17949 44528 3804 33186 56240
+13442 43289 23030 59517 286 38540 26803 48057 12129 58475 25265 40403
+2392 47675 22395 60919 14830 32595 44241 7410 58389 28197 16621 50067
+36506 99 61328 25830 44830 15231 33013 64359 5519 41363 22139 53935
+10713 32868 61369 18298 44492 6924 34217 55561 14284 43912 32331 3116
+59445 20856 32030 53793 9297 44802 17934 33542 57861 1548 48433 27579
+16034 63555 38064 3951 30543 55830 17565 47610 8403 35251 58540 15403
+30768 52055 4484 43569 25319 63747 14193 32450 45540 6938 56664 24761
+39808 10089 54372 17717 46357 30676 6003 61944 34823 18610 49731 8529
+31216 58285 16174 47923 29192 6368 53842 36213 18816 61686 12257 43740
+26844 51347 3371 33782 58365 19983 47589 7708 32362 61634 18829 45251
+6529 33045 57143 18645 45219 8887 32858 61143 17378 49227 1071 31894
+45953 17183 63149 3968 35680 50256 15943 31057 59275 57 43406 23777
+50850 10539 34701 56951 15971 43910 27786 5914 52627 36658 12619 64724
+26314 44990 5364 30278 57637 16050 44905 33822 11167 61763 25846 44801
+276 32824 56542 18742 42773 9258 50159 21001 32713 58394 1629 45797
+18452 34051 63032 8700 40822 24247 54225 12972 38272 21168 57709 4334
+34989 52835 14997 43979 27563 8786 61421 37583 17343 51603 3842 43994
+30957 15793 53125 36219 1250 63361 23373 43905 12968 33938 55078 3751
+48973 27671 16570 60356 37625 7859 53801 25188 47615 11727 40267 23918
+63374 5443 38840 21245 50537 10115 35449 64706 16996 32757 47654 2008
+57504 20267 32197 51715 4864 43306 25935 62333 9463 37242 51256 15102
+30983 57583 7125 44970 28369 15032 62868 37327 5754 50127 28318 17028
+58379 38222 9448 31127 55155 18690 43094 6612 60172 29038 15767 38116
+50295 4160 32569 55526 17278 42141 10365 65384 26057 48147 4821 40277
+22964 58015 11335 39210 26415 63701 5183 41804 22203 50915 13459 35962
+62499 3646 31248 50239 13257 42846 22981 63968 7637 34440 53357 20697
+41954 605 56018 25912 47619 13552 32795 64744 3362 43637 25635 51084
+8941 34037 62914 19515 45686 6327 32039 60945 19320 48685 2089 41247
+26373 56927 12580 39757 22434 60311 3121 32116 52166 14583 42759 25464
+59041 1126 40584 23286 54029 8668 34956 48142 20421 63465 10411 34266
+47116 21131 58221 71 32103 44161 16594 53429 30082 10269 59089 36152
+28787 14451 53110 37689 8473 47770 25236 58636 12462 39861 22378 49863
+9302 29874 56640 18507 44481 3739 32655 63908 16763 44011 28657 932
+59147 35672 19255 54673 9903 32801 46034 20512 63547 6953 39706 27016
+55122 10301 38587 21460 49128 4472 57915 24970 42089 9953 47143 22708
+63615 14402 34192 52422 3612 43820 23336 64427 12499 41571 25183 54813
+4312 40705 22017 49055 12094 62806 26133 41276 9372 50614 17216 33005
+64383 1000 46579 28652 15802 52131 36544 10040 59999 22570 43531 6165
+52615 30375 15893 65242 37026 9140 47644 24998 58789 12898 39208 24250
+47892 5775 55089 21654 40401 11085 60020 30755 16789 50009 36105 221
+59102 29095 16056 49383 37666 3662 54144 27377 16425 58619 38227 1686
+29691 53660 18820 44187 4925 65060 30164 16282 49949 37076 2109 58680
+24266 42253 11716 51156 20373 35967 64709 5037 30963 50005 14915 41340
+21369 54649 5578 33091 63022 9814 43345 26438 52591 13090 29982 65379
+4271 40993 24750 52603 10338 31976 55353 12536 41934 22269 59114 3223
+35373 50839 13510 42806 24168 57701 1305 40173 23068 52934 13256 30912
+64997 7915 46264 27852 16474 52463 37017 5553 61436 24160 47783 12920
+39676 22858 59157 6600 36330 49881 14488 28975 60624 10776 42922 22815
+54284 1064 39519 25651 65506 11348 46556 18998 33830 57853 8571 41912
+22943 52332 3503 33918 62751 16453 44827 28268 1656 58889 37494 20023
+52217 9572 42393 26392 63212 2423 34126 45032 20513 59793 10878 40291
+26238 52996 233 39635 22482 63890 9929 42173 24745 55465 12905 30302
+52581 1725 43346 25049 54656 13362 41141 23535 63686 2938 47859 25583
+39940 10852 57730 20405 36229 51431 7631 29215 58665 20687 43031 10574
+53413 25988 38424 7225 61592 19592 48174 30381 3425 63489 37901 13570
+46929 24326 60164 1083 40386 21342 54622 13667 32049 49110 3297 63196
+23916 39286 8651 48947 22345 60423 12451 40486 26282 52177 5482 30548
+64366 13204 41533 24916 55495 4557 35904 49563 15112 29830 60130 729
+47734 26374 41741 10709 63280 23508 48390 2785 31267 58309 15910 44570
+29177 7208 54895 35629 20059 62257 10156 46861 26633 40365 6329 56745
+19649 31494 48005 9708 61476 19183 30550 43742 112 57926 34264 19176
+51276 4415 42625 22300 59628 14450 34193 53482 8097 42842 25162 58618
+3614 30770 52944 14882 45665 28330 7578 63803 37055 19018 49709 14060
+31288 56092 3328 46582 28450 16607 61408 36094 1875 47940 25507 56502
+10792 34893 44192 13905 60512 27516 2598 53523 36926 13832 47273 25397
+56870 1301 31634 46461 19085 63975 11186 39495 26628 57500 2615 38366
+21617 52833 12369 34040 61259 17547 46239 1911 31698 55419 20411 45146
+7636 32150 60383 19270 43408 9073 56656 28993 16285 53919 36782 2455
+46803 24176 57960 9788 38635 21980 50785 14309 34195 60704 6639 41785
+22863 53633 11444 32073 58455 18072 41127 957 56346 28647 15269 51061
+37109 8687 55665 28611 15960 49819 35563 5596 63557 25361 46348 10618
+39332 21152 55479 6428 43918 22283 64357 11721 33334 45874 17425 59726
+4630 30891 43787 15200 56085 28025 6007 50677 37183 17992 60388 8221
+48297 26389 41309 3452 63251 33937 56914 18114 44975 4349 31992 62347
+18039 43160 517 52219 34864 20381 62912 6818 37900 50440 14476 29818
+57667 11857 47267 27299 6228 51761 37369 15251 60715 28430 3164 49823
+35599 14175 57090 22880 43545 1242 65432 26212 41829 14068 53560 30322
+7568 61654 35170 19774 50206 2287 32216 58701 19191 42367 9287 54021
+26754 39119 1413 61382 17317 32042 45806 8878 58096 24358 38416 2770
+54373 19753 36513 60445 7864 29652 44520 19204 56961 6695 39082 26963
+50411 1817 30566 61588 14762 46227 28405 3887 55160 35396 18986 44911
+2222 60464 20776 31959 44121 8363 52130 29276 15098 63284 37521 4172
+46133 24253 54890 9887 41072 22199 65448 6362 31344 52812 14380 46140
+28406 8600 63219 35772 17224 49767 6615 32923 60815 13700 39885 24105
+55192 8630 46623 28802 14054 61857 37592 5917 53615 25263 41920 10104
+57664 18916 32884 52453 2935 43227 24768 60660 13676 38730 21148 50408
+944 33719 57558 19993 44584 8427 34065 59750 21011 48498 1780 39081
+27069 63306 8103 30636 53631 16264 46248 28203 6190 61966 34946 19777
+50422 9910 43092 27171 59023 2385 35358 51587 19343 41582 10401 62970
+22900 40475 241 56830 26950 38564 9802 51858 19189 30965 64401 2366
+45296 18233 36110 57058 9096 29694 50247 19171 43318 5133 60430 32468
+17322 53953 1987 36638 49286 15150 29260 59649 9271 43254 24299 54785
+13330 34482 47538 5152 64605 21095 31482 46276 11645 53978 17453 36998
+57173 4151 29607 47187 19209 62259 8245 31715 46606 16226 57018 28335
+2959 50265 36201 17854 59373 9050 40749 26882 60690 5466 38624 22083
+56246 9504 36882 50583 14673 31587 62428 4328 44670 27404 14111 55817
+38150 1932 31678 64380 18477 47286 5233 32797 57177 15584 45321 28357
+9166 53786 35949 19034 56424 7023 30932 49968 14986 34575 59487 4609
+46497 24029 39437 10371 56628 18127 35262 51534 6425 30112 57933 19462
+45167 2488 34735 54141 17860 42551 6697 60725 28954 15984 50803 37669
+7913 56770 23804 42753 12625 62009 22809 39304 6417 54566 19430 32926
+45465 11904 64806 24682 40058 1488 48848 23017 59244 12277 38894 25012
+51953 4856 31999 65017 13896 46281 25110 40013 2646 49375 22820 64061
+13363 32777 46067 8430 54987 25993 39044 12322 63589 24667 43753 1343
+56966 29509 15648 49602 35908 9124 61814 23847 42751 11412 54355 21742
+39941 277 58566 34714 12493 45290 23933 65239 8144 40422 23442 54567
+12979 43424 21467 52377 4816 31178 63351 19218 45683 8882 32376 49198
+20797 64336 7000 32682 44776 12791 61061 23909 40558 4831 54501 22744
+48176 13634 33587 62539 8267 43598 25025 50928 4049 32558 56869 19276
+44468 8773 34364 63042 14753 48606 28134 311 52635 36805 16852 62028
+27652 6647 49608 37852 19666 65317 11545 42358 26657 59852 5330 30992
+52757 19440 45860 1826 36090 61819 16190 29722 50174 7146 42869 24099
+60224 11811 33471 46969 18708 64037 2816 39025 24551 47495 11150 59222
+19802 32245 51629 501 43212 23784 62500 13262 33141 48712 3924 56715
+26450 39398 10725 52742 19629 34383 62001 2806 45478 19265 33665 65297
+12368 41975 23388 52850 5166 32638 61451 18747 45194 10949 31365 64663
+20831 42225 7563 55141 26562 39168 12963 60743 22992 47525 4634 31247
+55493 15491 46218 27913 1830 61566 38083 16866 29785 48641 8084 64542
+22565 41211 12565 55969 26078 47238 5361 31523 59539 17316 40333 9461
+50869 20229 34005 60527 3071 46387 23348 39888 11272 57318 30048 15548
+49449 35999 5862 60531 20745 33271 46944 11163 56373 19861 35595 51113
+4762 30568 65272 17536 42171 12865 47181 26650 52225 5126 33606 63164
+17080 46161 11720 33395 58992 21174 42236 8401 54340 26707 39001 13147
+62547 21425 49185 7111 32628 48032 17944 64479 11465 40710 26062 56970
+900 48721 19312 35549 61063 13087 29787 52099 2918 47024 19546 33979
+56349 11324 43191 22991 61392 2332 32999 44817 20586 55018 11280 41193
+23137 57792 414 48135 30928 15852 59934 35488 3313 51934 22759 45238
+15977 32449 63797 1089 47576 27853 15585 59749 37434 9156 46376 23601
+55798 6706 41228 21999 64045 11050 31428 48331 17759 55540 3701 30735
+45769 17155 61700 9609 31670 51094 14205 42052 23458 58200 4381 34992
+52310 18749 42397 11127 64146 26427 39376 4087 55789 21923 48007 14541
+33558 59875 6486 43379 25648 54937 12167 31265 46228 17367 61693 3563
+41901 26333 53412 11462 34459 59812 20921 41852 5936 52403 31435 14346
+61816 35491 7707 51122 25019 42166 12049 57007 24653 40634 5477 64120
+18661 36011 50846 506 30807 61716 15815 44323 27951 7876 56682 36349
+19299 50997 1151 41638 25621 60922 9751 32038 51412 13975 42766 24654
+54004 5869 34212 64876 13456 45287 20747 32576 48579 4940 62786 19336
+34154 46254 11533 51442 17433 31368 65457 339 45076 27440 16380 55258
+38192 6741 28853 48643 19853 60243 8947 41110 26602 54583 11773 39194
+21500 62518 1321 41156 23484 51545 12987 32877 65123 2637 44612 27579
+16641 61679 37097 8392 52688 26768 42256 12314 64548 21988 48673 1501
+41884 25108 61968 12960 32347 47233 8213 63952 25216 38667 11226 56352
+22289 46620 1138 33551 65144 16631 45024 27859 3714 51958 35182 16023
+59298 29744 2443 49760 35797 17620 56589 5679 46841 19385 35167 60199
+8965 30476 54164 18683 42447 677 50418 34287 21002 57772 9442 44437
+18336 35144 59185 7454 28548 53421 15223 44268 34816 3194 60491 21782
+47341 6676 32221 52429 18975 39849 10389 65042 26121 38812 2306 51259
+18159 35620 57320 6188 30319 48116 15153 63049 24971 39349 4608 51851
+18688 33357 56964 1412 42588 24242 60760 9474 39626 22750 55652 14275
+37080 50665 532 29390 57839 16293 43943 27428 3819 55410 36877 20583
+50477 9281 32861 59612 14652 43190 25686 52067 780 31723 55952 19341
+44724 9932 36965 64770 16437 28768 52885 5346 41391 23282 58199 9836
+33455 50727 13018 42204 23353 58598 3384 33817 46399 14808 52156 27759
+1015 56825 36738 18008 48161 8952 62800 26595 39677 10599 56214 22000
+47885 3742 36106 65164 15082 28997 52632 5080 42458 23280 54087 8368
+33452 57528 14515 44475 27641 4645 60621 37563 18381 54511 7842 46913
+27274 38454 14455 61432 21400 38311 1440 47354 25415 58037 7868 39128
+26788 49021 10606 55459 21896 39461 1766 48645 25748 58685 11875 39866
+22101 51710 982 28376 59463 9248 46421 34931 17521 52836 2462 37137
+57967 16147 29307 44357 7951 65232 24137 40090 10830 52779 19762 33456
+58134 3902 44794 27868 14608 53797 38006 240 31726 63167 18340 43156
+10620 52526 21547 32973 62785 6187 44448 27756 16680 55596 37309 9039
+48664 26404 64779 542 41529 18065 52697 29651 13036 63783 37166 2555
+49682 27575 15624 62098 37444 8043 47201 25349 55722 730 39084 21705
+61063 11237 48862 24998 41041 2348 57710 20125 30781 47579 4499 65062
+18168 33351 50685 79 42143 25105 56076 10739 39563 27090 59492 5190
+46120 28784 16608 54441 36452 9272 46658 22559 58702 6170 31588 44837
+14528 63886 23056 41441 4998 57681 29918 15553 50902 36061 9020 59738
+24886 46952 4240 35204 64481 12900 29261 45773 20511 54149 5844 41202
+26104 61455 12700 36809 50099 8155 28819 56025 14310 44056 27307 6137
+62667 35779 16926 51038 28373 2032 58915 37927 15701 28611 51693 4681
+36470 62343 13389 42086 23851 53458 6386 34602 56382 19007 43073 2715
+65051 20638 31646 47130 11821 60463 28776 740 51426 36853 17966 46240
+9045 61078 26005 38783 12840 52375 30267 1722 64607 36283 20370 49579
+5289 33432 55607 21003 40380 8240 63451 32104 17237 50764 4269 47073
+28372 16239 64816 37392 720 54689 28062 16660 49323 36299 3299 63003
+23432 46299 13690 37304 53046 7964 28677 57736 20211 46047 11123 38939
+22103 60472 3076 33337 53462 17099 43585 12018 64299 27160 38709 5067
+57605 17624 35553 49864 2114 29906 60641 11165 43639 23394 53322 852
+40971 26988 56846 13072 30758 53942 3411 42761 24856 58007 10050 40282
+20671 53111 30427 8325 59754 37219 18691 51223 3441 33167 62113 14790
+39500 24510 51068 4642 33413 56001 14496 42570 26775 60678 6709 46676
+29564 16851 55443 37531 10715 47820 22879 57965 491 30101 44962 18589
+55145 6642 38295 27177 60053 14384 34199 52499 4408 41342 21357 55263
+14917 34097 48359 4956 59525 21264 38629 14331 52542 29532 7575 56168
+37246 19553 47607 11295 61618 26022 40994 7849 55110 22027 40065 11073
+63995 26523 39046 4008 48146 22186 62647 14250 34622 45410 7889 61111
+28021 16108 53686 37718 3618 49880 27407 16588 62171 38140 1662 30961
+48639 19619 55377 9319 40670 26568 62961 13802 35028 53857 5595 43517
+23110 59954 12654 41065 27178 55336 4184 40589 24616 60602 12691 34164
+46092 7382 55104 22255 41045 11747 59356 26076 39005 6464 50724 17398
+33029 64738 2844 48139 25374 41552 11106 62470 19766 37705 52707 8116
+29345 61470 14418 46364 28219 1986 64619 35804 18454 53605 6483 34263
+46936 17730 62133 10934 41295 26443 57748 3205 31997 50539 13053 42794
+25515 61607 1578 37007 53751 15485 29490 47621 6088 64240 20621 31232
+54153 9795 44668 18040 32017 63358 4688 44100 28552 15552 51622 35726
+6247 57615 24432 41214 12657 51182 19823 32739 58262 167 46177 19735
+36570 62303 10862 29107 51533 19895 41853 1620 63154 29524 16075 53550
+36007 9999 48805 24047 65070 2548 41474 22128 57269 9194 49296 27174
+40856 12139 60818 21773 47952 4438 33020 59342 15620 45050 28154 9593
+63674 34854 17528 53925 3991 46414 37849 15820 33509 54871 5667 48478
+24190 40368 11403 63858 25766 43576 5319 51010 17831 31860 56381 1302
+45533 28204 16046 60177 36172 5864 50104 20629 32154 61789 9048 43554
+20622 56506 28682 4746 49558 37262 20383 58558 1658 37911 53317 15076
+30971 47549 4129 61861 24623 38874 10831 59054 19934 33095 47057 6597
+55623 24290 40336 10004 58970 19134 30335 52847 5453 41530 22965 60029
+10076 31804 52795 15207 45848 29098 5942 63539 35335 17552 50950 9071
+34999 55070 14064 43888 27589 6965 60088 37565 19733 53267 12213 43053
+22120 64009 3228 35815 50629 15212 30737 56347 2397 42401 24389 63062
+10786 32982 51045 18839 42201 1857 55329 27117 38379 12191 47972 24109
+62615 815 41435 19101 52448 30492 10139 56821 37347 18603 49650 2662
+34171 62728 17434 44392 9038 33197 54723 19339 43265 1635 64970 31278
+17081 51884 37614 4062 46950 24070 57771 11179 40615 23983 47999 7259
+64647 18750 30850 45537 9249 56971 18405 29876 50767 556 41157 25593
+61162 10109 38636 22591 50526 13297 33958 55346 5726 44539 27390 16061
+56309 38220 6744 30698 63614 21028 49308 3044 34473 45600 15892 57948
+27560 8701 50400 37834 17026 60923 11711 47029 18863 34812 58748 1298
+45740 20330 36708 57936 8887 31774 51853 13111 43260 25496 58963 6350
+41358 22313 53369 10345 32863 60921 20143 42913 1485 55870 31199 16127
+51435 35724 5846 65034 25114 48807 12797 40382 23248 57804 4445 34888
+52050 20213 42009 8724 48406 24955 62998 12407 41679 22107 54646 7320
+39355 26851 58038 13798 38655 21228 63504 6055 35086 50841 14548 40034
+22967 60992 7429 32095 50154 18415 42740 2293 63205 29286 15484 49811
+35544 11023 57357 25591 42304 644 47627 21870 64672 12253 39642 25577
+54110 5522 38414 21236 59114 13669 35729 50794 3958 29020 62752 19596
+43789 9265 31811 48777 13344 63471 23675 40678 2975 46973 21553 56200
+11474 39113 25893 61129 98 42929 22954 52553 13125 31578 63449 9834
+42280 23100 50520 2035 32903 62591 17718 45735 4596 33427 58294 15143
+44530 28583 370 52984 36988 20507 57975 12158 43349 27270 51174 1963
+33052 56081 12969 41685 23066 58546 5973 31836 45400 14471 64400 29210
+6870 51615 35473 17606 56794 11598 43247 23483 61079 4135 33827 50691
+16563 46320 28563 487 58690 34847 18740 50777 8337 44015 21917 62604
+14649 32306 50594 1207 41326 26290 64220 14437 30522 50223 3512 34403
+62055 15644 45807 27837 8488 53330 35998 20686 58432 12774 34500 46538
+6303 59564 21179 33262 43783 4464 51476 19739 36305 58246 9608 29729
+49623 13305 41925 24420 59691 2943 38599 22189 54007 7955 34808 48219
+15107 63769 23346 39154 6572 55319 21447 46560 10528 33984 60537 19704
+44652 2288 34169 57241 12853 41623 24925 51117 6851 30287 59076 20547
+47740 11977 40572 25527 61478 2100 32427 53451 17735 42752 4264 63763
+26816 39298 9335 55996 17163 35155 49740 5727 31207 59712 17866 43720
+9100 50552 34884 19511 58476 5188 45724 22763 39605 12203 55206 26927
+45022 6020 34119 63817 14265 42664 24482 54488 284 40542 18331 62643
+29436 8600 51338 36867 18831 56805 6047 44679 26570 38884 10621 62456
+19464 49143 13845 31155 44665 3331 59987 29251 13629 53610 35254 19124
+46904 6948 62549 20931 36263 54186 9460 30093 46965 13244 64308 23991
+41227 2934 54776 17197 36064 50704 11484 30147 61160 17921 45231 7068
+30948 65138 16098 45102 27448 8479 56511 36597 13706 51906 22897 42610
+2020 54409 28666 15075 38108 63193 3624 31481 50637 14016 43239 23754
+55252 1271 34631 46514 18871 64183 11892 35137 44166 18119 56133 2848
+41234 25870 59646 11874 45208 20790 31805 57063 1438 48054 29034 15178
+63031 36413 4739 48223 25905 57802 10200 38751 24130 47486 6548 62158
+21697 39385 12476 54032 26226 43230 5565 60375 23739 39615 11546 64852
+21538 49166 8256 40520 26153 58767 5663 36743 49631 15033 28922 61920
+6784 43721 24076 51558 10988 31731 58520 20043 48376 4853 39549 27169
+60190 11140 41822 24697 56505 6790 40602 22042 54366 13266 31916 61580
+171 43112 22743 53396 13507 34405 55007 2979 42139 24567 61953 11611
+33026 47081 20528 58758 6833 32506 52670 18673 43425 1523 63080 26075
+40027 14047 59978 29512 3729 52552 35671 17545 46830 9674 58827 20166
+32320 44111 7397 53684 17805 30815 63201 440 44032 30523 21271 56461
+4713 42276 25862 51703 10465 30551 62493 13981 42767 24303 55440 2967
+39373 22719 49170 11204 63951 19454 33911 44754 4659 51257 17381 30074
+59613 7608 41349 23692 48533 11704 58651 21304 40812 2086 47389 26507
+60218 9743 31172 45644 15597 61876 28986 397 54114 37921 15390 31212
+56700 3869 47545 28044 15317 61584 36045 2523 52720 24404 42658 11885
+48977 21835 59774 1535 32606 45731 15868 64438 28484 4480 51657 36067
+13522 55813 24313 47595 5877 41534 21817 61351 9492 36906 53452 16148
+29741 48735 3081 56254 23958 41847 9570 63867 23054 41541 1703 48602
+26700 57151 15240 33543 45272 5095 59584 27602 16524 50972 37451 6079
+58431 28823 16018 49876 35478 8447 64903 28192 16413 50420 35547 7427
+58932 24650 44701 3325 35454 54257 16129 30448 57917 10726 43118 22907
+53192 6885 39777 26732 65413 9878 49229 17375 32474 47188 6562 62182
+25167 38737 9446 53086 19520 29892 63696 4624 46564 28424 16837 54738
+36003 2346 47927 22267 59719 12284 41956 25009 48264 967 58663 26919
+39876 10651 51993 20469 30769 64538 7316 42370 22235 55010 11833 40499
+26668 61264 2911 38983 26013 54658 11318 43792 21294 58785 7022 33148
+52215 19821 43051 10241 55846 26610 38704 846 60182 18836 37682 49634
+4991 28815 56124 14735 44518 27449 1503 65124 35838 18200 46725 11415
+55026 25705 41372 218 63518 18860 36176 51076 5965 31372 61799 18358
+42153 11838 56296 25889 46152 1156 33019 58917 14327 44122 29358 4444
+64927 37626 16970 49849 27693 7961 54505 36380 21085 63157 4060 44198
+18537 34848 55626 694 43241 22666 65024 8291 37678 49541 16535 28845
+58578 6732 46151 34535 19135 54316 12083 42131 25509 61262 2375 40790
+23515 54683 12064 38570 26439 64507 3132 30892 47217 13978 61128 26317
+38354 862 49477 21200 62306 15241 31656 47184 3260 59059 21299 38367
+13326 52168 30509 5561 55981 37612 20451 49502 2538 33627 64238 13543
+47106 24162 40854 754 57749 22905 6602 58856 35591 18523 49901 9367
+42043 22151 63311 104 48435 27151 41492 10971 58312 24850 41056 2175
+51740 17902 35412 57199 6373 31226 46448 19794 63394 8226 41732 26763
+53032 2459 35197 57953 12889 42437 24221 51821 842 30423 58885 18729
+43222 5071 63965 29320 16722 49480 36580 7805 57665 22237 43658 11662
+60684 25961 40782 7039 51840 17228 32196 59561 8216 42957 25088 57478
+3831 30941 47844 20163 54050 8711 38926 26981 64810 5307 48756 18856
+35348 60882 7931 43285 23195 51365 11284 32544 55399 18824 45027 1115
+32293 61370 16195 48698 29245 8484 57735 35499 18091 52478 378 33624
+48192 14168 57110 25202 41890 3832 52912 18786 35458 61598 11097 30993
+51218 20304 42720 2230 56136 25152 41167 13130 63618 21803 39117 670
+53832 25582 38402 13214 64154 21448 49224 3091 32432 45433 15538 62078
+28308 8388 49886 36155 16434 59063 29219 5341 49360 37050 15944 63402
+28275 7877 49745 36946 17993 55786 4026 43875 28984 15316 64789 37627
+9186 49842 27937 16486 56673 36905 7284 46423 23596 54945 12610 40765
+22196 65326 1995 29707 48576 13022 56440 25632 41590 5708 59586 19391
+34366 46572 11183 53020 18248 34056 65110 7112 41145 22742 50348 2099
+34372 61227 15628 46609 30088 7318 60235 38029 15595 28916 48612 121
+56119 23873 40387 12157 63293 19188 33597 44888 4068 55397 25410 38753
+9087 63542 32885 16575 50621 36066 5373 56516 21977 47970 11369 40628
+26200 65382 6156 48946 22654 40453 13130 59844 29368 7718 50949 38147
+16512 30061 64181 5613 40318 25958 56019 10451 39248 25647 49150 6403
+54849 19433 33176 44693 9991 59095 22292 38813 1113 65023 26845 46070
+13811 32291 58412 3934 44828 20552 33888 63048 11067 44415 18112 32946
+49385 6120 58167 21862 38260 12604 52073 30133 7591 65205 37706 20659
+49367 996 33243 60895 13002 41327 23977 54885 2252 43771 19580 57140
+29980 4640 49249 37230 18765 61741 11218 47872 26890 40174 8748 64490
+24298 48340 903 40285 21051 60959 13857 38307 25128 56372 3133 30946
+45570 13547 55918 23670 41545 1376 59362 17946 31840 50102 11005 42523
+24399 61543 7552 34615 44581 20129 56061 10314 39639 26643 65313 5706
+38899 18306 53740 30485 8842 61393 36588 17909 49282 2179 34704 56920
+15989 46858 29042 5981 59511 36071 17879 50306 9845 41897 23305 65424
+4394 37110 49483 15958 28680 61042 2091 46471 35242 17654 63408 11961
+42456 25160 51000 7638 33282 63997 17736 42954 10057 52462 29934 16791
+57154 37549 3437 50254 27644 14991 59158 38062 8721 28544 54216 12769
+43685 23658 57466 2382 38405 21702 50795 8972 36308 62434 15915 28500
+52353 6083 47372 27465 15727 57432 35355 86 52852 23908 42522 11205
+58710 17165 30861 47220 8863 52304 27595 15130 60593 37980 4896 28482
+52605 14879 34866 60202 9567 41801 22760 55107 1155 38549 27136 64332
+8021 43807 21770 52273 14564 32966 58705 6060 43270 21888 52348 14913
+33145 57655 7212 43203 24929 55842 13228 34145 44545 8266 54062 25223
+39754 11338 56517 22460 48853 7377 33685 64935 15159 44950 27312 9103
+57817 35225 16149 51635 28559 7713 60947 34693 15274 50017 29705 28148
+12664 52354 37767 3032 60556 26160 39524 13980 53368 25314 38443 4793
+61881 21667 38357 12665 48517 26253 60736 10181 40077 24506 54443 641
+38917 22104 59958 10137 48160 25011 40463 14340 54564 28403 5492 62594
+37107 20358 49616 10258 33363 54948 13013 41109 24348 59675 3280 34411
+52341 13353 39869 24821 56162 148 38854 19602 65421 28202 4690 49405
+37688 20390 61842 9517 41273 22793 52046 14042 34024 62208 463 44959
+21059 32984 56796 10587 41746 17276 53424 29867 2137 58456 35336 17788
+47082 7540 64931 26422 40076 12615 56622 25327 39780 3504 51361 20212
+37770 60094 9541 30388 46188 20437 63653 7090 38726 27068 50572 13607
+36993 57805 1314 28931 45485 17480 65404 9131 38915 26945 54358 4757
+33409 47772 17346 59364 9654 42281 27053 57037 5397 47561 29786 14795
+59038 36008 9730 52819 20696 31613 47257 2323 65264 25185 40044 11868
+52319 20440 33608 57353 1279 43188 23082 51876 10727 34495 61424 16253
+44928 27444 2105 53075 36461 19843 58974 4510 45084 31231 15493 62665
+35273 42 48412 26712 57138 8378 33831 44378 14576 61293 23734 38779
+2761 54565 21769 38287 9905 48350 27055 62233 3455 31593 44560 15335
+58513 27934 8712 53044 38211 16778 28351 56754 9837 41929 23164 53638
+5404 36502 65288 16902 30387 45561 9409 58171 26625 38363 2564 54321
+22442 49041 10330 30777 61418 18706 45137 801 29943 54266 13132 42005
+24312 60955 2667 32327 44916 18314 58272 10117 32059 53340 20720 44366
+1348 33054 62406 19838 43251 10526 54492 21260 34560 47973 81 60407
+19072 33749 45074 12286 58594 23290 40716 2860 62330 25842 43328 11840
+54290 17693 35985 50623 8059 30172 54901 17705 41802 6432 60146 30597
+15333 50626 37529 195 61344 25369 47622 13431 40211 24957 62285 2925
+47746 18054 35579 56431 10470 29267 53657 19118 43533 6763 64126 30118
+14825 50578 36553 9173 62464 23532 42392 13581 52155 29100 1522 55648
+36939 19684 46255 4079 58579 27167 38504 11536 54974 22054 49182 4753
+41611 27175 63009 11529 38749 21243 51059 5964 33226 64313 14517 43679
+23480 51822 3876 35796 58376 15092 30563 51372 44 47223 27940 14849
+59563 36510 3519 52190 22631 47764 12773 41719 25865 56083 4974 41001
+22546 63147 13064 31912 52737 3884 41360 24760 63794 13444 33920 52869
+765 43195 25231 56790 12454 40172 21884 53448 6540 32567 57721 18974
+42597 9251 53127 21027 31898 56363 4309 41850 19645 58756 31149 2231
+49312 35734 20217 62254 7329 44903 31027 12420 60465 34860 20664 47323
+4707 62805 37842 16534 30052 48845 7003 64472 25883 40292 11307 53059
+20248 37674 59474 3629 30279 50062 19480 41955 11182 62733 23521 43999
+7476 50749 28877 15617 61822 37238 2616 49262 21367 34479 64523 6046
+45759 21015 33570 56604 11594 42968 24401 50505 2993 31822 63528 18536
+45070 10961 32402 57431 17475 49335 3592 34262 45211 13333 62746 25330
+39544 568 48293 24355 60499 10354 38920 21593 51044 3937 31659 65203
+17997 46435 1555 32847 61754 17142 44114 4300 34841 60103 16856 44042
+28709 1047 53791 36312 16592 61670 27724 3872 49781 37515 21197 54980
+2134 42241 20536 65509 30570 46392 19329 56183 10420 41286 24082 48953
+6017 64682 17321 31187 46644 8805 56960 24107 40334 3494 52480 17589
+34062 65007 6875 47775 29342 13719 56706 35643 18763 50442 3964 33014
+64433 18227 45799 9531 33439 49093 17192 60927 2757 29549 45584 21150
+64830 8982 30674 50860 19067 45655 6340 33362 62636 16013 45508 29015
+8793 53568 35529 15954 56675 28861 1946 49997 35984 12711 59302 24466
+42261 6756 55261 28650 15023 50340 36956 3212 62743 24444 46662 12524
+40732 24277 61713 4158 39927 22816 51940 14416 33945 59201 5536 42832
+22161 53142 10442 31632 64443 15812 44318 27357 1726 54886 37974 16333
+31364 60863 4638 43664 22859 54509 10454 34271 48402 19640 59470 5906
+34432 46638 18913 56419 11169 38459 27231 62227 2920 41097 22436 51107
+11396 33959 55565 18392 44037 1142 33880 63038 16661 44698 27871 5045
+57526 35224 17779 54753 6820 46721 26613 39324 10188 63714 17348 31869
+53227 4811 41151 24379 58064 13509 32169 47691 8519 64050 24933 39532
+12108 54338 22753 43643 6455 59722 24583 39914 11688 51966 17856 30347
+63519 4842 46412 34677 18548 49137 12255 57388 26066 40704 6376 60547
+22712 48978 13860 36280 55080 839 29631 47889 20452 64440 4365 31671
+45163 14690 59608 27768 1606 51423 37809 13313 48150 24035 61875 6707
+41664 21550 55664 11325 32193 47107 17668 59116 5681 39339 26604 53193
+14887 31831 64733 6701 45023 35049 15986 55679 27439 8309 50183 37667
+19876 63731 3477 34886 46602 13944 55944 25212 40041 5195 59046 17444
+31330 51981 8329 42355 17144 65176 29002 3834 51225 37300 15257 56442
+28183 9183 49400 36980 20420 63680 4960 32412 46719 20037 60985 1576
+39222 26068 56843 13579 47018 28525 8457 54381 35628 19633 59484 4327
+32374 45877 11895 55275 23469 40141 8817 60132 26398 43005 1941 51391
+30619 15854 58052 35721 4224 49294 27839 17012 54561 38052 5303 31707
+59753 18140 46521 9464 31746 62925 14214 41734 23625 52459 6089 33579
+61192 15764 45111 29580 8505 59240 35698 18731 53502 2219 42801 26039
+60693 8855 40234 23896 55517 11619 39220 21615 47980 5376 63125 25823
+40722 11561 52897 19117 32812 63884 8533 44904 28779 15952 54758 36081
+1542 60592 19010 35653 49574 9503 30311 57536 15116 43301 21945 50983
+5890 32045 56362 16182 45339 28582 9436 62266 35256 19075 50110 2649
+43690 27170 64130 10764 38567 26317 50304 131 34093 62639 15029 45741
+27457 8905 53844 37401 16362 61010 27536 5795 49626 37226 16002 55921
+28593 704 49521 36981 18835 56822 10242 43341 23298 52228 1603 32667
+56429 15006 45588 29759 5107 55609 35187 17344 45818 10064 65516 25895
+40758 1888 56741 21627 38957 14283 53492 31047 5239 59997 35364 17780
+50215 9536 30261 54238 17123 42420 1458 62200 19057 30671 48222 8252
+59581 22162 38903 13124 55386 25629 48399 4600 40254 20562 62019 28741
+8537 51446 37035 11620 56146 19561 36326 50117 6912 30046 63454 19616
+42528 12065 54430 26894 39098 5750 59372 20010 35981 51316 9661 29872
+57193 18529 47359 6257 32793 63444 12447 46659 23772 41517 7064 53178
+18038 32133 62942 11100 45718 17261 35813 57392 5178 51889 13278 33391
+61360 1562 44380 28295 12362 55050 36163 19988 51287 1073 37800 59546
+14432 31663 46558 11210 55875 20919 31514 44512 1810 62228 23393 40894
+7492 47480 26952 59094 11426 39107 21887 53220 376 31320 57451 20792
+43812 8039 35821 53453 14777 32226 56689 1382 42133 22985 52896 13835
+30763 61246 3717 48757 23663 41958 11964 58451 21694 46293 6037 33370
+63423 16948 44852 28841 3959 53383 36300 18239 64208 8303 44515 29777
+15888 52961 34923 5660 59509 20713 30851 50433 9813 43611 19562 54309
+31120 242 63245 35725 13374 50258 23997 45878 3065 36573 58271 14422
+29063 47198 6125 62692 24061 39824 11690 51661 17994 30678 56175 3108
+41302 25261 63084 12790 40746 22963 52744 66 32270 60458 14269 43384
+24777 53592 8278 34731 64266 19443 46879 6129 31609 60675 14133 46534
+27333 7949 53723 37781 19477 61256 11400 42265 22672 51772 2717 32905
+60186 20025 43394 8255 50126 21013 30051 62091 608 45956 19314 29949
+56417 5367 42088 17929 51849 30733 2490 62382 36059 18608 49620 9314
+33066 58051 20786 47920 1657 39599 25820 59647 10254 41248 22163 51561
+1127 32321 64243 15366 45732 29061 8095 56818 37792 18598 46495 5611
+59957 26113 41978 12078 54837 19080 37283 49689 8122 30451 62960 16112
+45267 28732 3236 53528 35760 14449 58415 24900 45239 1147 41800 22190
+64333 13500 34839 47921 3414 57381 22309 40350 12140 51336 28791 1884
+62317 36865 16730 49305 28496 6564 59295 36160 16758 53744 27523 8970
+49976 36041 20524 62963 2745 45826 21421 34258 57316 10152 44702 20372
+32907 48719 7083 61896 18632 30958 44880 790 53468 27962 14994 57632
+35501 6854 49962 24232 43287 10568 62886 19194 33252 51172 2821 41393
+23275 64491 9848 30205 51284 14863 41253 24056 54061 4977 38702 21457
+63364 14156 32743 46385 7531 55524 24501 40925 11026 60654 21534 46883
+327 34428 65403 15682 45388 28381 7061 56806 36583 20091 51035 2350
+43495 25929 63745 12076 38988 21420 48713 513 57014 26717 38973 12852
+49137 22179 64735 7074 32172 46439 15857 57793 29434 797 49960 35378
+17212 60318 7950 32634 54140 15392 45202 28355 2071 57646 37745 20787
+50765 6198 42422 24384 62234 13748 31275 51384 7729 42732 24661 64921
+298 38876 26815 48543 11604 61680 24055 40726 3022 48233 22277 58737
+7366 39465 25768 55197 13646 41736 22994 59257 5402 39822 21296 55520
+12742 39486 23537 59587 7013 30677 50130 14230 37986 56999 3845 29569
+46185 19427 65328 9001 39818 24350 52777 13369 31534 63682 3839 45593
+28850 16270 61114 36518 7821 48114 23095 63295 12581 40944 26856 60150
+545 48916 20448 35846 53847 8738 31462 47016 17896 61485 3315 41448
+25789 47425 12338 56639 24171 41416 6723 62950 20614 33894 52115 10918
+40911 25779 57277 4372 32939 45631 17658 61346 332 40537 26797 51967
+9909 36082 59161 15963 30475 46100 1786 64835 20927 29594 44217 4980
+59134 17188 33686 52516 2265 41957 23633 57228 10174 49172 22499 41217
+13347 63104 25957 48729 2677 40787 21757 55725 13738 38752 23396 59444
+4816 29996 48837 14050 58314 26403 39598 475 48934 22338 60268 9501
+40257 25075 20206 63467 28358 8498 49994 37088 14600 57540 23089 46203
+4448 31771 64099 16454 44348 28087 5817 61379 37556 19038 51381 9167
+42015 26146 58445 12763 38473 21288 53499 3128 34137 60601 13614 42229
+24080 50917 8813 34140 63640 15572 48338 27722 4376 62160 37701 12727
+47049 25098 60095 5803 32906 44350 18391 55505 9782 38832 27163 64537
+1136 36666 53096 15249 29903 48711 9664 60091 23360 40473 14232 51217
+31072 869 58747 35520 20230 47673 10804 55756 26636 38963 1570 65361
+17058 36268 49537 8420 28820 57335 16312 44333 27879 6194 60689 38204
+16966 30196 55616 8056 48925 22617 40346 13250 59710 26255 48550 938
+41256 22058 52983 9949 33119 58941 19074 47609 7367 38550 27038 64616
+11687 48937 22322 38674 4322 51811 17769 32194 58258 1537 44563 28344
+16119 52661 37057 3993 59159 28796 15808 51032 36086 359 46335 24922
+64515 9759 31345 44964 14856 55599 23853 39695 5820 60816 18644 32835
+53564 9882 42512 23845 65488 12768 35526 50648 7062 29079 57077 20403
+41406 10952 60926 25763 41094 3696 54030 23104 44646 13808 31867 65032
+5255 47686 29305 16499 53060 37430 11435 55748 25506 44084 3966 31353
+63051 15949 43893 28164 10056 52520 35660 17410 62693 2499 34422 46369
+20948 58849 5555 40442 25850 52203 11439 32266 64118 20590 47424 4969
+39158 27138 60292 12765 33101 52577 7267 45555 28494 16828 62828 35869
+8730 45738 23436 53106 13970 33042 58654 4080 43615 24049 51266 12516
+30825 64864 645 44632 29053 16210 57829 38091 7178 29324 54043 14621
+47090 27907 1952 63425 36587 13501 53767 24904 42138 4205 60126 20730
+34716 51190 8308 42908 23029 64814 13531 41518 26621 56384 4526 34516
+53770 13085 42161 24457 60662 6792 34640 46935 18284 57825 2174 42363
+27092 61033 13247 48303 30203 799 57055 36832 19905 50175 12012 31855
+63834 3253 42514 23335 52489 11860 39614 25208 56088 3774 43458 21532
+62365 10268 39692 23043 53904 14433 30684 57757 4895 42255 22831 52783
+11036 32181 61923 17901 43125 3940 54379 26727 39466 12223 60000 24191
+38739 6185 55111 20219 32737 46792 10850 62599 22812 39586 4330 51797
+34389 17389 65214 9724 31294 46751 15009 53248 29283 3002 58279 35260
+17487 46959 9201 54456 19839 34582 59064 5430 44626 19061 36016 54174
+8725 30176 64592 18766 42974 12436 53018 30732 1362 63069 35173 18087
+50830 9308 43930 27133 52587 3192 32996 64985 15489 44998 27918 1689
+52653 35910 18470 61663 10827 43391 26423 51602 2558 33489 58130 15410
+43965 27526 6363 59974 36778 21004 51543 10868 42318 25388 57956 2884
+38908 21401 54139 6670 32802 47011 18026 58120 10604 40104 26909 64021
+4801 38275 22529 55572 10430 49310 27252 38385 857 59272 18210 31703
+49888 3835 43713 22663 64141 13874 35518 54674 7885 42623 22931 50960
+11233 31429 65363 18743 42850 4972 56520 24952 41594 13850 52831 32553
+7470 55333 35756 18120 47455 10613 60950 37914 15281 28738 48516 8044
+64135 24756 38392 23 47141 21454 58573 7784 39238 26862 54704 11117
+43398 25784 64670 1332 31818 45715 15751 55062 35666 9691 45088 23377
+64348 8285 38682 27070 54652 4180 43483 36346 53084 2408 31649 58603
+17906 43983 6243 34666 60473 15237 48589 27459 8113 52998 35519 21326
+56412 2274 46206 17089 30489 63142 5229 43671 24194 50898 8466 30661
+65387 16825 44812 27628 6041 54274 36382 19453 58697 3606 46235 26196
+41252 13777 52143 29070 7609 58632 36385 15596 49861 27660 2324 63095
+37281 20841 51366 12327 41464 26069 54968 8268 40204 22310 61696 2494
+47507 26166 38852 7347 57164 21418 43851 12405 61322 26820 40414 4371
+50745 17594 33184 58106 7040 43439 22388 52236 13871 33120 61998 3912
+46149 27306 14999 51898 35191 1944 63916 23579 42604 12217 52791 31806
+4028 65215 36422 18372 50147 8814 37933 58186 15526 28352 45342 5147
+61064 23871 41293 1889 53240 19290 31492 57683 8713 46191 24079 41421
+12521 62669 21777 40464 7363 48872 26499 65146 12074 40440 23225 56068
+6315 33416 48545 17998 58371 8679 40306 26276 52826 4120 34268 59430
+13780 44630 27554 1705 51243 37236 15828 57691 27936 3514 49418 37428
+14885 60222 23852 45350 1030 33641 55468 16060 46787 29220 6106 62847
+37829 18134 51392 8943 37286 56497 14716 28041 45275 2347 57905 23855
+38722 9296 60698 21837 48037 14204 37429 55429 283 30348 48050 20758
+61348 6942 40587 26865 52404 10773 31304 56270 18681 44684 613 34437
+60830 17509 42828 9350 55792 19198 37696 50700 3784 28621 62210 14074
+43027 24202 55794 202 32422 48593 19305 59489 4871 40187 26281 54898
+9723 39994 21591 61774 13705 34710 48332 5782 54543 23876 40467 11935
+61386 22851 48657 4837 37653 58471 16260 29723 50725 10458 40803 22302
+61413 6477 32108 46915 17465 58344 11305 39338 26690 54933 1820 38473
+21582 61656 11416 31182 51980 17629 46016 550 31520 57098 20635 49069
+8643 39267 26169 65266 11602 38627 22450 52265 6888 34502 62904 14840
+45285 28495 5270 53998 36168 17138 59075 13673 31740 45971 5831 53911
+29472 16400 61034 35429 8490 47412 26749 50202 1289 33192 59658 16951
+45358 32896 9063 64862 24868 47919 2739 40036 21805 58488 8655 33758
+51109 18958 43566 1777 63957 26991 41514 13470 53436 24626 40290 2767
+57103 18449 30326 49739 8237 35401 58765 20347 42721 911 55515 25737
+39963 12340 62794 25113 39202 4170 50021 21049 29544 63638 10288 46060
+28321 14758 51331 37711 1978 57707 27675 14562 49704 36976 4803 60257
+28323 16548 49416 36774 6896 57360 25034 40968 11386 61352 19677 30705
+47798 4902 55911 22852 40683 11654 58444 26616 39423 5504 54685 21563
+38708 11590 62379 22767 49165 8578 32329 47096 19326 55559 1056 40284
+26904 64878 13933 34757 52464 8377 43117 23509 62150 13077 40212 26331
+55310 2427 38455 21307 49024 12334 60279 25340 40195 6973 48082 21570
+65191 13062 41865 26488 57293 8501 37102 50891 16096 28864 59900 1898
+46930 28470 16712 53694 36829 6024 58416 25091 44507 13357 30659 49095
+2694 63249 22260 38734 12166 49032 24658 61691 819 30651 45716 19089
+57770 3647 32323 44106 18568 55119 9321 40255 26544 61068 14717 31974
+53515 3106 45557 19992 32303 60403 9192 48461 19911 34570 61244 5671
+43898 19379 33150 56448 1940 46760 18622 34475 59656 11952 45463 17328
+19409 47328 7893 39567 26733 65268 10661 47698 20136 30582 54896 309
+42893 18841 63617 29197 9458 50049 37118 20505 59385 11973 41699 26698
+54699 905 40630 21876 57496 10506 37603 50092 14424 31884 61984 1594
+44541 24835 39294 11303 64296 21039 34426 54641 620 44152 20620 33453
+56986 9173 47302 17801 35217 60912 6693 31251 47815 17396 59040 4560
+43246 26714 51398 10333 33135 65026 15059 42706 24965 54852 3269 38545
+24378 48242 9826 64352 19180 31735 52282 12272 42571 24609 62595 2603
+38827 26102 54985 11820 42702 21966 59419 7077 37378 50052 16775 31285
+58028 5202 45577 27753 16523 55938 38104 7491 29622 60283 20366 47085
+2481 34568 56324 16829 48788 29489 9423 62006 36895 15739 50415 27366
+6416 60031 38216 15370 30628 49144 3380 55770 24314 38964 10619 60008
+21335 46955 1966 31183 53990 14502 40396 25995 62802 3420 38342 21727
+46842 11914 63939 30352 16578 50004 37717 6322 61544 21201 34577 46329
+9022 63229 20350 33651 44312 5161 53338 27569 14053 64608 35786 8082
+50178 27640 12720 58301 36528 20120 49552 505 30598 59542 21086 44205
+6533 33427 63959 19538 48923 8283 40914 27072 52394 3257 34218 64790
+17412 46096 8873 41542 25184 57544 13046 38922 21901 50966 3812 33762
+65412 14262 43862 27582 8331 52560 37047 20914 59464 1939 35032 49442
+15711 31724 57783 5573 41171 21931 52122 11378 34240 63902 15573 44216
+28095 6827 61175 35885 17659 50294 1275 32636 56763 15643 45340 27990
+7873 64058 36632 17882 46502 1716 55815 20311 31017 44491 8527 65518
+34865 18503 52318 285 43558 27104 57157 14337 37124 50351 3235 29093
+63870 18174 43591 9617 50910 27265 39541 4035 58610 18844 36936 49624
+10060 28706 63963 15770 44359 28130 4971 56075 35247 18827 50530 2613
+31826 58837 16648 44093 27558 9260 60363 37742 20895 51520 1428 29771
+48505 20699 64716 10054 38864 24479 52985 2556 43791 22183 56942 9309
+38822 21187 61667 12970 29795 53687 6506 40888 21880 51261 15106 33296
+60562 5186 46219 28189 16700 56110 36131 10364 47883 22293 57993 4721
+32249 45932 17698 61384 9769 32015 52418 13221 43587 23673 64125 4646
+38600 22424 52439 14377 33378 60902 6849 42880 23092 51786 11413 33533
+55957 17071 41874 1086 60018 21346 33777 53076 7923 45752 20072 33542
+61400 9193 47333 27551 15254 52424 37884 3914 64412 23135 46765 14055
+33788 55120 979 43815 27720 16469 62858 36129 7856 51386 25399 42048
+12947 64563 23240 47319 379 33061 56095 16823 45051 27888 4204 63894
+37203 17557 53483 10368 45843 20583 31385 57175 5331 47174 28839 17006
+59281 35902 4254 51823 24936 42747 9538 63506 27044 40568 13869 57325
+29617 1329 51455 35641 17358 54765 4897 35330 49487 15083 31052 62603
+5684 45980 23244 40177 12683 56861 27445 7180 50337 35080 20032 61914
+1257 33798 54228 21020 46298 10836 41155 26335 58741 5786 33292 53495
+14663 44075 27902 9786 62559 37038 20905 53291 6736 47752 30432 16008
+65473 36415 5046 50503 28569 12527 59132 36181 17814 49679 4209 30310
+57021 13244 41755 25746 51887 6968 29596 63985 20708 48283 10653 40006
+26208 62237 5001 30259 53982 837 42100 23612 57149 13824 33525 52792
+3433 41682 24387 62127 13376 37136 51150 6976 31329 57231 17659 45637
+2758 33234 62390 19307 49201 7257 38486 27095 64029 15394 35791 52123
+4386 28758 46614 20410 57104 9959 30512 52525 18935 46999 6527 31215
+60546 17863 48277 10570 39296 26691 65302 3179 43236 22368 54243 11355
+40739 25194 56298 267 38673 21613 60345 13779 37664 53644 6493 30341
+47168 13281 56650 22526 41641 8815 59693 26495 39711 582 55048 21386
+38255 7796 58924 27206 43718 10161 50598 19335 36850 64729 1096 29709
+45071 19549 54735 9576 41397 25994 61174 13830 33702 50829 402 43415
+23102 63393 10523 33137 53426 14574 43776 27403 6581 64976 38148 14519
+31530 54868 4084 46819 27964 16728 63871 37023 526 54132 26135 47294
+13953 36558 58783 4806 31580 51852 13235 43166 22887 61267 7020 34752
+47818 18606 57841 9499 40973 26030 48468 841 57279 24069 40844 10655
+52162 19708 31073 56469 2405 42125 18007 52216 28848 10384 59151 37692
+16989 49675 28575 2786 60511 38097 15376 30656 55058 4403 45505 27721
+16409 61732 37723 9734 53988 27725 15796 50696 36085 4417 61355 22486
+45418 12154 32094 59097 20368 49129 5999 39199 26812 60872 2204 31458
+53875 15737 46810 28059 9005 58498 36945 19129 49544 5315 31049 63510
+14226 45949 23476 41717 7014 54682 29633 16545 64991 36417 8511 50325
+26382 40855 3207 57135 20031 31217 47506 9059 54375 22841 41110 12079
+59799 25574 40786 3641 52554 19437 33968 60548 10189 42944 26313 51268
+13976 32917 59348 4106 43207 24766 54599 11588 39114 24411 62767 6048
+46244 19069 33303 54714 10673 41725 24458 59580 5514 33975 52765 13380
+42712 24006 62508 7507 40136 22065 53589 1432 32621 59579 12583 47590
+23098 41113 7938 62112 26101 40880 12062 48126 22145 56540 3841 32309
+47104 17758 62701 10775 34314 44462 17416 58402 6601 40831 26522 55005
+12874 40057 25331 64165 4029 43154 23577 51916 14930 34017 56177 166
+42894 23262 62175 9303 30513 53301 12511 42526 23800 65511 1097 33032
+50943 14664 41969 25079 62943 8286 34955 50550 20819 42325 409 59322
+26084 40479 7032 56494 25685 40423 10548 50315 18361 29997 57803 2671
+45782 18173 35600 61811 4893 30090 53427 18252 45029 6984 30991 65135
+14271 44110 27470 4320 55396 38120 16872 30496 62708 500 43678 22152
+58124 12921 30248 44666 5741 53199 28542 16102 60724 37225 10541 48209
+24145 54726 2270 38417 21392 58815 6872 36230 49712 15455 28907 60586
+7993 42579 23177 50736 13573 31940 56039 2123 42758 25922 60859 9419
+34322 51210 15057 44470 27741 158 64534 37364 13577 47612 22320 53472
+5621 32814 46506 19627 61084 7789 34282 45628 19429 56477 11298 40376
+25785 61548 388 42943 21764 53107 13736 32509 64306 3300 44969 29503
+16423 60650 37704 8552 49582 27519 15338 64657 37920 4183 29190 56020
+16734 48014 27970 8782 64068 37463 19798 50823 2863 42226 25318 59767
+13381 33988 44919 1137 57024 22363 40874 13598 46779 24920 62776 2056
+39096 21981 51832 10837 33932 64887 18811 47632 393 38756 22695 53464
+11806 33987 58850 3268 43454 22808 51028 15133 33133 60880 12719 55959
+24811 39112 5748 50484 18208 31444 59233 9581 44497 34395 18418 47863
+4027 61062 26806 41033 12437 53437 22376 38631 9869 55946 25177 45725
+3759 31616 57901 12602 42830 22785 54709 7886 35021 59936 17471 44041
+2224 34929 61791 17042 41559 4789 53620 21343 30086 59412 12847 46221
+29064 6196 52457 35733 18573 62275 13251 43705 27129 50608 5170 31936
+63919 17000 44484 27694 1521 52731 35391 18754 60944 5394 35120 49586
+15889 30998 63263 11826 48183 23998 41314 3480 54031 18031 32803 61142
+6555 46509 27774 15817 56758 36729 8554 47334 24062 62918 3534 39784
+21426 53764 7934 39602 26437 58409 13536 47531 29037 4942 51427 36167
+20576 57264 1063 48269 26489 39746 10643 59570 19925 30338 52137 7441
+44798 35039 12361 56603 22089 42451 6634 63319 29206 16690 49703 35438
+1218 55724 25214 41995 13771 64742 28843 2981 50798 36100 12285 54546
+29273 16864 62455 35720 5524 49587 28955 14391 64340 36198 8419 47567
+23488 61315 252 32961 45616 12594 56953 22947 41501 7717 47501 25588
+63308 11582 41216 21841 53171 7387 32843 47477 18980 62770 1770 31190
+45905 18677 57047 10942 40062 25767 54476 882 39959 18283 56597 29687
+10199 49788 36381 19873 63778 6610 35341 44746 21185 55628 1366 40684
+23525 61625 13483 33104 53513 3058 48119 26011 39344 12089 61442 24414
+47964 902 41635 21297 53663 10851 32076 63016 14560 44943 27544 2293
+61460 36688 17264 51509 5566 31982 64656 14604 46211 29815 8415 57038
+24636 45217 2962 40084 21712 62452 7474 42102 26773 56888 12701 38406
+21281 48779 2620 60447 26556 40092 12190 48906 22239 64381 1027 32201
+45603 14531 57315 21254 38325 2726 55400 29864 15230 49878 37341 8985
+63491 23867 42548 14066 52399 30159 4294 57472 36935 15443 50884 28285
+14 64896 36772 19105 53332 8516 43838 21329 31450 56264 4807 47866
+19838 36281 61407 721 30414 52312 20486 47145 8046 31423 58821 16340
+45640 28983 5977 63541 35911 13935 50580 25451 44395 3265 36934 57950
+15535 28761 52026 6677 41057 21581 59212 12908 30379 54034 3648 45649
+28596 12510 62298 35460 17201 52921 9381 30955 46019 19444 64634 1679
+32726 52066 12745 41531 24273 62906 7628 40720 20261 50703 32400 9657
+58561 37544 20943 49527 2369 38042 60905 15722 31286 48692 10692 59368
+25127 40909 6649 54095 32716 16130 50733 35749 8994 62033 21780 46081
+3007 34251 57812 19224 44116 6069 34589 63199 20881 42322 12101 53855
+26355 41116 1446 62148 31714 14592 52129 36341 4532 59435 24463 47254
+12172 41080 22178 63155 3623 39204 25254 53739 7572 31883 58630 16184
+45650 28518 8979 54739 36374 17632 62894 2094 42713 25731 51936 14189
+31736 59603 3665 43633 22358 51178 10042 31550 58836 17534 47040 7523
+38925 25163 55876 11431 49163 23371 40345 2861 57696 19514 31229 52262
+10535 43463 22467 59135 193 37077 52735 14274 30885 45467 5347 60607
+28944 16796 54468 37307 7381 49813 29970 17771 61868 10704 48582 31607
+5913 52749 34777 17246 55300 9016 42034 26220 60178 5265 39947 24231
+54436 13924 34012 61399 7639 45869 31010 18199 54478 13176 37817 62764
+6401 29229 46027 63786 2622 48164 19638 34128 57561 11315 43256 23223
+64471 1685 29804 48945 14160 55164 23520 39414 8750 64961 26083 49020
+1407 41507 21424 60039 11080 33928 48572 18720 63428 49 32758 45477
+16585 51163 27905 5469 64843 37876 20823 49260 9406 32771 57651 18149
+44617 988 33964 49009 19621 63652 9673 39995 26326 54535 2178 38375
+21315 59605 10111 46815 29688 15691 57821 37132 6995 47936 23435 62107
+11655 40127 27059 54562 2173 38996 21575 57483 6876 46005 25542 39233
+12566 60260 22479 43109 4767 52402 30265 14100 63791 35006 1907 48901
+21634 55179 13403 38444 27257 59701 9881 47729 18580 31279 64424 2924
+45091 27802 16137 54500 37733 8132 60769 23680 46379 12424 41805 22847
+62439 2283 32731 53838 14580 42851 24262 65500 3667 31315 52547 15342
+45330 27677 8592 61576 37248 18431 53222 5694 36535 49606 16708 31317
+59908 10334 46046 24774 41655 4319 58987 22091 46953 12218 41748 24575
+53609 3746 32963 58137 19340 41911 9402 51399 29362 16395 64905 36375
+5640 50404 20324 36019 53905 1189 31683 57622 15759 44966 28977 3822
+59415 36909 13068 52335 23832 43840 5704 34838 64351 16428 48625 29293
+7818 61937 37784 13114 52646 22921 43314 3581 58228 33694 17918 50638
+10168 30023 62750 16077 46334 28002 5894 51756 37384 18121 58886 10226
+43602 22370 54159 5097 32738 59916 14536 39074 25372 56054 4137 35912
+50027 16871 30344 58486 8099 41454 25289 48439 10566 58063 19817 34086
+43980 486 53026 18013 36224 61907 9508 30132 48706 15199 53553 23650
+39066 883 63560 22537 49228 8935 32865 45145 15601 53668 28201 6774
+58721 38198 16741 30569 49371 7690 62021 25640 41265 11119 48189 22619
+60940 6323 34380 45613 16343 56867 27955 2356 49380 36068 20406 61374
+8763 34200 47182 19344 55433 6596 33691 45942 15118 60729 28979 2084
+49993 37177 14493 62174 24907 45214 7199 33914 55611 17088 44781 9669
+34963 63090 18879 49047 2188 40266 25669 55458 12360 40037 21618 60406
+7422 47702 30789 17086 64273 37869 10208 54713 23215 45497 2238 33381
+63234 18457 43115 10043 53104 25602 41422 6511 57348 19517 33482 48169
+3279 59931 23715 38843 11525 56070 21533 48171 5794 36460 58960 14708
+29360 47485 182 55553 24721 40578 11808 63567 19659 34730 53863 7723
+28889 45042 20598 56896 3218 38389 22878 48564 12228 63790 26346 40927
+1614 56215 23512 40107 12278 49033 26019 65388 9700 30621 45966 17483
+51962 3861 31718 59824 18727 46146 9549 34074 55518 16911 45226 28499
+7265 65273 38121 15423 31029 54909 5919 48489 19878 33027 56638 11579
+46327 18490 35352 62004 1597 30453 51419 19045 42252 5026 57630 30790
+16249 49415 37550 8115 65100 23553 42140 12282 54534 26324 39528 5517
+63631 19894 35830 50464 2006 31241 62694 15205 45770 27995 8896 60170
+37306 14929 49948 27911 5034 61087 38200 16159 28591 48921 7965 63624
+24016 40213 12029 48874 22032 55898 1661 40708 24117 64394 13747 33230
+45908 4354 56038 25787 41741 13996 63672 24260 43853 2912 58743 19352
+32625 46613 10253 51315 18175 30922 63362 3971 44428 27383 15983 50713
+36186 1398 57292 24991 47984 11082 39921 22550 53264 14857 30663 61549
+9002 45473 25065 40066 4727 53011 19610 32217 61882 7295 44088 27714
+16157 58791 37916 4954 30296 54327 15430 47593 28941 5742 61612 36327
+13797 53335 24110 41857 7094 59176 29470 12124 53921 35630 15775 49806
+28281 2896 62941 37677 19875 53055 11593 41225 26928 58909 5591 30929
+51727 14019 42990 24261 56865 7978 39361 22566 64702 3569 33527 52313
+12251 45004 29296 16799 56251 35972 4835 46761 22721 63663 9582 41147
+26951 51499 14040 32972 65469 29 47582 30800 16139 50944 37316 8893
+57566 23306 45345 12239 39701 26761 60553 6364 42945 22650 52434 1494
+34050 55846 13076 42303 22740 61768 6963 31903 50717 16990 44283 28404
+3838 64142 35397 18407 49826 8908 34562 57877 17663 41331 7221 50755
+34385 13107 60676 23354 44082 2026 32764 57886 20283 48633 10954 30877
+54979 19461 43524 133 63703 26916 38523 7302 48708 21317 55857 11557
+38613 27126 60396 1484 34472 48961 17196 62971 6700 30131 46367 13324
+55791 24001 39779 2266 58674 18979 31359 45384 8997 60626 24332 40348
+12031 49132 21408 65434 6858 39281 25700 54834 10194 48266 20177 33387
+55669 2940 45018 27502 14886 59901 35135 1945 50617 28320 16727 65136
+38206 9243 30749 56198 20545 42855 401 52909 31741 14397 60208 35561
+9380 50398 23966 41869 2083 64560 21048 38306 10929 51743 27024 42659
+7560 60962 21657 48473 11953 41133 25596 65246 1634 33411 52775 15375
+45426 28600 4111 63700 37125 13956 47200 24033 55625 4870 38942 21320
+59109 13468 33747 46155 6184 56148 25982 41088 10873 59108 18206 35930
+50886 4577 31133 64928 19862 44119 2043 33850 55330 15834 46153 28933
+3889 59792 36565 16895 50452 30695 452 65380 24779 42040 10505 53302
+18482 37470 58692 5518 29668 45366 17845 64288 9779 30298 44262 20560
+59296 3649 40847 26294 52061 12579 35548 57223 9138 29880 48296 18602
+65336 2906 38685 27031 51329 14559 32722 58194 5590 43293 22598 52713
+11319 32969 59543 1435 46106 28078 16204 54221 36092 4520 50252 27344
+14456 61587 37195 7384 48103 24836 56211 13876 39426 21637 60697 1390
+37431 50076 15120 28599 63582 8650 44130 34676 14415 54485 25156 44978
+3967 32251 65472 16880 44728 27798 8246 52490 36425 16120 59440 29263
+4586 49753 36233 17824 52451 1228 33173 64543 17791 47346 9980 41653
+25642 60331 4699 38929 21239 54740 13943 47750 30504 6311 59905 37631
+20554 53757 30 33828 47744 13187 56490 25844 39966 8393 64086 25338
+39456 2734 48306 22227 57725 12429 41364 25550 52659 722 35789 59745
+16757 29808 44592 3166 64279 24037 41022 10397 47751 22497 59626 8120
+32566 53563 20866 40799 12733 62302 28524 3252 53713 36450 14920 49698
+28955 1048 60644 38002 16196 29495 55525 10985 48010 23823 40461 6085
+57501 20270 34381 52857 745 42652 22671 65263 11339 33461 53839 20446
+45006 2433 32719 57452 16772 44206 28968 4530 62168 38053 16365 30321
+53976 7892 43240 25419 58224 11446 39209 21772 53067 640 38476 23031
+57941 8609 36227 50012 15990 29952 62085 1598 43193 25981 53206 14524
+34995 58544 7155 42018 22348 52763 9875 32608 60061 19421 44760 5435
+35569 49539 37606 128 56685 27693 15896 50806 36324 10219 59967 22784
+45678 13498 36747 56752 702 30633 51721 20603 43043 8054 62913 27123
+41126 13031 57254 25532 40649 3363 50769 29518 16327 61201 37223 1740
+48172 24331 56525 10735 40454 23247 60747 7941 35788 50527 14844 29528
+55868 3791 43373 21846 62538 15606 35132 50494 1232 31517 55642 12870
+41944 23879 48549 8755 57579 21430 40468 751 62935 26341 42858 11031
+52362 19258 33382 59242 2932 45138 18242 36514 53102 8334 28858 58567
+17022 44362 27605 2680 62555 35909 18019 53907 5334 47203 30666 15969
+64877 36748 11013 46270 25430 51153 4410 29739 57680 14396 41323 24666
+53089 200 36498 59177 14404 31350 52486 10066 42468 25082 55655 1433
+38642 20728 60217 29241 4964 49517 37013 19771 53233 9163 34439 63103
+17524 47406 3538 41461 26223 61820 8919 39581 23622 56583 12554 43864
+22580 52687 2794 32749 64988 19288 47402 9165 41249 25041 55801 10999
+32261 44591 20844 60936 4558 41262 26248 54480 13881 34552 47731 6746
+63695 27619 16896 51132 35276 3210 55958 22678 45360 14308 33117 60841
+87 44309 28138 16085 63580 38188 8540 30138 59004 20493 47509 10654
+41870 23504 55289 4797 34230 47126 14807 61184 28009 7731 49695 36576
+17372 63956 4300 44257 28953 16878 54497 36591 7586 58102 26087 46695
+12532 40548 21719 62807 33 34035 53347 16287 45520 28238 6459 57251
+34930 19530 54122 5343 41983 23257 60756 13096 34347 51130 7311 42494
+23605 62681 10864 41382 22653 51481 1525 31506 65141 14824 42334 24195
+54128 3317 38283 22155 61305 13574 46759 28808 8055 56940 37334 13030
+48644 24381 63112 8603 40546 21536 52361 12445 33862 55221 7202 43198
+22264 57519 12712 32718 50251 3392 41188 22581 62355 13493 32779 53908
+928 48509 25547 41739 12943 55751 23676 38438 7987 63739 18162 32786
+53510 1107 42710 24522 59265 12032 40653 21818 55311 4476 43921 25286
+61965 13331 39351 21081 50947 6374 29955 65081 14087 41613 23666 56624
+8502 32609 44682 19322 58734 566 32357 44536 16777 53719 28301 4152
+64924 37895 11260 30585 48526 20503 56186 5645 32337 46600 21246 60540
+731 39509 26779 58006 9697 48776 22192 40014 13647 59661 34692 1807
+50162 23740 41991 9459 63053 22734 48107 12846 41940 26737 55649 5568
+39511 25853 61066 14302 35198 51592 8224 29451 57765 16353 44140 28419
+2610 64270 36331 17865 50155 8180 29733 58041 14826 41440 23598 60891
+5102 38594 21204 49210 14448 53752 30927 6750 62545 35421 18118 50187
+9748 42046 22842 61848 6138 47630 28333 12643 52527 37356 15558 57788
+28948 4602 49719 36038 17719 64966 563 43663 26926 50998 9857 33824
+59195 16645 44577 27458 7237 58103 36012 18395 51545 9221 42667 26195
+64350 2647 35416 51197 15717 30494 61702 9916 44784 28681 16515 56067
+36813 5484 50557 29623 15623 63066 37346 6945 48403 23533 56395 10310
+33510 45303 13977 59124 27565 3456 50167 37694 13139 61327 22938 46995
+6367 34274 64710 18202 43426 11825 54574 26543 41271 4818 57246 23711
+38981 11970 49109 21558 65238 3153 32387 46914 11845 60795 27944 16845
+50212 37527 3613 64410 28396 16774 13549 61025 38205 6882 29578 47445
+18907 65349 2799 40490 26567 55318 6104 47074 28757 14817 64176 37314
+10047 48094 23869 58320 2228 38351 22477 52322 11259 44251 21363 64330
+8576 34460 46536 20137 58481 13375 31800 45123 5701 55488 20239 29937
+46835 435 65134 24694 38969 10717 47962 23162 60232 6426 40694 25196
+47422 10981 64265 19586 30059 44843 3151 60256 25306 38907 10030 54389
+22321 48621 13883 36459 60823 6361 30545 48305 13083 55567 24759 39245
+4378 61849 22079 48124 13203 34105 54632 7137 42215 23699 56895 10789
+33025 50581 19745 42472 805 58079 21069 30307 48460 9424 62836 20147
+32986 44095 7393 59965 34793 18897 50244 10857 42679 24834 63134 4296
+39406 21353 48479 12761 62102 26699 41675 9245 51856 17048 32283 64651
+761 42560 24470 55528 12705 38284 21943 59289 6860 32464 46416 15656
+52855 29108 4714 60791 36578 17347 49255 8398 30193 58655 14828 44645
+27832 5054 52211 36354 20172 64043 683 47218 18152 36473 53209 9277
+28895 59685 15924 44028 28290 1622 55073 38089 14734 30715 62293 6142
+47662 24611 40171 10415 58277 19624 48564 27360 7176 52875 37045 18793
+56831 3929 36497 49498 15981 31783 63285 7080 44436 27622 16949 57826
+37215 1595 53750 20950 32916 46663 11621 56938 19497 32809 45580 2892
+62380 28284 15752 49506 36438 6409 55610 24884 43503 13724 58571 30952
+3757 50090 37602 13701 63458 23617 43475 8788 51714 17579 31142 57553
+1072 46003 27898 16269 59652 31099 3545 53784 35248 17538 47997 11677
+57750 27109 38654 7386 59883 21262 49043 11558 39606 26873 52748 152
+31964 61957 16668 44729 28539 4276 55881 37929 16618 29712 47701 1713
+58854 24218 40026 15027 63840 30313 4664 52260 35424 14478 60303 25405
+43272 7553 52686 24227 40304 11109 58235 21571 39201 2984 62601 26849
+49007 5644 41392 21385 58049 11395 38759 22411 50786 6214 31500 64435
+17785 42531 9960 52870 27193 38352 314 57830 23026 46772 11718 33711
+54717 3622 45648 27466 16407 62095 35705 6111 51660 27932 15030 61210
+36445 8049 50170 24092 42881 13217 59341 23126 39048 2468 52784 17746
+34819 64398 10108 42631 17087 55172 30030 5957 50457 36379 18267 61511
+2910 33265 54027 18061 43662 11639 60561 26947 39964 3681 56614 21205
+38940 7399 49084 25016 57999 11527 42916 22090 50042 633 37590 63208
+17227 31764 48336 6675 55224 20395 31749 44974 10824 61582 19372 33361
+51129 3645 43544 24598 54903 12778 33179 63021 1252 44877 22840 38695
+11506 59335 27029 43817 2339 54783 26008 39062 11104 57291 18990 33667
+46002 1774 63716 23702 40271 9426 54607 21883 39579 12495 56546 26059
+38678 5825 47584 19253 61281 29366 2284 50020 37855 20321 54120 4343
+33347 62063 20903 45800 11698 32706 59168 18383 42266 6349 54487 26524
+38656 3463 60460 21220 47014 13664 33875 57840 1526 44517 28198 13475
+59735 35329 19013 53039 490 31461 47154 20962 65049 8671 33286 44574
+19658 56508 2018 30587 52441 14413 42158 24742 58945 3165 38257 21488
+51580 9480 33341 63043 15634 44723 28574 6817 54988 36880 14051 44516
+25219 56338 965 30446 43854 14103 58059 27587 8397 51350 33358 4429
+48793 23211 55866 14603 33375 46036 8526 58858 22021 38365 11521 51416
+34021 18370 60716 3666 33147 45236 17983 54601 11962 40307 26741 62265
+7483 39660 24647 56274 1062 32816 51724 18250 42246 4467 62697 26301
+41122 11128 52081 17590 33280 59355 7301 42475 17290 52834 30220 13166
+57336 37164 2435 50071 28037 15236 53120 37151 7440 57156 18035 35463
+49757 13490 30159 65095 4363 45912 27661 16994 38241 57952 1712 28834
+46300 20190 63177 9064 32167 44524 15415 51252 28026 1333 59961 36411
+14778 45955 25126 64087 3499 39150 21831 52858 13743 34586 62145 7196
+44341 18071 34740 49316 2534 55581 17171 30730 46837 5335 64960 26600
+38589 9032 57333 30739 16827 50663 37239 2788 56130 23105 45154 6121
+34082 59480 18705 48546 10402 38609 26983 58395 5143 44351 21269 54398
+11379 41941 26145 65316 1730 34399 50863 20269 42620 10602 63463 33871
+20976 55272 1293 37890 49674 16788 30505 61453 7621 41650 26177 56732
+12607 39391 23414 51090 4201 33202 65247 12729 47094 23680 40978 7860
+58407 26521 39835 11696 54011 21544 49068 4668 32077 64561 15050 45643
+28566 2421 50962 35340 17351 62621 10299 43279 26703 52294 788 36116
+54915 14198 30249 47600 8509 64929 24186 40903 10565 49103 21588 61761
+5739 40709 23450 52726 9897 34351 55025 13870 42959 21942 65460 1806
+31570 52045 18335 40891 8895 61728 28838 16555 49403 36412 2432 59121
+26638 41478 11531 50316 20472 34768 64450 7677 47670 22102 39217 12287
+61992 26310 45638 5932 40845 21600 55354 2234 33415 47710 17830 64158
+5163 33033 44837 14102 57704 23590 41086 7505 49321 25901 64601 11749
+39854 21810 51901 6654 34155 61108 14063 45466 27926 8295 49805 37501
+20442 58219 1318 44304 29172 16624 65053 36454 5911 50326 28513 15564
+61119 35807 9159 44997 24013 54722 13730 38954 23464 60585 1739 32170
+46277 13604 54642 23761 39734 3671 56992 23607 39707 12232 62931 21683
+48416 7359 31225 59434 19223 42272 12857 63848 28868 1860 49973 37425
+20191 57411 11240 47418 22601 40672 2901 63366 34092 17756 54183 6067
+47721 27267 42071 11581 61787 19803 47248 30045 3327 51685 35528 20170
+57555 7869 46991 27101 41684 12910 64127 25203 47929 5033 38788 21568
+53162 10095 32492 65018 15890 46562 29616 2208 61955 35516 19049 51012
+9086 30953 59516 15017 46042 27688 3779 56660 37268 13339 46859 24236
+59259 958 40825 22476 52880 9250 31387 65080 15583 45329 29059 6499
+53232 35593 14822 57994 24986 47441 4133 41081 21527 64791 15061 32338
+50835 5528 42839 24676 61278 13897 31563 51621 8691 43338 25521 60216
+3442 33828 48012 19661 58615 7822 41737 24152 52637 10706 33398 63106
+15532 45436 28039 7546 57604 38233 15079 30162 48666 63 56600 25826
+38905 8141 48838 22448 64574 11792 40949 25687 48952 7355 54109 24892
+39141 10617 63971 21528 48987 6076 40950 26245 62433 11095 39609 17605
+51997 29291 4046 57990 36741 17733 49468 9575 33628 63346 19574 47890
+6749 38911 27285 61518 12590 48486 25886 39357 260 57689 18118 32027
+48590 5428 61865 23641 40298 11321 59084 22829 49389 6101 34554 46394
+15579 63552 23945 41204 58529 10980 43030 21386 62996 1106 34909 52301
+13232 42168 23849 62196 1899 47559 20465 37768 56285 9078 31148 48538
+20424 60273 4705 33229 45688 15897 52878 28209 5874 65490 38073 15712
+30188 48567 9765 56994 24020 38543 2048 47667 22912 64024 13770 31589
+45684 3439 50853 21113 33368 63398 9607 44909 19886 32381 62051 5074
+44403 34687 20654 61097 181 42891 26009 55364 9526 36997 51337 15522
+31901 61620 7816 44248 27329 16294 51946 37676 5878 57094 23791 42111
+11485 64633 21728 40450 5094 55027 23566 47756 12959 32425 60888 9035
+43559 25465 55502 3931 31665 47739 20670 58884 9104 41106 25649 61349
+13361 40364 23859 54533 1698 40132 21450 51793 14094 35939 61621 7820
+28713 48864 19570 64403 11559 39396 25777 54277 2400 43687 21963 62586
+13240 39709 27243 52828 3084 38527 22158 57356 13415 45862 28630 7583
+59751 36033 18469 53870 4167 41984 25854 53015 9817 33575 59344 13762
+43412 23212 53289 2519 33856 62823 17676 42837 8709 55487 29543 16337
+49972 37260 3457 61501 22638 45854 13990 33652 62808 981 44307 27815
+16597 59226 37475 8209 53569 23743 42257 12279 57165 23134 40108 5871
+59771 21671 38646 12366 62194 25803 41481 5288 50843 19402 33892 58958
+2418 45431 25832 38487 13829 57511 27141 48634 703 42194 18866 60852
+30021 5278 49635 35835 13034 59819 26230 43086 4337 56422 20071 33408
+50990 10733 42997 23694 62576 6636 39459 21609 52541 3174 31785 56513
+14374 42825 25191 52044 329 32568 57427 15885 48513 35606 10586 62845
+25609 42736 8069 54368 22977 40640 12116 61251 25946 48759 3689 39018
+21491 60145 14765 32987 46617 949 57222 24844 41922 15582 53574 29680
+2839 62475 35774 18701 51051 9631 32346 55601 17871 46038 3853 33165
+56701 13616 41549 24622 52999 227 31850 57596 18216 47194 4370 33503
+64191 17146 49216 10669 38529 26896 62111 7059 48820 18351 32650 60105
+8765 43578 24858 51447 2619 33320 56055 15948 44109 29369 4411 52393
+20475 34006 55787 8898 44387 17409 31198 60934 5240 42945 25047 52533
+9619 30802 56453 14182 41096 23686 58911 58 38323 22433 54826 8827
+43695 25612 59708 12545 40699 24748 63110 1280 38760 22278 53331 8967
+36256 57484 15404 29793 50456 344 43259 25076 58818 12309 38805 21573
+51843 6918 31615 55824 16004 44124 28092 4563 64731 36530 12000 52887
+22146 42614 7270 63415 29797 15279 54269 35787 11094 49747 25722 41696
+3021 59993 22137 40296 11152 48308 26825 55772 5721 39637 21134 61973
+12127 35033 51679 8238 39925 22405 54192 229 34250 58983 19545 47861
+6577 39458 23380 62789 11300 31082 53389 15135 44918 28190 942 63986
+38142 14387 30104 56155 5106 43204 22778 51974 12687 34084 65370 3783
+43357 23419 52935 12226 34456 62209 18903 44449 1965 36442 57004 15497
+30000 46453 4468 61191 23731 40954 13234 55747 22590 46236 3092 35785
+53577 13926 30508 59352 6810 47618 20123 32782 61710 12269 42780 25624
+54151 1018 39317 26954 59709 11223 43627 21370 56402 4599 32295 52700
+13742 42559 23514 64815 9070 34361 53923 19866 45511 1868 33689 48462
+19123 62490 10432 40166 21995 54313 2330 39019 26724 17773 50074 3969
+30840 54912 15234 41782 25242 57813 5291 34755 50066 15005 30015 63922
+6936 44467 27550 14747 57673 38159 229 29182 49006 19523 61792 9530
+30669 44378 13902 54918 23127 39794 3916 60579 27015 49241 12318 39996
+21689 61347 6671 34948 54382 19268 42110 10976 56134 26350 40074 1376
+59802 17098 29413 48290 8779 53583 27599 14742 58744 35868 6993 50217
+27966 16614 63954 38084 2600 29901 54851 14538 47160 27916 3726 62831
+35667 16800 53648 28643 471 49491 35740 15883 58923 28723 8183 49908
+37099 19160 57227 1759 42049 22908 52316 11680 34003 65274 14728 45314
+28237 636 55167 35738 17588 50019 6377 32964 63913 12612 43541 23490
+56729 4882 33130 47125 18487 58373 340 32264 44308 16338 52470 29297
+8703 60831 36126 18144 49943 6536 42072 24905 64112 9512 48203 32007
+16947 61457 37665 480 52191 23124 43382 11268 62299 30145 14970 50088
+35856 6431 64512 22171 48042 3724 39907 26743 58061 10877 49223 19697
+32204 45186 320 60342 24741 39934 10637 57530 20056 35875 53651 7308
+29016 48327 20798 56060 12234 34566 43736 3704 63752 29188 15388 51784
+38012 1400 31046 58539 14084 43732 24962 51087 3273 32355 55483 18299
+43526 11479 60775 26492 39950 7957 55256 21976 48064 4610 32379 64138
+12982 39527 25310 52331 8305 37593 62945 16638 28562 47020 7282 54322
+22498 39776 14769 63900 28550 587 53382 38182 14281 31690 55463 8591
+43755 24889 61220 12147 39831 21561 59058 5962 38410 27187 64618 9430
+44190 18867 29695 52798 4101 34509 59498 15734 44551 28152 1384 56937
+36864 17825 53133 9574 43438 27238 54547 6289 39013 20939 63004 13554
+31121 51046 5716 43631 23606 58359 12100 40995 23493 48499 5220 64452
+27146 41373 11607 49176 21644 61701 7110 34213 47016 20188 63330 11763
+40134 22932 51888 8356 31422 56091 18883 45872 3304 32762 58683 15357
+44293 28613 811 53795 36193 16303 63367 28913 10316 49441 35900 20360
+60963 6887 34556 47383 13530 58998 23768 39809 713 64593 19857 33563
+47982 12418 57897 23652 39569 1695 50796 17147 32087 65284 7463 47138
+26510 39557 10962 62534 19138 35983 50378 4072 29517 56365 18826 43553
+10517 50577 20721 31451 60359 3485 45805 19556 32559 62535 10721 42282
+23412 53760 5657 32016 63967 13799 47210 25433 40800 1401 58541 22459
+49049 12422 40719 24781 61204 2412 33078 51089 16960 45627 28277 5189
+61862 37923 20356 55132 7097 37033 51311 16237 30789 63950 462 49056
+22111 38358 13529 58655 26348 48285 2759 31280 55728 17804 43536 10270
+63498 26263 41062 13283 50784 29316 2213 56731 35742 18952 49526 4912
+37843 60476 17035 30805 47557 8620 52117 27808 16670 60982 37477 1681
+49245 27734 16168 55116 38115 9373 28670 59858 17355 40923 5600 49086
+25363 54394 8744 33483 62877 19296 43123 12305 51970 29336 838 58249
+36304 19498 49840 9672 32115 65525 20596 44586 1784 40824 25933 57209
+10369 39713 21871 51139 5584 32570 64473 13349 42386 23121 55168 2640
+37201 49725 15243 29180 60348 7767 45810 28422 15034 58251 37228 4053
+50859 27543 16331 59904 38088 6957 30559 55368 15071 47089 28239 9115
+65092 35960 22428 61377 14107 32600 46520 7063 59560 30773 19035 44465
+10550 54812 25834 40244 3186 60006 22820 39623 10549 52370 31620 16715
+59227 35284 6249 50726 22689 46351 2517 33584 63271 17914 47659 8253
+33009 57589 15167 45705 28971 586 51694 37414 16274 58831 27920 5271
+49392 36317 20653 64188 11891 34885 51863 21279 43886 3603 36847 56886
+12656 30890 46398 19116 60188 4877 41720 26871 47395 12174 57000 23309
+41408 7041 59786 31965 15175 49856 37796 8477 55895 25095 42587 11983
+62041 22266 39487 3025 52195 30171 12119 63594 34834 16472 49452 27770
+4507 58638 37500 19492 51739 8354 40658 26715 62231 11779 29954 52925
+19041 46205 3008 36854 60276 16292 29469 52573 8389 42025 24802 61146
+13987 34357 47048 5387 55180 24644 40995 14123 58848 30863 1169 51667
+36246 15515 56717 27719 4421 49671 36187 15002 58947 29479 8068 49181
+37640 20083 57653 2044 45093 28483 16752 55556 37969 8672 31509 61903
+15804 46972 29065 5431 52619 36202 15467 64358 28107 6242 49261 37769
+17968 51362 2148 32248 63373 17426 45116 5043 32548 60768 16776 44900
+27424 7689 55053 35862 19836 47427 10919 64868 27000 41569 6939 53326
+17193 34603 62932 10006 39675 22454 51754 216 32146 64650 16025 44726
+28879 9583 56654 36958 17989 51041 2748 43132 23111 58841 14242 35112
+49959 1500 31861 57547 12260 43551 24068 50489 5882 32111 60520 16764
+45697 27490 3949 64894 37981 15873 30078 48346 1669 54770 24806 41689
+13699 49118 22783 55511 2808 34033 46633 13356 63554 24518 39739 7001
+50625 19623 32445 62338 12707 48272 25215 40585 2956 65394 21659 38329
+12577 58700 23561 41244 2120 54946 27042 38340 11020 63620 17829 31995
+46664 528 54606 21731 38611 13822 59684 26534 38513 2245 51559 17709
+31269 57864 4512 44286 28715 15845 59972 35333 1834 50818 26598 43225
+12878 65286 22012 40928 5856 55215 24874 49135 12843 41115 22068 57962
+5304 32300 53225 17703 42181 2034 64097 29847 15561 50103 36232 10884
+54575 26560 46052 5654 39542 17202 62676 29704 10467 49622 37043 20860
+60557 4310 43539 25555 52095 13047 33155 57050 2160 45768 27824 16201
+61316 38235 8214 31821 49096 17283 65077 5242 38301 27290 52167 14095
+37639 56800 6710 28456 49478 15602 34879 60643 2711 42172 22986 52704
+8784 37144 62335 15619 29591 46954 6044 53557 28950 15399 57502 35632
+7548 49515 27356 14796 58433 35146 1624 49190 29791 17850 62680 12088
+46272 25692 39161 8762 54665 27131 43552 5221 61376 18734 33784 46159
+9496 60296 22830 38817 4731 53137 30787 16198 58254 36014 7099 47006
+25755 64447 9610 41631 23183 52844 12854 33385 57768 2693 44023 21055
+33823 64763 10118 42862 19903 51537 30238 6171 58521 36668 19848 50334
+1337 32617 63800 19294 47317 11246 38581 26460 58688 3347 41100 22420
+50123 13884 32633 63348 7179 45318 27924 15447 59853 36259 4635 54259
+22906 46551 14447 31631 62077 3670 43803 26531 52939 15096 30109 56171
+7121 45503 28209 16595 62605 35326 10176 52416 24023 41242 1231 63742
+19184 32272 47284 6306 55858 18571 30331 44838 9789 64180 25793 39560
+422 57538 18215 30210 52165 5597 43370 2541 54154 27180 38512 12057
+62425 22694 48812 667 36394 51778 16110 30377 64950 8312 45105 19813
+32842 55485 1709 47306 27517 14199 64504 37613 8298 53354 23953 41784
+12013 55391 21723 40575 3543 59989 26261 43135 10891 53229 20124 31036
+65189 8885 46797 23717 41557 3082 58159 18000 30460 54176 6658 46033
+17452 30881 62562 10577 49258 22992 40754 1856 64984 25133 49473 11248
+39345 21788 52676 893 35874 63287 12786 29233 50571 19004 43037 2414
+65369 21089 31386 47693 6717 56627 18625 31981 44234 9846 55257 22242
+40456 6267 61321 26228 46892 10590 31914 54504 17225 43159 2329 59759
+20459 36053 49598 5509 31824 63534 10634 41637 22429 55202 13503 33836
+46487 1528 65088 22648 39031 11267 56385 26519 49164 3244 38769 21378
+63774 11769 48714 26458 40701 7036 61109 19889 31292 44841 11306 55175
+24548 40436 2887 65143 18051 34844 51952 10131 29772 62717 13162 42262
+22589 52675 868 41508 25939 58494 11440 38897 25473 55266 3149 42671
+22280 59407 11705 31339 53922 20617 43543 7815 58505 26903 39292 11066
+52077 20070 37747 57283 448 30879 48470 13734 62003 26098 40642 4263
+55913 18790 35943 50357 2226 30146 60244 20377 42013 7395 48875 25111
+57591 12531 39584 23570 52636 3978 33497 61441 20802 44499 12679 35061
+62644 6802 30151 52800 19243 42449 10252 65162 26791 39438 3181 53038
+19655 34629 58650 10070 44326 19399 33281 56311 6823 49222 24252 41555
+10767 62270 17928 32429 44859 4809 58133 25643 38870 10998 60865 17638
+30071 51949 813 42457 23398 58712 11890 29935 53903 5544 46128 22823
+38588 10753 56403 26899 44051 6823 50640 18171 32483 62272 9495 48084
+22423 40806 4802 55811 25940 40080 10391 60723 25052 47949 6095 33573
+55886 12958 43312 23773 64802 8032 34647 46625 19304 54401 10640 41485
+25193 61647 5068 38343 21041 53290 9079 38246 27260 59827 11508 47858
+21105 38428 3533 64713 26893 43872 12382 51097 19378 34034 56462 7858
+43180 25026 58180 3947 40698 23094 61681 9410 48357 20454 34227 56740
+3323 43514 19246 53377 28822 8402 58668 35818 18312 49324 7118 29945
+64186 15013 44002 27302 6443 52948 35434 20005 57032 812 46020 26971
+41191 11195 55645 24629 43666 1920 63727 19280 36619 51105 10344 30561
+57722 16906 46107 28244 5219 56106 35272 19913 44685 10260 60176 26114
+39912 251 55392 21650 43680 13101 65399 30536 9112 51717 37618 21157
+59689 4859 44258 19734 32532 56571 2139 42875 21312 64838 11717 36260
+50605 15523 29673 57134 1173 48761 24440 40797 12633 65501 21857 48123
+2942 40327 24597 61466 12563 38754 21331 55503 691 36503 50028 16849
+27893 62364 7929 46080 27614 15420 53823 34831 4702 59698 28114 15208
+49322 35003 7925 61809 25569 45780 13648 41809 22927 54033 5066 32810
+61125 15652 46015 28156 8261 52433 37032 17794 56374 2512 33997 51301
+12389 44162 28940 16460 60707 37158 7351 53134 24342 48632 11320 38586
+21172 64032 110 34392 47706 13686 60711 24645 39097 3918 54733 18422
+46283 32668 8720 57416 25675 42120 11332 52890 20818 33887 62110 2877
+41970 23632 48739 12132 54609 20605 34098 45363 8207 60452 24640 39961
+63838 13608 47571 21453 40792 4504 57268 26162 39386 11638 55444 21675
+46723 6025 34636 61172 17833 41636 9696 57162 26445 39850 4339 51478
+30680 16934 60746 36052 1032 48178 25671 63744 13188 38390 21078 50592
+6651 34161 61720 18064 45135 1872 35728 59312 15014 30774 52658 10325
+43891 21173 34312 61107 769 47656 18863 34064 55925 9028 45086 28535
+15719 59072 37919 5298 31737 48364 17488 61295 9082 33838 45526 20912
+57997 4759 38617 27075 52337 9947 33572 59082 17477 45420 1088 34709
+64139 16178 48238 28125 4206 59441 35207 19518 51196 113 44215 35303
+20995 64597 11451 41799 25914 57235 7739 41285 22978 51201 14104 33659
+56483 3945 43029 25385 59376 9655 31636 51983 15807 44764 29397 5966
+61705 35546 14926 46051 25734 57395 7498 31505 44606 18640 53699 2189
+34518 63143 15996 46535 28795 9009 56493 37329 20952 50590 6519 42459
+25751 59599 3450 33444 47247 14446 54808 23948 39059 5751 64845 21661
+44464 14191 51687 32881 8455 61685 35612 17320 49211 1067 33283 56529
+14594 42051 24180 65373 3122 34795 50248 15741 29045 59918 8057 41924
+23674 52473 11697 38496 21677 61229 6410 32163 46505 17540 56725 11954
+38264 27282 47259 5035 63711 18540 32646 46269 9110 50502 17566 30906
+59203 1197 46640 28512 15732 55413 36568 4285 46767 24292 59945 13465
+38483 22062 55806 6236 37261 49513 14480 30214 60993 1274 47570 23481
+40247 14572 63270 29289 2568 53917 36393 21309 51837 8914 47304 19755
+32222 65262 5722 45062 19584 32166 56291 8864 48036 18674 31852 60461
+3123 43038 24428 52695 14628 31673 62040 375 46974 28855 16069 59630
+37016 4218 53676 24637 43915 12212 33223 58083 19235 49421 3042 32411
+45669 18624 64007 11327 40907 23365 52248 4019 37116 57006 14534 29477
+48345 674 62753 22605 39022 7543 48504 27280 57743 13847 43481 24296
+63118 1214 39394 22533 55559 8004 49314 26063 40743 10819 61659 22543
+38924 135 54117 27086 38348 9772 60605 21132 48798 13069 38388 27246
+52164 1296 36403 65003 15044 30085 50366 11869 42313 24201 62137 461
+40938 21872 52558 13383 31939 55771 4985 47478 28339 16652 62689 37570
+7545 48397 23842 59360 12041 39067 22934 61177 6271 47753 17951 31293
+54364 7967 42254 24270 61731 676 39690 21973 49108 12540 64857 25887
+40209 2963 51518 17664 33450 62819 11142 48371 24994 38542 3453 52743
+28662 16033 61641 36339 6387 49474 27992 15529 53017 35990 8067 60477
+26453 47652 9891 40979 23219 53385 4270 34680 62220 16905 44264 28772
+5788 53859 37275 18294 56785 10447 43242 26683 52003 7478 32463 59596
+15504 46708 28930 6227 54558 38105 14612 32541 56923 3354 41927 23560
+63240 13181 35865 51193 304 42640 23906 55784 11867 38526 21271 65196
+2743 36123 50657 12605 29900 57551 20290 44160 419 33912 64219 21293
+42431 11498 58318 23363 40360 6342 48181 24429 64915 1165 33942 43922
+19152 55537 5258 40469 27127 59056 12538 43489 21439 52133 6292 32947
+58391 19800 41960 11502 48610 22836 65372 2319 34406 45055 17467 60800
+5200 37471 51623 15519 28498 46898 7776 61181 25301 38661 3821 56488
+17828 30982 50336 9466 34670 14867 53804 25584 44917 6863 33306 63290
+15633 47803 28883 2183 59447 37042 16630 49950 28063 3616 52548 36526
+20538 62403 11816 42536 23005 55760 7749 45984 29000 15348 58984 34934
+9030 52218 24572 42876 4220 57229 22944 39782 13378 55658 26496 38990
+7912 51168 19059 33047 64580 4683 45122 27897 14715 58367 38162 6174
+29856 53755 20527 48857 2894 33064 63815 18671 43672 11730 53410 21036
+30358 56071 3762 44061 17405 31397 62118 11752 43271 23809 54596 5612
+39740 21827 61492 12818 46616 29036 7665 53129 36938 18022 57480 11794
+42854 26750 62779 8723 33998 53542 18096 47211 5127 34971 61113 15754
+29499 53826 895 45654 28149 16745 61962 38136 7661 29321 48724 18246
+63198 2456 39829 25524 55575 12384 43487 21997 53141 717 33740 64775
+14506 47054 33256 9939 58044 24542 42675 5363 51067 18447 34512 59187
+11 45554 17151 34957 63994 11712 30373 46164 20488 57784 7309 41163
+26713 60573 12042 38302 21075 50014 2326 30286 57233 16627 44412 27419
+4769 63272 37171 19710 52466 6495 45604 29801 11866 60989 37202 19333
+53325 5534 33660 46766 13193 64109 25594 41007 1809 54350 22679 45009
+9404 34238 65295 19162 49356 929 42722 26073 59297 13931 35214 53896
+3129 42260 22918 62372 11682 41780 25686 53194 7838 40564 22521 58086
+11858 39289 26961 63445 368 47957 17662 34810 52085 7544 28896 64370
+20224 42714 12909 54938 34625 5407 49697 20550 33723 58913 10086 44441
+17060 35053 61354 107 29466 53591 13141 42294 24083 59772 3882 34746
+53507 14732 44365 27625 9867 63078 37561 18561 50387 7280 33492 57413
+13028 42480 23917 52368 8936 34107 64773 19407 46554 1243 34897 61631
+16154 44599 28459 7887 59870 37581 17154 54001 1534 36210 49398 16713
+31503 61239 8288 44550 27371 16826 59381 36878 11042 52250 24084 42238
+2833 54983 21840 40588 9543 48240 26770 58835 13584 34170 45982 2669
+60510 19578 33168 51947 6496 43806 25480 59595 13253 41524 23539 50596
+3023 31651 62569 18513 42286 7606 58492 26079 40631 10635 55193 21775
+39178 5857 60034 31478 15853 49748 37831 3699 63805 23072 44618 12235
+34445 59805 1492 41563 21760 54411 13081 30694 45453 3248 57338 29051
+15942 50161 35687 2593 64460 23251 46383 14533 32335 59336 8899 45480
+19145 36040 54273 4219 31362 58719 20412 45498 9366 30584 57035 20277
+43953 5669 32584 60706 18772 47381 9627 32467 56930 18146 45891 840
+33617 63889 13856 42016 24170 54911 3335 38331 21821 59622 13889 45564
+32046 7529 57711 27538 12258 50496 36026 20871 62565 1530 34977 49456
+16361 29118 63561 3708 35037 44792 12263 57919 24304 41357 1934 64155
+20337 36145 51787 10335 29542 48073 20374 61435 6815 31419 46184 18717
+58048 4440 40639 27023 48628 10931 54767 25174 39763 6173 60429 17754
+47747 29471 9199 54830 35710 18192 48624 3038 62149 27248 38456 10527
+52333 17890 32084 57924 8745 47155 28996 16213 63461 35883 2837 50802
+24968 41499 10337 55632 23543 39719 1392 62320 28924 15848 51034 36236
+8053 56555 25029 47926 12378 39860 22481 59340 753 34396 54180 18156
+44498 10781 32711 64752 15152 47351 28049 1123 58601 36533 21147 38804
+3048 48697 27017 55686 9144 40362 24540 60838 12393 39668 22360 53727
+7555 31206 64267 15108 45677 29151 377 58292 35420 18658 50370 5150
+34522 64883 20548 42206 2714 54623 27052 39392 9956 62396 18902 35079
+49633 93 29473 63178 12645 42544 23597 56799 2637 36660 50211 16084
+30160 61615 8543 48207 24460 40477 11714 62763 25920 39720 7610 56595
+20121 34188 50925 336 42207 24769 60990 10498 34402 52966 20494 46541
+1627 34559 64854 14324 41318 26298 57513 3383 32811 51065 14186 41797
+23995 60749 1541 40980 22792 50236 6816 30058 56451 14599 45223 27695
+2207 59152 37799 20774 50186 9170 34013 65507 12912 43735 22140 51681
+4963 34882 58920 20034 45106 10677 34210 57567 21145 48963 4453 38719
+26922 60567 11151 29460 51025 20288 41648 3537 62357 26393 39236 12426
+55922 22533 47712 7239 32110 60981 19412 43452 9337 54986 27121 39816
+4548 51231 17234 32639 53670 1511 43688 24375 63403 10476 41266 22457
+52494 7669 37646 58729 14775 29621 50245 9238 41807 24981 59571 15280
+35937 49555 1506 28577 55867 14798 42327 22506 58751 3447 37098 50369
+15880 30195 62204 7522 48540 24472 38794 13070 58198 24106 38536 4834
+51233 19024 30813 61332 8796 45671 28545 15000 56278 37989 5494 32199
+64484 19962 47791 2643 32978 54066 20789 42607 8595 56418 25438 40745
+11258 58140 22660 46934 3906 31640 60315 9919 41129 25282 56006 13903
+37134 50791 3029 30244 64039 18639 46614 7461 36903 57065 15664 31327
+50620 6296 45945 28018 16538 64256 37322 1615 49803 20557 30947 56140
+4712 44535 28161 16415 63833 37934 2368 29931 47941 17400 56691 6952
+31331 44850 15042 53066 27580 5695 56096 36426 19760 47162 9694 57876
+21032 30185 44901 5355 65495 28426 15349 51508 38077 2168 32423 55481
+20658 43781 6022 63878 26836 39364 12381 56662 18353 35502 51461 4344
+31281 64369 18226 44101 9752 31264 54542 13300 41985 23749 63607 3863
+39880 21501 57473 9295 33153 53807 14485 43557 25335 51380 5009 33048
+63676 17559 46669 2076 36868 53062 14445 28603 58013 7909 46500 27407
+16603 53172 35415 8868 57927 25039 46519 14555 32772 65498 6014 43634
+24419 51401 14371 34763 62381 8417 42538 24373 55039 11926 40163 21608
+57837 3691 38976 26656 53122 11343 29915 63054 17714 44013 7670 34447
+49393 17140 63612 1737 34644 45012 14046 54416 26486 39184 2707 64499
+24499 43445 10777 52442 20813 29992 57777 7075 44856 35304 17622 62856
+10951 42754 26270 52169 124 33986 64246 16118 46591 28379 3886 55418
+38168 15049 29743 58857 8369 46076 27433 13196 55822 37686 20300 51378
+5179 31608 60709 18496 46389 8204 31554 55692 17383 44476 3836 34521
+59011 14006 40960 25728 51897 8667 33313 59451 17747 45512 1277 32319
+62768 13922 42493 23608 53093 3933 36821 61652 14607 28472 46285 7514
+57509 22702 41087 12171 47409 25290 56187 2058 39516 22299 60450 6797
+42834 26224 53585 11695 31848 61585 18003 46854 4846 34695 59600 20765
+48832 11905 41352 25945 54283 3012 30931 63447 17052 42699 6546 51207
+29005 15085 62267 38187 8459 29890 49107 19978 55836 5380 40942 23843
+45646 11238 61934 47799 12689 41146 21867 65439 5015 34241 52475 17940
+45052 1323 33460 58525 13668 43146 25437 50512 5791 34134 61402 17577
+47526 12690 41661 26802 53160 6904 32041 57273 12822 47005 28981 16093
+59566 36372 4741 51056 25199 43563 11567 60261 17388 34330 53697 7346
+47990 26171 39472 10858 59534 20156 33508 54365 1260 44576 19251 35711
+51996 4513 31189 58814 15090 46863 27903 8572 64378 36885 17177 54111
+6086 37877 49378 15283 30103 58574 6843 42549 22945 52058 10304 34659
+55531 18752 43034 5921 64002 29416 16617 53600 37941 10074 31892 63260
+18737 43137 3754 52286 29775 16246 62453 36555 7154 49362 27495 15464
+55887 37994 3413 30514 60066 14633 41918 25130 54823 268 31236 47553
+17334 64281 8916 40996 19422 56206 35027 5771 49439 17330 37903 59016
+8355 29941 54155 18124 44697 1834 33602 63668 14114 40563 26526 54163
+3028 38782 23139 62787 12798 43320 24698 55942 7535 39915 21949 59909
+13446 39601 26910 56671 5241 29752 47190 18875 64596 180 34477 46089
+18761 53666 3732 32424 62907 12614 43045 23320 51942 8538 35408 63895
+11329 29174 45481 20460 57061 5958 34000 44767 19496 59398 2697 41473
+26858 55004 11683 40939 22132 63131 6868 33157 53108 16329 43913 27561
+1671 54270 36055 16706 60242 27309 9732 49987 37608 17962 61577 5838
+44771 30606 15824 62978 35651 2272 51273 26111 40556 12297 53776 18517
+36889 61985 980 28567 47833 20094 59532 8423 40425 25659 54424 12734
+40343 24867 60229 3626 39636 22380 52592 12650 32330 57954 8210 43059
+22724 60297 10920 33669 52861 18158 48356 6414 41223 23312 60753 11982
+48984 26024 41170 9345 62580 19879 36602 50271 2939 30507 63508 12831
+41378 24452 51865 68 33440 62093 13592 42356 23109 53105 8550 34342
+56811 18502 43290 5628 60867 29106 15265 53537 35113 8698 47397 23456
+61448 367 30072 44875 15567 57341 27809 7172 49900 36807 20523 61422
+1601 46195 29902 16455 55847 37958 7618 30115 48058 19112 65408 855
+40119 24009 54580 8362 39481 22440 57666 12644 43540 25964 51083 4472
+32658 63061 15422 44873 29435 1092 61053 37375 19567 51775 5272 42477
+22578 55497 10496 38370 27272 60665 4020 41972 20296 54009 32182 95
+49376 17376 34688 61596 7115 43630 25279 50589 13766 34543 59787 1194
+46812 20926 37785 56416 6201 29634 46500 20756 59171 11029 40029 24365
+48023 7374 55705 21781 40986 12640 59947 26688 39021 4044 50500 19289
+32135 61223 1930 46784 20541 31395 56802 6135 49102 17960 30275 44605
+8461 60542 22972 39691 11972 52269 26081 43763 5678 61117 19555 37052
+50468 522 30588 64675 17448 44059 10346 34488 49422 21035 57364 1016
+39454 26930 48495 11647 65040 18188 32267 44305 2419 54853 22625 39356
+10607 64414 29099 15818 50968 36966 6914 45271 24539 58094 9822 40326
+19441 51553 31815 926 64644 37186 17485 50654 4850 34652 62857 15725
+45586 29400 9154 51563 35427 18079 64255 671 44211 35087 14153 49139
+25585 57414 8341 31022 45257 17394 64613 5810 34614 46945 20666 58981
+9486 34114 45590 21493 53916 3518 33540 57889 16657 45181 27491 1942
+63169 36469 15603 51896 31165 7372 58087 24664
+ </sequence>
+ </array>
+ </dither-matrix>
+</gutenprint>
diff --git a/src/main/dither-ordered.c b/src/main/dither-ordered.c
new file mode 100644
index 0000000..6a17d83
--- /dev/null
+++ b/src/main/dither-ordered.c
@@ -0,0 +1,166 @@
+/*
+ * "$Id: dither-ordered.c,v 1.17 2004/09/17 18:38:20 rleigh Exp $"
+ *
+ * Ordered dither algorithm
+ *
+ * Copyright 1997-2003 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Revision History:
+ *
+ * See ChangeLog
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include "dither-impl.h"
+#include "dither-inlined-functions.h"
+
+static inline void
+print_color_ordered(const stpi_dither_t *d, stpi_dither_channel_t *dc, int val,
+ int x, int y, unsigned char bit, int length)
+{
+ int i;
+ int j;
+ unsigned bits;
+ int levels = dc->nlevels - 1;
+
+ /*
+ * Look for the appropriate range into which the input value falls.
+ * Notice that we use the input, not the error, to decide what dot type
+ * to print (if any). We actually use the "density" input to permit
+ * the caller to use something other that simply the input value, if it's
+ * desired to use some function of overall density, rather than just
+ * this color's input, for this purpose.
+ */
+ for (i = levels; i >= 0; i--)
+ {
+ stpi_dither_segment_t *dd = &(dc->ranges[i]);
+
+ if (val > dd->lower->value)
+ {
+ /*
+ * Where are we within the range.
+ */
+
+ unsigned rangepoint = val - dd->lower->value;
+ if (dd->value_span < 65535)
+ rangepoint = rangepoint * 65535 / dd->value_span;
+
+ if (rangepoint >= ditherpoint(d, &(dc->dithermat), x))
+ bits = dd->upper->bits;
+ else
+ bits = dd->lower->bits;
+
+ if (bits)
+ {
+ unsigned char *tptr = dc->ptr + d->ptr_offset;
+
+ /*
+ * Lay down all of the bits in the pixel.
+ */
+ set_row_ends(dc, x);
+ for (j = 1; j <= bits; j += j, tptr += length)
+ {
+ if (j & bits)
+ tptr[0] |= bit;
+ }
+
+ }
+ return;
+ }
+ }
+}
+
+
+void
+stpi_dither_ordered(stp_vars_t *v,
+ int row,
+ const unsigned short *raw,
+ int duplicate_line,
+ int zero_mask,
+ const unsigned char *mask)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ int x,
+ length;
+ unsigned char bit;
+ int i;
+ int one_bit_only = 1;
+
+ int xerror, xstep, xmod;
+
+ if ((zero_mask & ((1 << CHANNEL_COUNT(d)) - 1)) ==
+ ((1 << CHANNEL_COUNT(d)) - 1))
+ return;
+
+ length = (d->dst_width + 7) / 8;
+
+ bit = 128;
+ xstep = CHANNEL_COUNT(d) * (d->src_width / d->dst_width);
+ xmod = d->src_width % d->dst_width;
+ xerror = 0;
+
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ {
+ stpi_dither_channel_t *dc = &(CHANNEL(d, i));
+ if (dc->nlevels != 1 || dc->ranges[0].upper->bits != 1)
+ one_bit_only = 0;
+ }
+
+ if (one_bit_only)
+ {
+ for (x = 0; x < d->dst_width; x ++)
+ {
+ if (!mask || (*(mask + d->ptr_offset) & bit))
+ {
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ {
+ if (raw[i] &&
+ raw[i] >= ditherpoint(d, &(CHANNEL(d, i).dithermat), x))
+ {
+ set_row_ends(&(CHANNEL(d, i)), x);
+ CHANNEL(d, i).ptr[d->ptr_offset] |= bit;
+ }
+ }
+ }
+ ADVANCE_UNIDIRECTIONAL(d, bit, raw, CHANNEL_COUNT(d),
+ xerror, xstep, xmod);
+ }
+ }
+ else
+ {
+ for (x = 0; x != d->dst_width; x ++)
+ {
+ if (!mask || (*(mask + d->ptr_offset) & bit))
+ {
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ {
+ if (CHANNEL(d, i).ptr && raw[i])
+ print_color_ordered(d, &(CHANNEL(d, i)), raw[i], x, row,
+ bit, length);
+ }
+ }
+ ADVANCE_UNIDIRECTIONAL(d, bit, raw, CHANNEL_COUNT(d), xerror,
+ xstep, xmod);
+ }
+ }
+}
diff --git a/src/main/dither-predithered.c b/src/main/dither-predithered.c
new file mode 100644
index 0000000..df5b71a
--- /dev/null
+++ b/src/main/dither-predithered.c
@@ -0,0 +1,134 @@
+/*
+ * "$Id: dither-predithered.c,v 1.2 2004/09/17 18:38:20 rleigh Exp $"
+ *
+ * Very fast dither algorithm
+ *
+ * Copyright 1997-2003 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Revision History:
+ *
+ * See ChangeLog
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include "dither-impl.h"
+#include "dither-inlined-functions.h"
+
+static inline void
+print_color_very_fast(const stpi_dither_t *d, stpi_dither_channel_t *dc,
+ int val, int x, int y, unsigned char bit,
+ unsigned bits, int length)
+{
+ int j;
+ if (bits && val)
+ {
+ unsigned char *tptr = dc->ptr + d->ptr_offset;
+
+ /*
+ * Lay down all of the bits in the pixel.
+ */
+ set_row_ends(dc, x);
+ for (j = 1; j <= bits; j += j, tptr += length)
+ {
+ if (j & bits)
+ tptr[0] |= bit;
+ }
+ }
+}
+
+void
+stpi_dither_predithered(stp_vars_t *v,
+ int row,
+ const unsigned short *raw,
+ int duplicate_line,
+ int zero_mask,
+ const unsigned char *mask)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ int x,
+ length;
+ unsigned char *bit_patterns;
+ unsigned char bit;
+ int i;
+ int one_bit_only = 1;
+
+ int xerror, xstep, xmod;
+
+ if ((zero_mask & ((1 << CHANNEL_COUNT(d)) - 1)) ==
+ ((1 << CHANNEL_COUNT(d)) - 1))
+ return;
+
+ length = (d->dst_width + 7) / 8;
+
+ bit = 128;
+ xstep = CHANNEL_COUNT(d) * (d->src_width / d->dst_width);
+ xmod = d->src_width % d->dst_width;
+ xerror = 0;
+
+ bit_patterns = stp_zalloc(sizeof(unsigned char) * CHANNEL_COUNT(d));
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ {
+ stpi_dither_channel_t *dc = &(CHANNEL(d, i));
+ if (dc->nlevels > 0)
+ bit_patterns[i] = dc->ranges[dc->nlevels - 1].upper->bits;
+ if (bit_patterns[i] != 1)
+ one_bit_only = 0;
+ }
+ if (one_bit_only)
+ {
+ for (x = 0; x < d->dst_width; x ++)
+ {
+ if (!mask || (*(mask + d->ptr_offset) & bit))
+ {
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ {
+ if (raw[i])
+ {
+ set_row_ends(&(CHANNEL(d, i)), x);
+ CHANNEL(d, i).ptr[d->ptr_offset] |= bit;
+ }
+ }
+ }
+ ADVANCE_UNIDIRECTIONAL(d, bit, raw, CHANNEL_COUNT(d),
+ xerror, xstep, xmod);
+ }
+ }
+ else
+ {
+ for (x = 0; x < d->dst_width; x ++)
+ {
+ if (!mask || (*(mask + d->ptr_offset) & bit))
+ {
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ {
+ if (CHANNEL(d, i).ptr && raw[i])
+ print_color_very_fast(d, &(CHANNEL(d, i)), raw[i], x, row,
+ bit, bit_patterns[i], length);
+ }
+ }
+ ADVANCE_UNIDIRECTIONAL(d, bit, raw, CHANNEL_COUNT(d),
+ xerror, xstep, xmod);
+ }
+ }
+ stp_free(bit_patterns);
+}
diff --git a/src/main/dither-very-fast.c b/src/main/dither-very-fast.c
new file mode 100644
index 0000000..7b83aa8
--- /dev/null
+++ b/src/main/dither-very-fast.c
@@ -0,0 +1,135 @@
+/*
+ * "$Id: dither-very-fast.c,v 1.15 2004/09/17 18:38:20 rleigh Exp $"
+ *
+ * Very fast dither algorithm
+ *
+ * Copyright 1997-2003 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Revision History:
+ *
+ * See ChangeLog
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include "dither-impl.h"
+#include "dither-inlined-functions.h"
+
+static inline void
+print_color_very_fast(const stpi_dither_t *d, stpi_dither_channel_t *dc,
+ int val, int x, int y, unsigned char bit,
+ unsigned bits, int length)
+{
+ int j;
+ if (bits && val >= ditherpoint(d, &(dc->dithermat), x))
+ {
+ unsigned char *tptr = dc->ptr + d->ptr_offset;
+
+ /*
+ * Lay down all of the bits in the pixel.
+ */
+ set_row_ends(dc, x);
+ for (j = 1; j <= bits; j += j, tptr += length)
+ {
+ if (j & bits)
+ tptr[0] |= bit;
+ }
+ }
+}
+
+void
+stpi_dither_very_fast(stp_vars_t *v,
+ int row,
+ const unsigned short *raw,
+ int duplicate_line,
+ int zero_mask,
+ const unsigned char *mask)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ int x,
+ length;
+ unsigned char *bit_patterns;
+ unsigned char bit;
+ int i;
+ int one_bit_only = 1;
+
+ int xerror, xstep, xmod;
+
+ if ((zero_mask & ((1 << CHANNEL_COUNT(d)) - 1)) ==
+ ((1 << CHANNEL_COUNT(d)) - 1))
+ return;
+
+ length = (d->dst_width + 7) / 8;
+
+ bit = 128;
+ xstep = CHANNEL_COUNT(d) * (d->src_width / d->dst_width);
+ xmod = d->src_width % d->dst_width;
+ xerror = 0;
+
+ bit_patterns = stp_zalloc(sizeof(unsigned char) * CHANNEL_COUNT(d));
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ {
+ stpi_dither_channel_t *dc = &(CHANNEL(d, i));
+ if (dc->nlevels > 0)
+ bit_patterns[i] = dc->ranges[dc->nlevels - 1].upper->bits;
+ if (bit_patterns[i] != 1)
+ one_bit_only = 0;
+ }
+ if (one_bit_only)
+ {
+ for (x = 0; x < d->dst_width; x ++)
+ {
+ if (!mask || (*(mask + d->ptr_offset) & bit))
+ {
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ {
+ if (raw[i] &&
+ raw[i] >= ditherpoint(d, &(CHANNEL(d, i).dithermat), x))
+ {
+ set_row_ends(&(CHANNEL(d, i)), x);
+ CHANNEL(d, i).ptr[d->ptr_offset] |= bit;
+ }
+ }
+ }
+ ADVANCE_UNIDIRECTIONAL(d, bit, raw, CHANNEL_COUNT(d),
+ xerror, xstep, xmod);
+ }
+ }
+ else
+ {
+ for (x = 0; x < d->dst_width; x ++)
+ {
+ if (!mask || (*(mask + d->ptr_offset) & bit))
+ {
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ {
+ if (CHANNEL(d, i).ptr && raw[i])
+ print_color_very_fast(d, &(CHANNEL(d, i)), raw[i], x, row,
+ bit, bit_patterns[i], length);
+ }
+ }
+ ADVANCE_UNIDIRECTIONAL(d, bit, raw, CHANNEL_COUNT(d),
+ xerror, xstep, xmod);
+ }
+ }
+ stp_free(bit_patterns);
+}
diff --git a/src/main/escp2-channels.c b/src/main/escp2-channels.c
new file mode 100644
index 0000000..7d9a839
--- /dev/null
+++ b/src/main/escp2-channels.c
@@ -0,0 +1,2212 @@
+/*
+ * "$Id: escp2-channels.c,v 1.54 2005/06/26 22:07:46 rlk Exp $"
+ *
+ * Print plug-in EPSON ESC/P2 driver for the GIMP.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include "print-escp2.h"
+
+
+#define DECLARE_INK_CHANNEL(name) \
+static const ink_channel_t name##_channel = \
+{ \
+ #name, \
+ name##_subchannels, \
+ sizeof(name##_subchannels) / sizeof(physical_subchannel_t), \
+ NULL \
+}
+
+#define DECLARE_EXTENDED_INK_CHANNEL(name) \
+static const ink_channel_t name##_channel = \
+{ \
+ #name, \
+ name##_subchannels, \
+ sizeof(name##_subchannels) / sizeof(physical_subchannel_t), \
+ &name##_curve \
+}
+
+static hue_curve_t generic_cyan_curve =
+{
+ "CyanCurve",
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+ "<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+ /* C */ "1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 " /* B */
+ /* B */ "1.000 0.875 0.750 0.625 0.500 0.375 0.250 0.125 " /* M */
+ /* M */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* R */
+ /* R */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* Y */
+ /* Y */ "0.000 0.125 0.250 0.375 0.500 0.625 0.750 0.875 " /* G */
+ /* G */ "1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 " /* C */
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n"
+};
+
+static hue_curve_t generic_magenta_curve =
+{
+ "CyanCurve",
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+ "<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+ /* C */ "0.000 0.125 0.250 0.375 0.500 0.625 0.750 0.875 " /* B */
+ /* B */ "1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 " /* M */
+ /* M */ "1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 " /* R */
+ /* R */ "1.000 0.875 0.750 0.625 0.500 0.375 0.250 0.125 " /* Y */
+ /* Y */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* G */
+ /* G */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* C */
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n"
+};
+
+static hue_curve_t generic_yellow_curve =
+{
+ "CyanCurve",
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+ "<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+ /* C */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* B */
+ /* B */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* M */
+ /* M */ "0.000 0.125 0.250 0.375 0.500 0.625 0.750 0.875 " /* R */
+ /* R */ "1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 " /* Y */
+ /* Y */ "1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 " /* G */
+ /* G */ "1.000 0.875 0.750 0.625 0.500 0.375 0.250 0.125 " /* C */
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n"
+};
+
+static hue_curve_t r800_cyan_curve =
+{
+ "CyanCurve",
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+ "<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+ /* C */ "1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 " /* B */
+ /* B */ "1.000 0.875 0.700 0.550 0.400 0.300 0.200 0.100 " /* M */
+ /* M */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* R */
+ /* R */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* Y */
+ /* Y */ "0.000 0.125 0.250 0.375 0.500 0.625 0.750 0.875 " /* G */
+ /* G */ "1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 " /* C */
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n"
+};
+
+static hue_curve_t r800_magenta_curve =
+{
+ "CyanCurve",
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+ "<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+ /* C */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* B */
+ /* B */ "0.000 0.000 0.000 0.002 0.050 0.300 0.600 0.800 " /* M */
+ /* M */ "1.000 1.000 0.850 0.700 0.600 0.500 0.400 0.300 " /* R */
+ /* R */ "0.200 0.100 0.050 0.000 0.000 0.000 0.000 0.000 " /* Y */
+ /* Y */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* G */
+ /* G */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* C */
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n"
+};
+
+static hue_curve_t r800_yellow_curve =
+{
+ "CyanCurve",
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+ "<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+ /* C */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* B */
+ /* B */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* M */
+ /* M */ "0.000 0.000 0.000 0.000 0.000 0.000 0.050 0.150 " /* R */
+ /* R */ "0.250 0.350 0.450 0.550 0.650 0.750 0.850 0.950 " /* Y */
+ /* Y */ "1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 " /* G */
+ /* G */ "1.000 0.875 0.750 0.625 0.500 0.375 0.250 0.125 " /* C */
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n"
+};
+
+static hue_curve_t r800_red_curve =
+{
+ "CyanCurve",
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+ "<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+ /* C */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* B */
+ /* B */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* M */
+ /* M */ "0.000 0.350 0.550 0.700 0.850 1.000 1.000 1.000 " /* R */
+ /* R */ "1.000 0.875 0.750 0.625 0.500 0.375 0.250 0.125 " /* Y */
+ /* Y */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* G */
+ /* G */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* C */
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n"
+};
+
+static hue_curve_t r800_blue_curve =
+{
+ "CyanCurve",
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+ "<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+ /* C */ "0.000 0.125 0.250 0.375 0.500 0.625 0.750 0.875 " /* B */
+ /* B */ "1.000 1.000 1.000 1.000 0.900 0.800 0.500 0.200 " /* M */
+ /* M */ "0.005 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* R */
+ /* R */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* Y */
+ /* Y */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* G */
+ /* G */ "0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 " /* C */
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n"
+};
+
+
+static const physical_subchannel_t standard_black_subchannels[] =
+{
+ { 0, -1, 0, "BlackDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(standard_black);
+
+static const physical_subchannel_t x80_black_subchannels[] =
+{
+ { 0, -1, 48, "BlackDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(x80_black);
+
+static const physical_subchannel_t c80_black_subchannels[] =
+{
+ { 0, -1, 0, "BlackDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(c80_black);
+
+static const physical_subchannel_t c64_black_subchannels[] =
+{
+ { 0, -1, 0, "BlackDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(c64_black);
+
+static const physical_subchannel_t standard_cyan_subchannels[] =
+{
+ { 2, -1, 0, "CyanDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(standard_cyan);
+
+static const physical_subchannel_t f360_standard_cyan_subchannels[] =
+{
+ { 2, -1, 1, "CyanDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(f360_standard_cyan);
+
+static const physical_subchannel_t r800_cyan_subchannels[] =
+{
+ { 2, -1, 1, "CyanDensity", NULL }
+};
+
+DECLARE_EXTENDED_INK_CHANNEL(r800_cyan);
+
+static const physical_subchannel_t cx3650_standard_cyan_subchannels[] =
+{
+ { 2, -1, 2, "CyanDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(cx3650_standard_cyan);
+
+static const physical_subchannel_t x80_cyan_subchannels[] =
+{
+ { 2, -1, 96, "CyanDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(x80_cyan);
+
+static const physical_subchannel_t c80_cyan_subchannels[] =
+{
+ { 2, -1, 0, "CyanDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(c80_cyan);
+
+static const physical_subchannel_t c64_cyan_subchannels[] =
+{
+ { 2, -1, 0, "CyanDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(c64_cyan);
+
+static const physical_subchannel_t standard_magenta_subchannels[] =
+{
+ { 1, -1, 0, "MagentaDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(standard_magenta);
+
+static const physical_subchannel_t r800_magenta_subchannels[] =
+{
+ { 1, -1, 0, "MagentaDensity", NULL }
+};
+
+DECLARE_EXTENDED_INK_CHANNEL(r800_magenta);
+
+static const physical_subchannel_t f360_standard_magenta_subchannels[] =
+{
+ { 1, -1, 1, "MagentaDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(f360_standard_magenta);
+
+static const physical_subchannel_t x80_magenta_subchannels[] =
+{
+ { 1, -1, 48, "MagentaDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(x80_magenta);
+
+static const physical_subchannel_t c80_magenta_subchannels[] =
+{
+ { 1, -1, 120, "MagentaDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(c80_magenta);
+
+static const physical_subchannel_t c64_magenta_subchannels[] =
+{
+ { 1, -1, 90, "MagentaDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(c64_magenta);
+
+static const physical_subchannel_t standard_yellow_subchannels[] =
+{
+ { 4, -1, 0, "YellowDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(standard_yellow);
+
+static const physical_subchannel_t x80_yellow_subchannels[] =
+{
+ { 4, -1, 0, "YellowDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(x80_yellow);
+
+static const physical_subchannel_t c80_yellow_subchannels[] =
+{
+ { 4, -1, 240, "YellowDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(c80_yellow);
+
+static const physical_subchannel_t c64_yellow_subchannels[] =
+{
+ { 4, -1, 180, "YellowDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(c64_yellow);
+
+static const physical_subchannel_t f360_standard_yellow_subchannels[] =
+{
+ { 4, -1, 1, "YellowDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(f360_standard_yellow);
+
+static const physical_subchannel_t r800_yellow_subchannels[] =
+{
+ { 4, -1, 1, "YellowDensity", NULL }
+};
+
+DECLARE_EXTENDED_INK_CHANNEL(r800_yellow);
+
+static const physical_subchannel_t r800_red_subchannels[] =
+{
+ { 7, -1, 0, "RedDensity", NULL }
+};
+
+DECLARE_EXTENDED_INK_CHANNEL(r800_red);
+
+static const physical_subchannel_t r800_blue_subchannels[] =
+{
+ { 8, -1, 1, "BlueDensity", NULL }
+};
+
+DECLARE_EXTENDED_INK_CHANNEL(r800_blue);
+
+static const physical_subchannel_t standard_gloss_subchannels[] =
+{
+ { 9, -1, 0, "GlossDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(standard_gloss);
+
+static const physical_subchannel_t f360_gloss_subchannels[] =
+{
+ { 9, -1, 1, "GlossDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(f360_gloss);
+
+static const physical_subchannel_t standard_photo_black_subchannels[] =
+{
+ { 0, 4, 0, "BlackDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(standard_photo_black);
+
+static const physical_subchannel_t f360_r800_photo_black_subchannels[] =
+{
+ { 0, 4, 1, "BlackDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(f360_r800_photo_black);
+
+static const physical_subchannel_t r800_matte_black_subchannels[] =
+{
+ { 0, 0, 0, "BlackDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(r800_matte_black);
+
+static const physical_subchannel_t photo_black_subchannels[] =
+{
+ { 0, 0, 0, "BlackDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(photo_black);
+
+static const physical_subchannel_t f360_photo_black_subchannels[] =
+{
+ { 0, 0, 0, "BlackDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(f360_photo_black);
+
+static const physical_subchannel_t extended_black_subchannels[] =
+{
+ { 0, 1, 0, "BlackDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(extended_black);
+
+static const physical_subchannel_t photo_cyan_subchannels[] =
+{
+ { 2, 0, 0, "CyanDensity", NULL },
+ { 2, 1, 0, "CyanDensity", "LightCyanTransition" }
+};
+
+DECLARE_INK_CHANNEL(photo_cyan);
+
+static const physical_subchannel_t extended_cyan_subchannels[] =
+{
+ { 2, 1, 0, "CyanDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(extended_cyan);
+
+static const physical_subchannel_t photo_magenta_subchannels[] =
+{
+ { 1, 0, 0, "MagentaDensity", NULL },
+ { 1, 1, 0, "MagentaDensity", "LightMagentaTransition" }
+};
+
+DECLARE_INK_CHANNEL(photo_magenta);
+
+static const physical_subchannel_t extended_magenta_subchannels[] =
+{
+ { 1, 1, 0, "MagentaDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(extended_magenta);
+
+static const physical_subchannel_t photo_yellow_subchannels[] =
+{
+ { 4, 0, 0, "YellowDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(photo_yellow);
+
+static const physical_subchannel_t f360_photo_yellow_subchannels[] =
+{
+ { 4, 0, 1, "YellowDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(f360_photo_yellow);
+
+static const physical_subchannel_t j_extended_yellow_subchannels[] =
+{
+ { 4, 2, 0, "YellowDensity", NULL }
+};
+
+DECLARE_INK_CHANNEL(j_extended_yellow);
+
+/* For Japanese 7-color printers, with dark yellow */
+static const physical_subchannel_t photo2_yellow_subchannels[] =
+{
+ { 4, 2, 0, "YellowDensity", NULL },
+ { 4, 0, 0, "YellowDensity", "DarkYellowTransition" }
+};
+
+DECLARE_INK_CHANNEL(photo2_yellow);
+
+static const physical_subchannel_t f360_photo2_yellow_subchannels[] =
+{
+ { 4, 2, 0, "YellowDensity", NULL },
+ { 4, 0, 1, "YellowDensity", "DarkYellowTransition" }
+};
+
+DECLARE_INK_CHANNEL(f360_photo2_yellow);
+
+static const physical_subchannel_t photo2_black_subchannels[] =
+{
+ { 0, 0, 0, "BlackDensity", NULL },
+ { 0, 1, 0, "BlackDensity", "GrayTransition" }
+};
+
+DECLARE_INK_CHANNEL(photo2_black);
+
+static const physical_subchannel_t f360_photo2_black_subchannels[] =
+{
+ { 0, 0, 1, "BlackDensity", NULL },
+ { 0, 1, 0, "BlackDensity", "GrayTransition" }
+};
+
+DECLARE_INK_CHANNEL(f360_photo2_black);
+
+static const physical_subchannel_t quadtone_subchannels[] =
+{
+ { 0, -1, 0, "BlackDensity", NULL },
+ { 2, -1, 0, "BlackDensity", "Gray3Transition" },
+ { 1, -1, 0, "BlackDensity", "Gray2Transition" },
+ { 4, -1, 0, "BlackDensity", "Gray1Transition" },
+};
+
+DECLARE_INK_CHANNEL(quadtone);
+
+static const physical_subchannel_t c80_quadtone_subchannels[] =
+{
+ { 0, -1, 0, "BlackDensity", NULL },
+ { 2, -1, 0, "BlackDensity", "Gray3Transition" },
+ { 1, -1, 120, "BlackDensity", "Gray2Transition" },
+ { 4, -1, 240, "BlackDensity", "Gray1Transition" },
+};
+
+DECLARE_INK_CHANNEL(c80_quadtone);
+
+static const physical_subchannel_t c64_quadtone_subchannels[] =
+{
+ { 0, -1, 0, "BlackDensity", NULL },
+ { 2, -1, 0, "BlackDensity", "Gray3Transition" },
+ { 1, -1, 90, "BlackDensity", "Gray2Transition" },
+ { 4, -1, 180, "BlackDensity", "Gray1Transition" },
+};
+
+DECLARE_INK_CHANNEL(c64_quadtone);
+
+static const physical_subchannel_t f360_quadtone_subchannels[] =
+{
+ { 0, -1, 0, "BlackDensity", NULL },
+ { 2, -1, 1, "BlackDensity", "Gray3Transition" },
+ { 1, -1, 1, "BlackDensity", "Gray2Transition" },
+ { 4, -1, 0, "BlackDensity", "Gray1Transition" },
+};
+
+DECLARE_INK_CHANNEL(f360_quadtone);
+
+static const physical_subchannel_t cx3650_quadtone_subchannels[] =
+{
+ { 0, -1, 0, "BlackDensity", NULL },
+ { 2, -1, 2, "BlackDensity", "Gray3Transition" },
+ { 1, -1, 1, "BlackDensity", "Gray2Transition" },
+ { 4, -1, 0, "BlackDensity", "Gray1Transition" },
+};
+
+DECLARE_INK_CHANNEL(cx3650_quadtone);
+
+static const physical_subchannel_t f360_photo_cyan_subchannels[] =
+{
+ { 2, 0, 1, "CyanDensity", NULL },
+ { 2, 1, 0, "CyanDensity", "LightCyanTransition" }
+};
+
+DECLARE_INK_CHANNEL(f360_photo_cyan);
+
+static const physical_subchannel_t f360_photo_magenta_subchannels[] =
+{
+ { 1, 0, 1, "MagentaDensity", NULL },
+ { 1, 1, 0, "MagentaDensity", "LightMagentaTransition" }
+};
+
+DECLARE_INK_CHANNEL(f360_photo_magenta);
+
+
+#define DECLARE_CHANNEL_SET(name) \
+static const channel_set_t name##_channel_set = \
+{ \
+ #name " channel set", \
+ name##_channels, \
+ NULL, \
+ sizeof(name##_channels) / sizeof(ink_channel_t *), \
+ 0 \
+}
+
+#define DECLARE_AUX_CHANNEL_SET(name, aux) \
+static const channel_set_t name##_##aux##_channel_set = \
+{ \
+ #name " channel set", \
+ name##_channels, \
+ aux##_channels, \
+ sizeof(name##_channels) / sizeof(ink_channel_t *), \
+ sizeof(aux##_channels) / sizeof(ink_channel_t *), \
+}
+
+
+/*
+ ****************************************************************
+ * *
+ * Grayscale *
+ * *
+ ****************************************************************
+ */
+
+static const ink_channel_t *const standard_gloss_channels[] =
+{
+ &standard_gloss_channel
+};
+
+static const ink_channel_t *const f360_gloss_channels[] =
+{
+ &f360_gloss_channel
+};
+
+static const ink_channel_t *const standard_black_channels[] =
+{
+ &standard_black_channel
+};
+
+DECLARE_CHANNEL_SET(standard_black);
+
+const escp2_inkname_t stpi_escp2_default_black_inkset =
+{
+ "Gray", N_("Grayscale"), INKSET_CMYK,
+ &standard_black_channel_set
+};
+
+static const ink_channel_t *const standard_photo_black_channels[] =
+{
+ &standard_photo_black_channel
+};
+
+DECLARE_CHANNEL_SET(standard_photo_black);
+
+const escp2_inkname_t stpi_escp2_default_photo_black_inkset =
+{
+ "Gray", N_("Grayscale"), INKSET_CMYK,
+ &standard_photo_black_channel_set
+};
+
+static const ink_channel_t *const standard_photo_gloss_black_channels[] =
+{
+ &f360_r800_photo_black_channel, &standard_gloss_channel
+};
+
+DECLARE_CHANNEL_SET(standard_photo_gloss_black);
+DECLARE_AUX_CHANNEL_SET(standard_photo_black, standard_gloss);
+
+const escp2_inkname_t stpi_escp2_default_photo_gloss_black_inkset =
+{
+ "GrayG", N_("Grayscale"), INKSET_CMYK,
+ &standard_photo_black_standard_gloss_channel_set
+};
+
+
+/*
+ ****************************************************************
+ * *
+ * Two shade gray *
+ * *
+ ****************************************************************
+ */
+
+static const ink_channel_t *const photo2_black_channels[] =
+{
+ &photo2_black_channel
+};
+
+DECLARE_CHANNEL_SET(photo2_black);
+
+static const escp2_inkname_t two_color_grayscale_inkset =
+{
+ "Gray2", N_("Two Level Grayscale"), INKSET_CcMmYKk,
+ &photo2_black_channel_set
+};
+
+static const ink_channel_t *const f360_photo2_black_channels[] =
+{
+ &f360_photo2_black_channel
+};
+
+DECLARE_CHANNEL_SET(f360_photo2_black);
+
+static const escp2_inkname_t f360_two_color_grayscale_inkset =
+{
+ "Gray2", N_("Two Level Grayscale"), INKSET_CcMmYKk,
+ &f360_photo2_black_channel_set
+};
+
+
+/*
+ ****************************************************************
+ * *
+ * Quadtone gray *
+ * *
+ ****************************************************************
+ */
+
+static const ink_channel_t *const quadtone_channels[] =
+{
+ &quadtone_channel
+};
+
+DECLARE_CHANNEL_SET(quadtone);
+
+static const escp2_inkname_t generic_quadtone_inkset =
+{
+ "Quadtone", N_("Quadtone"), INKSET_QUADTONE,
+ &quadtone_channel_set
+};
+
+static const ink_channel_t *const c80_quadtone_channels[] =
+{
+ &c80_quadtone_channel
+};
+
+DECLARE_CHANNEL_SET(c80_quadtone);
+
+static const escp2_inkname_t c80_generic_quadtone_inkset =
+{
+ "Quadtone", N_("Quadtone"), INKSET_QUADTONE,
+ &c80_quadtone_channel_set
+};
+
+static const ink_channel_t *const c64_quadtone_channels[] =
+{
+ &c64_quadtone_channel
+};
+
+DECLARE_CHANNEL_SET(c64_quadtone);
+
+static const escp2_inkname_t c64_generic_quadtone_inkset =
+{
+ "Quadtone", N_("Quadtone"), INKSET_QUADTONE,
+ &c64_quadtone_channel_set
+};
+
+static const ink_channel_t *const f360_quadtone_channels[] =
+{
+ &f360_quadtone_channel
+};
+
+DECLARE_CHANNEL_SET(f360_quadtone);
+
+static const escp2_inkname_t f360_generic_quadtone_inkset =
+{
+ "Quadtone", N_("Quadtone"), INKSET_QUADTONE,
+ &f360_quadtone_channel_set
+};
+
+static const ink_channel_t *const cx3650_quadtone_channels[] =
+{
+ &cx3650_quadtone_channel
+};
+
+DECLARE_CHANNEL_SET(cx3650_quadtone);
+
+static const escp2_inkname_t cx3650_generic_quadtone_inkset =
+{
+ "Quadtone", N_("Quadtone"), INKSET_QUADTONE,
+ &cx3650_quadtone_channel_set
+};
+
+
+
+/*
+ ****************************************************************
+ * *
+ * Three color CMY *
+ * *
+ ****************************************************************
+ */
+
+static const ink_channel_t *const standard_cmy_channels[] =
+{
+ NULL, &standard_cyan_channel,
+ &standard_magenta_channel, &standard_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(standard_cmy);
+
+static const escp2_inkname_t three_color_composite_inkset =
+{
+ "RGB", N_("Three Color Composite"), INKSET_CMYK,
+ &standard_cmy_channel_set
+};
+
+static const ink_channel_t *const x80_cmy_channels[] =
+{
+ NULL, &x80_cyan_channel,
+ &x80_magenta_channel, &x80_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(x80_cmy);
+
+static const escp2_inkname_t x80_three_color_composite_inkset =
+{
+ "RGB", N_("Three Color Composite"), INKSET_CMYK,
+ &x80_cmy_channel_set
+};
+
+static const ink_channel_t *const c80_cmy_channels[] =
+{
+ NULL, &c80_cyan_channel,
+ &c80_magenta_channel, &c80_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(c80_cmy);
+
+static const escp2_inkname_t c80_three_color_composite_inkset =
+{
+ "RGB", N_("Three Color Composite"), INKSET_CMYK,
+ &c80_cmy_channel_set
+};
+
+static const ink_channel_t *const c64_cmy_channels[] =
+{
+ NULL, &c64_cyan_channel,
+ &c64_magenta_channel, &c64_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(c64_cmy);
+
+static const escp2_inkname_t c64_three_color_composite_inkset =
+{
+ "RGB", N_("Three Color Composite"), INKSET_CMYK,
+ &c64_cmy_channel_set
+};
+
+static const ink_channel_t *const f360_cmy_channels[] =
+{
+ NULL, &f360_standard_cyan_channel,
+ &f360_standard_magenta_channel, &standard_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(f360_cmy);
+
+static const escp2_inkname_t f360_three_color_composite_inkset =
+{
+ "RGB", N_("Three Color Composite"), INKSET_CMYK,
+ &f360_cmy_channel_set
+};
+
+static const ink_channel_t *const cx3650_cmy_channels[] =
+{
+ NULL, &cx3650_standard_cyan_channel,
+ &f360_standard_magenta_channel, &standard_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(cx3650_cmy);
+
+static const escp2_inkname_t cx3650_three_color_composite_inkset =
+{
+ "RGB", N_("Three Color Composite"), INKSET_CMYK,
+ &cx3650_cmy_channel_set
+};
+
+static const ink_channel_t *const standard_gloss_cmy_channels[] =
+{
+ NULL, &f360_standard_cyan_channel,
+ &standard_magenta_channel, &f360_standard_yellow_channel,
+ &standard_gloss_channel
+};
+
+DECLARE_CHANNEL_SET(standard_gloss_cmy);
+
+static const ink_channel_t *const r800_cmy_channels[] =
+{
+ NULL, &f360_standard_cyan_channel,
+ &standard_magenta_channel, &f360_standard_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(r800_cmy);
+DECLARE_AUX_CHANNEL_SET(r800_cmy, standard_gloss);
+
+static const escp2_inkname_t three_color_r800_gloss_inkset =
+{
+ "RGBG", N_("Three Color Composite"), INKSET_CMYK,
+ &r800_cmy_standard_gloss_channel_set
+};
+
+static const escp2_inkname_t three_color_r800_composite_inkset =
+{
+ "RGBG", N_("Three Color Composite"), INKSET_CMYK,
+ &r800_cmy_channel_set
+};
+
+
+/*
+ ****************************************************************
+ * *
+ * Four color CMYK *
+ * *
+ ****************************************************************
+ */
+
+static const ink_channel_t *const standard_cmyk_channels[] =
+{
+ &standard_black_channel, &standard_cyan_channel,
+ &standard_magenta_channel, &standard_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(standard_cmyk);
+
+static const escp2_inkname_t four_color_standard_inkset =
+{
+ "CMYK", N_("Four Color Standard"), INKSET_CMYK,
+ &standard_cmyk_channel_set
+};
+
+static const ink_channel_t *const photo_cmyk_channels[] =
+{
+ &standard_photo_black_channel, &standard_cyan_channel,
+ &standard_magenta_channel, &standard_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(photo_cmyk);
+
+static const escp2_inkname_t four_color_photo_inkset =
+{
+ "CMYK", N_("Four Color Standard"), INKSET_CMYK,
+ &photo_cmyk_channel_set
+};
+
+static const ink_channel_t *const r800_cmyk_channels[] =
+{
+ &standard_black_channel, &f360_standard_cyan_channel,
+ &standard_magenta_channel, &f360_standard_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(r800_cmyk);
+
+static const escp2_inkname_t four_color_r800_matte_inkset =
+{
+ "CMYKG", N_("Four Color Standard"), INKSET_CMYK,
+ &r800_cmyk_channel_set
+};
+
+static const ink_channel_t *const photo_gloss_cmyk_channels[] =
+{
+ &f360_r800_photo_black_channel, &f360_standard_cyan_channel,
+ &standard_magenta_channel, &f360_standard_yellow_channel,
+ &standard_gloss_channel
+};
+
+DECLARE_CHANNEL_SET(photo_gloss_cmyk);
+
+static const ink_channel_t *const r800_photo_cmyk_channels[] =
+{
+ &f360_r800_photo_black_channel, &f360_standard_cyan_channel,
+ &standard_magenta_channel, &f360_standard_yellow_channel,
+};
+
+DECLARE_CHANNEL_SET(r800_photo_cmyk);
+DECLARE_AUX_CHANNEL_SET(r800_photo_cmyk, standard_gloss);
+
+static const escp2_inkname_t four_color_r800_photo_gloss_inkset =
+{
+ "CMYKG", N_("Four Color Standard"), INKSET_CMYK,
+ &r800_photo_cmyk_standard_gloss_channel_set
+};
+
+static const ink_channel_t *const x80_cmyk_channels[] =
+{
+ &x80_black_channel, &x80_cyan_channel,
+ &x80_magenta_channel, &x80_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(x80_cmyk);
+
+static const escp2_inkname_t x80_four_color_standard_inkset =
+{
+ "CMYK", N_("Four Color Standard"), INKSET_CMYK,
+ &x80_cmyk_channel_set
+};
+
+static const ink_channel_t *const c80_cmyk_channels[] =
+{
+ &c80_black_channel, &c80_cyan_channel,
+ &c80_magenta_channel, &c80_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(c80_cmyk);
+
+static const escp2_inkname_t c80_four_color_standard_inkset =
+{
+ "CMYK", N_("Four Color Standard"), INKSET_CMYK,
+ &c80_cmyk_channel_set
+};
+
+static const ink_channel_t *const c64_cmyk_channels[] =
+{
+ &c64_black_channel, &c64_cyan_channel,
+ &c64_magenta_channel, &c64_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(c64_cmyk);
+
+static const escp2_inkname_t c64_four_color_standard_inkset =
+{
+ "CMYK", N_("Four Color Standard"), INKSET_CMYK,
+ &c64_cmyk_channel_set
+};
+
+static const ink_channel_t *const f360_cmyk_channels[] =
+{
+ &standard_black_channel, &f360_standard_cyan_channel,
+ &f360_standard_magenta_channel, &standard_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(f360_cmyk);
+
+static const escp2_inkname_t f360_four_color_standard_inkset =
+{
+ "CMYK", N_("Four Color Standard"), INKSET_CMYK,
+ &f360_cmyk_channel_set
+};
+
+static const ink_channel_t *const cx3650_cmyk_channels[] =
+{
+ &standard_black_channel, &cx3650_standard_cyan_channel,
+ &f360_standard_magenta_channel, &standard_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(cx3650_cmyk);
+
+static const escp2_inkname_t cx3650_four_color_standard_inkset =
+{
+ "CMYK", N_("Four Color Standard"), INKSET_CMYK,
+ &cx3650_cmyk_channel_set
+};
+
+
+/*
+ ****************************************************************
+ * *
+ * Five color CcMmY *
+ * *
+ ****************************************************************
+ */
+
+static const ink_channel_t *const photo_composite_channels[] =
+{
+ NULL, &photo_cyan_channel,
+ &photo_magenta_channel, &photo_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(photo_composite);
+
+static const escp2_inkname_t five_color_photo_composite_inkset =
+{
+ "PhotoCMY", N_("Five Color Photo Composite"), INKSET_CcMmYK,
+ &photo_composite_channel_set
+};
+
+static const ink_channel_t *const f360_photo_composite_channels[] =
+{
+ NULL, &f360_photo_cyan_channel,
+ &f360_photo_magenta_channel, &f360_photo_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(f360_photo_composite);
+
+static const escp2_inkname_t f360_five_color_photo_composite_inkset =
+{
+ "PhotoCMY", N_("Five Color Photo Composite"), INKSET_CcMmYK,
+ &f360_photo_composite_channel_set
+};
+
+
+/*
+ ****************************************************************
+ * *
+ * Six color CcMmYK *
+ * *
+ ****************************************************************
+ */
+
+static const ink_channel_t *const photo_channels[] =
+{
+ &photo_black_channel, &photo_cyan_channel,
+ &photo_magenta_channel, &photo_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(photo);
+
+static const escp2_inkname_t six_color_photo_inkset =
+{
+ "PhotoCMYK", N_("Six Color Photo"), INKSET_CcMmYK,
+ &photo_channel_set
+};
+
+static const ink_channel_t *const f360_photo_channels[] =
+{
+ &f360_photo_black_channel, &f360_photo_cyan_channel,
+ &f360_photo_magenta_channel, &f360_photo_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(f360_photo);
+
+static const escp2_inkname_t f360_six_color_photo_inkset =
+{
+ "PhotoCMYK", N_("Six Color Photo"), INKSET_CcMmYK,
+ &f360_photo_channel_set
+};
+
+
+/*
+ ****************************************************************
+ * *
+ * Six color CcMmYy (Japan) *
+ * *
+ ****************************************************************
+ */
+
+static const ink_channel_t *const photoj_composite_channels[] =
+{
+ NULL, &photo_cyan_channel,
+ &photo_magenta_channel, &photo2_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(photoj_composite);
+
+static const escp2_inkname_t j_six_color_enhanced_composite_inkset =
+{
+ "PhotoEnhanceJ", N_("Six Color Enhanced Composite"), INKSET_CcMmYyK,
+ &photoj_composite_channel_set
+};
+
+static const ink_channel_t *const f360_photoj_composite_channels[] =
+{
+ NULL, &f360_photo_cyan_channel,
+ &f360_photo_magenta_channel, &f360_photo2_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(f360_photoj_composite);
+
+static const escp2_inkname_t f360_j_six_color_enhanced_composite_inkset =
+{
+ "PhotoEnhanceJ", N_("Six Color Enhanced Composite"), INKSET_CcMmYyK,
+ &f360_photoj_composite_channel_set
+};
+
+
+/*
+ ****************************************************************
+ * *
+ * Seven color CcMmYKk *
+ * *
+ ****************************************************************
+ */
+
+static const ink_channel_t *const photo2_channels[] =
+{
+ &photo2_black_channel, &photo_cyan_channel,
+ &photo_magenta_channel, &photo_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(photo2);
+
+static const escp2_inkname_t seven_color_enhanced_inkset =
+{
+ "PhotoCMYK7", N_("Seven Color Photo"), INKSET_CcMmYKk,
+ &photo2_channel_set
+};
+
+static const ink_channel_t *const f360_photo2_channels[] =
+{
+ &f360_photo2_black_channel, &f360_photo_cyan_channel,
+ &f360_photo_magenta_channel, &f360_photo_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(f360_photo2);
+
+static const escp2_inkname_t f360_seven_color_enhanced_inkset =
+{
+ "PhotoCMYK7", N_("Seven Color Photo"), INKSET_CcMmYKk,
+ &f360_photo2_channel_set
+};
+
+/*
+ ****************************************************************
+ * *
+ * Seven color CcMmYyK (Japan) *
+ * *
+ ****************************************************************
+ */
+
+static const ink_channel_t *const photoj_channels[] =
+{
+ &photo_black_channel, &photo_cyan_channel,
+ &photo_magenta_channel, &photo2_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(photoj);
+
+static const escp2_inkname_t j_seven_color_enhanced_inkset =
+{
+ "Photo7J", N_("Seven Color Enhanced"), INKSET_CcMmYyK,
+ &photoj_channel_set
+};
+
+static const ink_channel_t *const f360_photoj_channels[] =
+{
+ &f360_photo_black_channel, &f360_photo_cyan_channel,
+ &f360_photo_magenta_channel, &f360_photo2_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(f360_photoj);
+
+static const escp2_inkname_t f360_j_seven_color_enhanced_inkset =
+{
+ "Photo7J", N_("Seven Color Photo"), INKSET_CcMmYKk,
+ &f360_photoj_channel_set
+};
+
+
+/*
+ ****************************************************************
+ * *
+ * Five color CMYRB *
+ * *
+ ****************************************************************
+ */
+
+static const ink_channel_t *const five_color_r800_channels[] =
+{
+ NULL, &r800_cyan_channel,
+ &r800_magenta_channel, &r800_yellow_channel,
+ &r800_red_channel, &r800_blue_channel
+};
+
+DECLARE_CHANNEL_SET(five_color_r800);
+
+static const escp2_inkname_t five_color_r800_inkset =
+{
+ "CMYRB", N_("Five Color Photo Composite"), INKSET_CMYKRB,
+ &five_color_r800_channel_set
+};
+
+static const ink_channel_t *const five_color_r800_photo_channels[] =
+{
+ NULL, &r800_cyan_channel,
+ &r800_magenta_channel, &r800_yellow_channel,
+ &r800_red_channel, &r800_blue_channel
+};
+
+DECLARE_CHANNEL_SET(five_color_r800_photo);
+
+static const escp2_inkname_t five_color_r800_photo_inkset =
+{
+ "CMYRB", N_("Five Color Photo Composite"), INKSET_CMYKRB,
+ &five_color_r800_photo_channel_set
+};
+
+static const ink_channel_t *const five_color_r800_photo_gloss_channels[] =
+{
+ NULL, &f360_standard_cyan_channel,
+ &r800_magenta_channel, &r800_yellow_channel,
+ &r800_red_channel, &r800_blue_channel,
+ &standard_gloss_channel
+};
+
+DECLARE_CHANNEL_SET(five_color_r800_photo_gloss);
+DECLARE_AUX_CHANNEL_SET(five_color_r800_photo, standard_gloss);
+
+static const escp2_inkname_t five_color_r800_photo_gloss_inkset =
+{
+ "CMYRBG", N_("Five Color Photo Composite"), INKSET_CMYKRB,
+ &five_color_r800_photo_standard_gloss_channel_set
+};
+
+
+/*
+ ****************************************************************
+ * *
+ * Six color CMYKRB *
+ * *
+ ****************************************************************
+ */
+
+static const ink_channel_t *const six_color_r800_channels[] =
+{
+ &standard_black_channel, &r800_cyan_channel,
+ &r800_magenta_channel, &r800_yellow_channel,
+ &r800_red_channel, &r800_blue_channel
+};
+
+DECLARE_CHANNEL_SET(six_color_r800);
+
+static const escp2_inkname_t six_color_r800_inkset =
+{
+ "CMYKRB", N_("Six Color Photo"), INKSET_CMYKRB,
+ &six_color_r800_channel_set
+};
+
+static const ink_channel_t *const six_color_r800_photo_channels[] =
+{
+ &f360_r800_photo_black_channel, &r800_cyan_channel,
+ &r800_magenta_channel, &r800_yellow_channel,
+ &r800_red_channel, &r800_blue_channel
+};
+
+DECLARE_CHANNEL_SET(six_color_r800_photo);
+
+static const escp2_inkname_t six_color_r800_photo_inkset =
+{
+ "CMYKRB", N_("Six Color Photo"), INKSET_CMYKRB,
+ &six_color_r800_photo_channel_set
+};
+
+static const ink_channel_t *const six_color_r800_photo_gloss_channels[] =
+{
+ &f360_r800_photo_black_channel, &f360_standard_cyan_channel,
+ &r800_magenta_channel, &r800_yellow_channel,
+ &r800_red_channel, &r800_blue_channel,
+ &standard_gloss_channel
+};
+
+DECLARE_CHANNEL_SET(six_color_r800_photo_gloss);
+DECLARE_AUX_CHANNEL_SET(six_color_r800_photo, standard_gloss);
+
+static const escp2_inkname_t six_color_r800_photo_gloss_inkset =
+{
+ "CMYKRBG", N_("Six Color Photo"), INKSET_CMYKRB,
+ &six_color_r800_photo_standard_gloss_channel_set
+};
+
+
+/*
+ ****************************************************************
+ * *
+ * Extended (raw) *
+ * *
+ ****************************************************************
+ */
+
+static const ink_channel_t *const one_color_extended_channels[] =
+{
+ &standard_black_channel
+};
+DECLARE_CHANNEL_SET(one_color_extended);
+
+static const escp2_inkname_t one_color_extended_inkset =
+{
+ "PhysicalBlack", N_("One Color Raw"), INKSET_EXTENDED,
+ &one_color_extended_channel_set
+};
+
+static const escp2_inkname_t one_color_photo_extended_inkset =
+{
+ "PhysicalBlack", N_("One Color Raw"), INKSET_EXTENDED,
+ &standard_photo_black_channel_set
+};
+
+static const escp2_inkname_t one_color_r800_photo_gloss_extended_inkset =
+{
+ "PhysicalBlackGloss", N_("One Color Raw Enhanced Gloss"), INKSET_EXTENDED,
+ &standard_photo_gloss_black_channel_set
+};
+
+
+static const ink_channel_t *const two_color_extended_channels[] =
+{
+ &photo_black_channel, &extended_black_channel
+};
+DECLARE_CHANNEL_SET(two_color_extended);
+
+static const escp2_inkname_t two_color_extended_inkset =
+{
+ "PhysicalBlack2", N_("Two Color Raw"), INKSET_EXTENDED,
+ &two_color_extended_channel_set
+};
+
+static const ink_channel_t *const f360_two_color_extended_channels[] =
+{
+ &f360_photo_black_channel, &extended_black_channel
+};
+DECLARE_CHANNEL_SET(f360_two_color_extended);
+
+static const escp2_inkname_t f360_two_color_extended_inkset =
+{
+ "PhysicalBlack2", N_("Two Color Raw"), INKSET_EXTENDED,
+ &f360_two_color_extended_channel_set
+};
+
+
+static const ink_channel_t *const standard_three_color_extended_channels[] =
+{
+ &standard_cyan_channel, &standard_magenta_channel, &standard_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(standard_three_color_extended);
+
+static const escp2_inkname_t three_color_extended_inkset =
+{
+ "PhysicalCMY", N_("Three Color Raw"), INKSET_EXTENDED,
+ &standard_three_color_extended_channel_set
+};
+
+static const ink_channel_t *const r800_cmy_extended_channels[] =
+{
+ &f360_standard_cyan_channel, &standard_magenta_channel,
+ &f360_standard_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(r800_cmy_extended);
+
+static const escp2_inkname_t three_color_r800_extended_inkset =
+{
+ "PhysicalCMY", N_("Three Color Raw"), INKSET_EXTENDED,
+ &r800_cmy_extended_channel_set
+};
+
+static const ink_channel_t *const r800_cmy_gloss_extended_channels[] =
+{
+ &f360_standard_cyan_channel, &standard_magenta_channel,
+ &f360_standard_yellow_channel, &standard_gloss_channel
+};
+
+DECLARE_CHANNEL_SET(r800_cmy_gloss_extended);
+
+static const escp2_inkname_t three_color_r800_gloss_extended_inkset =
+{
+ "PhysicalCMY", N_("Three Color Raw Gloss"), INKSET_EXTENDED,
+ &r800_cmy_gloss_extended_channel_set
+};
+
+static const ink_channel_t *const x80_three_color_extended_channels[] =
+{
+ &x80_cyan_channel, &x80_magenta_channel, &x80_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(x80_three_color_extended);
+
+static const escp2_inkname_t x80_three_color_extended_inkset =
+{
+ "PhysicalCMY", N_("Three Color Raw"), INKSET_EXTENDED,
+ &x80_three_color_extended_channel_set
+};
+
+static const ink_channel_t *const c80_three_color_extended_channels[] =
+{
+ &c80_cyan_channel, &c80_magenta_channel, &c80_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(c80_three_color_extended);
+
+static const escp2_inkname_t c80_three_color_extended_inkset =
+{
+ "PhysicalCMY", N_("Three Color Raw"), INKSET_EXTENDED,
+ &c80_three_color_extended_channel_set
+};
+
+static const ink_channel_t *const c64_three_color_extended_channels[] =
+{
+ &c64_cyan_channel, &c64_magenta_channel, &c64_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(c64_three_color_extended);
+
+static const escp2_inkname_t c64_three_color_extended_inkset =
+{
+ "PhysicalCMY", N_("Three Color Raw"), INKSET_EXTENDED,
+ &c64_three_color_extended_channel_set
+};
+
+static const ink_channel_t *const f360_three_color_extended_channels[] =
+{
+ &f360_standard_cyan_channel, &f360_standard_magenta_channel,
+ &standard_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(f360_three_color_extended);
+
+static const escp2_inkname_t f360_three_color_extended_inkset =
+{
+ "PhysicalCMY", N_("Three Color Raw"), INKSET_EXTENDED,
+ &f360_three_color_extended_channel_set
+};
+
+static const ink_channel_t *const cx3650_three_color_extended_channels[] =
+{
+ &cx3650_standard_cyan_channel, &f360_standard_magenta_channel,
+ &standard_yellow_channel
+};
+
+DECLARE_CHANNEL_SET(cx3650_three_color_extended);
+
+static const escp2_inkname_t cx3650_three_color_extended_inkset =
+{
+ "PhysicalCMY", N_("Three Color Raw"), INKSET_EXTENDED,
+ &cx3650_three_color_extended_channel_set
+};
+
+
+static const escp2_inkname_t four_color_extended_inkset =
+{
+ "PhysicalCMYK", N_("Four Color Raw"), INKSET_EXTENDED,
+ &standard_cmyk_channel_set
+};
+
+static const escp2_inkname_t four_color_photo_extended_inkset =
+{
+ "PhysicalCMYK", N_("Four Color Raw"), INKSET_EXTENDED,
+ &photo_cmyk_channel_set
+};
+
+static const escp2_inkname_t x80_four_color_extended_inkset =
+{
+ "PhysicalCMYK", N_("Four Color Raw"), INKSET_EXTENDED,
+ &x80_cmyk_channel_set
+};
+
+static const escp2_inkname_t c80_four_color_extended_inkset =
+{
+ "PhysicalCMYK", N_("Four Color Raw"), INKSET_EXTENDED,
+ &c80_cmyk_channel_set
+};
+
+static const escp2_inkname_t c64_four_color_extended_inkset =
+{
+ "PhysicalCMYK", N_("Four Color Raw"), INKSET_EXTENDED,
+ &c64_cmyk_channel_set
+};
+
+static const escp2_inkname_t f360_four_color_extended_inkset =
+{
+ "PhysicalCMYK", N_("Four Color Raw"), INKSET_EXTENDED,
+ &f360_cmyk_channel_set
+};
+
+static const escp2_inkname_t cx3650_four_color_extended_inkset =
+{
+ "PhysicalCMYK", N_("Four Color Raw"), INKSET_EXTENDED,
+ &cx3650_cmyk_channel_set
+};
+
+static const escp2_inkname_t four_color_r800_extended_inkset =
+{
+ "PhysicalCMYKGloss", N_("Four Color Raw"), INKSET_EXTENDED,
+ &r800_cmyk_channel_set
+};
+
+static const escp2_inkname_t four_color_r800_photo_gloss_extended_inkset =
+{
+ "PhysicalCMYKGloss", N_("Four Color Raw Gloss"), INKSET_EXTENDED,
+ &photo_gloss_cmyk_channel_set
+};
+
+
+static const ink_channel_t *const five_color_extended_channels[] =
+{
+ &standard_cyan_channel, &extended_cyan_channel,
+ &standard_magenta_channel, &extended_magenta_channel,
+ &photo_yellow_channel
+};
+DECLARE_CHANNEL_SET(five_color_extended);
+
+static const escp2_inkname_t five_color_extended_inkset =
+{
+ "PhysicalCcMmY", N_("Five Color Raw"), INKSET_EXTENDED,
+ &five_color_extended_channel_set
+};
+
+static const ink_channel_t *const f360_five_color_extended_channels[] =
+{
+ &f360_standard_cyan_channel, &extended_cyan_channel,
+ &f360_standard_magenta_channel, &extended_magenta_channel,
+ &f360_photo_yellow_channel
+};
+DECLARE_CHANNEL_SET(f360_five_color_extended);
+
+static const escp2_inkname_t f360_five_color_extended_inkset =
+{
+ "PhysicalCcMmY", N_("Five Color Raw"), INKSET_EXTENDED,
+ &f360_five_color_extended_channel_set
+};
+
+
+static const ink_channel_t *const six_color_extended_channels[] =
+{
+ &photo_black_channel,
+ &standard_cyan_channel, &extended_cyan_channel,
+ &standard_magenta_channel, &extended_magenta_channel,
+ &photo_yellow_channel
+};
+DECLARE_CHANNEL_SET(six_color_extended);
+
+static const escp2_inkname_t six_color_extended_inkset =
+{
+ "PhysicalCcMmYK", N_("Six Color Raw"), INKSET_EXTENDED,
+ &six_color_extended_channel_set
+};
+
+static const escp2_inkname_t six_color_r800_extended_inkset =
+{
+ "PhysicalCMYKRB", N_("Six Color Raw"), INKSET_EXTENDED,
+ &six_color_r800_channel_set
+};
+
+static const ink_channel_t *const f360_six_color_extended_channels[] =
+{
+ &f360_photo_black_channel,
+ &f360_standard_cyan_channel, &extended_cyan_channel,
+ &f360_standard_magenta_channel, &extended_magenta_channel,
+ &f360_photo_yellow_channel
+};
+DECLARE_CHANNEL_SET(f360_six_color_extended);
+
+static const escp2_inkname_t f360_six_color_extended_inkset =
+{
+ "PhysicalCcMmYK", N_("Six Color Raw"), INKSET_EXTENDED,
+ &f360_six_color_extended_channel_set
+};
+
+static const escp2_inkname_t six_color_r800_photo_gloss_extended_inkset =
+{
+ "PhysicalCMYKRB", N_("Six Color Enhanced Gloss Raw"), INKSET_EXTENDED,
+ &six_color_r800_photo_gloss_channel_set
+};
+
+static const ink_channel_t *const j_seven_color_extended_channels[] =
+{
+ &photo_black_channel,
+ &standard_cyan_channel, &extended_cyan_channel,
+ &standard_magenta_channel, &extended_magenta_channel,
+ &photo_yellow_channel, &j_extended_yellow_channel
+};
+DECLARE_CHANNEL_SET(j_seven_color_extended);
+
+static const escp2_inkname_t j_seven_color_extended_inkset =
+{
+ "PhysicalCcMmYyK", N_("Seven Color Raw"), INKSET_EXTENDED,
+ &j_seven_color_extended_channel_set
+};
+
+static const ink_channel_t *const seven_color_extended_channels[] =
+{
+ &photo_black_channel, &extended_black_channel,
+ &standard_cyan_channel, &extended_cyan_channel,
+ &standard_magenta_channel, &extended_magenta_channel,
+ &photo_yellow_channel
+};
+DECLARE_CHANNEL_SET(seven_color_extended);
+
+static const escp2_inkname_t seven_color_extended_inkset =
+{
+ "PhysicalCcMmYKk", N_("Seven Color Raw"), INKSET_EXTENDED,
+ &seven_color_extended_channel_set
+};
+
+static const ink_channel_t *const f360_seven_color_extended_channels[] =
+{
+ &f360_photo_black_channel, &extended_black_channel,
+ &f360_standard_cyan_channel, &extended_cyan_channel,
+ &f360_standard_magenta_channel, &extended_magenta_channel,
+ &f360_photo_yellow_channel
+};
+DECLARE_CHANNEL_SET(f360_seven_color_extended);
+
+static const escp2_inkname_t f360_seven_color_extended_inkset =
+{
+ "PhysicalCcMmYKk", N_("Seven Color Raw"), INKSET_EXTENDED,
+ &f360_seven_color_extended_channel_set
+};
+
+
+static const ink_channel_t *const seven_color_r800_gloss_extended_channels[] =
+{
+ &standard_black_channel, &f360_r800_photo_black_channel,
+ &r800_cyan_channel, &r800_magenta_channel,
+ &r800_yellow_channel, &r800_red_channel,
+ &r800_blue_channel, &standard_gloss_channel
+};
+
+DECLARE_CHANNEL_SET(seven_color_r800_gloss_extended);
+
+static const escp2_inkname_t seven_color_r800_gloss_extended_inkset =
+{
+ "PhysicalCMYKPRB", N_("Seven Color Enhanced Gloss Raw"), INKSET_EXTENDED,
+ &seven_color_r800_gloss_extended_channel_set
+};
+
+
+
+static const shade_set_t standard_shades =
+{
+ { 1, { 1.0 }}, /* K */
+ { 1, { 1.0 }}, /* C */
+ { 1, { 1.0 }}, /* M */
+ { 1, { 1.0 }}, /* Y */
+ { 1, { 1.0 }}, /* Extended 5 */
+ { 1, { 1.0 }}, /* Extended 6 */
+ { 1, { 1.0 }}, /* Extended 7 */
+ { 1, { 1.0 }}, /* Extended 8 */
+};
+
+static const shade_set_t photo_gen1_shades = /* Stylus 750 and older */
+{
+ { 1, { 1.0 }},
+ { 2, { 1.0, 0.305 }},
+ { 2, { 1.0, 0.315 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+};
+
+static const shade_set_t photo_gen2_shades = /* Stylus 870 and newer */
+{
+ { 1, { 1.0 }},
+ { 2, { 1.0, 0.29 }},
+ { 2, { 1.0, 0.29 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+};
+
+static const shade_set_t photo_gen3_shades = /* Stylus R300 and newer */
+{
+ { 1, { 1.0 }},
+ { 2, { 1.0, 0.35 }},
+ { 2, { 1.0, 0.35 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+};
+
+static const shade_set_t esp960_shades = /* Epson 950/960/PM-950C/PM-970C */
+{
+ { 1, { 1.0 }},
+ { 2, { 1.0, 0.316 }},
+ { 2, { 1.0, 0.34 }},
+ { 2, { 1.0, 0.5 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+};
+
+static const shade_set_t stp2000_shades = /* Stylus Photo 2000 */
+{
+ { 1, { 1.0 }},
+ { 2, { 1.0, 0.227 }}, /* Just a guess */
+ { 2, { 1.0, 0.227 }}, /* Just a guess */
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+};
+
+static const shade_set_t ultrachrome_photo_shades = /* Ultrachrome with photo black ink */
+{
+ { 2, { 1.0, 0.48 }},
+ { 2, { 1.0, 0.33 }},
+ { 2, { 1.0, 0.25 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+};
+
+static const shade_set_t ultrachrome_matte_shades = /* Ultrachrome with matte black ink */
+{
+ { 2, { 1.0, 0.33 }},
+ { 2, { 1.0, 0.33 }},
+ { 2, { 1.0, 0.25 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+};
+
+static const shade_set_t quadtone_shades = /* Some kind of quadtone ink */
+{
+ { 4, { 1.0, 0.75, 0.5, 0.25 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+ { 1, { 1.0 }},
+};
+
+#define DECLARE_INKLIST(tname, name, inks, text, papers, adjustments, shades) \
+static const inklist_t name##_inklist = \
+{ \
+ tname, \
+ text, \
+ inks##_ink_types, \
+ &stpi_escp2_##papers##_paper_list, \
+ &stpi_escp2_##adjustments##_paper_adjustment_list, \
+ &shades##_shades, \
+ sizeof(inks##_ink_types) / sizeof(escp2_inkname_t *), \
+}
+
+
+static const escp2_inkname_t *const cmy_ink_types[] =
+{
+ &three_color_composite_inkset
+};
+
+DECLARE_INKLIST("None", cmy, cmy, N_("EPSON Standard Inks"),
+ standard, standard, standard);
+
+
+static const escp2_inkname_t *const standard_ink_types[] =
+{
+ &four_color_standard_inkset,
+ &three_color_composite_inkset,
+ &one_color_extended_inkset,
+ &three_color_extended_inkset,
+ &four_color_extended_inkset,
+};
+
+DECLARE_INKLIST("None", standard, standard, N_("EPSON Standard Inks"),
+ standard, standard, standard);
+
+static const escp2_inkname_t *const quadtone_ink_types[] =
+{
+ &generic_quadtone_inkset,
+};
+
+DECLARE_INKLIST("quadtone", quadtone, quadtone, N_("Quadtone"),
+ standard, standard, quadtone);
+
+static const escp2_inkname_t *const c80_ink_types[] =
+{
+ &c80_four_color_standard_inkset,
+ &c80_three_color_composite_inkset,
+ &one_color_extended_inkset,
+ &c80_three_color_extended_inkset,
+ &c80_four_color_extended_inkset,
+};
+
+DECLARE_INKLIST("None", c80, c80, N_("EPSON Standard Inks"),
+ durabrite, durabrite, standard);
+
+DECLARE_INKLIST("None", c82, c80, N_("EPSON Standard Inks"),
+ durabrite2, durabrite2, standard);
+
+static const escp2_inkname_t *const c80_quadtone_ink_types[] =
+{
+ &c80_generic_quadtone_inkset,
+};
+
+DECLARE_INKLIST("Quadtone", c80_quadtone, c80_quadtone, N_("Quadtone"),
+ standard, standard, quadtone);
+
+static const escp2_inkname_t *const c64_ink_types[] =
+{
+ &c64_four_color_standard_inkset,
+ &c64_three_color_composite_inkset,
+ &one_color_extended_inkset,
+ &c64_three_color_extended_inkset,
+ &c64_four_color_extended_inkset,
+};
+
+DECLARE_INKLIST("None", c64, c64, N_("EPSON Standard Inks"),
+ durabrite2, durabrite2, standard);
+
+static const escp2_inkname_t *const c64_quadtone_ink_types[] =
+{
+ &c64_generic_quadtone_inkset,
+};
+
+DECLARE_INKLIST("Quadtone", c64_quadtone, c64_quadtone, N_("Quadtone"),
+ standard, standard, quadtone);
+
+static const escp2_inkname_t *const f360_ink_types[] =
+{
+ &f360_four_color_standard_inkset,
+ &f360_three_color_composite_inkset,
+ &one_color_extended_inkset,
+ &f360_three_color_extended_inkset,
+ &f360_four_color_extended_inkset,
+};
+
+DECLARE_INKLIST("None", f360, f360, N_("EPSON Standard Inks"),
+ durabrite2, durabrite2, standard);
+
+static const escp2_inkname_t *const f360_quadtone_ink_types[] =
+{
+ &f360_generic_quadtone_inkset,
+};
+
+DECLARE_INKLIST("Quadtone", f360_quadtone, f360_quadtone, N_("Quadtone"),
+ standard, standard, quadtone);
+
+static const escp2_inkname_t *const cx3650_ink_types[] =
+{
+ &cx3650_four_color_standard_inkset,
+ &cx3650_three_color_composite_inkset,
+ &one_color_extended_inkset,
+ &cx3650_three_color_extended_inkset,
+ &cx3650_four_color_extended_inkset,
+};
+
+DECLARE_INKLIST("None", cx3650, cx3650, N_("EPSON Standard Inks"),
+ durabrite2, durabrite2, standard);
+
+static const escp2_inkname_t *const cx3650_quadtone_ink_types[] =
+{
+ &cx3650_generic_quadtone_inkset,
+};
+
+DECLARE_INKLIST("Quadtone", cx3650_quadtone, cx3650_quadtone, N_("Quadtone"),
+ standard, standard, quadtone);
+
+static const escp2_inkname_t *const x80_ink_types[] =
+{
+ &x80_four_color_standard_inkset,
+ &x80_three_color_composite_inkset,
+ &one_color_extended_inkset,
+ &x80_three_color_extended_inkset,
+ &x80_four_color_extended_inkset,
+};
+
+DECLARE_INKLIST("None", x80, x80, N_("EPSON Standard Inks"),
+ standard, standard, standard);
+
+static const escp2_inkname_t *const photo_ink_types[] =
+{
+ &six_color_photo_inkset,
+ &five_color_photo_composite_inkset,
+ &four_color_standard_inkset,
+ &three_color_composite_inkset,
+ &one_color_extended_inkset,
+ &three_color_extended_inkset,
+ &four_color_extended_inkset,
+ &five_color_extended_inkset,
+ &six_color_extended_inkset,
+};
+
+DECLARE_INKLIST("None", gen1, photo, N_("EPSON Standard Inks"),
+ standard, photo, photo_gen1);
+DECLARE_INKLIST("None", photo_gen2, photo, N_("EPSON Standard Inks"),
+ standard, photo2, photo_gen2);
+DECLARE_INKLIST("None", photo_gen3, photo, N_("EPSON Standard Inks"),
+ standard, photo3, photo_gen3);
+DECLARE_INKLIST("None", pigment, photo, N_("EPSON Standard Inks"),
+ ultrachrome, ultrachrome_photo, stp2000);
+
+static const escp2_inkname_t *const f360_photo_ink_types[] =
+{
+ &f360_six_color_photo_inkset,
+ &f360_five_color_photo_composite_inkset,
+ &f360_four_color_standard_inkset,
+ &three_color_composite_inkset,
+ &one_color_extended_inkset,
+ &three_color_extended_inkset,
+ &f360_four_color_extended_inkset,
+ &f360_five_color_extended_inkset,
+ &f360_six_color_extended_inkset,
+};
+
+DECLARE_INKLIST("None", f360_photo, f360_photo, N_("EPSON Standard Inks"),
+ standard, sp960, esp960);
+
+static const escp2_inkname_t *const f360_photo7_japan_ink_types[] =
+{
+ &f360_j_seven_color_enhanced_inkset,
+ &f360_j_six_color_enhanced_composite_inkset,
+ &f360_six_color_photo_inkset,
+ &f360_five_color_photo_composite_inkset,
+ &four_color_standard_inkset,
+ &three_color_composite_inkset,
+ &one_color_extended_inkset,
+ &three_color_extended_inkset,
+ &four_color_extended_inkset,
+ &f360_five_color_extended_inkset,
+ &f360_six_color_extended_inkset,
+ &f360_seven_color_extended_inkset,
+};
+
+DECLARE_INKLIST("None", f360_photo7_japan, f360_photo7_japan,
+ N_("EPSON Standard Inks"), standard, sp960, esp960);
+
+static const escp2_inkname_t *const f360_photo7_ink_types[] =
+{
+ &f360_seven_color_enhanced_inkset,
+ &f360_six_color_photo_inkset,
+ &f360_five_color_photo_composite_inkset,
+ &four_color_standard_inkset,
+ &three_color_composite_inkset,
+ &f360_two_color_grayscale_inkset,
+ &one_color_extended_inkset,
+ &f360_two_color_extended_inkset,
+ &three_color_extended_inkset,
+ &four_color_extended_inkset,
+ &f360_five_color_extended_inkset,
+ &f360_six_color_extended_inkset,
+ &f360_seven_color_extended_inkset,
+};
+
+DECLARE_INKLIST("ultraphoto", f360_ultra_photo7, f360_photo7,
+ N_("UltraChrome Photo Black"), ultrachrome,
+ ultrachrome_photo, ultrachrome_photo);
+
+DECLARE_INKLIST("ultramatte", f360_ultra_matte7, f360_photo7,
+ N_("UltraChrome Matte Black"), ultrachrome,
+ ultrachrome_matte, ultrachrome_matte);
+
+static const escp2_inkname_t *const photo7_ink_types[] =
+{
+ &seven_color_enhanced_inkset,
+ &six_color_photo_inkset,
+ &five_color_photo_composite_inkset,
+ &four_color_standard_inkset,
+ &three_color_composite_inkset,
+ &two_color_grayscale_inkset,
+ &one_color_extended_inkset,
+ &two_color_extended_inkset,
+ &three_color_extended_inkset,
+ &four_color_extended_inkset,
+ &five_color_extended_inkset,
+ &six_color_extended_inkset,
+ &seven_color_extended_inkset,
+};
+
+DECLARE_INKLIST("ultraphoto", ultra_photo7, photo7,
+ N_("UltraChrome Photo Black"), ultrachrome,
+ ultrachrome_photo, ultrachrome_photo);
+
+DECLARE_INKLIST("ultramatte", ultra_matte7, photo7,
+ N_("UltraChrome Matte Black"), ultrachrome,
+ ultrachrome_matte, ultrachrome_matte);
+
+static const escp2_inkname_t *const cmykrb_matte_ink_types[] =
+{
+ &six_color_r800_inkset,
+ &five_color_r800_inkset,
+ &four_color_r800_matte_inkset,
+ &three_color_r800_composite_inkset,
+ &one_color_extended_inkset,
+ &three_color_r800_extended_inkset,
+ &four_color_r800_extended_inkset,
+ &six_color_r800_extended_inkset,
+};
+
+DECLARE_INKLIST("cmykrbmatte", cmykrb_matte, cmykrb_matte,
+ N_("Matte Black"), r800, r800_matte, standard);
+
+static const escp2_inkname_t *const cmykrb_photo_ink_types[] =
+{
+ &six_color_r800_photo_gloss_inkset,
+ &five_color_r800_photo_gloss_inkset,
+ &four_color_r800_photo_gloss_inkset,
+ &three_color_r800_gloss_inkset,
+ &one_color_extended_inkset,
+ &one_color_r800_photo_gloss_extended_inkset,
+ &three_color_r800_extended_inkset,
+ &three_color_r800_gloss_extended_inkset,
+ &four_color_r800_photo_gloss_extended_inkset,
+ &six_color_r800_photo_gloss_extended_inkset,
+ &seven_color_r800_gloss_extended_inkset
+};
+
+DECLARE_INKLIST("cmykrbphoto", cmykrb_photo, cmykrb_photo,
+ N_("Photo Black"), r800, r800_photo, standard);
+
+
+#define DECLARE_INKGROUP(name) \
+const inkgroup_t stpi_escp2_##name##_inkgroup = \
+{ \
+ #name, \
+ name##_group, \
+ sizeof(name##_group) / sizeof(inklist_t *), \
+}
+
+static const inklist_t *const cmy_group[] =
+{
+ &cmy_inklist
+};
+
+DECLARE_INKGROUP(cmy);
+
+static const inklist_t *const standard_group[] =
+{
+ &standard_inklist,
+ &quadtone_inklist
+};
+
+DECLARE_INKGROUP(standard);
+
+static const inklist_t *const c80_group[] =
+{
+ &c80_inklist,
+ &c80_quadtone_inklist
+};
+
+DECLARE_INKGROUP(c80);
+
+static const inklist_t *const c82_group[] =
+{
+ &c82_inklist,
+ &c80_quadtone_inklist
+};
+
+DECLARE_INKGROUP(c82);
+
+static const inklist_t *const c64_group[] =
+{
+ &c64_inklist,
+ &c64_quadtone_inklist
+};
+
+DECLARE_INKGROUP(c64);
+
+static const inklist_t *const f360_group[] =
+{
+ &f360_inklist,
+ &f360_quadtone_inklist
+};
+
+DECLARE_INKGROUP(f360);
+
+static const inklist_t *const cx3650_group[] =
+{
+ &cx3650_inklist,
+ &cx3650_quadtone_inklist
+};
+
+DECLARE_INKGROUP(cx3650);
+
+static const inklist_t *const x80_group[] =
+{
+ &x80_inklist
+};
+
+DECLARE_INKGROUP(x80);
+
+static const inklist_t *const photo_gen1_group[] =
+{
+ &gen1_inklist,
+ &quadtone_inklist
+};
+
+DECLARE_INKGROUP(photo_gen1);
+
+static const inklist_t *const photo_gen2_group[] =
+{
+ &photo_gen2_inklist,
+ &quadtone_inklist
+};
+
+DECLARE_INKGROUP(photo_gen2);
+
+static const inklist_t *const photo_gen3_group[] =
+{
+ &photo_gen3_inklist,
+ &quadtone_inklist
+};
+
+DECLARE_INKGROUP(photo_gen3);
+
+static const inklist_t *const photo_pigment_group[] =
+{
+ &pigment_inklist
+};
+
+DECLARE_INKGROUP(photo_pigment);
+
+static const inklist_t *const f360_photo_group[] =
+{
+ &f360_photo_inklist
+};
+
+DECLARE_INKGROUP(f360_photo);
+
+static const inklist_t *const f360_photo7_japan_group[] =
+{
+ &f360_photo7_japan_inklist
+};
+
+DECLARE_INKGROUP(f360_photo7_japan);
+
+static const inklist_t *const f360_ultrachrome_group[] =
+{
+ &f360_ultra_photo7_inklist,
+ &f360_ultra_matte7_inklist
+};
+
+DECLARE_INKGROUP(f360_ultrachrome);
+
+static const inklist_t *const ultrachrome_group[] =
+{
+ &ultra_photo7_inklist,
+ &ultra_matte7_inklist
+};
+
+DECLARE_INKGROUP(ultrachrome);
+
+static const inklist_t *const cmykrb_group[] =
+{
+ &cmykrb_photo_inklist,
+ &cmykrb_matte_inklist
+};
+
+DECLARE_INKGROUP(cmykrb);
diff --git a/src/main/escp2-driver.c b/src/main/escp2-driver.c
new file mode 100644
index 0000000..d64ecf2
--- /dev/null
+++ b/src/main/escp2-driver.c
@@ -0,0 +1,652 @@
+/*
+ * "$Id: escp2-driver.c,v 1.25 2005/04/17 23:13:59 rlk Exp $"
+ *
+ * Print plug-in EPSON ESC/P2 driver for the GIMP.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * This file must include only standard C header files. The core code must
+ * compile on generic platforms that don't support glib, gimp, gtk, etc.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include <gutenprint/gutenprint-intl-internal.h>
+#include "gutenprint-internal.h"
+#include <string.h>
+#include "print-escp2.h"
+
+#ifdef __GNUC__
+#define inline __inline__
+#endif
+
+static escp2_privdata_t *
+get_privdata(stp_vars_t *v)
+{
+ return (escp2_privdata_t *) stp_get_component_data(v, "Driver");
+}
+
+static void
+escp2_reset_printer(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ /*
+ * Magic initialization string that's needed to take printer out of
+ * packet mode.
+ */
+ if (pd->init_sequence)
+ stp_zfwrite(pd->init_sequence->data, pd->init_sequence->bytes, 1, v);
+
+ stp_send_command(v, "\033@", "");
+}
+
+static void
+print_remote_param(stp_vars_t *v, const char *param, const char *value)
+{
+ stp_send_command(v, "\033(R", "bcscs", '\0', param, ':',
+ value ? value : "NULL");
+ stp_send_command(v, "\033", "ccc", 0, 0, 0);
+}
+
+static void
+print_remote_int_param(stp_vars_t *v, const char *param, int value)
+{
+ char buf[64];
+ (void) snprintf(buf, 64, "%d", value);
+ print_remote_param(v, param, buf);
+}
+
+static void
+print_remote_float_param(stp_vars_t *v, const char *param, double value)
+{
+ char buf[64];
+ (void) snprintf(buf, 64, "%f", value);
+ print_remote_param(v, param, buf);
+}
+
+static void
+print_debug_params(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ stp_parameter_list_t params = stp_get_parameter_list(v);
+ int count = stp_parameter_list_count(params);
+ int i;
+ print_remote_param(v, "Package", PACKAGE);
+ print_remote_param(v, "Version", VERSION);
+ print_remote_param(v, "Release Date", RELEASE_DATE);
+ print_remote_param(v, "Driver", stp_get_driver(v));
+ print_remote_int_param(v, "Left", stp_get_left(v));
+ print_remote_int_param(v, "Top", stp_get_top(v));
+ print_remote_int_param(v, "Page Width", stp_get_page_width(v));
+ print_remote_int_param(v, "Page Height", stp_get_page_height(v));
+ print_remote_int_param(v, "Model", stp_get_model_id(v));
+ print_remote_int_param(v, "Ydpi", pd->res->vres);
+ print_remote_int_param(v, "Xdpi", pd->res->hres);
+ print_remote_int_param(v, "Use_softweave", pd->res->softweave);
+ print_remote_int_param(v, "Use_printer_weave", pd->res->printer_weave);
+ print_remote_int_param(v, "Use_printer_weave", pd->use_printer_weave);
+ print_remote_int_param(v, "Page_left", pd->page_left);
+ print_remote_int_param(v, "Page_right", pd->page_right);
+ print_remote_int_param(v, "Page_top", pd->page_top);
+ print_remote_int_param(v, "Page_bottom", pd->page_bottom);
+ print_remote_int_param(v, "Page_width", pd->page_width);
+ print_remote_int_param(v, "Page_height", pd->page_height);
+ print_remote_int_param(v, "Page_true_height", pd->page_true_height);
+ print_remote_int_param(v, "Image_left", pd->image_left);
+ print_remote_int_param(v, "Image_top", pd->image_top);
+ print_remote_int_param(v, "Image_width", pd->image_width);
+ print_remote_int_param(v, "Image_height", pd->image_height);
+ print_remote_int_param(v, "Image_scaled_width", pd->image_scaled_width);
+ print_remote_int_param(v, "Image_scaled_height", pd->image_scaled_height);
+ print_remote_int_param(v, "Image_printed_width", pd->image_printed_width);
+ print_remote_int_param(v, "Image_printed_height", pd->image_printed_height);
+ print_remote_int_param(v, "Image_left_position", pd->image_left_position);
+ print_remote_int_param(v, "Nozzles", pd->nozzles);
+ print_remote_int_param(v, "Nozzle_separation", pd->nozzle_separation);
+ print_remote_int_param(v, "Horizontal_passes", pd->horizontal_passes);
+ print_remote_int_param(v, "Vertical_passes", pd->res->vertical_passes);
+ print_remote_int_param(v, "Physical_xdpi", pd->physical_xdpi);
+ print_remote_int_param(v, "Page_management_units", pd->page_management_units);
+ print_remote_int_param(v, "Vertical_units", pd->vertical_units);
+ print_remote_int_param(v, "Horizontal_units", pd->horizontal_units);
+ print_remote_int_param(v, "Micro_units", pd->micro_units);
+ print_remote_int_param(v, "Unit_scale", pd->unit_scale);
+ print_remote_int_param(v, "Zero_advance", pd->send_zero_pass_advance);
+ print_remote_int_param(v, "Bits", pd->bitwidth);
+ print_remote_int_param(v, "Resid", pd->ink_resid);
+ print_remote_int_param(v, "Drop Size", pd->drop_size);
+ print_remote_int_param(v, "Initial_vertical_offset", pd->initial_vertical_offset);
+ print_remote_int_param(v, "Channels_in_use", pd->channels_in_use);
+ print_remote_int_param(v, "Logical_channels", pd->logical_channels);
+ print_remote_int_param(v, "Physical_channels", pd->physical_channels);
+ print_remote_int_param(v, "Use_black_parameters", pd->use_black_parameters);
+ print_remote_int_param(v, "Use_fast_360", pd->use_fast_360);
+ print_remote_int_param(v, "Command_set", pd->command_set);
+ print_remote_int_param(v, "Variable_dots", pd->variable_dots);
+ print_remote_int_param(v, "Has_vacuum", pd->has_vacuum);
+ print_remote_int_param(v, "Has_graymode", pd->has_graymode);
+ print_remote_int_param(v, "Base_separation", pd->base_separation);
+ print_remote_int_param(v, "Resolution_scale", pd->resolution_scale);
+ print_remote_int_param(v, "Printing_resolution", pd->printing_resolution);
+ print_remote_int_param(v, "Separation_rows", pd->separation_rows);
+ print_remote_int_param(v, "Pseudo_separation_rows", pd->pseudo_separation_rows);
+ print_remote_int_param(v, "Extra_720dpi_separation", pd->extra_720dpi_separation);
+ print_remote_int_param(v, "Use_aux_channels", pd->use_aux_channels);
+ print_remote_param(v, "Ink name", pd->inkname->name);
+ print_remote_int_param(v, " channels", pd->inkname->channel_set->channel_count);
+ print_remote_int_param(v, " inkset", pd->inkname->inkset);
+ for (i = 0; i < count; i++)
+ {
+ const stp_parameter_t *p = stp_parameter_list_param(params, i);
+ switch (p->p_type)
+ {
+ case STP_PARAMETER_TYPE_DOUBLE:
+ if (stp_check_float_parameter(v, p->name, STP_PARAMETER_DEFAULTED))
+ print_remote_float_param(v, p->name,
+ stp_get_float_parameter(v, p->name));
+ break;
+ case STP_PARAMETER_TYPE_INT:
+ if (stp_check_int_parameter(v, p->name, STP_PARAMETER_DEFAULTED))
+ print_remote_int_param(v, p->name,
+ stp_get_int_parameter(v, p->name));
+ break;
+ case STP_PARAMETER_TYPE_DIMENSION:
+ if (stp_check_dimension_parameter(v, p->name, STP_PARAMETER_DEFAULTED))
+ print_remote_int_param(v, p->name,
+ stp_get_dimension_parameter(v, p->name));
+ break;
+ case STP_PARAMETER_TYPE_BOOLEAN:
+ if (stp_check_boolean_parameter(v, p->name, STP_PARAMETER_DEFAULTED))
+ print_remote_int_param(v, p->name,
+ stp_get_boolean_parameter(v, p->name));
+ break;
+ case STP_PARAMETER_TYPE_STRING_LIST:
+ if (stp_check_string_parameter(v, p->name, STP_PARAMETER_DEFAULTED))
+ print_remote_param(v, p->name,
+ stp_get_string_parameter(v, p->name));
+ break;
+ case STP_PARAMETER_TYPE_CURVE:
+ if (stp_check_curve_parameter(v, p->name, STP_PARAMETER_DEFAULTED))
+ {
+ char *curve =
+ stp_curve_write_string(stp_get_curve_parameter(v, p->name));
+ print_remote_param(v, p->name, curve);
+ stp_free(curve);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ stp_parameter_list_destroy(params);
+ stp_send_command(v, "\033", "ccc", 0, 0, 0);
+}
+
+static void
+escp2_set_remote_sequence(stp_vars_t *v)
+{
+ /* Magic remote mode commands, whatever they do */
+ escp2_privdata_t *pd = get_privdata(v);
+
+ if (stp_get_debug_level() & STP_DBG_MARK_FILE)
+ print_debug_params(v);
+ if (pd->advanced_command_set || pd->input_slot)
+ {
+ int feed_sequence = 0;
+ /* Enter remote mode */
+ stp_send_command(v, "\033(R", "bcs", 0, "REMOTE1");
+ if (pd->command_set == MODEL_COMMAND_PRO)
+ {
+ if (pd->paper_type)
+ {
+ stp_send_command(v, "PH", "bcc", 0,
+ pd->paper_type->paper_thickness);
+ if (pd->has_vacuum)
+ stp_send_command(v, "SN", "bccc", 0, 5,
+ pd->paper_type->vacuum_intensity);
+ stp_send_command(v, "SN", "bccc", 0, 4,
+ pd->paper_type->feed_adjustment);
+ }
+ }
+ else if (pd->advanced_command_set)
+ {
+ if (pd->paper_type)
+ feed_sequence = pd->paper_type->paper_feed_sequence;
+ /* Function unknown */
+ stp_send_command(v, "PM", "bh", 0);
+ /* Set mechanism sequence */
+ stp_send_command(v, "SN", "bccc", 0, 0, feed_sequence);
+ if (stp_get_boolean_parameter(v, "FullBleed"))
+ {
+ stp_send_command(v, "FP", "bch", 0, 0xffb0);
+#if 0
+ /* These commands do not appear to do anything on the */
+ /* 2200. Need to test on R800. */
+ /* From the R1800 manual -- bottom margin borderless */
+ stp_send_command(v, "US", "bcc", 0, 2);
+ /* This command means "check paper size - no" */
+ stp_send_command(v, "US", "bcc", 2, 0);
+#endif
+ }
+ }
+ if (pd->input_slot)
+ {
+ int divisor = pd->base_separation / 360;
+ int height = pd->page_true_height * 5 / divisor;
+ if (pd->input_slot->init_sequence.bytes)
+ stp_zfwrite(pd->input_slot->init_sequence.data,
+ pd->input_slot->init_sequence.bytes, 1, v);
+ switch (pd->input_slot->roll_feed_cut_flags)
+ {
+ case ROLL_FEED_CUT_ALL:
+ stp_send_command(v, "JS", "bh", 0);
+ stp_send_command(v, "CO", "bccccl", 0, 0, 1, 0, 0);
+ stp_send_command(v, "CO", "bccccl", 0, 0, 0, 0, height);
+ break;
+ case ROLL_FEED_CUT_LAST:
+ stp_send_command(v, "CO", "bccccl", 0, 0, 1, 0, 0);
+ stp_send_command(v, "CO", "bccccl", 0, 0, 2, 0, height);
+ break;
+ default:
+ break;
+ }
+ }
+
+ /* Exit remote mode */
+
+ stp_send_command(v, "\033", "ccc", 0, 0, 0);
+ }
+}
+
+static void
+escp2_set_graphics_mode(stp_vars_t *v)
+{
+ stp_send_command(v, "\033(G", "bc", 1);
+}
+
+static void
+escp2_set_resolution(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ if (pd->use_extended_commands)
+ stp_send_command(v, "\033(U", "bccch",
+ pd->unit_scale / pd->page_management_units,
+ pd->unit_scale / pd->vertical_units,
+ pd->unit_scale / pd->horizontal_units,
+ pd->unit_scale);
+ else
+ stp_send_command(v, "\033(U", "bc",
+ pd->unit_scale / pd->page_management_units);
+}
+
+static void
+escp2_set_color(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ if (pd->use_fast_360)
+ stp_send_command(v, "\033(K", "bcc", 0, 3);
+ else if (pd->has_graymode)
+ stp_send_command(v, "\033(K", "bcc", 0,
+ (pd->use_black_parameters ? 1 : 2));
+}
+
+static void
+escp2_set_printer_weave(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ int printer_weave_parm = 0;
+ if (pd->printer_weave)
+ printer_weave_parm = pd->printer_weave->value;
+ else if (pd->res->printer_weave)
+ printer_weave_parm = pd->res->printer_weave;
+ stp_send_command(v, "\033(i", "bc", printer_weave_parm);
+}
+
+static void
+escp2_set_printhead_speed(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ const char *direction = stp_get_string_parameter(v, "PrintingDirection");
+ int unidirectional;
+ if (direction && strcmp(direction, "Unidirectional") == 0)
+ unidirectional = 1;
+ else if (direction && strcmp(direction, "Bidirectional") == 0)
+ unidirectional = 0;
+ else if (pd->res->hres >= 720 && pd->res->vres >= 720)
+ unidirectional = 1;
+ else
+ unidirectional = 0;
+ if (unidirectional)
+ {
+ stp_send_command(v, "\033U", "c", 1);
+ if (pd->res->hres > pd->printing_resolution)
+ stp_send_command(v, "\033(s", "bc", 2);
+ }
+ else
+ stp_send_command(v, "\033U", "c", 0);
+}
+
+static void
+escp2_set_dot_size(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ /* Dot size */
+ if (pd->drop_size >= 0)
+ stp_send_command(v, "\033(e", "bcc", 0, pd->drop_size);
+}
+
+static void
+escp2_set_page_height(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ int l = pd->page_management_units * pd->page_true_height / 72;
+ if (pd->use_extended_commands)
+ stp_send_command(v, "\033(C", "bl", l);
+ else
+ stp_send_command(v, "\033(C", "bh", l);
+}
+
+static void
+escp2_set_margins(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ int bot = pd->page_management_units * pd->page_bottom / 72;
+ int top = pd->page_management_units * pd->page_top / 72;
+
+ top += pd->initial_vertical_offset;
+ if (pd->use_extended_commands &&
+ (pd->command_set == MODEL_COMMAND_2000 ||
+ pd->command_set == MODEL_COMMAND_PRO))
+ stp_send_command(v, "\033(c", "bll", top, bot);
+ else
+ stp_send_command(v, "\033(c", "bhh", top, bot);
+}
+
+static void
+escp2_set_form_factor(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ if (pd->advanced_command_set)
+ {
+ int w = pd->page_width * pd->page_management_units / 72;
+ int h = pd->page_true_height * pd->page_management_units / 72;
+
+ if (stp_get_boolean_parameter(v, "FullBleed"))
+ /* Make the page 160/360" wider for full bleed printing. */
+ /* Per the Epson manual, the margin should be expanded by 80/360" */
+ /* so we need to do this on the left and the right */
+ w += 320 * pd->page_management_units / 720;
+
+ stp_send_command(v, "\033(S", "bll", w, h);
+ }
+}
+
+static void
+escp2_set_printhead_resolution(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ if (pd->use_extended_commands)
+ {
+ int xres;
+ int yres = pd->resolution_scale;
+
+ xres = pd->resolution_scale / pd->physical_xdpi;
+
+ if (pd->command_set == MODEL_COMMAND_PRO && !pd->res->softweave)
+ yres = yres / pd->res->vres;
+ else
+ yres = yres * pd->nozzle_separation / pd->base_separation;
+
+ /* Magic resolution cookie */
+ stp_send_command(v, "\033(D", "bhcc", pd->resolution_scale, yres, xres);
+ }
+}
+
+static void
+set_vertical_position(stp_vars_t *v, stp_pass_t *pass)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ int advance = pass->logicalpassstart - pd->last_pass_offset -
+ (pd->separation_rows - 1);
+ advance = advance * pd->vertical_units / pd->res->vres;
+ if (pass->logicalpassstart > pd->last_pass_offset ||
+ (pd->send_zero_pass_advance && pass->pass > pd->last_pass) ||
+ pd->printing_initial_vertical_offset != 0)
+ {
+ advance += pd->printing_initial_vertical_offset;
+ pd->printing_initial_vertical_offset = 0;
+ if (pd->use_extended_commands)
+ stp_send_command(v, "\033(v", "bl", advance);
+ else
+ stp_send_command(v, "\033(v", "bh", advance);
+ pd->last_pass_offset = pass->logicalpassstart;
+ pd->last_pass = pass->pass;
+ }
+}
+
+static void
+set_color(stp_vars_t *v, stp_pass_t *pass, int color)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ if (pd->last_color != color && ! pd->use_extended_commands)
+ {
+ int ncolor = pd->channels[color]->color;
+ int subchannel = pd->channels[color]->subchannel;
+ if (subchannel >= 0)
+ stp_send_command(v, "\033(r", "bcc", subchannel, ncolor);
+ else
+ stp_send_command(v, "\033r", "c", ncolor);
+ pd->last_color = color;
+ }
+}
+
+static void
+set_horizontal_position(stp_vars_t *v, stp_pass_t *pass, int vertical_subpass)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ int microoffset = (vertical_subpass & (pd->horizontal_passes - 1)) *
+ pd->image_scaled_width / pd->image_printed_width;
+ int pos = pd->image_left_position + microoffset;
+
+ if (pos != 0)
+ {
+ /* Note hard-coded 1440 -- from Epson manuals */
+ if (pd->command_set == MODEL_COMMAND_PRO || pd->variable_dots)
+ stp_send_command(v, "\033($", "bl", pos);
+ else if (pd->advanced_command_set || pd->res->hres > 720)
+ stp_send_command(v, "\033(\\", "bhh", pd->micro_units, pos);
+ else
+ stp_send_command(v, "\033\\", "h", pos);
+ }
+}
+
+static void
+send_print_command(stp_vars_t *v, stp_pass_t *pass, int color, int nlines)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ int lwidth = (pd->image_printed_width + (pd->horizontal_passes - 1)) /
+ pd->horizontal_passes;
+ if (pd->command_set == MODEL_COMMAND_PRO || pd->variable_dots)
+ {
+ int ncolor = pd->channels[color]->color;
+ int subchannel = pd->channels[color]->subchannel;
+ int nwidth = pd->bitwidth * ((lwidth + 7) / 8);
+ if (subchannel >= 0)
+ ncolor |= (subchannel << 4);
+ stp_send_command(v, "\033i", "ccchh", ncolor, COMPRESSION,
+ pd->bitwidth, nwidth, nlines);
+ }
+ else
+ {
+ int ygap = 3600 / pd->vertical_units;
+ int xgap = 3600 / pd->physical_xdpi;
+ if (pd->nozzles == 1)
+ {
+ if (pd->vertical_units == 720 && pd->extra_720dpi_separation)
+ ygap *= pd->extra_720dpi_separation;
+ }
+ else if (pd->extra_720dpi_separation)
+ ygap *= pd->extra_720dpi_separation;
+ else if (pd->pseudo_separation_rows > 0)
+ ygap *= pd->pseudo_separation_rows;
+ else
+ ygap *= pd->separation_rows;
+ stp_send_command(v, "\033.", "cccch", COMPRESSION, ygap, xgap, nlines,
+ lwidth);
+ }
+}
+
+static void
+send_extra_data(stp_vars_t *v, int extralines)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ int lwidth = (pd->image_printed_width + (pd->horizontal_passes - 1)) /
+ pd->horizontal_passes;
+#if TEST_UNCOMPRESSED
+ int i;
+ for (i = 0; i < pd->bitwidth * (lwidth + 7) / 8; i++)
+ stp_putc(0, v);
+#else /* !TEST_UNCOMPRESSED */
+ int k, l;
+ int bytes_to_fill = pd->bitwidth * ((lwidth + 7) / 8);
+ int full_blocks = bytes_to_fill / 128;
+ int leftover = bytes_to_fill % 128;
+ int total_bytes = extralines * (full_blocks + 1) * 2;
+ unsigned char *buf = stp_malloc(total_bytes);
+ total_bytes = 0;
+ for (k = 0; k < extralines; k++)
+ {
+ for (l = 0; l < full_blocks; l++)
+ {
+ buf[total_bytes++] = 129;
+ buf[total_bytes++] = 0;
+ }
+ if (leftover == 1)
+ {
+ buf[total_bytes++] = 1;
+ buf[total_bytes++] = 0;
+ }
+ else if (leftover > 0)
+ {
+ buf[total_bytes++] = 257 - leftover;
+ buf[total_bytes++] = 0;
+ }
+ }
+ stp_zfwrite((const char *) buf, total_bytes, 1, v);
+ stp_free(buf);
+#endif /* TEST_UNCOMPRESSED */
+}
+
+void
+stpi_escp2_init_printer(stp_vars_t *v)
+{
+ escp2_reset_printer(v);
+ escp2_set_remote_sequence(v);
+ escp2_set_graphics_mode(v);
+ escp2_set_resolution(v);
+ escp2_set_color(v);
+ escp2_set_printer_weave(v);
+ escp2_set_printhead_speed(v);
+ escp2_set_dot_size(v);
+ escp2_set_printhead_resolution(v);
+ escp2_set_page_height(v);
+ escp2_set_margins(v);
+ escp2_set_form_factor(v);
+}
+
+void
+stpi_escp2_deinit_printer(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ stp_puts("\033@", v); /* ESC/P2 reset */
+ if (pd->advanced_command_set || pd->input_slot)
+ {
+ stp_send_command(v, "\033(R", "bcs", 0, "REMOTE1");
+ if (pd->input_slot && pd->input_slot->deinit_sequence.bytes)
+ stp_zfwrite(pd->input_slot->deinit_sequence.data,
+ pd->input_slot->deinit_sequence.bytes, 1, v);
+ /* Load settings from NVRAM */
+ stp_send_command(v, "LD", "b");
+
+ /* Magic deinit sequence reported by Simone Falsini */
+ if (pd->deinit_sequence)
+ stp_zfwrite(pd->deinit_sequence->data, pd->deinit_sequence->bytes,
+ 1, v);
+ /* Exit remote mode */
+ stp_send_command(v, "\033", "ccc", 0, 0, 0);
+ }
+}
+
+void
+stpi_escp2_flush_pass(stp_vars_t *v, int passno, int vertical_subpass)
+{
+ int j;
+ escp2_privdata_t *pd = get_privdata(v);
+ stp_lineoff_t *lineoffs = stp_get_lineoffsets_by_pass(v, passno);
+ stp_lineactive_t *lineactive = stp_get_lineactive_by_pass(v, passno);
+ const stp_linebufs_t *bufs = stp_get_linebases_by_pass(v, passno);
+ stp_pass_t *pass = stp_get_pass_by_pass(v, passno);
+ stp_linecount_t *linecount = stp_get_linecount_by_pass(v, passno);
+ int minlines = pd->min_nozzles;
+
+ for (j = 0; j < pd->channels_in_use; j++)
+ {
+ if (lineactive[0].v[j] > 0)
+ {
+ int nlines = linecount[0].v[j];
+ int extralines = 0;
+ if (nlines < minlines)
+ {
+ extralines = minlines - nlines;
+ nlines = minlines;
+ }
+ set_vertical_position(v, pass);
+ set_color(v, pass, j);
+ set_horizontal_position(v, pass, vertical_subpass);
+ send_print_command(v, pass, j, nlines);
+
+ /*
+ * Send the data
+ */
+ stp_zfwrite((const char *)bufs[0].v[j], lineoffs[0].v[j], 1, v);
+ if (extralines)
+ send_extra_data(v, extralines);
+ stp_send_command(v, "\r", "");
+ pd->printed_something = 1;
+ }
+ lineoffs[0].v[j] = 0;
+ linecount[0].v[j] = 0;
+ }
+}
+
+void
+stpi_escp2_terminate_page(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ if (!pd->input_slot ||
+ pd->input_slot->roll_feed_cut_flags != ROLL_FEED_DONT_EJECT)
+ {
+ if (!pd->printed_something)
+ stp_send_command(v, "\n", "");
+ stp_send_command(v, "\f", ""); /* Eject page */
+ }
+}
diff --git a/src/main/escp2-inks.c b/src/main/escp2-inks.c
new file mode 100644
index 0000000..99a4a97
--- /dev/null
+++ b/src/main/escp2-inks.c
@@ -0,0 +1,338 @@
+/*
+ * "$Id: escp2-inks.c,v 1.40 2005/06/26 22:07:59 rlk Exp $"
+ *
+ * Print plug-in EPSON ESC/P2 driver for the GIMP.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include "print-escp2.h"
+
+/* Single drop size printers */
+static const escp2_dropsize_t escp2_single_dropsizes =
+ { "single", 1, { 1.0 } };
+
+/* 6 pl printers */
+static const escp2_dropsize_t escp2_low_dropsizes =
+ { "low", 3, { 0.28, 0.58, 1.0 } };
+static const escp2_dropsize_t escp2_6pl_dropsizes =
+ { "6pl", 3, { 0.25, 0.5, 1.0 } };
+static const escp2_dropsize_t escp2_6pl_1440_dropsizes =
+ { "6pl_1440", 2, { 0.5, 1.0 } };
+static const escp2_dropsize_t escp2_6pl_2880_dropsizes =
+ { "6pl_2880", 1, { 1.0 } };
+
+/* Stylus Color 480/580/C40/C50 */
+static const escp2_dropsize_t escp2_x80_low_dropsizes =
+ { "x80_low", 3, { 0.325, 0.5, 1.0 } };
+static const escp2_dropsize_t escp2_x80_6pl_dropsizes =
+ { "x80_6pl", 3, { 0.325, 0.5, 1.0 } };
+static const escp2_dropsize_t escp2_x80_1440_6pl_dropsizes =
+ { "x80_1440_6pl", 2, { 0.65, 1.0 } };
+static const escp2_dropsize_t escp2_x80_2880_6pl_dropsizes =
+ { "x80_2880_6pl", 1, { 1.0 } };
+
+/* 2880 DPI capable 4 picolitre printers */
+static const escp2_dropsize_t escp2_new_low_dropsizes =
+ { "680_low", 3, { 0.375, 0.75, 1.0 } };
+static const escp2_dropsize_t escp2_new_6pl_dropsizes =
+ { "680_6pl", 3, { 0.375, 0.50, 1.0 } };
+static const escp2_dropsize_t escp2_new_4pl_dropsizes =
+ { "680_4pl", 3, { 0.50, 0.75, 1.0 } };
+static const escp2_dropsize_t escp2_4pl_2880_dropsizes =
+ { "4pl_2880", 1, { 1.0 } };
+
+/* 1440 DPI capable printers */
+static const escp2_dropsize_t escp2_4pl_dropsizes =
+ { "4pl", 3, { 0.33, 0.50, 1.0 } };
+
+/* Stylus Color 900/980 */
+static const escp2_dropsize_t escp2_3pl_dropsizes =
+ { "3pl", 3, { 0.25, 0.61, 1.0 } };
+static const escp2_dropsize_t escp2_3pl_1440_dropsizes =
+ { "3pl_1440", 2, { 0.39, 1.0 } };
+static const escp2_dropsize_t escp2_3pl_2880_dropsizes =
+ { "3pl_2880", 1, { 1.0 } };
+static const escp2_dropsize_t escp2_980_6pl_dropsizes =
+ { "980_6pl", 3, { 0.40, 0.675, 1.0 } };
+
+/* Stylus Photo 960 */
+static const escp2_dropsize_t escp2_2pl_360_dropsizes =
+ { "2pl_360", 3, { 0.25, 0.5, 1.0 } };
+static const escp2_dropsize_t escp2_2pl_720_dropsizes =
+ { "2pl_720", 3, { 0.25, 0.5, 1.0 } };
+static const escp2_dropsize_t escp2_2pl_1440_dropsizes =
+ { "2pl_1440", 2, { 0.5, 1.0 } };
+static const escp2_dropsize_t escp2_2pl_2880_dropsizes =
+ { "2pl_2880", 1, { 1.0 } };
+
+/* PM-G800 */
+/* Guess */
+static const escp2_dropsize_t escp2_1_5pl_360_dropsizes =
+ { "1_5pl_360", 1, { 1, 0, 1.0 } };
+/* 7, 14, 20 pl */
+static const escp2_dropsize_t escp2_1_5pl_720_dropsizes =
+ { "1_5pl_720", 3, { 0.35, 0.70, 1.0 } };
+/*
+ * Note that the site
+ * (http://www.i-love-epson.co.jp/products/printer/inkjet/pmg800/pmg8002.htm)
+ * is unclear: it says 3 pl MSDT, but the diagram reads 2 pl
+ */
+/* 3, 6, 13 pl */
+/* Looks like 3, 7.5, 15 */
+static const escp2_dropsize_t escp2_1_5pl_1440_dropsizes =
+ { "1_5pl_1440", 3, { 0.2, 0.5, 1.0 } };
+/*
+ * See above comment. 3 pl makes more sense than 2 pl
+ */
+/* 1.5, 3, 6 pl */
+/* Looks like 1.5, 3.25, 6 */
+static const escp2_dropsize_t escp2_1_5pl_2880_dropsizes =
+ { "1_5pl_2880", 3, { 0.25, 0.47, 1.0 } };
+static const escp2_dropsize_t escp2_1_5pl_5760_dropsizes =
+ { "1_5pl_5760", 2, { 0.53, 1.0 } };
+
+/* Stylus Photo R300 */
+static const escp2_dropsize_t escp2_r300_360_dropsizes =
+ { "r300_360", 3, { 0.15, 0.3, 1.0 } };
+static const escp2_dropsize_t escp2_r300_720_dropsizes =
+ { "r300_720", 3, { 0.15, 0.5, 1.0 } };
+static const escp2_dropsize_t escp2_r300_1440_dropsizes =
+ { "r300_1440", 3, { 0.29, 0.48, 1.0 } };
+static const escp2_dropsize_t escp2_r300_2880_dropsizes =
+ { "r300_2880", 2, { 0.604, 1.0 } };
+static const escp2_dropsize_t escp2_r300_2880_1440_dropsizes =
+ { "r300_2880_1440", 1, { 1.0 } };
+
+/* Stylus C80 */
+static const escp2_dropsize_t escp2_economy_pigment_dropsizes =
+ { "economy_pigment", 3, { 0, 0, 1.0 } };
+static const escp2_dropsize_t escp2_low_pigment_dropsizes =
+ { "low_pigment", 3, { 0.28, 0, 1.0 } };
+static const escp2_dropsize_t escp2_6pl_pigment_dropsizes =
+ { "6pl_pigment", 3, { 0.28, 0, 1.0 } };
+static const escp2_dropsize_t escp2_3pl_pigment_dropsizes =
+ { "3pl_pigment", 3, { 0.25, 0.5, 1.0 } };
+static const escp2_dropsize_t escp2_3pl_pigment_2880_dropsizes =
+ { "3pl_pigment_2880", 2, { 0.5, 1.0 } };
+static const escp2_dropsize_t escp2_3pl_pigment_5760_dropsizes =
+ { "3pl_pigment_5760", 1, { 1.0 } };
+
+/* Stylus C66 */
+static const escp2_dropsize_t escp2_economy_pigment_c66_dropsizes =
+ { "economy_pigment_c66", 3, { 0, 0, 1.0 } };
+static const escp2_dropsize_t escp2_low_pigment_c66_dropsizes =
+ { "low_pigment_c66", 3, { 0.125, 0.25, 1.0 } };
+static const escp2_dropsize_t escp2_6pl_pigment_c66_dropsizes =
+ { "6pl_pigment_c66", 3, { 0.28, 0, 1.0 } };
+static const escp2_dropsize_t escp2_3pl_pigment_c66_dropsizes =
+ { "3pl_pigment_c66", 3, { 0.25, 0.5, 1.0 } };
+static const escp2_dropsize_t escp2_3pl_pigment_c66_2880_dropsizes =
+ { "3pl_pigment_c66_2880", 2, { 0.5, 1.0 } };
+static const escp2_dropsize_t escp2_3pl_pigment_c66_5760_dropsizes =
+ { "3pl_pigment_c66_5760", 1, { 1.0 } };
+
+/* Stylus Photo 2000P */
+static const escp2_dropsize_t escp2_2000p_dropsizes =
+ { "2000p", 2, { 0.55, 1.0 } };
+
+/* Stylus Photo 2200, Stylus Pro 7600 */
+static const escp2_dropsize_t escp2_ultrachrome_low_dropsizes =
+ { "ultrachrome_low", 3, { 0.16, 0.4, 1.0 } };
+static const escp2_dropsize_t escp2_ultrachrome_720_dropsizes =
+ { "ultrachrome_720", 3, { 0.2, 0.45, 1.0 } };
+static const escp2_dropsize_t escp2_ultrachrome_2880_dropsizes =
+ { "ultrachrome_2880", 1, { 1.0 } };
+
+/* Stylus Pro 10000 */
+static const escp2_dropsize_t escp2_spro10000_dropsizes =
+ { "spro10000", 2, { 0.661, 1.0 } };
+
+const escp2_drop_list_t stpi_escp2_simple_drops =
+{
+ &escp2_single_dropsizes,
+ &escp2_single_dropsizes,
+ &escp2_single_dropsizes,
+ &escp2_single_dropsizes,
+ &escp2_single_dropsizes,
+ &escp2_single_dropsizes,
+ &escp2_single_dropsizes,
+ &escp2_single_dropsizes,
+};
+
+const escp2_drop_list_t stpi_escp2_variable_6pl_drops =
+{
+ &escp2_6pl_dropsizes,
+ &escp2_6pl_dropsizes,
+ &escp2_6pl_dropsizes,
+ &escp2_6pl_dropsizes,
+ &escp2_6pl_1440_dropsizes,
+ &escp2_6pl_2880_dropsizes,
+ &escp2_6pl_2880_dropsizes,
+ &escp2_6pl_2880_dropsizes
+};
+
+const escp2_drop_list_t stpi_escp2_variable_x80_6pl_drops =
+{
+ &escp2_x80_low_dropsizes,
+ &escp2_x80_low_dropsizes,
+ &escp2_x80_low_dropsizes,
+ &escp2_x80_6pl_dropsizes,
+ &escp2_x80_1440_6pl_dropsizes,
+ &escp2_x80_2880_6pl_dropsizes,
+ &escp2_x80_2880_6pl_dropsizes,
+ &escp2_x80_2880_6pl_dropsizes,
+};
+
+const escp2_drop_list_t stpi_escp2_variable_1440_4pl_drops =
+{
+ &escp2_low_dropsizes,
+ &escp2_low_dropsizes,
+ &escp2_low_dropsizes,
+ &escp2_6pl_dropsizes,
+ &escp2_4pl_dropsizes,
+ &escp2_4pl_2880_dropsizes,
+ &escp2_4pl_2880_dropsizes,
+ &escp2_4pl_2880_dropsizes,
+};
+
+const escp2_drop_list_t stpi_escp2_variable_2880_4pl_drops =
+{
+ &escp2_new_low_dropsizes,
+ &escp2_new_low_dropsizes,
+ &escp2_new_low_dropsizes,
+ &escp2_new_6pl_dropsizes,
+ &escp2_new_4pl_dropsizes,
+ &escp2_4pl_2880_dropsizes,
+ &escp2_4pl_2880_dropsizes,
+ &escp2_4pl_2880_dropsizes,
+};
+
+const escp2_drop_list_t stpi_escp2_variable_3pl_drops =
+{
+ &escp2_low_dropsizes,
+ &escp2_low_dropsizes,
+ &escp2_980_6pl_dropsizes,
+ &escp2_3pl_dropsizes,
+ &escp2_3pl_1440_dropsizes,
+ &escp2_3pl_2880_dropsizes,
+ &escp2_3pl_2880_dropsizes,
+ &escp2_3pl_2880_dropsizes,
+};
+
+const escp2_drop_list_t stpi_escp2_variable_2pl_drops =
+{
+ &escp2_2pl_360_dropsizes,
+ &escp2_2pl_360_dropsizes,
+ &escp2_2pl_360_dropsizes,
+ &escp2_2pl_720_dropsizes,
+ &escp2_2pl_1440_dropsizes,
+ &escp2_2pl_2880_dropsizes,
+ &escp2_2pl_2880_dropsizes,
+ &escp2_2pl_2880_dropsizes,
+};
+
+const escp2_drop_list_t stpi_escp2_variable_3pl_pmg_drops =
+{
+ &escp2_r300_360_dropsizes,
+ &escp2_r300_360_dropsizes,
+ &escp2_r300_360_dropsizes,
+ &escp2_r300_720_dropsizes,
+ &escp2_r300_1440_dropsizes,
+ &escp2_r300_2880_dropsizes,
+ &escp2_r300_2880_1440_dropsizes,
+ &escp2_r300_2880_1440_dropsizes,
+};
+
+const escp2_drop_list_t stpi_escp2_variable_1_5pl_drops =
+{
+ &escp2_1_5pl_360_dropsizes,
+ &escp2_1_5pl_360_dropsizes,
+ &escp2_1_5pl_720_dropsizes, /* Even though we use 0x10 drop size */
+ &escp2_1_5pl_720_dropsizes,
+ &escp2_1_5pl_1440_dropsizes,
+ &escp2_1_5pl_2880_dropsizes,
+ &escp2_1_5pl_2880_dropsizes,
+ &escp2_1_5pl_5760_dropsizes,
+};
+
+const escp2_drop_list_t stpi_escp2_variable_2000p_drops =
+{
+ &escp2_2000p_dropsizes,
+ &escp2_2000p_dropsizes,
+ &escp2_2000p_dropsizes,
+ &escp2_2000p_dropsizes,
+ &escp2_2000p_dropsizes,
+ &escp2_2000p_dropsizes,
+ &escp2_2000p_dropsizes,
+ &escp2_2000p_dropsizes
+};
+
+const escp2_drop_list_t stpi_escp2_variable_ultrachrome_drops =
+{
+ &escp2_ultrachrome_low_dropsizes,
+ &escp2_ultrachrome_low_dropsizes,
+ &escp2_ultrachrome_low_dropsizes,
+ &escp2_ultrachrome_720_dropsizes,
+ &escp2_ultrachrome_720_dropsizes,
+ &escp2_ultrachrome_2880_dropsizes,
+ &escp2_ultrachrome_2880_dropsizes,
+ &escp2_ultrachrome_2880_dropsizes,
+};
+
+const escp2_drop_list_t stpi_escp2_variable_3pl_pigment_drops =
+{
+ &escp2_economy_pigment_dropsizes,
+ &escp2_low_pigment_dropsizes,
+ &escp2_low_pigment_dropsizes,
+ &escp2_6pl_pigment_dropsizes,
+ &escp2_3pl_pigment_dropsizes,
+ &escp2_3pl_pigment_2880_dropsizes,
+ &escp2_3pl_pigment_5760_dropsizes,
+ &escp2_3pl_pigment_5760_dropsizes,
+};
+
+const escp2_drop_list_t stpi_escp2_variable_3pl_pigment_c66_drops =
+{
+ &escp2_economy_pigment_c66_dropsizes,
+ &escp2_low_pigment_c66_dropsizes,
+ &escp2_low_pigment_c66_dropsizes,
+ &escp2_6pl_pigment_c66_dropsizes,
+ &escp2_3pl_pigment_c66_dropsizes,
+ &escp2_3pl_pigment_c66_2880_dropsizes,
+ &escp2_3pl_pigment_c66_5760_dropsizes,
+ &escp2_3pl_pigment_c66_5760_dropsizes,
+};
+
+const escp2_drop_list_t stpi_escp2_spro10000_drops =
+{
+ &escp2_spro10000_dropsizes,
+ &escp2_spro10000_dropsizes,
+ &escp2_spro10000_dropsizes,
+ &escp2_spro10000_dropsizes,
+ &escp2_spro10000_dropsizes,
+ &escp2_spro10000_dropsizes,
+ &escp2_spro10000_dropsizes,
+ &escp2_spro10000_dropsizes
+};
diff --git a/src/main/escp2-papers.c b/src/main/escp2-papers.c
new file mode 100644
index 0000000..ce892b4
--- /dev/null
+++ b/src/main/escp2-papers.c
@@ -0,0 +1,1181 @@
+/*
+ * "$Id: escp2-papers.c,v 1.75 2005/07/01 01:40:09 rlk Exp $"
+ *
+ * Print plug-in EPSON ESC/P2 driver for the GIMP.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU eral Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include "print-escp2.h"
+
+static const char standard_sat_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "1.20 1.20 1.30 1.50 1.70 1.90 2.00 2.00 " /* B */
+/* B */ "2.00 2.00 2.00 2.00 2.00 2.00 2.00 2.00 " /* M */
+/* M */ "2.00 1.80 1.60 1.40 1.20 1.00 1.00 1.00 " /* R */
+/* R */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.15 1.40 1.70 2.00 2.30 2.40 2.40 " /* G */
+/* G */ "2.40 2.40 2.40 2.30 2.00 1.70 1.40 1.15 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char standard_lum_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "0.56 0.58 0.62 0.68 0.73 0.78 0.82 0.85 " /* B */
+/* B */ "0.85 0.82 0.78 0.78 0.79 0.80 0.82 0.85 " /* M */
+/* M */ "0.87 0.90 0.94 0.97 1.00 1.00 1.00 1.00 " /* R */
+/* R */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.00 1.00 0.99 0.98 0.97 0.95 0.93 " /* G */
+/* G */ "0.90 0.76 0.65 0.58 0.58 0.57 0.56 0.56 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char standard_hue_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"-6\" upper-bound=\"6\">\n"
+/* C */ "0.00 0.00 0.00 -.02 -.04 -.08 -.12 -.16 " /* B */
+/* B */ "-.20 -.24 -.28 -.32 -.32 -.32 -.32 -.32 " /* M */
+/* M */ "-.36 -.40 -.44 -.48 -.50 -.45 -.40 -.30 " /* R */
+/* R */ "-.12 -.07 -.04 -.02 0.00 0.00 0.00 0.00 " /* Y */
+/* Y */ "0.00 -.00 -.03 -.06 -.09 -.13 -.17 -.21 " /* G */
+/* G */ "-.25 -.22 -.19 -.16 -.13 -.10 -.07 -.03 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+
+static const char photo2_sat_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "1.20 1.20 1.30 1.50 1.70 1.90 2.00 2.00 " /* B */
+/* B */ "2.00 2.00 2.00 2.00 2.00 2.00 2.00 2.00 " /* M */
+/* M */ "2.00 1.80 1.60 1.40 1.20 1.00 1.00 1.00 " /* R */
+/* R */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.15 1.40 1.70 2.00 2.30 2.40 2.40 " /* G */
+/* G */ "2.40 2.40 2.40 2.30 2.00 1.70 1.40 1.15 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char photo2_lum_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "0.56 0.58 0.62 0.68 0.73 0.78 0.82 0.85 " /* B */
+/* B */ "0.85 0.82 0.78 0.78 0.79 0.80 0.82 0.85 " /* M */
+/* M */ "0.87 0.90 0.94 0.97 1.00 1.00 1.00 1.00 " /* R */
+/* R */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.00 1.00 0.99 0.98 0.97 0.95 0.93 " /* G */
+/* G */ "0.90 0.76 0.65 0.58 0.58 0.57 0.56 0.56 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char photo2_hue_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"-6\" upper-bound=\"6\">\n"
+/* C */ "0.00 0.00 0.00 -.02 -.04 -.08 -.12 -.16 " /* B */
+/* B */ "-.20 -.24 -.28 -.32 -.32 -.32 -.32 -.32 " /* M */
+/* M */ "-.36 -.40 -.44 -.48 -.50 -.45 -.40 -.30 " /* R */
+/* R */ "-.12 -.07 -.04 -.02 0.00 0.00 0.00 0.00 " /* Y */
+/* Y */ "0.00 -.00 -.03 -.06 -.09 -.13 -.17 -.21 " /* G */
+/* G */ "-.25 -.22 -.19 -.16 -.13 -.10 -.07 -.03 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+
+static const char photo3_sat_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "1.00 1.05 1.15 1.25 1.35 1.45 1.50 1.50 " /* B */
+/* B */ "1.50 1.50 1.50 1.50 1.50 1.50 1.50 1.50 " /* M */
+/* M */ "1.50 1.40 1.30 1.20 1.10 1.00 1.00 1.00 " /* R */
+/* R */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.10 1.30 1.55 1.80 1.95 2.00 2.00 " /* G */
+/* G */ "2.00 2.00 2.00 1.95 1.80 1.55 1.30 1.10 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char photo3_lum_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "0.60 0.61 0.64 0.68 0.73 0.78 0.82 0.85 " /* B */
+/* B */ "0.85 0.82 0.78 0.78 0.79 0.80 0.82 0.85 " /* M */
+/* M */ "0.87 0.90 0.94 0.97 1.00 1.00 1.00 1.00 " /* R */
+/* R */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.00 0.99 0.98 0.96 0.94 0.92 0.88 " /* G */
+/* G */ "0.84 0.72 0.68 0.66 0.64 0.62 0.61 0.60 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char photo3_hue_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"-6\" upper-bound=\"6\">\n"
+/* C */ "0.00 0.00 0.00 -.02 -.04 -.08 -.12 -.16 " /* B */
+/* B */ "-.20 -.24 -.28 -.32 -.32 -.32 -.32 -.32 " /* M */
+/* M */ "-.36 -.40 -.44 -.48 -.50 -.45 -.40 -.30 " /* R */
+/* R */ "-.12 -.07 -.04 -.02 0.00 0.00 0.00 0.00 " /* Y */
+/* Y */ "0.00 -.00 -.00 -.00 -.02 -.04 -.08 -.13 " /* G */
+/* G */ "-.18 -.18 -.19 -.16 -.13 -.10 -.07 -.03 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+
+static const char sp960_sat_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "1.00 1.05 1.15 1.25 1.35 1.45 1.50 1.50 " /* B */
+/* B */ "1.50 1.50 1.50 1.50 1.50 1.50 1.50 1.50 " /* M */
+/* M */ "1.50 1.40 1.30 1.20 1.10 1.00 1.00 1.00 " /* R */
+/* R */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.10 1.30 1.55 1.80 1.95 2.00 2.00 " /* G */
+/* G */ "2.00 2.00 2.00 1.95 1.80 1.55 1.30 1.10 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char sp960_lum_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "0.58 0.60 0.65 0.69 0.74 0.79 0.82 0.84 " /* B */
+/* B */ "0.86 0.81 0.76 0.76 0.78 0.79 0.83 0.86 " /* M */
+/* M */ "0.93 0.95 0.97 0.98 1.00 1.00 1.00 1.00 " /* R */
+/* R */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 0.99 0.98 0.97 0.96 0.94 0.93 0.89 " /* G */
+/* G */ "0.86 0.73 0.65 0.58 0.59 0.59 0.58 0.58 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char sp960_hue_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"-6\" upper-bound=\"6\">\n"
+/* C */ "0.00 0.06 0.10 0.10 0.06 0.00 -.06 -.12 " /* B */
+/* B */ "-.18 -.21 -.22 -.23 -.24 -.25 -.26 -.27 " /* M */
+/* M */ "-.28 -.33 -.38 -.45 -.50 -.40 -.30 -.20 " /* R */
+/* R */ "-.12 -.07 -.04 -.02 0.00 0.00 0.00 0.00 " /* Y */
+/* Y */ "0.00 -.00 -.00 -.00 -.00 -.00 -.00 -.00 " /* G */
+/* G */ "-.00 -.00 -.00 -.00 -.00 -.00 -.00 -.00 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char sp960_matte_sat_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "1.00 1.05 1.15 1.25 1.35 1.45 1.50 1.50 " /* B */
+/* B */ "1.50 1.50 1.50 1.50 1.50 1.50 1.50 1.50 " /* M */
+/* M */ "1.50 1.40 1.30 1.20 1.10 1.00 1.00 1.00 " /* R */
+/* R */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.10 1.30 1.55 1.80 1.95 2.00 2.00 " /* G */
+/* G */ "2.00 2.00 2.00 1.95 1.80 1.55 1.30 1.10 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char sp960_matte_lum_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "0.58 0.63 0.70 0.75 0.80 0.86 0.88 0.90 " /* B */
+/* B */ "0.90 0.83 0.78 0.78 0.78 0.79 0.83 0.86 " /* M */
+/* M */ "0.93 0.95 0.97 0.98 1.00 1.00 1.00 1.00 " /* R */
+/* R */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 0.99 0.98 0.97 0.96 0.94 0.93 0.89 " /* G */
+/* G */ "0.86 0.73 0.65 0.58 0.59 0.59 0.58 0.58 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char sp960_matte_hue_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"-6\" upper-bound=\"6\">\n"
+/* C */ "0.00 0.06 0.10 0.10 0.06 0.00 -.06 -.12 " /* B */
+/* B */ "-.18 -.21 -.22 -.23 -.24 -.25 -.26 -.27 " /* M */
+/* M */ "-.28 -.33 -.38 -.45 -.50 -.40 -.30 -.20 " /* R */
+/* R */ "-.12 -.07 -.04 -.02 0.00 0.00 0.00 0.00 " /* Y */
+/* Y */ "0.00 -.00 -.00 -.00 -.00 -.00 -.00 -.00 " /* G */
+/* G */ "-.00 -.00 -.00 -.00 -.00 -.00 -.00 -.00 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+
+static const char ultra_matte_sat_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "1.00 1.00 1.00 1.05 1.10 1.15 1.15 1.15 " /* B */
+/* B */ "1.15 1.15 1.15 1.10 1.10 1.05 1.05 1.00 " /* M */
+/* M */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* R */
+/* R */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.05 1.15 1.25 1.35 1.45 1.50 1.50 " /* G */
+/* G */ "1.50 1.50 1.50 1.45 1.35 1.25 1.15 1.05 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char ultra_matte_lum_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "0.49 0.51 0.55 0.61 0.67 0.71 0.76 0.79 " /* B */
+/* B */ "0.83 0.80 0.76 0.76 0.78 0.79 0.83 0.86 " /* M */
+/* M */ "0.93 0.95 0.97 0.97 0.97 0.97 0.96 0.96 " /* R */
+/* R */ "0.96 0.97 0.97 0.98 0.99 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 0.98 0.97 0.95 0.94 0.93 0.90 0.86 " /* G */
+/* G */ "0.82 0.69 0.60 0.54 0.52 0.51 0.50 0.49 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char ultra_matte_hue_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"-6\" upper-bound=\"6\">\n"
+/* C */ "0.00 0.06 0.10 0.10 0.06 0.00 -.06 -.12 " /* B */
+/* B */ "-.18 -.21 -.22 -.22 -.22 -.22 -.22 -.22 " /* M */
+/* M */ "-.22 -.28 -.34 -.40 -.50 -.40 -.30 -.20 " /* R */
+/* R */ "-.12 -.07 -.04 -.02 0.00 0.00 0.00 0.00 " /* Y */
+/* Y */ "0.00 -.00 -.03 -.07 -.11 -.15 -.19 -.22 " /* G */
+/* G */ "-.25 -.22 -.19 -.15 -.12 -.10 -.06 -.03 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char ultra_glossy_sat_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "1.00 1.00 1.00 1.05 1.10 1.15 1.15 1.15 " /* B */
+/* B */ "1.15 1.15 1.15 1.10 1.10 1.05 1.05 1.00 " /* M */
+/* M */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* R */
+/* R */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.05 1.15 1.25 1.35 1.45 1.50 1.50 " /* G */
+/* G */ "1.50 1.50 1.50 1.45 1.35 1.25 1.15 1.05 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char ultra_glossy_lum_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "0.49 0.53 0.60 0.64 0.69 0.73 0.77 0.80 " /* B */
+/* B */ "0.84 0.81 0.77 0.77 0.78 0.80 0.84 0.87 " /* M */
+/* M */ "0.93 0.95 0.97 0.98 0.98 0.97 0.96 0.96 " /* R */
+/* R */ "0.96 0.97 0.98 0.98 0.99 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 0.98 0.97 0.96 0.95 0.93 0.90 0.87 " /* G */
+/* G */ "0.83 0.69 0.61 0.55 0.53 0.52 0.50 0.49 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char ultra_glossy_hue_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"-6\" upper-bound=\"6\">\n"
+/* C */ "0.00 0.06 0.10 0.10 0.06 0.00 -.06 -.12 " /* B */
+/* B */ "-.18 -.21 -.22 -.22 -.22 -.22 -.22 -.22 " /* M */
+/* M */ "-.22 -.28 -.34 -.40 -.50 -.40 -.30 -.20 " /* R */
+/* R */ "-.12 -.07 -.04 -.02 0.00 0.00 0.00 0.00 " /* Y */
+/* Y */ "0.00 -.00 -.03 -.07 -.11 -.15 -.19 -.22 " /* G */
+/* G */ "-.25 -.22 -.19 -.15 -.12 -.10 -.06 -.03 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+
+static const char r800_matte_sat_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* B */
+/* B */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* M */
+/* M */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* R */
+/* R */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.03 1.06 1.09 1.12 1.15 1.18 1.20 " /* G */
+/* G */ "1.20 1.15 1.10 1.05 1.00 1.00 1.00 1.00 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char r800_matte_lum_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "0.75 0.75 0.75 0.75 0.76 0.80 0.85 0.90 " /* B */
+/* B */ "0.90 0.88 0.82 0.78 0.78 0.82 0.85 0.92 " /* M */
+/* M */ "0.98 0.98 0.97 0.97 0.96 0.96 0.96 0.96 " /* R */
+/* R */ "0.96 0.97 0.98 0.98 0.99 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.00 1.00 0.99 0.98 0.97 0.96 0.93 " /* G */
+/* G */ "0.88 0.87 0.86 0.85 0.82 0.79 0.76 0.75 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char r800_matte_hue_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"-6\" upper-bound=\"6\">\n"
+/* C */ "0.00 -.07 -.10 -.15 -.19 -.25 -.30 -.35 " /* B */
+/* B */ "-.38 -.38 -.30 -.20 -.10 -.00 0.02 0.02 " /* M */
+/* M */ "-.00 -.00 -.00 -.00 -.00 -.00 -.00 0.00 " /* R */
+/* R */ "0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 " /* Y */
+/* Y */ "0.00 -.00 -.00 -.00 -.00 -.00 -.00 -.00 " /* G */
+/* G */ "-.00 -.00 -.00 -.00 -.00 -.00 -.00 -.00 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char r800_glossy_sat_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* B */
+/* B */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* M */
+/* M */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* R */
+/* R */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.03 1.06 1.09 1.12 1.15 1.18 1.20 " /* G */
+/* G */ "1.20 1.15 1.10 1.05 1.00 1.00 1.00 1.00 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+
+static const char r800_glossy_lum_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "0.75 0.75 0.75 0.75 0.76 0.80 0.85 0.90 " /* B */
+/* B */ "0.90 0.88 0.82 0.78 0.78 0.82 0.85 0.92 " /* M */
+/* M */ "0.98 0.98 0.97 0.97 0.96 0.96 0.96 0.96 " /* R */
+/* R */ "0.96 0.97 0.98 0.98 0.99 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.00 1.00 0.99 0.98 0.97 0.96 0.93 " /* G */
+/* G */ "0.88 0.87 0.86 0.85 0.82 0.79 0.76 0.75 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char r800_glossy_hue_adj[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"-6\" upper-bound=\"6\">\n"
+/* C */ "0.00 -.07 -.10 -.15 -.19 -.25 -.30 -.35 " /* B */
+/* B */ "-.38 -.38 -.30 -.20 -.10 -.00 0.02 0.02 " /* M */
+/* M */ "-.00 -.00 -.00 -.00 -.00 -.00 -.00 0.00 " /* R */
+/* R */ "0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 " /* Y */
+/* Y */ "0.00 -.00 -.00 -.00 -.00 -.00 -.00 -.00 " /* G */
+/* G */ "-.00 -.00 -.00 -.00 -.00 -.00 -.00 -.00 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+#define DECLARE_PAPERS(name) \
+const paperlist_t stpi_escp2_##name##_paper_list = \
+{ \
+ #name, \
+ sizeof(name##_papers) / sizeof(paper_t), \
+ name##_papers \
+}
+
+#define DECLARE_PAPER_ADJUSTMENTS(name) \
+const paper_adjustment_list_t stpi_escp2_##name##_paper_adjustment_list = \
+{ \
+ #name, \
+ sizeof(name##_adjustments) / sizeof(paper_adjustment_t), \
+ name##_adjustments \
+}
+
+static const paper_adjustment_t standard_adjustments[] =
+{
+ { "Plain", 0.615, .5, 1, .075, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "PlainFast", 0.615, .5, 1, .075, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Postcard", 0.83, .5, 1, .075, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "GlossyFilm", 1.00, 1.0, 1, .15, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Transparency", 1.00, .75, 1, .15, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Envelope", 0.615, .5, 1, .075, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "BackFilm", 1.00, .75, 1, .15, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Matte", 0.85, .8, 1.0, .15, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "MatteHeavy", 1.0, 1.0, 1, .15, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Inkjet", 0.85, .5, 1, .10, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Coated", 1.10, 1.0, 1, .15, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Photo", 1.00, 1.0, 1, .15, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "GlossyPhoto", 1.10, 1.0, 1, .15, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Semigloss", 1.00, 1.0, 1, .15, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Luster", 1.00, 1.0, 1, .15, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "GlossyPaper", 1.00, 1.0, 1, .15, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Ilford", 1.0, 1.0, 1, .15, 1.35, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "ColorLife", 1.00, 1.0, 1, .15, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Other", 0.615, .5, 1, .075, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+};
+
+DECLARE_PAPER_ADJUSTMENTS(standard);
+
+static const paper_adjustment_t photo_adjustments[] =
+{
+ { "Plain", 0.615, .25, 1, .15, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "PlainFast", 0.615, .25, 1, .15, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Postcard", 0.83, .25, 1, .15, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "GlossyFilm", 1.00, 1.0, 1, .2, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Transparency", 1.00, .75, 1, .2, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Envelope", 0.615, .25, 1, .15, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "BackFilm", 1.00, .75, 1, .2, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Matte", 0.85, .8, 1.0, .2, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "MatteHeavy", 1.0, 1.0, 1, .35, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Inkjet", 0.85, .375, 1, .2, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Coated", 1.10, 1.0, 1, .35, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Photo", 1.00, 1.00, 1, .35, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "GlossyPhoto", 1.10, 1.0, 1, .35, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Semigloss", 1.00, 1.0, 1, .35, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Luster", 1.00, 1.0, 1, .35, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "GlossyPaper", 1.00, 1.0, 1, .35, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Ilford", 1.0, 1.0, 1, .35, 1.35, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "ColorLife", 1.00, 1.0, 1, .35, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Other", 0.615, .25, 1, .15, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+};
+
+DECLARE_PAPER_ADJUSTMENTS(photo);
+
+static const paper_adjustment_t photo2_adjustments[] =
+{
+ { "Plain", 0.738, 1.0, 0.5, .1, .9, 1, 1, 1, 1, 1, 1.0,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "PlainFast", 0.738, 1.0, 0.5, .1, .9, 1, 1, 1, 1, 1, 1.0,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "Postcard", 0.83, 1.0, 0.5, .1, .9, 1, 1, 1, 1, 1, 1.0,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "GlossyFilm", 1.00, 1.0, 0.5, .2, .999, 1, 1, 1, 1, 1, 1,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "Transparency", 1.00, 1.0, 0.25, .2, .999, 1, 1, 1, 1, 1, 1,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "Envelope", 0.738, 1.0, 0.5, .1, .9, 1, 1, 1, 1, 1, 1,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "BackFilm", 1.00, 1.0, 0.25, .2, .999, 1, 1, 1, 1, 1, 1,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "Matte", 0.85, 1.0, 0.4, .3, .999, 1, 1, 1, 1, 1, 1,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "MatteHeavy", 0.85, 1.0, .3, .2, .999, 1, 1, 1, 1, 1, 1,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "Inkjet", 0.85, 1.0, 0.5, .15, .9, 1, 1, 1, 1, 1, 1,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "Coated", 1.2, 1.0, .25, .15, .999, .89, 1, 1, .9, 1, 1.,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "Photo", 1.00, 1.0, 0.25, .2, .999, 1, 1, 1, 1, 1, 1,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "GlossyPhoto", 1.0, 1.0, 0.5, .3, .999, .9, .98, 1, .9, 1, 0.92,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "Semigloss", 1.0, 1.0, 0.5, .3, .999, .9, .98, 1, .9, 1, 0.92,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "Luster", 1.0, 1.0, 0.5, .3, .999, .9, .98, 1, .9, 1, 0.92,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "GlossyPaper", 1.00, 1.0, 0.25, .2, .999, 1, 1, 1, 1, 1, 1,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "Ilford", .85, 1.0, 0.25, .2, .999, 1, 1, 1, 1, 1, 1,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "ColorLife", 1.00, 1.0, 0.25, .2, .9, 1, 1, 1, 1, 1, 1,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+ { "Other", 0.738, 1.0, 0.5, .1, .9, 1, 1, 1, 1, 1, 1,
+ photo2_hue_adj, photo2_lum_adj, photo2_sat_adj },
+};
+
+DECLARE_PAPER_ADJUSTMENTS(photo2);
+
+static const paper_adjustment_t photo3_adjustments[] =
+{
+ { "Plain", 0.738, .5, 0.75, .1, .9, 1, .525, .816, .75, 1, 1.0,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "PlainFast", 0.738, .5, 0.75, .1, .9, 1, .525, .816, .75, 1, 1.0,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "Postcard", 0.83, .5, 0.75, .1, .9, 1, .525, .816, .75, 1, 1.0,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "GlossyFilm", 1.00, .5, 0.75, .2, .999, 1, .525, .816, .75, 1, 1,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "Transparency", 1.00, .5, 0.75, .2, .999, 1, .525, .816, .75, 1, 1,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "Envelope", 0.738, .5, 0.75, .1, .9, 1, .525, .816, .75, 1, 1.0,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "BackFilm", 1.00, .5, 0.75, .2, .999, 1, .525, .816, .75, 1, 1,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "Matte", 0.85, .75, 0.75, .3, .999, 1, .525, .816, .75, 1, 1,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "MatteHeavy", 0.85, .75, .3, .2, .999, 1, .525, .816, .75, 1, 1,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "Inkjet", 0.85, .5, 0.75, .15, .9, 1, .525, .816, .75, 1, 1,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "Coated", 1.2, .5, .75, .15, .999, 1, .525, .816, .75, 1, 1,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "Photo", 1.00, .5, 0.75, .2, .999, 1, .525, .816, .75, 1, 1,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "GlossyPhoto", 1.0, .25, 0.5, .3, .999, 1, .6, .82, .66, 1, 0.85,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "Semigloss", 1.0, .25, 0.5, .3, .999, 1, .525, .816, .75, 1, 0.92,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "Luster", 1.0, .25, 0.5, .3, .999, 1, .525, .816, .75, 1, 0.92,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "GlossyPaper", 1.00, .5, 0.75, .2, .999, 1, .525, .816, .75, 1, 1,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "Ilford", .85, .5, 0.75, .2, .999, 1, .525, .816, .75, 1, 1,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "ColorLife", 1.00, .5, 0.75, .2, .9, 1, .525, .816, .75, 1, 1,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+ { "Other", 0.738, .5, 0.75, .1, .9, 1, .525, .816, .75, 1, 1,
+ photo3_hue_adj, photo3_lum_adj, photo3_sat_adj },
+};
+
+DECLARE_PAPER_ADJUSTMENTS(photo3);
+
+static const paper_adjustment_t sp960_adjustments[] =
+{
+ { "Plain", 0.86, .2, 0.4, .1, .9, .9, 1, 1, 1, 1, 1,
+ sp960_matte_hue_adj, sp960_matte_lum_adj, sp960_matte_sat_adj },
+ { "PlainFast", 0.86, .2, 0.4, .1, .9, 1, 1, 1, 1, 1, 1,
+ sp960_matte_hue_adj, sp960_matte_lum_adj, sp960_matte_sat_adj },
+ { "Postcard", 0.90, .2, 0.4, .1, .9, .9, 1, 1, 1, 1, 1,
+ sp960_matte_hue_adj, sp960_matte_lum_adj, sp960_matte_sat_adj },
+ { "GlossyFilm", 0.9, .3, 0.4, .2, .999, 1, 1, 1, 1, 1, 1,
+ sp960_matte_hue_adj, sp960_matte_lum_adj, sp960_matte_sat_adj },
+ { "Transparency", 0.9, .2, 0.4, .1, .9, 1, 1, 1, 1, 1, 1,
+ sp960_matte_hue_adj, sp960_matte_lum_adj, sp960_matte_sat_adj },
+ { "Envelope", 0.86, .2, 0.4, .1, .9, 1, 1, 1, 1, 1, 1,
+ sp960_matte_hue_adj, sp960_matte_lum_adj, sp960_matte_sat_adj },
+ { "BackFilm", 0.9, .2, 0.4, .1, .9, 1, 1, 1, 1, 1, 1,
+ sp960_matte_hue_adj, sp960_matte_lum_adj, sp960_matte_sat_adj },
+ { "Matte", 0.9, .25, 0.4, .2, .9, 1, 1, 1, 1, 1, 1,
+ sp960_matte_hue_adj, sp960_matte_lum_adj, sp960_matte_sat_adj },
+ { "MatteHeavy", 0.9, .3, 0.4, .2, .999, 1, 1, 1, 1, 1, 1,
+ sp960_matte_hue_adj, sp960_matte_lum_adj, sp960_matte_sat_adj },
+ { "Inkjet", 0.9, .2, 0.4, .15, .9, 1, 1, 1, 1, 1, 1,
+ sp960_matte_hue_adj, sp960_matte_lum_adj, sp960_matte_sat_adj },
+ { "Coated", 0.9, .3, 0.4, .2, .999, 1, 1, 1, 1, 1, 1,
+ sp960_matte_hue_adj, sp960_matte_lum_adj, sp960_matte_sat_adj },
+ { "Photo", 0.9, .3, 0.4, .2, .999, 1, 1, 1, 1, 1, 1,
+ sp960_matte_hue_adj, sp960_matte_lum_adj, sp960_matte_sat_adj },
+ { "GlossyPhoto", 0.9, .3, 0.4, .2, .999, 1, 1, 1, 1, 1, 1,
+ sp960_hue_adj, sp960_lum_adj, sp960_sat_adj },
+ { "Semigloss", 0.9, .3, 0.4, .2, .999, 1, 1, 1, 1, 1, 1,
+ sp960_hue_adj, sp960_lum_adj, sp960_sat_adj },
+ { "Luster", 0.9, .3, 0.4, .2, .999, 1, 1, 1, 1, 1, 1,
+ sp960_hue_adj, sp960_lum_adj, sp960_sat_adj },
+ { "GlossyPaper", 0.9, .3, 0.4, .15, .9, 1, 1, 1, 1, 1, 1,
+ sp960_matte_hue_adj, sp960_matte_lum_adj, sp960_matte_sat_adj },
+ { "Ilford", 0.85, .3, 0.4, .15, 1.35, 1, 1, 1, 1, 1, 1,
+ sp960_matte_hue_adj, sp960_matte_lum_adj, sp960_matte_sat_adj },
+ { "ColorLife", 0.9, .3, 0.4, .15, .9, 1, 1, 1, 1, 1, 1,
+ sp960_matte_hue_adj, sp960_matte_lum_adj, sp960_matte_sat_adj },
+ { "Other", 0.86, .2, 0.4, .1, .9, 1, 1, 1, 1, 1, 1,
+ sp960_matte_hue_adj, sp960_matte_lum_adj, sp960_matte_sat_adj },
+};
+
+DECLARE_PAPER_ADJUSTMENTS(sp960);
+
+static const paper_adjustment_t ultrachrome_photo_adjustments[] =
+{
+ { "Plain", 0.72, .1, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "PlainFast", 0.72, .1, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Postcard", 0.72, .1, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "GlossyFilm", 0.83, 1.0, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Transparency", 0.83, .75, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Envelope", 0.72, .1, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "BackFilm", 0.83, .75, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Matte", 0.92, 0.4, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "MatteHeavy", 0.92, 0.4, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Inkjet", 0.72, .5, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Coated", 0.83, .5, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Photo", 1.0, .75, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "GlossyPhoto", 0.72, 1, 1, .01, 1.8, 1, 1, 1, 1, 1, .92,
+ ultra_glossy_hue_adj, ultra_glossy_lum_adj, ultra_glossy_sat_adj },
+ { "Semigloss", 0.72, .8, 1, .01, 1.8, 1, 1, 1, 1, 1, .92,
+ ultra_glossy_hue_adj, ultra_glossy_lum_adj, ultra_glossy_sat_adj },
+ { "Luster", 0.72, .8, 1, .01, 1.8, 1, 1, 1, 1, 1, .92,
+ ultra_glossy_hue_adj, ultra_glossy_lum_adj, ultra_glossy_sat_adj },
+ { "ArchivalMatte", 0.92, .4, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "WaterColorRadiant", 0.92, .4, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "GlossyPaper", 0.83, 1.0, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Ilford", 0.83, 1.0, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "ColorLife", 0.83, 1.0, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Other", 0.72, .1, 1, .01, 1.5, 1, 1, 1, 1, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+};
+
+DECLARE_PAPER_ADJUSTMENTS(ultrachrome_photo);
+
+static const paper_adjustment_t ultrachrome_matte_adjustments[] =
+{
+ { "Plain", 0.72, .1, 1, 0, 0.5, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "PlainFast", 0.72, .1, 1, 0, 0.5, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Postcard", 0.72, .1, 1, 0, 0.5, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "GlossyFilm", 0.83, .5, 1, 0.01, 0.5, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Transparency", 0.83, .5, 1, 0.01, 0.5, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Envelope", 0.72, .1, 1, 0, 0.5, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "BackFilm", 0.83, .5, 1, 0.01, 0.5, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Matte", 0.92, 0.4, 1, 0.00, 1.25, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "MatteHeavy", 0.92, 0.4, .4, .01, 0.5, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Inkjet", 0.72, .3, 1, .01, 0.5, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Coated", 0.83, .4, 1, .01, 0.5, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Photo", 1.0, 0.5, 1, 0.01, 0.5, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "GlossyPhoto", 0.72, 1, 1, .01, 0.5, 1, 1, 1, .6, 1, .92,
+ ultra_glossy_hue_adj, ultra_glossy_lum_adj, ultra_glossy_sat_adj },
+ { "Semigloss", 0.72, .8, 1, .01, 0.5, 1, 1, 1, .6, 1, .92,
+ ultra_glossy_hue_adj, ultra_glossy_lum_adj, ultra_glossy_sat_adj },
+ { "Luster", 0.72, .8, 1, .01, 0.5, 1, 1, 1, 1, .5, .92,
+ ultra_glossy_hue_adj, ultra_glossy_lum_adj, ultra_glossy_sat_adj },
+ { "WaterColorRadiant", 0.92, 0.4, 1, .01, 0.5, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "GlossyPaper", 0.83, 0.5, 1, 0.01, 0.5, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Ilford", 0.83, 0.5, 1, 0.01, 0.5, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "ColorLife", 0.83, 0.5, 1, 0.01, 0.5, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+ { "Other", 0.72, .1, .4, 0, 0.5, 1, 1, 1, .6, 1, 1.0,
+ ultra_matte_hue_adj, ultra_matte_lum_adj, ultra_matte_sat_adj },
+};
+
+DECLARE_PAPER_ADJUSTMENTS(ultrachrome_matte);
+
+static const paper_adjustment_t r800_photo_adjustments[] =
+{
+ { "Plain", 0.72, .1, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "PlainFast", 0.72, .1, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "Postcard", 0.72, .1, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "GlossyFilm", 0.83, 1.0, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "Transparency", 0.83, .75, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "Envelope", 0.72, .1, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "BackFilm", 0.83, .75, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "Glossy", 0.92, 0.4, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "GlossyHeavy", 0.92, 0.4, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "Inkjet", 0.72, .5, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "Coated", 0.83, .5, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "Photo", 1.0, .75, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "GlossyPhoto", 0.72, 1, 1, .1, 0.5, .882, 1, .300, 1, 1, 0.92,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "Semigloss", 0.72, .8, 1, .1, 0.5, .882, 1, .300, 1, 1, 0.92,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "Luster", 0.72, .8, 1, .1, .5, .882, 1, .300, 1, 1, 0.92,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "ArchivalGlossy", 0.92, .4, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "WaterColorRadiant", 0.92, .4, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "GlossyPaper", 0.83, 1.0, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "Ilford", 0.83, 1.0, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "ColorLife", 0.83, 1.0, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "Other", 0.72, .1, 1, .1, 0.5, .882, 1, .300, 1, 1, 1.0,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+};
+
+DECLARE_PAPER_ADJUSTMENTS(r800_photo);
+
+static const paper_adjustment_t r800_matte_adjustments[] =
+{
+ { "Plain", 0.72, .1, .5, .025, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+ { "PlainFast", 0.72, .1, .5, .025, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+ { "Postcard", 0.72, .1, .5, .025, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+ { "GlossyFilm", 0.83, .5, .5, .025, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+ { "Transparency", 0.83, .5, .5, .025, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+ { "Envelope", 0.72, .1, .5, .025, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+ { "BackFilm", 0.83, .5, .5, .025, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+ { "Matte", 0.92, 0.4, .5, .025, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+ { "MatteHeavy", 0.92, 0.4, .4, .01, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+ { "Inkjet", 0.72, .3, .5, .025, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+ { "Coated", 0.83, .4, .5, .025, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+ { "Photo", 1.0, 0.5, .5, .025, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+ { "GlossyPhoto", 0.72, 1, .5, .025, .5, .882, 1, .300, .6, 1, 0.92,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "Semigloss", 0.72, .8, .5, .025, .5, .882, 1, .300, .6, 1, 0.92,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "Luster", 0.72, .8, .5, .025, .5, .882, 1, .300, .6, 1, 0.92,
+ r800_glossy_hue_adj, r800_glossy_lum_adj, r800_glossy_sat_adj },
+ { "WaterColorRadiant", 0.92, 0.4, .5, .025, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+ { "GlossyPaper", 0.83, 0.5, .5, .025, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+ { "Ilford", 0.83, 0.5, .5, .025, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+ { "ColorLife", 0.83, 0.5, .5, .025, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+ { "Other", 0.72, .1, .5, .025, .5, .882, 1, .300, .6, 1, 1.0,
+ r800_matte_hue_adj, r800_matte_lum_adj, r800_matte_sat_adj },
+};
+
+DECLARE_PAPER_ADJUSTMENTS(r800_matte);
+
+static const paper_adjustment_t durabrite_adjustments[] =
+{
+ { "Plain", 1.0, .5, .5, .05, .9, 1, 1, 1, 1, 1, 1.0,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "PlainFast", 1.0, .5, .5, .05, .9, 1, 1, 1, 1, 1, 1.0,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Postcard", 1.0, .5, 1, .05, .9, 1, 1, 1, 1, 1, 1.0,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "GlossyFilm", 0.8, 1.0, 1, .05, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Transparency", 0.8, .75, 1, .05, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Envelope", 1.0, .5, 1, .05, .9, 1, 1, 1, 1, 1, 1.0,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "BackFilm", 0.8, .75, 1, .05, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Matte", 0.9, .5, .5, .075, .999, 1, .975, .975, 1, 1, 1.1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "MatteHeavy", 0.9, .5, .5, .075, .999, 1, .975, .975, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Inkjet", 1.0, .5, .5, .05, .9, 1, 1, 1, 1, 1, 1.0,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Coated", 1.0, .5, .5, .075, .999, 1, 1, 1, 1, 1, 1.1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Photo", .833, .5, .5, .075, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "GlossyPhoto", .833, 1.0, 1, .15, .999, 1, 1, 1, 1, 1, .92,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Semigloss", .833, 1.0, 1, .15, .999, 1, 1, 1, 1, 1, .92,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Luster", .833, 1.0, 1, .15, .999, 1, 1, 1, 1, 1, .92,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "GlossyPaper", .833, 1.0, 1, .15, .999, 1, 1, 1, 1, 1, 1.0,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Ilford", .833, 1.0, 1, .15, 1.35, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "ColorLife", .833, 1.0, 1, .15, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Other", 1.0, .5, 1, .05, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+};
+
+DECLARE_PAPER_ADJUSTMENTS(durabrite);
+
+static const paper_adjustment_t durabrite2_adjustments[] =
+{
+ { "Plain", 1.0, .5, .5, .05, .9, 1, 1, 1, 1, 1, 1.0,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "PlainFast", 1.0, .5, .5, .05, .9, 1, 1, 1, 1, 1, 1.0,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Postcard", 1.0, .5, 1, .05, .9, 1, 1, 1, 1, 1, 1.0,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "GlossyFilm", 0.8, 1.0, 1, .05, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Transparency", 0.8, .75, 1, .05, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Envelope", 1.0, .5, 1, .05, .9, 1, 1, 1, 1, 1, 1.0,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "BackFilm", 0.8, .75, 1, .05, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Matte", 0.9, .5, .5, .075, .999, 1, .975, .975, 1, 1, 1.0,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "MatteHeavy", 0.9, .5, .5, .075, .999, 1, .975, .975, 1, 1, 1.0,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Inkjet", 1.0, .5, .5, .05, .9, 1, 1, 1, 1, 1, 1.0,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Coated", 1.0, .5, .5, .075, .999, 1, 1, 1, 1, 1, 1.0,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Photo", .833, .5, .5, .075, .999, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "GlossyPhoto", .833, 1.0, 1, .15, .999, 1, 1, 1, 1, 1, .92,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Semigloss", .833, 1.0, 1, .15, .999, 1, 1, 1, 1, 1, .92,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Luster", .833, 1.0, 1, .15, .999, 1, 1, 1, 1, 1, .92,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "GlossyPaper", .833, 1.0, 1, .15, .999, 1, 1, 1, 1, 1, 1.0,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Ilford", .833, 1.0, 1, .15, 1.35, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "ColorLife", .833, 1.0, 1, .15, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+ { "Other", 1.0, .5, 1, .05, .9, 1, 1, 1, 1, 1, 1,
+ standard_hue_adj, standard_lum_adj, standard_sat_adj },
+};
+
+DECLARE_PAPER_ADJUSTMENTS(durabrite2);
+
+static const paper_t standard_papers[] =
+{
+ { "Plain", N_("Plain Paper"), PAPER_PLAIN,
+ 1, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "PlainFast", N_("Plain Paper Fast Load"), PAPER_PLAIN,
+ 5, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "Postcard", N_("Postcard"), PAPER_PLAIN,
+ 2, 0, 0x00, 0x00, 0x02, NULL, NULL },
+ { "GlossyFilm", N_("Glossy Film"), PAPER_PHOTO,
+ 3, 0, 0x6d, 0x00, 0x01, NULL, NULL },
+ { "Transparency", N_("Transparencies"), PAPER_TRANSPARENCY,
+ 3, 0, 0x6d, 0x00, 0x02, NULL, NULL },
+ { "Envelope", N_("Envelopes"), PAPER_PLAIN,
+ 4, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "BackFilm", N_("Back Light Film"), PAPER_TRANSPARENCY,
+ 6, 0, 0x6d, 0x00, 0x01, NULL, NULL },
+ { "Matte", N_("Matte Paper"), PAPER_GOOD,
+ 7, 0, 0x00, 0x00, 0x02, NULL, NULL },
+ { "MatteHeavy", N_("Matte Paper Heavyweight"), PAPER_GOOD,
+ 7, 0, 0x00, 0x00, 0x02, NULL, NULL },
+ { "Inkjet", N_("Inkjet Paper"), PAPER_GOOD,
+ 7, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "Coated", N_("Photo Quality Inkjet Paper"), PAPER_GOOD,
+ 7, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "Photo", N_("Photo Paper"), PAPER_PHOTO,
+ 8, 0, 0x67, 0x00, 0x02, NULL, NULL },
+ { "GlossyPhoto", N_("Premium Glossy Photo Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, NULL },
+ { "Semigloss", N_("Premium Semigloss Photo Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, NULL },
+ { "Luster", N_("Premium Luster Photo Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, NULL },
+ { "GlossyPaper", N_("Photo Quality Glossy Paper"), PAPER_PREMIUM_PHOTO,
+ 6, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "Ilford", N_("Ilford Heavy Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, NULL },
+ { "ColorLife", N_("ColorLife Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x67, 0x00, 0x02, NULL, NULL },
+ { "Other", N_("Other"), PAPER_PLAIN,
+ 0, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+};
+
+DECLARE_PAPERS(standard);
+
+static const paper_t durabrite_papers[] =
+{
+ { "Plain", N_("Plain Paper"), PAPER_PLAIN,
+ 1, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "PlainFast", N_("Plain Paper Fast Load"), PAPER_PLAIN,
+ 5, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "Postcard", N_("Postcard"), PAPER_PLAIN,
+ 2, 0, 0x00, 0x00, 0x02, NULL, NULL },
+ { "GlossyFilm", N_("Glossy Film"), PAPER_PHOTO,
+ 3, 0, 0x6d, 0x00, 0x01, NULL, NULL },
+ { "Transparency", N_("Transparencies"), PAPER_TRANSPARENCY,
+ 3, 0, 0x6d, 0x00, 0x02, NULL, NULL },
+ { "Envelope", N_("Envelopes"), PAPER_PLAIN,
+ 4, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "BackFilm", N_("Back Light Film"), PAPER_TRANSPARENCY,
+ 6, 0, 0x6d, 0x00, 0x01, NULL, NULL },
+ { "Matte", N_("Matte Paper"), PAPER_GOOD,
+ 7, 0, 0x00, 0x00, 0x02, NULL, NULL },
+ { "MatteHeavy", N_("Matte Paper Heavyweight"), PAPER_GOOD,
+ 7, 0, 0x00, 0x00, 0x02, NULL, NULL },
+ { "Inkjet", N_("Inkjet Paper"), PAPER_GOOD,
+ 7, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "Coated", N_("Photo Quality Inkjet Paper"), PAPER_GOOD,
+ 7, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "Photo", N_("Photo Paper"), PAPER_PHOTO,
+ 8, 0, 0x67, 0x00, 0x02, "RGB", NULL },
+ { "GlossyPhoto", N_("Premium Glossy Photo Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, "RGB", NULL },
+ { "Semigloss", N_("Premium Semigloss Photo Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, "RGB", NULL },
+ { "Luster", N_("Premium Luster Photo Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, "RGB", NULL },
+ { "GlossyPaper", N_("Photo Quality Glossy Paper"), PAPER_PHOTO,
+ 6, 0, 0x6b, 0x1a, 0x01, "RGB", NULL },
+ { "Ilford", N_("Ilford Heavy Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, NULL },
+ { "ColorLife", N_("ColorLife Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x67, 0x00, 0x02, NULL, NULL },
+ { "Other", N_("Other"), PAPER_PLAIN,
+ 0, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+};
+
+DECLARE_PAPERS(durabrite);
+
+static const paper_t ultrachrome_papers[] =
+{
+ { "Plain", N_("Plain Paper"), PAPER_PLAIN,
+ 1, 0, 0x6b, 0x1a, 0x01, NULL, "UltraMatte" },
+ { "PlainFast", N_("Plain Paper Fast Load"), PAPER_PLAIN,
+ 5, 0, 0x6b, 0x1a, 0x01, NULL, "UltraMatte" },
+ { "Postcard", N_("Postcard"), PAPER_PLAIN,
+ 2, 0, 0x00, 0x00, 0x02, NULL, "UltraMatte" },
+ { "GlossyFilm", N_("Glossy Film"), PAPER_PHOTO,
+ 3, 0, 0x6d, 0x00, 0x01, NULL, "UltraPhoto" },
+ { "Transparency", N_("Transparencies"), PAPER_TRANSPARENCY,
+ 3, 0, 0x6d, 0x00, 0x02, NULL, "UltraPhoto" },
+ { "Envelope", N_("Envelopes"), PAPER_PLAIN,
+ 4, 0, 0x6b, 0x1a, 0x01, NULL, "UltraMatte" },
+ { "BackFilm", N_("Back Light Film"), PAPER_TRANSPARENCY,
+ 6, 0, 0x6d, 0x00, 0x01, NULL, "UltraPhoto" },
+ { "Matte", N_("Matte Paper"), PAPER_GOOD,
+ 7, 0, 0x00, 0x00, 0x02, NULL, "UltraMatte" },
+ { "MatteHeavy", N_("Matte Paper Heavyweight"), PAPER_GOOD,
+ 7, 0, 0x00, 0x00, 0x02, NULL, "UltraMatte" },
+ { "Inkjet", N_("Inkjet Paper"), PAPER_GOOD,
+ 7, 0, 0x6b, 0x1a, 0x01, NULL, "UltraMatte" },
+ { "Coated", N_("Photo Quality Inkjet Paper"), PAPER_GOOD,
+ 7, 0, 0x6b, 0x1a, 0x01, NULL, "UltraPhoto" },
+ { "Photo", N_("Photo Paper"), PAPER_PHOTO,
+ 8, 0, 0x67, 0x00, 0x02, NULL, "UltraPhoto" },
+ { "GlossyPhoto", N_("Premium Glossy Photo Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, "UltraPhoto" },
+ { "Semigloss", N_("Premium Semigloss Photo Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, "UltraPhoto" },
+ { "Luster", N_("Premium Luster Photo Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, "UltraPhoto" },
+ { "ArchivalMatte", N_("Archival Matte Paper"), PAPER_PREMIUM_PHOTO,
+ 7, 0, 0x00, 0x00, 0x02, NULL, "UltraMatte" },
+ { "WaterColorRadiant", N_("Watercolor Paper - Radiant White"), PAPER_PREMIUM_PHOTO,
+ 7, 0, 0x00, 0x00, 0x02, NULL, "UltraMatte" },
+ { "GlossyPaper", N_("Photo Quality Glossy Paper"), PAPER_PHOTO,
+ 6, 0, 0x6b, 0x1a, 0x01, NULL, "UltraPhoto" },
+ { "Ilford", N_("Ilford Heavy Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, "UltraMatte" },
+ { "ColorLife", N_("ColorLife Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x67, 0x00, 0x02, NULL, "UltraPhoto" },
+ { "Other", N_("Other"), PAPER_PLAIN,
+ 0, 0, 0x6b, 0x1a, 0x01, NULL, "UltraMatte" },
+};
+
+DECLARE_PAPERS(ultrachrome);
+
+static const paper_t durabrite2_papers[] =
+{
+ { "Plain", N_("Plain Paper"), PAPER_PLAIN,
+ 1, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "PlainFast", N_("Plain Paper Fast Load"), PAPER_PLAIN,
+ 5, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "Postcard", N_("Postcard"), PAPER_PLAIN,
+ 2, 0, 0x00, 0x00, 0x02, NULL, NULL },
+ { "GlossyFilm", N_("Glossy Film"), PAPER_PHOTO,
+ 3, 0, 0x6d, 0x00, 0x01, NULL, NULL },
+ { "Transparency", N_("Transparencies"), PAPER_TRANSPARENCY,
+ 3, 0, 0x6d, 0x00, 0x02, NULL, NULL },
+ { "Envelope", N_("Envelopes"), PAPER_PLAIN,
+ 4, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "BackFilm", N_("Back Light Film"), PAPER_TRANSPARENCY,
+ 6, 0, 0x6d, 0x00, 0x01, NULL, NULL },
+ { "Matte", N_("Matte Paper"), PAPER_GOOD,
+ 7, 0, 0x00, 0x00, 0x02, NULL, NULL },
+ { "MatteHeavy", N_("Matte Paper Heavyweight"), PAPER_GOOD,
+ 7, 0, 0x00, 0x00, 0x02, NULL, NULL },
+ { "Inkjet", N_("Inkjet Paper"), PAPER_GOOD,
+ 7, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "Coated", N_("Photo Quality Inkjet Paper"), PAPER_GOOD,
+ 7, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "Photo", N_("Photo Paper"), PAPER_PHOTO,
+ 8, 0, 0x67, 0x00, 0x02, NULL, NULL },
+ { "GlossyPhoto", N_("Premium Glossy Photo Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, NULL },
+ { "Semigloss", N_("Premium Semigloss Photo Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, NULL },
+ { "Luster", N_("Premium Luster Photo Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, NULL },
+ { "GlossyPaper", N_("Photo Quality Glossy Paper"), PAPER_PHOTO,
+ 6, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+ { "Ilford", N_("Ilford Heavy Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, NULL },
+ { "ColorLife", N_("ColorLife Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x67, 0x00, 0x02, NULL, NULL },
+ { "Other", N_("Other"), PAPER_PLAIN,
+ 0, 0, 0x6b, 0x1a, 0x01, NULL, NULL },
+};
+
+DECLARE_PAPERS(durabrite2);
+
+static const paper_t r800_papers[] =
+{
+ { "Plain", N_("Plain Paper"), PAPER_PLAIN,
+ 1, 0, 0x6b, 0x1a, 0x01, NULL, "r800Matte" },
+ { "PlainFast", N_("Plain Paper Fast Load"), PAPER_PLAIN,
+ 5, 0, 0x6b, 0x1a, 0x01, NULL, "r800Matte" },
+ { "Postcard", N_("Postcard"), PAPER_PLAIN,
+ 2, 0, 0x00, 0x00, 0x02, NULL, "r800Matte" },
+ { "GlossyFilm", N_("Glossy Film"), PAPER_PHOTO,
+ 3, 0, 0x6d, 0x00, 0x01, NULL, "r800Photo" },
+ { "Transparency", N_("Transparencies"), PAPER_TRANSPARENCY,
+ 3, 0, 0x6d, 0x00, 0x02, NULL, "r800Photo" },
+ { "Envelope", N_("Envelopes"), PAPER_PLAIN,
+ 4, 0, 0x6b, 0x1a, 0x01, NULL, "r800Matte" },
+ { "BackFilm", N_("Back Light Film"), PAPER_TRANSPARENCY,
+ 6, 0, 0x6d, 0x00, 0x01, NULL, "r800Photo" },
+ { "Matte", N_("Matte Paper"), PAPER_GOOD,
+ 7, 0, 0x00, 0x00, 0x02, NULL, "r800Matte" },
+ { "MatteHeavy", N_("Matte Paper Heavyweight"), PAPER_GOOD,
+ 7, 0, 0x00, 0x00, 0x02, NULL, "r800Matte" },
+ { "Inkjet", N_("Inkjet Paper"), PAPER_GOOD,
+ 7, 0, 0x6b, 0x1a, 0x01, NULL, "r800Matte" },
+ { "Coated", N_("Photo Quality Inkjet Paper"), PAPER_GOOD,
+ 7, 0, 0x6b, 0x1a, 0x01, NULL, "r800Photo" },
+ { "Photo", N_("Photo Paper"), PAPER_PHOTO,
+ 8, 0, 0x67, 0x00, 0x02, NULL, "r800Photo" },
+ { "GlossyPhoto", N_("Premium Glossy Photo Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, "r800Photo" },
+ { "Semigloss", N_("Premium Semigloss Photo Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, "r800Photo" },
+ { "Luster", N_("Premium Luster Photo Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, "r800Photo" },
+ { "ArchivalMatte", N_("Archival Matte Paper"), PAPER_PREMIUM_PHOTO,
+ 7, 0, 0x00, 0x00, 0x02, NULL, "r800Matte" },
+ { "WaterColorRadiant", N_("Watercolor Paper - Radiant White"), PAPER_PREMIUM_PHOTO,
+ 7, 0, 0x00, 0x00, 0x02, NULL, "r800Matte" },
+ { "GlossyPaper", N_("Photo Quality Glossy Paper"), PAPER_PHOTO,
+ 6, 0, 0x6b, 0x1a, 0x01, NULL, "r800Photo" },
+ { "Ilford", N_("Ilford Heavy Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x80, 0x00, 0x02, NULL, "r800Matte" },
+ { "ColorLife", N_("ColorLife Paper"), PAPER_PREMIUM_PHOTO,
+ 8, 0, 0x67, 0x00, 0x02, NULL, "r800Photo" },
+ { "Other", N_("Other"), PAPER_PLAIN,
+ 0, 0, 0x6b, 0x1a, 0x01, NULL, "r800Matte" },
+};
+
+DECLARE_PAPERS(r800);
diff --git a/src/main/escp2-resolutions.c b/src/main/escp2-resolutions.c
new file mode 100644
index 0000000..17535c2
--- /dev/null
+++ b/src/main/escp2-resolutions.c
@@ -0,0 +1,469 @@
+/*
+ * "$Id: escp2-resolutions.c,v 1.27 2005/06/29 01:42:34 rlk Exp $"
+ *
+ * Print plug-in EPSON ESC/P2 driver for the GIMP.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include "print-escp2.h"
+
+static const res_t r_360x90dpi =
+{ "360x90dpi", N_("360 x 90 DPI Fast Economy"),
+ 360, 90, 360, 90, 0, 0, 1 };
+static const res_t r_360x90sw =
+{ "360x90sw", N_("360 x 90 DPI Fast Economy"),
+ 360, 90, 360, 90, 1, 0, 1 };
+
+static const res_t r_360x120dpi =
+{ "360x120dpi", N_("360 x 120 DPI Economy"),
+ 360, 120, 360, 120, 0, 0, 1 };
+static const res_t r_360x120sw =
+{ "360x120sw", N_("360 x 120 DPI Economy"),
+ 360, 120, 360, 120, 1, 0, 1 };
+
+static const res_t r_180dpi =
+{ "180dpi", N_("180 DPI Economy"),
+ 180, 180, 180, 180, 0, 0, 1 };
+static const res_t r_180sw =
+{ "180sw", N_("180 DPI Economy"),
+ 180, 180, 180, 180, 1, 0, 1 };
+
+static const res_t r_360x180dpi =
+{ "360x180dpi", N_("360 x 180 DPI Draft"),
+ 360, 180, 360, 180, 0, 0, 1 };
+static const res_t r_360x180sw =
+{ "360x180sw", N_("360 x 180 DPI Draft"),
+ 360, 180, 360, 180, 1, 0, 1 };
+
+static const res_t r_360x240dpi =
+{ "360x240dpi", N_("360 x 240 DPI Draft"),
+ 360, 240, 360, 240, 0, 0, 1 };
+static const res_t r_360x240sw =
+{ "360x240sw", N_("360 x 240 DPI Draft"),
+ 360, 240, 360, 240, 1, 0, 1 };
+
+static const res_t r_360mw =
+{ "360mw", N_("360 DPI High Quality"),
+ 360, 360, 360, 360, 0, 1, 1 };
+static const res_t r_360pro =
+{ "360pro", N_("360 DPI"),
+ 360, 360, 360, 360, 0, 1, 1 };
+static const res_t r_360 =
+{ "360", N_("360 DPI"),
+ 360, 360, 360, 360, 0, 0, 1 };
+static const res_t r_360sw =
+{ "360sw", N_("360 DPI"),
+ 360, 360, 360, 360, 1, 0, 1 };
+
+static const res_t r_720x360mw =
+{ "720x360mw", N_("720 x 360 DPI"),
+ 720, 360, 720, 360, 0, 1, 1 };
+static const res_t r_720x360sw =
+{ "720x360sw", N_("720 x 360 DPI"),
+ 720, 360, 720, 360, 1, 0, 1 };
+
+static const res_t r_720mw =
+{ "720mw", N_("720 DPI"),
+ 720, 720, 720, 720, 0, 1, 1 };
+static const res_t r_720sw =
+{ "720sw", N_("720 DPI"),
+ 720, 720, 720, 720, 1, 0, 1 };
+static const res_t r_720hq =
+{ "720hq", N_("720 DPI High Quality"),
+ 720, 720, 720, 720, 1, 0, 2 };
+static const res_t r_720hq2 =
+{ "720hq2", N_("720 DPI Highest Quality"),
+ 720, 720, 720, 720, 1, 0, 4 };
+
+static const res_t r_1440x720mw =
+{ "1440x720mw", N_("1440 x 720 DPI"),
+ 1440, 720, 1440, 720, 0, 1, 1 };
+static const res_t r_1440x720sw =
+{ "1440x720sw", N_("1440 x 720 DPI"),
+ 1440, 720, 1440, 720, 1, 0, 1 };
+static const res_t r_1440x720hq2 =
+{ "1440x720hq2", N_("1440 x 720 DPI Highest Quality"),
+ 1440, 720, 1440, 720, 1, 0, 2 };
+
+static const res_t r_2880x720mw =
+{ "2880x720mw", N_("2880 x 720 DPI"),
+ 2880, 720, 2880, 720, 0, 1, 1};
+static const res_t r_2880x720sw =
+{ "2880x720sw", N_("2880 x 720 DPI"),
+ 2880, 720, 2880, 720, 1, 0, 1};
+static const res_t r_2880x720hq2 =
+{ "2880x720hq2", N_("2880 x 720 DPI Highest Quality"),
+ 2880, 720, 2880, 720, 1, 0, 2 };
+
+static const res_t r_1440x1440mw =
+{ "1440x1440mw", N_("1440 x 1440 DPI"),
+ 1440, 1440, 1440, 1440, 0, 1, 1};
+static const res_t r_1440x1440sw =
+{ "1440x1440sw", N_("1440 x 1440 DPI"),
+ 1440, 1440, 1440, 1440, 1, 0, 1};
+static const res_t r_1440x1440ov =
+{ "1440x1440ov", N_("1440 x 1440 DPI"),
+ 2880, 1440, 1440, 1440, 1, 0, 1};
+
+static const res_t r_2880x1440mw =
+{ "2880x1440mw", N_("2880 x 1440 DPI"),
+ 2880, 1440, 2880, 1440, 0, 1, 1};
+static const res_t r_2880x1440sw =
+{ "2880x1440sw", N_("2880 x 1440 DPI"),
+ 2880, 1440, 2880, 1440, 1, 0, 1};
+
+static const res_t r_2880x2880mw =
+{ "2880x2880mw", N_("2880 x 2880 DPI"),
+ 2880, 2880, 2880, 2880, 0, 1, 1};
+static const res_t r_2880x2880sw =
+{ "2880x2880sw", N_("2880 x 2880 DPI"),
+ 2880, 2880, 2880, 2880, 1, 0, 1};
+
+
+
+const res_t *const stpi_escp2_720dpi_reslist[] =
+{
+ &r_360x90dpi,
+
+ &r_360x120dpi,
+
+ &r_180dpi,
+
+ &r_360x240dpi,
+
+ &r_360x180dpi,
+
+ &r_360mw,
+ &r_360,
+
+ &r_720x360sw,
+
+ &r_720mw,
+
+ NULL
+};
+
+const res_t *const stpi_escp2_1440dpi_reslist[] =
+{
+ &r_360x90sw,
+
+ &r_360x120sw,
+
+ &r_180sw,
+
+ &r_360x240sw,
+
+ &r_360x180sw,
+
+ &r_360sw,
+
+ &r_720x360sw,
+
+ &r_720sw,
+ &r_720hq,
+
+ &r_1440x720sw,
+ &r_1440x720hq2,
+
+ NULL
+};
+
+const res_t *const stpi_escp2_2880dpi_reslist[] =
+{
+ &r_360x90sw,
+
+ &r_360x120sw,
+
+ &r_180sw,
+
+ &r_360x240sw,
+
+ &r_360x180sw,
+
+ &r_360sw,
+
+ &r_720x360sw,
+
+ &r_720sw,
+
+ &r_1440x720sw,
+ &r_1440x720hq2,
+
+ &r_2880x720sw,
+ &r_2880x720hq2,
+
+ NULL
+};
+
+const res_t *const stpi_escp2_2880_1440dpi_reslist[] =
+{
+ &r_360x90sw,
+
+ &r_360x120sw,
+
+ &r_180sw,
+
+ &r_360x240sw,
+
+ &r_360x180sw,
+
+ &r_360sw,
+
+ &r_720x360sw,
+
+ &r_720sw,
+
+ &r_1440x720sw,
+
+ &r_2880x720sw,
+
+ &r_1440x1440sw,
+
+ &r_2880x1440sw,
+
+ &r_2880x2880sw,
+
+ NULL
+};
+
+const res_t *const stpi_escp2_g3_reslist[] =
+{
+ &r_360x90dpi,
+
+ &r_360x120dpi,
+
+ &r_180dpi,
+
+ &r_360x240dpi,
+
+ &r_360x180dpi,
+
+ &r_360mw,
+ &r_360,
+
+ &r_720x360sw,
+
+ &r_720sw,
+ &r_720hq,
+
+ &r_1440x720sw,
+ &r_1440x720hq2,
+
+ NULL
+};
+
+const res_t *const stpi_escp2_superfine_reslist[] =
+{
+ &r_360x120sw,
+
+ &r_360x180sw,
+
+ &r_360x240sw,
+
+ &r_360sw,
+
+ &r_720x360sw,
+
+ &r_720sw,
+
+ &r_1440x720sw,
+
+ &r_1440x1440ov,
+
+ &r_2880x1440sw,
+
+ &r_2880x2880sw,
+
+ NULL
+};
+
+const res_t *const stpi_escp2_sc500_reslist[] =
+{
+ &r_360x90dpi,
+
+ &r_360x120dpi,
+
+ &r_180dpi,
+
+ &r_360x240dpi,
+
+ &r_360x180dpi,
+
+ &r_360mw,
+ &r_360,
+
+ &r_720x360mw,
+
+ &r_720mw,
+
+ NULL
+};
+
+const res_t *const stpi_escp2_g3_720dpi_reslist[] =
+{
+ &r_360x90dpi,
+
+ &r_360x120sw,
+
+ &r_180dpi,
+
+ &r_360x240sw,
+
+ &r_360x180dpi,
+
+ &r_360mw,
+ &r_360,
+
+ &r_720x360sw,
+
+ &r_720sw,
+ &r_720hq,
+ &r_720hq2,
+
+ NULL
+};
+
+const res_t *const stpi_escp2_720dpi_soft_reslist[] =
+{
+ &r_360x90dpi,
+
+ &r_360x120sw,
+
+ &r_180dpi,
+
+ &r_360x240sw,
+
+ &r_360x180dpi,
+
+ &r_360sw,
+
+ &r_720x360sw,
+
+ &r_720sw,
+ &r_720hq,
+ &r_720hq2,
+
+ NULL
+};
+
+const res_t *const stpi_escp2_sc640_reslist[] =
+{
+ &r_360x90dpi,
+
+ &r_180dpi,
+
+ &r_360x180dpi,
+
+ &r_360mw,
+ &r_360,
+
+ &r_720x360sw,
+
+ &r_720mw,
+
+ &r_1440x720sw,
+ &r_1440x720hq2,
+
+ NULL
+};
+
+const res_t *const stpi_escp2_pro_reslist[] =
+{
+ &r_360x90dpi,
+
+ &r_180dpi,
+
+ &r_360x180dpi,
+
+ &r_360pro,
+
+ &r_720x360mw,
+
+ &r_720mw,
+
+ &r_1440x720mw,
+
+ &r_2880x720mw,
+
+ &r_1440x1440mw,
+
+ &r_2880x1440mw,
+
+ &r_2880x2880mw,
+
+ NULL
+};
+
+#define DECLARE_PRINTER_WEAVES(name) \
+const printer_weave_list_t stpi_escp2_##name##_printer_weave_list = \
+{ \
+ #name, \
+ sizeof(name##_printer_weaves) / sizeof(printer_weave_t), \
+ name##_printer_weaves \
+}
+
+static const printer_weave_t standard_printer_weaves[] =
+{
+ { "Off", N_("Off"), 0 },
+ { "On", N_("On"), 1 }
+};
+
+DECLARE_PRINTER_WEAVES(standard);
+
+static const printer_weave_t pro7000_printer_weaves[] =
+{
+ { "Off", N_("Off"), 0 },
+ { "On", N_("Interleave"), 1 },
+ { "FOL", N_("Full Overlap"), 2 },
+ { "FourPass", N_("Four Pass"), 3 },
+ { "FOL2", N_("Full Overlap 2"), 4 },
+};
+
+DECLARE_PRINTER_WEAVES(pro7000);
+
+static const printer_weave_t pro7500_printer_weaves[] =
+{
+ { "Off", N_("Off"), 0 },
+ { "On", N_("Interleave"), 1 },
+ { "FOL", N_("Full Overlap"), 2 },
+ { "FourPass", N_("Four Pass"), 3 },
+ { "FOL2", N_("Full Overlap 2"), 4 },
+ { "MW2", N_("Interleave 2"), 5 },
+};
+
+DECLARE_PRINTER_WEAVES(pro7500);
+
+static const printer_weave_t pro7600_printer_weaves[] =
+{
+ { "Off", N_("Off"), 0 },
+ { "On", N_("Interleave"), 1 },
+ { "FOL", N_("Full Overlap"), 2 },
+ { "FourPass", N_("Four Pass"), 3 },
+ { "FOL2", N_("Full Overlap 2"), 4 },
+ { "MW2", N_("Interleave 2"), 5 },
+ { "EightPass", N_("Eight Pass"), 6 },
+};
+
+DECLARE_PRINTER_WEAVES(pro7600);
diff --git a/src/main/generic-options.c b/src/main/generic-options.c
new file mode 100644
index 0000000..25bc373
--- /dev/null
+++ b/src/main/generic-options.c
@@ -0,0 +1,257 @@
+/*
+ * "$Id: generic-options.c,v 1.9 2004/11/22 13:31:40 rlk Exp $"
+ *
+ * Copyright 2003 Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include "generic-options.h"
+#include <string.h>
+#include <limits.h>
+
+static const stpi_quality_t standard_qualities[] =
+{
+ { "FastEconomy", N_("Fast Economy"), 0 },
+ { "Economy", N_("Economy"), 1 },
+ { "Draft", N_("Draft"), 3 },
+ { "Standard", N_("Standard"), 5 },
+ { "High", N_("High"), 6 },
+ { "Photo", N_("Photo"), 7 },
+ { "HighPhoto", N_("Super Photo"), 8 },
+ { "UltraPhoto", N_("Ultra Photo"), 9 },
+ { "Best", N_("Best"), 10 },
+};
+
+static const stpi_image_type_t standard_image_types[] =
+{
+ { "Text", N_("Text") },
+ { "Graphics", N_("Graphics") },
+ { "TextGraphics", N_("Mixed Text and Graphics") },
+ { "Photo", N_("Photograph") },
+ { "LineArt", N_("Line Art") },
+};
+
+static const stpi_job_mode_t standard_job_modes[] =
+{
+ { "Page", N_("Page") },
+ { "Job", N_("Job") },
+};
+
+static const stp_parameter_t the_parameters[] =
+{
+ {
+ "Quality", N_("Print Quality"), N_("Basic Output Adjustment"),
+ N_("Print Quality"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 0, 0
+ },
+ {
+ "ImageType", N_("Image Type"), N_("Basic Image Adjustment"),
+ N_("Type of image being printed"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 0, 0
+ },
+ {
+ "JobMode", N_("Job Mode"), N_("Job Mode"),
+ N_("Job vs. page mode"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 0, 0
+ },
+ {
+ "PageNumber", N_("Page Number"), N_("Job Mode"),
+ N_("Page number"),
+ STP_PARAMETER_TYPE_INT, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 0, 1, -1, 1, 0
+ },
+};
+
+static const int the_parameter_count =
+sizeof(the_parameters) / sizeof(const stp_parameter_t);
+
+int
+stpi_get_qualities_count(void)
+{
+ return sizeof(standard_qualities) / sizeof(stpi_quality_t);
+}
+
+const stpi_quality_t *
+stpi_get_quality_by_index(int idx)
+{
+ if (idx < 0 || idx >= stpi_get_qualities_count())
+ return NULL;
+ else
+ return &(standard_qualities[idx]);
+}
+
+const stpi_quality_t *
+stpi_get_quality_by_name(const char *quality)
+{
+ int i;
+ if (!quality)
+ return NULL;
+ for (i = 0; i < stpi_get_qualities_count(); i++)
+ {
+ const stpi_quality_t *qual = stpi_get_quality_by_index(i);
+ if (strcmp(quality, qual->name) == 0)
+ return qual;
+ }
+ return NULL;
+}
+
+int
+stpi_get_image_types_count(void)
+{
+ return sizeof(standard_image_types) / sizeof(stpi_image_type_t);
+}
+
+const stpi_image_type_t *
+stpi_get_image_type_by_index(int idx)
+{
+ if (idx < 0 || idx >= stpi_get_image_types_count())
+ return NULL;
+ else
+ return &(standard_image_types[idx]);
+}
+
+const stpi_image_type_t *
+stpi_get_image_type_by_name(const char *image_type)
+{
+ int i;
+ if (!image_type)
+ return NULL;
+ for (i = 0; i < stpi_get_image_types_count(); i++)
+ {
+ const stpi_image_type_t *itype = stpi_get_image_type_by_index(i);
+ if (strcmp(image_type, itype->name) == 0)
+ return itype;
+ }
+ return NULL;
+}
+
+int
+stpi_get_job_modes_count(void)
+{
+ return sizeof(standard_job_modes) / sizeof(stpi_job_mode_t);
+}
+
+const stpi_job_mode_t *
+stpi_get_job_mode_by_index(int idx)
+{
+ if (idx < 0 || idx >= stpi_get_job_modes_count())
+ return NULL;
+ else
+ return &(standard_job_modes[idx]);
+}
+
+const stpi_job_mode_t *
+stpi_get_job_mode_by_name(const char *job_mode)
+{
+ int i;
+ if (!job_mode)
+ return NULL;
+ for (i = 0; i < stpi_get_job_modes_count(); i++)
+ {
+ const stpi_job_mode_t *itype = stpi_get_job_mode_by_index(i);
+ if (strcmp(job_mode, itype->name) == 0)
+ return itype;
+ }
+ return NULL;
+}
+
+stp_parameter_list_t
+stp_list_generic_parameters(const stp_vars_t *v)
+{
+ stp_parameter_list_t *ret = stp_parameter_list_create();
+ int i;
+ for (i = 0; i < the_parameter_count; i++)
+ stp_parameter_list_add_param(ret, &(the_parameters[i]));
+ return ret;
+}
+
+void
+stpi_describe_generic_parameter(const stp_vars_t *v, const char *name,
+ stp_parameter_t *description)
+{
+ int i;
+ description->p_type = STP_PARAMETER_TYPE_INVALID;
+ if (name == NULL)
+ return;
+
+ for (i = 0; i < the_parameter_count; i++)
+ if (strcmp(name, the_parameters[i].name) == 0)
+ {
+ stp_fill_parameter_settings(description, &(the_parameters[i]));
+ break;
+ }
+
+ description->deflt.str = NULL;
+
+ if (strcmp(name, "Quality") == 0)
+ {
+#if 0
+ description->bounds.str = stp_string_list_create();
+ stp_string_list_add_string(description->bounds.str, "None",
+ _("Manual Control"));
+ for (i = 0; i < stpi_get_qualities_count(); i++)
+ {
+ const stpi_quality_t *qual = stpi_get_quality_by_index(i);
+ stp_string_list_add_string(description->bounds.str, qual->name,
+ qual->text);
+ }
+ description->deflt.str = "Standard";
+#else
+ description->bounds.str = stp_string_list_create();
+ description->is_active = 0;
+#endif
+ }
+ else if (strcmp(name, "ImageType") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ stp_string_list_add_string(description->bounds.str, "None",
+ _("Manual Control"));
+ for (i = 0; i < stpi_get_image_types_count(); i++)
+ {
+ const stpi_image_type_t *itype = stpi_get_image_type_by_index(i);
+ stp_string_list_add_string(description->bounds.str, itype->name,
+ itype->text);
+ }
+ description->deflt.str = "TextGraphics";
+ }
+ else if (strcmp(name, "JobMode") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ for (i = 0; i < stpi_get_job_modes_count(); i++)
+ {
+ const stpi_job_mode_t *itype = stpi_get_job_mode_by_index(i);
+ stp_string_list_add_string(description->bounds.str, itype->name,
+ itype->text);
+ }
+ description->deflt.str = "Page";
+ }
+ else if (strcmp(name, "PageNumber") == 0)
+ {
+ description->deflt.integer = 0;
+ description->bounds.integer.lower = 0;
+ description->bounds.integer.upper = INT_MAX;
+ }
+}
+
diff --git a/src/main/generic-options.h b/src/main/generic-options.h
new file mode 100644
index 0000000..446f349
--- /dev/null
+++ b/src/main/generic-options.h
@@ -0,0 +1,67 @@
+/*
+ * "$Id: generic-options.h,v 1.5 2004/09/17 18:38:20 rleigh Exp $"
+ *
+ * Copyright 2003 Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef GUTENPRINT_INTERNAL_GENERIC_OPTIONS_H
+#define GUTENPRINT_INTERNAL_GENERIC_OPTIONS_H
+
+typedef struct
+{
+ const char *name;
+ const char *text;
+ int quality_level; /* Between 0 and 10 */
+} stpi_quality_t;
+
+typedef struct
+{
+ const char *name;
+ const char *text;
+} stpi_image_type_t;
+
+typedef struct
+{
+ const char *name;
+ const char *text;
+} stpi_job_mode_t;
+
+extern int stpi_get_qualities_count(void);
+
+extern const stpi_quality_t *stpi_get_quality_by_index(int idx);
+
+extern const stpi_quality_t *stpi_get_quality_by_name(const char *quality);
+
+extern int stpi_get_image_types_count(void);
+
+extern const stpi_image_type_t *stpi_get_image_type_by_index(int idx);
+
+extern const stpi_image_type_t *stpi_get_image_type_by_name(const char *image_type);
+
+extern int stpi_get_job_modes_count(void);
+
+extern const stpi_job_mode_t *stpi_get_job_mode_by_index(int idx);
+
+extern const stpi_job_mode_t *stpi_get_job_mode_by_name(const char *job_mode);
+
+extern stp_parameter_list_t stp_list_generic_parameters(const stp_vars_t *v);
+
+extern void stpi_describe_generic_parameter(const stp_vars_t *v,
+ const char *name,
+ stp_parameter_t *description);
+
+#endif /* GUTENPRINT_INTERNAL_GENERIC_OPTIONS_H */
diff --git a/src/main/gimp-print-internal.h b/src/main/gimp-print-internal.h
deleted file mode 100644
index 95300af..0000000
--- a/src/main/gimp-print-internal.h
+++ /dev/null
@@ -1,495 +0,0 @@
-/*
- * "$Id: gimp-print-internal.h,v 1.43.4.4 2002/12/08 21:12:41 rlk Exp $"
- *
- * Print plug-in header file for the GIMP.
- *
- * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
- * Robert Krawitz (rlk@alum.mit.edu)
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Revision History:
- *
- * See ChangeLog
- */
-
-/*
- * This file must include only standard C header files. The core code must
- * compile on generic platforms that don't support glib, gimp, gtk, etc.
- */
-
-#ifndef _GIMP_PRINT_INTERNAL_H_
-#define _GIMP_PRINT_INTERNAL_H_
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-/*
- * ECOLOR_K must be 0
- */
-#define ECOLOR_K 0
-#define ECOLOR_C 1
-#define ECOLOR_M 2
-#define ECOLOR_Y 3
-#define ECOLOR_LC 4
-#define ECOLOR_LM 5
-#define ECOLOR_LY 6
-#define NCOLORS (4)
-#define MAX_WEAVE (8)
-
-typedef struct
-{
- double value;
- unsigned bit_pattern;
- int subchannel;
- unsigned dot_size;
-} stp_simple_dither_range_t;
-
-typedef struct
-{
- double value;
- double lower;
- double upper;
- unsigned bit_pattern;
- int subchannel;
- unsigned dot_size;
-} stp_dither_range_t;
-
-typedef struct
-{
- double value[2];
- unsigned bits[2];
- int subchannel[2];
-} stp_full_dither_range_t;
-
-typedef struct
-{
- unsigned subchannel_count;
- unsigned char **c;
-} stp_channel_t;
-
-typedef struct
-{
- unsigned channel_count;
- stp_channel_t *c;
-} stp_dither_data_t;
-
-
-typedef struct /* Weave parameters for a specific row */
-{
- int row; /* Absolute row # */
- int pass; /* Computed pass # */
- int jet; /* Which physical nozzle we're using */
- int missingstartrows; /* Phantom rows (nonexistent rows that */
- /* would be printed by nozzles lower than */
- /* the first nozzle we're using this pass; */
- /* with the current algorithm, always zero */
- int logicalpassstart; /* Offset in rows (from start of image) */
- /* that the printer must be for this row */
- /* to print correctly with the specified jet */
- int physpassstart; /* Offset in rows to the first row printed */
- /* in this pass. Currently always equal to */
- /* logicalpassstart */
- int physpassend; /* Offset in rows (from start of image) to */
- /* the last row that will be printed this */
- /* pass (assuming that we're printing a full */
- /* pass). */
-} stp_weave_t;
-
-typedef struct /* Weave parameters for a specific pass */
-{
- int pass; /* Absolute pass number */
- int missingstartrows; /* All other values the same as weave_t */
- int logicalpassstart;
- int physpassstart;
- int physpassend;
- int subpass;
-} stp_pass_t;
-
-typedef struct { /* Offsets from the start of each line */
- int ncolors;
- unsigned long *v; /* (really pass) */
-} stp_lineoff_t;
-
-typedef struct { /* Is this line (really pass) active? */
- int ncolors;
- char *v;
-} stp_lineactive_t;
-
-typedef struct { /* number of rows for a pass */
- int ncolors;
- int *v;
-} stp_linecount_t;
-
-typedef struct { /* Base pointers for each pass */
- int ncolors;
- unsigned char **v;
-} stp_linebufs_t;
-
-typedef struct stp_softweave
-{
- stp_linebufs_t *linebases; /* Base address of each row buffer */
- stp_lineoff_t *lineoffsets; /* Offsets within each row buffer */
- stp_lineactive_t *lineactive; /* Does this line have anything printed? */
- stp_linecount_t *linecounts; /* How many rows we've printed this pass */
- stp_pass_t *passes; /* Circular list of pass numbers */
- int last_pass_offset; /* Starting row (offset from the start of */
- /* the page) of the most recently printed */
- /* pass (so we can determine how far to */
- /* advance the paper) */
- int last_pass; /* Number of the most recently printed pass */
-
- int jets; /* Number of jets per color */
- int virtual_jets; /* Number of jets per color, taking into */
- /* account the head offset */
- int separation; /* Offset from one jet to the next in rows */
- void *weaveparm; /* Weave calculation parameter block */
-
- int horizontal_weave; /* Number of horizontal passes required */
- /* This is > 1 for some of the ultra-high */
- /* resolution modes */
- int vertical_subpasses; /* Number of passes per line (for better */
- /* quality) */
- int vmod; /* Number of banks of passes */
- int oversample; /* Excess precision per row */
- int repeat_count; /* How many times a pass is repeated */
- int ncolors; /* How many colors */
- int linewidth; /* Line width in input pixels */
- int vertical_height; /* Image height in output pixels */
- int firstline; /* Actual first line (referenced to paper) */
-
- int bitwidth; /* Bits per pixel */
- int lineno;
- int vertical_oversample; /* Vertical oversampling */
- int current_vertical_subpass;
- int horizontal_width; /* Horizontal width, in bits */
- int *head_offset; /* offset of printheads */
- unsigned char *s[MAX_WEAVE];
- unsigned char *fold_buf;
- unsigned char *comp_buf;
- stp_weave_t wcache;
- int rcache;
- int vcache;
- stp_vars_t v;
- void (*flushfunc)(struct stp_softweave *sw, int passno, int model,
- int width, int hoffset, int ydpi, int xdpi,
- int physical_xdpi, int vertical_subpass);
- void (*fill_start)(struct stp_softweave *sw, int row, int subpass,
- int width, int missingstartrows, int color);
- int (*pack)(const unsigned char *in, int bytes,
- unsigned char *out, unsigned char **optr);
- int (*compute_linewidth)(const struct stp_softweave *sw, int n);
-} stp_softweave_t;
-
-typedef struct stp_dither_matrix_short
-{
- int x;
- int y;
- int bytes;
- int prescaled;
- const unsigned short *data;
-} stp_dither_matrix_short_t;
-
-typedef struct stp_dither_matrix_normal
-{
- int x;
- int y;
- int bytes;
- int prescaled;
- const unsigned *data;
-} stp_dither_matrix_normal_t;
-
-typedef struct stp_dither_matrix
-{
- int x;
- int y;
- int bytes;
- int prescaled;
- const void *data;
-} stp_dither_matrix_t;
-
-/*
- * Prototypes...
- */
-
-extern void stp_set_driver_data (stp_vars_t vv, void * val);
-extern void * stp_get_driver_data (const stp_vars_t vv);
-
-extern void stp_set_verified(stp_vars_t vv, int value);
-extern int stp_get_verified(stp_vars_t vv);
-
-extern void stp_copy_options(stp_vars_t vd, const stp_vars_t vs);
-
-extern void stp_default_media_size(const stp_printer_t printer,
- const stp_vars_t v, int *width,
- int *height);
-
-extern void * stp_init_dither(int in_width, int out_width,
- int horizontal_aspect,
- int vertical_aspect, stp_vars_t vars);
-extern void stp_dither_set_iterated_matrix(void *vd, size_t edge,
- size_t iterations,
- const unsigned *data,
- int prescaled,
- int x_shear, int y_shear);
-extern void stp_dither_set_matrix(void *vd, const stp_dither_matrix_t *mat,
- int transpose, int x_shear, int y_shear);
-extern void stp_dither_set_transition(void *vd, double);
-extern void stp_dither_set_density(void *vd, double);
-extern void stp_dither_set_black_density(void *vd, double);
-extern void stp_dither_set_black_lower(void *vd, double);
-extern void stp_dither_set_black_upper(void *vd, double);
-extern void stp_dither_set_black_level(void *vd, int color, double);
-extern void stp_dither_set_randomizer(void *vd, int color, double);
-extern void stp_dither_set_ink_darkness(void *vd, int color, double);
-extern void stp_dither_set_light_ink(void *vd, int color, double, double);
-extern void stp_dither_set_ranges(void *vd, int color, int nlevels,
- const stp_simple_dither_range_t *ranges,
- double density);
-extern void stp_dither_set_ranges_full(void *vd, int color, int nlevels,
- const stp_full_dither_range_t *ranges,
- double density);
-extern void stp_dither_set_ranges_simple(void *vd, int color, int nlevels,
- const double *levels,
- double density);
-extern void stp_dither_set_ranges_complete(void *vd, int color, int nlevels,
- const stp_dither_range_t *ranges);
-extern void stp_dither_set_ink_spread(void *vd, int spread);
-extern void stp_dither_set_x_oversample(void *vd, int os);
-extern void stp_dither_set_y_oversample(void *vd, int os);
-extern void stp_dither_set_adaptive_limit(void *vd, double limit);
-extern int stp_dither_get_first_position(void *vd, int color, int dark);
-extern int stp_dither_get_last_position(void *vd, int color, int dark);
-
-
-extern void stp_free_dither(void *);
-
-extern stp_dither_data_t *stp_create_dither_data(void);
-extern void stp_add_channel(stp_dither_data_t *d, unsigned char *data,
- unsigned channel, unsigned subchannel);
-extern void stp_free_dither_data(stp_dither_data_t *d);
-
-extern void stp_dither(const unsigned short *, int, void *,
- stp_dither_data_t *, int duplicate_line,
- int zero_mask);
-
-extern void stp_fold(const unsigned char *line, int single_height,
- unsigned char *outbuf);
-
-extern void stp_split_2(int height, int bits, const unsigned char *in,
- unsigned char *outhi, unsigned char *outlo);
-
-extern void stp_split_4(int height, int bits, const unsigned char *in,
- unsigned char *out0, unsigned char *out1,
- unsigned char *out2, unsigned char *out3);
-
-extern void stp_unpack_2(int height, int bits, const unsigned char *in,
- unsigned char *outlo, unsigned char *outhi);
-
-extern void stp_unpack_4(int height, int bits, const unsigned char *in,
- unsigned char *out0, unsigned char *out1,
- unsigned char *out2, unsigned char *out3);
-
-extern void stp_unpack_8(int height, int bits, const unsigned char *in,
- unsigned char *out0, unsigned char *out1,
- unsigned char *out2, unsigned char *out3,
- unsigned char *out4, unsigned char *out5,
- unsigned char *out6, unsigned char *out7);
-
-extern int stp_pack_tiff(const unsigned char *line, int height,
- unsigned char *comp_buf,
- unsigned char **comp_ptr);
-
-extern int stp_pack_uncompressed(const unsigned char *line, int height,
- unsigned char *comp_buf,
- unsigned char **comp_ptr);
-
-extern void *stp_initialize_weave(int jets, int separation, int oversample,
- int horizontal, int vertical,
- int ncolors, int width, int linewidth,
- int lineheight,
- int first_line, int phys_lines, int strategy,
- int *head_offset, /* Get from model - used for 480/580 printers */
- stp_vars_t v,
- void (*flushfunc)(stp_softweave_t *sw,
- int passno, int model,
- int width, int hoffset,
- int ydpi, int xdpi,
- int physical_xdpi,
- int vertical_subpass),
- void (*fill_start)(stp_softweave_t *sw,
- int row,
- int subpass, int width,
- int missingstartrows,
- int vertical_subpass),
- int (*pack)(const unsigned char *in,
- int bytes, unsigned char *out,
- unsigned char **optr),
- int (*compute_linewidth)(const stp_softweave_t *sw,
- int n));
-
-extern void stp_fill_tiff(stp_softweave_t *sw, int row, int subpass,
- int width, int missingstartrows, int color);
-extern void stp_fill_uncompressed(stp_softweave_t *sw, int row, int subpass,
- int width, int missingstartrows, int color);
-
-extern int stp_compute_tiff_linewidth(const stp_softweave_t *sw, int n);
-extern int stp_compute_uncompressed_linewidth(const stp_softweave_t *sw, int n);
-
-extern int stp_start_job(const stp_printer_t printer,
- stp_image_t *image, const stp_vars_t v);
-extern int stp_end_job(const stp_printer_t printer,
- stp_image_t *image, const stp_vars_t v);
-
-extern void stp_flush_all(void *, int model, int width, int hoffset,
- int ydpi, int xdpi, int physical_xdpi);
-
-extern void
-stp_write_weave(void * vsw,
- int length, /* I - Length of bitmap data */
- int ydpi, /* I - Vertical resolution */
- int model, /* I - Printer model */
- int width, /* I - Printed width */
- int offset, /* I - Offset from left side of page */
- int xdpi,
- int physical_xdpi,
- unsigned char *const cols[]);
-
-extern stp_lineoff_t *
-stp_get_lineoffsets_by_pass(const stp_softweave_t *sw, int pass);
-
-extern stp_lineactive_t *
-stp_get_lineactive_by_pass(const stp_softweave_t *sw, int pass);
-
-extern stp_linecount_t *
-stp_get_linecount_by_pass(const stp_softweave_t *sw, int pass);
-
-extern const stp_linebufs_t *
-stp_get_linebases_by_pass(const stp_softweave_t *sw, int pass);
-
-extern stp_pass_t *
-stp_get_pass_by_pass(const stp_softweave_t *sw, int pass);
-
-extern void
-stp_weave_parameters_by_row(const stp_softweave_t *sw, int row,
- int vertical_subpass, stp_weave_t *w);
-
-extern void stp_destroy_weave(void *);
-
-extern void stp_destroy_weave_params(void *vw);
-
-extern int
-stp_verify_printer_params(const stp_printer_t, const stp_vars_t);
-
-extern void stp_zprintf(const stp_vars_t v, const char *format, ...);
-
-extern void stp_zfwrite(const char *buf, size_t bytes, size_t nitems,
- const stp_vars_t v);
-
-extern void stp_putc(int ch, const stp_vars_t v);
-extern void stp_erputc(int ch);
-
-extern void stp_puts(const char *s, const stp_vars_t v);
-
-extern void stp_eprintf(const stp_vars_t v, const char *format, ...);
-extern void stp_erprintf(const char *format, ...);
-
-#define STP_DBG_LUT 0x1
-#define STP_DBG_COLORFUNC 0x2
-#define STP_DBG_INK 0x4
-#define STP_DBG_PS 0x8
-#define STP_DBG_PCL 0x10
-#define STP_DBG_ESCP2 0x20
-#define STP_DBG_CANON 0x40
-#define STP_DBG_LEXMARK 0x80
-#define STP_DBG_WEAVE_PARAMS 0x100
-#define STP_DBG_ROWS 0x200
-#define STP_DBG_MARK_FILE 0x400
-extern void stp_dprintf(unsigned long level, const stp_vars_t v,
- const char *format, ...);
-extern void stp_deprintf(unsigned long level, const char *format, ...);
-extern unsigned long stp_debug_level;
-
-extern void *stp_malloc (size_t);
-extern void *stp_zalloc (size_t);
-extern void *stp_realloc (void *ptr, size_t);
-extern void stp_free(void *ptr);
-
-/* Uncomment the next line to get performance statistics:
- * look for QUANT(#) in the code. At the end of escp2-print
- * run, it will print out how long and how many time did
- * certain pieces of code take. Of course, don't forget about
- * overhead of call to gettimeofday - it's not zero.
- * If you need more detailed performance stats, just put
- * QUANT() calls in the interesting spots in the code */
-/*#define QUANTIFY*/
-#ifdef QUANTIFY
-#include <assert.h>
-#include <sys/time.h>
-#include <unistd.h>
-#else
-#define QUANT(n)
-#endif
-
-#ifdef QUANTIFY
-/* Used for performance analysis - to be called before and after
- * the interval to be quantified */
-#define NUM_QUANTIFY_BUCKETS 1024
-extern unsigned quantify_counts[NUM_QUANTIFY_BUCKETS];
-extern struct timeval quantify_buckets[NUM_QUANTIFY_BUCKETS];
-extern int quantify_high_index;
-extern int quantify_first_time;
-extern struct timeval quantify_cur_time;
-extern struct timeval quantify_prev_time;
-
-#define QUANT(number) \
-{\
- gettimeofday(&quantify_cur_time, NULL);\
- assert(number < NUM_QUANTIFY_BUCKETS);\
- quantify_counts[number]++;\
-\
- if (quantify_first_time) {\
- quantify_first_time = 0;\
- } else {\
- if (number > quantify_high_index) quantify_high_index = number;\
- if (quantify_prev_time.tv_usec > quantify_cur_time.tv_usec) {\
- quantify_buckets[number].tv_usec += ((quantify_cur_time.tv_usec + 1000000) - quantify_prev_time.tv_usec);\
- quantify_buckets[number].tv_sec += (quantify_cur_time.tv_sec - quantify_prev_time.tv_sec - 1);\
- } else {\
- quantify_buckets[number].tv_sec += quantify_cur_time.tv_sec - quantify_prev_time.tv_sec;\
- quantify_buckets[number].tv_usec += quantify_cur_time.tv_usec - quantify_prev_time.tv_usec;\
- }\
- if (quantify_buckets[number].tv_usec >= 1000000)\
- {\
- quantify_buckets[number].tv_usec -= 1000000;\
- quantify_buckets[number].tv_sec++;\
- }\
- }\
-\
- gettimeofday(&quantify_prev_time, NULL);\
-}
-
-extern void print_timers(void );
-#endif
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* _GIMP_PRINT_INTERNAL_H_ */
-/*
- * End of "$Id: gimp-print-internal.h,v 1.43.4.4 2002/12/08 21:12:41 rlk Exp $".
- */
diff --git a/src/main/gimpprint-config.in b/src/main/gimpprint-config.in
deleted file mode 100644
index 45753f0..0000000
--- a/src/main/gimpprint-config.in
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/bin/sh
-
-gimpprint_libs="@gimpprint_libs@"
-gimpprint_cflags="@gimpprint_cflags@"
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-exec_prefix_set=no
-
-usage()
-{
- cat <<EOF
-Usage: gimpprint-config [OPTIONS] [LIBRARIES]
-Options:
- [--prefix[=DIR]]
- [--exec-prefix[=DIR]]
- [--version]
- [--libs]
- [--cflags]
-Libraries:
- gimpprint
-EOF
- exit $1
-}
-
-if test $# -eq 0; then
- usage 1 1>&2
-fi
-
-lib_gimpprint=yes
-
-while test $# -gt 0; do
- case "$1" in
- -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
-
- case $1 in
- --prefix=*)
- prefix=$optarg
- if test $exec_prefix_set = no ; then
- exec_prefix=$optarg
- fi
- ;;
- --prefix)
- echo_prefix=yes
- ;;
- --exec-prefix=*)
- exec_prefix=$optarg
- exec_prefix_set=yes
- ;;
- --exec-prefix)
- echo_exec_prefix=yes
- ;;
- --version)
- echo @GIMPPRINT_MAJOR_VERSION@.@GIMPPRINT_MINOR_VERSION@.@GIMPPRINT_MICRO_VERSION@
- ;;
- --cflags)
- echo_cflags=yes
- ;;
- --libs)
- echo_libs=yes
- ;;
- gimpprint)
- lib_gimpprint=yes
- ;;
- *)
- usage 1 1>&2
- ;;
- esac
- shift
-done
-
-if test "$echo_prefix" = "yes"; then
- echo $prefix
-fi
-
-if test "$echo_exec_prefix" = "yes"; then
- echo $exec_prefix
-fi
-
-if test "$echo_cflags" = "yes"; then
- if test @includedir@ != /usr/include ; then
- includes=-I@includedir@
- fi
- echo $includes $gimpprint_cflags
-fi
-
-if test "$echo_libs" = "yes"; then
- libdirs=-L@libdir@
- echo $libdirs $gimpprint_libs
-fi
-
diff --git a/src/main/gimpprint.m4 b/src/main/gimpprint.m4
deleted file mode 100644
index 0da0030..0000000
--- a/src/main/gimpprint.m4
+++ /dev/null
@@ -1,190 +0,0 @@
-# Configure paths for gimp-print
-# Roger Leigh -- Sat, 10 Feb 2001
-# (based on gimpprint.m4 by Owen Taylor 97-11-3)
-
-dnl AM_PATH_GIMPPRINT([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
-dnl Test for GIMP-PRINT, and define GIMPPRINT_CFLAGS and GIMPPRINT_LIBS
-dnl
-AC_DEFUN([AM_PATH_GIMPPRINT],
-[dnl
-dnl Get the cflags and libraries from the gimpprint-config script
-dnl
-AC_ARG_WITH(gimpprint-prefix,[ --with-gimpprint-prefix=PFX Prefix where GIMP-PRINT is installed (optional)],
- gimpprint_config_prefix="$withval", gimpprint_config_prefix="")
-AC_ARG_WITH(gimpprint-exec-prefix,[ --with-gimpprint-exec-prefix=PFX Exec prefix where GIMP-PRINT is installed
- (optional)],
- gimpprint_config_exec_prefix="$withval", gimpprint_config_exec_prefix="")
-AC_ARG_ENABLE(gimpprinttest, [ --disable-gimpprinttest Do not try to compile and run a test GIMP-PRINT
- program],
- , enable_gimpprinttest=yes)
-
- if test x$gimpprint_config_exec_prefix != x ; then
- gimpprint_config_args="$gimpprint_config_args --exec-prefix=$gimpprint_config_exec_prefix"
- if test x${GIMPPRINT_CONFIG+set} != xset ; then
- GIMPPRINT_CONFIG=$gimpprint_config_exec_prefix/bin/gimpprint-config
- fi
- fi
- if test x$gimpprint_config_prefix != x ; then
- gimpprint_config_args="$gimpprint_config_args --prefix=$gimpprint_config_prefix"
- if test x${GIMPPRINT_CONFIG+set} != xset ; then
- GIMPPRINT_CONFIG=$gimpprint_config_prefix/bin/gimpprint-config
- fi
- fi
-
- AC_PATH_PROG(GIMPPRINT_CONFIG, gimpprint-config, no)
- min_gimpprint_version=ifelse([$1], ,4.1.4,$1)
- AC_MSG_CHECKING(for GIMP-PRINT - version >= $min_gimpprint_version)
- no_gimpprint=""
- if test "$GIMPPRINT_CONFIG" = "no" ; then
- no_gimpprint=yes
- else
- GIMPPRINT_CFLAGS=`$GIMPPRINT_CONFIG $gimpprint_config_args --cflags`
- GIMPPRINT_LIBS=`$GIMPPRINT_CONFIG $gimpprint_config_args --libs`
- gimpprint_config_major_version=`$GIMPPRINT_CONFIG $gimpprint_config_args --version | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
- gimpprint_config_minor_version=`$GIMPPRINT_CONFIG $gimpprint_config_args --version | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
- gimpprint_config_micro_version=`$GIMPPRINT_CONFIG $gimpprint_config_args --version | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
- if test "x$enable_gimpprinttest" = "xyes" ; then
- ac_save_CFLAGS="$CFLAGS"
- ac_save_LIBS="$LIBS"
- CFLAGS="$CFLAGS $GIMPPRINT_CFLAGS"
- LIBS="$GIMPPRINT_LIBS $LIBS"
-dnl
-dnl Now check if the installed GIMP-PRINT is sufficiently new. (Also sanity
-dnl checks the results of gimpprint-config to some extent
-dnl
- rm -f conf.gimpprinttest
- AC_TRY_RUN([
-#include <gimp-print/gimp-print.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-int
-main ()
-{
- int major, minor, micro;
- char *tmp_version;
-
- system ("touch conf.gimpprinttest");
-
- /* HP/UX 9 (%@#!) writes to sscanf strings */
- tmp_version = strdup("$min_gimpprint_version");
- if (!tmp_version) {
- exit(1);
- }
- if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
- printf("%s, bad version string\n", "$min_gimpprint_version");
- exit(1);
- }
-
- if ((gimpprint_major_version != $gimpprint_config_major_version) ||
- (gimpprint_minor_version != $gimpprint_config_minor_version) ||
- (gimpprint_micro_version != $gimpprint_config_micro_version))
- {
- printf("\n*** 'gimpprint-config --version' returned %d.%d.%d, but GIMP-PRINT (%d.%d.%d)\n",
- $gimpprint_config_major_version, $gimpprint_config_minor_version, $gimpprint_config_micro_version,
- gimpprint_major_version, gimpprint_minor_version, gimpprint_micro_version);
- printf ("*** was found! If gimpprint-config was correct, then it is best\n");
- printf ("*** to remove the old version of GIMP-PRINT. You may also be able to fix the\n");
- printf("*** error by modifying your LD_LIBRARY_PATH enviroment variable, or by\n");
- printf("*** editing /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
- printf("*** required on your system.\n");
- printf("*** If gimpprint-config was wrong, set the environment variable GIMPPRINT_CONFIG\n");
- printf("*** to point to the correct copy of gimpprint-config, and remove the file\n");
- printf("*** config.cache before re-running configure\n");
- }
-#if defined (GIMPPRINT_MAJOR_VERSION) && defined (GIMPPRINT_MINOR_VERSION) && defined (GIMPPRINT_MICRO_VERSION)
- else if ((gimpprint_major_version != GIMPPRINT_MAJOR_VERSION) ||
- (gimpprint_minor_version != GIMPPRINT_MINOR_VERSION) ||
- (gimpprint_micro_version != GIMPPRINT_MICRO_VERSION))
- {
- printf("\n*** GIMP-PRINT header files (version %d.%d.%d) do not match\n",
- GIMPPRINT_MAJOR_VERSION, GIMPPRINT_MINOR_VERSION, GIMPPRINT_MICRO_VERSION);
- printf("*** library (version %d.%d.%d)\n",
- gimpprint_major_version, gimpprint_minor_version, gimpprint_micro_version);
- }
-#endif /* defined (GIMPPRINT_MAJOR_VERSION) ... */
- else
- {
- if ((gimpprint_major_version > major) ||
- ((gimpprint_major_version == major) && (gimpprint_minor_version > minor)) ||
- ((gimpprint_major_version == major) && (gimpprint_minor_version == minor) && (gimpprint_micro_version >= micro)))
- {
- return 0;
- }
- else
- {
- printf("\n*** An old version of GIMP-PRINT (%d.%d.%d) was found.\n",
- gimpprint_major_version, gimpprint_minor_version, gimpprint_micro_version);
- printf("*** You need a version of GIMP-PRINT newer than %d.%d.%d. The latest version of\n",
- major, minor, micro);
- printf("*** GIMP-PRINT is always available from\n");
- printf("*** http://sourceforge.net/project/showfiles.php?group_id=1537.\n");
- printf("***\n");
- printf("*** If you have already installed a sufficiently new version, this error\n");
- printf("*** probably means that the wrong copy of the gimpprint-config shell script is\n");
- printf("*** being found. The easiest way to fix this is to remove the old version\n");
- printf("*** of GIMP-PRINT, but you can also set the GIMPPRINT_CONFIG environment to\n");
- printf("*** point to the correct copy of gimpprint-config. (In this case, you will have\n");
- printf("*** to modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
- printf("*** so that the correct libraries are found at run-time))\n");
- }
- }
- return 1;
-}
-],, no_gimpprint=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
- CFLAGS="$ac_save_CFLAGS"
- LIBS="$ac_save_LIBS"
- fi
- fi
- if test "x$no_gimpprint" = x ; then
- AC_MSG_RESULT(yes)
- ifelse([$2], , :, [$2])
- else
- AC_MSG_RESULT(no)
- if test "$GIMPPRINT_CONFIG" = "no" ; then
- echo "*** The gimpprint-config script installed by GIMP-PRINT could not be found"
- echo "*** If GIMP-PRINT was installed in PREFIX, make sure PREFIX/bin is in"
- echo "*** your path, or set the GIMPPRINT_CONFIG environment variable to the"
- echo "*** full path to gimpprint-config."
- else
- if test -f conf.gimpprinttest ; then
- :
- else
- echo "*** Could not run GIMP-PRINT test program, checking why..."
- CFLAGS="$CFLAGS $GIMPPRINT_CFLAGS"
- LIBS="$LIBS $GIMPPRINT_LIBS"
- AC_TRY_LINK([
-#include <gimp-print/gimp-print.h>
-#include <stdio.h>
-#include <string.h>
-], [ return ((gimpprint_major_version) || (gimpprint_minor_version) || (gimpprint_micro_version)); ],
- [ echo "*** The test program compiled, but did not run. This usually means"
- echo "*** that the run-time linker is not finding GIMP-PRINT or finding the wrong"
- echo "*** version of GIMP-PRINT. If it is not finding GIMP-PRINT, you'll need to set"
- echo "*** your LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
- echo "*** to the installed location Also, make sure you have run ldconfig if that"
- echo "*** is required on your system"
- echo "***"
- echo "*** If you have an old version installed, it is best to remove it, although"
- echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
- [ echo "*** The test program failed to compile or link. See the file config.log for the"
- echo "*** exact error that occured. This usually means GIMP-PRINT was incorrectly"
- echo "*** installed or that you have moved GIMP-PRINT since it was installed. In the"
- echo "*** latter case, you may want to edit the gimpprint-config script:"
- echo "*** $GIMPPRINT_CONFIG" ])
- CFLAGS="$ac_save_CFLAGS"
- LIBS="$ac_save_LIBS"
- fi
- fi
- GIMPPRINT_CFLAGS=""
- GIMPPRINT_LIBS=""
- ifelse([$3], , :, [$3])
- fi
- AC_SUBST(GIMPPRINT_CFLAGS)
- AC_SUBST(GIMPPRINT_LIBS)
- rm -f conf.gimpprinttest
-])
diff --git a/src/main/gutenprint-internal.h b/src/main/gutenprint-internal.h
new file mode 100644
index 0000000..32d1ae1
--- /dev/null
+++ b/src/main/gutenprint-internal.h
@@ -0,0 +1,56 @@
+/*
+ * "$Id: gutenprint-internal.h,v 1.1 2004/09/17 18:38:21 rleigh Exp $"
+ *
+ * Print plug-in header file for the GIMP.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Revision History:
+ *
+ * See ChangeLog
+ */
+
+/*
+ * This file must include only standard C header files. The core code must
+ * compile on generic platforms that don't support glib, gimp, gtk, etc.
+ */
+
+#ifndef GUTENPRINT_INTERNAL_INTERNAL_H
+#define GUTENPRINT_INTERNAL_INTERNAL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gutenprint/gutenprint-module.h>
+
+#include "util.h"
+
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* GUTENPRINT_INTERNAL_INTERNAL_H */
+/*
+ * End of "$Id: gutenprint-internal.h,v 1.1 2004/09/17 18:38:21 rleigh Exp $".
+ */
diff --git a/src/main/gutenprint.pc.in b/src/main/gutenprint.pc.in
new file mode 100644
index 0000000..0f82a63
--- /dev/null
+++ b/src/main/gutenprint.pc.in
@@ -0,0 +1,10 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Gutenprint
+Description: Gutenprint Top Quality Printer Drivers
+Version: @gutenprint_version@
+Libs: -L${libdir} @gutenprint_libs@
+Cflags: -I${includedir} @gutenprint_cflags@
diff --git a/src/main/image.c b/src/main/image.c
new file mode 100644
index 0000000..9149319
--- /dev/null
+++ b/src/main/image.c
@@ -0,0 +1,77 @@
+/*
+ * "$Id: image.c,v 1.6 2004/09/17 18:38:21 rleigh Exp $"
+ *
+ * Print plug-in driver utility functions for the GIMP.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+
+void
+stp_image_init(stp_image_t *image)
+{
+ if (image->init)
+ image->init(image);
+}
+
+void
+stp_image_reset(stp_image_t *image)
+{
+ if (image->reset)
+ image->reset(image);
+}
+
+int
+stp_image_width(stp_image_t *image)
+{
+ return image->width(image);
+}
+
+int
+stp_image_height(stp_image_t *image)
+{
+ return image->height(image);
+}
+
+stp_image_status_t
+stp_image_get_row(stp_image_t *image, unsigned char *data,
+ size_t byte_limit, int row)
+{
+ return image->get_row(image, data, byte_limit, row);
+}
+
+const char *
+stp_image_get_appname(stp_image_t *image)
+{
+ if (image->get_appname)
+ return image->get_appname(image);
+ else
+ return NULL;
+}
+
+void
+stp_image_conclude(stp_image_t *image)
+{
+ if (image->conclude)
+ image->conclude(image);
+}
diff --git a/src/main/libgutenprint.sym b/src/main/libgutenprint.sym
new file mode 100644
index 0000000..702349a
--- /dev/null
+++ b/src/main/libgutenprint.sym
@@ -0,0 +1,440 @@
+stp_abort
+stp_allocate_component_data
+stp_array_copy
+stp_array_create
+stp_array_create_copy
+stp_array_create_from_xmltree
+stp_array_destroy
+stp_array_get_data
+stp_array_get_point
+stp_array_get_sequence
+stp_array_get_size
+stp_array_set_data
+stp_array_set_point
+stp_array_set_size
+stp_asprintf
+stp_catprintf
+stp_channel_add
+stp_channel_convert
+stp_channel_get_input
+stp_channel_get_output
+stp_channel_initialize
+stp_channel_reset
+stp_channel_reset_channel
+stp_channel_set_black_channel
+stp_channel_set_cutoff_adjustment
+stp_channel_set_density_adjustment
+stp_channel_set_ink_limit
+stp_check_array_parameter
+stp_check_boolean_parameter
+stp_check_curve_parameter
+stp_check_file_parameter
+stp_check_float_parameter
+stp_check_int_parameter
+stp_check_raw_parameter
+stp_check_string_parameter
+stp_check_version
+stp_clear_array_parameter
+stp_clear_boolean_parameter
+stp_clear_curve_parameter
+stp_clear_file_parameter
+stp_clear_float_parameter
+stp_clear_int_parameter
+stp_clear_raw_parameter
+stp_clear_string_parameter
+stp_color_count
+stp_color_describe_parameter
+stp_color_get_long_name
+stp_color_get_name
+stp_color_get_row
+stp_color_init
+stp_color_list_parameters
+stp_color_register
+stp_color_unregister
+stp_compute_tiff_linewidth
+stp_compute_uncompressed_linewidth
+stp_curve_cache_copy
+stp_curve_cache_curve_data
+stp_curve_cache_curve_invalidate
+stp_curve_cache_get_count
+stp_curve_cache_get_curve
+stp_curve_cache_get_double_data
+stp_curve_cache_get_ushort_data
+stp_curve_cache_set_curve
+stp_curve_cache_set_curve_copy
+stp_curve_compose
+stp_curve_copy
+stp_curve_count_points
+stp_curve_create
+stp_curve_create_copy
+stp_curve_create_from_file
+stp_curve_create_from_stream
+stp_curve_create_from_string
+stp_curve_create_from_xmltree
+stp_curve_destroy
+stp_curve_free_curve_cache
+stp_curve_get_bounds
+stp_curve_get_data
+stp_curve_get_data_points
+stp_curve_get_float_data
+stp_curve_get_gamma
+stp_curve_get_int_data
+stp_curve_get_interpolation_type
+stp_curve_get_long_data
+stp_curve_get_point
+stp_curve_get_range
+stp_curve_get_sequence
+stp_curve_get_short_data
+stp_curve_get_subrange
+stp_curve_get_uint_data
+stp_curve_get_ulong_data
+stp_curve_get_ushort_data
+stp_curve_get_wrap
+stp_curve_interpolate_value
+stp_curve_is_piecewise
+stp_curve_resample
+stp_curve_rescale
+stp_curve_set_bounds
+stp_curve_set_data
+stp_curve_set_data_points
+stp_curve_set_float_data
+stp_curve_set_gamma
+stp_curve_set_int_data
+stp_curve_set_interpolation_type
+stp_curve_set_long_data
+stp_curve_set_point
+stp_curve_set_short_data
+stp_curve_set_subrange
+stp_curve_set_uint_data
+stp_curve_set_ulong_data
+stp_curve_set_ushort_data
+stp_curve_write
+stp_curve_write_string
+stp_default_media_size
+stp_default_settings
+stp_deprintf
+stp_describe_output
+stp_describe_parameter
+stp_describe_resolution
+stp_destroy_component_data
+stp_dither
+stp_dither_add_channel
+stp_dither_describe_parameter
+stp_dither_get_channel
+stp_dither_get_first_position
+stp_dither_get_last_position
+stp_dither_init
+stp_dither_internal
+stp_dither_list_parameters
+stp_dither_matrix_clone
+stp_dither_matrix_copy
+stp_dither_matrix_destroy
+stp_dither_matrix_init
+stp_dither_matrix_init_from_dither_array
+stp_dither_matrix_init_short
+stp_dither_matrix_iterated_init
+stp_dither_matrix_scale_exponentially
+stp_dither_matrix_set_row
+stp_dither_matrix_shear
+stp_dither_matrix_validate_array
+stp_dither_set_adaptive_limit
+stp_dither_set_ink_spread
+stp_dither_set_inks
+stp_dither_set_inks_full
+stp_dither_set_inks_simple
+stp_dither_set_iterated_matrix
+stp_dither_set_matrix
+stp_dither_set_matrix_from_dither_array
+stp_dither_set_randomizer
+stp_dither_set_transition
+stp_dprintf
+stp_end_job
+stp_eprintf
+stp_erprintf
+stp_erputc
+stp_family_register
+stp_family_unregister
+stp_fill_parameter_settings
+stp_fill_tiff
+stp_fill_uncompressed
+stp_find_standard_dither_array
+stp_flush_all
+stp_flush_debug_messages
+stp_fold
+stp_free
+stp_get_array_parameter
+stp_get_array_parameter_active
+stp_get_boolean_parameter
+stp_get_boolean_parameter_active
+stp_get_color_by_colorfuncs
+stp_get_color_by_index
+stp_get_color_by_name
+stp_get_color_conversion
+stp_get_component_data
+stp_get_curve_parameter
+stp_get_curve_parameter_active
+stp_get_debug_level
+stp_get_driver
+stp_get_errdata
+stp_get_errfunc
+stp_get_file_parameter
+stp_get_file_parameter_active
+stp_get_float_parameter
+stp_get_float_parameter_active
+stp_get_height
+stp_get_imageable_area
+stp_get_int_parameter
+stp_get_int_parameter_active
+stp_get_left
+stp_get_lineactive_by_pass
+stp_get_linebases_by_pass
+stp_get_linecount_by_pass
+stp_get_lineoffsets_by_pass
+stp_get_media_size
+stp_get_model_id
+stp_get_outdata
+stp_get_outfunc
+stp_get_page_height
+stp_get_page_width
+stp_get_papersize_by_index
+stp_get_papersize_by_name
+stp_get_papersize_by_size
+stp_get_parameter_list
+stp_get_pass_by_pass
+stp_get_printer
+stp_get_printer_by_driver
+stp_get_printer_by_index
+stp_get_printer_by_long_name
+stp_get_printer_index_by_driver
+stp_get_raw_parameter
+stp_get_raw_parameter_active
+stp_get_size_limit
+stp_get_string_parameter
+stp_get_string_parameter_active
+stp_get_top
+stp_get_verified
+stp_get_width
+stp_image_conclude
+stp_image_get_appname
+stp_image_get_row
+stp_image_height
+stp_image_init
+stp_image_reset
+stp_image_width
+stp_init
+stp_init_debug_messages
+stp_initialize_printer_defaults
+stp_initialize_weave
+stp_known_papersizes
+stp_list_copy
+stp_list_create
+stp_list_destroy
+stp_list_generic_parameters
+stp_list_get_copyfunc
+stp_list_get_end
+stp_list_get_freefunc
+stp_list_get_item_by_index
+stp_list_get_item_by_long_name
+stp_list_get_item_by_name
+stp_list_get_length
+stp_list_get_long_namefunc
+stp_list_get_namefunc
+stp_list_get_sortfunc
+stp_list_get_start
+stp_list_item_create
+stp_list_item_destroy
+stp_list_item_get_data
+stp_list_item_next
+stp_list_item_prev
+stp_list_item_set_data
+stp_list_node_free_data
+stp_list_set_copyfunc
+stp_list_set_freefunc
+stp_list_set_long_namefunc
+stp_list_set_namefunc
+stp_list_set_sortfunc
+stp_malloc
+stp_malloc_func
+stp_merge_printvars
+stp_module_close
+stp_module_exit
+stp_module_get_class
+stp_module_init
+stp_module_load
+stp_module_open
+stp_mxmlAdd
+stp_mxmlDelete
+stp_mxmlElementGetAttr
+stp_mxmlElementSetAttr
+stp_mxmlFindElement
+stp_mxmlLoadFile
+stp_mxmlLoadString
+stp_mxmlNewElement
+stp_mxmlNewInteger
+stp_mxmlNewOpaque
+stp_mxmlNewReal
+stp_mxmlNewText
+stp_mxmlRemove
+stp_mxmlSaveAllocString
+stp_mxmlSaveFile
+stp_mxmlSaveString
+stp_mxmlWalkNext
+stp_mxmlWalkPrev
+stp_pack_tiff
+stp_pack_uncompressed
+stp_parameter_description_destroy
+stp_parameter_find
+stp_parameter_find_in_settings
+stp_parameter_list_add_param
+stp_parameter_list_append
+stp_parameter_list_copy
+stp_parameter_list_count
+stp_parameter_list_create
+stp_parameter_list_destroy
+stp_parameter_list_param
+stp_path_search
+stp_path_split
+stp_print
+stp_printer_describe_parameter
+stp_printer_get_defaults
+stp_printer_get_driver
+stp_printer_get_family
+stp_printer_get_long_name
+stp_printer_get_manufacturer
+stp_printer_get_model
+stp_printer_list_parameters
+stp_printer_model_count
+stp_prune_inactive_options
+stp_put16_be
+stp_put16_le
+stp_put32_be
+stp_put32_le
+stp_putc
+stp_puts
+stp_read_and_compose_curves
+stp_realloc
+stp_register_xml_parser
+stp_register_xml_preload
+stp_scale_float_parameter
+stp_send_command
+stp_sequence_copy
+stp_sequence_create
+stp_sequence_create_copy
+stp_sequence_create_from_xmltree
+stp_sequence_destroy
+stp_sequence_get_bounds
+stp_sequence_get_data
+stp_sequence_get_float_data
+stp_sequence_get_int_data
+stp_sequence_get_long_data
+stp_sequence_get_point
+stp_sequence_get_range
+stp_sequence_get_short_data
+stp_sequence_get_size
+stp_sequence_get_uint_data
+stp_sequence_get_ulong_data
+stp_sequence_get_ushort_data
+stp_sequence_set_bounds
+stp_sequence_set_data
+stp_sequence_set_float_data
+stp_sequence_set_int_data
+stp_sequence_set_long_data
+stp_sequence_set_point
+stp_sequence_set_short_data
+stp_sequence_set_size
+stp_sequence_set_subrange
+stp_sequence_set_uint_data
+stp_sequence_set_ulong_data
+stp_sequence_set_ushort_data
+stp_set_array_parameter
+stp_set_array_parameter_active
+stp_set_boolean_parameter
+stp_set_boolean_parameter_active
+stp_set_color_conversion
+stp_set_color_conversion_n
+stp_set_curve_parameter
+stp_set_curve_parameter_active
+stp_set_default_array_parameter
+stp_set_default_boolean_parameter
+stp_set_default_curve_parameter
+stp_set_default_file_parameter
+stp_set_default_file_parameter_n
+stp_set_default_float_parameter
+stp_set_default_int_parameter
+stp_set_default_raw_parameter
+stp_set_default_string_parameter
+stp_set_default_string_parameter_n
+stp_set_driver
+stp_set_driver_n
+stp_set_errdata
+stp_set_errfunc
+stp_set_file_parameter
+stp_set_file_parameter_active
+stp_set_file_parameter_n
+stp_set_float_parameter
+stp_set_float_parameter_active
+stp_set_height
+stp_set_int_parameter
+stp_set_int_parameter_active
+stp_set_left
+stp_set_outdata
+stp_set_outfunc
+stp_set_output_codeset
+stp_set_page_height
+stp_set_page_width
+stp_set_printer_defaults
+stp_set_raw_parameter
+stp_set_raw_parameter_active
+stp_set_string_parameter
+stp_set_string_parameter_active
+stp_set_string_parameter_n
+stp_set_top
+stp_set_verified
+stp_set_width
+stp_split_2
+stp_split_4
+stp_start_job
+stp_strdup
+stp_string_list_add_string
+stp_string_list_count
+stp_string_list_create
+stp_string_list_create_copy
+stp_string_list_create_from_params
+stp_string_list_destroy
+stp_string_list_find
+stp_string_list_is_present
+stp_string_list_param
+stp_string_list_remove_string
+stp_strlen
+stp_strndup
+stp_unpack_2
+stp_unpack_4
+stp_unpack_8
+stp_unregister_xml_parser
+stp_unregister_xml_preload
+stp_vars_copy
+stp_vars_create
+stp_vars_create_copy
+stp_vars_destroy
+stp_verify
+stp_verify_parameter
+stp_verify_printer_params
+stp_weave_parameters_by_row
+stp_write_weave
+stp_xml_exit
+stp_xml_get_node
+stp_xml_init
+stp_xml_init_defaults
+stp_xml_parse_file
+stp_xml_parse_file_named
+stp_xml_preinit
+stp_xmldoc_create_generic
+stp_xmlstrtod
+stp_xmlstrtol
+stp_xmlstrtoul
+stp_xmltree_create_from_array
+stp_xmltree_create_from_curve
+stp_xmltree_create_from_sequence
+stp_zalloc
+stp_zfwrite
+stp_zprintf
diff --git a/src/main/module.c b/src/main/module.c
new file mode 100644
index 0000000..f2fdfe6
--- /dev/null
+++ b/src/main/module.c
@@ -0,0 +1,415 @@
+/*
+ * "$Id: module.c,v 1.25 2004/09/17 18:38:21 rleigh Exp $"
+ *
+ * Gutenprint module loader - load modules with libltdl/libdl.
+ *
+ * Copyright 2002 Roger Leigh (rleigh@debian.org)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libgen.h>
+#include <errno.h>
+#include <unistd.h>
+
+
+typedef struct stpi_internal_module_class
+{
+ stp_module_class_t class;
+ const char *description;
+} stpi_internal_module_class_t;
+
+
+static void module_list_freefunc(void *item);
+static int stp_module_register(stp_module_t *module);
+#ifdef USE_DLOPEN
+static void *stp_dlsym(void *handle, const char *symbol, const char *modulename);
+#endif
+
+static const stpi_internal_module_class_t module_classes[] =
+ {
+ {STP_MODULE_CLASS_MISC, N_("Miscellaneous (unclassified)")},
+ {STP_MODULE_CLASS_FAMILY, N_("Family driver")},
+ {STP_MODULE_CLASS_COLOR, N_("Color conversion module")},
+ {STP_MODULE_CLASS_DITHER, N_("Dither algorithm")},
+ {STP_MODULE_CLASS_INVALID, NULL} /* Must be last */
+ };
+
+#if !defined(USE_LTDL) && !defined(USE_DLOPEN)
+extern stp_module_t print_canon_LTX_stp_module_data;
+extern stp_module_t print_escp2_LTX_stp_module_data;
+extern stp_module_t print_lexmark_LTX_stp_module_data;
+extern stp_module_t print_pcl_LTX_stp_module_data;
+extern stp_module_t print_ps_LTX_stp_module_data;
+extern stp_module_t print_olympus_LTX_stp_module_data;
+extern stp_module_t print_raw_LTX_stp_module_data;
+extern stp_module_t color_traditional_LTX_stp_module_data;
+
+/*
+ * A list of modules, for use when the modules are linked statically.
+ */
+static stp_module_t *static_modules[] =
+ {
+ &print_ps_LTX_stp_module_data,
+ &print_canon_LTX_stp_module_data,
+ &print_escp2_LTX_stp_module_data,
+ &print_pcl_LTX_stp_module_data,
+ &print_lexmark_LTX_stp_module_data,
+ &print_olympus_LTX_stp_module_data,
+ &print_raw_LTX_stp_module_data,
+ &color_traditional_LTX_stp_module_data,
+ NULL
+ };
+#endif
+
+static stp_list_t *module_list = NULL;
+
+
+/*
+ * Callback for removing a module from stp_module_list.
+ */
+static void
+module_list_freefunc(void *item /* module to remove */)
+{
+ stp_module_t *module = (stp_module_t *) item;
+ if (module && module->fini) /* Call the module exit function */
+ module->fini();
+#if defined(USE_LTDL) || defined(USE_DLOPEN)
+ DLCLOSE(module->handle); /* Close the module if it's not static */
+#endif
+}
+
+
+/*
+ * Load all available modules. Return nonzero on failure.
+ */
+int stp_module_load(void)
+{
+ /* initialise libltdl */
+#ifdef USE_LTDL
+ static int ltdl_is_initialised = 0; /* Is libltdl initialised? */
+#endif
+ static int module_list_is_initialised = 0; /* Is the module list initialised? */
+#if defined(USE_LTDL) || defined(USE_DLOPEN)
+ stp_list_t *dir_list; /* List of directories to scan */
+ stp_list_t *file_list; /* List of modules to open */
+ stp_list_item_t *file; /* Pointer to current module */
+#endif
+
+#ifdef USE_LTDL
+ if (!ltdl_is_initialised)
+ {
+ if (lt_dlinit())
+ {
+ stp_erprintf("Error initialising libltdl: %s\n", DLERROR());
+ return 1;
+ }
+ ltdl_is_initialised = 1;
+ }
+ /* set default search paths */
+ lt_dladdsearchdir(PKGMODULEDIR);
+#endif
+
+ /* initialise module_list */
+ if (!module_list_is_initialised)
+ {
+ if (!(module_list = stp_list_create()))
+ return 1;
+ stp_list_set_freefunc(module_list, module_list_freefunc);
+ module_list_is_initialised = 1;
+ }
+
+ /* search for available modules */
+#if defined (USE_LTDL) || defined (USE_DLOPEN)
+ if (!(dir_list = stp_list_create()))
+ return 1;
+ stp_list_set_freefunc(dir_list, stp_list_node_free_data);
+ if (getenv("STP_MODULE_PATH"))
+ {
+ stp_path_split(dir_list, getenv("STP_MODULE_PATH"));
+ }
+ else
+ {
+#ifdef USE_LTDL
+ stp_path_split(dir_list, getenv("LTDL_LIBRARY_PATH"));
+ stp_path_split(dir_list, lt_dlgetsearchpath());
+#else
+ stp_path_split(dir_list, PKGMODULEDIR);
+#endif
+ }
+#ifdef USE_LTDL
+ file_list = stp_path_search(dir_list, ".la");
+#else
+ file_list = stp_path_search(dir_list, ".so");
+#endif
+ stp_list_destroy(dir_list);
+
+ /* load modules */
+ file = stp_list_get_start(file_list);
+ while (file)
+ {
+ stp_module_open((const char *) stp_list_item_get_data(file));
+ file = stp_list_item_next(file);
+ }
+
+ stp_list_destroy(file_list);
+#else /* use a static module list */
+ {
+ int i=0;
+ while (static_modules[i])
+ {
+ stp_module_register(static_modules[i]);
+ i++;
+ }
+ }
+#endif
+ return 0;
+ }
+
+
+/*
+ * Unload all modules and clean up.
+ */
+int
+stp_module_exit(void)
+{
+ /* destroy the module list (modules unloaded by callback) */
+ if (module_list)
+ stp_list_destroy(module_list);
+ /* shut down libltdl (forces close of any unclosed modules) */
+#ifdef USE_LTDL
+ return lt_dlexit();
+#else
+ return 0;
+#endif
+}
+
+
+/*
+ * Find all modules in a given class.
+ */
+stp_list_t *
+stp_module_get_class(stp_module_class_t class /* Module class */)
+{
+ stp_list_t *list; /* List to return */
+ stp_list_item_t *ln; /* Module to check*/
+
+ list = stp_list_create(); /* No freefunc, so it can be destroyed
+ without unloading any modules! */
+ if (!list)
+ return NULL;
+
+ ln = stp_list_get_start(module_list);
+ while (ln)
+ {
+ /* Add modules of the same class to our list */
+ if (((stp_module_t *) stp_list_item_get_data(ln))->class == class)
+ stp_list_item_create(list, NULL, stp_list_item_get_data(ln));
+ ln = stp_list_item_next(ln);
+ }
+ return list;
+}
+
+
+/*
+ * Open a module.
+ */
+int
+stp_module_open(const char *modulename /* Module filename */)
+{
+#if defined(USE_LTDL) || defined(USE_DLOPEN)
+#ifdef USE_LTDL
+ lt_dlhandle module; /* Handle for module */
+#else
+ void *module; /* Handle for module */
+#endif
+ stp_module_version_t *version; /* Module version */
+ stp_module_t *data; /* Module data */
+ stp_list_item_t *reg_module; /* Pointer to module list nodes */
+ int error = 0; /* Error status */
+
+ stp_deprintf(STP_DBG_MODULE, "stp-module: open: %s\n", modulename);
+ while(1)
+ {
+ module = DLOPEN(modulename);
+ if (!module)
+ break;
+
+ /* check version is valid */
+ version = (stp_module_version_t *) DLSYM(module, "stp_module_version");
+ if (!version)
+ break;
+ if (version->major != 1 && version->minor < 0)
+ break;
+
+ data = (void *) DLSYM(module, "stp_module_data");
+ if (!data)
+ break;
+ data->handle = module; /* store module handle */
+
+ /* check same module isn't already loaded */
+ reg_module = stp_list_get_start(module_list);
+ while (reg_module)
+ {
+ if (!strcmp(data->name, ((stp_module_t *)
+ stp_list_item_get_data(reg_module))->name) &&
+ data->class == ((stp_module_t *)
+ stp_list_item_get_data(reg_module))->class)
+ {
+ stp_deprintf(STP_DBG_MODULE,
+ "stp-module: reject duplicate: %s\n",
+ data->name);
+ error = 1;
+ break;
+ }
+ reg_module = stp_list_item_next(reg_module);
+ }
+ if (error)
+ break;
+
+ /* Register the module */
+ if (stp_module_register(data))
+ break;
+
+ return 0;
+ }
+
+ if (module)
+ DLCLOSE(module);
+#endif
+ return 1;
+}
+
+
+/*
+ * Register a loaded module.
+ */
+static int stp_module_register(stp_module_t *module /* Module to register */)
+{
+ /* Add to the module list */
+ if (stp_list_item_create(module_list, NULL, module))
+ return 1;
+
+ stp_deprintf(STP_DBG_MODULE, "stp-module: register: %s\n", module->name);
+ return 0;
+}
+
+
+/*
+ * Initialise all loaded modules
+ */
+int stp_module_init(void)
+{
+ stp_list_item_t *module_item; /* Module list pointer */
+ stp_module_t *module; /* Module to initialise */
+
+ module_item = stp_list_get_start(module_list);
+ while (module_item)
+ {
+ module = (stp_module_t *) stp_list_item_get_data(module_item);
+ if (module)
+ {
+ stp_deprintf(STP_DBG_MODULE, "stp-module-init: %s\n", module->name);
+ /* Initialise module */
+ if (module->init && module->init())
+ {
+ stp_deprintf(STP_DBG_MODULE,
+ "stp-module-init: %s: Module init failed\n",
+ module->name);
+ }
+ }
+ module_item = stp_list_item_next(module_item);
+ }
+ return 0;
+}
+
+
+
+/*
+ * Close a module.
+ */
+int
+stp_module_close(stp_list_item_t *module /* Module to close */)
+{
+ return stp_list_item_destroy(module_list, module);
+}
+
+
+/*
+ * If using dlopen, add modulename_LTX_ to symbol name
+ */
+#ifdef USE_DLOPEN
+static void *stp_dlsym(void *handle, /* Module */
+ const char *symbol, /* Symbol name */
+ const char *modulename) /* Module name */
+{
+ int len; /* Length of string */
+ static char *full_symbol = NULL; /* Symbol to return */
+ char *module; /* Real module name */
+ char *tmp = stp_strdup(modulename); /* Temporary string */
+
+ module = basename(tmp);
+
+ if (full_symbol)
+ {
+ stp_free (full_symbol);
+ full_symbol = NULL;
+ }
+
+ full_symbol = (char *) stp_malloc(sizeof(char) * (strlen(module) - 2));
+
+ /* "_LTX_" + '\0' - ".so" */
+ len = strlen(symbol) + strlen(module) + 3;
+ full_symbol = (char *) stp_malloc(sizeof(char) * len);
+
+ len = 0;
+ strncpy (full_symbol, module, strlen(module) - 3);
+ len = strlen(module) - 3;
+ strcpy (full_symbol+len, "_LTX_");
+ len += 5;
+ strcpy (full_symbol+len, symbol);
+ len += strlen(symbol);
+ full_symbol[len] = '\0';
+
+#if defined(__OpenBSD__)
+/* OpenBSD needs a prepended underscore to match symbols */
+ {
+ char *prefix_symbol = stp_malloc(sizeof(char) * (strlen(full_symbol) + 2));
+ prefix_symbol[0] = '_';
+ strcpy(prefix_symbol+1, full_symbol);
+ stp_free(full_symbol);
+ full_symbol = prefix_symbol;
+ }
+#endif
+
+ /* Change any hyphens to underscores */
+ for (len = 0; full_symbol[len] != '\0'; len++)
+ if (full_symbol[len] == '-')
+ full_symbol[len] = '_';
+
+ stp_deprintf(STP_DBG_MODULE, "SYMBOL: %s\n", full_symbol);
+
+ return dlsym(handle, full_symbol);
+}
+#endif
diff --git a/src/main/mxml-attr.c b/src/main/mxml-attr.c
new file mode 100644
index 0000000..2087d85
--- /dev/null
+++ b/src/main/mxml-attr.c
@@ -0,0 +1,160 @@
+/*
+ * "$Id: mxml-attr.c,v 1.7 2004/09/17 18:38:21 rleigh Exp $"
+ *
+ * Attribute support code for mini-XML, a small XML-like file parsing library.
+ *
+ * Copyright 2003 by Michael Sweet.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * Contents:
+ *
+ * stp_mxmlElementGetAttr() - Get an attribute.
+ * stp_mxmlElementSetAttr() - Set an attribute.
+ */
+
+/*
+ * Include necessary headers...
+ */
+
+#include <gutenprint/mxml.h>
+#include "config.h"
+
+
+/*
+ * 'stp_mxmlElementGetAttr()' - Get an attribute.
+ *
+ * This function returns NULL if the node is not an element or the
+ * named attribute does not exist.
+ */
+
+const char * /* O - Attribute value or NULL */
+stp_mxmlElementGetAttr(stp_mxml_node_t *node, /* I - Element node */
+ const char *name) /* I - Name of attribute */
+{
+ int i; /* Looping var */
+ stp_mxml_attr_t *attr; /* Cirrent attribute */
+
+
+ /*
+ * Range check input...
+ */
+
+ if (!node || node->type != STP_MXML_ELEMENT || !name)
+ return (NULL);
+
+ /*
+ * Look for the attribute...
+ */
+
+ for (i = node->value.element.num_attrs, attr = node->value.element.attrs;
+ i > 0;
+ i --, attr ++)
+ if (!strcmp(attr->name, name))
+ return (attr->value);
+
+ /*
+ * Didn't find attribute, so return NULL...
+ */
+
+ return (NULL);
+}
+
+
+/*
+ * 'stp_mxmlElementSetAttr()' - Set an attribute.
+ *
+ * If the named attribute already exists, the value of the attribute
+ * is replaced by the new string value. The string value is copied
+ * into the element node. This function does nothing if the node is
+ * not an element.
+ */
+
+void
+stp_mxmlElementSetAttr(stp_mxml_node_t *node, /* I - Element node */
+ const char *name, /* I - Name of attribute */
+ const char *value) /* I - Attribute value */
+{
+ int i; /* Looping var */
+ stp_mxml_attr_t *attr; /* New attribute */
+
+
+ /*
+ * Range check input...
+ */
+
+ if (!node || node->type != STP_MXML_ELEMENT || !name || !value)
+ return;
+
+ /*
+ * Look for the attribute...
+ */
+
+ for (i = node->value.element.num_attrs, attr = node->value.element.attrs;
+ i > 0;
+ i --, attr ++)
+ if (!strcmp(attr->name, name))
+ {
+ /*
+ * Replace the attribute value and return...
+ */
+
+ free(attr->value);
+
+ attr->value = strdup(value);
+
+ return;
+ }
+
+ /*
+ * Attribute not found, so add a new one...
+ */
+
+ if (node->value.element.num_attrs == 0)
+ attr = malloc(sizeof(stp_mxml_attr_t));
+ else
+ attr = realloc(node->value.element.attrs,
+ (node->value.element.num_attrs + 1) * sizeof(stp_mxml_attr_t));
+
+ if (!attr)
+ {
+ fprintf(stderr, "Unable to allocate memory for attribute '%s' in element %s!\n",
+ name, node->value.element.name);
+ return;
+ }
+
+ node->value.element.attrs = attr;
+ attr += node->value.element.num_attrs;
+
+ attr->name = strdup(name);
+ attr->value = strdup(value);
+
+ if (!attr->name || !attr->value)
+ {
+ if (attr->name)
+ free(attr->name);
+
+ if (attr->value)
+ free(attr->value);
+
+ fprintf(stderr, "Unable to allocate memory for attribute '%s' in element %s!\n",
+ name, node->value.element.name);
+
+ return;
+ }
+
+ node->value.element.num_attrs ++;
+}
+
+
+/*
+ * End of "$Id: mxml-attr.c,v 1.7 2004/09/17 18:38:21 rleigh Exp $".
+ */
diff --git a/src/main/mxml-file.c b/src/main/mxml-file.c
new file mode 100644
index 0000000..ef676e7
--- /dev/null
+++ b/src/main/mxml-file.c
@@ -0,0 +1,1436 @@
+/*
+ * "$Id: mxml-file.c,v 1.7 2004/09/17 18:38:21 rleigh Exp $"
+ *
+ * File loading code for mini-XML, a small XML-like file parsing library.
+ *
+ * Copyright 2003 by Michael Sweet.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * Contents:
+ *
+ * stp_mxmlLoadFile() - Load a file into an XML node tree.
+ * stp_mxmlLoadString() - Load a string into an XML node tree.
+ * stp_mxmlSaveAllocString() - Save an XML node tree to an allocated string.
+ * stp_mxmlSaveFile() - Save an XML tree to a file.
+ * stp_mxmlSaveString() - Save an XML node tree to a string.
+ * mxml_add_char() - Add a character to a buffer, expanding as needed.
+ * mxml_file_getc() - Get a character from a file.
+ * mxml_load_data() - Load data into an XML node tree.
+ * mxml_parse_element() - Parse an element for any attributes...
+ * mxml_string_getc() - Get a character from a string.
+ * mxml_write_node() - Save an XML node to a file.
+ * mxml_write_string() - Write a string, escaping & and < as needed.
+ * mxml_write_ws() - Do whitespace callback...
+ */
+
+/*
+ * Include necessary headers...
+ */
+
+#include <gutenprint/mxml.h>
+#include "config.h"
+
+
+/*
+ * Local functions...
+ */
+
+static int mxml_add_char(int ch, char **ptr, char **buffer,
+ int *bufsize);
+static int mxml_file_getc(void *p);
+static int mxml_file_putc(int ch, void *p);
+static stp_mxml_node_t *mxml_load_data(stp_mxml_node_t *top, void *p,
+ stp_mxml_type_t (*cb)(stp_mxml_node_t *),
+ int (*getc_cb)(void *));
+static int mxml_parse_element(stp_mxml_node_t *node, void *p,
+ int (*getc_cb)(void *));
+static int mxml_string_getc(void *p);
+static int mxml_string_putc(int ch, void *p);
+static int mxml_write_node(stp_mxml_node_t *node, void *p,
+ int (*cb)(stp_mxml_node_t *, int),
+ int col,
+ int (*putc_cb)(int, void *));
+static int mxml_write_string(const char *s, void *p,
+ int (*putc_cb)(int, void *));
+static int mxml_write_ws(stp_mxml_node_t *node, void *p,
+ int (*cb)(stp_mxml_node_t *, int), int ws,
+ int col, int (*putc_cb)(int, void *));
+
+
+/*
+ * 'stp_mxmlLoadFile()' - Load a file into an XML node tree.
+ *
+ * The nodes in the specified file are added to the specified top node.
+ * If no top node is provided, the XML file MUST be well-formed with a
+ * single parent node like <?xml> for the entire file. The callback
+ * function returns the value type that should be used for child nodes.
+ * If STP_MXML_NO_CALLBACK is specified then all child nodes will be either
+ * STP_MXML_ELEMENT or STP_MXML_TEXT nodes.
+ */
+
+stp_mxml_node_t * /* O - First node or NULL if the file could not be read. */
+stp_mxmlLoadFile(stp_mxml_node_t *top, /* I - Top node */
+ FILE *fp, /* I - File to read from */
+ stp_mxml_type_t (*cb)(stp_mxml_node_t *))
+ /* I - Callback function or STP_MXML_NO_CALLBACK */
+{
+ return (mxml_load_data(top, fp, cb, mxml_file_getc));
+}
+
+
+/*
+ * 'stp_mxmlLoadString()' - Load a string into an XML node tree.
+ *
+ * The nodes in the specified string are added to the specified top node.
+ * If no top node is provided, the XML string MUST be well-formed with a
+ * single parent node like <?xml> for the entire string. The callback
+ * function returns the value type that should be used for child nodes.
+ * If STP_MXML_NO_CALLBACK is specified then all child nodes will be either
+ * STP_MXML_ELEMENT or STP_MXML_TEXT nodes.
+ */
+
+stp_mxml_node_t * /* O - First node or NULL if the string has errors. */
+stp_mxmlLoadString(stp_mxml_node_t *top, /* I - Top node */
+ const char *s, /* I - String to load */
+ stp_mxml_type_t (*cb)(stp_mxml_node_t *))
+ /* I - Callback function or STP_MXML_NO_CALLBACK */
+{
+ return (mxml_load_data(top, &s, cb, mxml_string_getc));
+}
+
+
+/*
+ * 'stp_mxmlSaveAllocString()' - Save an XML node tree to an allocated string.
+ *
+ * This function returns a pointer to a string containing the textual
+ * representation of the XML node tree. The string should be freed
+ * using the free() function when you are done with it. NULL is returned
+ * if the node would produce an empty string or if the string cannot be
+ * allocated.
+ */
+
+char * /* O - Allocated string or NULL */
+stp_mxmlSaveAllocString(stp_mxml_node_t *node, /* I - Node to write */
+ int (*cb)(stp_mxml_node_t *, int))
+ /* I - Whitespace callback or STP_MXML_NO_CALLBACK */
+{
+ int bytes; /* Required bytes */
+ char buffer[8192]; /* Temporary buffer */
+ char *s; /* Allocated string */
+
+
+ /*
+ * Write the node to the temporary buffer...
+ */
+
+ bytes = stp_mxmlSaveString(node, buffer, sizeof(buffer), cb);
+
+ if (bytes <= 0)
+ return (NULL);
+
+ if (bytes < (int)(sizeof(buffer) - 1))
+ {
+ /*
+ * Node fit inside the buffer, so just duplicate that string and
+ * return...
+ */
+
+ return (strdup(buffer));
+ }
+
+ /*
+ * Allocate a buffer of the required size and save the node to the
+ * new buffer...
+ */
+
+ if ((s = malloc(bytes + 1)) == NULL)
+ return (NULL);
+
+ stp_mxmlSaveString(node, s, bytes + 1, cb);
+
+ /*
+ * Return the allocated string...
+ */
+
+ return (s);
+}
+
+
+/*
+ * 'stp_mxmlSaveFile()' - Save an XML tree to a file.
+ *
+ * The callback argument specifies a function that returns a whitespace
+ * character or nul (0) before and after each element. If STP_MXML_NO_CALLBACK
+ * is specified, whitespace will only be added before STP_MXML_TEXT nodes
+ * with leading whitespace and before attribute names inside opening
+ * element tags.
+ */
+
+int /* O - 0 on success, -1 on error. */
+stp_mxmlSaveFile(stp_mxml_node_t *node, /* I - Node to write */
+ FILE *fp, /* I - File to write to */
+ int (*cb)(stp_mxml_node_t *, int))
+ /* I - Whitespace callback or STP_MXML_NO_CALLBACK */
+{
+ int col; /* Final column */
+
+
+ /*
+ * Write the node...
+ */
+
+ if ((col = mxml_write_node(node, fp, cb, 0, mxml_file_putc)) < 0)
+ return (-1);
+
+ if (col > 0)
+ if (putc('\n', fp) < 0)
+ return (-1);
+
+ /*
+ * Return 0 (success)...
+ */
+
+ return (0);
+}
+
+
+/*
+ * 'stp_mxmlSaveString()' - Save an XML node tree to a string.
+ *
+ * This function returns the total number of bytes that would be
+ * required for the string but only copies (bufsize - 1) characters
+ * into the specified buffer.
+ */
+
+int /* O - Size of string */
+stp_mxmlSaveString(stp_mxml_node_t *node, /* I - Node to write */
+ char *buffer, /* I - String buffer */
+ int bufsize, /* I - Size of string buffer */
+ int (*cb)(stp_mxml_node_t *, int))
+ /* I - Whitespace callback or STP_MXML_NO_CALLBACK */
+{
+ int col; /* Final column */
+ char *ptr[2]; /* Pointers for putc_cb */
+
+
+ /*
+ * Write the node...
+ */
+
+ ptr[0] = buffer;
+ ptr[1] = buffer + bufsize;
+
+ if ((col = mxml_write_node(node, ptr, cb, 0, mxml_string_putc)) < 0)
+ return (-1);
+
+ if (col > 0)
+ mxml_string_putc('\n', ptr);
+
+ /*
+ * Nul-terminate the buffer...
+ */
+
+ if (ptr[0] >= ptr[1])
+ buffer[bufsize - 1] = '\0';
+ else
+ ptr[0][0] = '\0';
+
+ /*
+ * Return the number of characters...
+ */
+
+ return (ptr[0] - buffer);
+}
+
+
+/*
+ * 'mxml_add_char()' - Add a character to a buffer, expanding as needed.
+ */
+
+static int /* O - 0 on success, -1 on error */
+mxml_add_char(int ch, /* I - Character to add */
+ char **bufptr, /* IO - Current position in buffer */
+ char **buffer, /* IO - Current buffer */
+ int *bufsize) /* IO - Current buffer size */
+{
+ char *newbuffer; /* New buffer value */
+
+
+ if (*bufptr >= (*buffer + *bufsize - 1))
+ {
+ /*
+ * Increase the size of the buffer...
+ */
+
+ if (*bufsize < 1024)
+ (*bufsize) *= 2;
+ else
+ (*bufsize) += 1024;
+
+ if ((newbuffer = realloc(*buffer, *bufsize)) == NULL)
+ {
+ free(*buffer);
+
+ fprintf(stderr, "Unable to expand string buffer to %d bytes!\n",
+ *bufsize);
+
+ return (-1);
+ }
+
+ *bufptr = newbuffer + (*bufptr - *buffer);
+ *buffer = newbuffer;
+ }
+
+ *(*bufptr)++ = ch;
+
+ return (0);
+}
+
+
+/*
+ * 'mxml_file_getc()' - Get a character from a file.
+ */
+
+static int /* O - Character or EOF */
+mxml_file_getc(void *p) /* I - Pointer to file */
+{
+ return (getc((FILE *)p));
+}
+
+
+/*
+ * 'mxml_file_putc()' - Write a character to a file.
+ */
+
+static int /* O - 0 on success, -1 on failure */
+mxml_file_putc(int ch, /* I - Character to write */
+ void *p) /* I - Pointer to file */
+{
+ return (putc(ch, (FILE *)p));
+}
+
+
+/*
+ * 'mxml_load_data()' - Load data into an XML node tree.
+ */
+
+static stp_mxml_node_t * /* O - First node or NULL if the file could not be read. */
+mxml_load_data(stp_mxml_node_t *top, /* I - Top node */
+ void *p, /* I - Pointer to data */
+ stp_mxml_type_t (*cb)(stp_mxml_node_t *),
+ /* I - Callback function or STP_MXML_NO_CALLBACK */
+ int (*getc_cb)(void *))
+ /* I - Read function */
+{
+ stp_mxml_node_t *node, /* Current node */
+ *parent; /* Current parent node */
+ int ch, /* Character from file */
+ whitespace; /* Non-zero if whitespace seen */
+ char *buffer, /* String buffer */
+ *bufptr; /* Pointer into buffer */
+ int bufsize; /* Size of buffer */
+ stp_mxml_type_t type; /* Current node type */
+
+
+ /*
+ * Read elements and other nodes from the file...
+ */
+
+ if ((buffer = malloc(64)) == NULL)
+ {
+ fputs("Unable to allocate string buffer!\n", stderr);
+ return (NULL);
+ }
+
+ bufsize = 64;
+ bufptr = buffer;
+ parent = top;
+ whitespace = 0;
+
+ if (cb && parent)
+ type = (*cb)(parent);
+ else
+ type = STP_MXML_TEXT;
+
+ while ((ch = (*getc_cb)(p)) != EOF)
+ {
+ if ((ch == '<' || (isspace(ch) && type != STP_MXML_OPAQUE)) && bufptr > buffer)
+ {
+ /*
+ * Add a new value node...
+ */
+
+ *bufptr = '\0';
+
+ switch (type)
+ {
+ case STP_MXML_INTEGER :
+ node = stp_mxmlNewInteger(parent, strtol(buffer, &bufptr, 0));
+ break;
+
+ case STP_MXML_OPAQUE :
+ node = stp_mxmlNewOpaque(parent, buffer);
+ break;
+
+ case STP_MXML_REAL :
+ node = stp_mxmlNewReal(parent, strtod(buffer, &bufptr));
+ break;
+
+ case STP_MXML_TEXT :
+ node = stp_mxmlNewText(parent, whitespace, buffer);
+ break;
+
+ default : /* Should never happen... */
+ node = NULL;
+ break;
+ }
+
+ if (*bufptr)
+ {
+ /*
+ * Bad integer/real number value...
+ */
+
+ fprintf(stderr, "Bad %s value '%s' in parent <%s>!\n",
+ type == STP_MXML_INTEGER ? "integer" : "real", buffer,
+ parent ? parent->value.element.name : "null");
+ break;
+ }
+
+ bufptr = buffer;
+ whitespace = isspace(ch) && type == STP_MXML_TEXT;
+
+ if (!node)
+ {
+ /*
+ * Just print error for now...
+ */
+
+ fprintf(stderr, "Unable to add value node of type %d to parent <%s>!\n",
+ type, parent ? parent->value.element.name : "null");
+ break;
+ }
+ }
+ else if (isspace(ch) && type == STP_MXML_TEXT)
+ whitespace = 1;
+
+ /*
+ * Add lone whitespace node if we have an element and existing
+ * whitespace...
+ */
+
+ if (ch == '<' && whitespace && type == STP_MXML_TEXT)
+ {
+ stp_mxmlNewText(parent, whitespace, "");
+ whitespace = 0;
+ }
+
+ if (ch == '<')
+ {
+ /*
+ * Start of open/close tag...
+ */
+
+ bufptr = buffer;
+
+ while ((ch = (*getc_cb)(p)) != EOF)
+ if (isspace(ch) || ch == '>' || (ch == '/' && bufptr > buffer))
+ break;
+ else if (mxml_add_char(ch, &bufptr, &buffer, &bufsize))
+ {
+ free(buffer);
+ return (NULL);
+ }
+ else if ((bufptr - buffer) == 3 && !strncmp(buffer, "!--", 3))
+ break;
+
+ *bufptr = '\0';
+
+ if (!strcmp(buffer, "!--"))
+ {
+ /*
+ * Gather rest of comment...
+ */
+
+ while ((ch = (*getc_cb)(p)) != EOF)
+ {
+ if (ch == '>' && bufptr > (buffer + 4) &&
+ !strncmp(bufptr - 2, "--", 2))
+ break;
+ else if (mxml_add_char(ch, &bufptr, &buffer, &bufsize))
+ {
+ free(buffer);
+ return (NULL);
+ }
+ }
+
+ /*
+ * Error out if we didn't get the whole comment...
+ */
+
+ if (ch != '>')
+ break;
+
+ /*
+ * Otherwise add this as an element under the current parent...
+ */
+
+ *bufptr = '\0';
+
+ if (!stp_mxmlNewElement(parent, buffer))
+ {
+ /*
+ * Just print error for now...
+ */
+
+ fprintf(stderr, "Unable to add comment node to parent <%s>!\n",
+ parent ? parent->value.element.name : "null");
+ break;
+ }
+ }
+ else if (buffer[0] == '!')
+ {
+ /*
+ * Gather rest of declaration...
+ */
+
+ do
+ {
+ if (ch == '>')
+ break;
+ else if (mxml_add_char(ch, &bufptr, &buffer, &bufsize))
+ {
+ free(buffer);
+ return (NULL);
+ }
+ }
+ while ((ch = (*getc_cb)(p)) != EOF);
+
+ /*
+ * Error out if we didn't get the whole declaration...
+ */
+
+ if (ch != '>')
+ break;
+
+ /*
+ * Otherwise add this as an element under the current parent...
+ */
+
+ *bufptr = '\0';
+
+ node = stp_mxmlNewElement(parent, buffer);
+ if (!node)
+ {
+ /*
+ * Just print error for now...
+ */
+
+ fprintf(stderr, "Unable to add declaration node to parent <%s>!\n",
+ parent ? parent->value.element.name : "null");
+ break;
+ }
+
+ /*
+ * Descend into this node, setting the value type as needed...
+ */
+
+ parent = node;
+
+ if (cb && parent)
+ type = (*cb)(parent);
+ }
+ else if (buffer[0] == '/')
+ {
+ /*
+ * Handle close tag...
+ */
+
+ if (!parent || strcmp(buffer + 1, parent->value.element.name))
+ {
+ /*
+ * Close tag doesn't match tree; print an error for now...
+ */
+
+ fprintf(stderr, "Mismatched close tag <%s> under parent <%s>!\n",
+ buffer, parent->value.element.name);
+ break;
+ }
+
+ /*
+ * Keep reading until we see >...
+ */
+
+ while (ch != '>' && ch != EOF)
+ ch = (*getc_cb)(p);
+
+ /*
+ * Ascend into the parent and set the value type as needed...
+ */
+
+ parent = parent->parent;
+
+ if (cb && parent)
+ type = (*cb)(parent);
+ }
+ else
+ {
+ /*
+ * Handle open tag...
+ */
+
+ node = stp_mxmlNewElement(parent, buffer);
+
+ if (!node)
+ {
+ /*
+ * Just print error for now...
+ */
+
+ fprintf(stderr, "Unable to add element node to parent <%s>!\n",
+ parent ? parent->value.element.name : "null");
+ break;
+ }
+
+ if (isspace(ch))
+ ch = mxml_parse_element(node, p, getc_cb);
+ else if (ch == '/')
+ {
+ if ((ch = (*getc_cb)(p)) != '>')
+ {
+ fprintf(stderr, "Expected > but got '%c' instead for element <%s/>!\n",
+ ch, buffer);
+ break;
+ }
+
+ ch = '/';
+ }
+
+ if (ch == EOF)
+ break;
+
+ if (ch != '/')
+ {
+ /*
+ * Descend into this node, setting the value type as needed...
+ */
+
+ parent = node;
+
+ if (cb && parent)
+ type = (*cb)(parent);
+ }
+ }
+
+ bufptr = buffer;
+ }
+ else if (ch == '&')
+ {
+ /*
+ * Add character entity to current buffer... Currently we only
+ * support &lt;, &amp;, &gt;, &nbsp;, &quot;, &#nnn;, and &#xXXXX;...
+ */
+
+ char entity[64], /* Entity string */
+ *entptr; /* Pointer into entity */
+
+
+ entity[0] = ch;
+ entptr = entity + 1;
+
+ while ((ch = (*getc_cb)(p)) != EOF)
+ if (!isalnum(ch) && ch != '#')
+ break;
+ else if (entptr < (entity + sizeof(entity) - 1))
+ *entptr++ = ch;
+ else
+ {
+ fprintf(stderr, "Entity name too long under parent <%s>!\n",
+ parent ? parent->value.element.name : "null");
+ break;
+ }
+
+ *entptr = '\0';
+
+ if (ch != ';')
+ {
+ fprintf(stderr, "Entity name \"%s\" not terminated under parent <%s>!\n",
+ entity, parent ? parent->value.element.name : "null");
+ break;
+ }
+
+ if (entity[1] == '#')
+ {
+ if (entity[2] == 'x')
+ ch = strtol(entity + 3, NULL, 16);
+ else
+ ch = strtol(entity + 2, NULL, 10);
+ }
+ else if (!strcmp(entity, "&amp"))
+ ch = '&';
+ else if (!strcmp(entity, "&gt"))
+ ch = '>';
+ else if (!strcmp(entity, "&lt"))
+ ch = '<';
+ else if (!strcmp(entity, "&nbsp"))
+ ch = 0xa0;
+ else if (!strcmp(entity, "&quot"))
+ ch = '\"';
+ else
+ {
+ fprintf(stderr, "Entity name \"%s;\" not supported under parent <%s>!\n",
+ entity, parent ? parent->value.element.name : "null");
+ break;
+ }
+
+ if (ch < 128)
+ {
+ /*
+ * Plain ASCII doesn't need special encoding...
+ */
+
+ if (mxml_add_char(ch, &bufptr, &buffer, &bufsize))
+ {
+ free(buffer);
+ return (NULL);
+ }
+ }
+ else
+ {
+ /*
+ * Use UTF-8 encoding for the Unicode char...
+ */
+
+ if (ch < 2048)
+ {
+ if (mxml_add_char(0xc0 | (ch >> 6), &bufptr, &buffer, &bufsize))
+ {
+ free(buffer);
+ return (NULL);
+ }
+ if (mxml_add_char(0x80 | (ch & 63), &bufptr, &buffer, &bufsize))
+ {
+ free(buffer);
+ return (NULL);
+ }
+ }
+ else if (ch < 65536)
+ {
+ if (mxml_add_char(0xe0 | (ch >> 12), &bufptr, &buffer, &bufsize))
+ {
+ free(buffer);
+ return (NULL);
+ }
+ if (mxml_add_char(0x80 | ((ch >> 6) & 63), &bufptr, &buffer, &bufsize))
+ {
+ free(buffer);
+ return (NULL);
+ }
+ if (mxml_add_char(0x80 | (ch & 63), &bufptr, &buffer, &bufsize))
+ {
+ free(buffer);
+ return (NULL);
+ }
+ }
+ else
+ {
+ if (mxml_add_char(0xf0 | (ch >> 18), &bufptr, &buffer, &bufsize))
+ {
+ free(buffer);
+ return (NULL);
+ }
+ if (mxml_add_char(0x80 | ((ch >> 12) & 63), &bufptr, &buffer, &bufsize))
+ {
+ free(buffer);
+ return (NULL);
+ }
+ if (mxml_add_char(0x80 | ((ch >> 6) & 63), &bufptr, &buffer, &bufsize))
+ {
+ free(buffer);
+ return (NULL);
+ }
+ if (mxml_add_char(0x80 | (ch & 63), &bufptr, &buffer, &bufsize))
+ {
+ free(buffer);
+ return (NULL);
+ }
+ }
+ }
+ }
+ else if (type == STP_MXML_OPAQUE || !isspace(ch))
+ {
+ /*
+ * Add character to current buffer...
+ */
+
+ if (mxml_add_char(ch, &bufptr, &buffer, &bufsize))
+ {
+ free(buffer);
+ return (NULL);
+ }
+ }
+ }
+
+ /*
+ * Free the string buffer - we don't need it anymore...
+ */
+
+ free(buffer);
+
+ /*
+ * Find the top element and return it...
+ */
+
+ if (parent)
+ {
+ while (parent->parent != top)
+ parent = parent->parent;
+ }
+
+ return (parent);
+}
+
+
+/*
+ * 'mxml_parse_element()' - Parse an element for any attributes...
+ */
+
+static int /* O - Terminating character */
+mxml_parse_element(stp_mxml_node_t *node, /* I - Element node */
+ void *p, /* I - Data to read from */
+ int (*getc_cb)(void *))
+ /* I - Data callback */
+{
+ int ch, /* Current character in file */
+ quote; /* Quoting character */
+ char *name, /* Attribute name */
+ *value, /* Attribute value */
+ *ptr; /* Pointer into name/value */
+ int namesize, /* Size of name string */
+ valsize; /* Size of value string */
+
+
+ /*
+ * Initialize the name and value buffers...
+ */
+
+ if ((name = malloc(64)) == NULL)
+ {
+ fputs("Unable to allocate memory for name!\n", stderr);
+ return (EOF);
+ }
+
+ namesize = 64;
+
+ if ((value = malloc(64)) == NULL)
+ {
+ free(name);
+ fputs("Unable to allocate memory for value!\n", stderr);
+ return (EOF);
+ }
+
+ valsize = 64;
+
+ /*
+ * Loop until we hit a >, /, ?, or EOF...
+ */
+
+ while ((ch = (*getc_cb)(p)) != EOF)
+ {
+#ifdef DEBUG
+ fprintf(stderr, "parse_element: ch='%c'\n", ch);
+#endif /* DEBUG */
+
+ /*
+ * Skip leading whitespace...
+ */
+
+ if (isspace(ch))
+ continue;
+
+ /*
+ * Stop at /, ?, or >...
+ */
+
+ if (ch == '/' || ch == '?')
+ {
+ /*
+ * Grab the > character and print an error if it isn't there...
+ */
+
+ quote = (*getc_cb)(p);
+
+ if (quote != '>')
+ {
+ fprintf(stderr, "Expected '>' after '%c' for element %s, but got '%c'!\n",
+ ch, node->value.element.name, quote);
+ ch = EOF;
+ }
+
+ break;
+ }
+ else if (ch == '>')
+ break;
+
+ /*
+ * Read the attribute name...
+ */
+
+ name[0] = ch;
+ ptr = name + 1;
+
+ while ((ch = (*getc_cb)(p)) != EOF)
+ if (isspace(ch) || ch == '=' || ch == '/' || ch == '>' || ch == '?')
+ break;
+ else if (mxml_add_char(ch, &ptr, &name, &namesize))
+ {
+ free(name);
+ free(value);
+ return (EOF);
+ }
+
+ *ptr = '\0';
+
+ if (ch == '=')
+ {
+ /*
+ * Read the attribute value...
+ */
+
+ if ((ch = (*getc_cb)(p)) == EOF)
+ {
+ fprintf(stderr, "Missing value for attribute '%s' in element %s!\n",
+ name, node->value.element.name);
+ return (EOF);
+ }
+
+ if (ch == '\'' || ch == '\"')
+ {
+ /*
+ * Read quoted value...
+ */
+
+ quote = ch;
+ ptr = value;
+
+ while ((ch = (*getc_cb)(p)) != EOF)
+ if (ch == quote)
+ break;
+ else if (mxml_add_char(ch, &ptr, &value, &valsize))
+ {
+ free(name);
+ free(value);
+ return (EOF);
+ }
+
+ *ptr = '\0';
+ }
+ else
+ {
+ /*
+ * Read unquoted value...
+ */
+
+ value[0] = ch;
+ ptr = value + 1;
+
+ while ((ch = (*getc_cb)(p)) != EOF)
+ if (isspace(ch) || ch == '=' || ch == '/' || ch == '>')
+ break;
+ else if (mxml_add_char(ch, &ptr, &value, &valsize))
+ {
+ free(name);
+ free(value);
+ return (EOF);
+ }
+
+ *ptr = '\0';
+ }
+ }
+ else
+ value[0] = '\0';
+
+ /*
+ * Save last character in case we need it...
+ */
+
+ if (ch == '/' || ch == '?')
+ {
+ /*
+ * Grab the > character and print an error if it isn't there...
+ */
+
+ quote = (*getc_cb)(p);
+
+ if (quote != '>')
+ {
+ fprintf(stderr, "Expected '>' after '%c' for element %s, but got '%c'!\n",
+ ch, node->value.element.name, quote);
+ ch = EOF;
+ }
+
+ break;
+ }
+ else if (ch == '>')
+ break;
+
+ /*
+ * Set the attribute...
+ */
+
+ stp_mxmlElementSetAttr(node, name, value);
+ }
+
+ /*
+ * Free the name and value buffers and return...
+ */
+
+ free(name);
+ free(value);
+
+ return (ch);
+}
+
+
+/*
+ * 'mxml_string_getc()' - Get a character from a string.
+ */
+
+static int /* O - Character or EOF */
+mxml_string_getc(void *p) /* I - Pointer to file */
+{
+ int ch; /* Character */
+ const char **s; /* Pointer to string pointer */
+
+
+ s = (const char **)p;
+
+ if ((ch = *s[0]) != 0)
+ {
+ (*s)++;
+ return (ch);
+ }
+ else
+ return (EOF);
+}
+
+
+/*
+ * 'mxml_string_putc()' - Write a character to a string.
+ */
+
+static int /* O - 0 on success, -1 on failure */
+mxml_string_putc(int ch, /* I - Character to write */
+ void *p) /* I - Pointer to string pointers */
+{
+ char **pp; /* Pointer to string pointers */
+
+
+ pp = (char **)p;
+
+ if (pp[0] < pp[1])
+ pp[0][0] = ch;
+
+ pp[0] ++;
+
+ return (0);
+}
+
+
+/*
+ * 'mxml_write_node()' - Save an XML node to a file.
+ */
+
+static int /* O - Column or -1 on error */
+mxml_write_node(stp_mxml_node_t *node, /* I - Node to write */
+ void *p, /* I - File to write to */
+ int (*cb)(stp_mxml_node_t *, int),
+ /* I - Whitespace callback */
+ int col, /* I - Current column */
+ int (*putc_cb)(int, void *))
+{
+ int i; /* Looping var */
+ stp_mxml_attr_t *attr; /* Current attribute */
+ char s[255]; /* Temporary string */
+
+
+ while (node != NULL)
+ {
+ /*
+ * Print the node value...
+ */
+
+ switch (node->type)
+ {
+ case STP_MXML_ELEMENT :
+ col = mxml_write_ws(node, p, cb, STP_MXML_WS_BEFORE_OPEN, col, putc_cb);
+
+ if ((*putc_cb)('<', p) < 0)
+ return (-1);
+ if (mxml_write_string(node->value.element.name, p, putc_cb) < 0)
+ return (-1);
+
+ col += strlen(node->value.element.name) + 1;
+
+ for (i = node->value.element.num_attrs, attr = node->value.element.attrs;
+ i > 0;
+ i --, attr ++)
+ {
+ if ((col + strlen(attr->name) + strlen(attr->value) + 3) > STP_MXML_WRAP)
+ {
+ if ((*putc_cb)('\n', p) < 0)
+ return (-1);
+
+ col = 0;
+ }
+ else
+ {
+ if ((*putc_cb)(' ', p) < 0)
+ return (-1);
+
+ col ++;
+ }
+
+ if (mxml_write_string(attr->name, p, putc_cb) < 0)
+ return (-1);
+ if ((*putc_cb)('=', p) < 0)
+ return (-1);
+ if ((*putc_cb)('\"', p) < 0)
+ return (-1);
+ if (mxml_write_string(attr->value, p, putc_cb) < 0)
+ return (-1);
+ if ((*putc_cb)('\"', p) < 0)
+ return (-1);
+
+ col += strlen(attr->name) + strlen(attr->value) + 3;
+ }
+
+ if (node->child)
+ {
+ /*
+ * The ? and ! elements are special-cases and have no end tags...
+ */
+
+ if (node->value.element.name[0] == '?')
+ {
+ if ((*putc_cb)('?', p) < 0)
+ return (-1);
+ if ((*putc_cb)('>', p) < 0)
+ return (-1);
+ if ((*putc_cb)('\n', p) < 0)
+ return (-1);
+
+ col = 0;
+ }
+ else if ((*putc_cb)('>', p) < 0)
+ return (-1);
+ else
+ col ++;
+
+ col = mxml_write_ws(node, p, cb, STP_MXML_WS_AFTER_OPEN, col, putc_cb);
+
+ if ((col = mxml_write_node(node->child, p, cb, col, putc_cb)) < 0)
+ return (-1);
+
+ if (node->value.element.name[0] != '?' &&
+ node->value.element.name[0] != '!')
+ {
+ col = mxml_write_ws(node, p, cb, STP_MXML_WS_BEFORE_CLOSE, col, putc_cb);
+
+ if ((*putc_cb)('<', p) < 0)
+ return (-1);
+ if ((*putc_cb)('/', p) < 0)
+ return (-1);
+ if (mxml_write_string(node->value.element.name, p, putc_cb) < 0)
+ return (-1);
+ if ((*putc_cb)('>', p) < 0)
+ return (-1);
+
+ col += strlen(node->value.element.name) + 3;
+
+ col = mxml_write_ws(node, p, cb, STP_MXML_WS_AFTER_CLOSE, col, putc_cb);
+ }
+ }
+ else if (node->value.element.name[0] == '!')
+ {
+ if ((*putc_cb)('>', p) < 0)
+ return (-1);
+ else
+ col ++;
+
+ col = mxml_write_ws(node, p, cb, STP_MXML_WS_AFTER_OPEN, col, putc_cb);
+ }
+ else
+ {
+ if ((*putc_cb)('/', p) < 0)
+ return (-1);
+ if ((*putc_cb)('>', p) < 0)
+ return (-1);
+
+ col += 2;
+
+ col = mxml_write_ws(node, p, cb, STP_MXML_WS_AFTER_OPEN, col, putc_cb);
+ }
+ break;
+
+ case STP_MXML_INTEGER :
+ if (node->prev)
+ {
+ if (col > STP_MXML_WRAP)
+ {
+ if ((*putc_cb)('\n', p) < 0)
+ return (-1);
+
+ col = 0;
+ }
+ else if ((*putc_cb)(' ', p) < 0)
+ return (-1);
+ else
+ col ++;
+ }
+
+ sprintf(s, "%d", node->value.integer);
+ if (mxml_write_string(s, p, putc_cb) < 0)
+ return (-1);
+
+ col += strlen(s);
+ break;
+
+ case STP_MXML_OPAQUE :
+ if (mxml_write_string(node->value.opaque, p, putc_cb) < 0)
+ return (-1);
+
+ col += strlen(node->value.opaque);
+ break;
+
+ case STP_MXML_REAL :
+ if (node->prev)
+ {
+ if (col > STP_MXML_WRAP)
+ {
+ if ((*putc_cb)('\n', p) < 0)
+ return (-1);
+
+ col = 0;
+ }
+ else if ((*putc_cb)(' ', p) < 0)
+ return (-1);
+ else
+ col ++;
+ }
+
+ sprintf(s, "%f", node->value.real);
+ if (mxml_write_string(s, p, putc_cb) < 0)
+ return (-1);
+
+ col += strlen(s);
+ break;
+
+ case STP_MXML_TEXT :
+ if (node->value.text.whitespace && col > 0)
+ {
+ if (col > STP_MXML_WRAP)
+ {
+ if ((*putc_cb)('\n', p) < 0)
+ return (-1);
+
+ col = 0;
+ }
+ else if ((*putc_cb)(' ', p) < 0)
+ return (-1);
+ else
+ col ++;
+ }
+
+ if (mxml_write_string(node->value.text.string, p, putc_cb) < 0)
+ return (-1);
+
+ col += strlen(node->value.text.string);
+ break;
+ }
+
+ /*
+ * Next node...
+ */
+
+ node = node->next;
+ }
+
+ return (col);
+}
+
+
+/*
+ * 'mxml_write_string()' - Write a string, escaping & and < as needed.
+ */
+
+static int /* O - 0 on success, -1 on failure */
+mxml_write_string(const char *s, /* I - String to write */
+ void *p, /* I - Write pointer */
+ int (*putc_cb)(int, void *))
+ /* I - Write callback */
+{
+ char buf[255], /* Buffer */
+ *bufptr; /* Pointer into buffer */
+
+
+ while (*s)
+ {
+ if (*s == '&')
+ {
+ if ((*putc_cb)('&', p) < 0)
+ return (-1);
+ if ((*putc_cb)('a', p) < 0)
+ return (-1);
+ if ((*putc_cb)('m', p) < 0)
+ return (-1);
+ if ((*putc_cb)('p', p) < 0)
+ return (-1);
+ if ((*putc_cb)(';', p) < 0)
+ return (-1);
+ }
+ else if (*s == '<')
+ {
+ if ((*putc_cb)('&', p) < 0)
+ return (-1);
+ if ((*putc_cb)('l', p) < 0)
+ return (-1);
+ if ((*putc_cb)('t', p) < 0)
+ return (-1);
+ if ((*putc_cb)(';', p) < 0)
+ return (-1);
+ }
+ else if (*s == '>')
+ {
+ if ((*putc_cb)('&', p) < 0)
+ return (-1);
+ if ((*putc_cb)('g', p) < 0)
+ return (-1);
+ if ((*putc_cb)('t', p) < 0)
+ return (-1);
+ if ((*putc_cb)(';', p) < 0)
+ return (-1);
+ }
+ else if (*s == '\"')
+ {
+ if ((*putc_cb)('&', p) < 0)
+ return (-1);
+ if ((*putc_cb)('q', p) < 0)
+ return (-1);
+ if ((*putc_cb)('u', p) < 0)
+ return (-1);
+ if ((*putc_cb)('o', p) < 0)
+ return (-1);
+ if ((*putc_cb)('t', p) < 0)
+ return (-1);
+ if ((*putc_cb)(';', p) < 0)
+ return (-1);
+ }
+ else if (*s & 128)
+ {
+ /*
+ * Convert UTF-8 to Unicode constant...
+ */
+
+ int ch; /* Unicode character */
+
+
+ ch = *s & 255;
+
+ if ((ch & 0xe0) == 0xc0)
+ {
+ ch = ((ch & 0x1f) << 6) | (s[1] & 0x3f);
+ s ++;
+ }
+ else if ((ch & 0xf0) == 0xe0)
+ {
+ ch = ((((ch * 0x0f) << 6) | (s[1] & 0x3f)) << 6) | (s[2] & 0x3f);
+ s += 2;
+ }
+
+ if (ch == 0xa0)
+ {
+ /*
+ * Handle non-breaking space as-is...
+ */
+
+ if ((*putc_cb)('&', p) < 0)
+ return (-1);
+ if ((*putc_cb)('n', p) < 0)
+ return (-1);
+ if ((*putc_cb)('b', p) < 0)
+ return (-1);
+ if ((*putc_cb)('s', p) < 0)
+ return (-1);
+ if ((*putc_cb)('p', p) < 0)
+ return (-1);
+ if ((*putc_cb)(';', p) < 0)
+ return (-1);
+ }
+ else
+ {
+ sprintf(buf, "&#x%x;", ch);
+
+ for (bufptr = buf; *bufptr; bufptr ++)
+ if ((*putc_cb)(*bufptr, p) < 0)
+ return (-1);
+ }
+ }
+ else if ((*putc_cb)(*s, p) < 0)
+ return (-1);
+
+ s ++;
+ }
+
+ return (0);
+}
+
+
+/*
+ * 'mxml_write_ws()' - Do whitespace callback...
+ */
+
+static int /* O - New column */
+mxml_write_ws(stp_mxml_node_t *node, /* I - Current node */
+ void *p, /* I - Write pointer */
+ int (*cb)(stp_mxml_node_t *, int),
+ /* I - Callback function */
+ int ws, /* I - Where value */
+ int col, /* I - Current column */
+ int (*putc_cb)(int, void *))
+ /* I - Write callback */
+{
+ int ch; /* Whitespace character */
+
+
+ if (cb && (ch = (*cb)(node, ws)) != 0)
+ {
+ if ((*putc_cb)(ch, p) < 0)
+ return (-1);
+ else if (ch == '\n')
+ col = 0;
+ else if (ch == '\t')
+ {
+ col += STP_MXML_TAB;
+ col = col - (col % STP_MXML_TAB);
+ }
+ else
+ col ++;
+ }
+
+ return (col);
+}
+
+
+/*
+ * End of "$Id: mxml-file.c,v 1.7 2004/09/17 18:38:21 rleigh Exp $".
+ */
diff --git a/src/main/mxml-node.c b/src/main/mxml-node.c
new file mode 100644
index 0000000..e21f60f
--- /dev/null
+++ b/src/main/mxml-node.c
@@ -0,0 +1,494 @@
+/*
+ * "$Id: mxml-node.c,v 1.7 2004/09/17 18:38:21 rleigh Exp $"
+ *
+ * Node support code for mini-XML, a small XML-like file parsing library.
+ *
+ * Copyright 2003 by Michael Sweet.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * Contents:
+ *
+ * stp_mxmlAdd() - Add a node to a tree.
+ * stp_mxmlDelete() - Delete a node and all of its children.
+ * stp_mxmlNewElement() - Create a new element node.
+ * stp_mxmlNewInteger() - Create a new integer node.
+ * stp_mxmlNewOpaque() - Create a new opaque string.
+ * stp_mxmlNewReal() - Create a new real number node.
+ * stp_mxmlNewText() - Create a new text fragment node.
+ * stp_mxmlRemove() - Remove a node from its parent.
+ * mxml_new() - Create a new node.
+ */
+
+/*
+ * Include necessary headers...
+ */
+
+#include <gutenprint/mxml.h>
+#include "config.h"
+
+
+/*
+ * Local functions...
+ */
+
+static stp_mxml_node_t *mxml_new(stp_mxml_node_t *parent, stp_mxml_type_t type);
+
+
+/*
+ * 'stp_mxmlAdd()' - Add a node to a tree.
+ *
+ * Adds the specified node to the parent. If the child argument is not
+ * NULL, puts the new node before or after the specified child depending
+ * on the value of the where argument. If the child argument is NULL,
+ * puts the new node at the beginning of the child list (STP_MXML_ADD_BEFORE)
+ * or at the end of the child list (STP_MXML_ADD_AFTER). The constant
+ * STP_MXML_ADD_TO_PARENT can be used to specify a NULL child pointer.
+ */
+
+void
+stp_mxmlAdd(stp_mxml_node_t *parent, /* I - Parent node */
+ int where, /* I - Where to add, STP_MXML_ADD_BEFORE or STP_MXML_ADD_AFTER */
+ stp_mxml_node_t *child, /* I - Child node for where or STP_MXML_ADD_TO_PARENT */
+ stp_mxml_node_t *node) /* I - Node to add */
+{
+/* fprintf(stderr, "stp_mxmlAdd(parent=%p, where=%d, child=%p, node=%p)\n", parent,
+ where, child, node);*/
+
+ /*
+ * Range check input...
+ */
+
+ if (!parent || !node)
+ return;
+
+ /*
+ * Remove the node from any existing parent...
+ */
+
+ if (node->parent)
+ stp_mxmlRemove(node);
+
+ /*
+ * Reset pointers...
+ */
+
+ node->parent = parent;
+
+ switch (where)
+ {
+ case STP_MXML_ADD_BEFORE :
+ if (!child || child == parent->child || child->parent != parent)
+ {
+ /*
+ * Insert as first node under parent...
+ */
+
+ node->next = parent->child;
+
+ if (parent->child)
+ parent->child->prev = node;
+ else
+ parent->last_child = node;
+
+ parent->child = node;
+ }
+ else
+ {
+ /*
+ * Insert node before this child...
+ */
+
+ node->next = child;
+ node->prev = child->prev;
+
+ if (child->prev)
+ child->prev->next = node;
+ else
+ parent->child = node;
+
+ child->prev = node;
+ }
+ break;
+
+ case STP_MXML_ADD_AFTER :
+ if (!child || child == parent->last_child || child->parent != parent)
+ {
+ /*
+ * Insert as last node under parent...
+ */
+
+ node->parent = parent;
+ node->prev = parent->last_child;
+
+ if (parent->last_child)
+ parent->last_child->next = node;
+ else
+ parent->child = node;
+
+ parent->last_child = node;
+ }
+ else
+ {
+ /*
+ * Insert node after this child...
+ */
+
+ node->prev = child;
+ node->next = child->next;
+
+ if (child->next)
+ child->next->prev = node;
+ else
+ parent->last_child = node;
+
+ child->next = node;
+ }
+ break;
+ }
+}
+
+
+/*
+ * 'stp_mxmlDelete()' - Delete a node and all of its children.
+ *
+ * If the specified node has a parent, this function first removes the
+ * node from its parent using the stp_mxmlRemove() function.
+ */
+
+void
+stp_mxmlDelete(stp_mxml_node_t *node) /* I - Node to delete */
+{
+ int i; /* Looping var */
+
+
+/* fprintf(stderr, "stp_mxmlDelete(node=%p)\n", node);*/
+
+ /*
+ * Range check input...
+ */
+
+ if (!node)
+ return;
+
+ /*
+ * Remove the node from its parent, if any...
+ */
+
+ stp_mxmlRemove(node);
+
+ /*
+ * Delete children...
+ */
+
+ while (node->child)
+ stp_mxmlDelete(node->child);
+
+ /*
+ * Now delete any node data...
+ */
+
+ switch (node->type)
+ {
+ case STP_MXML_ELEMENT :
+ if (node->value.element.name)
+ free(node->value.element.name);
+
+ if (node->value.element.num_attrs)
+ {
+ for (i = 0; i < node->value.element.num_attrs; i ++)
+ {
+ if (node->value.element.attrs[i].name)
+ free(node->value.element.attrs[i].name);
+ if (node->value.element.attrs[i].value)
+ free(node->value.element.attrs[i].value);
+ }
+
+ free(node->value.element.attrs);
+ }
+ break;
+ case STP_MXML_INTEGER :
+ /* Nothing to do */
+ break;
+ case STP_MXML_OPAQUE :
+ if (node->value.opaque)
+ free(node->value.opaque);
+ break;
+ case STP_MXML_REAL :
+ /* Nothing to do */
+ break;
+ case STP_MXML_TEXT :
+ if (node->value.text.string)
+ free(node->value.text.string);
+ break;
+ }
+
+ /*
+ * Free this node...
+ */
+
+ free(node);
+}
+
+
+/*
+ * 'stp_mxmlNewElement()' - Create a new element node.
+ *
+ * The new element node is added to the end of the specified parent's child
+ * list. The constant STP_MXML_NO_PARENT can be used to specify that the new
+ * element node has no parent.
+ */
+
+stp_mxml_node_t * /* O - New node */
+stp_mxmlNewElement(stp_mxml_node_t *parent, /* I - Parent node or STP_MXML_NO_PARENT */
+ const char *name) /* I - Name of element */
+{
+ stp_mxml_node_t *node; /* New node */
+
+
+ /*
+ * Range check input...
+ */
+
+ if (!name)
+ return (NULL);
+
+ /*
+ * Create the node and set the element name...
+ */
+
+ if ((node = mxml_new(parent, STP_MXML_ELEMENT)) != NULL)
+ node->value.element.name = strdup(name);
+
+ return (node);
+}
+
+
+/*
+ * 'stp_mxmlNewInteger()' - Create a new integer node.
+ *
+ * The new integer node is added to the end of the specified parent's child
+ * list. The constant STP_MXML_NO_PARENT can be used to specify that the new
+ * integer node has no parent.
+ */
+
+stp_mxml_node_t * /* O - New node */
+stp_mxmlNewInteger(stp_mxml_node_t *parent, /* I - Parent node or STP_MXML_NO_PARENT */
+ int integer) /* I - Integer value */
+{
+ stp_mxml_node_t *node; /* New node */
+
+
+ /*
+ * Range check input...
+ */
+
+ if (!parent)
+ return (NULL);
+
+ /*
+ * Create the node and set the element name...
+ */
+
+ if ((node = mxml_new(parent, STP_MXML_INTEGER)) != NULL)
+ node->value.integer = integer;
+
+ return (node);
+}
+
+
+/*
+ * 'stp_mxmlNewOpaque()' - Create a new opaque string.
+ *
+ * The new opaque node is added to the end of the specified parent's child
+ * list. The constant STP_MXML_NO_PARENT can be used to specify that the new
+ * opaque node has no parent. The opaque string must be nul-terminated and
+ * is copied into the new node.
+ */
+
+stp_mxml_node_t * /* O - New node */
+stp_mxmlNewOpaque(stp_mxml_node_t *parent, /* I - Parent node or STP_MXML_NO_PARENT */
+ const char *opaque) /* I - Opaque string */
+{
+ stp_mxml_node_t *node; /* New node */
+
+
+ /*
+ * Range check input...
+ */
+
+ if (!parent || !opaque)
+ return (NULL);
+
+ /*
+ * Create the node and set the element name...
+ */
+
+ if ((node = mxml_new(parent, STP_MXML_OPAQUE)) != NULL)
+ node->value.opaque = strdup(opaque);
+
+ return (node);
+}
+
+
+/*
+ * 'stp_mxmlNewReal()' - Create a new real number node.
+ *
+ * The new real number node is added to the end of the specified parent's
+ * child list. The constant STP_MXML_NO_PARENT can be used to specify that
+ * the new real number node has no parent.
+ */
+
+stp_mxml_node_t * /* O - New node */
+stp_mxmlNewReal(stp_mxml_node_t *parent, /* I - Parent node or STP_MXML_NO_PARENT */
+ double real) /* I - Real number value */
+{
+ stp_mxml_node_t *node; /* New node */
+
+
+ /*
+ * Range check input...
+ */
+
+ if (!parent)
+ return (NULL);
+
+ /*
+ * Create the node and set the element name...
+ */
+
+ if ((node = mxml_new(parent, STP_MXML_REAL)) != NULL)
+ node->value.real = real;
+
+ return (node);
+}
+
+
+/*
+ * 'stp_mxmlNewText()' - Create a new text fragment node.
+ *
+ * The new text node is added to the end of the specified parent's child
+ * list. The constant STP_MXML_NO_PARENT can be used to specify that the new
+ * text node has no parent. The whitespace parameter is used to specify
+ * whether leading whitespace is present before the node. The text
+ * string must be nul-terminated and is copied into the new node.
+ */
+
+stp_mxml_node_t * /* O - New node */
+stp_mxmlNewText(stp_mxml_node_t *parent, /* I - Parent node or STP_MXML_NO_PARENT */
+ int whitespace, /* I - 1 = leading whitespace, 0 = no whitespace */
+ const char *string) /* I - String */
+{
+ stp_mxml_node_t *node; /* New node */
+
+
+ /*
+ * Range check input...
+ */
+
+ if (!parent || !string)
+ return (NULL);
+
+ /*
+ * Create the node and set the text value...
+ */
+
+ if ((node = mxml_new(parent, STP_MXML_TEXT)) != NULL)
+ {
+ node->value.text.whitespace = whitespace;
+ node->value.text.string = strdup(string);
+ }
+
+ return (node);
+}
+
+
+/*
+ * 'stp_mxmlRemove()' - Remove a node from its parent.
+ *
+ * Does not free memory used by the node - use stp_mxmlDelete() for that.
+ * This function does nothing if the node has no parent.
+ */
+
+void
+stp_mxmlRemove(stp_mxml_node_t *node) /* I - Node to remove */
+{
+ /*
+ * Range check input...
+ */
+
+/* fprintf(stderr, "stp_mxmlRemove(node=%p)\n", node);*/
+
+ if (!node || !node->parent)
+ return;
+
+ /*
+ * Remove from parent...
+ */
+
+ if (node->prev)
+ node->prev->next = node->next;
+ else
+ node->parent->child = node->next;
+
+ if (node->next)
+ node->next->prev = node->prev;
+ else
+ node->parent->last_child = node->prev;
+
+ node->parent = NULL;
+ node->prev = NULL;
+ node->next = NULL;
+}
+
+
+/*
+ * 'mxml_new()' - Create a new node.
+ */
+
+static stp_mxml_node_t * /* O - New node */
+mxml_new(stp_mxml_node_t *parent, /* I - Parent node */
+ stp_mxml_type_t type) /* I - Node type */
+{
+ stp_mxml_node_t *node; /* New node */
+
+
+ /*
+ * Allocate memory for the node...
+ */
+
+ if ((node = calloc(1, sizeof(stp_mxml_node_t))) == NULL)
+ return (NULL);
+
+ /*
+ * Set the node type...
+ */
+
+ node->type = type;
+
+ /*
+ * Add to the parent if present...
+ */
+
+ if (parent)
+ stp_mxmlAdd(parent, STP_MXML_ADD_AFTER, STP_MXML_ADD_TO_PARENT, node);
+
+ /*
+ * Return the new node...
+ */
+
+ return (node);
+}
+
+
+/*
+ * End of "$Id: mxml-node.c,v 1.7 2004/09/17 18:38:21 rleigh Exp $".
+ */
diff --git a/src/main/mxml-search.c b/src/main/mxml-search.c
new file mode 100644
index 0000000..02bf125
--- /dev/null
+++ b/src/main/mxml-search.c
@@ -0,0 +1,199 @@
+/*
+ * "$Id: mxml-search.c,v 1.7 2004/09/17 18:38:21 rleigh Exp $"
+ *
+ * Search/navigation functions for mini-XML, a small XML-like file
+ * parsing library.
+ *
+ * Copyright 2003 by Michael Sweet.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * Contents:
+ *
+ * stp_mxmlFindElement() - Find the named element.
+ * stp_mxmlWalkNext() - Walk to the next logical node in the tree.
+ * stp_mxmlWalkPrev() - Walk to the previous logical node in the tree.
+ */
+
+/*
+ * Include necessary headers...
+ */
+
+#include <gutenprint/mxml.h>
+#include "config.h"
+
+
+/*
+ * 'stp_mxmlFindElement()' - Find the named element.
+ *
+ * The search is constrained by the name, attribute name, and value; any
+ * NULL names or values are treated as wildcards, so different kinds of
+ * searches can be implemented by looking for all elements of a given name
+ * or all elements with a specific attribute. The descend argument determines
+ * whether the search descends into child nodes; normally you will use
+ * STP_MXML_DESCEND_FIRST for the initial search and STP_MXML_NO_DESCEND to find
+ * additional direct descendents of the node. The top node argument
+ * constrains the search to a particular node's children.
+ */
+
+stp_mxml_node_t * /* O - Element node or NULL */
+stp_mxmlFindElement(stp_mxml_node_t *node, /* I - Current node */
+ stp_mxml_node_t *top, /* I - Top node */
+ const char *name, /* I - Element name or NULL for any */
+ const char *attr, /* I - Attribute name, or NULL for none */
+ const char *value, /* I - Attribute value, or NULL for any */
+ int descend) /* I - Descend into tree - STP_MXML_DESCEND, STP_MXML_NO_DESCEND, or STP_MXML_DESCEND_FIRST */
+{
+ const char *temp; /* Current attribute value */
+
+
+ /*
+ * Range check input...
+ */
+
+ if (!node || !top || (!attr && value))
+ return (NULL);
+
+ /*
+ * Start with the next node...
+ */
+
+ node = stp_mxmlWalkNext(node, top, descend);
+
+ /*
+ * Loop until we find a matching element...
+ */
+
+ while (node != NULL)
+ {
+ /*
+ * See if this node matches...
+ */
+
+ if (node->type == STP_MXML_ELEMENT &&
+ node->value.element.name &&
+ (!name || !strcmp(node->value.element.name, name)))
+ {
+ /*
+ * See if we need to check for an attribute...
+ */
+
+ if (!attr)
+ return (node); /* No attribute search, return it... */
+
+ /*
+ * Check for the attribute...
+ */
+
+ if ((temp = stp_mxmlElementGetAttr(node, attr)) != NULL)
+ {
+ /*
+ * OK, we have the attribute, does it match?
+ */
+
+ if (!value || !strcmp(value, temp))
+ return (node); /* Yes, return it... */
+ }
+ }
+
+ /*
+ * No match, move on to the next node...
+ */
+
+ if (descend == STP_MXML_DESCEND)
+ node = stp_mxmlWalkNext(node, top, STP_MXML_DESCEND);
+ else
+ node = node->next;
+ }
+
+ return (NULL);
+}
+
+
+/*
+ * 'stp_mxmlWalkNext()' - Walk to the next logical node in the tree.
+ *
+ * The descend argument controls whether the first child is considered
+ * to be the next node. The top node argument constrains the walk to
+ * the node's children.
+ */
+
+stp_mxml_node_t * /* O - Next node or NULL */
+stp_mxmlWalkNext(stp_mxml_node_t *node, /* I - Current node */
+ stp_mxml_node_t *top, /* I - Top node */
+ int descend) /* I - Descend into tree - STP_MXML_DESCEND, STP_MXML_NO_DESCEND, or STP_MXML_DESCEND_FIRST */
+{
+ if (!node)
+ return (NULL);
+ else if (node->child && descend)
+ return (node->child);
+ else if (node->next)
+ return (node->next);
+ else if (node->parent && node->parent != top)
+ {
+ node = node->parent;
+
+ while (!node->next)
+ if (node->parent == top || !node->parent)
+ return (NULL);
+ else
+ node = node->parent;
+
+ return (node->next);
+ }
+ else
+ return (NULL);
+}
+
+
+/*
+ * 'stp_mxmlWalkPrev()' - Walk to the previous logical node in the tree.
+ *
+ * The descend argument controls whether the previous node's last child
+ * is considered to be the previous node. The top node argument constrains
+ * the walk to the node's children.
+ */
+
+stp_mxml_node_t * /* O - Previous node or NULL */
+stp_mxmlWalkPrev(stp_mxml_node_t *node, /* I - Current node */
+ stp_mxml_node_t *top, /* I - Top node */
+ int descend) /* I - Descend into tree - STP_MXML_DESCEND, STP_MXML_NO_DESCEND, or STP_MXML_DESCEND_FIRST */
+{
+ if (!node)
+ return (NULL);
+ else if (node->prev)
+ {
+ if (node->prev->last_child && descend)
+ {
+ /*
+ * Find the last child under the previous node...
+ */
+
+ node = node->prev->last_child;
+
+ while (node->last_child)
+ node = node->last_child;
+
+ return (node);
+ }
+ else
+ return (node->prev);
+ }
+ else if (node->parent != top)
+ return (node->parent);
+ else
+ return (NULL);
+}
+
+
+/*
+ * End of "$Id: mxml-search.c,v 1.7 2004/09/17 18:38:21 rleigh Exp $".
+ */
diff --git a/src/main/papers.xml b/src/main/papers.xml
new file mode 100644
index 0000000..b45ce57
--- /dev/null
+++ b/src/main/papers.xml
@@ -0,0 +1,1023 @@
+<?xml version="1.0"?>
+
+<!--
+ XML description of papers known to libgutenprint.
+ It should be edited by hand.
+
+ "$Id: papers.xml,v 1.18 2005/03/29 00:23:43 rlk Exp $"
+-->
+
+<!--
+ Sizes are converted to 1/72in, then rounded down so that we don't
+ print off the edge of the paper.
+-->
+
+
+
+<gutenprint xmlns="http://gimp-print.sourceforge.net/xsd/gp.xsd-1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://gimp-print.sourceforge.net/xsd/gp.xsd-1.0 gutenprint.xsd">
+ <paperdef>
+<!-- GROUP: Imperial -->
+ <paper name="Letter">
+ <description value="Letter"/>
+ <comment value="8.5in x 11in"/>
+ <width value="612"/>
+ <height value="792"/>
+ <unit value="english"/>
+ </paper>
+ <paper name="Legal">
+ <description value="Legal"/>
+ <comment value="8.5in x 14in"/>
+ <width value="612"/>
+ <height value="1008"/>
+ <unit value="english"/>
+ </paper>
+ <paper name="Tabloid">
+ <description value="Tabloid"/>
+ <comment value="11in x 17in"/>
+ <width value="792"/>
+ <height value="1224"/>
+ <unit value="english"/>
+ </paper>
+ <paper name="Executive">
+ <description value="Executive"/>
+ <comment value="7.25in x 10.5in"/>
+ <width value="522"/>
+ <height value="756"/>
+ <unit value="english"/>
+ </paper>
+ <paper name="Postcard">
+ <description value="Postcard"/>
+ <comment value="100mm x 147mm"/>
+ <width value="283"/>
+ <height value="416"/>
+ <unit value="english"/>
+ </paper>
+ <paper name="CD5Inch">
+ <description value="CD - 5 inch"/>
+ <comment value="CD, 116mm diameter"/>
+ <width value="329"/>
+ <height value="329"/>
+ <unit value="english"/>
+ </paper>
+ <paper name="CD3Inch">
+ <description value="CD - 3 inch"/>
+ <comment value="CD, 65mm diameter"/>
+ <width value="184"/>
+ <height value="184"/>
+ <unit value="english"/>
+ </paper>
+ <paper name="w216h360">
+ <description value="3x5"/>
+ <width value="216"/>
+ <height value="360"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w288h432">
+ <description value="4x6"/>
+ <width value="288"/>
+ <height value="432"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w324h495">
+ <description value="Epson 4x6 Photo Paper"/>
+ <width value="324"/>
+ <height value="495"/>
+ <unit value="english-extended"/>
+ <top value="18"/>
+ <left value="18"/>
+ <right value="18"/>
+ <bottom value="45"/>
+ </paper>
+ <paper name="w360h504">
+ <description value="5x7"/>
+ <width value="360"/>
+ <height value="504"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w360h576">
+ <description value="5x8"/>
+ <width value="360"/>
+ <height value="576"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w432h576">
+ <description value="6x8"/>
+ <width value="432"/>
+ <height value="576"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="c8x10">
+ <description value="8x10"/>
+ <width value="576"/>
+ <height value="720"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="Statement">
+ <description value="Manual"/>
+ <comment value="5.5in x 8.5in (Statement)"/>
+ <width value="396"/>
+ <height value="612"/>
+ <unit value="english"/>
+ </paper>
+ <paper name="TabloidExtra">
+ <description value="12x18"/>
+ <comment value="Tabloid Extra"/>
+ <width value="864"/>
+ <height value="1296"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="SuperB">
+ <description value="Super B 13x19"/>
+ <width value="936"/>
+ <height value="1368"/>
+ <unit value="english"/>
+ </paper>
+ <paper name="EngineeringC">
+ <description value="Engineering C 17x22"/>
+ <width value="1224"/>
+ <height value="1584"/>
+ <unit value="english"/>
+ </paper>
+<!--
+ Other common photographic paper sizes
+-->
+ <paper name="w576h864">
+ <description value="8x12"/>
+ <comment value="Sometimes used for 35mm"/>
+ <width value="576"/>
+ <height value="864"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w792h1008">
+ <description value="11x14"/>
+ <width value="792"/>
+ <height value="1008"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w1152h1440">
+ <description value="16x20"/>
+ <width value="1152"/>
+ <height value="1440"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w1152h1728">
+ <description value="16x24"/>
+ <comment value="20 x 24 for 35mm"/>
+ <width value="1152"/>
+ <height value="1728"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w1440h1728">
+ <description value="20x24"/>
+ <width value="1440"/>
+ <height value="1728"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w1440h2160">
+ <description value="20x30"/>
+ <comment value="24 x 30 for 35mm"/>
+ <width value="1440"/>
+ <height value="2160"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w1584h2160">
+ <description value="22x30"/>
+ <comment value="Common watercolor paper"/>
+ <width value="1584"/>
+ <height value="2160"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w1728h2160">
+ <description value="24x30"/>
+ <width value="1728"/>
+ <height value="2160"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w1728h2592">
+ <description value="Super A1 24x36"/>
+ <comment value="Sometimes used for 35mm"/>
+ <width value="1728"/>
+ <height value="2592"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w2160h2880">
+ <description value="30x40"/>
+ <width value="2160"/>
+ <height value="2880"/>
+ <unit value="english-extended"/>
+ </paper>
+<!-- GROUP: International A -->
+<!--
+ International Paper Sizes (mostly taken from BS4000:1968)
+
+ "A" series: Paper and boards, trimmed sizes
+
+ "A" sizes are in the ratio 1 : sqrt(2). A0 has a total area
+ of 1 square metre. Everything is rounded to the nearest
+ millimetre. Thus, A0 is 841mm x 1189mm. Every other A
+ size is obtained by doubling or halving another A size.
+-->
+ <paper name="w4768h6749">
+ <description value="4A"/>
+ <comment value="1682mm x 2378mm"/>
+ <width value="4768"/>
+ <height value="6749"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w3370h4768">
+ <description value="2A"/>
+ <comment value="1189mm x 1682mm"/>
+ <width value="3370"/>
+ <height value="4768"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="SuperA0">
+ <description value="Super A0"/>
+ <comment value="914mm x 1292mm"/>
+ <width value="2590"/>
+ <height value="3662"/>
+ <unit value="metric"/>
+ </paper>
+ <paper name="A0">
+ <description value="A0"/>
+ <comment value="841mm x 1189mm"/>
+ <width value="2384"/>
+ <height value="3370"/>
+ <unit value="metric"/>
+ </paper>
+ <paper name="A1">
+ <description value="A1"/>
+ <comment value="594mm x 841mm"/>
+ <width value="1684"/>
+ <height value="2384"/>
+ <unit value="metric"/>
+ </paper>
+ <paper name="A2">
+ <description value="A2"/>
+ <comment value="420mm x 594mm"/>
+ <width value="1191"/>
+ <height value="1684"/>
+ <unit value="metric"/>
+ </paper>
+ <paper name="A3">
+ <description value="A3"/>
+ <comment value="297mm x 420mm"/>
+ <width value="842"/>
+ <height value="1191"/>
+ <unit value="metric"/>
+ </paper>
+ <paper name="A4">
+ <description value="A4"/>
+ <comment value="210mm x 297mm"/>
+ <width value="595"/>
+ <height value="842"/>
+ <unit value="metric"/>
+ </paper>
+ <paper name="A5">
+ <description value="A5"/>
+ <comment value="148mm x 210mm"/>
+ <width value="420"/>
+ <height value="595"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="A6">
+ <description value="A6"/>
+ <comment value="105mm x 148mm"/>
+ <width value="297"/>
+ <height value="420"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="A7">
+ <description value="A7"/>
+ <comment value="74mm x 105mm"/>
+ <width value="210"/>
+ <height value="297"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="A8">
+ <description value="A8"/>
+ <comment value="52mm x 74mm"/>
+ <width value="148"/>
+ <height value="210"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="A9">
+ <description value="A9"/>
+ <comment value="37mm x 52mm"/>
+ <width value="105"/>
+ <height value="148"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="A10">
+ <description value="A10"/>
+ <comment value="26mm x 37mm"/>
+ <width value="73"/>
+ <height value="105"/>
+ <unit value="metric-extended"/>
+ </paper>
+<!--
+ Stock sizes for normal trims.
+ Allowance for trim is 3 millimetres.
+-->
+ <paper name="w2437h3458">
+ <description value="RA0"/>
+ <comment value="860mm x 1220mm"/>
+ <width value="2437"/>
+ <height value="3458"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w1729h2437">
+ <description value="RA1"/>
+ <comment value="610mm x 860mm"/>
+ <width value="1729"/>
+ <height value="2437"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w1218h1729">
+ <description value="RA2"/>
+ <comment value="430mm x 610mm"/>
+ <width value="1218"/>
+ <height value="1729"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w864h1218">
+ <description value="RA3"/>
+ <comment value="305mm x 430mm"/>
+ <width value="864"/>
+ <height value="1218"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w609h864">
+ <description value="RA4"/>
+ <comment value="215mm x 305mm"/>
+ <width value="609"/>
+ <height value="864"/>
+ <unit value="metric-extended"/>
+ </paper>
+<!--
+ Stock sizes for bled work or extra trims.
+-->
+ <paper name="w2551h3628">
+ <description value="SRA0"/>
+ <comment value="900mm x 1280mm"/>
+ <width value="2551"/>
+ <height value="3628"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w1814h2551">
+ <description value="SRA1"/>
+ <comment value="640mm x 900mm"/>
+ <width value="1814"/>
+ <height value="2551"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w1275h1814">
+ <description value="SRA2"/>
+ <comment value="450mm x 640mm"/>
+ <width value="1275"/>
+ <height value="1814"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w907h1275">
+ <description value="SRA3"/>
+ <comment value="320mm x 450mm"/>
+ <width value="907"/>
+ <height value="1275"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w637h907">
+ <description value="SRA4"/>
+ <comment value="225mm x 320mm"/>
+ <width value="637"/>
+ <height value="907"/>
+ <unit value="metric-extended"/>
+ </paper>
+<!-- GROUP: International B -->
+<!--
+ "B" series: Posters, wall charts and similar items.
+-->
+ <paper name="w5669h8016">
+ <description value="4B ISO"/>
+ <comment value="2000mm x 2828mm"/>
+ <width value="5669"/>
+ <height value="8016"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w4008h5669">
+ <description value="2B ISO"/>
+ <comment value="1414mm x 2000mm"/>
+ <width value="4008"/>
+ <height value="5669"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="ISOB0">
+ <description value="B0 ISO"/>
+ <comment value="1000mm x 1414mm"/>
+ <width value="2834"/>
+ <height value="4008"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="ISOB1">
+ <description value="B1 ISO"/>
+ <comment value="707mm x 1000mm"/>
+ <width value="2004"/>
+ <height value="2834"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="ISOB2">
+ <description value="B2 ISO"/>
+ <comment value="500mm x 707mm"/>
+ <width value="1417"/>
+ <height value="2004"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="ISOB3">
+ <description value="B3 ISO"/>
+ <comment value="353mm x 500mm"/>
+ <width value="1000"/>
+ <height value="1417"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="ISOB4">
+ <description value="B4 ISO"/>
+ <comment value="250mm x 353mm"/>
+ <width value="708"/>
+ <height value="1000"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="ISOB5">
+ <description value="B5 ISO"/>
+ <comment value="176mm x 250mm"/>
+ <width value="498"/>
+ <height value="708"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="ISOB6">
+ <description value="B6 ISO"/>
+ <comment value="125mm x 176mm"/>
+ <width value="354"/>
+ <height value="498"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="ISOB7">
+ <description value="B7 ISO"/>
+ <comment value="88mm x 125mm"/>
+ <width value="249"/>
+ <height value="354"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="ISOB8">
+ <description value="B8 ISO"/>
+ <comment value="62mm x 88mm"/>
+ <width value="175"/>
+ <height value="249"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="ISOB9">
+ <description value="B9 ISO"/>
+ <comment value="44mm x 62mm"/>
+ <width value="124"/>
+ <height value="175"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="ISOB10">
+ <description value="B10 ISO"/>
+ <comment value="31mm x 44mm"/>
+ <width value="87"/>
+ <height value="124"/>
+ <unit value="metric-extended"/>
+ </paper>
+<!--
+ JIS
+-->
+ <paper name="SuperB0">
+ <description value="Super B0 JIS"/>
+ <width value="3167"/> <!-- Should be 3169, but Epson driver doesn't like that -->
+ <height value="4478"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="B0">
+ <description value="B0 JIS"/>
+ <width value="2919"/>
+ <height value="4127"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="B1">
+ <description value="B1 JIS"/>
+ <width value="2063"/>
+ <height value="2919"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="B2">
+ <description value="B2 JIS"/>
+ <width value="1459"/>
+ <height value="2063"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="B3">
+ <description value="B3 JIS"/>
+ <width value="1029"/>
+ <height value="1459"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="B4">
+ <description value="B4 JIS"/>
+ <width value="727"/>
+ <height value="1029"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="B5">
+ <description value="B5 JIS"/>
+ <width value="518"/>
+ <height value="727"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="B6">
+ <description value="B6 JIS"/>
+ <width value="362"/>
+ <height value="518"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="B7">
+ <description value="B7 JIS"/>
+ <width value="257"/>
+ <height value="362"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="B8">
+ <description value="B8 JIS"/>
+ <width value="180"/>
+ <height value="257"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="B9">
+ <description value="B9 JIS"/>
+ <width value="127"/>
+ <height value="180"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="B10">
+ <description value="B10 JIS"/>
+ <width value="90"/>
+ <height value="127"/>
+ <unit value="metric-extended"/>
+ </paper>
+<!-- GROUP: International C -->
+<!--
+ "C" series: Envelopes or folders suitable for A size stationery.
+-->
+ <paper name="C0">
+ <description value="C0"/>
+ <comment value="917mm x 1297mm"/>
+ <width value="2599"/>
+ <height value="3676"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="C1">
+ <description value="C1"/>
+ <comment value="648mm x 917mm"/>
+ <width value="1836"/>
+ <height value="2599"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="C2">
+ <description value="C2"/>
+ <comment value="458mm x 648mm"/>
+ <width value="1298"/>
+ <height value="1836"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="C3">
+ <description value="C3"/>
+ <comment value="324mm x 458mm"/>
+ <width value="918"/>
+ <height value="1298"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="C4">
+ <description value="C4"/>
+ <comment value="229mm x 324mm"/>
+ <width value="649"/>
+ <height value="918"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="C5">
+ <description value="C5"/>
+ <comment value="162mm x 229mm"/>
+ <width value="459"/>
+ <height value="649"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w354h918">
+ <description value="B6-C4"/>
+ <comment value="125mm x 324mm"/>
+ <width value="354"/>
+ <height value="918"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="C6">
+ <description value="C6"/>
+ <comment value="114mm x 162mm"/>
+ <width value="323"/>
+ <height value="459"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="DL">
+ <description value="DL"/>
+ <comment value="110mm x 220mm"/>
+ <width value="311"/>
+ <height value="623"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w229h459">
+ <description value="C7-6"/>
+ <comment value="81mm x 162mm"/>
+ <width value="229"/>
+ <height value="459"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="C7">
+ <description value="C7"/>
+ <comment value="81mm x 114mm"/>
+ <width value="229"/>
+ <height value="323"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="C8">
+ <description value="C8"/>
+ <comment value="57mm x 81mm"/>
+ <width value="161"/>
+ <height value="229"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="C9">
+ <description value="C9"/>
+ <comment value="40mm x 57mm"/>
+ <width value="113"/>
+ <height value="161"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="C10">
+ <description value="C10"/>
+ <comment value="28mm x 40mm"/>
+ <width value="79"/>
+ <height value="113"/>
+ <unit value="metric-extended"/>
+ </paper>
+<!-- GROUP: US CAD -->
+<!--
+ US CAD standard paper sizes
+-->
+ <paper name="ARCHA">
+ <description value="ArchA"/>
+ <comment value="9in x 12in"/>
+ <width value="648"/>
+ <height value="864"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="ARCHA_trans">
+ <description value="ArchA transposed"/>
+ <comment value="12in x 9in"/>
+ <width value="864"/>
+ <height value="648"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="ARCHB">
+ <description value="ArchB"/>
+ <comment value="12in x 18in"/>
+ <width value="864"/>
+ <height value="1296"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="ARCHB_trans">
+ <description value="ArchB transposed"/>
+ <comment value="18in x 12in"/>
+ <width value="1296"/>
+ <height value="864"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="ARCHC">
+ <description value="ArchC"/>
+ <comment value="18in x 24in"/>
+ <width value="1296"/>
+ <height value="1728"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="ARCHC_trans">
+ <description value="ArchC transposed"/>
+ <comment value="24in x 18in"/>
+ <width value="1728"/>
+ <height value="1296"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="ARCHD">
+ <description value="ArchD"/>
+ <comment value="24in x 36in"/>
+ <width value="1728"/>
+ <height value="2592"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="ARCHD_trans">
+ <description value="ArchD transposed"/>
+ <comment value="36in x 24in"/>
+ <width value="2592"/>
+ <height value="1728"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="ARCHE">
+ <description value="ArchE"/>
+ <comment value="36in x 48in"/>
+ <width value="2592"/>
+ <height value="3456"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="ARCHE_trans">
+ <description value="ArchE transposed"/>
+ <comment value="48in x 36in"/>
+ <width value="3456"/>
+ <height value="2592"/>
+ <unit value="english-extended"/>
+ </paper>
+<!-- GROUP: Foolscap -->
+ <paper name="w612h936">
+ <description value="American foolscap"/>
+ <width value="612"/>
+ <height value="936"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w648h936">
+ <description value="European foolscap"/>
+ <width value="648"/>
+ <height value="936"/>
+ <unit value="english-extended"/>
+ </paper>
+<!-- GROUP: Book -->
+<!--
+ Sizes for book production
+ The BPIF and the Publishers Association jointly recommend ten
+ standard metric sizes for case-bound titles as follows:
+-->
+ <paper name="w535h697">
+ <description value="Crown Quarto"/>
+ <comment value="189mm x 246mm"/>
+ <width value="535"/>
+ <height value="697"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w569h731">
+ <description value="Large Crown Quarto"/>
+ <comment value="201mm x 258mm"/>
+ <width value="569"/>
+ <height value="731"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w620h782">
+ <description value="Demy Quarto"/>
+ <comment value="219mm x 276mm"/>
+ <width value="620"/>
+ <height value="782"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w671h884">
+ <description value="Royal Quarto"/>
+ <comment value="237mm x 312mm"/>
+ <width value="671"/>
+ <height value="884"/>
+ <unit value="metric-extended"/>
+ </paper>
+<!--
+ <paper name="ISO A4">
+ <description value="ISO A4"/>
+ <comment value="210mm x 297mm"/>
+ <width value="595"/>
+ <height value="841"/>
+ <unit value="metric-extended"/>
+ </paper>
+-->
+ <paper name="w348h527">
+ <description value="Crown Octavo"/>
+ <comment value="123mm x 186mm"/>
+ <width value="348"/>
+ <height value="527"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w365h561">
+ <description value="Large Crown Octavo"/>
+ <comment value="129mm x 198mm"/>
+ <width value="365"/>
+ <height value="561"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w391h612">
+ <description value="Demy Octavo"/>
+ <comment value="138mm x 216mm"/>
+ <width value="391"/>
+ <height value="612"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w442h663">
+ <description value="Royal Octavo"/>
+ <comment value="156mm x 234mm"/>
+ <width value="442"/>
+ <height value="663"/>
+ <unit value="metric-extended"/>
+ </paper>
+<!--
+ <paper name="ISO A5">
+ <description value="ISO A5"/>
+ <comment value="148mm x 210mm"/>
+ <width value="419"/>
+ <height value="595"/>
+ <unit value="metric-extended"/>
+ </paper>
+-->
+<!--
+ Paperback sizes in common usage
+-->
+ <paper name="w314h504">
+ <description value="Small paperback"/>
+ <comment value="111mm x 178mm"/>
+ <width value="314"/>
+ <height value="504"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w314h513">
+ <description value="Penguin small paperback"/>
+ <comment value="111mm x 181mm"/>
+ <width value="314"/>
+ <height value="513"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="cw365h561">
+ <description value="Penguin large paperback"/>
+ <comment value="129mm x 198mm"/>
+ <width value="365"/>
+ <height value="561"/>
+ <unit value="metric-extended"/>
+ </paper>
+<!-- Group: Miscellaneous -->
+<!--
+ Miscellaneous sizes
+-->
+ <paper name="w283h425">
+ <description value="10cm x 15cm"/>
+ <comment value="100 x 150mm"/>
+ <width value="283"/>
+ <height value="425"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w283h420">
+ <description value="Hagaki Card"/>
+ <comment value="100mm x 148mm"/>
+ <width value="283"/>
+ <height value="420"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w420h567">
+ <description value="Oufuku Card"/>
+ <comment value="148mm x 200mm"/>
+ <width value="420"/>
+ <height value="567"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w340h666">
+ <description value="Japanese long envelope #3"/>
+ <width value="340"/>
+ <height value="666"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w255h581">
+ <description value="Japanese long envelope #4"/>
+ <width value="255"/>
+ <height value="581"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w680h941">
+ <description value="Japanese Kaku envelope #4"/>
+ <width value="680"/>
+ <height value="941"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="COM10">
+ <description value="Commercial 10"/>
+ <comment value="US Commercial 10 env"/>
+ <width value="297"/>
+ <height value="684"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w315h414">
+ <description value="A2 Invitation"/>
+ <comment value="US A2 invitation"/>
+ <width value="315"/>
+ <height value="414"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="Monarch">
+ <description value="Monarch Envelope"/>
+ <comment value="3.875in x 7.5in"/>
+ <width value="279"/>
+ <height value="540"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w288h387">
+ <description value="4x5 3/8"/>
+ <width value="288"/>
+ <height value="387"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w288h504">
+ <description value="4x7"/>
+ <width value="288"/>
+ <height value="504"/>
+ <unit value="english-extended"/>
+ </paper>
+ <paper name="w253h337">
+ <description value="CP_L"/>
+ <comment value="89mm x 119mm"/>
+ <width value="253"/>
+ <height value="337"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w244h155">
+ <description value="Card"/>
+ <comment value="86mm x 54mm"/>
+ <width value="244"/>
+ <height value="155"/>
+ <unit value="metric-extended"/>
+ </paper>
+ <paper name="w283h566">
+ <description value="Wide Postcard"/>
+ <comment value="100mm x 200mm"/>
+ <width value="283"/>
+ <height value="566"/>
+ <unit value="english-extended"/>
+ </paper>
+<!--
+ Custom
+-->
+ <paper name="Custom">
+ <description value="Custom"/>
+ <comment value="User-Defined Size"/>
+ <width value="0"/>
+ <height value="0"/>
+ <unit value="english"/>
+ </paper>
+<!-- Group: Roll Papers -->
+ <paper name="w252">
+ <description value="89 mm Roll Paper"/>
+ <width value="252"/>
+ <height value="0"/>
+ <unit value="metric"/>
+ </paper>
+ <paper name="w288">
+ <description value="4 Inch Roll Paper"/>
+ <width value="288"/>
+ <height value="0"/>
+ <unit value="english"/>
+ </paper>
+ <paper name="w360">
+ <description value="5 Inch Roll Paper"/>
+ <width value="360"/>
+ <height value="0"/>
+ <unit value="english"/>
+ </paper>
+ <paper name="w595">
+ <description value="210 mm Roll Paper"/>
+ <width value="595"/>
+ <height value="0"/>
+ <unit value="metric"/>
+ </paper>
+ <paper name="w936">
+ <description value="13 Inch Roll Paper"/>
+ <width value="936"/>
+ <height value="0"/>
+ <unit value="english"/>
+ </paper>
+ <paper name="w1584">
+ <description value="22 Inch Roll Paper"/>
+ <width value="1584"/>
+ <height value="0"/>
+ <unit value="english"/>
+ </paper>
+ <paper name="w1728">
+ <description value="24 Inch Roll Paper"/>
+ <width value="1728"/>
+ <height value="0"/>
+ <unit value="english"/>
+ </paper>
+ <paper name="w2592">
+ <description value="36 Inch Roll Paper"/>
+ <width value="2592"/>
+ <height value="0"/>
+ <unit value="english"/>
+ </paper>
+ <paper name="w3168">
+ <description value="44 Inch Roll Paper"/>
+ <width value="3168"/>
+ <height value="0"/>
+ <unit value="english"/>
+ </paper>
+ </paperdef>
+</gutenprint>
diff --git a/src/main/path.c b/src/main/path.c
new file mode 100644
index 0000000..86e131b
--- /dev/null
+++ b/src/main/path.c
@@ -0,0 +1,320 @@
+/*
+ * "$Id: path.c,v 1.17 2004/09/17 18:38:21 rleigh Exp $"
+ *
+ * Gutenprint path functions - split and search paths.
+ *
+ * Copyright 2002 Roger Leigh (rleigh@debian.org)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <dirent.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+static int stpi_path_check(const struct dirent *module);
+static char *stpi_path_merge(const char *path,
+ const char *file);
+static int stpi_scandir (const char *dir,
+ struct dirent ***namelist,
+ int (*sel) (const struct dirent *),
+ int (*cmp) (const void *, const void *));
+
+/* WARNING: This is not thread safe! -- rlk 20030721 */
+static const char *path_check_path; /* Path for stpi_scandir() callback */
+static const char *path_check_suffix; /* Suffix for stpi_scandir() callback */
+
+
+static int
+dirent_sort(const void *a,
+ const void *b)
+{
+ return strcoll ((*(const struct dirent **) a)->d_name,
+ (*(const struct dirent **) b)->d_name);
+}
+
+
+/*
+ * Make a list of all modules in the search path.
+ */
+stp_list_t *
+stp_path_search(stp_list_t *dirlist, /* List of directories to search */
+ const char *suffix) /* Required filename suffix */
+{
+ stp_list_t *findlist; /* List of files to return */
+ stp_list_item_t *diritem; /* Current directory */
+ struct dirent** module_dir; /* Current directory contents */
+ char *module_name; /* File name to check */
+ int n; /* Number of directory entries */
+
+ if (!dirlist)
+ return NULL;
+
+ path_check_suffix = suffix;
+
+ findlist = stp_list_create();
+ if (!findlist)
+ return NULL;
+ stp_list_set_freefunc(findlist, stp_list_node_free_data);
+
+ diritem = stp_list_get_start(dirlist);
+ while (diritem)
+ {
+ path_check_path = (const char *) stp_list_item_get_data(diritem);
+ stp_deprintf(STP_DBG_PATH, "stp-path: directory: %s\n",
+ (const char *) stp_list_item_get_data(diritem));
+ n = stpi_scandir ((const char *) stp_list_item_get_data(diritem),
+ &module_dir, stpi_path_check, dirent_sort);
+ if (n >= 0)
+ {
+ int idx;
+ for (idx = 0; idx < n; ++idx)
+ {
+ module_name = stpi_path_merge((const char *) stp_list_item_get_data(diritem),
+ module_dir[idx]->d_name);
+ stp_list_item_create(findlist, NULL, module_name);
+ free (module_dir[idx]); /* Must use plain free() */
+ }
+ free (module_dir); /* Must use plain free() */
+ }
+ diritem = stp_list_item_next(diritem);
+ }
+ return findlist;
+}
+
+
+/*
+ * stpi_scandir() callback. Check the filename is sane, has the
+ * correct mode bits and suffix.
+ */
+static int
+stpi_path_check(const struct dirent *module) /* File to check */
+{
+ int namelen; /* Filename length */
+ int status = 0; /* Error status */
+ int savederr; /* Saved errno */
+ char *filename; /* Filename */
+ struct stat modstat; /* stat() output */
+
+ savederr = errno; /* since we are a callback, preserve
+ stpi_scandir() state */
+
+ filename = stpi_path_merge(path_check_path, module->d_name);
+
+ namelen = strlen(filename);
+ /* make sure we can take off suffix (e.g. .la)
+ and still have a sane filename */
+ if (namelen >= strlen(path_check_suffix) + 1)
+ {
+ if (!stat (filename, &modstat))
+ {
+ /* check file exists, and is a regular file */
+ if (S_ISREG(modstat.st_mode))
+ status = 1;
+ if (strncmp(filename + (namelen - strlen(path_check_suffix)),
+ path_check_suffix,
+ strlen(path_check_suffix)))
+ {
+ status = 0;
+ }
+ }
+ }
+
+ if (status)
+ stp_deprintf(STP_DBG_PATH, "stp-path: file: `%s'\n", filename);
+
+ stp_free(filename);
+ filename = NULL;
+
+ errno = savederr;
+ return status;
+}
+
+
+/*
+ * Join a path and filename together.
+ */
+static char *
+stpi_path_merge(const char *path, /* Path */
+ const char *file) /* Filename */
+{
+ char *filename; /* Filename to return */
+ int namelen = strlen(path) + strlen(file) + 2;
+ filename = (char *) stp_malloc(namelen * sizeof(char));
+ strcpy (filename, path);
+ strcat (filename, "/");
+ strcat (filename, file);
+ filename[namelen - 1] = '\0';
+ return filename;
+}
+
+
+/*
+ * Split a PATH-type string (colon-delimited) into separate
+ * directories.
+ */
+void
+stp_path_split(stp_list_t *list, /* List to add directories to */
+ const char *path) /* Path to split */
+{
+ const char *start = path; /* Start of path name */
+ const char *end = NULL; /* End of path name */
+ char *dir = NULL; /* Path name */
+ int len; /* Length of path name */
+
+ while (start)
+ {
+ end = (const char *) strchr(start, ':');
+ if (!end)
+ len = strlen(start) + 1;
+ else
+ len = (end - start);
+
+ if (len && !(len == 1 && !end))
+ {
+ dir = (char *) stp_malloc(len + 1);
+ strncpy(dir, start, len);
+ dir[len] = '\0';
+ stp_list_item_create(list, NULL, dir);
+ }
+ if (!end)
+ {
+ start = NULL;
+ break;
+ }
+ start = end + 1;
+ }
+}
+
+/* Adapted from GNU libc <dirent.h>
+ These macros extract size information from a `struct dirent *'.
+ They may evaluate their argument multiple times, so it must not
+ have side effects. Each of these may involve a relatively costly
+ call to `strlen' on some systems, so these values should be cached.
+
+ _D_EXACT_NAMLEN (DP) returns the length of DP->d_name, not including
+ its terminating null character.
+
+ _D_ALLOC_NAMLEN (DP) returns a size at least (_D_EXACT_NAMLEN (DP) + 1);
+ that is, the allocation size needed to hold the DP->d_name string.
+ Use this macro when you don't need the exact length, just an upper bound.
+ This macro is less likely to require calling `strlen' than _D_EXACT_NAMLEN.
+ */
+
+#ifdef _DIRENT_HAVE_D_NAMLEN
+# ifndef _D_EXACT_NAMLEN
+# define _D_EXACT_NAMLEN(d) ((d)->d_namlen)
+# endif
+# ifndef _D_ALLOC_NAMLEN
+# define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN (d) + 1)
+# endif
+#else
+# ifndef _D_EXACT_NAMLEN
+# define _D_EXACT_NAMLEN(d) (strlen ((d)->d_name))
+# endif
+# ifndef _D_ALLOC_NAMLEN
+# ifdef _DIRENT_HAVE_D_RECLEN
+# define _D_ALLOC_NAMLEN(d) (((char *) (d) + (d)->d_reclen) - &(d)->d_name[0])
+# else
+# define _D_ALLOC_NAMLEN(d) (sizeof (d)->d_name > 1 ? sizeof (d)->d_name : \
+ _D_EXACT_NAMLEN (d) + 1)
+# endif
+# endif
+#endif
+
+/*
+ * BSD scandir() replacement, from glibc
+ */
+static int
+stpi_scandir (const char *dir,
+ struct dirent ***namelist,
+ int (*sel) (const struct dirent *),
+ int (*cmp) (const void *, const void *))
+{
+ DIR *dp = opendir (dir);
+ struct dirent **v = NULL;
+ size_t vsize = 0, i;
+ struct dirent *d;
+ int save;
+
+ if (dp == NULL)
+ return -1;
+
+ save = errno;
+ errno = 0;
+
+ i = 0;
+ while ((d = readdir (dp)) != NULL)
+ if (sel == NULL || (*sel) (d))
+ {
+ struct dirent *vnew;
+ size_t dsize;
+
+ /* Ignore errors from sel or readdir */
+ errno = 0;
+
+ if (i == vsize)
+ {
+ struct dirent **new;
+ if (vsize == 0)
+ vsize = 10;
+ else
+ vsize *= 2;
+ new = (struct dirent **) realloc (v, vsize * sizeof (*v));
+ if (new == NULL)
+ break;
+ v = new;
+ }
+
+ dsize = &d->d_name[_D_ALLOC_NAMLEN (d)] - (char *) d;
+ vnew = (struct dirent *) malloc (dsize);
+ if (vnew == NULL)
+ break;
+
+ v[i++] = (struct dirent *) memcpy (vnew, d, dsize);
+ }
+
+ if (errno != 0)
+ {
+ save = errno;
+
+ while (i > 0)
+ free (v[--i]);
+ free (v);
+
+ i = -1;
+ }
+ else
+ {
+ /* Sort the list if we have a comparison function to sort with. */
+ if (cmp != NULL)
+ qsort (v, i, sizeof (*v), cmp);
+
+ *namelist = v;
+ }
+
+ (void) closedir (dp);
+ errno = save;
+
+ return i;
+}
diff --git a/src/main/print-canon.c b/src/main/print-canon.c
index e021dc3..a07699c 100644
--- a/src/main/print-canon.c
+++ b/src/main/print-canon.c
@@ -1,5 +1,5 @@
/*
- * "$Id: print-canon.c,v 1.71.2.9 2003/10/19 23:48:19 rlk Exp $"
+ * "$Id: print-canon.c,v 1.155 2005/05/08 03:10:37 rlk Exp $"
*
* Print plug-in CANON BJL driver for the GIMP.
*
@@ -42,9 +42,9 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#include <gimp-print/gimp-print.h>
-#include "gimp-print-internal.h"
-#include <gimp-print/gimp-print-intl-internal.h>
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
#include <string.h>
#include <stdio.h>
#if defined(HAVE_VARARGS_H) && !defined(HAVE_STDARG_H)
@@ -52,7 +52,15 @@
#else
#include <stdarg.h>
#endif
-#include <ctype.h>
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+/* Solaris with gcc has problems because gcc's limits.h doesn't #define */
+/* this */
+#ifndef CHAR_BIT
+#define CHAR_BIT 8
+#endif
#if (0)
#define EXPERIMENTAL_STUFF 0
@@ -66,9 +74,26 @@
#define MAX_PHYSICAL_BPI 1440
#define MAX_OVERSAMPLED 8
#define MAX_BPP 4
-#define BITS_PER_BYTE 8
#define COMPBUFWIDTH (MAX_PHYSICAL_BPI * MAX_OVERSAMPLED * MAX_BPP * \
- MAX_CARRIAGE_WIDTH / BITS_PER_BYTE)
+ MAX_CARRIAGE_WIDTH / CHAR_BIT)
+
+#define MIN(a,b) (((a)<(b)) ? (a) : (b))
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+
+static const int channel_color_map[] =
+{
+ STP_ECOLOR_K, STP_ECOLOR_C, STP_ECOLOR_M, STP_ECOLOR_Y, STP_ECOLOR_C, STP_ECOLOR_M, STP_ECOLOR_Y
+};
+
+static const int subchannel_color_map[] =
+{
+ 0, 0, 0, 0, 1, 1, 1
+};
+
+static const double ink_darknesses[] =
+{
+ 1.0, 0.31 / .5, 0.61 / .97, 0.08
+};
#define USE_3BIT_FOLD_TYPE 323
@@ -146,9 +171,9 @@ typedef struct canon_densities
typedef struct canon_variable_ink
{
- const stp_simple_dither_range_t *range;
- int count;
double density;
+ const stp_shade_t *shades;
+ int numshades;
} canon_variable_ink_t;
typedef struct canon_variable_inkset
@@ -197,9 +222,9 @@ typedef struct canon_variable_printmode
const double density; /* density multiplier */
const double gamma; /* gamma multiplier */
const canon_variable_inkset_t *inks; /* ink definition */
- const double *lum_adjustment; /* optional lum adj. */
- const double *hue_adjustment; /* optional hue adj. */
- const double *sat_adjustment; /* optional sat adj. */
+ const char *lum_adjustment; /* optional lum adj. */
+ const char *hue_adjustment; /* optional hue adj. */
+ const char *sat_adjustment; /* optional sat adj. */
} canon_variable_printmode_t;
#endif
@@ -211,80 +236,78 @@ typedef struct canon_variable_printmode
* if you get better results. Please send mail to thaller@ph.tum.de
*/
+#define DECLARE_INK(name, density) \
+static const canon_variable_ink_t name##_ink = \
+{ \
+ density, \
+ name##_shades, \
+ sizeof(name##_shades) / sizeof(stp_shade_t) \
+}
+
+#define SHADE(density, name) \
+{ density, sizeof(name)/sizeof(stp_dotsize_t), name }
+
/*
* Dither ranges specifically for Cyan/LightCyan (see NOTE above)
*
*/
-static const stp_simple_dither_range_t canon_dither_ranges_Cc_1bit[] =
+
+static const stp_dotsize_t single_dotsize[] =
{
- { 0.25, 0x1, 1, 1 },
- { 1.0, 0x1, 0, 1 }
+ { 0x1, 1.0 }
};
-static const canon_variable_ink_t canon_ink_Cc_1bit =
+static const stp_shade_t canon_Cc_1bit_shades[] =
{
- canon_dither_ranges_Cc_1bit,
- sizeof(canon_dither_ranges_Cc_1bit) / sizeof(stp_simple_dither_range_t),
- .75
+ SHADE(1.0, single_dotsize),
+ SHADE(0.25, single_dotsize),
};
+DECLARE_INK(canon_Cc_1bit, 0.75);
+
/*
* Dither ranges specifically for Magenta/LightMagenta (see NOTE above)
*
*/
-static const stp_simple_dither_range_t canon_dither_ranges_Mm_1bit[] =
-{
- { 0.26, 0x1, 1, 1 },
- { 1.0, 0x1, 0, 1 }
-};
-static const canon_variable_ink_t canon_ink_Mm_1bit =
+static const stp_shade_t canon_Mm_1bit_shades[] =
{
- canon_dither_ranges_Mm_1bit,
- sizeof(canon_dither_ranges_Mm_1bit) / sizeof(stp_simple_dither_range_t),
- .75
+ SHADE(1.0, single_dotsize),
+ SHADE(0.26, single_dotsize),
};
+DECLARE_INK(canon_Mm_1bit, 0.75);
/*
* Dither ranges specifically for any Color and 2bit/pixel (see NOTE above)
*
*/
-static const stp_simple_dither_range_t canon_dither_ranges_X_2bit[] =
+static const stp_dotsize_t two_bit_dotsize[] =
{
- { 0.45, 0x1, 0, 1 },
- { 0.68, 0x2, 0, 2 },
- { 1.0, 0x3, 0, 3 }
+ { 0x1, 0.45 },
+ { 0x2, 0.68 },
+ { 0x3, 1.0 }
};
-static const canon_variable_ink_t canon_ink_X_2bit =
+static const stp_shade_t canon_X_2bit_shades[] =
{
- canon_dither_ranges_X_2bit,
- sizeof(canon_dither_ranges_X_2bit) / sizeof(stp_simple_dither_range_t),
- 1.0
+ SHADE(1.0, two_bit_dotsize)
};
+DECLARE_INK(canon_X_2bit, 1.0);
+
/*
* Dither ranges specifically for any Color/LightColor and 2bit/pixel
* (see NOTE above)
*/
-static const stp_simple_dither_range_t canon_dither_ranges_Xx_2bit[] =
-{
- { 0.15, 0x1, 1, 1 },
- { 0.227, 0x2, 1, 2 },
-/*{ 0.333, 0x3, 1, 3 }, */
- { 0.45, 0x1, 0, 1 },
- { 0.68, 0x2, 0, 2 },
- { 1.0, 0x3, 0, 3 }
-};
-
-static const canon_variable_ink_t canon_ink_Xx_2bit =
+static const stp_shade_t canon_Xx_2bit_shades[] =
{
- canon_dither_ranges_Xx_2bit,
- sizeof(canon_dither_ranges_Xx_2bit) / sizeof(stp_simple_dither_range_t),
- 1.0
+ SHADE(1.0, two_bit_dotsize),
+ SHADE(0.33, two_bit_dotsize),
};
+DECLARE_INK(canon_Xx_2bit, 1.0);
+
/*
* Dither ranges specifically for any Color and 3bit/pixel
* (see NOTE above)
@@ -296,48 +319,35 @@ static const canon_variable_ink_t canon_ink_Xx_2bit =
*
*
*/
-static const stp_simple_dither_range_t canon_dither_ranges_X_3bit[] =
-{
- { 0.45, 0x1, 0, 1 },
- { 0.55, 0x2, 0, 2 },
- { 0.66, 0x3, 0, 3 },
- { 0.77, 0x4, 0, 4 },
- { 0.88, 0x5, 0, 5 },
- { 1.0, 0x6, 0, 6 }
+static const stp_dotsize_t three_bit_dotsize[] =
+{
+ { 0x1, 0.45 },
+ { 0x2, 0.55 },
+ { 0x3, 0.66 },
+ { 0x4, 0.77 },
+ { 0x5, 0.88 },
+ { 0x6, 1.0 }
};
-static const canon_variable_ink_t canon_ink_X_3bit =
+static const stp_shade_t canon_X_3bit_shades[] =
{
- canon_dither_ranges_X_3bit,
- sizeof(canon_dither_ranges_X_3bit) / sizeof(stp_simple_dither_range_t),
- 1.0
+ SHADE(1.0, three_bit_dotsize)
};
+DECLARE_INK(canon_X_3bit, 1.0);
+
/*
* Dither ranges specifically for any Color/LightColor and 3bit/pixel
* (see NOTE above)
*/
-static const stp_simple_dither_range_t canon_dither_ranges_Xx_3bit[] =
-{
- { 0.15, 0x1, 1, 1 },
- { 0.227, 0x2, 1, 2 },
- { 0.333, 0x3, 1, 3 },
-/* { 0.333, 0x3, 1, 3 }, */
- { 0.45, 0x1, 0, 1 },
- { 0.55, 0x2, 0, 2 },
- { 0.66, 0x3, 0, 3 },
- { 0.77, 0x4, 0, 4 },
- { 0.88, 0x5, 0, 5 },
- { 1.0, 0x6, 0, 6 }
-};
-
-static const canon_variable_ink_t canon_ink_Xx_3bit =
+static const stp_shade_t canon_Xx_3bit_shades[] =
{
- canon_dither_ranges_Xx_3bit,
- sizeof(canon_dither_ranges_Xx_3bit) / sizeof(stp_simple_dither_range_t),
- 1.0
+ SHADE(1.0, three_bit_dotsize),
+ SHADE(0.33, three_bit_dotsize),
};
+DECLARE_INK(canon_Xx_3bit, 1.0);
+
/* Inkset for printing in CMY and 1bit/pixel */
static const canon_variable_inkset_t ci_CMY_1 =
@@ -351,9 +361,9 @@ static const canon_variable_inkset_t ci_CMY_1 =
/* Inkset for printing in CMY and 2bit/pixel */
static const canon_variable_inkset_t ci_CMY_2 =
{
- &canon_ink_X_2bit,
- &canon_ink_X_2bit,
- &canon_ink_X_2bit,
+ &canon_X_2bit_ink,
+ &canon_X_2bit_ink,
+ &canon_X_2bit_ink,
NULL
};
@@ -369,8 +379,8 @@ static const canon_variable_inkset_t ci_CMYK_1 =
/* Inkset for printing in CcMmYK and 1bit/pixel */
static const canon_variable_inkset_t ci_CcMmYK_1 =
{
- &canon_ink_Cc_1bit,
- &canon_ink_Mm_1bit,
+ &canon_Cc_1bit_ink,
+ &canon_Mm_1bit_ink,
NULL,
NULL
};
@@ -378,37 +388,37 @@ static const canon_variable_inkset_t ci_CcMmYK_1 =
/* Inkset for printing in CMYK and 2bit/pixel */
static const canon_variable_inkset_t ci_CMYK_2 =
{
- &canon_ink_X_2bit,
- &canon_ink_X_2bit,
- &canon_ink_X_2bit,
- &canon_ink_X_2bit
+ &canon_X_2bit_ink,
+ &canon_X_2bit_ink,
+ &canon_X_2bit_ink,
+ &canon_X_2bit_ink
};
/* Inkset for printing in CcMmYK and 2bit/pixel */
static const canon_variable_inkset_t ci_CcMmYK_2 =
{
- &canon_ink_Xx_2bit,
- &canon_ink_Xx_2bit,
- &canon_ink_X_2bit,
- &canon_ink_X_2bit
+ &canon_Xx_2bit_ink,
+ &canon_Xx_2bit_ink,
+ &canon_X_2bit_ink,
+ &canon_X_2bit_ink
};
/* Inkset for printing in CMYK and 3bit/pixel */
static const canon_variable_inkset_t ci_CMYK_3 =
{
- &canon_ink_X_3bit,
- &canon_ink_X_3bit,
- &canon_ink_X_3bit,
- &canon_ink_X_3bit
+ &canon_X_3bit_ink,
+ &canon_X_3bit_ink,
+ &canon_X_3bit_ink,
+ &canon_X_3bit_ink
};
/* Inkset for printing in CcMmYK and 3bit/pixel */
static const canon_variable_inkset_t ci_CcMmYK_3 =
{
- &canon_ink_Xx_3bit,
- &canon_ink_Xx_3bit,
- &canon_ink_X_3bit,
- &canon_ink_X_3bit,
+ &canon_Xx_3bit_ink,
+ &canon_Xx_3bit_ink,
+ &canon_X_3bit_ink,
+ &canon_X_3bit_ink,
};
@@ -486,50 +496,51 @@ static const canon_variable_inklist_t canon_ink_superphoto[] =
},
};
-static const double standard_sat_adjustment[49] =
-{
- 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, /* C */
- 1.8, 1.9, 1.9, 1.9, 1.7, 1.5, 1.3, 1.1, /* B */
- 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, /* M */
- 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, /* R */
- 1.0, 1.0, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, /* Y */
- 1.5, 1.4, 1.3, 1.2, 1.1, 1.0, 1.0, 1.0, /* G */
- 1.0 /* C */
-};
-
-static const double standard_lum_adjustment[49] =
-{
- 0.50, 0.6, 0.7, 0.8, 0.9, 0.86, 0.82, 0.79, /* C */
- 0.78, 0.8, 0.83, 0.87, 0.9, 0.95, 1.05, 1.15, /* B */
- 1.3, 1.25, 1.2, 1.15, 1.12, 1.09, 1.06, 1.03, /* M */
- 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, /* R */
- 1.0, 0.9, 0.8, 0.7, 0.65, 0.6, 0.55, 0.52, /* Y */
- 0.48, 0.47, 0.47, 0.49, 0.49, 0.49, 0.52, 0.51, /* G */
- 0.50 /* C */
-};
-
-static const double standard_hue_adjustment[49] =
-{
- 0.00, 0.05, 0.04, 0.01, -.03, -.10, -.18, -.26, /* C */
- -.35, -.43, -.40, -.32, -.25, -.18, -.10, -.07, /* B */
- 0.00, -.04, -.09, -.13, -.18, -.23, -.27, -.31, /* M */
- -.35, -.38, -.30, -.23, -.15, -.08, 0.00, -.02, /* R */
- 0.00, 0.08, 0.10, 0.08, 0.05, 0.03, -.03, -.12, /* Y */
- -.20, 0.17, -.20, -.17, -.15, -.12, -.10, -.08, /* G */
- 0.00, /* C */
-};
-
-static const double plain_paper_lum_adjustment[49] =
-{
- 1.2, 1.22, 1.28, 1.34, 1.39, 1.42, 1.45, 1.48, /* C */
- 1.5, 1.4, 1.3, 1.25, 1.2, 1.1, 1.05, 1.05, /* B */
- 1.05, 1.05, 1.05, 1.05, 1.05, 1.05, 1.05, 1.05, /* M */
- 1.05, 1.05, 1.05, 1.1, 1.1, 1.1, 1.1, 1.1, /* R */
- 1.1, 1.15, 1.3, 1.45, 1.6, 1.75, 1.9, 2.0, /* Y */
- 2.1, 2.0, 1.8, 1.7, 1.6, 1.5, 1.4, 1.3, /* G */
- 1.2 /* C */
-};
+static const char standard_sat_adjustment[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* B */
+/* B */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* M */
+/* M */ "1.00 0.95 0.90 0.90 0.90 0.90 0.90 0.90 " /* R */
+/* R */ "0.90 0.95 0.95 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* G */
+/* G */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char standard_lum_adjustment[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "0.65 0.67 0.70 0.72 0.77 0.80 0.82 0.85 " /* B */
+/* B */ "0.87 0.86 0.82 0.79 0.79 0.82 0.85 0.88 " /* M */
+/* M */ "0.92 0.95 0.96 0.97 0.97 0.97 0.96 0.96 " /* R */
+/* R */ "0.96 0.97 0.97 0.98 0.99 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 0.97 0.95 0.94 0.93 0.92 0.90 0.86 " /* G */
+/* G */ "0.79 0.76 0.71 0.68 0.68 0.68 0.68 0.66 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char standard_hue_adjustment[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"-6\" upper-bound=\"6\">\n"
+/* C */ "0.00 0.06 0.10 0.10 0.06 -.01 -.09 -.17 " /* B */
+/* B */ "-.25 -.33 -.38 -.38 -.36 -.34 -.34 -.34 " /* M */
+/* M */ "-.34 -.34 -.36 -.40 -.50 -.40 -.30 -.20 " /* R */
+/* R */ "-.12 -.07 -.04 -.02 0.00 0.00 0.00 0.00 " /* Y */
+/* Y */ "0.00 0.00 0.00 -.05 -.10 -.15 -.22 -.24 " /* G */
+/* G */ "-.26 -.30 -.33 -.28 -.25 -.20 -.13 -.06 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
typedef enum {
COLOR_MONOCHROME = 1,
@@ -565,26 +576,26 @@ typedef struct canon_caps {
const canon_variable_inklist_t *inxs; /* Choices of inks for this printer */
int inxs_cnt; /* number of ink definitions in inxs */
#endif
- const double *lum_adjustment;
- const double *hue_adjustment;
- const double *sat_adjustment;
+ const char *lum_adjustment;
+ const char *hue_adjustment;
+ const char *sat_adjustment;
} canon_cap_t;
-typedef struct canon_privdata_weave {
- int bidirectional; /* tells us if we are allowed to print bidirectional */
- int direction; /* stores the last direction of the print head */
-} canon_privdata_weave;
-
+typedef struct
+{
+ const canon_cap_t *caps;
+ unsigned char *cols[7];
+ int delay[7];
+ int delay_max;
+ int buf_length;
+ int out_width;
+ int left;
+ int emptylines;
+ int bits;
+ int ydpi;
+} canon_privdata_t;
-static void canon_write_line(const stp_vars_t, const canon_cap_t *, int,
- unsigned char *, int,
- unsigned char *, int,
- unsigned char *, int,
- unsigned char *, int,
- unsigned char *, int,
- unsigned char *, int,
- unsigned char *, int,
- int, int, int, int *,int);
+static void canon_write_line(stp_vars_t *v);
/* Codes for possible ink-tank combinations.
@@ -624,9 +635,6 @@ static void canon_write_line(const stp_vars_t, const canon_cap_t *, int,
#define CANON_CAP_r 0x800ul
#define CANON_CAP_g 0x1000ul
#define CANON_CAP_ACKSHORT 0x2000ul
-#define CANON_CAP_rr 0x4000ul
-#define CANON_CAP_WEAVE 0x8000ul /* S200 has to be fed with weaved data */
- /* for Resolutions above 360dpi */
#define CANON_CAP_STD0 (CANON_CAP_b|CANON_CAP_c|CANON_CAP_d|\
CANON_CAP_l|CANON_CAP_q|CANON_CAP_t)
@@ -695,9 +703,9 @@ static const canon_variable_printmode_t canon_modes_6x00[] = {
static const canon_cap_t canon_model_capabilities[] =
{
- /* default settings for unkown models */
+ /* default settings for unknown models */
- { -1, 8*72,11*72,180,180,20,20,20,20, CANON_INK_K, CANON_SLOT_ASF1, 0 },
+ { -1, 17*72/2,842,180,180,20,20,20,20, CANON_INK_K, CANON_SLOT_ASF1, 0 },
/* ******************************** */
/* */
@@ -714,27 +722,6 @@ static const canon_cap_t canon_model_capabilities[] =
/* */
/* ************************************ */
- { /* Canon S200x *//* heads: BC-24 */
- 4202, 3,
- 618, 936, /* 8.58" x 13 " */
- 180, 2880, 2880, 4,
- 10, 10, 9, 20,
- CANON_INK_CMYK | CANON_INK_CMY | CANON_INK_K,
- CANON_SLOT_ASF1,
- CANON_CAP_STD1 | CANON_CAP_rr | CANON_CAP_WEAVE,
- CANON_MODES(canon_nomodes),
-#ifndef EXPERIMENTAL_STUFF
-/* 2880dpi Resolutions: TBD */
-/* 180x180 360x360 720x720 1440x720 1440x1440 2880x2880 */
- {-1, 0, 0, 0, 0, -1},
-/*------- 360x360 720x720 1440x720 1440x1440 ---------*/
- { 1, 2, 1, 0.5, 0.3, 0.2},
- CANON_INK(canon_ink_standard),
-#endif
- standard_lum_adjustment,
- standard_hue_adjustment,
- standard_sat_adjustment
- },
{ /* Canon BJ 30 *//* heads: BC-10 */
30, 1,
@@ -1141,20 +1128,63 @@ static const canon_cap_t canon_model_capabilities[] =
};
typedef struct {
+ int x;
+ int y;
+ const char *name;
+ const char *text;
+ const char *name_dmt;
+ const char *text_dmt;
+} canon_res_t;
+
+static const canon_res_t canon_resolutions[] = {
+ { 90, 90, "90x90dpi", N_("90x90 DPI"), "90x90dmt", N_("90x90 DPI DMT") },
+ { 180, 180, "180x180dpi", N_("180x180 DPI"), "180x180dmt", N_("180x180 DPI DMT") },
+ { 360, 360, "360x360dpi", N_("360x360 DPI"), "360x360dmt", N_("360x360 DPI DMT") },
+ { 720, 360, "720x360dpi", N_("720x360 DPI"), "720x360dmt", N_("720x360 DPI DMT") },
+ { 720, 720, "720x720dpi", N_("720x720 DPI"), "720x720dmt", N_("720x720 DPI DMT") },
+ { 1440, 720, "1440x720dpi", N_("1440x720 DPI"), "1440x720dmt", N_("1440x720 DPI DMT") },
+ { 1440, 1440, "1440x1440dpi", N_("1440x1440 DPI"), "1440x1440dmt", N_("1440x1440 DPI DMT") },
+ { 2880, 2880, "2880x2880dpi", N_("2880x2880 DPI"), "2880x2880dmt", N_("2880x2880 DPI DMT") },
+ { 150, 150, "150x150dpi", N_("150x150 DPI"), "150x150dmt", N_("150x150 DPI DMT") },
+ { 300, 300, "300x300dpi", N_("300x300 DPI"), "300x300dmt", N_("300x300 DPI DMT") },
+ { 600, 300, "600x300dpi", N_("600x300 DPI"), "600x300dmt", N_("600x300 DPI DMT") },
+ { 600, 600, "600x600dpi", N_("600x600 DPI"), "600x600dmt", N_("600x600 DPI DMT") },
+ { 1200, 600, "1200x600dpi", N_("1200x600 DPI"), "1200x600dmt", N_("1200x600 DPI DMT") },
+ { 1200, 1200, "1200x1200dpi", N_("1200x1200 DPI"), "1200x1200dmt", N_("1200x1200 DPI DMT") },
+ { 2400, 2400, "2400x2400dpi", N_("2400x2400 DPI"), "2400x2400dmt", N_("2400x2400 DPI DMT") },
+ { 0, 0, NULL, NULL, NULL, NULL }
+};
+
+static const char plain_paper_lum_adjustment[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+"1.20 1.22 1.28 1.34 1.39 1.42 1.45 1.48 " /* C */
+"1.50 1.40 1.30 1.25 1.20 1.10 1.05 1.05 " /* B */
+"1.05 1.05 1.05 1.05 1.05 1.05 1.05 1.05 " /* M */
+"1.05 1.05 1.05 1.10 1.10 1.10 1.10 1.10 " /* R */
+"1.10 1.15 1.30 1.45 1.60 1.75 1.90 2.00 " /* Y */
+"2.10 2.00 1.80 1.70 1.60 1.50 1.40 1.30 " /* G */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+typedef struct {
const char *name;
const char *text;
int media_code;
double base_density;
double k_lower_scale;
double k_upper;
- const double *hue_adjustment;
- const double *lum_adjustment;
- const double *sat_adjustment;
+ const char *hue_adjustment;
+ const char *lum_adjustment;
+ const char *sat_adjustment;
} paper_t;
typedef struct {
const canon_cap_t *caps;
- int output_type;
+ int printing_color;
const paper_t *pt;
int print_head;
int colormode;
@@ -1183,31 +1213,146 @@ static const paper_t canon_paper_list[] = {
{ "Other", N_ ("Other"), 0x00, 0.50, 0.25, .5, 0, 0, 0 },
};
-/* ---- Function prototypes ----*/
+static const int paper_type_count = sizeof(canon_paper_list) / sizeof(paper_t);
+
+static const stp_parameter_t the_parameters[] =
+{
+ {
+ "PageSize", N_("Page Size"), N_("Basic Printer Setup"),
+ N_("Size of the paper being printed to"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "MediaType", N_("Media Type"), N_("Basic Printer Setup"),
+ N_("Type of media (plain paper, photo paper, etc.)"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "InputSlot", N_("Media Source"), N_("Basic Printer Setup"),
+ N_("Source (input slot) of the media"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "Resolution", N_("Resolution"), N_("Basic Printer Setup"),
+ N_("Resolution and quality of the print"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "InkType", N_("Ink Type"), N_("Advanced Printer Setup"),
+ N_("Type of ink in the printer"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "InkChannels", N_("Ink Channels"), N_("Advanced Printer Functionality"),
+ N_("Ink Channels"),
+ STP_PARAMETER_TYPE_INT, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 0, -1, 0, 0
+ },
+ {
+ "PrintingMode", N_("Printing Mode"), N_("Core Parameter"),
+ N_("Printing Output Mode"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+};
+
+static const int the_parameter_count =
+sizeof(the_parameters) / sizeof(const stp_parameter_t);
-static void canon_advance_paper(stp_vars_t, int);
+typedef struct
+{
+ const stp_parameter_t param;
+ double min;
+ double max;
+ double defval;
+ int color_only;
+} float_param_t;
+
+static const float_param_t float_parameters[] =
+{
+ {
+ {
+ "CyanDensity", N_("Cyan Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the cyan balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 1, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "MagentaDensity", N_("Magenta Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the magenta balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 2, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "YellowDensity", N_("Yellow Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the yellow balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 3, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "BlackDensity", N_("Black Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the black balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 0, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "LightCyanTransition", N_("Light Cyan Transition"), N_("Advanced Ink Adjustment"),
+ N_("Light Cyan Transition"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, -1, 1, 0
+ }, 0.0, 5.0, 1.0, 1
+ },
+ {
+ {
+ "LightMagentaTransition", N_("Light Magenta Transition"), N_("Advanced Ink Adjustment"),
+ N_("Light Magenta Transition"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, -1, 1, 0
+ }, 0.0, 5.0, 1.0, 1
+ },
+ {
+ {
+ "LightYellowTransition", N_("Light Yellow Transition"), N_("Advanced Ink Adjustment"),
+ N_("Light Yellow Transition"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, -1, 1, 0
+ }, 0.0, 5.0, 1.0, 1
+ },
+};
-static const int paper_type_count = sizeof(canon_paper_list) / sizeof(paper_t);
-static void canon_flush_pass(stp_softweave_t *sw, int passno, int model, int width,
- int hoffset, int ydpi, int xdpi, int physical_xdpi,
- int vertical_subpass);
+static const int float_parameter_count =
+sizeof(float_parameters) / sizeof(const float_param_t);
static const paper_t *
get_media_type(const char *name)
{
int i;
- for (i = 0; i < paper_type_count; i++)
- {
- /* translate paper_t.name */
- if (!strcmp(name, canon_paper_list[i].name))
- return &(canon_paper_list[i]);
- }
+ if (name)
+ for (i = 0; i < paper_type_count; i++)
+ {
+ /* translate paper_t.name */
+ if (!strcmp(name, canon_paper_list[i].name))
+ return &(canon_paper_list[i]);
+ }
return NULL;
}
-static const canon_cap_t *
-canon_get_model_capabilities(int model)
+
+static const canon_cap_t * canon_get_model_capabilities(int model)
{
int i;
int models= sizeof(canon_model_capabilities) / sizeof(canon_cap_t);
@@ -1224,9 +1369,12 @@ static int
canon_source_type(const char *name, const canon_cap_t * caps)
{
/* used internally: do not translate */
- if (!strcmp(name,"Auto")) return 4;
- if (!strcmp(name,"Manual")) return 0;
- if (!strcmp(name,"ManualNP")) return 1;
+ if (name)
+ {
+ if (!strcmp(name,"Auto")) return 4;
+ if (!strcmp(name,"Manual")) return 0;
+ if (!strcmp(name,"ManualNP")) return 1;
+ }
stp_deprintf(STP_DBG_CANON,"canon: Unknown source type '%s' - reverting to auto\n",name);
return 4;
@@ -1236,20 +1384,22 @@ static int
canon_printhead_type(const char *name, const canon_cap_t * caps)
{
/* used internally: do not translate */
- if (!strcmp(name,"Gray")) return 0;
- if (!strcmp(name,"RGB")) return 1;
- if (!strcmp(name,"CMYK")) return 2;
- if (!strcmp(name,"PhotoCMY")) return 3;
- if (!strcmp(name,"Photo")) return 4;
- if (!strcmp(name,"PhotoCMYK")) return 5;
-
- if (*name == 0) {
+ if (name)
+ {
+ if (!strcmp(name,"Gray")) return 0;
+ if (!strcmp(name,"RGB")) return 1;
+ if (!strcmp(name,"CMYK")) return 2;
+ if (!strcmp(name,"PhotoCMY")) return 3;
+ if (!strcmp(name,"Photo")) return 4;
+ if (!strcmp(name,"PhotoCMYK")) return 5;
+ }
+ if (name && *name == 0) {
if (caps->inks & CANON_INK_CMYK) return 2;
if (caps->inks & CANON_INK_CMY) return 1;
if (caps->inks & CANON_INK_K) return 0;
}
- stp_deprintf(STP_DBG_CANON,"canon: Unknown head combo '%s' - reverting to black",name);
+ stp_deprintf(STP_DBG_CANON,"canon: Unknown head combo '%s' - reverting to black\n",name);
return 0;
}
@@ -1257,30 +1407,33 @@ static colormode_t
canon_printhead_colors(const char *name, const canon_cap_t * caps)
{
/* used internally: do not translate */
- if (!strcmp(name,"Gray")) return COLOR_MONOCHROME;
- if (!strcmp(name,"RGB")) return COLOR_CMY;
- if (!strcmp(name,"CMYK")) return COLOR_CMYK;
- if (!strcmp(name,"PhotoCMY")) return COLOR_CCMMYK;
- if (!strcmp(name,"PhotoCMYK")) return COLOR_CCMMYYK;
+ if (name)
+ {
+ if (!strcmp(name,"Gray")) return COLOR_MONOCHROME;
+ if (!strcmp(name,"RGB")) return COLOR_CMY;
+ if (!strcmp(name,"CMYK")) return COLOR_CMYK;
+ if (!strcmp(name,"PhotoCMY")) return COLOR_CCMMYK;
+ if (!strcmp(name,"PhotoCMYK")) return COLOR_CCMMYYK;
+ }
- if (*name == 0) {
+ if (name && *name == 0) {
if (caps->inks & CANON_INK_CMYK) return COLOR_CMYK;
if (caps->inks & CANON_INK_CMY) return COLOR_CMY;
if (caps->inks & CANON_INK_K) return COLOR_MONOCHROME;
}
- stp_deprintf(STP_DBG_CANON,"canon: Unknown head combo '%s' - reverting to black",name);
+ stp_deprintf(STP_DBG_CANON,"canon: Unknown head combo '%s' - reverting to black\n",name);
return COLOR_MONOCHROME;
}
static unsigned char
-canon_size_type(const stp_vars_t v, const canon_cap_t * caps)
+canon_size_type(const stp_vars_t *v, const canon_cap_t * caps)
{
- const stp_papersize_t pp = stp_get_papersize_by_size(stp_get_page_height(v),
- stp_get_page_width(v));
+ const stp_papersize_t *pp = stp_get_papersize_by_size(stp_get_page_height(v),
+ stp_get_page_width(v));
if (pp)
{
- const char *name = stp_papersize_get_name(pp);
+ const char *name = pp->name;
/* used internally: do not translate */
/* built ins: */
if (!strcmp(name,"A5")) return 0x01;
@@ -1303,14 +1456,6 @@ canon_size_type(const stp_vars_t v, const canon_cap_t * caps)
return 0;
}
-static char *
-c_strdup(const char *s)
-{
- char *ret = stp_malloc(strlen(s) + 1);
- strcpy(ret, s);
- return ret;
-}
-
#ifndef EXPERIMENTAL_STUFF
static int canon_res_code(const canon_cap_t * caps, int xdpi, int ydpi)
{
@@ -1367,27 +1512,24 @@ canon_ink_type(const canon_cap_t * caps, int res_code)
#endif
}
-static const double *
-canon_lum_adjustment(const stp_printer_t printer)
+static const char *
+canon_lum_adjustment(int model)
{
- const canon_cap_t * caps=
- canon_get_model_capabilities(stp_printer_get_model(printer));
+ const canon_cap_t * caps= canon_get_model_capabilities(model);
return (caps->lum_adjustment);
}
-static const double *
-canon_hue_adjustment(const stp_printer_t printer)
+static const char *
+canon_hue_adjustment(int model)
{
- const canon_cap_t * caps=
- canon_get_model_capabilities(stp_printer_get_model(printer));
+ const canon_cap_t * caps= canon_get_model_capabilities(model);
return (caps->hue_adjustment);
}
-static const double *
-canon_sat_adjustment(const stp_printer_t printer)
+static const char *
+canon_sat_adjustment(int model)
{
- const canon_cap_t * caps=
- canon_get_model_capabilities(stp_printer_get_model(printer));
+ const canon_cap_t * caps= canon_get_model_capabilities(model);
return (caps->sat_adjustment);
}
@@ -1450,16 +1592,52 @@ canon_inks(const canon_cap_t * caps, int res_code, int colors, int bits)
}
static void
-canon_describe_resolution(const stp_printer_t printer,
- const char *resolution, int *x, int *y)
+canon_describe_resolution(const stp_vars_t *v, int *x, int *y)
{
+ const char *resolution = stp_get_string_parameter(v, "Resolution");
+ const canon_res_t *res = canon_resolutions;
+ while (res->x > 0)
+ {
+ if (strcmp(resolution, res->name) == 0 ||
+ strcmp(resolution, res->name_dmt) == 0)
+ {
+ *x = res->x;
+ *y = res->y;
+ return;
+ }
+ res++;
+ }
*x = -1;
*y = -1;
- sscanf(resolution, "%dx%d", x, y);
- return;
}
-static const stp_param_t media_sources[] =
+static const char *
+canon_describe_output(const stp_vars_t *v)
+{
+ int model = stp_get_model_id(v);
+ const canon_cap_t *caps = canon_get_model_capabilities(model);
+ const char *print_mode = stp_get_string_parameter(v, "PrintingMode");
+ const char *ink_type = stp_get_string_parameter(v, "InkType");
+ colormode_t colormode = canon_printhead_colors(ink_type,caps);
+ int printhead= canon_printhead_type(ink_type,caps);
+
+ if ((print_mode && strcmp(print_mode, "BW") == 0) ||
+ printhead == 0 || caps->inks == CANON_INK_K)
+ colormode = COLOR_MONOCHROME;
+
+ switch (colormode)
+ {
+ case COLOR_CMY:
+ return "CMY";
+ case COLOR_CMYK:
+ return "CMYK";
+ case COLOR_MONOCHROME:
+ default:
+ return "Grayscale";
+ }
+}
+
+static const stp_param_string_t media_sources[] =
{
{ "Auto", N_ ("Auto Sheet Feeder") },
{ "Manual", N_ ("Manual with Pause") },
@@ -1471,226 +1649,172 @@ static const stp_param_t media_sources[] =
* 'canon_parameters()' - Return the parameter values for the given parameter.
*/
-static stp_param_t * /* O - Parameter values */
-canon_parameters(const stp_printer_t printer, /* I - Printer model */
- const char *ppd_file, /* I - PPD file (not used) */
- const char *name, /* I - Name of parameter */
- int *count) /* O - Number of values */
+static stp_parameter_list_t
+canon_list_parameters(const stp_vars_t *v)
+{
+ stp_parameter_list_t *ret = stp_parameter_list_create();
+ int i;
+ for (i = 0; i < the_parameter_count; i++)
+ stp_parameter_list_add_param(ret, &(the_parameters[i]));
+ for (i = 0; i < float_parameter_count; i++)
+ stp_parameter_list_add_param(ret, &(float_parameters[i].param));
+ return ret;
+}
+
+static void
+canon_parameters(const stp_vars_t *v, const char *name,
+ stp_parameter_t *description)
{
int i;
- stp_param_t *valptrs= 0;
const canon_cap_t * caps=
- canon_get_model_capabilities(stp_printer_get_model(printer));
-
- if (count == NULL)
- return (NULL);
-
- *count = 0;
+ canon_get_model_capabilities(stp_get_model_id(v));
+ description->p_type = STP_PARAMETER_TYPE_INVALID;
if (name == NULL)
- return (NULL);
+ return;
+
+ for (i = 0; i < float_parameter_count; i++)
+ if (strcmp(name, float_parameters[i].param.name) == 0)
+ {
+ stp_fill_parameter_settings(description,
+ &(float_parameters[i].param));
+ description->deflt.dbl = float_parameters[i].defval;
+ description->bounds.dbl.upper = float_parameters[i].max;
+ description->bounds.dbl.lower = float_parameters[i].min;
+ return;
+ }
+ for (i = 0; i < the_parameter_count; i++)
+ if (strcmp(name, the_parameters[i].name) == 0)
+ {
+ stp_fill_parameter_settings(description, &(the_parameters[i]));
+ break;
+ }
if (strcmp(name, "PageSize") == 0)
{
int height_limit, width_limit;
int papersizes = stp_known_papersizes();
- valptrs = stp_zalloc(sizeof(stp_param_t) * papersizes);
- *count = 0;
+ description->bounds.str = stp_string_list_create();
width_limit = caps->max_width;
height_limit = caps->max_height;
for (i = 0; i < papersizes; i++) {
- const stp_papersize_t pt = stp_get_papersize_by_index(i);
- if (strlen(stp_papersize_get_name(pt)) > 0 &&
- stp_papersize_get_width(pt) <= width_limit &&
- stp_papersize_get_height(pt) <= height_limit)
+ const stp_papersize_t *pt = stp_get_papersize_by_index(i);
+ if (strlen(pt->name) > 0 &&
+ pt->width <= width_limit && pt->height <= height_limit)
{
- valptrs[*count].name = c_strdup(stp_papersize_get_name(pt));
- valptrs[*count].text = c_strdup(stp_papersize_get_text(pt));
- (*count)++;
+ if (stp_string_list_count(description->bounds.str) == 0)
+ description->deflt.str = pt->name;
+ stp_string_list_add_string(description->bounds.str,
+ pt->name, pt->text);
}
}
}
else if (strcmp(name, "Resolution") == 0)
{
- char tmp[100];
int x,y;
- int c= 0;
int t;
- valptrs = stp_zalloc(sizeof(stp_param_t) * 10);
+ description->bounds.str= stp_string_list_create();
+ description->deflt.str = NULL;
for (x=1; x<6; x++) {
for (y=x-1; y<x+1; y++) {
if ((t= canon_ink_type(caps,(x<<4)|y)) > -1) {
- sprintf(tmp,"%dx%ddpi",
- (1<<x)/2*caps->base_res,(1<<y)/2*caps->base_res);
- valptrs[c].name= c_strdup(tmp);
-
- sprintf(tmp,"%dx%d DPI",
- (1<<x)/2*caps->base_res,(1<<y)/2*caps->base_res);
- stp_deprintf(STP_DBG_CANON,"supports mode '%s'\n",tmp);
- valptrs[c++].text= c_strdup(tmp);
-
- if (t==1) {
- sprintf(tmp,"%dx%ddmt",
- (1<<x)/2*caps->base_res,(1<<y)/2*caps->base_res);
- valptrs[c].name= c_strdup(tmp);
- sprintf(tmp,"%dx%d DPI DMT",
- (1<<x)/2*caps->base_res,(1<<y)/2*caps->base_res);
- stp_deprintf(STP_DBG_CANON,"supports mode '%s'\n",tmp);
- valptrs[c++].text = c_strdup(tmp);
+ int xx = (1<<x)/2*caps->base_res;
+ int yy = (1<<y)/2*caps->base_res;
+ const canon_res_t *res = canon_resolutions;
+ while (res->x > 0) {
+ if (xx == res->x && yy == res->y) {
+ stp_string_list_add_string(description->bounds.str,
+ res->name, _(res->text));
+ stp_deprintf(STP_DBG_CANON,"supports mode '%s'\n",
+ res->name);
+ if (xx >= 300 && yy >= 300 && description->deflt.str == NULL)
+ description->deflt.str = res->name;
+ if (t == 1) {
+ stp_string_list_add_string(description->bounds.str,
+ res->name_dmt, _(res->text_dmt));
+ stp_deprintf(STP_DBG_CANON,"supports mode '%s'\n",
+ res->name_dmt);
+ }
+ break;
+ }
+ res++;
}
}
}
}
- *count= c;
}
else if (strcmp(name, "InkType") == 0)
{
- int c= 0;
- valptrs = stp_zalloc(sizeof(stp_param_t) * 5);
+ description->bounds.str= stp_string_list_create();
/* used internally: do not translate */
if ((caps->inks & CANON_INK_K))
- {
- valptrs[c].name = c_strdup("Gray");
- valptrs[c++].text = c_strdup(_("Black"));
- }
+ stp_string_list_add_string(description->bounds.str,
+ "Gray", _("Black"));
if ((caps->inks & CANON_INK_CMY))
- {
- valptrs[c].name = c_strdup("RGB");
- valptrs[c++].text = c_strdup(_("CMY Color"));
- }
+ stp_string_list_add_string(description->bounds.str,
+ "RGB", _("CMY Color"));
if ((caps->inks & CANON_INK_CMYK))
- {
- valptrs[c].name = c_strdup("CMYK");
- valptrs[c++].text = c_strdup(_("CMYK Color"));
- }
+ stp_string_list_add_string(description->bounds.str,
+ "CMYK", _("CMYK Color"));
if ((caps->inks & CANON_INK_CcMmYK))
- {
- valptrs[c].name = c_strdup("PhotoCMY");
- valptrs[c++].text = c_strdup(_("Photo CcMmY Color"));
- }
+ stp_string_list_add_string(description->bounds.str,
+ "PhotoCMY", _("Photo CcMmY Color"));
if ((caps->inks & CANON_INK_CcMmYyK))
+ stp_string_list_add_string(description->bounds.str,
+ "PhotoCMYK", _("Photo CcMmYK Color"));
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ else if (strcmp(name, "InkChannels") == 0)
{
- valptrs[c].name = c_strdup("PhotoCMYK");
- valptrs[c++].text = c_strdup(_("Photo CcMmYK Color"));
+ if (caps->inks & CANON_INK_CcMmYyK)
+ description->deflt.integer = 7;
+ else if (caps->inks & CANON_INK_CcMmYK)
+ description->deflt.integer = 6;
+ else if (caps->inks & CANON_INK_CMYK)
+ description->deflt.integer = 4;
+ else if (caps->inks & CANON_INK_CMY)
+ description->deflt.integer = 3;
+ else
+ description->deflt.integer = 1;
+ description->bounds.integer.lower = -1;
+ description->bounds.integer.upper = -1;
}
-
- *count = c;
- }
else if (strcmp(name, "MediaType") == 0)
{
- *count = sizeof(canon_paper_list) / sizeof(canon_paper_list[0]);
-
- valptrs = stp_zalloc(*count * sizeof(stp_param_t));
-
- for (i = 0; i < *count; i ++)
- {
- valptrs[i].name = c_strdup(canon_paper_list[i].name);
- valptrs[i].text = c_strdup(_(canon_paper_list[i].text));
- }
+ int count = sizeof(canon_paper_list) / sizeof(canon_paper_list[0]);
+ description->bounds.str= stp_string_list_create();
+ description->deflt.str= canon_paper_list[0].name;
+
+ for (i = 0; i < count; i ++)
+ stp_string_list_add_string(description->bounds.str,
+ canon_paper_list[i].name,
+ _(canon_paper_list[i].text));
}
else if (strcmp(name, "InputSlot") == 0)
{
- *count = sizeof(media_sources) / sizeof(media_sources[0]);
-
- valptrs = stp_zalloc(*count * sizeof(stp_param_t));
- for (i = 0; i < *count; i ++)
- {
- /* translate media_sources */
- valptrs[i].name = c_strdup(media_sources[i].name);
- valptrs[i].text = c_strdup(_(media_sources[i].text));
- }
+ int count = 3;
+ description->bounds.str= stp_string_list_create();
+ description->deflt.str= media_sources[0].name;
+ for (i = 0; i < count; i ++)
+ stp_string_list_add_string(description->bounds.str,
+ media_sources[i].name,
+ _(media_sources[i].text));
}
- else
- return (NULL);
-
- return (valptrs);
-}
-
-static const char *
-canon_default_parameters(const stp_printer_t printer,
- const char *ppd_file,
- const char *name)
-{
- int i;
- const canon_cap_t * caps=
- canon_get_model_capabilities(stp_printer_get_model(printer));
-
- if (name == NULL)
- return (NULL);
-
- if (strcmp(name, "PageSize") == 0)
+ else if (strcmp(name, "PrintingMode") == 0)
{
- int height_limit, width_limit;
- int papersizes = stp_known_papersizes();
-
- width_limit = caps->max_width;
- height_limit = caps->max_height;
-
- for (i = 0; i < papersizes; i++) {
- const stp_papersize_t pt = stp_get_papersize_by_index(i);
- if (strlen(stp_papersize_get_name(pt)) > 0 &&
- stp_papersize_get_width(pt) <= width_limit &&
- stp_papersize_get_height(pt) <= height_limit)
- return (stp_papersize_get_name(pt));
- }
- return NULL;
+ description->bounds.str = stp_string_list_create();
+ stp_string_list_add_string
+ (description->bounds.str, "Color", _("Color"));
+ stp_string_list_add_string
+ (description->bounds.str, "BW", _("Black and White"));
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
}
- else if (strcmp(name, "Resolution") == 0)
- {
- char tmp[100];
- int x,y;
- int t;
- int min_res = caps->base_res;
- while (min_res < 300)
- min_res *= 2;
-
- for (x=1; x<6; x++)
- {
- for (y=x-1; y<x+1; y++)
- {
- if ((t= canon_ink_type(caps,(x<<4)|y)) > -1)
- {
- if (t == 1)
- sprintf(tmp, "%dx%ddmt", min_res, min_res);
- else
- sprintf(tmp,"%dx%ddpi", min_res, min_res);
-
- stp_deprintf(STP_DBG_CANON,"supports mode '%s'\n",tmp);
- return (c_strdup(tmp));
- }
- }
- }
- return NULL;
- }
- else if (strcmp(name, "InkType") == 0)
- {
- /* used internally: do not translate */
- if ((caps->inks & CANON_INK_K))
- return ("Gray");
- if ((caps->inks & CANON_INK_CMY))
- return ("RGB");
- if ((caps->inks & CANON_INK_CMYK))
- return ("CMYK");
- if ((caps->inks & CANON_INK_CcMmYK))
- return ("PhotoCMY");
- if ((caps->inks & CANON_INK_CcMmYyK))
- return ("PhotoCMYK");
- return NULL;
- }
- else if (strcmp(name, "MediaType") == 0)
- {
- return (canon_paper_list[0].name);
- }
- else if (strcmp(name, "InputSlot") == 0)
- {
- return (media_sources[0].name);
- }
- else
- return (NULL);
}
@@ -1699,36 +1823,64 @@ canon_default_parameters(const stp_printer_t printer,
*/
static void
-canon_imageable_area(const stp_printer_t printer, /* I - Printer model */
- const stp_vars_t v, /* I */
- int *left, /* O - Left position in points */
- int *right, /* O - Right position in points */
- int *bottom, /* O - Bottom position in points */
- int *top) /* O - Top position in points */
+internal_imageable_area(const stp_vars_t *v, /* I */
+ int use_paper_margins,
+ int *left, /* O - Left position in points */
+ int *right, /* O - Right position in points */
+ int *bottom, /* O - Bottom position in points */
+ int *top) /* O - Top position in points */
{
int width, length; /* Size of page */
+ int left_margin = 0;
+ int right_margin = 0;
+ int bottom_margin = 0;
+ int top_margin = 0;
- const canon_cap_t * caps=
- canon_get_model_capabilities(stp_printer_get_model(printer));
+ const canon_cap_t * caps= canon_get_model_capabilities(stp_get_model_id(v));
+ const char *media_size = stp_get_string_parameter(v, "PageSize");
+ const stp_papersize_t *pt = NULL;
- stp_default_media_size(printer, v, &width, &length);
+ if (media_size && use_paper_margins)
+ pt = stp_get_papersize_by_name(media_size);
- *left = caps->border_left;
- *right = width - caps->border_right;
- *top = length - caps->border_top;
- *bottom = caps->border_bottom;
+ stp_default_media_size(v, &width, &length);
+ if (pt)
+ {
+ left_margin = pt->left;
+ right_margin = pt->right;
+ bottom_margin = pt->bottom;
+ top_margin = pt->top;
+ }
+ left_margin = MAX(left_margin, caps->border_left);
+ right_margin = MAX(right_margin, caps->border_right);
+ top_margin = MAX(top_margin, caps->border_top);
+ bottom_margin = MAX(bottom_margin, caps->border_bottom);
+
+ *left = left_margin;
+ *right = width - right_margin;
+ *top = top_margin;
+ *bottom = length - bottom_margin;
}
static void
-canon_limit(const stp_printer_t printer, /* I - Printer model */
- const stp_vars_t v, /* I */
+canon_imageable_area(const stp_vars_t *v, /* I */
+ int *left, /* O - Left position in points */
+ int *right, /* O - Right position in points */
+ int *bottom, /* O - Bottom position in points */
+ int *top) /* O - Top position in points */
+{
+ internal_imageable_area(v, 1, left, right, bottom, top);
+}
+
+static void
+canon_limit(const stp_vars_t *v, /* I */
int *width,
int *height,
int *min_width,
int *min_height)
{
const canon_cap_t * caps=
- canon_get_model_capabilities(stp_printer_get_model(printer));
+ canon_get_model_capabilities(stp_get_model_id(v));
*width = caps->max_width;
*height = caps->max_height;
*min_width = 1;
@@ -1739,7 +1891,7 @@ canon_limit(const stp_printer_t printer, /* I - Printer model */
* 'canon_cmd()' - Sends a command with variable args
*/
static void
-canon_cmd(const stp_vars_t v, /* I - the printer */
+canon_cmd(const stp_vars_t *v, /* I - the printer */
const char *ini, /* I - 2 bytes start code */
const char cmd, /* I - command code */
int num, /* I - number of arguments */
@@ -1762,8 +1914,7 @@ canon_cmd(const stp_vars_t v, /* I - the printer */
if (cmd)
{
stp_putc(cmd,v);
- stp_putc((num & 255),v);
- stp_putc((num >> 8 ),v);
+ stp_put16_le(num, v);
if (num)
stp_zfwrite((const char *)buffer,num,1,v);
}
@@ -1777,13 +1928,10 @@ canon_cmd(const stp_vars_t v, /* I - the printer */
#define ESC5b "\033\133"
#define ESC40 "\033\100"
-#define MIN(a,b) (((a)<(b)) ? (a) : (b))
-#define MAX(a,b) (((a)>(b)) ? (a) : (b))
-
/* ESC [K -- -- reset printer:
*/
static void
-canon_init_resetPrinter(const stp_vars_t v, canon_init_t *init)
+canon_init_resetPrinter(const stp_vars_t *v, canon_init_t *init)
{
unsigned long f=init->caps->features;
if (f & (CANON_CAP_ACKSHORT))
@@ -1799,7 +1947,7 @@ canon_init_resetPrinter(const stp_vars_t v, canon_init_t *init)
/* ESC (a -- 0x61 -- cmdSetPageMode --:
*/
static void
-canon_init_setPageMode(const stp_vars_t v, canon_init_t *init)
+canon_init_setPageMode(const stp_vars_t *v, canon_init_t *init)
{
if (!(init->caps->features & CANON_CAP_a))
return;
@@ -1811,7 +1959,7 @@ canon_init_setPageMode(const stp_vars_t v, canon_init_t *init)
/* ESC (b -- 0x62 -- -- set data compression:
*/
static void
-canon_init_setDataCompression(const stp_vars_t v, canon_init_t *init)
+canon_init_setDataCompression(const stp_vars_t *v, canon_init_t *init)
{
if (!(init->caps->features & CANON_CAP_b))
return;
@@ -1822,17 +1970,16 @@ canon_init_setDataCompression(const stp_vars_t v, canon_init_t *init)
/* ESC (c -- 0x63 -- cmdSetColor --:
*/
static void
-canon_init_setColor(const stp_vars_t v, canon_init_t *init)
+canon_init_setColor(const stp_vars_t *v, canon_init_t *init)
{
unsigned char
- numargs, arg_63[6];
+ arg_63_1, arg_63_2, arg_63_3;
if (!(init->caps->features & CANON_CAP_c))
return;
- numargs = 3;
- arg_63[0] = init->caps->model_id << 4; /* MODEL_ID */
+ arg_63_1 = init->caps->model_id << 4; /* MODEL_ID */
switch ( init->caps->model_id ) {
@@ -1840,46 +1987,27 @@ canon_init_setColor(const stp_vars_t v, canon_init_t *init)
break; /* tbd */
case 1: /* 360 dpi series - BJC-4000, BJC-210, BJC-70 and their descendants */
- if (init->output_type==OUTPUT_GRAY || init->output_type == OUTPUT_MONOCHROME)
- arg_63[0]|= 0x01; /* PRINT_COLOUR */
+ if (!init->printing_color)
+ arg_63_1|= 0x01; /* PRINT_COLOUR */
- arg_63[1] = ((init->pt ? init->pt->media_code : 0) << 4) /* PRINT_MEDIA */
+ arg_63_2 = ((init->pt ? init->pt->media_code : 0) << 4) /* PRINT_MEDIA */
+ 1; /* hardcode to High quality for now */ /* PRINT_QUALITY */
- canon_cmd(v,ESC28,0x63, 2, arg_63[0], arg_63[1]);
+ canon_cmd(v,ESC28,0x63, 2, arg_63_1, arg_63_2);
break;
case 2: /* are any models using this? */
break;
case 3: /* 720 dpi series - BJC-3000 and descendants */
- if (init->output_type==OUTPUT_GRAY || init->output_type == OUTPUT_MONOCHROME)
- arg_63[0]|= 0x01; /* colour mode */
-
- arg_63[1] = (init->pt) ? init->pt->media_code : 0; /* print media type */
- if (init->caps->model == 4202) /* S200 */
- {
- if ((init->xdpi == 720) && (init->ydpi == 720 ))
- arg_63[2] = 1;
- else
- arg_63[2] = 4; /* hardcoded: quality 3 (may be 0...4) */
- /* bidirectional is controlled via quality: 0..2 is bidi, 3 and 4 uni */
- /* not every combination works, no idea about the principle */
- if ( (init->xdpi > 360) || (init->ydpi > 360) )
- {
- numargs = 6;
- arg_63[3] = 0x10; arg_63[4] = 6; arg_63[5] = 8; /* arg5 makes a vert. offset for K */
- if (init->output_type==OUTPUT_GRAY || init->output_type == OUTPUT_MONOCHROME)
- arg_63[4] = 1;
- }
- }
- else
- arg_63[2] = 2; /* hardcode to whatever this means for now; quality, apparently */
-
- stp_zprintf(v, "\033\050\143");
- stp_putc((numargs & 255),v);
- stp_putc((numargs >> 8 ),v);
- stp_zfwrite((const char *)arg_63, numargs, 1, v);
+ if (!init->printing_color)
+ arg_63_1|= 0x01; /* colour mode */
+
+ arg_63_2 = (init->pt) ? init->pt->media_code : 0; /* print media type */
+
+ arg_63_3 = 2; /* hardcode to whatever this means for now */ /* quality, apparently */
+
+ canon_cmd(v,ESC28,0x63, 3, arg_63_1, arg_63_2, arg_63_3);
break;
}
@@ -1889,29 +2017,20 @@ canon_init_setColor(const stp_vars_t v, canon_init_t *init)
/* ESC (d -- 0x64 -- -- set raster resolution:
*/
static void
-canon_init_setResolution(const stp_vars_t v, canon_init_t *init)
+canon_init_setResolution(const stp_vars_t *v, canon_init_t *init)
{
if (!(init->caps->features & CANON_CAP_d))
return;
- if (init->caps->model != 4202 || (init->xdpi < 360))
+
canon_cmd(v,ESC28,0x64, 4,
(init->ydpi >> 8 ), (init->ydpi & 255),
(init->xdpi >> 8 ), (init->xdpi & 255));
- else
- if (init->xdpi < 2880)
- canon_cmd(v,ESC28,0x64, 4,
- (720 >> 8), (720 & 255),
- (720 >> 8), (720 & 255));
- else
- canon_cmd(v,ESC28,0x64, 4,
- (720 >> 8), (720 & 255),
- (2880 >> 8), (2880 & 255));
}
/* ESC (g -- 0x67 -- cmdSetPageMargins --:
*/
static void
-canon_init_setPageMargins(const stp_vars_t v, canon_init_t *init)
+canon_init_setPageMargins(const stp_vars_t *v, canon_init_t *init)
{
/* TOFIX: what exactly is to be sent?
* Is it the printable length or the bottom border?
@@ -1938,7 +2057,7 @@ canon_init_setPageMargins(const stp_vars_t v, canon_init_t *init)
/* ESC (l -- 0x6c -- cmdSetTray --:
*/
static void
-canon_init_setTray(const stp_vars_t v, canon_init_t *init)
+canon_init_setTray(const stp_vars_t *v, canon_init_t *init)
{
unsigned char
arg_6c_1 = 0x00,
@@ -1954,22 +2073,20 @@ canon_init_setTray(const stp_vars_t v, canon_init_t *init)
arg_6c_1|= (source & 0x0f);
- if (init->pt)
- arg_6c_2 = init->pt->media_code;
+ if (init->pt) arg_6c_2= init->pt->media_code;
canon_cmd(v,ESC28,0x6c, 2, arg_6c_1, arg_6c_2);
}
-/* ESC (m -- 0x6d -- cmdSetPrintMode -- :
+/* ESC (m -- 0x6d -- -- :
*/
static void
-canon_init_setPrintMode(const stp_vars_t v, canon_init_t *init)
+canon_init_setPrintMode(const stp_vars_t *v, canon_init_t *init)
{
unsigned char
arg_6d_1 = 0x03, /* color printhead? */
arg_6d_2 = 0x00, /* 00=color 02=b/w */
- arg_6d_3 = 0x00, /* only 01 for bjc8200 and S200*/
- /* S200:for envelope and t-shirt transfer = 03 */
+ arg_6d_3 = 0x00, /* only 01 for bjc8200 */
arg_6d_a = 0x03, /* A4 paper */
arg_6d_b = 0x00;
@@ -1986,10 +2103,10 @@ canon_init_setPrintMode(const stp_vars_t v, canon_init_t *init)
arg_6d_1= 0x02;
else if (init->print_head<=4)
arg_6d_1= 0x04;
- if (init->output_type==OUTPUT_GRAY || init->output_type == OUTPUT_MONOCHROME)
+ if (!init->printing_color)
arg_6d_2= 0x02;
- if (init->caps->model==8200 || init->caps->model==4202)
+ if (init->caps->model==8200)
arg_6d_3= 0x01;
canon_cmd(v,ESC28,0x6d,12, arg_6d_1,
@@ -2000,12 +2117,11 @@ canon_init_setPrintMode(const stp_vars_t v, canon_init_t *init)
/* ESC (p -- 0x70 -- cmdSetPageMargins2 --:
*/
static void
-canon_init_setPageMargins2(const stp_vars_t v, canon_init_t *init)
+canon_init_setPageMargins2(const stp_vars_t *v, canon_init_t *init)
{
/* TOFIX: what exactly is to be sent?
* Is it the printable length or the bottom border?
* Is is the printable width or the right border?
- * [KF] I think the printable width/length in units of 1/60 inch
*/
int printable_width= init->page_width*5/6;
@@ -2027,7 +2143,7 @@ canon_init_setPageMargins2(const stp_vars_t v, canon_init_t *init)
/* ESC (q -- 0x71 -- setPageID -- :
*/
static void
-canon_init_setPageID(const stp_vars_t v, canon_init_t *init)
+canon_init_setPageID(const stp_vars_t *v, canon_init_t *init)
{
if (!(init->caps->features & CANON_CAP_q))
return;
@@ -2035,35 +2151,21 @@ canon_init_setPageID(const stp_vars_t v, canon_init_t *init)
canon_cmd(v,ESC28,0x71, 1, 0x01);
}
-/* ESC (r -- 0x72 -- ??? set direction ??? -- :
+/* ESC (r -- 0x72 -- -- :
*/
static void
-canon_init_setX72(const stp_vars_t v, canon_init_t *init)
+canon_init_setX72(const stp_vars_t *v, canon_init_t *init)
{
- if ( !( (init->caps->features & CANON_CAP_r)
- || (init->caps->features & CANON_CAP_rr) ) )
+ if (!(init->caps->features & CANON_CAP_r))
return;
- if ( (init->caps->features & CANON_CAP_r)
- || (init->caps->features & CANON_CAP_rr) )
- canon_cmd(v,ESC28,0x72, 1, 0x61); /* whatever for - 8200/S200 need it */
- if (init->caps->features & CANON_CAP_rr)
- canon_cmd(v,ESC28,0x72, 3, 0x63, 1, 0); /* whatever for - S200 needs it */
- /* probably to set the print direction of the head */
-}
-
-/* ESC (r -- 0x72 -- ??? set direction ??? -- :
- only works if quality = 01 (S200) */
-static void
-canon_set_X72(const stp_vars_t v, int x72arg)
-{
- canon_cmd(v,ESC28,0x72, 3, 0x63, x72arg, 0);
+ canon_cmd(v,ESC28,0x72, 1, 0x61); /* whatever for - 8200 needs it */
}
/* ESC (t -- 0x74 -- cmdSetImage --:
*/
static void
-canon_init_setImage(const stp_vars_t v, canon_init_t *init)
+canon_init_setImage(const stp_vars_t *v, canon_init_t *init)
{
unsigned char
arg_74_1 = 0x01, /* 1 bit per pixel */
@@ -2073,17 +2175,6 @@ canon_init_setImage(const stp_vars_t v, canon_init_t *init)
if (!(init->caps->features & CANON_CAP_t))
return;
-
- if (init->caps->model==4202) /* 1 bit per pixel (arg 4,7,10,13); */
- /* 2 level per pixel (arg 6,9,12,15) for each color */
- /* though we print only 1bit/pixel - but this is how */
- /* the windows driver works */
- {
- canon_cmd(v,ESC28,0x74, 30, 0x80, 4, 1, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2,\
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- return;
- }
-
if (init->xdpi==1440) arg_74_2= 0x04;
if (init->ydpi>=720) arg_74_3= 0x09;
@@ -2114,7 +2205,7 @@ canon_init_setImage(const stp_vars_t v, canon_init_t *init)
}
static void
-canon_init_printer(const stp_vars_t v, canon_init_t *init)
+canon_init_printer(const stp_vars_t *v, canon_init_t *init)
{
int mytop;
/* init printer */
@@ -2139,7 +2230,7 @@ canon_init_printer(const stp_vars_t v, canon_init_t *init)
}
static void
-canon_deinit_printer(const stp_vars_t v, canon_init_t *init)
+canon_deinit_printer(const stp_vars_t *v, canon_init_t *init)
{
/* eject page */
stp_putc(0x0c,v);
@@ -2151,14 +2242,14 @@ canon_deinit_printer(const stp_vars_t v, canon_init_t *init)
}
static int
-canon_end_job(const stp_printer_t printer, /* I - Model */
- stp_image_t *image, /* I - Image to print */
- const stp_vars_t v)
+canon_start_job(const stp_vars_t *v, stp_image_t *image)
+{
+ return 1;
+}
+
+static int
+canon_end_job(const stp_vars_t *v, stp_image_t *image)
{
- if (!stp_get_verified(v))
- return 0;
- if (stp_get_job_mode(v) != STP_JOB_MODE_JOB)
- return 0;
canon_cmd(v,ESC40,0,0);
return 1;
}
@@ -2178,98 +2269,108 @@ canon_advance_buffer(unsigned char *buf, int len, int num)
memset(buf,0,len);
}
+static void
+setup_column(canon_privdata_t *privdata, int col, int buf_length)
+{
+ privdata->cols[col] = stp_zalloc(buf_length * (privdata->delay[col] + 1));
+}
+
+static void
+canon_printfunc(stp_vars_t *v)
+{
+ int i;
+ canon_privdata_t *pd = (canon_privdata_t *) stp_get_component_data(v, "Driver");
+ canon_write_line(v);
+ for (i = 0; i < 7; i++)
+ canon_advance_buffer(pd->cols[i], pd->buf_length, pd->delay[i]);
+
+}
+
+static double
+get_double_param(stp_vars_t *v, const char *param)
+{
+ if (param && stp_check_float_parameter(v, param, STP_PARAMETER_ACTIVE))
+ return stp_get_float_parameter(v, param);
+ else
+ return 1.0;
+}
+
+static void
+set_ink_ranges(stp_vars_t *v, const canon_variable_ink_t *ink, int color,
+ const char *channel_param, const char *subchannel_param)
+{
+ if (!ink)
+ return;
+ stp_dither_set_inks_full(v, color, ink->numshades, ink->shades, 1.0,
+ ink_darknesses[color]);
+ stp_channel_set_density_adjustment
+ (v, color, 1, (get_double_param(v, channel_param) *
+ get_double_param(v, subchannel_param) *
+ get_double_param(v, "Density")));
+}
+
/*
* 'canon_print()' - Print an image to a CANON printer.
*/
-static void
-canon_print(const stp_printer_t printer, /* I - Model */
- stp_image_t *image, /* I - Image to print */
- const stp_vars_t v)
+static int
+canon_do_print(stp_vars_t *v, stp_image_t *image)
{
int i;
- const unsigned char *cmap = stp_get_cmap(v);
- int model = stp_printer_get_model(printer);
- const char *resolution = stp_get_resolution(v);
- const char *media_source = stp_get_media_source(v);
- int output_type = stp_get_output_type(v);
- int orientation = stp_get_orientation(v);
- const char *ink_type = stp_get_ink_type(v);
- double scaling = stp_get_scaling(v);
+ int status = 1;
+ int model = stp_get_model_id(v);
+ const char *resolution = stp_get_string_parameter(v, "Resolution");
+ const char *media_source = stp_get_string_parameter(v, "InputSlot");
+ const char *print_mode = stp_get_string_parameter(v, "PrintingMode");
+ int printing_color = 0;
+ const char *ink_type = stp_get_string_parameter(v, "InkType");
int top = stp_get_top(v);
int left = stp_get_left(v);
int y; /* Looping vars */
int xdpi, ydpi; /* Resolution */
int n; /* Output number */
- unsigned short *out; /* Output pixels (16-bit) */
- unsigned char *in; /* Input pixels */
- unsigned char *cols[7]; /* Bitmap data: cols[0]=black ... */
- /* ... cols[6]=lyellow */
-
- int delay_k,
- delay_c,
- delay_m,
- delay_y,
- delay_lc,
- delay_lm,
- delay_ly,
- delay_max;
- int page_left, /* Left margin of page */
- page_right, /* Right margin of page */
- page_top, /* Top of page */
- page_bottom, /* Bottom of page */
- page_width, /* Width of page */
+ canon_privdata_t privdata;
+ int page_width, /* Width of page */
page_height, /* Length of page */
- page_true_height,/* True length of page */
+ page_left,
+ page_top,
+ page_right,
+ page_bottom,
+ page_true_height, /* True length of page */
out_width, /* Width of image on page */
- out_length, /* Length of image on page */
- out_bpp, /* Output bytes per pixel */
+ out_height, /* Length of image on page */
+ out_channels, /* Output bytes per pixel */
length, /* Length of raster data */
- buf_length, /* Length of raster data buffer (dmt) */
errdiv, /* Error dividend */
errmod, /* Error modulus */
errval, /* Current error value */
errline, /* Current raster line */
errlast; /* Last raster line loaded */
- stp_convert_t colorfunc = 0; /* Color conversion function... */
- int zero_mask;
+ unsigned zero_mask;
int bits= 1;
int image_height,
- image_width,
- image_bpp;
- int ink_spread;
- void * dither;
+ image_width;
int res_code;
int use_6color= 0;
double k_upper, k_lower;
- int emptylines= 0;
- stp_vars_t nv = stp_allocate_copy(v);
- double lum_adjustment[49], sat_adjustment[49], hue_adjustment[49];
- int have_lum_adjustment= 0;
- int have_sat_adjustment= 0;
- int have_hue_adjustment= 0;
+ stp_curve_t *lum_adjustment = NULL;
+ stp_curve_t *hue_adjustment = NULL;
+ stp_curve_t *sat_adjustment = NULL;
canon_init_t init;
- const canon_cap_t * caps = canon_get_model_capabilities(model);
- int printhead = canon_printhead_type(ink_type,caps);
+ const canon_cap_t * caps= canon_get_model_capabilities(model);
+ int printhead= canon_printhead_type(ink_type,caps);
colormode_t colormode = canon_printhead_colors(ink_type,caps);
const paper_t *pt;
const canon_variable_inkset_t *inks;
+ const canon_res_t *res = canon_resolutions;
- stp_dither_data_t *dt;
- void * weave = NULL;
- int total_channels; /* number of colors to print with */
- int physical_xdpi = 720, nozzle_ydpi = 360, stepper_ydpi = 720;
- int nozzles = 24; /* count of inkjets for one pass */
- int nozzle_separation, horizontal_passes;
- int vertical_passes, vertical_oversample;
- int * head_offset = NULL;
- canon_privdata_weave privdata;
-
- if (!stp_get_verified(nv))
+ if (!stp_verify(v))
{
- stp_eprintf(nv, "Print options not verified; cannot print.\n");
- return;
+ stp_eprintf(v, "Print options not verified; cannot print.\n");
+ return 0;
}
+ if (strcmp(print_mode, "Color") == 0)
+ printing_color = 1;
PUT("top ",top,72);
PUT("left ",left,72);
@@ -2278,52 +2379,44 @@ canon_print(const stp_printer_t printer, /* I - Model */
* Setup a read-only pixel region for the entire image...
*/
- image->init(image);
- image_height = image->height(image);
- image_width = image->width(image);
- image_bpp = image->bpp(image);
+ stp_image_init(image);
/* force grayscale if image is grayscale
* or single black cartridge installed
*/
- if ((printhead == 0 || caps->inks == CANON_INK_K) &&
- output_type != OUTPUT_MONOCHROME)
+ if (printhead == 0 || caps->inks == CANON_INK_K)
{
- output_type = OUTPUT_GRAY;
- stp_set_output_type(nv, output_type);
+ printing_color = 0;
+ stp_set_string_parameter(v, "PrintingMode", "BW");
}
- if (output_type == OUTPUT_GRAY || output_type == OUTPUT_MONOCHROME)
+ if (!printing_color)
colormode = COLOR_MONOCHROME;
-
- stp_set_output_color_model(nv, COLOR_MODEL_CMY);
-
- /*
- * Choose the correct color conversion function...
- */
-
- colorfunc = stp_choose_colorfunc(output_type, image_bpp, cmap, &out_bpp, nv);
/*
* Figure out the output resolution...
*/
- switch (sscanf(resolution,"%dx%d",&xdpi,&ydpi)) {
- case 1: ydpi= xdpi; if (ydpi>caps->max_ydpi) ydpi/= 2; break;
- case 0: xdpi= caps->max_xdpi; ydpi= caps->max_ydpi; break;
+ xdpi = -1;
+ ydpi = -1;
+ while (res->x > 0) {
+ if (strcmp(resolution, res->name) == 0 ||
+ strcmp(resolution, res->name_dmt) == 0)
+ {
+ xdpi = res->x;
+ ydpi = res->y;
+ break;
+ }
+ res++;
}
stp_deprintf(STP_DBG_CANON,"canon: resolution=%dx%d\n",xdpi,ydpi);
-#ifndef EXPERIMENTAL_STUFF
stp_deprintf(STP_DBG_CANON," rescode =0x%x\n",canon_res_code(caps,xdpi,ydpi));
res_code= canon_res_code(caps,xdpi,ydpi);
-#endif
- if (((!strcmp(resolution+(strlen(resolution)-3),"DMT")) ||
- (!strcmp(resolution+(strlen(resolution)-3),"dmt"))) &&
- (caps->features & CANON_CAP_DMT) &&
- output_type != OUTPUT_MONOCHROME) {
+ if (strcmp(resolution, res->name_dmt) == 0 &&
+ (caps->features & CANON_CAP_DMT)) {
bits= 2;
stp_deprintf(STP_DBG_CANON,"canon: using drop modulation technology\n");
}
@@ -2332,44 +2425,34 @@ canon_print(const stp_printer_t printer, /* I - Model */
* Compute the output size...
*/
- canon_imageable_area(printer, nv, &page_left, &page_right,
- &page_bottom, &page_top);
+ out_width = stp_get_width(v);
+ out_height = stp_get_height(v);
- stp_compute_page_parameters(page_right, page_left, page_top, page_bottom,
- scaling, image_width, image_height, image,
- &orientation, &page_width, &page_height,
- &out_width, &out_length, &left, &top);
+ internal_imageable_area(v, 0, &page_left, &page_right,
+ &page_bottom, &page_top);
+ left -= page_left;
+ top -= page_top;
+ page_width = page_right - page_left;
+ page_height = page_bottom - page_top;
- /*
- * Recompute the image length and width. If the image has been
- * rotated, these will change from previously.
- */
- image_height = image->height(image);
- image_width = image->width(image);
+ image_height = stp_image_height(image);
+ image_width = stp_image_width(image);
- stp_default_media_size(printer, nv, &n, &page_true_height);
+ stp_default_media_size(v, &n, &page_true_height);
PUT("top ",top,72);
PUT("left ",left,72);
- PUT("page_top ",page_top,72);
- PUT("page_bottom",page_bottom,72);
- PUT("page_left ",page_left,72);
- PUT("page_right ",page_right,72);
- PUT("page_width ",page_width,72);
- PUT("page_height",page_height,72);
PUT("page_true_height",page_true_height,72);
PUT("out_width ", out_width,xdpi);
- PUT("out_length", out_length,ydpi);
-
- image->progress_init(image);
+ PUT("out_height", out_height,ydpi);
PUT("top ",top,72);
PUT("left ",left,72);
- pt = get_media_type(stp_get_media_type(nv));
+ pt = get_media_type(stp_get_string_parameter(v, "MediaType"));
init.caps = caps;
- init.output_type = output_type;
+ init.printing_color = printing_color;
init.pt = pt;
init.print_head = printhead;
init.colormode = colormode;
@@ -2382,7 +2465,7 @@ canon_print(const stp_printer_t printer, /* I - Model */
init.left = left;
init.bits = bits;
- canon_init_printer(nv, &init);
+ canon_init_printer(v, &init);
/* possibly changed during initialitation
* to enforce valid modes of operation:
@@ -2396,38 +2479,32 @@ canon_print(const stp_printer_t printer, /* I - Model */
*/
out_width = xdpi * out_width / 72;
- out_length = ydpi * out_length / 72;
+ out_height = ydpi * out_height / 72;
PUT("out_width ", out_width,xdpi);
- PUT("out_length", out_length,ydpi);
+ PUT("out_height", out_height,ydpi);
left = xdpi * left / 72;
PUT("leftskip",left,xdpi);
- if((xdpi == 1440) && (model != 4202)){
- delay_k= 0;
- delay_c= 112;
- delay_m= 224;
- delay_y= 336;
- delay_lc= 112;
- delay_lm= 224;
- delay_ly= 336;
- delay_max= 336;
+ for (i = 0; i < 7; i++)
+ privdata.cols[i] = NULL;
+
+ if(xdpi==1440){
+ privdata.delay[0] = 0;
+ privdata.delay[1] = 112;
+ privdata.delay[2] = 224;
+ privdata.delay[3] = 336;
+ privdata.delay[4] = 112;
+ privdata.delay[5] = 224;
+ privdata.delay[6] = 336;
+ privdata.delay_max = 336;
stp_deprintf(STP_DBG_CANON,"canon: delay on!\n");
- } else if (model ==4202 ){
- delay_k= 0;
- delay_c= 0x30;
- delay_m= 0x50;
- delay_y= 0x70;
- delay_lc= 0;
- delay_lm= 0;
- delay_ly= 0;
- delay_max= 0x70;
- stp_deprintf(STP_DBG_CANON,"canon: delay for S200 on!\n");
} else {
- delay_k= delay_c= delay_m= delay_y= delay_lc= delay_lm= delay_ly=0;
- delay_max=0;
+ for (i = 0; i < 7; i++)
+ privdata.delay[i] = 0;
+ privdata.delay_max = 0;
stp_deprintf(STP_DBG_CANON,"canon: delay off!\n");
}
@@ -2437,67 +2514,84 @@ canon_print(const stp_printer_t printer, /* I - Model */
length = (out_width + 7) / 8;
- buf_length= length*bits;
+ privdata.buf_length= length*bits;
+ privdata.left = left;
+ privdata.bits = bits;
+ privdata.out_width = out_width;
+ privdata.caps = caps;
+ privdata.ydpi = ydpi;
- stp_deprintf(STP_DBG_CANON,"canon: buflength is %d!\n",buf_length);
+ stp_deprintf(STP_DBG_CANON,"canon: buflength is %d!\n",privdata.buf_length);
- for (i=0; i<=6; i++)
- cols[i] = NULL;
-
- if (colormode==COLOR_MONOCHROME)
- cols[0] = stp_zalloc(buf_length*(delay_k+1));
-
- else { /* use Colors CMY */
- cols[1] = stp_zalloc(buf_length*(delay_c+1));
- cols[2] = stp_zalloc(buf_length*(delay_m+1));
- cols[3] = stp_zalloc(buf_length*(delay_y+1));
+ if (colormode==COLOR_MONOCHROME) {
+ setup_column(&privdata, 0, privdata.buf_length);
+ } else {
+ setup_column(&privdata, 1, privdata.buf_length);
+ setup_column(&privdata, 2, privdata.buf_length);
+ setup_column(&privdata, 3, privdata.buf_length);
- if (colormode!=COLOR_CMY) /* use also K */
- cols[0] = stp_zalloc(buf_length*(delay_k+1));
+ if (colormode!=COLOR_CMY)
+ setup_column(&privdata, 0, privdata.buf_length);
if (colormode==COLOR_CCMMYK || colormode==COLOR_CCMMYYK) {
use_6color= 1;
- cols[4] = stp_zalloc(buf_length*(delay_lc+1));
- cols[5] = stp_zalloc(buf_length*(delay_lm+1));
+ setup_column(&privdata, 4, privdata.buf_length);
+ setup_column(&privdata, 5, privdata.buf_length);
if (colormode==CANON_INK_CcMmYyK)
- cols[6] = stp_zalloc(buf_length*(delay_lc+1));
+ setup_column(&privdata, 6, privdata.buf_length);
}
}
- stp_deprintf(STP_DBG_CANON,"canon: driver will use colors %s%s%s%s%s%s\n",
- cols[1] ? "C" : "", cols[4] ? "c" : "", cols[2] ? "M" : "",
- cols[5] ? "m" : "", cols[3] ? "Y" : "", cols[0] ? "K" : "");
+ if (privdata.cols[0])
+ {
+ if (privdata.cols[1])
+ stp_set_string_parameter(v, "STPIOutputType", "KCMY");
+ else
+ stp_set_string_parameter(v, "STPIOutputType", "Grayscale");
+ }
+ else
+ stp_set_string_parameter(v, "STPIOutputType", "CMY");
+
+ stp_deprintf(STP_DBG_CANON,
+ "canon: driver will use colors %s%s%s%s%s%s%s\n",
+ privdata.cols[0] ? "K" : "",
+ privdata.cols[1] ? "C" : "",
+ privdata.cols[2] ? "M" : "",
+ privdata.cols[3] ? "Y" : "",
+ privdata.cols[4] ? "c" : "",
+ privdata.cols[5] ? "m" : "",
+ privdata.cols[6] ? "y" : "");
- stp_deprintf(STP_DBG_CANON,"density is %f\n",stp_get_density(nv));
+ stp_deprintf(STP_DBG_CANON,"density is %f\n",
+ stp_get_float_parameter(v, "Density"));
/*
* Compute the LUT. For now, it's 8 bit, but that may eventually
* sometimes change.
*/
+
+ if (!stp_check_float_parameter(v, "Density", STP_PARAMETER_DEFAULTED))
+ {
+ stp_set_float_parameter_active(v, "Density", STP_PARAMETER_ACTIVE);
+ stp_set_float_parameter(v, "Density", 1.0);
+ }
if (pt)
- stp_set_density(nv, stp_get_density(nv) * pt->base_density);
- else /* Can't find paper type? Assume plain */
- stp_set_density(nv, stp_get_density(nv) * .5);
- stp_set_density(nv, stp_get_density(nv) * canon_density(caps, res_code));
- if (stp_get_density(nv) > 1.0)
- stp_set_density(nv, 1.0);
+ stp_scale_float_parameter(v, "Density", pt->base_density);
+ else /* Can't find paper type? Assume plain */
+ stp_scale_float_parameter(v, "Density", .5);
+ stp_scale_float_parameter(v, "Density", canon_density(caps, res_code));
+ if (stp_get_float_parameter(v, "Density") > 1.0)
+ stp_set_float_parameter(v, "Density", 1.0);
if (colormode == COLOR_MONOCHROME)
- stp_set_gamma(nv, stp_get_gamma(nv) / .8);
- stp_compute_lut(nv, 256);
+ stp_scale_float_parameter(v, "Gamma", 1.25);
- stp_deprintf(STP_DBG_CANON,"density is %f\n",stp_get_density(nv));
+ stp_deprintf(STP_DBG_CANON,"density is %f\n",
+ stp_get_float_parameter(v, "Density"));
/*
* Output the page...
*/
- if (xdpi > ydpi)
- dither = stp_init_dither(image_width, out_width, 1, xdpi / ydpi, nv);
- else
- dither = stp_init_dither(image_width, out_width, ydpi / xdpi, 1, nv);
-
- for (i = 0; i <= NCOLORS; i++)
- stp_dither_set_black_level(dither, i, 1.0);
if (use_6color)
k_lower = .4 / bits + .1;
@@ -2513,305 +2607,163 @@ canon_print(const stp_printer_t printer, /* I - Model */
k_lower *= .5;
k_upper = .5;
}
- stp_dither_set_black_lower(dither, k_lower);
- stp_dither_set_black_upper(dither, k_upper);
+ if (!stp_check_float_parameter(v, "GCRLower", STP_PARAMETER_ACTIVE))
+ stp_set_default_float_parameter(v, "GCRLower", k_lower);
+ if (!stp_check_float_parameter(v, "GCRUpper", STP_PARAMETER_ACTIVE))
+ stp_set_default_float_parameter(v, "GCRUpper", k_upper);
+ stp_dither_init(v, image, out_width, xdpi, ydpi);
- if ((inks = canon_inks(caps, res_code, colormode, bits))!=0)
- {
- if (inks->c)
- stp_dither_set_ranges(dither, ECOLOR_C, inks->c->count, inks->c->range,
- inks->c->density * stp_get_density(nv));
- if (inks->m)
- stp_dither_set_ranges(dither, ECOLOR_M, inks->m->count, inks->m->range,
- inks->m->density * stp_get_density(nv));
- if (inks->y)
- stp_dither_set_ranges(dither, ECOLOR_Y, inks->y->count, inks->y->range,
- inks->y->density * stp_get_density(nv));
- if (inks->k)
- stp_dither_set_ranges(dither, ECOLOR_K, inks->k->count, inks->k->range,
- inks->k->density * stp_get_density(nv));
- }
-
- switch (stp_get_image_type(nv))
+ for (i = 0; i < 7; i++)
{
- case IMAGE_LINE_ART:
- stp_dither_set_ink_spread(dither, 19);
- break;
- case IMAGE_SOLID_TONE:
- stp_dither_set_ink_spread(dither, 15);
- break;
- case IMAGE_CONTINUOUS:
- ink_spread = 13;
- /*
- if (ydpi > canon_max_vres(model))
- ink_spread++;
- */
- if (bits > 1)
- ink_spread++;
- stp_dither_set_ink_spread(dither, ink_spread);
- break;
+ if (privdata.cols[i])
+ {
+ stp_dither_add_channel(v, privdata.cols[i], channel_color_map[i],
+ subchannel_color_map[i]);
+ if (channel_color_map[i] == STP_ECOLOR_K)
+ stp_channel_set_black_channel(v, STP_ECOLOR_K);
+ }
}
- stp_dither_set_density(dither, stp_get_density(nv));
- /* initialize weaving for S200 for resolutions > 360dpi */
- if (init.caps->features & CANON_CAP_WEAVE && xdpi > 360)
- {
- stepper_ydpi = 720;
- nozzle_ydpi = 360;
- if (xdpi == 2880)
- physical_xdpi = 2880;
- else
- physical_xdpi = 720;
-
- total_channels = 4;
- head_offset = stp_zalloc(sizeof(int) * total_channels);
- memset(head_offset, 0, sizeof(head_offset));
-
- if ( colormode == COLOR_MONOCHROME )
- nozzles = 64; /* black nozzles */
- else
- nozzles = 24; /* color nozzles */
- if (colormode == COLOR_MONOCHROME)
- {
- head_offset[0] = 0; /* K starts at 0 */
- head_offset[1] = 144 ;/* how far C starts after K */
- head_offset[2] = 144 + 64;/* how far M starts after K */
- head_offset[3] = 144 + 64 + 64;/* how far Y starts after K */
- top += 11;
- }
- else if (colormode == COLOR_CMYK)
+ if ((inks = canon_inks(caps, res_code, colormode, bits))!=0)
{
- head_offset[0] = 0; /* K starts at 0 */
- head_offset[1] = 144 ;/* how far C starts after K */
- head_offset[2] = 144 + 64;/* how far M starts after K */
- head_offset[3] = 144 + 64 + 64;/* how far Y starts after K */
- top += 5;
- }
- else /* colormode == CMY */
- {
- head_offset[0] = 0; /* K starts at 0 */
- head_offset[1] = 0 ;/* how far C starts after K */
- head_offset[2] = 64;/* how far M starts after K */
- head_offset[3] = 128;/* how far Y starts after K */
- top += 18;
- }
-
- nozzle_separation = stepper_ydpi / nozzle_ydpi;
- horizontal_passes = xdpi / physical_xdpi;
- vertical_passes = 1;
- vertical_oversample = ydpi / stepper_ydpi;
-
- privdata.bidirectional = 1; /* 1: bidirectional; 0: unidirectional printing */
- privdata.direction = 1;
- stp_set_driver_data(nv, &privdata);
-
- stp_deprintf(STP_DBG_CANON,"canon: initializing weaving: nozzles=%d, nozzle_separation=%d, "
- "horizontal_passes=%d, vertical_passes=%d,vertical_oversample=%d, total_channels=%d \n",
- nozzles, nozzle_separation,
- horizontal_passes, vertical_passes,
- vertical_oversample, total_channels);
-
- weave = stp_initialize_weave(nozzles, nozzle_separation,
- horizontal_passes, vertical_passes,
- vertical_oversample, total_channels,
- 1,
- out_width, out_length,
- top * stepper_ydpi / 72,
- page_height * stepper_ydpi / 72,
- 1, head_offset, nv,
- canon_flush_pass,
- stp_fill_uncompressed,
- stp_pack_uncompressed,
- stp_compute_uncompressed_linewidth);
+ set_ink_ranges(v, inks->c, STP_ECOLOR_C, "MagentaDensity",
+ "LightCyanTransition");
+ set_ink_ranges(v, inks->m, STP_ECOLOR_M, "MagentaDensity",
+ "LightMagentaTransition");
+ set_ink_ranges(v, inks->y, STP_ECOLOR_Y, "YellowDensity",
+ "LightYellowTransition");
+ set_ink_ranges(v, inks->k, STP_ECOLOR_K, "BlackDensity", NULL);
}
-
- in = stp_zalloc(image_width * image_bpp);
- out = stp_zalloc(image_width * out_bpp * 2);
-
- errdiv = image_height / out_length;
- errmod = image_height % out_length;
+ stp_channel_set_density_adjustment
+ (v, STP_ECOLOR_C, 0,
+ get_double_param(v, "CyanDensity") * get_double_param(v, "Density"));
+ stp_channel_set_density_adjustment
+ (v, STP_ECOLOR_M, 0,
+ get_double_param(v, "MagentaDensity") * get_double_param(v, "Density"));
+ stp_channel_set_density_adjustment
+ (v, STP_ECOLOR_Y, 0,
+ get_double_param(v, "YellowDensity") * get_double_param(v, "Density"));
+ stp_channel_set_density_adjustment
+ (v, STP_ECOLOR_K, 0,
+ get_double_param(v, "BlackDensity") * get_double_param(v, "Density"));
+
+ errdiv = image_height / out_height;
+ errmod = image_height % out_height;
errval = 0;
errlast = -1;
errline = 0;
- if (canon_lum_adjustment(printer)) {
- int k;
- for (k = 0; k < 49; k++) {
- have_lum_adjustment= 1;
- lum_adjustment[k] = canon_lum_adjustment(printer)[k];
- if(pt)
- if (pt->lum_adjustment)
- lum_adjustment[k] *= pt->lum_adjustment[k];
+
+ if (!stp_check_curve_parameter(v, "HueMap", STP_PARAMETER_ACTIVE) &&
+ pt->hue_adjustment)
+ {
+ hue_adjustment = stp_read_and_compose_curves
+ (canon_hue_adjustment(model),
+ pt ? pt->hue_adjustment : NULL, STP_CURVE_COMPOSE_ADD, 384);
+ stp_set_curve_parameter(v, "HueMap", hue_adjustment);
+ stp_curve_destroy(hue_adjustment);
}
- }
- if (canon_sat_adjustment(printer)) {
- int k;
- for (k = 0; k < 49; k++) {
- have_sat_adjustment= 1;
- sat_adjustment[k] = canon_sat_adjustment(printer)[k];
- if(pt)
- if (pt->sat_adjustment)
- sat_adjustment[k] *= pt->sat_adjustment[k];
+ if (!stp_check_curve_parameter(v, "LumMap", STP_PARAMETER_ACTIVE) &&
+ pt->lum_adjustment)
+ {
+ lum_adjustment = stp_read_and_compose_curves
+ (canon_lum_adjustment(model),
+ pt ? pt->lum_adjustment : NULL, STP_CURVE_COMPOSE_MULTIPLY, 384);
+ stp_set_curve_parameter(v, "LumMap", lum_adjustment);
+ stp_curve_destroy(lum_adjustment);
}
- }
- if (canon_hue_adjustment(printer)) {
- int k;
- for (k = 0; k < 49; k++) {
- have_hue_adjustment= 1;
- hue_adjustment[k] = canon_hue_adjustment(printer)[k];
- if(pt)
- if (pt->hue_adjustment)
- hue_adjustment[k] += pt->hue_adjustment[k];
+ if (!stp_check_curve_parameter(v, "SatMap", STP_PARAMETER_ACTIVE) &&
+ pt->sat_adjustment)
+ {
+ sat_adjustment = stp_read_and_compose_curves
+ (canon_sat_adjustment(model),
+ pt ? pt->sat_adjustment : NULL, STP_CURVE_COMPOSE_MULTIPLY, 384);
+ stp_set_curve_parameter(v, "SatMap", sat_adjustment);
+ stp_curve_destroy(sat_adjustment);
}
- }
- dt = stp_create_dither_data();
- stp_add_channel(dt, cols[0], ECOLOR_K, 0);
- stp_add_channel(dt, cols[1], ECOLOR_C, 0);
- stp_add_channel(dt, cols[4], ECOLOR_C, 1);
- stp_add_channel(dt, cols[2], ECOLOR_M, 0);
- stp_add_channel(dt, cols[5], ECOLOR_M, 1);
- stp_add_channel(dt, cols[3], ECOLOR_Y, 0);
- stp_add_channel(dt, cols[6], ECOLOR_Y, 1);
+ out_channels = stp_color_init(v, image, 65536);
+ stp_allocate_component_data(v, "Driver", NULL, NULL, &privdata);
-/* ---- go through every image line (y) ---- */
-
- for (y = 0; y < out_length; y ++)
+ privdata.emptylines = 0;
+ for (y = 0; y < out_height; y ++)
{
int duplicate_line = 1;
-/* stp_deprintf(STP_DBG_CANON,"\ny=%d\n",y); */
-
- if ((y & 63) == 0)
- image->note_progress(image, y, out_length);
-
if (errline != errlast)
{
errlast = errline;
duplicate_line = 0;
- if (image->get_row(image, in, errline) != STP_IMAGE_OK)
- break;
- (*colorfunc)(nv, in, out, &zero_mask, image_width, image_bpp, cmap,
- have_hue_adjustment ? hue_adjustment : NULL,
- have_lum_adjustment ? lum_adjustment : NULL,
- have_sat_adjustment ? sat_adjustment : NULL);
+ if (stp_color_get_row(v, image, errline, &zero_mask))
+ {
+ status = 2;
+ break;
+ }
}
- stp_dither(out, y, dither, dt, duplicate_line, zero_mask);
-
-#if 0 /* excessive debugging */
- stp_deprintf(STP_DBG_CANON,"dithering done, length=%d, out_width=%d \n"
- "black=%p; cyan=%p; magenta=%p; yellow=%p \n",
- length, out_width, cols[0], cols[1], cols[2], cols[3]);
- dump_area(cols[0], length, "black:");
- dump_area(cols[1], length, "cyan:");
- dump_area(cols[2], length, "magenta:");
- dump_area(cols[3], length, "yellow:");
-#endif
-
- if (init.caps->features & CANON_CAP_WEAVE && xdpi > 360)
- {
- stp_write_weave(weave, length, stepper_ydpi, model, out_width,
- left * physical_xdpi / xdpi,
- xdpi, physical_xdpi, cols);
- }
-
- else
- {
- canon_write_line(nv, caps, ydpi, cols[0], delay_k,
- cols[1], delay_c,
- cols[2], delay_m,
- cols[3], delay_y,
- cols[4], delay_lc,
- cols[5], delay_lm,
- cols[6], delay_ly,
- length, out_width, left, &emptylines, bits);
-
- canon_advance_buffer(cols[0], buf_length,delay_k);
- canon_advance_buffer(cols[1], buf_length,delay_c);
- canon_advance_buffer(cols[2], buf_length,delay_m);
- canon_advance_buffer(cols[3], buf_length,delay_y);
- canon_advance_buffer(cols[4], buf_length,delay_lc);
- canon_advance_buffer(cols[5], buf_length,delay_lm);
- canon_advance_buffer(cols[6], buf_length,delay_ly);
- }
-
+ stp_dither(v, y, duplicate_line, zero_mask, NULL);
+ canon_printfunc(v);
errval += errmod;
errline += errdiv;
- if (errval >= out_length)
+ if (errval >= out_height)
{
- errval -= out_length;
+ errval -= out_height;
errline ++;
}
}
- if (init.caps->features & CANON_CAP_WEAVE && xdpi > 360)
- {
- stp_flush_all(weave, model, out_width,
- left * physical_xdpi / xdpi,
- ydpi, xdpi, physical_xdpi);
- canon_advance_paper(nv, 5);
- }
- else
- {
/*
* Flush delayed buffers...
*/
- if (delay_max) {
+ if (privdata.delay_max) {
stp_deprintf(STP_DBG_CANON,"\ncanon: flushing %d possibly delayed buffers\n",
- delay_max);
- for (y= 0; y<delay_max; y++) {
-
- canon_write_line(nv, caps, ydpi, cols[0], delay_k,
- cols[1], delay_c,
- cols[2], delay_m,
- cols[3], delay_y,
- cols[4], delay_lc,
- cols[5], delay_lm,
- cols[6], delay_ly,
- length, out_width, left, &emptylines, bits);
-
- canon_advance_buffer(cols[0], buf_length,delay_k);
- canon_advance_buffer(cols[1], buf_length,delay_c);
- canon_advance_buffer(cols[2], buf_length,delay_m);
- canon_advance_buffer(cols[3], buf_length,delay_y);
- canon_advance_buffer(cols[4], buf_length,delay_lc);
- canon_advance_buffer(cols[5], buf_length,delay_lm);
- canon_advance_buffer(cols[6], buf_length,delay_ly);
+ privdata.delay_max);
+ for (y= 0; y<privdata.delay_max; y++) {
+
+ canon_write_line(v);
+ for (i = 0; i < 7; i++)
+ canon_advance_buffer(privdata.cols[i], privdata.buf_length,
+ privdata.delay[i]);
}
}
- }
- image->progress_conclude(image);
+ stp_image_conclude(image);
/*
* Cleanup...
*/
- stp_free_dither_data(dt);
- stp_free_dither(dither);
- stp_free_lut(nv);
- stp_free(in);
- stp_free(out);
- if (weave != NULL) stp_destroy_weave(weave);
- for (y = 0; y < 6; y++)
- if ( cols[y] != NULL ) stp_free(cols[y]);
-
- canon_deinit_printer(nv, &init);
- stp_free_vars(nv);
+ for (i = 0; i < 7; i++)
+ if (privdata.cols[i])
+ stp_free(privdata.cols[i]);
+
+ canon_deinit_printer(v, &init);
+ return status;
}
-const stp_printfuncs_t stp_canon_printfuncs =
+static int
+canon_print(const stp_vars_t *v, stp_image_t *image)
+{
+ int status;
+ stp_vars_t *nv = stp_vars_create_copy(v);
+ stp_prune_inactive_options(nv);
+ status = canon_do_print(nv, image);
+ stp_vars_destroy(nv);
+ return status;
+}
+
+static const stp_printfuncs_t print_canon_printfuncs =
{
+ canon_list_parameters,
canon_parameters,
stp_default_media_size,
canon_imageable_area,
canon_limit,
canon_print,
- canon_default_parameters,
canon_describe_resolution,
+ canon_describe_output,
stp_verify_printer_params,
- stp_start_job,
+ canon_start_job,
canon_end_job
};
@@ -3010,24 +2962,36 @@ canon_shift_buffer(unsigned char *line,int length,int bits)
}
}
+#if 0
+static void
+canon_shift_buffer2(unsigned char *line,int length,int bits)
+{
+ int i;
+ for (i=length-1; i>0; i--) {
+ line[i]= (line[i] >> bits) | (line[i-1] << (8-bits));
+ }
+ line[0] = line[0] >> bits;
+}
+#endif
+
/*
* 'canon_write()' - Send graphics using TIFF packbits compression.
*/
static int
-canon_write(const stp_vars_t v, /* I - Print file or command */
- const canon_cap_t *caps, /* I - Printer model; currently unused */
+canon_write(stp_vars_t *v, /* I - Print file or command */
+ const canon_cap_t * caps, /* I - Printer model */
unsigned char *line, /* I - Output bitmap data */
int length, /* I - Length of bitmap data */
int coloridx, /* I - Which color */
- int ydpi, /* I - Vertical resolution; currently unused */
+ int ydpi, /* I - Vertical resolution */
int *empty, /* IO- Preceeding empty lines */
- int width, /* I - Printed width; currently unused */
+ int width, /* I - Printed width */
int offset, /* I - Offset from left side */
int bits)
{
unsigned char
- comp_buf[COMPBUFWIDTH], /* Compression buffer */
+ comp_buf[COMPBUFWIDTH + COMPBUFWIDTH / 4], /* Compression buffer */
in_fold[COMPBUFWIDTH],
*in_ptr= line,
*comp_ptr, *comp_data;
@@ -3045,14 +3009,14 @@ canon_write(const stp_vars_t v, /* I - Print file or command */
if (bits==2) {
- memset(in_fold,0,length*2);
+ memset(in_fold,0,length);
canon_fold_2bit(line,length,in_fold);
in_ptr= in_fold;
length= (length*8/4); /* 4 pixels in 8bit */
offset= (offset*8/4); /* 4 pixels in 8bit */
}
if (bits==3) {
- memset(in_fold,0,length*3);
+ memset(in_fold,0,length);
canon_fold_3bit(line,length,in_fold);
in_ptr= in_fold;
length= (length*8)/3;
@@ -3065,7 +3029,6 @@ canon_write(const stp_vars_t v, /* I - Print file or command */
}
#endif
}
-
/* pack left border rounded to multiples of 8 dots */
comp_data= comp_buf;
@@ -3086,23 +3049,21 @@ canon_write(const stp_vars_t v, /* I - Print file or command */
"bitoffset=%d!!\n",bitoffset);
}
- stp_pack_tiff(in_ptr, length, comp_data, &comp_ptr);
- newlength = comp_ptr - comp_buf;
+ stp_pack_tiff(v, in_ptr, length, comp_data, &comp_ptr, NULL, NULL);
+ newlength= comp_ptr - comp_buf;
/* send packed empty lines if any */
if (*empty) {
stp_zfwrite("\033\050\145\002\000", 5, 1, v);
- stp_putc((*empty) >> 8 , v);
- stp_putc((*empty) & 255, v);
+ stp_put16_be(*empty, v);
*empty= 0;
}
/* Send a line of raster graphics... */
stp_zfwrite("\033\050\101", 3, 1, v);
- stp_putc((newlength+1) & 255, v);
- stp_putc((newlength+1) >> 8, v);
+ stp_put16_le(newlength + 1, v);
color= "CMYKcmy"[coloridx];
if (!color) color= 'K';
stp_putc(color,v);
@@ -3113,157 +3074,69 @@ canon_write(const stp_vars_t v, /* I - Print file or command */
static void
-canon_write_line(const stp_vars_t v, /* I - Print file or command */
- const canon_cap_t * caps, /* I - Printer model */
- int ydpi, /* I - Vertical resolution */
- unsigned char *k, /* I - Output bitmap data */
- int dk, /* I - */
- unsigned char *c, /* I - Output bitmap data */
- int dc, /* I - */
- unsigned char *m, /* I - Output bitmap data */
- int dm, /* I - */
- unsigned char *y, /* I - Output bitmap data */
- int dy, /* I - */
- unsigned char *lc, /* I - Output bitmap data */
- int dlc, /* I - */
- unsigned char *lm, /* I - Output bitmap data */
- int dlm, /* I - */
- unsigned char *ly, /* I - Output bitmap data */
- int dly, /* I - */
- int l, /* I - Length of bitmap data */
- int width, /* I - Printed width */
- int offset, /* I - horizontal offset */
- int *empty, /* IO- unflushed empty lines */
- int bits)
+canon_write_line(stp_vars_t *v)
{
+ canon_privdata_t *pd =
+ (canon_privdata_t *) stp_get_component_data(v, "Driver");
+ static const int write_sequence[] = { 0, 3, 2, 1, 6, 5, 4 };
+ static const int write_number[] = { 3, 2, 1, 0, 6, 5, 4 };
+ int i;
int written= 0;
- stp_deprintf(STP_DBG_CANON,"canon_write_line: length=%d, width=%d, (hor.)offset=%d\n",
- l, width, offset);
-
- if (k) written+=
- canon_write(v, caps, k+ dk*l, l, 3, ydpi, empty, width, offset, bits);
- if (y) written+=
- canon_write(v, caps, y+ dy*l, l, 2, ydpi, empty, width, offset, bits);
- if (m) written+=
- canon_write(v, caps, m+ dm*l, l, 1, ydpi, empty, width, offset, bits);
- if (c) written+=
- canon_write(v, caps, c+ dc*l, l, 0, ydpi, empty, width, offset, bits);
- if (ly) written+=
- canon_write(v, caps, ly+dly*l, l, 6, ydpi, empty, width, offset, bits);
- if (lm) written+=
- canon_write(v, caps, lm+dlm*l, l, 5, ydpi, empty, width, offset, bits);
- if (lc) written+=
- canon_write(v, caps, lc+dlc*l, l, 4, ydpi, empty, width, offset, bits);
-
- if (written||(empty==0))
- stp_zfwrite("\033\050\145\002\000\000\001", 7, 1, v);
- else
- (*empty)+= 1;
-}
-
-static void
-canon_advance_paper(stp_vars_t v, int advance)
-{
- if ( advance > 0 )
+ for (i = 0; i < 7; i++)
{
- int a0, a1, a2, a3;
- stp_deprintf(STP_DBG_CANON,"canon_advance_paper: advance= %d\n", advance);
- a0 = advance & 0xff;
- a1 = (advance >> 8) & 0xff;
- a2 = (advance >> 16) & 0xff;
- a3 = (advance >> 24) & 0xff;
- stp_zprintf(v, "\033(e%c%c%c%c%c%c", 4, 0, a3, a2, a1, a0);
+ int col = write_sequence[i];
+ int num = write_number[i];
+ if (pd->cols[col])
+ written += canon_write(v, pd->caps,
+ pd->cols[col] + pd->delay[col] * pd->buf_length,
+ pd->buf_length / pd->bits, num, pd->ydpi,
+ &(pd->emptylines), pd->out_width,
+ pd->left, pd->bits);
}
+ if (written)
+ stp_zfwrite("\033\050\145\002\000\000\001", 7, 1, v);
+ else
+ pd->emptylines += 1;
}
-static void
-canon_flush_pass(stp_softweave_t *sw, int passno, int model, int width,
- int hoffset, int ydpi, int xdpi, int physical_xdpi,
- int vertical_subpass)
-{
- const stp_vars_t nv = (sw->v);
- stp_lineoff_t *lineoffs = stp_get_lineoffsets_by_pass(sw, passno);
- stp_lineactive_t *lineactive = stp_get_lineactive_by_pass(sw, passno);
- const stp_linebufs_t *bufs = stp_get_linebases_by_pass(sw, passno);
- stp_pass_t *pass = stp_get_pass_by_pass(sw, passno);
- stp_linecount_t *linecount = stp_get_linecount_by_pass(sw, passno);
- canon_privdata_weave *privdata_weave = stp_get_driver_data(nv);
- int papershift = (pass->logicalpassstart - sw->last_pass_offset);
- int color, line, empty = 0, written = 0, linelength = 0, lines = 0;
- int idx[4]={3, 0, 1, 2}; /* color numbering is different between canon_write and weaving */
-
- stp_deprintf(STP_DBG_CANON,"canon_flush_pass: pass=%d, papershift=%d\n", passno, papershift);
-
- for ( color = 0; color < sw->ncolors; color++ ) /* find max. linecount */
- {
- if ( linecount[0].v[color] > lines ) lines = linecount[0].v[color];
- }
- for ( line = 0; line < lines; line++ ) /* go through each nozzle of that pass */
- {
- stp_deprintf(STP_DBG_CANON,"canon_flush_pass: line=%d, written=%d, empty=%d \n",
- line, written, empty);
- if ( written > 0 )
- canon_cmd(nv,ESC28,0x65, 2, 0, 1); /* go to next nozzle if there was printed some data */
-
- written = 0;
- for ( color = 0; color < sw->ncolors; color++ )
- {
- if ( line < linecount[0].v[color] ) /* try only existing lines */
- {
- if ( lineactive[0].v[color] > 0 )
- {
- linelength = lineoffs[0].v[color] / linecount[0].v[color];
-/* stp_deprintf(STP_DBG_CANON,"canon_flush_pass: linelength=%d, bufs[0].v[color]=%p,"
- "bufs[0].v[color]+line * linelength=%p, empty=%d \n", linelength, bufs[0].v[color], bufs[0].v[color] + line * linelength, empty);
-*/
- if ( pass->logicalpassstart > sw->last_pass_offset)
- {
- canon_advance_paper(nv, papershift);
- sw->last_pass_offset = pass->logicalpassstart;
- if (privdata_weave->bidirectional)
- {
- privdata_weave->direction = (privdata_weave->direction +1) & 1;
- canon_set_X72(nv, privdata_weave->direction);
- }
- }
-
- written += canon_write(nv, NULL,
- (unsigned char *)(bufs[0].v[color] + line * linelength),
- linelength, idx[color], 0, &empty, 0, hoffset, sw->bitwidth);
- }
- }
- }
-
- if ( written == 0 ) /* count unused nozzles */
- empty += 1;
- }
-
- for ( color = 0; color < sw->ncolors; color++ )
- {
- lineoffs[0].v[color] = 0;
- linecount[0].v[color] = 0;
- }
+static stp_family_t print_canon_module_data =
+ {
+ &print_canon_printfuncs,
+ NULL
+ };
- sw->last_pass = pass->pass;
- pass->pass = -1;
+static int
+print_canon_module_init(void)
+{
+ return stp_family_register(print_canon_module_data.printer_list);
}
+static int
+print_canon_module_exit(void)
+{
+ return stp_family_unregister(print_canon_module_data.printer_list);
+}
+/* Module header */
+#define stp_module_version print_canon_LTX_stp_module_version
+#define stp_module_data print_canon_LTX_stp_module_data
+stp_module_version_t stp_module_version = {0, 0};
-
-
-
-
-
-
-
-
-
-
+stp_module_t stp_module_data =
+ {
+ "canon",
+ VERSION,
+ "Canon family driver",
+ STP_MODULE_CLASS_FAMILY,
+ NULL,
+ print_canon_module_init,
+ print_canon_module_exit,
+ (void *) &print_canon_module_data
+ };
diff --git a/src/main/print-color.c b/src/main/print-color.c
index 3587e9a..b381667 100644
--- a/src/main/print-color.c
+++ b/src/main/print-color.c
@@ -1,7 +1,7 @@
/*
- * "$Id: print-color.c,v 1.26.2.3 2003/08/25 17:04:13 rleigh Exp $"
+ * "$Id: print-color.c,v 1.129 2005/06/30 01:45:19 rlk Exp $"
*
- * Print plug-in color management for the GIMP.
+ * Gutenprint color management module - traditional Gutenprint algorithm.
*
* Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
* Robert Krawitz (rlk@alum.mit.edu)
@@ -29,2120 +29,1606 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#include <gimp-print/gimp-print.h>
-#include "gimp-print-internal.h"
-#include <gimp-print/gimp-print-intl-internal.h>
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <gutenprint/curve-cache.h>
#include <math.h>
-#include <string.h>
+#ifdef HAVE_LIMITS_H
#include <limits.h>
+#endif
+#include <string.h>
+#include "color-conversion.h"
#ifdef __GNUC__
#define inline __inline__
#endif
-typedef struct
+static const color_correction_t color_corrections[] =
{
- unsigned steps;
- unsigned short *composite;
- unsigned short *red;
- unsigned short *green;
- unsigned short *blue;
- unsigned shiftval;
- unsigned bin_size;
- unsigned bin_shift;
-} lut_t;
-
-/*
- * RGB to grayscale luminance constants...
- */
-
-#define LUM_RED 31
-#define LUM_GREEN 61
-#define LUM_BLUE 8
-
-/* rgb/hsl conversions taken from Gimp common/autostretch_hsv.c */
+ { "None", N_("Default"), COLOR_CORRECTION_DEFAULT, 1 },
+ { "Accurate", N_("High Accuracy"), COLOR_CORRECTION_ACCURATE, 1 },
+ { "Bright", N_("Bright Colors"), COLOR_CORRECTION_BRIGHT, 1 },
+ { "Hue", N_("Correct Hue Only"), COLOR_CORRECTION_HUE, 1 },
+ { "Uncorrected", N_("Uncorrected"), COLOR_CORRECTION_UNCORRECTED, 0 },
+ { "Desaturated", N_("Desaturated"), COLOR_CORRECTION_DESATURATED, 0 },
+ { "Threshold", N_("Threshold"), COLOR_CORRECTION_THRESHOLD, 0 },
+ { "Density", N_("Density"), COLOR_CORRECTION_DENSITY, 0 },
+ { "Raw", N_("Raw"), COLOR_CORRECTION_RAW, 0 },
+ { "Predithered", N_("Pre-Dithered"), COLOR_CORRECTION_PREDITHERED, 0 },
+};
+
+static const int color_correction_count =
+sizeof(color_corrections) / sizeof(color_correction_t);
+
+static const channel_param_t channel_params[] =
+{
+ { CMASK_K, "BlackGamma", "BlackCurve", "WhiteGamma", "WhiteCurve" },
+ { CMASK_C, "CyanGamma", "CyanCurve", "RedGamma", "RedCurve" },
+ { CMASK_M, "MagentaGamma", "MagentaCurve", "GreenGamma", "GreenCurve" },
+ { CMASK_Y, "YellowGamma", "YellowCurve", "BlueGamma", "BlueCurve" },
+ { CMASK_W, "WhiteGamma", "WhiteCurve", "BlackGamma", "BlackCurve" },
+ { CMASK_R, "RedGamma", "RedCurve", "CyanGamma", "CyanCurve" },
+ { CMASK_G, "GreenGamma", "GreenCurve", "MagentaGamma", "MagentaCurve" },
+ { CMASK_B, "BlueGamma", "BlueCurve", "YellowGamma", "YellowCurve" },
+};
+
+static const int channel_param_count =
+sizeof(channel_params) / sizeof(channel_param_t);
+
+static const channel_param_t raw_channel_params[] =
+{
+ { 0, "GammaCh0", "CurveCh0", "GammaCh0", "CurveCh0" },
+ { 1, "GammaCh1", "CurveCh1", "GammaCh1", "CurveCh1" },
+ { 2, "GammaCh2", "CurveCh2", "GammaCh2", "CurveCh2" },
+ { 3, "GammaCh3", "CurveCh3", "GammaCh3", "CurveCh3" },
+ { 4, "GammaCh4", "CurveCh4", "GammaCh4", "CurveCh4" },
+ { 5, "GammaCh5", "CurveCh5", "GammaCh5", "CurveCh5" },
+ { 6, "GammaCh6", "CurveCh6", "GammaCh6", "CurveCh6" },
+ { 7, "GammaCh7", "CurveCh7", "GammaCh7", "CurveCh7" },
+ { 8, "GammaCh8", "CurveCh8", "GammaCh8", "CurveCh8" },
+ { 9, "GammaCh9", "CurveCh9", "GammaCh9", "CurveCh9" },
+ { 10, "GammaCh10", "CurveCh10", "GammaCh10", "CurveCh10" },
+ { 11, "GammaCh11", "CurveCh11", "GammaCh11", "CurveCh11" },
+ { 12, "GammaCh12", "CurveCh12", "GammaCh12", "CurveCh12" },
+ { 13, "GammaCh13", "CurveCh13", "GammaCh13", "CurveCh13" },
+ { 14, "GammaCh14", "CurveCh14", "GammaCh14", "CurveCh14" },
+ { 15, "GammaCh15", "CurveCh15", "GammaCh15", "CurveCh15" },
+ { 16, "GammaCh16", "CurveCh16", "GammaCh16", "CurveCh16" },
+ { 17, "GammaCh17", "CurveCh17", "GammaCh17", "CurveCh17" },
+ { 18, "GammaCh18", "CurveCh18", "GammaCh18", "CurveCh18" },
+ { 19, "GammaCh19", "CurveCh19", "GammaCh19", "CurveCh19" },
+ { 20, "GammaCh20", "CurveCh20", "GammaCh20", "CurveCh20" },
+ { 21, "GammaCh21", "CurveCh21", "GammaCh21", "CurveCh21" },
+ { 22, "GammaCh22", "CurveCh22", "GammaCh22", "CurveCh22" },
+ { 23, "GammaCh23", "CurveCh23", "GammaCh23", "CurveCh23" },
+ { 24, "GammaCh24", "CurveCh24", "GammaCh24", "CurveCh24" },
+ { 25, "GammaCh25", "CurveCh25", "GammaCh25", "CurveCh25" },
+ { 26, "GammaCh26", "CurveCh26", "GammaCh26", "CurveCh26" },
+ { 27, "GammaCh27", "CurveCh27", "GammaCh27", "CurveCh27" },
+ { 28, "GammaCh28", "CurveCh28", "GammaCh28", "CurveCh28" },
+ { 29, "GammaCh29", "CurveCh29", "GammaCh29", "CurveCh29" },
+ { 30, "GammaCh30", "CurveCh30", "GammaCh30", "CurveCh30" },
+ { 31, "GammaCh31", "CurveCh31", "GammaCh31", "CurveCh31" },
+};
+
+static const int raw_channel_param_count =
+sizeof(raw_channel_params) / sizeof(channel_param_t);
+
+
+static const color_description_t color_descriptions[] =
+{
+ { N_("Grayscale"), 1, 1, COLOR_ID_GRAY, COLOR_BLACK, CMASK_K, 1,
+ COLOR_CORRECTION_UNCORRECTED, &stpi_color_convert_to_gray },
+ { N_("Whitescale"), 1, 1, COLOR_ID_WHITE, COLOR_WHITE, CMASK_K, 1,
+ COLOR_CORRECTION_UNCORRECTED, &stpi_color_convert_to_gray },
+ { N_("RGB"), 1, 1, COLOR_ID_RGB, COLOR_WHITE, CMASK_CMY, 3,
+ COLOR_CORRECTION_ACCURATE, &stpi_color_convert_to_color },
+ { N_("CMY"), 1, 1, COLOR_ID_CMY, COLOR_BLACK, CMASK_CMY, 3,
+ COLOR_CORRECTION_ACCURATE, &stpi_color_convert_to_color },
+ { N_("CMYK"), 1, 0, COLOR_ID_CMYK, COLOR_BLACK, CMASK_CMYK, 4,
+ COLOR_CORRECTION_ACCURATE, &stpi_color_convert_to_kcmy },
+ { N_("KCMY"), 1, 1, COLOR_ID_KCMY, COLOR_BLACK, CMASK_CMYK, 4,
+ COLOR_CORRECTION_ACCURATE, &stpi_color_convert_to_kcmy },
+ { N_("Raw"), 1, 1, COLOR_ID_RAW, COLOR_UNKNOWN, 0, -1,
+ COLOR_CORRECTION_RAW, &stpi_color_convert_raw },
+};
+
+static const int color_description_count =
+sizeof(color_descriptions) / sizeof(color_description_t);
+
+
+static const channel_depth_t channel_depths[] =
+{
+ { "8", 8 },
+ { "16", 16 }
+};
-#define FMAX(a, b) ((a) > (b) ? (a) : (b))
-#define FMIN(a, b) ((a) < (b) ? (a) : (b))
+static const int channel_depth_count =
+sizeof(channel_depths) / sizeof(channel_depth_t);
-static inline void
-calc_rgb_to_hsl(unsigned short *rgb, double *hue, double *sat,
- double *lightness)
+typedef struct
{
- double red, green, blue;
- double h, s, l;
- double min, max;
- double delta;
- int maxval;
-
- red = rgb[0] / 65535.0;
- green = rgb[1] / 65535.0;
- blue = rgb[2] / 65535.0;
+ const stp_parameter_t param;
+ double min;
+ double max;
+ double defval;
+ unsigned channel_mask;
+ int color_only;
+} float_param_t;
+
+#define RAW_GAMMA_CHANNEL(channel) \
+ { \
+ { \
+ "GammaCh" #channel, N_("Channel " #channel " Gamma"), N_("Gamma"), \
+ N_("Gamma for raw channel " #channel), \
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT, \
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 1, channel, 1, 0 \
+ }, 0.1, 4.0, 1.0, CMASK_RAW, 0 \
+ }
- if (red > green)
+static const float_param_t float_parameters[] =
+{
+ {
{
- if (red > blue)
- {
- max = red;
- maxval = 0;
- }
- else
- {
- max = blue;
- maxval = 2;
- }
- min = FMIN(green, blue);
- }
- else
+ "ColorCorrection", N_("Color Correction"), N_("Basic Image Adjustment"),
+ N_("Color correction to be applied"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 1, 1, -1, 1, 0
+ }, 0.0, 0.0, 0.0, CMASK_EVERY, 0
+ },
+ {
{
- if (green > blue)
- {
- max = green;
- maxval = 1;
- }
- else
- {
- max = blue;
- maxval = 2;
- }
- min = FMIN(red, blue);
- }
-
- l = (max + min) / 2.0;
- delta = max - min;
-
- if (delta < .000001) /* Suggested by Eugene Anikin <eugene@anikin.com> */
+ "ChannelBitDepth", N_("Channel Bit Depth"), N_("Core Parameter"),
+ N_("Bit depth per channel"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ }, 0.0, 0.0, 0.0, CMASK_EVERY, 0
+ },
+ {
{
- s = 0.0;
- h = 0.0;
- }
- else
+ "InputImageType", N_("Input Image Type"), N_("Core Parameter"),
+ N_("Input image type"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ }, 0.0, 0.0, 0.0, CMASK_EVERY, 0
+ },
+ {
{
- if (l <= .5)
- s = delta / (max + min);
- else
- s = delta / (2 - max - min);
-
- if (maxval == 0)
- h = (green - blue) / delta;
- else if (maxval == 1)
- h = 2 + (blue - red) / delta;
- else
- h = 4 + (red - green) / delta;
-
- if (h < 0.0)
- h += 6.0;
- else if (h > 6.0)
- h -= 6.0;
- }
-
- *hue = h;
- *sat = s;
- *lightness = l;
-}
+ "STPIOutputType", N_("Output Image Type"), N_("Core Parameter"),
+ N_("Output image type"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_INTERNAL, 1, 1, -1, 1, 0
+ }, 0.0, 0.0, 0.0, CMASK_EVERY, 0
+ },
+ {
+ {
+ "STPIRawChannels", N_("Raw Channels"), N_("Core Parameter"),
+ N_("Raw Channels"),
+ STP_PARAMETER_TYPE_INT, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_INTERNAL, 1, 1, -1, 1, 0
+ }, 1.0, STP_CHANNEL_LIMIT, 1.0, CMASK_EVERY, 0
+ },
+ {
+ {
+ "Brightness", N_("Brightness"), N_("Basic Image Adjustment"),
+ N_("Brightness of the print"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ }, 0.0, 2.0, 1.0, CMASK_ALL, 0
+ },
+ {
+ {
+ "Contrast", N_("Contrast"), N_("Basic Image Adjustment"),
+ N_("Contrast of the print (0 is solid gray)"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ }, 0.0, 4.0, 1.0, CMASK_ALL, 0
+ },
+ {
+ {
+ "LinearContrast", N_("Linear Contrast Adjustment"), N_("Advanced Image Control"),
+ N_("Use linear vs. fixed end point contrast adjustment"),
+ STP_PARAMETER_TYPE_BOOLEAN, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED3, 1, 1, -1, 1, 0
+ }, 0.0, 0.0, 0.0, CMASK_ALL, 0
+ },
+ {
+ {
+ "Gamma", N_("Composite Gamma"), N_("Gamma"),
+ N_("Adjust the gamma of the print. Larger values will "
+ "produce a generally brighter print, while smaller "
+ "values will produce a generally darker print. "),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED1, 0, 1, -1, 1, 0
+ }, 0.1, 4.0, 1.0, CMASK_EVERY, 0
+ },
+ {
+ {
+ "AppGamma", N_("AppGamma"), N_("Gamma"),
+ N_("Gamma value assumed by application"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 1, -1, 1, 0
+ }, 0.1, 4.0, 1.0, CMASK_EVERY, 0
+ },
+ {
+ {
+ "CyanGamma", N_("Cyan"), N_("Gamma"),
+ N_("Adjust the cyan gamma"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED1, 0, 1, 1, 1, 0
+ }, 0.0, 4.0, 1.0, CMASK_C, 1
+ },
+ {
+ {
+ "MagentaGamma", N_("Magenta"), N_("Gamma"),
+ N_("Adjust the magenta gamma"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED1, 0, 1, 2, 1, 0
+ }, 0.0, 4.0, 1.0, CMASK_M, 1
+ },
+ {
+ {
+ "YellowGamma", N_("Yellow"), N_("Gamma"),
+ N_("Adjust the yellow gamma"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED1, 0, 1, 3, 1, 0
+ }, 0.0, 4.0, 1.0, CMASK_Y, 1
+ },
+ {
+ {
+ "RedGamma", N_("Red"), N_("Gamma"),
+ N_("Adjust the red gamma"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED1, 0, 1, 1, 1, 0
+ }, 0.0, 4.0, 1.0, CMASK_R, 1
+ },
+ {
+ {
+ "GreenGamma", N_("Green"), N_("Gamma"),
+ N_("Adjust the green gamma"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED1, 0, 1, 2, 1, 0
+ }, 0.0, 4.0, 1.0, CMASK_G, 1
+ },
+ {
+ {
+ "BlueGamma", N_("Blue"), N_("Gamma"),
+ N_("Adjust the blue gamma"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED1, 0, 1, 3, 1, 0
+ }, 0.0, 4.0, 1.0, CMASK_B, 1
+ },
+ {
+ {
+ "BlackGamma", N_("Black"), N_("Gamma"),
+ N_("Adjust the black gamma"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED1, 0, 1, 3, 1, 0
+ }, 0.0, 4.0, 1.0, CMASK_K, 1
+ },
+ {
+ {
+ "Saturation", N_("Saturation"), N_("Basic Image Adjustment"),
+ N_("Adjust the saturation (color balance) of the print\n"
+ "Use zero saturation to produce grayscale output "
+ "using color and black inks"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ }, 0.0, 9.0, 1.0, CMASK_CMY | CMASK_RGB, 1
+ },
+ /* Need to think this through a bit more -- rlk 20030712 */
+ {
+ {
+ "InkLimit", N_("Ink Limit"), N_("Advanced Output Control"),
+ N_("Limit the total ink printed to the page"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, -1, 0, 0
+ }, 0.0, STP_CHANNEL_LIMIT, STP_CHANNEL_LIMIT, CMASK_CMY, 0
+ },
+ {
+ {
+ "BlackTrans", N_("GCR Transition"), N_("Advanced Output Control"),
+ N_("Adjust the gray component transition rate"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, 0, 1, 0
+ }, 0.0, 1.0, 1.0, CMASK_K, 1
+ },
+ {
+ {
+ "GCRLower", N_("GCR Lower Bound"), N_("Advanced Output Control"),
+ N_("Lower bound of gray component reduction"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, 0, 1, 0
+ }, 0.0, 1.0, 0.2, CMASK_K, 1
+ },
+ {
+ {
+ "GCRUpper", N_("GCR Upper Bound"), N_("Advanced Output Control"),
+ N_("Upper bound of gray component reduction"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, 0, 1, 0
+ }, 0.0, 5.0, 0.5, CMASK_K, 1
+ },
+ RAW_GAMMA_CHANNEL(0),
+ RAW_GAMMA_CHANNEL(1),
+ RAW_GAMMA_CHANNEL(2),
+ RAW_GAMMA_CHANNEL(3),
+ RAW_GAMMA_CHANNEL(4),
+ RAW_GAMMA_CHANNEL(5),
+ RAW_GAMMA_CHANNEL(6),
+ RAW_GAMMA_CHANNEL(7),
+ RAW_GAMMA_CHANNEL(8),
+ RAW_GAMMA_CHANNEL(9),
+ RAW_GAMMA_CHANNEL(10),
+ RAW_GAMMA_CHANNEL(11),
+ RAW_GAMMA_CHANNEL(12),
+ RAW_GAMMA_CHANNEL(13),
+ RAW_GAMMA_CHANNEL(14),
+ RAW_GAMMA_CHANNEL(15),
+ RAW_GAMMA_CHANNEL(16),
+ RAW_GAMMA_CHANNEL(17),
+ RAW_GAMMA_CHANNEL(18),
+ RAW_GAMMA_CHANNEL(19),
+ RAW_GAMMA_CHANNEL(20),
+ RAW_GAMMA_CHANNEL(21),
+ RAW_GAMMA_CHANNEL(22),
+ RAW_GAMMA_CHANNEL(23),
+ RAW_GAMMA_CHANNEL(24),
+ RAW_GAMMA_CHANNEL(25),
+ RAW_GAMMA_CHANNEL(26),
+ RAW_GAMMA_CHANNEL(27),
+ RAW_GAMMA_CHANNEL(28),
+ RAW_GAMMA_CHANNEL(29),
+ RAW_GAMMA_CHANNEL(30),
+ RAW_GAMMA_CHANNEL(31),
+};
+
+static const int float_parameter_count =
+sizeof(float_parameters) / sizeof(float_param_t);
-static inline double
-hsl_value(double n1, double n2, double hue)
+typedef struct
{
- if (hue < 0)
- hue += 6.0;
- else if (hue > 6)
- hue -= 6.0;
- if (hue < 1.0)
- return (n1 + (n2 - n1) * hue);
- else if (hue < 3.0)
- return (n2);
- else if (hue < 4.0)
- return (n1 + (n2 - n1) * (4.0 - hue));
- else
- return (n1);
-}
+ stp_parameter_t param;
+ stp_curve_t **defval;
+ unsigned channel_mask;
+ int hsl_only;
+ int color_only;
+} curve_param_t;
+
+static int standard_curves_initialized = 0;
+
+static stp_curve_t *hue_map_bounds = NULL;
+static stp_curve_t *lum_map_bounds = NULL;
+static stp_curve_t *sat_map_bounds = NULL;
+static stp_curve_t *color_curve_bounds = NULL;
+static stp_curve_t *gcr_curve_bounds = NULL;
+
+
+#define RAW_CURVE_CHANNEL(channel) \
+ { \
+ { \
+ "CurveCh" #channel, N_("Channel " #channel " Curve"), \
+ N_("Output Curves"), N_("Curve for raw channel " #channel), \
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT, \
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 1, channel, 1, 0 \
+ }, &color_curve_bounds, CMASK_RAW, 0, 0 \
+ }
-static inline void
-calc_hsl_to_rgb(unsigned short *rgb, double h, double s, double l)
+static curve_param_t curve_parameters[] =
{
- if (s < .0000001)
+ {
{
- if (l > 1)
- l = 1;
- else if (l < 0)
- l = 0;
- rgb[0] = l * 65535;
- rgb[1] = l * 65535;
- rgb[2] = l * 65535;
- }
- else
+ "CyanCurve", N_("Cyan Curve"), N_("Output Curves"),
+ N_("Cyan curve"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED2, 0, 1, 1, 1, 0
+ }, &color_curve_bounds, CMASK_C, 0, 1
+ },
+ {
{
- double m1, m2;
- double h1, h2;
- h1 = h + 2;
- h2 = h - 2;
-
- if (l < .5)
- m2 = l * (1 + s);
- else
- m2 = l + s - (l * s);
- m1 = (l * 2) - m2;
- rgb[0] = 65535 * hsl_value(m1, m2, h1);
- rgb[1] = 65535 * hsl_value(m1, m2, h);
- rgb[2] = 65535 * hsl_value(m1, m2, h2);
- }
+ "MagentaCurve", N_("Magenta Curve"), N_("Output Curves"),
+ N_("Magenta curve"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED2, 0, 1, 2, 1, 0
+ }, &color_curve_bounds, CMASK_M, 0, 1
+ },
+ {
+ {
+ "YellowCurve", N_("Yellow Curve"), N_("Output Curves"),
+ N_("Yellow curve"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED2, 0, 1, 3, 1, 0
+ }, &color_curve_bounds, CMASK_Y, 0, 1
+ },
+ {
+ {
+ "BlackCurve", N_("Black Curve"), N_("Output Curves"),
+ N_("Black curve"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED2, 0, 1, 0, 1, 0
+ }, &color_curve_bounds, CMASK_K, 0, 0
+ },
+ {
+ {
+ "RedCurve", N_("Red Curve"), N_("Output Curves"),
+ N_("Red curve"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED2, 0, 1, 1, 1, 0
+ }, &color_curve_bounds, CMASK_R, 0, 1
+ },
+ {
+ {
+ "GreenCurve", N_("Green Curve"), N_("Output Curves"),
+ N_("Green curve"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED2, 0, 1, 1, 1, 0
+ }, &color_curve_bounds, CMASK_G, 0, 1
+ },
+ {
+ {
+ "BlueCurve", N_("Blue Curve"), N_("Output Curves"),
+ N_("Blue curve"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED2, 0, 1, 1, 1, 0
+ }, &color_curve_bounds, CMASK_B, 0, 1
+ },
+ {
+ {
+ "WhiteCurve", N_("White Curve"), N_("Output Curves"),
+ N_("White curve"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED2, 0, 1, 1, 1, 0
+ }, &color_curve_bounds, CMASK_W, 0, 0
+ },
+ {
+ {
+ "HueMap", N_("Hue Map"), N_("Advanced HSL Curves"),
+ N_("Hue adjustment curve"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED3, 0, 1, -1, 1, 0
+ }, &hue_map_bounds, CMASK_CMY | CMASK_RGB, 1, 1
+ },
+ {
+ {
+ "SatMap", N_("Saturation Map"), N_("Advanced HSL Curves"),
+ N_("Saturation adjustment curve"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED3, 0, 1, -1, 1, 0
+ }, &sat_map_bounds, CMASK_CMY | CMASK_RGB, 1, 1
+ },
+ {
+ {
+ "LumMap", N_("Luminosity Map"), N_("Advanced HSL Curves"),
+ N_("Luminosity adjustment curve"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED3, 0, 1, -1, 1, 0
+ }, &lum_map_bounds, CMASK_CMY | CMASK_RGB, 1, 1
+ },
+ {
+ {
+ "GCRCurve", N_("Gray Component Reduction"), N_("Advanced Output Control"),
+ N_("Gray component reduction curve"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED3, 0, 1, 0, 1, 0
+ }, &gcr_curve_bounds, CMASK_K, 0, 1
+ },
+ RAW_CURVE_CHANNEL(0),
+ RAW_CURVE_CHANNEL(1),
+ RAW_CURVE_CHANNEL(2),
+ RAW_CURVE_CHANNEL(3),
+ RAW_CURVE_CHANNEL(4),
+ RAW_CURVE_CHANNEL(5),
+ RAW_CURVE_CHANNEL(6),
+ RAW_CURVE_CHANNEL(7),
+ RAW_CURVE_CHANNEL(8),
+ RAW_CURVE_CHANNEL(9),
+ RAW_CURVE_CHANNEL(10),
+ RAW_CURVE_CHANNEL(11),
+ RAW_CURVE_CHANNEL(12),
+ RAW_CURVE_CHANNEL(13),
+ RAW_CURVE_CHANNEL(14),
+ RAW_CURVE_CHANNEL(15),
+ RAW_CURVE_CHANNEL(16),
+ RAW_CURVE_CHANNEL(17),
+ RAW_CURVE_CHANNEL(18),
+ RAW_CURVE_CHANNEL(19),
+ RAW_CURVE_CHANNEL(20),
+ RAW_CURVE_CHANNEL(21),
+ RAW_CURVE_CHANNEL(22),
+ RAW_CURVE_CHANNEL(23),
+ RAW_CURVE_CHANNEL(24),
+ RAW_CURVE_CHANNEL(25),
+ RAW_CURVE_CHANNEL(26),
+ RAW_CURVE_CHANNEL(27),
+ RAW_CURVE_CHANNEL(28),
+ RAW_CURVE_CHANNEL(29),
+ RAW_CURVE_CHANNEL(30),
+ RAW_CURVE_CHANNEL(31),
+};
+
+static const int curve_parameter_count =
+sizeof(curve_parameters) / sizeof(curve_param_t);
+
+
+static const color_description_t *
+get_color_description(const char *name)
+{
+ int i;
+ if (name)
+ for (i = 0; i < color_description_count; i++)
+ {
+ if (strcmp(name, color_descriptions[i].name) == 0)
+ return &(color_descriptions[i]);
+ }
+ return NULL;
}
-static inline void
-update_cmyk(unsigned short *rgb)
+static const channel_depth_t *
+get_channel_depth(const char *name)
{
- int c = 65535 - rgb[0];
- int m = 65535 - rgb[1];
- int y = 65535 - rgb[2];
- int nc, nm, ny;
- int k;
- if (c == m && c == y)
- return;
- k = FMIN(FMIN(c, m), y);
-
- /*
- * This is an attempt to achieve better color balance. The goal
- * is to weaken the pure cyan, magenta, and yellow and strengthen
- * pure red, green, and blue.
- *
- * We also don't want S=1 V=1 cyan to be 100% cyan; it's simply
- * too dark.
- */
-
- nc = (c * 3 + FMIN(c, FMAX(m, y)) * 4 + FMAX(m, y) * 0 + k) / 8;
- nm = (m * 3 + FMIN(m, FMAX(c, y)) * 4 + FMAX(c, y) * 0 + k) / 8;
- ny = (y * 3 + FMIN(y, FMAX(c, m)) * 4 + FMAX(c, m) * 0 + k) / 8;
-
- /*
- * Make sure we didn't go overboard. We don't want to go too
- * close to white unnecessarily.
- */
- nc = c + (nc - c) / 3;
- nm = m + (nm - m) / 3;
- ny = y + (ny - y) / 3;
-
- if (nc > 65535)
- nc = 65535;
- if (nm > 65535)
- nm = 65535;
- if (ny > 65535)
- ny = 65535;
-
- rgb[0] = 65535 - nc;
- rgb[1] = 65535 - nm;
- rgb[2] = 65535 - ny;
+ int i;
+ if (name)
+ for (i = 0; i < channel_depth_count; i++)
+ {
+ if (strcmp(name, channel_depths[i].name) == 0)
+ return &(channel_depths[i]);
+ }
+ return NULL;
}
-/*
- * A lot of this stuff needs to be factored out of here
- */
-static inline unsigned short
-lookup_value(unsigned short value, int lut_size, const unsigned short *lut,
- unsigned shiftval, unsigned bin_size, unsigned bin_shift)
+static const color_correction_t *
+get_color_correction(const char *name)
{
- unsigned subrange;
- unsigned remainder;
- unsigned below;
- unsigned above;
- if (lut_size == 65536)
- return lut[value];
- subrange = value >> bin_shift;
- remainder = value & (bin_size - 1);
- below = lut[subrange];
- if (remainder == 0)
- return below;
- if (subrange == (bin_size - 1))
- above = lut[subrange];
- else
- above = lut[subrange + 1];
- if (above == below)
- return above;
- else
- return below + (((above - below) * remainder) >> bin_shift);
+ int i;
+ if (name)
+ for (i = 0; i < color_correction_count; i++)
+ {
+ if (strcmp(name, color_corrections[i].name) == 0)
+ return &(color_corrections[i]);
+ }
+ return NULL;
}
-/*
- * 'gray_to_gray()' - Convert grayscale image data to grayscale (brightness
- * adjusted).
- */
-
-static void
-gray_to_gray(const stp_vars_t vars,
- const unsigned char *grayin,
- unsigned short *grayout,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+static const color_correction_t *
+get_color_correction_by_tag(color_correction_enum_t correction)
{
- int i0 = -1;
- int o0 = 0;
- int nz = 0;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- double density = stp_get_density(vars);
- if (width <= 0)
- return;
- while (width)
+ int i;
+ for (i = 0; i < color_correction_count; i++)
{
- if (i0 != grayin[0])
- {
- i0 = grayin[0];
- o0 = lut->composite[i0];
- if (density != 1.0)
- o0 = .5 + (o0 * density);
- nz |= o0;
- }
- grayout[0] = o0;
- grayin ++;
- grayout ++;
- width --;
+ if (correction == color_corrections[i].correction)
+ return &(color_corrections[i]);
}
- if (zero_mask)
- *zero_mask = nz ? 0 : 1;
+ return NULL;
}
+
static void
-gray_alpha_to_gray(const stp_vars_t vars,
- const unsigned char *grayin,
- unsigned short *grayout,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+initialize_channels(stp_vars_t *v, stp_image_t *image)
{
- int i0 = -1;
- int i1 = -1;
- int o0 = 0;
- int nz = 0;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- double density = stp_get_density(vars);
- if (width <= 0)
- return;
- while (width)
- {
- if (i0 != grayin[0] || i1 != grayin[1])
- {
- i0 = grayin[0];
- i1 = grayin[1];
- o0 = lut->composite[i0 * i1 / 255 + 255 - i1];
- if (density != 1.0)
- o0 = .5 + (o0 * density);
- nz |= o0;
- }
- grayout[0] = o0;
- grayin += 2;
- grayout ++;
- width --;
- }
- if (zero_mask)
- *zero_mask = nz ? 0 : 1;
+ lut_t *lut = (lut_t *)(stp_get_component_data(v, "Color"));
+ if (stp_check_float_parameter(v, "InkLimit", STP_PARAMETER_ACTIVE))
+ stp_channel_set_ink_limit(v, stp_get_float_parameter(v, "InkLimit"));
+ stp_channel_initialize(v, image, lut->out_channels);
+ lut->channels_are_initialized = 1;
}
-static void
-gray_to_monochrome(const stp_vars_t vars,
- const unsigned char *grayin,
- unsigned short *grayout,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+static int
+stpi_color_traditional_get_row(stp_vars_t *v,
+ stp_image_t *image,
+ int row,
+ unsigned *zero_mask)
{
- int i0 = -1;
- int o0 = 0;
- int nz = 0;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- if (width <= 0)
- return;
- while (width)
- {
- if (i0 != grayin[0])
- {
- i0 = grayin[0];
- o0 = lut->composite[grayin[0]];
- if (o0 < 32768)
- o0 = 0;
- else
- o0 = 65535;
- nz |= o0;
- }
- grayout[0] = o0;
- grayin ++;
- grayout ++;
- width --;
- }
+ const lut_t *lut = (const lut_t *)(stp_get_component_data(v, "Color"));
+ unsigned zero;
+ if (stp_image_get_row(image, lut->in_data,
+ lut->image_width * lut->in_channels, row)
+ != STP_IMAGE_STATUS_OK)
+ return 2;
+ if (!lut->channels_are_initialized)
+ initialize_channels(v, image);
+ zero = (lut->output_color_description->conversion_function)
+ (v, lut->in_data, stp_channel_get_input(v));
if (zero_mask)
- *zero_mask = nz ? 0 : 1;
+ *zero_mask = zero;
+ stp_channel_convert(v, zero_mask);
+ return 0;
}
static void
-gray_alpha_to_monochrome(const stp_vars_t vars,
- const unsigned char *grayin,
- unsigned short *grayout,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+free_channels(lut_t *lut)
{
- int i0 = -1;
- int i1 = -1;
- int o0 = 0;
- int nz = 0;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- if (width <= 0)
- return;
- while (width)
- {
- if (i0 != grayin[0] || i1 != grayin[1])
- {
- i0 = grayin[0];
- i1 = grayin[1];
- o0 = lut->composite[i0 * i1 / 255 + 255 - i1];
- if (o0 < 32768)
- o0 = 0;
- else
- o0 = 65535;
- nz |= o0;
- }
- grayout[0] = o0;
- grayin += 2;
- grayout ++;
- width --;
- }
- if (zero_mask)
- *zero_mask = nz ? 0 : 1;
+ int i;
+ for (i = 0; i < STP_CHANNEL_LIMIT; i++)
+ stp_curve_free_curve_cache(&(lut->channel_curves[i]));
}
-/*
- * 'indexed_to_gray()' - Convert indexed image data to grayscale.
- */
-
-static void
-indexed_to_gray(const stp_vars_t vars,
- const unsigned char *indexed,
- unsigned short *gray,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+static lut_t *
+allocate_lut(void)
{
- int i0 = -1;
- int o0 = 0;
int i;
- int nz = 0;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- unsigned char gray_cmap[256]; /* Grayscale colormap */
- double density = stp_get_density(vars);
- if (width <= 0)
- return;
-
- /* Really should precompute this silly thing... */
- for (i = 0; i < 256; i ++, cmap += 3)
- gray_cmap[i] = (cmap[0] * LUM_RED +
- cmap[1] * LUM_GREEN +
- cmap[2] * LUM_BLUE) / 100;
- while (width)
+ lut_t *ret = stp_zalloc(sizeof(lut_t));
+ for (i = 0; i < STP_CHANNEL_LIMIT; i++)
{
- if (i0 != indexed[0])
- {
- i0 = indexed[0];
- o0 = lut->composite[gray_cmap[i0]];
- if (density != 1.0)
- o0 = .5 + (o0 * density);
- nz |= o0;
- }
- gray[0] = o0;
- gray ++;
- indexed ++;
- width --;
+ ret->gamma_values[i] = 1.0;
}
- if (zero_mask)
- *zero_mask = nz ? 0 : 1;
+ ret->print_gamma = 1.0;
+ ret->app_gamma = 1.0;
+ ret->contrast = 1.0;
+ ret->brightness = 1.0;
+ return ret;
}
-static void
-indexed_alpha_to_gray(const stp_vars_t vars,
- const unsigned char *indexed,
- unsigned short *gray,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+static void *
+copy_lut(void *vlut)
{
- int i0 = -1;
- int i1 = -1;
- int o0 = 0;
- int nz = 0;
+ const lut_t *src = (const lut_t *)vlut;
int i;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- unsigned char gray_cmap[256]; /* Grayscale colormap */
- double density = stp_get_density(vars);
- if (width <= 0)
- return;
-
- /* Really should precompute this silly thing... */
- for (i = 0; i < 256; i ++, cmap += 3)
- gray_cmap[i] = (cmap[0] * LUM_RED +
- cmap[1] * LUM_GREEN +
- cmap[2] * LUM_BLUE) / 100;
-
- while (width)
+ lut_t *dest;
+ if (!src)
+ return NULL;
+ dest = allocate_lut();
+ free_channels(dest);
+
+ dest->steps = src->steps;
+ dest->channel_depth = src->channel_depth;
+ dest->image_width = src->image_width;
+ dest->in_channels = src->in_channels;
+ dest->out_channels = src->out_channels;
+ /* Don't copy channels_are_initialized */
+ dest->invert_output = src->invert_output;
+ dest->input_color_description = src->input_color_description;
+ dest->output_color_description = src->output_color_description;
+ dest->color_correction = src->color_correction;
+ for (i = 0; i < STP_CHANNEL_LIMIT; i++)
{
- if (i0 != indexed[0] || i1 != indexed[1])
- {
- i0 = indexed[0];
- i1 = indexed[1];
- o0 = lut->composite[gray_cmap[i0 * i1 / 255] + 255 - i1];
- if (density != 1.0)
- o0 = .5 + (o0 * density);
- nz |= o0;
- }
- gray[0] = o0;
- gray ++;
- indexed += 2;
- width --;
+ stp_curve_cache_copy(&(dest->channel_curves[i]), &(src->channel_curves[i]));
+ dest->gamma_values[i] = src->gamma_values[i];
}
- if (zero_mask)
- *zero_mask = nz ? 0 : 1;
+ stp_curve_cache_copy(&(dest->brightness_correction),
+ &(src->brightness_correction));
+ stp_curve_cache_copy(&(dest->contrast_correction),
+ &(src->contrast_correction));
+ stp_curve_cache_copy(&(dest->user_color_correction),
+ &(src->user_color_correction));
+ dest->print_gamma = src->print_gamma;
+ dest->app_gamma = src->app_gamma;
+ dest->screen_gamma = src->screen_gamma;
+ dest->contrast = src->contrast;
+ dest->brightness = src->brightness;
+ dest->linear_contrast_adjustment = src->linear_contrast_adjustment;
+ stp_curve_cache_copy(&(dest->hue_map), &(src->hue_map));
+ stp_curve_cache_copy(&(dest->lum_map), &(src->lum_map));
+ stp_curve_cache_copy(&(dest->sat_map), &(src->sat_map));
+ stp_curve_cache_copy(&(dest->gcr_curve), &(src->gcr_curve));
+ /* Don't copy gray_tmp */
+ /* Don't copy cmy_tmp */
+ if (src->in_data)
+ {
+ dest->in_data = stp_malloc(src->image_width * src->in_channels);
+ memset(dest->in_data, 0, src->image_width * src->in_channels);
+ }
+ return dest;
}
static void
-indexed_to_monochrome(const stp_vars_t vars,
- const unsigned char *indexed,
- unsigned short *gray,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+free_lut(void *vlut)
{
- int i0 = -1;
- int o0 = 0;
- int i;
- int nz = 0;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- unsigned char gray_cmap[256]; /* Grayscale colormap */
- if (width <= 0)
- return;
+ lut_t *lut = (lut_t *)vlut;
+ free_channels(lut);
+ stp_curve_free_curve_cache(&(lut->brightness_correction));
+ stp_curve_free_curve_cache(&(lut->contrast_correction));
+ stp_curve_free_curve_cache(&(lut->user_color_correction));
+ stp_curve_free_curve_cache(&(lut->hue_map));
+ stp_curve_free_curve_cache(&(lut->lum_map));
+ stp_curve_free_curve_cache(&(lut->sat_map));
+ stp_curve_free_curve_cache(&(lut->gcr_curve));
+ STP_SAFE_FREE(lut->gray_tmp);
+ STP_SAFE_FREE(lut->cmy_tmp);
+ STP_SAFE_FREE(lut->in_data);
+ memset(lut, 0, sizeof(lut_t));
+ stp_free(lut);
+}
- /* Really should precompute this silly thing... */
- for (i = 0; i < 256; i ++, cmap += 3)
- gray_cmap[i] = (cmap[0] * LUM_RED +
- cmap[1] * LUM_GREEN +
- cmap[2] * LUM_BLUE) / 100;
+static stp_curve_t *
+compute_gcr_curve(const stp_vars_t *vars)
+{
+ stp_curve_t *curve;
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color"));
+ double k_lower = 0.0;
+ double k_upper = 1.0;
+ double k_trans = 1.0;
+ double i_k_trans = 1.0;
+ double *tmp_data = stp_malloc(sizeof(double) * lut->steps);
+ int i;
- while (width)
+ if (stp_check_float_parameter(vars, "GCRUpper", STP_PARAMETER_DEFAULTED))
+ k_upper = stp_get_float_parameter(vars, "GCRUpper");
+ if (stp_check_float_parameter(vars, "GCRLower", STP_PARAMETER_DEFAULTED))
+ k_lower = stp_get_float_parameter(vars, "GCRLower");
+ if (stp_check_float_parameter(vars, "BlackTrans", STP_PARAMETER_DEFAULTED))
+ k_trans = stp_get_float_parameter(vars, "BlackTrans");
+ k_upper *= lut->steps;
+ k_lower *= lut->steps;
+
+ if (k_lower > lut->steps)
+ k_lower = lut->steps;
+ if (k_upper < k_lower)
+ k_upper = k_lower + 1;
+ i_k_trans = 1.0 / k_trans;
+
+ for (i = 0; i < k_lower; i ++)
+ tmp_data[i] = 0;
+ if (k_upper < lut->steps)
{
- if (i0 != indexed[0])
+ for (i = ceil(k_lower); i < k_upper; i ++)
{
- i0 = indexed[0];
- o0 = lut->composite[gray_cmap[i0]];
- if (o0 < 32768)
- o0 = 0;
- else
- o0 = 65535;
- nz |= o0;
+ double where = (i - k_lower) / (k_upper - k_lower);
+ double g1 = pow(where, i_k_trans);
+ double g2 = 1.0 - pow(1.0 - where, k_trans);
+ double value = (i_k_trans <= 1.0 ? g1 : g2);
+ tmp_data[i] = 65535.0 * k_upper * value / (double) (lut->steps - 1);
+ tmp_data[i] = floor(tmp_data[i] + .5);
}
- gray[0] = o0;
- indexed ++;
- gray ++;
- width --;
+ for (i = ceil(k_upper); i < lut->steps; i ++)
+ tmp_data[i] = 65535.0 * i / (double) (lut->steps - 1);
}
- if (zero_mask)
- *zero_mask = nz ? 0 : 1;
+ else if (k_lower < lut->steps)
+ for (i = ceil(k_lower); i < lut->steps; i ++)
+ {
+ double where = (i - k_lower) / (k_upper - k_lower);
+ double g1 = pow(where, i_k_trans);
+ double g2 = 1.0 - pow(1.0 - where, k_trans);
+ double value = (i_k_trans <= 1.0 ? g1 : g2);
+ tmp_data[i] = 65535.0 * lut->steps * value / (double) (lut->steps - 1);
+ tmp_data[i] = floor(tmp_data[i] + .5);
+ }
+ curve = stp_curve_create(STP_CURVE_WRAP_NONE);
+ stp_curve_set_bounds(curve, 0, 65535);
+ if (! stp_curve_set_data(curve, lut->steps, tmp_data))
+ {
+ stp_eprintf(vars, "set curve data failed!\n");
+ stp_abort();
+ }
+ stp_free(tmp_data);
+ return curve;
}
static void
-indexed_alpha_to_monochrome(const stp_vars_t vars,
- const unsigned char *indexed,
- unsigned short *gray,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+initialize_gcr_curve(const stp_vars_t *vars)
{
- int i0 = -1;
- int i1 = -1;
- int o0 = 0;
- int nz = 0;
- int i;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- unsigned char gray_cmap[256]; /* Grayscale colormap */
- if (width <= 0)
- return;
-
- /* Really should precompute this silly thing... */
- for (i = 0; i < 256; i ++, cmap += 3)
- gray_cmap[i] = (cmap[0] * LUM_RED +
- cmap[1] * LUM_GREEN +
- cmap[2] * LUM_BLUE) / 100;
- while (width)
+ lut_t *lut = (lut_t *)(stp_get_component_data(vars, "Color"));
+ if (!stp_curve_cache_get_curve(&(lut->gcr_curve)))
{
- if (i0 != indexed[0] || i1 != indexed[1])
+ if (stp_check_curve_parameter(vars, "GCRCurve", STP_PARAMETER_DEFAULTED))
{
- i0 = indexed[0];
- i1 = indexed[1];
- o0 = lut->composite[gray_cmap[i0 * i1 / 255] + 255 - i1];
- if (o0 < 32768)
- o0 = 0;
- else
- o0 = 65535;
- nz |= o0;
+ double data;
+ size_t count;
+ int i;
+ stp_curve_t *curve =
+ stp_curve_create_copy(stp_get_curve_parameter(vars, "GCRCurve"));
+ stp_curve_resample(curve, lut->steps);
+ count = stp_curve_count_points(curve);
+ stp_curve_set_bounds(curve, 0.0, 65535.0);
+ for (i = 0; i < count; i++)
+ {
+ stp_curve_get_point(curve, i, &data);
+ data = 65535.0 * data * (double) i / (count - 1);
+ stp_curve_set_point(curve, i, data);
+ }
+ stp_curve_cache_set_curve(&(lut->gcr_curve), curve);
}
- gray[0] = o0;
- indexed += 2;
- gray ++;
- width --;
+ else
+ stp_curve_cache_set_curve(&(lut->gcr_curve), compute_gcr_curve(vars));
}
- if (zero_mask)
- *zero_mask = nz ? 0 : 1;
}
/*
- * 'rgb_to_gray()' - Convert RGB image data to grayscale.
+ * Channels that are synthesized (e. g. the black channel in CMY -> CMYK
+ * conversion) need to be computed differently from channels that are
+ * mapped 1-1 from input to output. Channels that are simply mapped need
+ * to be inverted if necessary, and in addition the contrast, brightness,
+ * and other gamma factors are factored in. Channels that are synthesized
+ * are never inverted, since they're computed from the output of other
+ * channels that have already been inverted.
+ *
+ * This isn't simply a matter of comparing the input channels to the output
+ * channels, since some of the conversions (K -> CMYK) work by means
+ * of a chain of conversions (K->CMY->CMYK). In this case, we need to
+ * fully compute the CMY channels, but the K channel in the output is
+ * not inverted.
+ *
+ * The rules that are implemented by the logic below are:
+ *
+ * 1) If the input is raw, we always perform the normal computation (without
+ * synthesizing channels).
+ *
+ * 2) If the output is CMY or K only, we never synthesize channels. We've
+ * now covered raw, black, and CMY/RGB outputs, leaving CMYK and MULTI.
+ *
+ * 3) Output channels above CMYK are synthesized.
+ *
+ * 4) If the input is CMYK, we do not synthesize channels.
+ *
+ * 5) The black channel (in CMYK) is synthesized.
+ *
+ * 6) All other channels (CMY/RGB) are not synthesized.
*/
-static void
-rgb_to_gray(const stp_vars_t vars,
- const unsigned char *rgb,
- unsigned short *gray,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+static int
+channel_is_synthesized(lut_t *lut, int channel)
{
- int i0 = -1;
- int i1 = -1;
- int i2 = -1;
- int o0 = 0;
- int nz = 0;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- double density = stp_get_density(vars);
- if (width <= 0)
- return;
- while (width)
- {
- if (i0 != rgb[0] || i1 != rgb[1] || i2 != rgb[2])
- {
- i0 = rgb[0];
- i1 = rgb[1];
- i2 = rgb[2];
- o0 = lut->composite[(i0 * LUM_RED + i1 * LUM_GREEN +
- i2 * LUM_BLUE) / 100];
- if (density != 1.0)
- o0 = .5 + (o0 * density);
- nz |= o0;
- }
- gray[0] = o0;
- rgb += 3;
- gray ++;
- width --;
- }
- if (zero_mask)
- *zero_mask = nz ? 0 : 1;
+ if (lut->output_color_description->color_id == COLOR_ID_RAW)
+ return 1; /* Case 1 */
+ else if (lut->output_color_description->channels == CMASK_CMY ||
+ lut->output_color_description->channels == CMASK_K)
+ return 0; /* Case 2 */
+ else if (channel >= CHANNEL_W)
+ return 1; /* Case 3 */
+ else if (lut->input_color_description->channels == CMASK_CMYK)
+ return 0; /* Case 4 */
+ else if (channel == CHANNEL_K)
+ return 1; /* Case 5 */
+ else
+ return 0; /* Case 6 */
}
static void
-rgb_alpha_to_gray(const stp_vars_t vars,
- const unsigned char *rgb,
- unsigned short *gray,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+compute_user_correction(lut_t *lut)
{
- int i0 = -1;
- int i1 = -1;
- int i2 = -1;
- int i3 = -1;
- int o0 = 0;
- int nz = 0;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- double density = stp_get_density(vars);
- if (width <= 0)
- return;
- while (width)
+ double *tmp;
+ double *tmp_brightness;
+ double *tmp_contrast;
+ double xcontrast = lut->contrast;
+ stp_curve_t *curve =
+ stp_curve_cache_get_curve(&(lut->user_color_correction));
+ stp_curve_t *brightness_curve =
+ stp_curve_cache_get_curve(&(lut->brightness_correction));
+ stp_curve_t *contrast_curve =
+ stp_curve_cache_get_curve(&(lut->contrast_correction));
+ double brightness = lut->brightness;
+ int i;
+ int isteps = lut->steps;
+ if (isteps > 256)
+ isteps = 256;
+ tmp = stp_malloc(sizeof(double) * lut->steps);
+ tmp_brightness = stp_malloc(sizeof(double) * lut->steps);
+ tmp_contrast = stp_malloc(sizeof(double) * lut->steps);
+ if (brightness < .001)
+ brightness = 1000;
+ else if (brightness > 1.999)
+ brightness = .001;
+ else if (brightness > 1)
+ brightness = 2.0 - brightness;
+ else
+ brightness = 1.0 / brightness;
+ for (i = 0; i < isteps; i ++)
{
- if (i0 != rgb[0] || i1 != rgb[1] || i2 != rgb[2] || i3 != rgb[3])
+ double temp_pixel, pixel;
+ pixel = (double) i / (double) (isteps - 1);
+ /*
+ * First, correct contrast
+ */
+ if (pixel >= .5)
+ temp_pixel = 1.0 - pixel;
+ else
+ temp_pixel = pixel;
+ if (lut->contrast > 3.99999)
{
- i0 = rgb[0];
- i1 = rgb[1];
- i2 = rgb[2];
- i3 = rgb[3];
- o0= lut->composite[((i0 * LUM_RED +
- i1 * LUM_GREEN +
- i2 * LUM_BLUE) *
- i3 / 25500 + 255 - i3)];
- if (density != 1.0)
- o0 = .5 + (o0 * density);
- nz |= o0;
+ if (temp_pixel < .5)
+ temp_pixel = 0;
+ else
+ temp_pixel = 1;
}
- gray[0] = o0;
- rgb += 4;
- gray ++;
- width --;
- }
- if (zero_mask)
- *zero_mask = nz ? 0 : 1;
+ if (temp_pixel <= .000001 && lut->contrast <= .0001)
+ temp_pixel = .5;
+ else if (temp_pixel > 1)
+ temp_pixel = .5 * pow(2 * temp_pixel, xcontrast);
+ else if (temp_pixel < 1)
+ {
+ if (lut->linear_contrast_adjustment)
+ temp_pixel = 0.5 -
+ ((0.5 - .5 * pow(2 * temp_pixel, lut->contrast)) *
+ lut->contrast);
+ else
+ temp_pixel = 0.5 -
+ ((0.5 - .5 * pow(2 * temp_pixel, lut->contrast)));
+ }
+ if (temp_pixel > .5)
+ temp_pixel = .5;
+ else if (temp_pixel < 0)
+ temp_pixel = 0;
+ if (pixel < .5)
+ pixel = temp_pixel;
+ else
+ pixel = 1 - temp_pixel;
+ tmp_contrast[i] = floor((pixel * 65535) + .5);
+
+ /*
+ * Second, do brightness
+ */
+ if (brightness < 1)
+ pixel = pow(pixel, brightness);
+ else
+ pixel = 1.0 - pow(1.0 - pixel, 1.0 / brightness);
+ tmp[i] = floor((pixel * 65535) + .5);
+
+ pixel = (double) i / (double) (isteps - 1);
+ if (brightness < 1)
+ pixel = pow(pixel, brightness);
+ else
+ pixel = 1.0 - pow(1.0 - pixel, 1.0 / brightness);
+ tmp_brightness[i] = floor((pixel * 65535) + .5);
+ }
+ stp_curve_set_data(curve, isteps, tmp);
+ if (isteps != lut->steps)
+ stp_curve_resample(curve, lut->steps);
+ stp_curve_set_data(brightness_curve, isteps, tmp_brightness);
+ if (isteps != lut->steps)
+ stp_curve_resample(brightness_curve, lut->steps);
+ stp_curve_set_data(contrast_curve, isteps, tmp_contrast);
+ if (isteps != lut->steps)
+ stp_curve_resample(contrast_curve, lut->steps);
+ stp_free(tmp);
+ stp_free(tmp_brightness);
+ stp_free(tmp_contrast);
}
static void
-rgb_to_monochrome(const stp_vars_t vars,
- const unsigned char *rgb,
- unsigned short *gray,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+compute_a_curve_full(lut_t *lut, int channel)
{
- int i0 = -1;
- int i1 = -1;
- int i2 = -1;
- int o0 = 0;
- int nz = 0;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- if (width <= 0)
- return;
- while (width)
+ double *tmp;
+ double pivot = .25;
+ double ipivot = 1.0 - pivot;
+ double xgamma = pow(pivot, lut->screen_gamma);
+ double print_gamma=1.0+9.0*(lut->print_gamma-1.0);
+ double pivot2 = .75;
+ double ipivot2 = 1.0 - pivot2;
+ double xgamma2 = pow(pivot2, print_gamma);
+ stp_curve_t *curve = stp_curve_cache_get_curve(&(lut->channel_curves[channel]));
+ int i;
+ int isteps = lut->steps;
+ if (isteps > 256)
+ isteps = 256;
+ tmp = stp_malloc(sizeof(double) * lut->steps);
+ for (i = 0; i < isteps; i ++)
{
- if (i0 != rgb[0] || i1 != rgb[1] || i2 != rgb[2])
- {
- i0 = rgb[0];
- i1 = rgb[1];
- i2 = rgb[2];
- o0 = lut->composite[(i0 * LUM_RED + i1 * LUM_GREEN +
- i2 * LUM_BLUE) / 100];
- if (o0 < 32768)
- o0 = 0;
- else
- o0 = 65535;
- nz |= o0;
- }
- gray[0] = o0;
- rgb += 3;
- gray ++;
- width --;
+ double pixel = (double) i / (double) (isteps - 1);
+
+ if (lut->input_color_description->color_model == COLOR_BLACK)
+ pixel = 1.0 - pixel;
+
+ pixel = 1.0 -
+ (1.0 / (1.0 - xgamma)) *
+ (pow(pivot + ipivot * pixel, lut->screen_gamma) - xgamma);
+
+ /*
+ * Fourth, fix up cyan, magenta, yellow values
+ */
+ if (pixel < 0.0)
+ pixel = 0.0;
+ else if (pixel > 1.0)
+ pixel = 1.0;
+
+ if (pixel > .9999 && lut->gamma_values[channel] < .00001)
+ pixel = 0;
+ else
+ pixel = 1 - pow(1 - pixel, lut->gamma_values[channel]);
+ /*
+ * Finally, fix up print gamma and scale
+ */
+
+ /*
+ * Change to this function suggested by Alastair Robinson
+ * blackfive@fakenhamweb.co.uk
+ */
+ pixel = 65535 * (1.0 / (1.0 - xgamma2)) *
+ (pow(pivot2 + ipivot2 * pixel, print_gamma) - xgamma2);
+ if (lut->output_color_description->color_model == COLOR_WHITE)
+ pixel = 65535 - pixel;
+
+ if (pixel <= 0.0)
+ tmp[i] = 0;
+ else if (pixel >= 65535.0)
+ tmp[i] = 65535;
+ else
+ tmp[i] = (pixel);
+ tmp[i] = floor(tmp[i] + 0.5); /* rounding is done here */
}
- if (zero_mask)
- *zero_mask = nz ? 0 : 1;
+ stp_curve_set_data(curve, isteps, tmp);
+ if (isteps != lut->steps)
+ stp_curve_resample(curve, lut->steps);
+ stp_free(tmp);
}
static void
-rgb_alpha_to_monochrome(const stp_vars_t vars,
- const unsigned char *rgb,
- unsigned short *gray,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+compute_a_curve_fast(lut_t *lut, int channel)
{
- int i0 = -1;
- int i1 = -1;
- int i2 = -1;
- int i3 = -1;
- int o0 = 0;
- int nz = 0;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- if (width <= 0)
- return;
- while (width)
+ double *tmp;
+ stp_curve_t *curve = stp_curve_cache_get_curve(&(lut->channel_curves[channel]));
+ int i;
+ int isteps = lut->steps;
+ if (isteps > 256)
+ isteps = 256;
+ tmp = stp_malloc(sizeof(double) * lut->steps);
+ for (i = 0; i < isteps; i++)
{
- if (i0 != rgb[0] || i1 != rgb[1] || i2 != rgb[2] || i3 != rgb[3])
- {
- i0 = rgb[0];
- i1 = rgb[1];
- i2 = rgb[2];
- i3 = rgb[3];
- o0= lut->composite[((i0 * LUM_RED +
- i1 * LUM_GREEN +
- i2 * LUM_BLUE) *
- i3 / 25500 + 255 - i3)];
- if (o0 < 32768)
- o0 = 0;
- else
- o0 = 65535;
- nz |= o0;
- }
- gray[0] = o0;
- rgb += 4;
- gray ++;
- width --;
+ double pixel = (double) i / (double) (isteps - 1);
+ pixel = 1 - pow(1 - pixel, lut->gamma_values[channel]);
+ tmp[i] = floor((65535.0 * pixel) + 0.5);
}
- if (zero_mask)
- *zero_mask = nz ? 0 : 1;
+ stp_curve_set_data(curve, isteps, tmp);
+ if (isteps != lut->steps)
+ stp_curve_resample(curve, lut->steps);
+ stp_free(tmp);
}
/*
- * 'rgb_to_rgb()' - Convert rgb image data to RGB.
+ * If the input and output color spaces both have a particular channel,
+ * we want to use the general algorithm. If not (i. e. we have to
+ * synthesize the channel), use a simple gamma curve.
*/
+static void
+compute_a_curve(lut_t *lut, int channel)
+{
+ if (channel_is_synthesized(lut, channel))
+ compute_a_curve_fast(lut, channel);
+ else
+ compute_a_curve_full(lut, channel);
+}
static void
-rgb_to_rgb(const stp_vars_t vars,
- const unsigned char *rgbin,
- unsigned short *rgbout,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+invert_curve(stp_curve_t *curve, int invert_output)
{
- unsigned ld = stp_get_density(vars) * 65536;
- double isat = 1.0;
- double ssat = stp_get_saturation(vars);
- int i0 = -1;
- int i1 = -1;
- int i2 = -1;
- int i3 = -1;
- int o0 = 0;
- int o1 = 0;
- int o2 = 0;
- int nz0 = 0;
- int nz1 = 0;
- int nz2 = 0;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- int compute_saturation = ssat <= .99999 || ssat >= 1.00001;
- int split_saturation = ssat > 1.4;
- if (split_saturation)
- ssat = sqrt(ssat);
- if (ssat > 1)
- isat = 1.0 / ssat;
- while (width > 0)
+ double lo, hi;
+ int i;
+ size_t count;
+ const double *data = stp_curve_get_data(curve, &count);
+ double f_gamma = stp_curve_get_gamma(curve);
+ double *tmp_data;
+
+ stp_curve_get_bounds(curve, &lo, &hi);
+
+ if (f_gamma)
+ stp_curve_set_gamma(curve, -f_gamma);
+ else
{
- double h, s, l;
- switch (bpp)
- {
- case 1:
- /*
- * No alpha in image, using colormap...
- */
- if (i0 == rgbin[0])
- {
- rgbout[0] = o0;
- rgbout[1] = o1;
- rgbout[2] = o2;
- goto out;
- }
- else
- {
- i0 = rgbin[0] * 3;
- i1 = cmap[i0 + 1];
- i2 = cmap[i0 + 2];
- i0 = cmap[i0];
- rgbout[0] = i0 | (i0 << 8);
- rgbout[1] = i1 | (i1 << 8);
- rgbout[2] = i2 | (i2 << 8);
- i0 = rgbin[0];
- }
- break;
- case 2:
- if (i0 == rgbin[0] && i1 == rgbin[1])
- {
- rgbout[0] = o0;
- rgbout[1] = o1;
- rgbout[2] = o2;
- goto out;
- }
- else
- {
- i0 = rgbin[0] * 3;
- i3 = rgbin[1];
- i1 = cmap[i0 + 1] * i3 / 255 + 255 - i3;
- i2 = cmap[i0 + 2] * i3 / 255 + 255 - i3;
- i0 = cmap[i0] * i3 / 255 + 255 - i3;
-
- rgbout[0] = i0 | (i0 << 8);
- rgbout[1] = i1 | (i1 << 8);
- rgbout[2] = i2 | (i2 << 8);
- i0 = rgbin[0];
- i1 = rgbin[1];
- }
- break;
- case 3:
- /*
- * No alpha in image...
- */
- if (i0 == rgbin[0] && i1 == rgbin[1] && i2 == rgbin[2])
- {
- rgbout[0] = o0;
- rgbout[1] = o1;
- rgbout[2] = o2;
- goto out;
- }
- else
- {
- i0 = rgbin[0];
- i1 = rgbin[1];
- i2 = rgbin[2];
- rgbout[0] = i0 | (i0 << 8);
- rgbout[1] = i1 | (i1 << 8);
- rgbout[2] = i2 | (i2 << 8);
- }
- break;
- case 4:
- if (i0 == rgbin[0] && i1 == rgbin[1] && i2 == rgbin[2] &&
- i3 == rgbin[3])
- {
- rgbout[0] = o0;
- rgbout[1] = o1;
- rgbout[2] = o2;
- goto out;
- }
- else
- {
- i3 = rgbin[3];
- i0 = rgbin[0] * i3 / 255 + 255 - i3;
- i1 = rgbin[1] * i3 / 255 + 255 - i3;
- i2 = rgbin[2] * i3 / 255 + 255 - i3;
- rgbout[0] = i0 | (i0 << 8);
- rgbout[1] = i1 | (i1 << 8);
- rgbout[2] = i2 | (i2 << 8);
- }
- break;
- }
- if ((compute_saturation) &&
- (rgbout[0] != rgbout[1] || rgbout[0] != rgbout[2]))
- {
- calc_rgb_to_hsl(rgbout, &h, &s, &l);
- if (ssat < 1)
- s *= ssat;
- else
- {
- double s1 = s * ssat;
- double s2 = 1.0 - ((1.0 - s) * isat);
- s = FMIN(s1, s2);
- }
- if (s > 1)
- s = 1.0;
- calc_hsl_to_rgb(rgbout, h, s, l);
- }
- update_cmyk(rgbout); /* Fiddle with the INPUT */
- rgbout[0] = lookup_value(rgbout[0], lut->steps,
- lut->red, lut->shiftval,
- lut->bin_size, lut->bin_shift);
- rgbout[1] = lookup_value(rgbout[1], lut->steps,
- lut->green, lut->shiftval,
- lut->bin_size, lut->bin_shift);
- rgbout[2] = lookup_value(rgbout[2], lut->steps,
- lut->blue, lut->shiftval,
- lut->bin_size, lut->bin_shift);
- if ((split_saturation || hue_map || lum_map || sat_map) &&
- (rgbout[0] != rgbout[1] || rgbout[0] != rgbout[2]))
- {
- calc_rgb_to_hsl(rgbout, &h, &s, &l);
- if (split_saturation)
- {
- if (ssat < 1)
- s *= ssat;
- else
- {
- double s1 = s * ssat;
- double s2 = 1.0 - ((1.0 - s) * isat);
- s = FMIN(s1, s2);
- }
- }
- if (s > 1)
- s = 1.0;
- if (hue_map || lum_map || sat_map)
- {
- if (hue_map)
- {
- int ih;
- double eh;
- double nh = h * 8;
- ih = (int) nh;
- eh = nh - (double) ih;
- h = (ih / 8.0) + hue_map[ih] +
- eh * ((1.0 / 8.0) + hue_map[ih + 1] - hue_map[ih]);
- if (h < 0.0)
- h += 6.0;
- else if (h >= 6.0)
- h -= 6.0;
- }
- if (lum_map && l > .0001 && l < .9999)
- {
- int ih;
- double eh;
- double nh = h * 8;
- ih = (int) nh;
- eh = nh - (double) ih;
- if (lum_map[ih] != 1.0 || lum_map[ih + 1] != 1.0)
- {
- double el = lum_map[ih] +
- eh * (lum_map[ih + 1] - lum_map[ih]);
- el = 1.0 + (s * (el - 1.0));
- if (l > .5)
- el = 1.0 + ((2.0 * (1.0 - l)) * (el - 1.0));
- l = 1.0 - pow(1.0 - l, el);
- }
- }
- if (sat_map)
- {
- int ih;
- double eh;
- double nh = h * 8;
- ih = (int) nh;
- eh = nh - (double) ih;
- if (sat_map[ih] != 1.0 || sat_map[ih + 1] != 1.0)
- {
- double es = sat_map[ih] +
- eh * (sat_map[ih + 1] - sat_map[ih]);
- s = 1.0 - pow(1.0 - s, es);
- }
- }
- }
- calc_hsl_to_rgb(rgbout, h, s, l);
- }
- if (ld < 65536)
- {
- int i;
- for (i = 0; i < 3; i++)
- {
- unsigned t = rgbout[i];
- t = t * ld / 65536;
- rgbout[i] = (unsigned short) t;
- }
- }
- o0 = rgbout[0];
- o1 = rgbout[1];
- o2 = rgbout[2];
- nz0 |= o0;
- nz1 |= o1;
- nz2 |= o2;
- out:
- rgbin += bpp;
- rgbout += 3;
- width --;
+ tmp_data = stp_malloc(sizeof(double) * count);
+ for (i = 0; i < count; i++)
+ tmp_data[i] = data[count - i - 1];
+ stp_curve_set_data(curve, count, tmp_data);
+ stp_free(tmp_data);
}
- if (zero_mask)
+ if (!invert_output)
{
- *zero_mask = nz0 ? 0 : 1;
- *zero_mask |= nz1 ? 0 : 2;
- *zero_mask |= nz2 ? 0 : 4;
+ stp_curve_rescale(curve, -1, STP_CURVE_COMPOSE_MULTIPLY,
+ STP_CURVE_BOUNDS_RESCALE);
+ stp_curve_rescale(curve, lo + hi, STP_CURVE_COMPOSE_ADD,
+ STP_CURVE_BOUNDS_RESCALE);
}
}
static void
-indexed_to_rgb(const stp_vars_t vars,
- const unsigned char *indexed,
- unsigned short *rgb,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
-{
- rgb_to_rgb(vars, indexed, rgb, zero_mask, width, bpp, cmap,
- hue_map, lum_map, sat_map);
-}
-
-static void
-solid_rgb_to_rgb(const stp_vars_t vars,
- const unsigned char *rgbin,
- unsigned short *rgbout,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+compute_one_lut(lut_t *lut, int i)
{
- unsigned ld = stp_get_density(vars) * 65536;
- double isat = 1.0;
- double ssat = stp_get_saturation(vars);
- int i0 = -1;
- int i1 = -1;
- int i2 = -1;
- int i3 = -1;
- int o0 = 0;
- int o1 = 0;
- int o2 = 0;
- int nz0 = 0;
- int nz1 = 0;
- int nz2 = 0;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- int compute_saturation = ssat <= .99999 || ssat >= 1.00001;
- int split_saturation = ssat > 1.4;
- if (split_saturation)
- ssat = sqrt(ssat);
- if (ssat > 1)
- isat = 1.0 / ssat;
- while (width > 0)
+ stp_curve_t *curve =
+ stp_curve_cache_get_curve(&(lut->channel_curves[i]));
+ if (curve)
{
- double h, s, l;
- switch (bpp)
- {
- case 1:
- /*
- * No alpha in image, using colormap...
- */
- if (i0 == rgbin[0])
- {
- rgbout[0] = o0;
- rgbout[1] = o1;
- rgbout[2] = o2;
- goto out;
- }
- else
- {
- i0 = rgbin[0] * 3;
- i1 = cmap[i0 + 1];
- i2 = cmap[i0 + 2];
- i0 = cmap[i0];
- rgbout[0] = i0 | (i0 << 8);
- rgbout[1] = i1 | (i1 << 8);
- rgbout[2] = i2 | (i2 << 8);
- i0 = rgbin[0];
- }
- break;
- case 2:
- if (i0 == rgbin[0] && i1 == rgbin[1])
- {
- rgbout[0] = o0;
- rgbout[1] = o1;
- rgbout[2] = o2;
- goto out;
- }
- else
- {
- i0 = rgbin[0] * 3;
- i3 = rgbin[1];
- i1 = cmap[i0 + 1] * i3 / 255 + 255 - i3;
- i2 = cmap[i0 + 2] * i3 / 255 + 255 - i3;
- i0 = cmap[i0] * i3 / 255 + 255 - i3;
-
- rgbout[0] = i0 | (i0 << 8);
- rgbout[1] = i1 | (i1 << 8);
- rgbout[2] = i2 | (i2 << 8);
- i0 = rgbin[0];
- i1 = rgbin[1];
- }
- break;
- case 3:
- /*
- * No alpha in image...
- */
- if (i0 == rgbin[0] && i1 == rgbin[1] && i2 == rgbin[2])
- {
- rgbout[0] = o0;
- rgbout[1] = o1;
- rgbout[2] = o2;
- goto out;
- }
- else
- {
- i0 = rgbin[0];
- i1 = rgbin[1];
- i2 = rgbin[2];
- rgbout[0] = i0 | (i0 << 8);
- rgbout[1] = i1 | (i1 << 8);
- rgbout[2] = i2 | (i2 << 8);
- }
- break;
- case 4:
- if (i0 == rgbin[0] && i1 == rgbin[1] && i2 == rgbin[2] &&
- i3 == rgbin[3])
- {
- rgbout[0] = o0;
- rgbout[1] = o1;
- rgbout[2] = o2;
- goto out;
- }
- else
- {
- i3 = rgbin[3];
- i0 = rgbin[0] * i3 / 255 + 255 - i3;
- i1 = rgbin[1] * i3 / 255 + 255 - i3;
- i2 = rgbin[2] * i3 / 255 + 255 - i3;
- rgbout[0] = i0 | (i0 << 8);
- rgbout[1] = i1 | (i1 << 8);
- rgbout[2] = i2 | (i2 << 8);
- }
- break;
- }
- if ((compute_saturation) &&
- (rgbout[0] != rgbout[1] || rgbout[0] != rgbout[2]))
- {
- calc_rgb_to_hsl(rgbout, &h, &s, &l);
- if (ssat < 1)
- s *= ssat;
- else
- {
- double s1 = s * ssat;
- double s2 = 1.0 - ((1.0 - s) * isat);
- s = FMIN(s1, s2);
- }
- if (s > 1)
- s = 1.0;
- calc_hsl_to_rgb(rgbout, h, s, l);
- }
- update_cmyk(rgbout); /* Fiddle with the INPUT */
- rgbout[0] = lookup_value(rgbout[0], lut->steps,
- lut->red, lut->shiftval,
- lut->bin_size, lut->bin_shift);
- rgbout[1] = lookup_value(rgbout[1], lut->steps,
- lut->green, lut->shiftval,
- lut->bin_size, lut->bin_shift);
- rgbout[2] = lookup_value(rgbout[2], lut->steps,
- lut->blue, lut->shiftval,
- lut->bin_size, lut->bin_shift);
- if ((split_saturation || hue_map || lum_map || sat_map) &&
- (rgbout[0] != rgbout[1] || rgbout[0] != rgbout[2]))
- {
- calc_rgb_to_hsl(rgbout, &h, &s, &l);
- if (split_saturation)
- {
- if (ssat < 1)
- s *= ssat;
- else
- {
- double s1 = s * ssat;
- double s2 = 1.0 - ((1.0 - s) * isat);
- s = FMIN(s1, s2);
- }
- }
- if (s > 1)
- s = 1.0;
- if (hue_map || lum_map || sat_map)
- {
- if (hue_map)
- {
- int ih;
- double eh;
- double nh = h * 8;
- ih = (int) nh;
- eh = nh - (double) ih;
- h = (ih / 8.0) + hue_map[ih] +
- eh * ((1.0 / 8.0) + hue_map[ih + 1] - hue_map[ih]);
- if (h < 0.0)
- h += 6.0;
- else if (h >= 6.0)
- h -= 6.0;
- }
- if (sat_map)
- {
- int ih;
- double eh;
- double nh = h * 8;
- ih = (int) nh;
- eh = nh - (double) ih;
- if (sat_map[ih] != 1.0 || sat_map[ih + 1] != 1.0)
- {
- double es = sat_map[ih] +
- eh * (sat_map[ih + 1] - sat_map[ih]);
- s = 1.0 - pow(1.0 - s, es);
- }
- }
- }
- calc_hsl_to_rgb(rgbout, h, s, l);
- }
- if (ld < 65536)
- {
- int i;
- for (i = 0; i < 3; i++)
- {
- unsigned t = rgbout[i];
- t = t * ld / 65536;
- rgbout[i] = (unsigned short) t;
- }
- }
- o0 = rgbout[0];
- o1 = rgbout[1];
- o2 = rgbout[2];
- nz0 |= o0;
- nz1 |= o1;
- nz2 |= o2;
- out:
- rgbin += bpp;
- rgbout += 3;
- width --;
+ int invert_output =
+ !channel_is_synthesized(lut, i) && lut->invert_output;
+ stp_curve_rescale(curve, 65535.0, STP_CURVE_COMPOSE_MULTIPLY,
+ STP_CURVE_BOUNDS_RESCALE);
+ if (stp_curve_is_piecewise(curve))
+ stp_curve_resample(curve, lut->steps);
+ invert_curve(curve, invert_output);
+ stp_curve_resample(curve, lut->steps);
}
- if (zero_mask)
+ else
{
- *zero_mask = nz0 ? 0 : 1;
- *zero_mask |= nz1 ? 0 : 2;
- *zero_mask |= nz2 ? 0 : 4;
+ curve = stp_curve_create_copy(color_curve_bounds);
+ stp_curve_rescale(curve, 65535.0, STP_CURVE_COMPOSE_MULTIPLY,
+ STP_CURVE_BOUNDS_RESCALE);
+ stp_curve_cache_set_curve(&(lut->channel_curves[i]), curve);
+ compute_a_curve(lut, i);
}
}
static void
-solid_indexed_to_rgb(const stp_vars_t vars,
- const unsigned char *indexed,
- unsigned short *rgb,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+setup_channel(stp_vars_t *v, int i, const channel_param_t *p)
{
- solid_rgb_to_rgb(vars, indexed, rgb, zero_mask, width, bpp, cmap,
- hue_map, lum_map, sat_map);
+ lut_t *lut = (lut_t *)(stp_get_component_data(v, "Color"));
+ const char *gamma_name =
+ (lut->output_color_description->color_model == COLOR_BLACK ?
+ p->gamma_name : p->rgb_gamma_name);
+ const char *curve_name =
+ (lut->output_color_description->color_model == COLOR_BLACK ?
+ p->curve_name : p->rgb_curve_name);
+ if (stp_check_float_parameter(v, p->gamma_name, STP_PARAMETER_DEFAULTED))
+ lut->gamma_values[i] = stp_get_float_parameter(v, gamma_name);
+
+ if (stp_get_curve_parameter_active(v, curve_name) > 0 &&
+ stp_get_curve_parameter_active(v, curve_name) >=
+ stp_get_float_parameter_active(v, gamma_name))
+ stp_curve_cache_set_curve_copy
+ (&(lut->channel_curves[i]), stp_get_curve_parameter(v, curve_name));
+
+ stp_dprintf(STP_DBG_LUT, v, " %s %.3f\n", gamma_name, lut->gamma_values[i]);
+ compute_one_lut(lut, i);
}
-/*
- * 'gray_to_rgb()' - Convert gray image data to RGB.
- */
static void
-gray_to_rgb(const stp_vars_t vars,
- const unsigned char *grayin,
- unsigned short *rgbout,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+stpi_compute_lut(stp_vars_t *v)
{
- int i0 = -1;
- int i1 = -1;
- int o0 = 0;
- int o1 = 0;
- int o2 = 0;
- int nz0 = 0;
- int nz1 = 0;
- int nz2 = 0;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- double density = stp_get_density(vars);
- while (width > 0)
+ int i;
+ lut_t *lut = (lut_t *)(stp_get_component_data(v, "Color"));
+ stp_curve_t *curve;
+ stp_dprintf(STP_DBG_LUT, v, "stpi_compute_lut\n");
+
+ if (lut->input_color_description->color_model == COLOR_UNKNOWN ||
+ lut->output_color_description->color_model == COLOR_UNKNOWN ||
+ lut->input_color_description->color_model ==
+ lut->output_color_description->color_model)
+ lut->invert_output = 0;
+ else
+ lut->invert_output = 1;
+
+ lut->linear_contrast_adjustment = 0;
+ lut->print_gamma = 1.0;
+ lut->app_gamma = 1.0;
+ lut->contrast = 1.0;
+ lut->brightness = 1.0;
+
+ if (stp_check_boolean_parameter(v, "LinearContrast", STP_PARAMETER_DEFAULTED))
+ lut->linear_contrast_adjustment =
+ stp_get_boolean_parameter(v, "LinearContrast");
+ if (stp_check_float_parameter(v, "Gamma", STP_PARAMETER_DEFAULTED))
+ lut->print_gamma = stp_get_float_parameter(v, "Gamma");
+ if (stp_check_float_parameter(v, "Contrast", STP_PARAMETER_DEFAULTED))
+ lut->contrast = stp_get_float_parameter(v, "Contrast");
+ if (stp_check_float_parameter(v, "Brightness", STP_PARAMETER_DEFAULTED))
+ lut->brightness = stp_get_float_parameter(v, "Brightness");
+
+ if (stp_check_float_parameter(v, "AppGamma", STP_PARAMETER_ACTIVE))
+ lut->app_gamma = stp_get_float_parameter(v, "AppGamma");
+ lut->screen_gamma = lut->app_gamma / 4.0; /* "Empirical" */
+ curve = stp_curve_create_copy(color_curve_bounds);
+ stp_curve_rescale(curve, 65535.0, STP_CURVE_COMPOSE_MULTIPLY,
+ STP_CURVE_BOUNDS_RESCALE);
+ stp_curve_cache_set_curve(&(lut->user_color_correction), curve);
+ curve = stp_curve_create_copy(color_curve_bounds);
+ stp_curve_rescale(curve, 65535.0, STP_CURVE_COMPOSE_MULTIPLY,
+ STP_CURVE_BOUNDS_RESCALE);
+ stp_curve_cache_set_curve(&(lut->brightness_correction), curve);
+ curve = stp_curve_create_copy(color_curve_bounds);
+ stp_curve_rescale(curve, 65535.0, STP_CURVE_COMPOSE_MULTIPLY,
+ STP_CURVE_BOUNDS_RESCALE);
+ stp_curve_cache_set_curve(&(lut->contrast_correction), curve);
+ compute_user_correction(lut);
+
+ /*
+ * TODO check that these are wraparound curves and all that
+ */
+
+ if (lut->color_correction->correct_hsl)
{
- unsigned short trgb[3];
- if (bpp == 1)
+ if (stp_check_curve_parameter(v, "HueMap", STP_PARAMETER_DEFAULTED))
{
- /*
- * No alpha in image...
- */
- if (i0 == grayin[0])
- {
- rgbout[0] = o0;
- rgbout[1] = o1;
- rgbout[2] = o2;
- goto out;
- }
- else
- {
- i0 = grayin[0];
- trgb[0] =
- trgb[1] =
- trgb[2] = i0 | (i0 << 8);
- }
+ lut->hue_map.curve =
+ stp_curve_create_copy(stp_get_curve_parameter(v, "HueMap"));
+ if (stp_curve_is_piecewise(lut->hue_map.curve))
+ stp_curve_resample(lut->hue_map.curve, 384);
}
- else
+ if (stp_check_curve_parameter(v, "LumMap", STP_PARAMETER_DEFAULTED))
{
- if (i0 == grayin[0] && i1 == grayin[1])
- {
- rgbout[0] = o0;
- rgbout[1] = o1;
- rgbout[2] = o2;
- goto out;
- }
- else
- {
- i0 = (grayin[0] * grayin[1] / 255 + 255 - grayin[1]);
- trgb[0] =
- trgb[1] =
- trgb[2] = i0 | (i0 << 8);
- }
+ lut->lum_map.curve =
+ stp_curve_create_copy(stp_get_curve_parameter(v, "LumMap"));
+ if (stp_curve_is_piecewise(lut->lum_map.curve))
+ stp_curve_resample(lut->lum_map.curve, 384);
}
- update_cmyk(trgb);
- rgbout[0] = lookup_value(trgb[0], lut->steps, lut->red, lut->shiftval,
- lut->bin_size, lut->bin_shift);
- rgbout[1] = lookup_value(trgb[1], lut->steps, lut->green, lut->shiftval,
- lut->bin_size, lut->bin_shift);
- rgbout[2] = lookup_value(trgb[2], lut->steps, lut->blue, lut->shiftval,
- lut->bin_size, lut->bin_shift);
- if (density != 1.0)
+ if (stp_check_curve_parameter(v, "SatMap", STP_PARAMETER_DEFAULTED))
{
- int i;
- for (i = 0; i < 3; i++)
- rgbout[i] = .5 + (rgbout[i] * density);
+ lut->sat_map.curve =
+ stp_curve_create_copy(stp_get_curve_parameter(v, "SatMap"));
+ if (stp_curve_is_piecewise(lut->sat_map.curve))
+ stp_curve_resample(lut->sat_map.curve, 384);
}
- o0 = rgbout[0];
- o1 = rgbout[1];
- o2 = rgbout[2];
- nz0 |= o0;
- nz1 |= o1;
- nz2 |= o2;
- out:
- grayin += bpp;
- rgbout += 3;
- width --;
}
- if (zero_mask)
+
+ stp_dprintf(STP_DBG_LUT, v, " print_gamma %.3f\n", lut->print_gamma);
+ stp_dprintf(STP_DBG_LUT, v, " contrast %.3f\n", lut->contrast);
+ stp_dprintf(STP_DBG_LUT, v, " brightness %.3f\n", lut->brightness);
+ stp_dprintf(STP_DBG_LUT, v, " screen_gamma %.3f\n", lut->screen_gamma);
+
+ for (i = 0; i < STP_CHANNEL_LIMIT; i++)
{
- *zero_mask = nz0 ? 0 : 1;
- *zero_mask |= nz1 ? 0 : 2;
- *zero_mask |= nz2 ? 0 : 4;
+ if (lut->output_color_description->channel_count < 1 &&
+ i < lut->out_channels)
+ setup_channel(v, i, &(raw_channel_params[i]));
+ else if (i < channel_param_count &&
+ lut->output_color_description->channels & (1 << i))
+ setup_channel(v, i, &(channel_params[i]));
}
+ if (((lut->output_color_description->channels & CMASK_CMYK) == CMASK_CMYK) &&
+ (lut->color_correction->correction == COLOR_CORRECTION_DESATURATED ||
+ lut->input_color_description->color_id == COLOR_ID_GRAY ||
+ lut->input_color_description->color_id == COLOR_ID_WHITE ||
+ lut->input_color_description->color_id == COLOR_ID_RGB ||
+ lut->input_color_description->color_id == COLOR_ID_CMY))
+ initialize_gcr_curve(v);
}
-static void
-fast_indexed_to_rgb(const stp_vars_t vars,
- const unsigned char *indexed,
- unsigned short *rgb,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+static int
+stpi_color_traditional_init(stp_vars_t *v,
+ stp_image_t *image,
+ size_t steps)
{
- int i0 = -1;
- int i1 = -1;
- int o0 = 0;
- int o1 = 0;
- int o2 = 0;
- int nz0 = 0;
- int nz1 = 0;
- int nz2 = 0;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- double isat = 1.0;
- double saturation = stp_get_saturation(vars);
- double density = stp_get_density(vars);
- if (saturation > 1)
- isat = 1.0 / saturation;
- while (width > 0)
+ lut_t *lut;
+ const char *image_type = stp_get_string_parameter(v, "ImageType");
+ const char *color_correction = stp_get_string_parameter(v, "ColorCorrection");
+ const channel_depth_t *channel_depth =
+ get_channel_depth(stp_get_string_parameter(v, "ChannelBitDepth"));
+ size_t total_channel_bits;
+
+ if (steps != 256 && steps != 65536)
+ return -1;
+ if (!channel_depth)
+ return -1;
+
+ lut = allocate_lut();
+ lut->input_color_description =
+ get_color_description(stp_get_string_parameter(v, "InputImageType"));
+ lut->output_color_description =
+ get_color_description(stp_get_string_parameter(v, "STPIOutputType"));
+
+ if (!lut->input_color_description || !lut->output_color_description)
{
- double h, s, l;
- if (bpp == 1)
- {
- /*
- * No alpha in image...
- */
- if (i0 == indexed[0])
- {
- rgb[0] = o0;
- rgb[1] = o1;
- rgb[2] = o2;
- goto out;
- }
- else
- {
- i0 = indexed[0];
- rgb[0] = lut->red[cmap[i0 * 3 + 0]];
- rgb[1] = lut->green[cmap[i0 * 3 + 1]];
- rgb[2] = lut->blue[cmap[i0 * 3 + 2]];
- }
- }
- else
- {
- if (i0 == indexed[0] && i1 == indexed[1])
- {
- rgb[0] = o0;
- rgb[1] = o1;
- rgb[2] = o2;
- goto out;
- }
- else
- {
- i0 = indexed[0];
- i1 = indexed[1];
- rgb[0] = lut->red[cmap[i0 * 3 + 0] * i1 / 255 + 255 - i1];
- rgb[1] = lut->green[cmap[i0 * 3 + 1] * i1 / 255 + 255 -i1];
- rgb[2] = lut->blue[cmap[i0 * 3 + 2] * i1 / 255 + 255 - i1];
- }
- }
- if (saturation != 1.0)
- {
- calc_rgb_to_hsl(rgb, &h, &s, &l);
- if (saturation < 1)
- s *= saturation;
- else if (saturation > 1)
- {
- double s1 = s * saturation;
- double s2 = 1.0 - ((1.0 - s) * isat);
- s = FMIN(s1, s2);
- }
- if (s > 1)
- s = 1.0;
- calc_hsl_to_rgb(rgb, h, s, l);
- }
- if (density != 1.0)
+ free_lut(lut);
+ return -1;
+ }
+
+ if (lut->input_color_description->color_id == COLOR_ID_RAW)
+ {
+ if (stp_verify_parameter(v, "STPIRawChannels", 1) != PARAMETER_OK)
{
- int i;
- for (i = 0; i < 3; i++)
- rgb[i] = .5 + (rgb[i] * density);
+ free_lut(lut);
+ return -1;
}
- out:
- o0 = rgb[0];
- o1 = rgb[1];
- o2 = rgb[2];
- nz0 |= o0;
- nz1 |= o1;
- nz2 |= o2;
- indexed += bpp;
- rgb += 3;
- width --;
+ lut->out_channels = stp_get_int_parameter(v, "STPIRawChannels");
+ lut->in_channels = lut->out_channels;
}
- if (zero_mask)
+ else
{
- *zero_mask = nz0 ? 0 : 1;
- *zero_mask |= nz1 ? 0 : 2;
- *zero_mask |= nz2 ? 0 : 4;
+ lut->out_channels = lut->output_color_description->channel_count;
+ lut->in_channels = lut->input_color_description->channel_count;
}
-}
-/*
- * 'rgb_to_rgb()' - Convert rgb image data to RGB.
- */
+ stp_allocate_component_data(v, "Color", copy_lut, free_lut, lut);
+ lut->steps = steps;
+ lut->channel_depth = channel_depth->bits;
-static void
-fast_rgb_to_rgb(const stp_vars_t vars,
- const unsigned char *rgbin,
- unsigned short *rgbout,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
-{
- unsigned ld = stp_get_density(vars) * 65536;
- int i0 = -1;
- int i1 = -1;
- int i2 = -1;
- int i3 = -1;
- int o0 = 0;
- int o1 = 0;
- int o2 = 0;
- int nz0 = 0;
- int nz1 = 0;
- int nz2 = 0;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- double isat = 1.0;
- double saturation = stp_get_saturation(vars);
- if (saturation > 1)
- isat = 1.0 / saturation;
- while (width > 0)
+ if (image_type && strcmp(image_type, "None") != 0)
{
- double h, s, l;
- if (bpp == 3)
- {
- /*
- * No alpha in image...
- */
- if (i0 == rgbin[0] && i1 == rgbin[1] && i2 == rgbin[2])
- {
- rgbout[0] = o0;
- rgbout[1] = o1;
- rgbout[2] = o2;
- goto out;
- }
- else
- {
- i0 = rgbin[0];
- i1 = rgbin[1];
- i2 = rgbin[2];
- rgbout[0] = lut->red[rgbin[0]];
- rgbout[1] = lut->green[rgbin[1]];
- rgbout[2] = lut->blue[rgbin[2]];
- }
- }
+ if (strcmp(image_type, "Text") == 0)
+ lut->color_correction = get_color_correction("Threshold");
else
- {
- if (i0 == rgbin[0] && i1 == rgbin[1] && i2 == rgbin[2] &&
- i3 == rgbin[3])
- {
- rgbout[0] = o0;
- rgbout[1] = o1;
- rgbout[2] = o2;
- goto out;
- }
- else
- {
- i0 = rgbin[0];
- i1 = rgbin[1];
- i2 = rgbin[2];
- i3 = rgbin[3];
- rgbout[0] = lut->red[i0 * i3 / 255 + 255 - i3];
- rgbout[1] = lut->green[i1 * i3 / 255 + 255 - i3];
- rgbout[2] = lut->blue[i2 * i3 / 255 + 255 - i3];
- }
- }
- if (saturation != 1.0)
- {
- calc_rgb_to_hsl(rgbout, &h, &s, &l);
- if (saturation < 1)
- s *= saturation;
- else if (saturation > 1)
- {
- double s1 = s * saturation;
- double s2 = 1.0 - ((1.0 - s) * isat);
- s = FMIN(s1, s2);
- }
- if (s > 1)
- s = 1.0;
- calc_hsl_to_rgb(rgbout, h, s, l);
- }
- if (ld < 65536)
- {
- int i;
- for (i = 0; i < 3; i++)
- rgbout[i] = rgbout[i] * ld / 65536;
- }
- o0 = rgbout[0];
- o1 = rgbout[1];
- o2 = rgbout[2];
- nz0 |= o0;
- nz1 |= o1;
- nz2 |= o2;
- out:
- rgbin += bpp;
- rgbout += 3;
- width --;
+ lut->color_correction = get_color_correction("None");
}
- if (zero_mask)
+ else if (color_correction)
+ lut->color_correction = get_color_correction(color_correction);
+ else
+ lut->color_correction = get_color_correction("None");
+ if (lut->color_correction->correction == COLOR_CORRECTION_DEFAULT)
+ lut->color_correction =
+ (get_color_correction_by_tag
+ (lut->output_color_description->default_correction));
+
+ stpi_compute_lut(v);
+
+ lut->image_width = stp_image_width(image);
+ total_channel_bits = lut->in_channels * lut->channel_depth;
+ lut->in_data = stp_malloc(((lut->image_width * total_channel_bits) + 7)/8);
+ memset(lut->in_data, 0, ((lut->image_width * total_channel_bits) + 7) / 8);
+ return lut->out_channels;
+}
+
+static void
+initialize_standard_curves(void)
+{
+ if (!standard_curves_initialized)
{
- *zero_mask = nz0 ? 0 : 1;
- *zero_mask |= nz1 ? 0 : 2;
- *zero_mask |= nz2 ? 0 : 4;
+ int i;
+ hue_map_bounds = stp_curve_create_from_string
+ ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+ "<sequence count=\"2\" lower-bound=\"-6\" upper-bound=\"6\">\n"
+ "0 0\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>");
+ lum_map_bounds = stp_curve_create_from_string
+ ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+ "<sequence count=\"2\" lower-bound=\"0\" upper-bound=\"4\">\n"
+ "1 1\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>");
+ sat_map_bounds = stp_curve_create_from_string
+ ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+ "<sequence count=\"2\" lower-bound=\"0\" upper-bound=\"4\">\n"
+ "1 1\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>");
+ color_curve_bounds = stp_curve_create_from_string
+ ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"nowrap\" type=\"linear\" gamma=\"1.0\">\n"
+ "<sequence count=\"0\" lower-bound=\"0\" upper-bound=\"1\">\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>");
+ gcr_curve_bounds = stp_curve_create_from_string
+ ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"nowrap\" type=\"linear\" gamma=\"0.0\">\n"
+ "<sequence count=\"2\" lower-bound=\"0\" upper-bound=\"1\">\n"
+ "1 1\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>");
+ for (i = 0; i < curve_parameter_count; i++)
+ curve_parameters[i].param.deflt.curve =
+ *(curve_parameters[i].defval);
+ standard_curves_initialized = 1;
}
}
-/*
- * 'gray_to_rgb()' - Convert gray image data to RGB.
- */
+static stp_parameter_list_t
+stpi_color_traditional_list_parameters(const stp_vars_t *v)
+{
+ stp_list_t *ret = stp_parameter_list_create();
+ int i;
+ initialize_standard_curves();
+ for (i = 0; i < float_parameter_count; i++)
+ stp_parameter_list_add_param(ret, &(float_parameters[i].param));
+ for (i = 0; i < curve_parameter_count; i++)
+ stp_parameter_list_add_param(ret, &(curve_parameters[i].param));
+ return ret;
+}
static void
-fast_gray_to_rgb(const stp_vars_t vars,
- const unsigned char *grayin,
- unsigned short *rgbout,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+stpi_color_traditional_describe_parameter(const stp_vars_t *v,
+ const char *name,
+ stp_parameter_t *description)
{
- int i0 = -1;
- int i1 = -1;
- int o0 = 0;
- int o1 = 0;
- int o2 = 0;
- int nz0 = 0;
- int nz1 = 0;
- int nz2 = 0;
- lut_t *lut = (lut_t *)(stp_get_lut(vars));
- double density = stp_get_density(vars);
- while (width > 0)
+ int i, j;
+ description->p_type = STP_PARAMETER_TYPE_INVALID;
+ initialize_standard_curves();
+ if (name == NULL)
+ return;
+
+ for (i = 0; i < float_parameter_count; i++)
{
- if (bpp == 1)
+ const float_param_t *param = &(float_parameters[i]);
+ if (strcmp(name, param->param.name) == 0)
{
- /*
- * No alpha in image...
- */
- if (i0 == grayin[0])
+ stp_fill_parameter_settings(description, &(param->param));
+ if (param->channel_mask != CMASK_EVERY)
{
- rgbout[0] = o0;
- rgbout[1] = o1;
- rgbout[2] = o2;
- goto out;
+ const color_description_t *color_description =
+ get_color_description(stp_describe_output(v));
+ if (color_description &&
+ (param->channel_mask & color_description->channels) &&
+ param->channel_mask != CMASK_RAW)
+ description->is_active = 1;
+ else
+ description->is_active = 0;
+ if (param->color_only &&
+ !(color_description->channels & ~CMASK_K))
+ description->is_active = 0;
}
- else
+ if (stp_check_string_parameter(v, "ImageType", STP_PARAMETER_ACTIVE) &&
+ strcmp(stp_get_string_parameter(v, "ImageType"), "None") != 0 &&
+ description->p_level > STP_PARAMETER_LEVEL_BASIC)
+ description->is_active = 0;
+ switch (param->param.p_type)
{
- i0 = grayin[0];
- rgbout[0] = lut->red[grayin[0]];
- rgbout[1] = lut->green[grayin[0]];
- rgbout[2] = lut->blue[grayin[0]];
+ case STP_PARAMETER_TYPE_BOOLEAN:
+ description->deflt.boolean = (int) param->defval;
+ break;
+ case STP_PARAMETER_TYPE_INT:
+ description->bounds.integer.upper = (int) param->max;
+ description->bounds.integer.lower = (int) param->min;
+ description->deflt.integer = (int) param->defval;
+ break;
+ case STP_PARAMETER_TYPE_DOUBLE:
+ description->bounds.dbl.upper = param->max;
+ description->bounds.dbl.lower = param->min;
+ description->deflt.dbl = param->defval;
+ if (strcmp(name, "InkLimit") == 0)
+ {
+ stp_parameter_t ink_limit_desc;
+ stp_describe_parameter(v, "InkChannels", &ink_limit_desc);
+ if (ink_limit_desc.p_type == STP_PARAMETER_TYPE_INT)
+ {
+ if (ink_limit_desc.deflt.integer > 1)
+ {
+ description->bounds.dbl.upper =
+ ink_limit_desc.deflt.integer;
+ description->deflt.dbl =
+ ink_limit_desc.deflt.integer;
+ }
+ else
+ description->is_active = 0;
+ }
+ stp_parameter_description_destroy(&ink_limit_desc);
+ }
+ break;
+ case STP_PARAMETER_TYPE_STRING_LIST:
+ if (!strcmp(param->param.name, "ColorCorrection"))
+ {
+ description->bounds.str = stp_string_list_create();
+ for (j = 0; j < color_correction_count; j++)
+ stp_string_list_add_string
+ (description->bounds.str, color_corrections[j].name,
+ _(color_corrections[j].text));
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ else if (strcmp(name, "ChannelBitDepth") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ for (j = 0; j < channel_depth_count; j++)
+ stp_string_list_add_string
+ (description->bounds.str, channel_depths[j].name,
+ channel_depths[j].name);
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ else if (strcmp(name, "InputImageType") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ for (j = 0; j < color_description_count; j++)
+ if (color_descriptions[j].input)
+ {
+ if (color_descriptions[j].color_id == COLOR_ID_RAW)
+ {
+ stp_parameter_t desc;
+ stp_describe_parameter(v, "RawChannels", &desc);
+ if (desc.p_type == STP_PARAMETER_TYPE_STRING_LIST)
+ stp_string_list_add_string
+ (description->bounds.str,
+ color_descriptions[j].name,
+ _(color_descriptions[j].name));
+ stp_parameter_description_destroy(&desc);
+ }
+ else
+ stp_string_list_add_string
+ (description->bounds.str,
+ color_descriptions[j].name,
+ _(color_descriptions[j].name));
+ }
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ else if (strcmp(name, "OutputImageType") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ for (j = 0; j < color_description_count; j++)
+ if (color_descriptions[j].output)
+ stp_string_list_add_string
+ (description->bounds.str, color_descriptions[j].name,
+ _(color_descriptions[j].name));
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ break;
+ default:
+ break;
}
+ return;
}
- else
+ }
+ for (i = 0; i < curve_parameter_count; i++)
+ {
+ curve_param_t *param = &(curve_parameters[i]);
+ if (strcmp(name, param->param.name) == 0)
{
- if (i0 == grayin[0] && i1 == grayin[1])
+ description->is_active = 1;
+ stp_fill_parameter_settings(description, &(param->param));
+ if (param->channel_mask != CMASK_EVERY)
{
- rgbout[0] = o0;
- rgbout[1] = o1;
- rgbout[2] = o2;
- goto out;
+ const color_description_t *color_description =
+ get_color_description(stp_describe_output(v));
+ if (color_description &&
+ (param->channel_mask & color_description->channels))
+ description->is_active = 1;
+ else
+ description->is_active = 0;
+ if (param->color_only &&
+ !(color_description->channels & ~CMASK_K))
+ description->is_active = 0;
}
- else
+ if (stp_check_string_parameter(v, "ImageType", STP_PARAMETER_ACTIVE) &&
+ strcmp(stp_get_string_parameter(v, "ImageType"), "None") != 0 &&
+ description->p_level > STP_PARAMETER_LEVEL_BASIC)
+ description->is_active = 0;
+ else if (param->hsl_only)
{
- int lookup = (grayin[0] * grayin[1] / 255 + 255 - grayin[1]);
- i0 = grayin[0];
- i1 = grayin[1];
- rgbout[0] = lut->red[lookup];
- rgbout[1] = lut->green[lookup];
- rgbout[2] = lut->blue[lookup];
+ const color_correction_t *correction =
+ (get_color_correction
+ (stp_get_string_parameter (v, "ColorCorrection")));
+ if (correction && !correction->correct_hsl)
+ description->is_active = 0;
}
+ switch (param->param.p_type)
+ {
+ case STP_PARAMETER_TYPE_CURVE:
+ description->deflt.curve = *(param->defval);
+ description->bounds.curve =
+ stp_curve_create_copy(*(param->defval));
+ break;
+ default:
+ break;
+ }
+ return;
}
- if (density != 1.0)
- {
- int i;
- for (i = 0; i < 3; i++)
- rgbout[i] = .5 + (rgbout[i] * density);
- }
- o0 = rgbout[0];
- o1 = rgbout[1];
- o2 = rgbout[2];
- nz0 |= o0;
- nz1 |= o1;
- nz2 |= o2;
- out:
- grayin += bpp;
- rgbout += 3;
- width --;
- }
- if (zero_mask)
- {
- *zero_mask = nz0 ? 0 : 1;
- *zero_mask |= nz1 ? 0 : 2;
- *zero_mask |= nz2 ? 0 : 4;
}
}
-static void
-cmyk_8_to_cmyk(const stp_vars_t vars,
- const unsigned char *cmykin,
- unsigned short *cmykout,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
-{
- int i;
- int j;
- int nz[4];
- static unsigned short lut[256];
- static double density = -1.0;
- static double print_gamma = -1.0;
-
- memset(nz, 0, sizeof(nz));
- if (density != stp_get_density(vars) ||
- print_gamma != stp_get_gamma(vars))
- {
- density = stp_get_density(vars);
- print_gamma = stp_get_gamma(vars);
-
- for (i = 0; i < 256; i ++)
- lut[i] = 65535.0 * density * pow((double)i / 255.0, print_gamma) + 0.5;
- }
- for (i = 0; i < width; i++)
- {
- j = *cmykin++;
- nz[0] |= j;
- *cmykout++ = lut[j];
-
- j = *cmykin++;
- nz[1] |= j;
- *cmykout++ = lut[j];
+static const stp_colorfuncs_t stpi_color_traditional_colorfuncs =
+{
+ &stpi_color_traditional_init,
+ &stpi_color_traditional_get_row,
+ &stpi_color_traditional_list_parameters,
+ &stpi_color_traditional_describe_parameter
+};
- j = *cmykin++;
- nz[2] |= j;
- *cmykout++ = lut[j];
+static const stp_color_t stpi_color_traditional_module_data =
+ {
+ "traditional",
+ N_("Traditional Gutenprint color conversion"),
+ &stpi_color_traditional_colorfuncs
+ };
- j = *cmykin++;
- nz[3] |= j;
- *cmykout++ = lut[j];
- }
- if (zero_mask)
- {
- *zero_mask = nz[0] ? 0 : 1;
- *zero_mask |= nz[1] ? 0 : 2;
- *zero_mask |= nz[2] ? 0 : 4;
- *zero_mask |= nz[3] ? 0 : 8;
- }
-}
-static void
-cmyk_to_cmyk(const stp_vars_t vars,
- const unsigned char *cmykin,
- unsigned short *cmykout,
- int *zero_mask,
- int width,
- int bpp,
- const unsigned char *cmap,
- const double *hue_map,
- const double *lum_map,
- const double *sat_map)
+static int
+color_traditional_module_init(void)
{
- int i;
- int j;
- int nz[4];
- const unsigned short *scmykin = (const unsigned short *) cmykin;
-
- memset(nz, 0, sizeof(nz));
- for (i = 0; i < width; i++)
- {
- for (j = 0; j < 4; j++)
- {
- nz[j] |= scmykin[j];
- cmykout[j] = scmykin[j];
- }
- scmykin += 4;
- cmykout += 4;
- }
- if (zero_mask)
- {
- *zero_mask = nz[0] ? 0 : 1;
- *zero_mask |= nz[1] ? 0 : 2;
- *zero_mask |= nz[2] ? 0 : 4;
- *zero_mask |= nz[3] ? 0 : 8;
- }
+ return stp_color_register(&stpi_color_traditional_module_data);
}
-static lut_t *
-allocate_lut(size_t steps)
-{
- int i;
- lut_t *ret = stp_malloc(sizeof(lut_t));
- ret->steps = steps;
- ret->composite = stp_zalloc(sizeof(unsigned short) * steps);
- ret->red = stp_zalloc(sizeof(unsigned short) * steps);
- ret->green = stp_zalloc(sizeof(unsigned short) * steps);
- ret->blue = stp_zalloc(sizeof(unsigned short) * steps);
- ret->shiftval = 0;
- for (i = 1; i < steps; i += i)
- ret->shiftval++;
- ret->bin_size = 65536 / steps;
- ret->bin_shift = 16 - ret->shiftval;
- return ret;
-}
-void
-stp_free_lut(stp_vars_t v)
+static int
+color_traditional_module_exit(void)
{
- if (stp_get_lut(v))
- {
- lut_t *lut = (lut_t *)(stp_get_lut(v));
- if (lut->composite)
- stp_free(lut->composite);
- if (lut->red)
- stp_free(lut->red);
- if (lut->green)
- stp_free(lut->green);
- if (lut->blue)
- stp_free(lut->blue);
- lut->steps = 0;
- lut->composite = NULL;
- lut->red = NULL;
- lut->green = NULL;
- lut->blue = NULL;
- stp_free(stp_get_lut(v));
- stp_set_lut(v, NULL);
- }
+ return stp_color_unregister(&stpi_color_traditional_module_data);
}
-void
-stp_compute_lut(stp_vars_t v, size_t steps)
-{
- double pixel, /* Pixel value */
- red_pixel, /* Pixel value */
- green_pixel, /* Pixel value */
- blue_pixel; /* Pixel value */
- int i;
- /*
- * Got an output file/command, now compute a brightness lookup table...
- */
-
- double cyan = stp_get_cyan(v);
- double magenta = stp_get_magenta(v);
- double yellow = stp_get_yellow(v);
- double print_gamma = stp_get_gamma(v);
- double contrast = stp_get_contrast(v);
- double app_gamma = stp_get_app_gamma(v);
- double brightness = stp_get_brightness(v);
- double screen_gamma = app_gamma / 4.0; /* "Empirical" */
- double pivot = .25;
- double ipivot = 1.0 - pivot;
- lut_t *lut;
-
- /*
- * Monochrome mode simply thresholds the input
- * to decide whether to print at all. The printer gamma
- * is intended to represent the analog response of the printer.
- * Using it shifts the threshold, which is not the intent
- * of how this works.
- */
- if (stp_get_output_type(v) == OUTPUT_MONOCHROME)
- print_gamma = 1.0;
-
- lut = allocate_lut(steps);
- stp_set_lut(v, lut);
- stp_dprintf(STP_DBG_LUT, v, "stp_compute_lut\n");
- stp_dprintf(STP_DBG_LUT, v, " cyan %.3f\n", cyan);
- stp_dprintf(STP_DBG_LUT, v, " magenta %.3f\n", magenta);
- stp_dprintf(STP_DBG_LUT, v, " yellow %.3f\n", yellow);
- stp_dprintf(STP_DBG_LUT, v, " print_gamma %.3f\n", print_gamma);
- stp_dprintf(STP_DBG_LUT, v, " contrast %.3f\n", contrast);
- stp_dprintf(STP_DBG_LUT, v, " brightness %.3f\n", brightness);
- stp_dprintf(STP_DBG_LUT, v, " screen_gamma %.3f\n", screen_gamma);
- for (i = 0; i < steps; i ++)
- {
- double temp_pixel;
- pixel = (double) i / (double) (steps - 1);
-
- if (stp_get_input_color_model(v) == COLOR_MODEL_CMY)
- pixel = 1.0 - pixel;
-
- /*
- * First, correct contrast
- */
- if (pixel >= .5)
- temp_pixel = 1.0 - pixel;
- else
- temp_pixel = pixel;
- if (contrast > 3.99999)
- {
- if (temp_pixel < .5)
- temp_pixel = 0;
- else
- temp_pixel = 1;
- }
- if (temp_pixel <= .000001 && contrast <= .0001)
- temp_pixel = .5;
- else if (temp_pixel > 1)
- temp_pixel = .5 * pow(2 * temp_pixel, pow(contrast, contrast));
- else if (temp_pixel < 1)
- temp_pixel = 0.5 -
- ((0.5 - .5 * pow(2 * temp_pixel, contrast)) * contrast);
- if (temp_pixel > .5)
- temp_pixel = .5;
- else if (temp_pixel < 0)
- temp_pixel = 0;
- if (pixel < .5)
- pixel = temp_pixel;
- else
- pixel = 1 - temp_pixel;
-
- /*
- * Second, do brightness
- */
- if (brightness < 1)
- pixel = pixel * brightness;
- else
- pixel = 1 - ((1 - pixel) * (2 - brightness));
-
- /*
- * Third, correct for the screen gamma
- */
- pixel = 1.0 -
- (1.0 / (1.0 - pow(pivot, screen_gamma))) *
- (pow(pivot + ipivot * pixel, screen_gamma) - pow(pivot, screen_gamma));
+/* Module header */
+#define stp_module_version color_traditional_LTX_stp_module_version
+#define stp_module_data color_traditional_LTX_stp_module_data
- /*
- * Third, fix up cyan, magenta, yellow values
- */
- if (pixel < 0.0)
- pixel = 0.0;
- else if (pixel > 1.0)
- pixel = 1.0;
+stp_module_version_t stp_module_version = {0, 0};
- if (pixel > .9999 && cyan < .00001)
- red_pixel = 0;
- else
- red_pixel = 1 - pow(1 - pixel, cyan);
- if (pixel > .9999 && magenta < .00001)
- green_pixel = 0;
- else
- green_pixel = 1 - pow(1 - pixel, magenta);
- if (pixel > .9999 && yellow < .00001)
- blue_pixel = 0;
- else
- blue_pixel = 1 - pow(1 - pixel, yellow);
-
- /*
- * Finally, fix up print gamma and scale
- */
-
- pixel = 65535 * pow(pixel, print_gamma) + .5;
- red_pixel = 65535 * pow(red_pixel, print_gamma) + .5;
- green_pixel = 65535 * pow(green_pixel, print_gamma) + .5;
- blue_pixel = 65535 * pow(blue_pixel, print_gamma) + .5;
- if (stp_get_output_color_model(v) == COLOR_MODEL_RGB)
- {
- pixel = 65535 - pixel;
- red_pixel = 65535 - red_pixel;
- blue_pixel = 65535 - blue_pixel;
- green_pixel = 65535 - green_pixel;
- }
-
- if (pixel <= 0.0)
- lut->composite[i] = 0;
- else if (pixel >= 65535.0)
- lut->composite[i] = 65535;
- else
- lut->composite[i] = (unsigned)(pixel);
-
- if (red_pixel <= 0.0)
- lut->red[i] = 0;
- else if (red_pixel >= 65535.0)
- lut->red[i] = 65535;
- else
- lut->red[i] = (unsigned)(red_pixel);
-
- if (green_pixel <= 0.0)
- lut->green[i] = 0;
- else if (green_pixel >= 65535.0)
- lut->green[i] = 65535;
- else
- lut->green[i] = (unsigned)(green_pixel);
-
- if (blue_pixel <= 0.0)
- lut->blue[i] = 0;
- else if (blue_pixel >= 65535.0)
- lut->blue[i] = 65535;
- else
- lut->blue[i] = (unsigned)(blue_pixel);
- stp_dprintf(STP_DBG_LUT, v,
- "%3i %5d %5d %5d %5d\n",
- i, lut->composite[i], lut->red[i],
- lut->green[i], lut->blue[i]);
- }
-}
-
-#define RETURN_COLORFUNC(x) \
-do \
-{ \
- stp_dprintf(STP_DBG_COLORFUNC, v, \
- "stp_choose_colorfunc(type %d bpp %d cmap %d) ==> %s, %d\n", \
- output_type, image_bpp, cmap, #x, *out_bpp); \
- return (x); \
-} while (0) \
-
-stp_convert_t
-stp_choose_colorfunc(int output_type,
- int image_bpp,
- const unsigned char *cmap,
- int *out_bpp,
- const stp_vars_t v)
-{
- switch (stp_get_output_type(v))
- {
- case OUTPUT_MONOCHROME:
- *out_bpp = 1;
- switch (image_bpp)
- {
- case 1:
- if (cmap)
- RETURN_COLORFUNC(indexed_to_monochrome);
- else
- RETURN_COLORFUNC(gray_to_monochrome);
- case 2:
- if (cmap)
- RETURN_COLORFUNC(indexed_alpha_to_monochrome);
- else
- RETURN_COLORFUNC(gray_alpha_to_monochrome);
- case 3:
- RETURN_COLORFUNC(rgb_to_monochrome);
- case 4:
- RETURN_COLORFUNC(rgb_alpha_to_monochrome);
- default:
- RETURN_COLORFUNC(NULL);
- }
- break;
- case OUTPUT_RAW_CMYK:
- *out_bpp = 4;
- switch (image_bpp)
- {
- case 4:
- RETURN_COLORFUNC(cmyk_8_to_cmyk);
- case 8:
- RETURN_COLORFUNC(cmyk_to_cmyk);
- default:
- RETURN_COLORFUNC(NULL);
- }
- break;
- case OUTPUT_COLOR:
- *out_bpp = 3;
- switch (stp_get_image_type(v))
- {
- case IMAGE_CONTINUOUS:
- if (image_bpp >= 3)
- RETURN_COLORFUNC(rgb_to_rgb);
- else if (cmap == NULL)
- RETURN_COLORFUNC(gray_to_rgb);
- else
- RETURN_COLORFUNC(indexed_to_rgb);
- case IMAGE_SOLID_TONE:
- if (image_bpp >= 3)
- RETURN_COLORFUNC(solid_rgb_to_rgb);
- else if (cmap == NULL)
- RETURN_COLORFUNC(gray_to_rgb);
- else
- RETURN_COLORFUNC(solid_indexed_to_rgb);
- case IMAGE_LINE_ART:
- if (image_bpp >= 3)
- RETURN_COLORFUNC(fast_rgb_to_rgb);
- else if (cmap == NULL)
- RETURN_COLORFUNC(fast_gray_to_rgb);
- else
- RETURN_COLORFUNC(fast_indexed_to_rgb);
- default:
- RETURN_COLORFUNC(NULL);
- }
- case OUTPUT_GRAY:
- default:
- *out_bpp = 1;
- switch (image_bpp)
- {
- case 1:
- if (cmap)
- RETURN_COLORFUNC(indexed_to_gray);
- else
- RETURN_COLORFUNC(gray_to_gray);
- case 2:
- if (cmap)
- RETURN_COLORFUNC(indexed_alpha_to_gray);
- else
- RETURN_COLORFUNC(gray_alpha_to_gray);
- case 3:
- RETURN_COLORFUNC(rgb_to_gray);
- case 4:
- RETURN_COLORFUNC(rgb_alpha_to_gray);
- default:
- RETURN_COLORFUNC(NULL);
- }
- break;
- }
-}
+stp_module_t stp_module_data =
+ {
+ "traditional",
+ VERSION,
+ "Traditional Gutenprint color conversion",
+ STP_MODULE_CLASS_COLOR,
+ NULL,
+ color_traditional_module_init,
+ color_traditional_module_exit,
+ (void *) &stpi_color_traditional_module_data
+ };
diff --git a/src/main/print-dither-matrices.c b/src/main/print-dither-matrices.c
index 531d1f1..a301fb0 100644
--- a/src/main/print-dither-matrices.c
+++ b/src/main/print-dither-matrices.c
@@ -1,5 +1,5 @@
/*
- * "$Id: print-dither-matrices.c,v 1.4.4.1 2002/05/03 01:30:28 rlk Exp $"
+ * "$Id: print-dither-matrices.c,v 1.34 2004/09/17 18:38:22 rleigh Exp $"
*
* Print plug-in driver utility functions for the GIMP.
*
@@ -27,42 +27,39 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#include "print-dither.h"
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include "dither-impl.h"
#ifdef __GNUC__
#define inline __inline__
#endif
-static const unsigned short mat_1_1[] =
-{
-#include "quickmatrix257.h"
-};
-
-const stp_dither_matrix_short_t stp_1_1_matrix =
-{
- 257, 257, 2, 1, mat_1_1
-};
-static const unsigned short mat_2_1[] =
+static unsigned
+gcd(unsigned a, unsigned b)
{
-#include "ran.367.179.h"
-};
-
-const stp_dither_matrix_short_t stp_2_1_matrix =
-{
- 367, 179, 2, 1, mat_2_1
-};
-
-static const unsigned short mat_4_1[] =
-{
-#include "ran.509.131.h"
-};
-
-const stp_dither_matrix_short_t stp_4_1_matrix =
-{
- 509, 131, 2, 1, mat_4_1
-};
+ unsigned tmp;
+ if (b > a)
+ {
+ tmp = a;
+ a = b;
+ b = tmp;
+ }
+ while (1)
+ {
+ tmp = a % b;
+ if (tmp == 0)
+ return b;
+ a = b;
+ b = tmp;
+ }
+}
static inline int
calc_ordered_point(unsigned x, unsigned y, int steps, int multiplier,
@@ -96,15 +93,15 @@ is_po2(size_t i)
}
void
-stp_init_iterated_matrix(dither_matrix_t *mat, size_t size, size_t exp,
- const unsigned *array)
+stp_dither_matrix_iterated_init(stp_dither_matrix_impl_t *mat, size_t size,
+ size_t expt, const unsigned *array)
{
int i;
int x, y;
mat->base = size;
- mat->exp = exp;
+ mat->exp = expt;
mat->x_size = 1;
- for (i = 0; i < exp; i++)
+ for (i = 0; i < expt; i++)
mat->x_size *= mat->base;
mat->y_size = mat->x_size;
mat->total_size = mat->x_size * mat->y_size;
@@ -132,7 +129,7 @@ stp_init_iterated_matrix(dither_matrix_t *mat, size_t size, size_t exp,
((m)[(((x) + (x_size)) % (x_size)) + ((x_size) * (((y) + (y_size)) % (y_size)))])
void
-stp_shear_matrix(dither_matrix_t *mat, int x_shear, int y_shear)
+stp_dither_matrix_shear(stp_dither_matrix_impl_t *mat, int x_shear, int y_shear)
{
int i;
int j;
@@ -149,9 +146,59 @@ stp_shear_matrix(dither_matrix_t *mat, int x_shear, int y_shear)
stp_free(tmp);
}
+int
+stp_dither_matrix_validate_array(const stp_array_t *array)
+{
+ double low, high;
+ const stp_sequence_t *seq = stp_array_get_sequence(array);
+ stp_sequence_get_bounds(seq, &low, &high);
+ if (low < 0 || high > 65535)
+ return 0;
+ return 1;
+}
+
+
void
-stp_init_matrix(dither_matrix_t *mat, int x_size, int y_size,
- const unsigned int *array, int transpose, int prescaled)
+stp_dither_matrix_init_from_dither_array(stp_dither_matrix_impl_t *mat,
+ const stp_array_t *array,
+ int transpose)
+{
+ int x, y;
+ size_t count;
+ const unsigned short *vec;
+ int x_size, y_size;
+ const stp_sequence_t *seq = stp_array_get_sequence(array);
+ stp_array_get_size(array, &x_size, &y_size);
+
+ vec = stp_sequence_get_ushort_data(seq, &count);
+ mat->base = x_size;;
+ mat->exp = 1;
+ mat->x_size = x_size;
+ mat->y_size = y_size;
+ mat->total_size = mat->x_size * mat->y_size;
+ mat->matrix = stp_malloc(sizeof(unsigned) * mat->x_size * mat->y_size);
+ for (x = 0; x < mat->x_size; x++)
+ for (y = 0; y < mat->y_size; y++)
+ {
+ if (transpose)
+ mat->matrix[x + y * mat->x_size] = vec[y + x * mat->y_size];
+ else
+ mat->matrix[x + y * mat->x_size] = vec[x + y * mat->x_size];
+ }
+ mat->last_x = mat->last_x_mod = 0;
+ mat->last_y = mat->last_y_mod = 0;
+ mat->index = 0;
+ mat->i_own = 1;
+ if (is_po2(mat->x_size))
+ mat->fast_mask = mat->x_size - 1;
+ else
+ mat->fast_mask = 0;
+}
+
+
+void
+stp_dither_matrix_init(stp_dither_matrix_impl_t *mat, int x_size, int y_size,
+ const unsigned int *array, int transpose, int prescaled)
{
int x, y;
mat->base = x_size;
@@ -183,9 +230,9 @@ stp_init_matrix(dither_matrix_t *mat, int x_size, int y_size,
}
void
-stp_init_matrix_short(dither_matrix_t *mat, int x_size, int y_size,
- const unsigned short *array, int transpose,
- int prescaled)
+stp_dither_matrix_init_short(stp_dither_matrix_impl_t *mat, int x_size, int y_size,
+ const unsigned short *array, int transpose,
+ int prescaled)
{
int x, y;
mat->base = x_size;
@@ -217,7 +264,7 @@ stp_init_matrix_short(dither_matrix_t *mat, int x_size, int y_size,
}
void
-stp_destroy_matrix(dither_matrix_t *mat)
+stp_dither_matrix_destroy(stp_dither_matrix_impl_t *mat)
{
if (mat->i_own && mat->matrix)
stp_free(mat->matrix);
@@ -231,8 +278,8 @@ stp_destroy_matrix(dither_matrix_t *mat)
}
void
-stp_clone_matrix(const dither_matrix_t *src, dither_matrix_t *dest,
- int x_offset, int y_offset)
+stp_dither_matrix_clone(const stp_dither_matrix_impl_t *src, stp_dither_matrix_impl_t *dest,
+ int x_offset, int y_offset)
{
dest->base = src->base;
dest->exp = src->exp;
@@ -252,7 +299,7 @@ stp_clone_matrix(const dither_matrix_t *src, dither_matrix_t *dest,
}
void
-stp_copy_matrix(const dither_matrix_t *src, dither_matrix_t *dest)
+stp_dither_matrix_copy(const stp_dither_matrix_impl_t *src, stp_dither_matrix_impl_t *dest)
{
int x;
dest->base = src->base;
@@ -275,7 +322,7 @@ stp_copy_matrix(const dither_matrix_t *src, dither_matrix_t *dest)
}
void
-stp_exponential_scale_matrix(dither_matrix_t *mat, double exponent)
+stp_dither_matrix_scale_exponentially(stp_dither_matrix_impl_t *mat, double exponent)
{
int i;
int mat_size = mat->x_size * mat->y_size;
@@ -288,9 +335,373 @@ stp_exponential_scale_matrix(dither_matrix_t *mat, double exponent)
}
void
-stp_matrix_set_row(dither_matrix_t *mat, int y)
+stp_dither_matrix_set_row(stp_dither_matrix_impl_t *mat, int y)
{
mat->last_y = y;
mat->last_y_mod = mat->x_size * ((y + mat->y_offset) % mat->y_size);
mat->index = mat->last_x_mod + mat->last_y_mod;
}
+
+static void
+preinit_matrix(stp_vars_t *v)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ int i;
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ stp_dither_matrix_destroy(&(CHANNEL(d, i).dithermat));
+ stp_dither_matrix_destroy(&(d->dither_matrix));
+}
+
+static void
+postinit_matrix(stp_vars_t *v, int x_shear, int y_shear)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ unsigned rc = 1 + (unsigned) ceil(sqrt(CHANNEL_COUNT(d)));
+ int i, j;
+ int color = 0;
+ unsigned x_n = d->dither_matrix.x_size / rc;
+ unsigned y_n = d->dither_matrix.y_size / rc;
+ if (x_shear || y_shear)
+ stp_dither_matrix_shear(&(d->dither_matrix), x_shear, y_shear);
+ for (i = 0; i < rc; i++)
+ for (j = 0; j < rc; j++)
+ if (color < CHANNEL_COUNT(d))
+ {
+ stp_dither_matrix_clone(&(d->dither_matrix),
+ &(CHANNEL(d, color).dithermat),
+ x_n * i, y_n * j);
+ color++;
+ }
+ stp_dither_set_transition(v, d->transition);
+}
+
+void
+stp_dither_set_iterated_matrix(stp_vars_t *v, size_t edge, size_t iterations,
+ const unsigned *data, int prescaled,
+ int x_shear, int y_shear)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ preinit_matrix(v);
+ stp_dither_matrix_iterated_init(&(d->dither_matrix), edge, iterations, data);
+ postinit_matrix(v, x_shear, y_shear);
+}
+
+void
+stp_dither_set_matrix(stp_vars_t *v, const stp_dither_matrix_generic_t *matrix,
+ int transposed, int x_shear, int y_shear)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ int x = transposed ? matrix->y : matrix->x;
+ int y = transposed ? matrix->x : matrix->y;
+ preinit_matrix(v);
+ if (matrix->bytes == 2)
+ stp_dither_matrix_init_short(&(d->dither_matrix), x, y,
+ (const unsigned short *) matrix->data,
+ transposed, matrix->prescaled);
+ else if (matrix->bytes == 4)
+ stp_dither_matrix_init(&(d->dither_matrix), x, y,
+ (const unsigned *)matrix->data,
+ transposed, matrix->prescaled);
+ postinit_matrix(v, x_shear, y_shear);
+}
+
+void
+stp_dither_set_matrix_from_dither_array(stp_vars_t *v,
+ const stp_array_t *array,
+ int transpose)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ preinit_matrix(v);
+ stp_dither_matrix_init_from_dither_array(&(d->dither_matrix), array, transpose);
+ postinit_matrix(v, 0, 0);
+}
+
+void
+stp_dither_set_transition(stp_vars_t *v, double exponent)
+{
+ stpi_dither_t *d = (stpi_dither_t *) stp_get_component_data(v, "Dither");
+ unsigned rc = 1 + (unsigned) ceil(sqrt(CHANNEL_COUNT(d)));
+ int i, j;
+ int color = 0;
+ unsigned x_n = d->dither_matrix.x_size / rc;
+ unsigned y_n = d->dither_matrix.y_size / rc;
+ for (i = 0; i < CHANNEL_COUNT(d); i++)
+ stp_dither_matrix_destroy(&(CHANNEL(d, i).pick));
+ stp_dither_matrix_destroy(&(d->transition_matrix));
+ stp_dither_matrix_copy(&(d->dither_matrix), &(d->transition_matrix));
+ d->transition = exponent;
+ if (exponent < .999 || exponent > 1.001)
+ stp_dither_matrix_scale_exponentially(&(d->transition_matrix), exponent);
+ for (i = 0; i < rc; i++)
+ for (j = 0; j < rc; j++)
+ if (color < CHANNEL_COUNT(d))
+ {
+ stp_dither_matrix_clone(&(d->dither_matrix),
+ &(CHANNEL(d, color).pick),
+ x_n * i, y_n * j);
+ color++;
+ }
+}
+
+static stp_list_t *dither_matrix_cache = NULL;
+
+typedef struct
+{
+ int x;
+ int y;
+ const char *filename;
+ const stp_array_t *dither_array;
+} stp_xml_dither_cache_t;
+
+static stp_xml_dither_cache_t *
+stp_xml_dither_cache_get(int x, int y)
+{
+ stp_list_item_t *ln;
+
+ stp_deprintf(STP_DBG_XML,
+ "stp_xml_dither_cache_get: lookup %dx%d... ", x, y);
+ if (!dither_matrix_cache)
+ {
+ stp_deprintf(STP_DBG_XML, "cache does not exist\n");
+ return NULL;
+ }
+
+ ln = stp_list_get_start(dither_matrix_cache);
+
+ while (ln)
+ {
+ if (((stp_xml_dither_cache_t *) stp_list_item_get_data(ln))->x == x &&
+ ((stp_xml_dither_cache_t *) stp_list_item_get_data(ln))->y == y)
+ {
+
+ stp_deprintf(STP_DBG_XML, "found\n");
+
+ return ((stp_xml_dither_cache_t *) stp_list_item_get_data(ln));
+ }
+ ln = stp_list_item_next(ln);
+ }
+ stp_deprintf(STP_DBG_XML, "missing\n");
+
+ return NULL;
+}
+
+static void
+stp_xml_dither_cache_set(int x, int y, const char *filename)
+{
+ stp_xml_dither_cache_t *cacheval;
+
+ assert(x && y && filename);
+
+ stp_xml_init();
+
+ if (dither_matrix_cache == NULL)
+ dither_matrix_cache = stp_list_create();
+
+ if (stp_xml_dither_cache_get(x, y))
+ /* Already cached for this x and y aspect */
+ return;
+
+ cacheval = stp_malloc(sizeof(stp_xml_dither_cache_t));
+ cacheval->x = x;
+ cacheval->y = y;
+ cacheval->filename = stp_strdup(filename);
+ cacheval->dither_array = NULL;
+
+ stp_list_item_create(dither_matrix_cache, NULL, (void *) cacheval);
+
+ stp_deprintf(STP_DBG_XML, "stp_xml_dither_cache_set: added %dx%d\n", x, y);
+
+ stp_xml_exit();
+
+ return;
+}
+
+/*
+ * Parse the <dither-matrix> node.
+ */
+static int
+stp_xml_process_dither_matrix(stp_mxml_node_t *dm, /* The dither matrix node */
+ const char *file) /* Source file */
+
+{
+ const char *value;
+ int x = -1;
+ int y = -1;
+
+ value = stp_mxmlElementGetAttr(dm, "x-aspect");
+ x = stp_xmlstrtol(value);
+
+ value = stp_mxmlElementGetAttr(dm, "y-aspect");
+ y = stp_xmlstrtol(value);
+
+ stp_deprintf(STP_DBG_XML,
+ "stp_xml_process_dither_matrix: x=%d, y=%d\n", x, y);
+
+ stp_xml_dither_cache_set(x, y, file);
+ return 1;
+}
+
+static stp_array_t *
+stpi_dither_array_create_from_xmltree(stp_mxml_node_t *dm) /* Dither matrix node */
+{
+ const char *stmp;
+ stp_mxml_node_t *child;
+ int x_aspect, y_aspect; /* Dither matrix size */
+
+ /* Get x-size */
+ stmp = stp_mxmlElementGetAttr(dm, "x-aspect");
+ if (stmp)
+ {
+ x_aspect = (int) stp_xmlstrtoul(stmp);
+ }
+ else
+ {
+ stp_erprintf("stpi_dither_array_create_from_xmltree: \"x-aspect\" missing\n");
+ goto error;
+ }
+ /* Get y-size */
+ stmp = stp_mxmlElementGetAttr(dm, "y-aspect");
+ if (stmp)
+ {
+ y_aspect = (int) stp_xmlstrtoul(stmp);
+ }
+ else
+ {
+ stp_erprintf("stpi_dither_array_create_from_xmltree: \"y-aspect\" missing\n");
+ goto error;
+ }
+
+ /* Now read in the array */
+ child = stp_mxmlFindElement(dm, dm, "array", NULL, NULL, STP_MXML_DESCEND);
+ if (child)
+ return stp_array_create_from_xmltree(child);
+ else
+ stp_erprintf("stpi_dither_array_create_from_xmltree: cannot find root\n");
+ error:
+ return NULL;
+}
+
+static stp_array_t *
+xml_doc_get_dither_array(stp_mxml_node_t *doc)
+{
+ stp_mxml_node_t *cur;
+ stp_mxml_node_t *xmlseq;
+
+ if (doc == NULL )
+ {
+ fprintf(stderr,"xml_doc_get_dither_array: XML file not parsed successfully.\n");
+ return NULL;
+ }
+
+ cur = doc->child;
+
+ if (cur == NULL)
+ {
+ fprintf(stderr,"xml_doc_get_dither_array: empty document\n");
+ return NULL;
+ }
+
+ xmlseq = stp_xml_get_node(cur, "gutenprint", "dither-matrix", NULL);
+ if (xmlseq == NULL )
+ {
+ fprintf(stderr,"xml-doc-get-dither-array: XML file is not a dither matrix.\n");
+ return NULL;
+ }
+
+ return stpi_dither_array_create_from_xmltree(xmlseq);
+}
+
+static stp_array_t *
+stpi_dither_array_create_from_file(const char* file)
+{
+ stp_mxml_node_t *doc;
+ stp_array_t *ret = NULL;
+
+ FILE *fp = fopen(file, "r");
+ if (!fp)
+ {
+ stp_erprintf("stp_curve_create_from_file: unable to open %s: %s\n",
+ file, strerror(errno));
+ return NULL;
+ }
+
+ stp_xml_init();
+
+ stp_deprintf(STP_DBG_XML,
+ "stpi_dither_array_create_from_file: reading `%s'...\n", file);
+
+ doc = stp_mxmlLoadFile(NULL, fp, STP_MXML_NO_CALLBACK);
+ (void) fclose(fp);
+
+ if (doc)
+ {
+ ret = xml_doc_get_dither_array(doc);
+ stp_mxmlDelete(doc);
+ }
+
+ stp_xml_exit();
+
+ return ret;
+}
+
+static stp_array_t *
+stp_xml_get_dither_array(int x, int y)
+{
+ stp_xml_dither_cache_t *cachedval;
+ stp_array_t *ret;
+
+ cachedval = stp_xml_dither_cache_get(x, y);
+
+ if (cachedval && cachedval->dither_array)
+ return stp_array_create_copy(cachedval->dither_array);
+
+ if (!cachedval)
+ {
+ char buf[1024];
+ (void) sprintf(buf, "dither-matrix-%dx%d.xml", x, y);
+ stp_xml_parse_file_named(buf);
+ cachedval = stp_xml_dither_cache_get(x, y);
+ if (cachedval == NULL || cachedval->filename == NULL)
+ {
+ return NULL;
+ }
+ }
+
+ ret = stpi_dither_array_create_from_file(cachedval->filename);
+
+ cachedval->dither_array = ret;
+ return stp_array_create_copy(ret);
+}
+
+void
+stpi_init_dither(void)
+{
+ stp_register_xml_parser("dither-matrix", stp_xml_process_dither_matrix);
+}
+
+stp_array_t *
+stp_find_standard_dither_array(int x_aspect, int y_aspect)
+{
+ stp_array_t *answer;
+ int divisor = gcd(x_aspect, y_aspect);
+
+ x_aspect /= divisor;
+ y_aspect /= divisor;
+
+ if (x_aspect == 3) /* We don't have x3 matrices */
+ x_aspect += 1; /* so cheat */
+ if (y_aspect == 3)
+ y_aspect += 1;
+
+ divisor = gcd(x_aspect, y_aspect);
+ x_aspect /= divisor;
+ y_aspect /= divisor;
+
+ answer = stp_xml_get_dither_array(x_aspect, y_aspect);
+ if (answer)
+ return answer;
+ answer = stp_xml_get_dither_array(y_aspect, x_aspect);
+ if (answer)
+ return answer;
+ return NULL;
+}
diff --git a/src/main/print-dither.c b/src/main/print-dither.c
deleted file mode 100644
index af2015b..0000000
--- a/src/main/print-dither.c
+++ /dev/null
@@ -1,3779 +0,0 @@
-/*
- * "$Id: print-dither.c,v 1.44.4.5 2002/10/27 17:48:18 rwisi Exp $"
- *
- * Print plug-in driver utility functions for the GIMP.
- *
- * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
- * Robert Krawitz (rlk@alum.mit.edu)
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Revision History:
- *
- * See ChangeLog
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <gimp-print/gimp-print.h>
-#include "gimp-print-internal.h"
-#include "print-dither.h"
-#include <gimp-print/gimp-print-intl-internal.h>
-#include <limits.h>
-#include <math.h>
-#include <string.h>
-
-#ifdef __GNUC__
-#define inline __inline__
-#endif
-
-#define D_FLOYD_HYBRID 0
-#define D_ADAPTIVE_BASE 4
-#define D_ADAPTIVE_HYBRID (D_ADAPTIVE_BASE | D_FLOYD_HYBRID)
-#define D_ORDERED_BASE 8
-#define D_ORDERED (D_ORDERED_BASE)
-#define D_FAST_BASE 16
-#define D_FAST (D_FAST_BASE)
-#define D_VERY_FAST (D_FAST_BASE + 1)
-#define D_EVENTONE 32
-
-#define DITHER_FAST_STEPS (6)
-
-typedef struct
-{
- const char *name;
- const char *text;
- int id;
-} dither_algo_t;
-
-static const dither_algo_t dither_algos[] =
-{
- { "Adaptive", N_ ("Adaptive Hybrid"), D_ADAPTIVE_HYBRID },
- { "Ordered", N_ ("Ordered"), D_ORDERED },
- { "Fast", N_ ("Fast"), D_FAST },
- { "VeryFast", N_ ("Very Fast"), D_VERY_FAST },
- { "Floyd", N_ ("Hybrid Floyd-Steinberg"), D_FLOYD_HYBRID },
- /* Note to translators: "EvenTone" is the proper name, rather than a */
- /* descriptive name, of this algorithm. */
- { "EvenTone", N_ ("EvenTone"), D_EVENTONE }
-};
-
-static const int num_dither_algos = sizeof(dither_algos)/sizeof(dither_algo_t);
-
-#define ERROR_ROWS 2
-
-#define MAX_SPREAD 32
-
-/*
- * An end of a dither segment, describing one ink
- */
-
-typedef struct ink_defn
-{
- unsigned range;
- unsigned value;
- unsigned bits;
- unsigned dot_size;
- int subchannel;
-} ink_defn_t;
-
-/*
- * A segment of the entire 0-65535 intensity range.
- */
-
-typedef struct dither_segment
-{
- ink_defn_t *lower;
- ink_defn_t *upper;
- unsigned range_span;
- unsigned value_span;
- int is_same_ink;
- int is_equal;
-} dither_segment_t;
-
-typedef struct dither_channel
-{
- unsigned randomizer; /* With Floyd-Steinberg dithering, control */
- /* how much randomness is applied to the */
- /* threshold values (0-65535). With ordered */
- /* dithering, how much randomness is added */
- /* to the matrix value. */
- int k_level; /* Amount of each ink (in 64ths) required */
- /* to create equivalent black */
- int darkness; /* Perceived "darkness" of each ink, */
- /* in 64ths, to calculate CMY-K transitions */
- int nlevels;
- unsigned bit_max;
- unsigned signif_bits;
- unsigned density;
-
- int v;
- int o;
- int b;
- int very_fast;
- int subchannels;
-
- int maxdot; /* Maximum dot size */
-
- ink_defn_t *ink_list;
-
- dither_segment_t *ranges;
- int **errs;
- unsigned short *vals;
-
- dither_matrix_t pick;
- dither_matrix_t dithermat;
- int *row_ends[2];
- unsigned char **ptrs;
-} dither_channel_t;
-
-typedef struct {
- int d2x, d2y, dx2, dy2;
- int aspect;
- int **dx, **dy, **r_sq;
- int *recip;
-} eventone_t;
-
-typedef struct dither
-{
- int src_width; /* Input width */
- int dst_width; /* Output width */
-
- int density; /* Desired density, 0-1.0 (scaled 0-65535) */
- int black_density; /* Desired density, 0-1.0 (scaled 0-65535) */
- int k_lower; /* Transition range (lower/upper) for CMY */
- int k_upper; /* vs. K */
- int density2; /* Density * 2 */
- int densityh; /* Density / 2 */
- unsigned dlb_range;
- unsigned bound_range;
-
- int spread; /* With Floyd-Steinberg, how widely the */
- int spread_mask; /* error is distributed. This should be */
- /* between 12 (very broad distribution) and */
- /* 19 (very narrow) */
-
- int dither_type;
-
- int d_cutoff; /* When ordered dither is used, threshold */
- /* above which no randomness is used. */
- double adaptive_input;
- int adaptive_input_set;
- int adaptive_limit;
-
- int x_aspect; /* Aspect ratio numerator */
- int y_aspect; /* Aspect ratio denominator */
-
- double transition; /* Exponential scaling for transition region */
-
- int *offset0_table;
- int *offset1_table;
-
- int oversampling;
- int last_line_was_empty;
- int ptr_offset;
- int n_channels;
- int n_input_channels;
- int error_rows;
-
- int dither_class; /* mono, black, or CMYK */
-
- dither_matrix_t dither_matrix;
- dither_matrix_t transition_matrix;
- dither_channel_t *channel;
-
- unsigned short virtual_dot_scale[65536];
- void (*ditherfunc)(const unsigned short *, int, struct dither *, int, int);
- eventone_t *eventone;
- stp_vars_t v;
-} dither_t;
-
-typedef void ditherfunc_t(const unsigned short *, int, struct dither *, int, int);
-
-static ditherfunc_t
- stp_dither_monochrome,
- stp_dither_monochrome_very_fast,
- stp_dither_black_fast,
- stp_dither_black_very_fast,
- stp_dither_black_ordered,
- stp_dither_black_ed,
- stp_dither_black_et,
- stp_dither_cmyk_fast,
- stp_dither_cmyk_very_fast,
- stp_dither_cmyk_ordered,
- stp_dither_cmyk_ed,
- stp_dither_cmyk_et,
- stp_dither_raw_cmyk_fast,
- stp_dither_raw_cmyk_very_fast,
- stp_dither_raw_cmyk_ordered,
- stp_dither_raw_cmyk_ed,
- stp_dither_raw_cmyk_et;
-
-
-#define CHANNEL(d, c) ((d)->channel[(c)])
-
-#define SAFE_FREE(x) \
-do \
-{ \
- if ((x)) \
- stp_free((char *)(x)); \
- ((x)) = NULL; \
-} while (0)
-
-/*
- * Bayer's dither matrix using Judice, Jarvis, and Ninke recurrence relation
- * http://www.cs.rit.edu/~sxc7922/Project/CRT.htm
- */
-
-static const unsigned sq2[] =
-{
- 0, 2,
- 3, 1
-};
-
-size_t
-stp_dither_algorithm_count(void)
-{
- return num_dither_algos;
-}
-
-const char *
-stp_dither_algorithm_name(int id)
-{
- if (id < 0 || id >= num_dither_algos)
- return NULL;
- return (dither_algos[id].name);
-}
-
-const char *
-stp_dither_algorithm_text(int id)
-{
- if (id < 0 || id >= num_dither_algos)
- return NULL;
- return _(dither_algos[id].text);
-}
-
-/*
- * These really belong with print-dither.c. However, inlining has yielded
- * significant (measured) speedup, even with the more complicated dither
- * function. --rlk 20011219
- */
-
-static inline unsigned
-ditherpoint_fast(const dither_t *d, dither_matrix_t *mat, int x)
-{
- return mat->matrix[(mat->last_y_mod+((x + mat->x_offset) & mat->fast_mask))];
-}
-
-static inline unsigned
-ditherpoint(const dither_t *d, dither_matrix_t *mat, int x)
-{
- if (mat->fast_mask)
- return mat->matrix[(mat->last_y_mod +
- ((x + mat->x_offset) & mat->fast_mask))];
- /*
- * This rather bizarre code is an attempt to avoid having to compute a lot
- * of modulus and multiplication operations, which are typically slow.
- */
-
- if (x == mat->last_x + 1)
- {
- mat->last_x_mod++;
- mat->index++;
- if (mat->last_x_mod >= mat->x_size)
- {
- mat->last_x_mod -= mat->x_size;
- mat->index -= mat->x_size;
- }
- }
- else if (x == mat->last_x - 1)
- {
- mat->last_x_mod--;
- mat->index--;
- if (mat->last_x_mod < 0)
- {
- mat->last_x_mod += mat->x_size;
- mat->index += mat->x_size;
- }
- }
- else if (x == mat->last_x)
- {
- }
- else
- {
- mat->last_x_mod = (x + mat->x_offset) % mat->x_size;
- mat->index = mat->last_x_mod + mat->last_y_mod;
- }
- mat->last_x = x;
- return mat->matrix[mat->index];
-}
-
-static void
-reverse_row_ends(dither_t *d)
-{
- int i, j;
- for (i = 0; i < d->n_channels; i++)
- for (j = 0; j < CHANNEL(d, i).subchannels; j++)
- {
- int tmp = CHANNEL(d, i).row_ends[0][j];
- CHANNEL(d, i).row_ends[0][j] =
- CHANNEL(d, i).row_ends[1][j];
- CHANNEL(d, i).row_ends[1][j] = tmp;
- }
-}
-
-stp_dither_data_t *
-stp_create_dither_data(void)
-{
- stp_dither_data_t *ret = stp_zalloc(sizeof(stp_dither_data_t));
- ret->channel_count = 0;
- ret->c = NULL;
- return ret;
-}
-
-void
-stp_add_channel(stp_dither_data_t *d, unsigned char *data,
- unsigned channel, unsigned subchannel)
-{
- stp_channel_t *chan;
- if (channel >= d->channel_count)
- {
- unsigned oc = d->channel_count;
- d->c = stp_realloc(d->c, sizeof(stp_channel_t) * (channel + 1));
- (void) memset(d->c + oc, 0, sizeof(stp_channel_t) * (channel + 1 - oc));
- d->channel_count = channel + 1;
- }
- chan = d->c + channel;
- if (subchannel >= chan->subchannel_count)
- {
- unsigned oc = chan->subchannel_count;
- chan->c =
- stp_realloc(chan->c, sizeof(unsigned char *) * (subchannel + 1));
- (void) memset(chan->c + oc, 0,
- sizeof(unsigned char *) * (subchannel + 1 - oc));
- chan->subchannel_count = subchannel + 1;
- }
- chan->c[subchannel] = data;
-}
-
-void
-stp_free_dither_data(stp_dither_data_t *d)
-{
- int i;
- for (i = 0; i < d->channel_count; i++)
- stp_free(d->c[i].c);
- stp_free(d->c);
-}
-
-#define SET_DITHERFUNC(d, func, v) \
-do \
-{ \
- stp_dprintf(STP_DBG_COLORFUNC, v, "ditherfunc %s\n", #func); \
- d->ditherfunc = func; \
-} while (0)
-
-void *
-stp_init_dither(int in_width, int out_width, int horizontal_aspect,
- int vertical_aspect, stp_vars_t v)
-{
- int i;
- dither_t *d = stp_zalloc(sizeof(dither_t));
- stp_simple_dither_range_t r;
- d->v = v;
- d->dither_class = stp_get_output_type(v);
- d->error_rows = ERROR_ROWS;
-
- d->dither_type = D_ADAPTIVE_HYBRID;
- for (i = 0; i < num_dither_algos; i++)
- {
- if (!strcmp(stp_get_dither_algorithm(v), _(dither_algos[i].name)))
- {
- d->dither_type = dither_algos[i].id;
- break;
- }
- }
- switch (d->dither_class)
- {
- case OUTPUT_MONOCHROME:
- d->n_channels = 1;
- d->n_input_channels = 1;
- switch (d->dither_type)
- {
- case D_VERY_FAST:
- SET_DITHERFUNC(d, stp_dither_monochrome_very_fast, v);
- break;
- default:
- SET_DITHERFUNC(d, stp_dither_monochrome, v);
- break;
- }
- break;
- case OUTPUT_GRAY:
- d->n_channels = 1;
- d->n_input_channels = 1;
- switch (d->dither_type)
- {
- case D_FAST:
- SET_DITHERFUNC(d, stp_dither_black_fast, v);
- break;
- case D_VERY_FAST:
- SET_DITHERFUNC(d, stp_dither_black_very_fast, v);
- break;
- case D_ORDERED:
- SET_DITHERFUNC(d, stp_dither_black_ordered, v);
- break;
- case D_EVENTONE:
- SET_DITHERFUNC(d, stp_dither_black_et, v);
- break;
- default:
- SET_DITHERFUNC(d, stp_dither_black_ed, v);
- break;
- }
- break;
- case OUTPUT_COLOR:
- d->n_channels = 4;
- d->n_input_channels = 3;
- switch (d->dither_type)
- {
- case D_FAST:
- SET_DITHERFUNC(d, stp_dither_cmyk_fast, v);
- break;
- case D_VERY_FAST:
- SET_DITHERFUNC(d, stp_dither_cmyk_very_fast, v);
- break;
- case D_ORDERED:
- SET_DITHERFUNC(d, stp_dither_cmyk_ordered, v);
- break;
- case D_EVENTONE:
- SET_DITHERFUNC(d, stp_dither_cmyk_et, v);
- break;
- default:
- SET_DITHERFUNC(d, stp_dither_cmyk_ed, v);
- break;
- }
- break;
- case OUTPUT_RAW_CMYK:
- d->n_channels = 4;
- d->n_input_channels = 4;
- switch (d->dither_type)
- {
- case D_FAST:
- SET_DITHERFUNC(d, stp_dither_raw_cmyk_fast, v);
- break;
- case D_VERY_FAST:
- SET_DITHERFUNC(d, stp_dither_raw_cmyk_very_fast, v);
- break;
- case D_ORDERED:
- SET_DITHERFUNC(d, stp_dither_raw_cmyk_ordered, v);
- break;
- case D_EVENTONE:
- SET_DITHERFUNC(d, stp_dither_raw_cmyk_et, v);
- break;
- default:
- SET_DITHERFUNC(d, stp_dither_raw_cmyk_ed, v);
- break;
- }
- break;
- }
- d->channel = stp_zalloc(d->n_channels * sizeof(dither_channel_t));
- r.value = 1.0;
- r.bit_pattern = 1;
- r.subchannel = 0;
- r.dot_size = 1;
- for (i = 0; i < d->n_channels; i++)
- {
- stp_dither_set_ranges(d, i, 1, &r, 1.0);
- CHANNEL(d, i).errs = stp_zalloc(d->error_rows * sizeof(int *));
- }
- d->offset0_table = NULL;
- d->offset1_table = NULL;
- d->x_aspect = horizontal_aspect;
- d->y_aspect = vertical_aspect;
- d->transition = 1.0;
- d->adaptive_input = .75;
- d->adaptive_input_set = 0;
-
- if (d->dither_type == D_VERY_FAST)
- stp_dither_set_iterated_matrix(d, 2, DITHER_FAST_STEPS, sq2, 0, 2, 4);
- else
- {
- stp_dither_matrix_t *mat;
- int transposed = 0;
- if (d->y_aspect == d->x_aspect)
- mat = (stp_dither_matrix_t *) &stp_1_1_matrix;
- else if (d->y_aspect > d->x_aspect)
- {
- transposed = 0;
- if (d->y_aspect / d->x_aspect == 2)
- mat = (stp_dither_matrix_t *) &stp_2_1_matrix;
- else if (d->y_aspect / d->x_aspect == 3)
- mat = (stp_dither_matrix_t *) &stp_4_1_matrix;
- else if (d->y_aspect / d->x_aspect == 4)
- mat = (stp_dither_matrix_t *) &stp_4_1_matrix;
- else
- mat = (stp_dither_matrix_t *) &stp_2_1_matrix;
- }
- else
- {
- transposed = 1;
- if (d->x_aspect / d->y_aspect == 2)
- mat = (stp_dither_matrix_t *) &stp_2_1_matrix;
- else if (d->x_aspect / d->y_aspect == 3)
- mat = (stp_dither_matrix_t *) &stp_4_1_matrix;
- else if (d->x_aspect / d->y_aspect == 4)
- mat = (stp_dither_matrix_t *) &stp_4_1_matrix;
- else
- mat = (stp_dither_matrix_t *) &stp_2_1_matrix;
- }
- stp_dither_set_matrix(d, mat, transposed, 0, 0);
- }
-
- d->src_width = in_width;
- d->dst_width = out_width;
-
- stp_dither_set_ink_spread(d, 13);
- stp_dither_set_black_lower(d, .4);
- stp_dither_set_black_upper(d, .7);
- for (i = 0; i <= d->n_channels; i++)
- {
- stp_dither_set_black_level(d, i, 1.0);
- stp_dither_set_randomizer(d, i, 1.0);
- }
- stp_dither_set_ink_darkness(d, ECOLOR_C, 2);
- stp_dither_set_ink_darkness(d, ECOLOR_M, 2);
- stp_dither_set_ink_darkness(d, ECOLOR_Y, 1);
- stp_dither_set_density(d, 1.0);
- return d;
-}
-
-static void
-preinit_matrix(dither_t *d)
-{
- int i;
- for (i = 0; i < d->n_channels; i++)
- stp_destroy_matrix(&(CHANNEL(d, i).dithermat));
- stp_destroy_matrix(&(d->dither_matrix));
-}
-
-static void
-postinit_matrix(dither_t *d, int x_shear, int y_shear)
-{
- unsigned rc = 1 + (unsigned) ceil(sqrt(d->n_channels));
- int i, j;
- int color = 0;
- unsigned x_n = d->dither_matrix.x_size / rc;
- unsigned y_n = d->dither_matrix.y_size / rc;
- if (x_shear || y_shear)
- stp_shear_matrix(&(d->dither_matrix), x_shear, y_shear);
- for (i = 0; i < rc; i++)
- for (j = 0; j < rc; j++)
- if (color < d->n_channels)
- {
- stp_clone_matrix(&(d->dither_matrix), &(CHANNEL(d, color).dithermat),
- x_n * i, y_n * j);
- color++;
- }
- stp_dither_set_transition(d, d->transition);
-}
-
-void
-stp_dither_set_iterated_matrix(void *vd, size_t edge, size_t iterations,
- const unsigned *data, int prescaled,
- int x_shear, int y_shear)
-{
- dither_t *d = (dither_t *) vd;
- preinit_matrix(d);
- stp_init_iterated_matrix(&(d->dither_matrix), edge, iterations, data);
- postinit_matrix(d, x_shear, y_shear);
-}
-
-void
-stp_dither_set_matrix(void *vd, const stp_dither_matrix_t *matrix,
- int transposed, int x_shear, int y_shear)
-{
- dither_t *d = (dither_t *) vd;
- int x = transposed ? matrix->y : matrix->x;
- int y = transposed ? matrix->x : matrix->y;
- preinit_matrix(d);
- if (matrix->bytes == 2)
- stp_init_matrix_short(&(d->dither_matrix), x, y,
- (const unsigned short *) matrix->data,
- transposed, matrix->prescaled);
- else if (matrix->bytes == 4)
- stp_init_matrix(&(d->dither_matrix), x, y, (const unsigned *)matrix->data,
- transposed, matrix->prescaled);
- postinit_matrix(d, x_shear, y_shear);
-}
-
-void
-stp_dither_set_transition(void *vd, double exponent)
-{
- dither_t *d = (dither_t *) vd;
- unsigned rc = 1 + (unsigned) ceil(sqrt(d->n_channels));
- int i, j;
- int color = 0;
- unsigned x_n = d->dither_matrix.x_size / rc;
- unsigned y_n = d->dither_matrix.y_size / rc;
- for (i = 0; i < d->n_channels; i++)
- stp_destroy_matrix(&(CHANNEL(d, i).pick));
- stp_destroy_matrix(&(d->transition_matrix));
- stp_copy_matrix(&(d->dither_matrix), &(d->transition_matrix));
- d->transition = exponent;
- if (exponent < .999 || exponent > 1.001)
- stp_exponential_scale_matrix(&(d->transition_matrix), exponent);
- for (i = 0; i < rc; i++)
- for (j = 0; j < rc; j++)
- if (color < d->n_channels)
- {
- stp_clone_matrix(&(d->dither_matrix), &(CHANNEL(d, color).pick),
- x_n * i, y_n * j);
- color++;
- }
- if (exponent < .999 || exponent > 1.001)
- for (i = 0; i < 65536; i++)
- {
- double dd = i / 65535.0;
- dd = pow(dd, 1.0 / exponent);
- d->virtual_dot_scale[i] = dd * 65535;
- }
- else
- for (i = 0; i < 65536; i++)
- d->virtual_dot_scale[i] = i;
-}
-
-void
-stp_dither_set_density(void *vd, double density)
-{
- dither_t *d = (dither_t *) vd;
- if (density > 1)
- density = 1;
- else if (density < 0)
- density = 0;
- d->k_upper = d->k_upper * density;
- d->k_lower = d->k_lower * density;
- d->density = (int) ((65535 * density) + .5);
- d->density2 = 2 * d->density;
- d->densityh = d->density / 2;
- d->dlb_range = d->density - d->k_lower;
- d->bound_range = d->k_upper - d->k_lower;
- d->d_cutoff = d->density / 16;
- d->adaptive_limit = d->density * d->adaptive_input;
- stp_dither_set_black_density(vd, density);
-}
-
-void
-stp_dither_set_black_density(void *vd, double density)
-{
- dither_t *d = (dither_t *) vd;
- if (density > 1)
- density = 1;
- else if (density < 0)
- density = 0;
- d->black_density = (int) ((65535 * density) + .5);
-}
-
-void
-stp_dither_set_adaptive_limit(void *vd, double limit)
-{
- dither_t *d = (dither_t *) vd;
- d->adaptive_input = limit;
- d->adaptive_input_set = 1;
- d->adaptive_limit = d->density * limit;
-}
-
-void
-stp_dither_set_black_lower(void *vd, double k_lower)
-{
- dither_t *d = (dither_t *) vd;
- d->k_lower = (int) (k_lower * 65535);
-}
-
-void
-stp_dither_set_black_upper(void *vd, double k_upper)
-{
- dither_t *d = (dither_t *) vd;
- d->k_upper = (int) (k_upper * 65535);
-}
-
-void
-stp_dither_set_ink_spread(void *vd, int spread)
-{
- dither_t *d = (dither_t *) vd;
- SAFE_FREE(d->offset0_table);
- SAFE_FREE(d->offset1_table);
- if (spread >= 16)
- {
- d->spread = 16;
- }
- else
- {
- int max_offset;
- int i;
- d->spread = spread;
- max_offset = (1 << (16 - spread)) + 1;
- d->offset0_table = stp_malloc(sizeof(int) * max_offset);
- d->offset1_table = stp_malloc(sizeof(int) * max_offset);
- for (i = 0; i < max_offset; i++)
- {
- d->offset0_table[i] = (i + 1) * (i + 1);
- d->offset1_table[i] = ((i + 1) * i) / 2;
- }
- }
- d->spread_mask = (1 << d->spread) - 1;
- d->adaptive_limit = d->density * d->adaptive_input;
-}
-
-void
-stp_dither_set_black_level(void *vd, int i, double v)
-{
- dither_t *d = (dither_t *) vd;
- if (i < 0 || i >= d->n_channels)
- return;
- CHANNEL(d, i).k_level = (int) v * 64;
-}
-
-void
-stp_dither_set_randomizer(void *vd, int i, double v)
-{
- dither_t *d = (dither_t *) vd;
- if (i < 0 || i >= d->n_channels)
- return;
- CHANNEL(d, i).randomizer = v * 65535;
-}
-
-void
-stp_dither_set_ink_darkness(void *vd, int i, double v)
-{
- dither_t *d = (dither_t *) vd;
- if (i < 0 || i >= d->n_channels)
- return;
- CHANNEL(d, i).darkness = (int) (v * 64);
-}
-
-void
-stp_dither_set_light_ink(void *vd, int i, double v, double density)
-{
- dither_t *d = (dither_t *) vd;
- stp_simple_dither_range_t range[2];
- if (i < 0 || i >= d->n_channels || v <= 0 || v > 1)
- return;
- range[0].bit_pattern = 1;
- range[0].subchannel = 1;
- range[0].value = v;
- range[0].dot_size = 1;
- range[1].bit_pattern = 1;
- range[1].subchannel = 0;
- range[1].value = 1;
- range[1].dot_size = 1;
- stp_dither_set_ranges(vd, i, 2, range, density);
-}
-
-static void
-stp_dither_finalize_ranges(dither_t *d, dither_channel_t *s)
-{
- int max_subchannel = 0;
- int i;
- unsigned lbit = s->bit_max;
- s->signif_bits = 0;
- while (lbit > 0)
- {
- s->signif_bits++;
- lbit >>= 1;
- }
-
- s->maxdot = 0;
-
- for (i = 0; i < s->nlevels; i++)
- {
- if (s->ranges[i].lower->subchannel > max_subchannel)
- max_subchannel = s->ranges[i].lower->subchannel;
- if (s->ranges[i].upper->subchannel > max_subchannel)
- max_subchannel = s->ranges[i].upper->subchannel;
- if (s->ranges[i].lower->subchannel == s->ranges[i].upper->subchannel &&
- s->ranges[i].lower->dot_size == s->ranges[i].upper->dot_size)
- s->ranges[i].is_same_ink = 1;
- else
- s->ranges[i].is_same_ink = 0;
- if (s->ranges[i].range_span > 0 &&
- (s->ranges[i].value_span > 0 ||
- s->ranges[i].lower->subchannel != s->ranges[i].upper->subchannel))
- s->ranges[i].is_equal = 0;
- else
- s->ranges[i].is_equal = 1;
-
- if (s->ranges[i].lower->dot_size > s->maxdot)
- s->maxdot = s->ranges[i].lower->dot_size;
- if (s->ranges[i].upper->dot_size > s->maxdot)
- s->maxdot = s->ranges[i].upper->dot_size;
-
- stp_dprintf(STP_DBG_INK, d->v,
- " level %d value[0] %d value[1] %d range[0] %d range[1] %d\n",
- i, s->ranges[i].lower->value, s->ranges[i].upper->value,
- s->ranges[i].lower->range, s->ranges[i].upper->range);
- stp_dprintf(STP_DBG_INK, d->v,
- " bits[0] %d bits[1] %d subchannel[0] %d subchannel[1] %d\n",
- s->ranges[i].lower->bits, s->ranges[i].upper->bits,
- s->ranges[i].lower->subchannel, s->ranges[i].upper->subchannel);
- stp_dprintf(STP_DBG_INK, d->v,
- " rangespan %d valuespan %d same_ink %d equal %d\n",
- s->ranges[i].range_span, s->ranges[i].value_span,
- s->ranges[i].is_same_ink, s->ranges[i].is_equal);
- if (!d->adaptive_input_set && i > 0 &&
- s->ranges[i].lower->range >= d->adaptive_limit)
- {
- d->adaptive_limit = s->ranges[i].lower->range + 1;
- if (d->adaptive_limit > 65535)
- d->adaptive_limit = 65535;
- d->adaptive_input = (double) d->adaptive_limit / (double) d->density;
- stp_dprintf(STP_DBG_INK, d->v,
- "Setting adaptive limit to %d, input %f\n",
- d->adaptive_limit, d->adaptive_input);
- }
- }
- if (s->nlevels == 1 && s->ranges[0].upper->bits == 1 &&
- s->ranges[0].upper->subchannel == 0)
- s->very_fast = 1;
- else
- s->very_fast = 0;
-
- s->subchannels = max_subchannel + 1;
- s->row_ends[0] = stp_zalloc(s->subchannels * sizeof(int));
- s->row_ends[1] = stp_zalloc(s->subchannels * sizeof(int));
- s->ptrs = stp_zalloc(s->subchannels * sizeof(char *));
- stp_dprintf(STP_DBG_INK, d->v,
- " bit_max %d signif_bits %d\n", s->bit_max, s->signif_bits);
-}
-
-static void
-stp_dither_set_generic_ranges(dither_t *d, dither_channel_t *s, int nlevels,
- const stp_simple_dither_range_t *ranges,
- double density)
-{
- int i;
- SAFE_FREE(s->ranges);
- SAFE_FREE(s->row_ends[0]);
- SAFE_FREE(s->row_ends[1]);
- SAFE_FREE(s->ptrs);
-
- s->nlevels = nlevels > 1 ? nlevels + 1 : nlevels;
- s->ranges = (dither_segment_t *)
- stp_zalloc(s->nlevels * sizeof(dither_segment_t));
- s->ink_list = (ink_defn_t *)
- stp_zalloc((s->nlevels + 1) * sizeof(ink_defn_t));
- s->bit_max = 0;
- s->density = density * 65535;
- stp_dprintf(STP_DBG_INK, d->v,
- "stp_dither_set_generic_ranges nlevels %d density %f\n",
- nlevels, density);
- for (i = 0; i < nlevels; i++)
- stp_dprintf(STP_DBG_INK, d->v,
- " level %d value %f pattern %x subchannel %d\n", i,
- ranges[i].value, ranges[i].bit_pattern, ranges[i].subchannel);
- s->ranges[0].lower = &s->ink_list[0];
- s->ranges[0].upper = &s->ink_list[1];
- s->ink_list[0].range = 0;
- s->ink_list[0].value = ranges[0].value * 65535.0;
- s->ink_list[0].bits = ranges[0].bit_pattern;
- s->ink_list[0].subchannel = ranges[0].subchannel;
- s->ink_list[0].dot_size = ranges[0].dot_size;
- if (nlevels == 1)
- s->ink_list[1].range = 65535;
- else
- s->ink_list[1].range = ranges[0].value * 65535.0 * density;
- if (s->ink_list[1].range > 65535)
- s->ink_list[1].range = 65535;
- s->ink_list[1].value = ranges[0].value * 65535.0;
- if (s->ink_list[1].value > 65535)
- s->ink_list[1].value = 65535;
- s->ink_list[1].bits = ranges[0].bit_pattern;
- if (ranges[0].bit_pattern > s->bit_max)
- s->bit_max = ranges[0].bit_pattern;
- s->ink_list[1].subchannel = ranges[0].subchannel;
- s->ink_list[1].dot_size = ranges[0].dot_size;
- s->ranges[0].range_span = s->ranges[0].upper->range;
- s->ranges[0].value_span = 0;
- if (s->nlevels > 1)
- {
- for (i = 1; i < nlevels; i++)
- {
- int l = i + 1;
- s->ranges[i].lower = &s->ink_list[i];
- s->ranges[i].upper = &s->ink_list[l];
-
- s->ink_list[l].range =
- (ranges[i].value + ranges[i].value) * 32768.0 * density;
- if (s->ink_list[l].range > 65535)
- s->ink_list[l].range = 65535;
- s->ink_list[l].value = ranges[i].value * 65535.0;
- if (s->ink_list[l].value > 65535)
- s->ink_list[l].value = 65535;
- s->ink_list[l].bits = ranges[i].bit_pattern;
- if (ranges[i].bit_pattern > s->bit_max)
- s->bit_max = ranges[i].bit_pattern;
- s->ink_list[l].subchannel = ranges[i].subchannel;
- s->ink_list[l].dot_size = ranges[i].dot_size;
- s->ranges[i].range_span =
- s->ink_list[l].range - s->ink_list[i].range;
- s->ranges[i].value_span =
- s->ink_list[l].value - s->ink_list[i].value;
- }
- s->ranges[i].lower = &s->ink_list[i];
- s->ranges[i].upper = &s->ink_list[i+1];
- s->ink_list[i+1] = s->ink_list[i];
- s->ink_list[i+1].range = 65535;
- s->ranges[i].range_span = s->ink_list[i+1].range - s->ink_list[i].range;
- s->ranges[i].value_span = s->ink_list[i+1].value - s->ink_list[i].value;
- }
- stp_dither_finalize_ranges(d, s);
-}
-
-static void
-stp_dither_set_generic_ranges_full(dither_t *d, dither_channel_t *s,
- int nlevels,
- const stp_full_dither_range_t *ranges,
- double density)
-{
- int i, j, k;
- SAFE_FREE(s->ranges);
- SAFE_FREE(s->row_ends[0]);
- SAFE_FREE(s->row_ends[1]);
- SAFE_FREE(s->ptrs);
-
- s->nlevels = nlevels+1;
- s->ranges = (dither_segment_t *)
- stp_zalloc(s->nlevels * sizeof(dither_segment_t));
- s->ink_list = (ink_defn_t *)
- stp_zalloc((s->nlevels * 2) * sizeof(ink_defn_t));
- s->bit_max = 0;
- s->density = density * 65535;
- stp_dprintf(STP_DBG_INK, d->v,
- "stp_dither_set_ranges nlevels %d density %f\n",
- nlevels, density);
- for (i = 0; i < nlevels; i++)
- stp_dprintf(STP_DBG_INK, d->v,
- " level %d value: low %f high %f pattern low %x "
- "high %x subchannel low %d high %d\n", i,
- ranges[i].value[0], ranges[i].value[1],
- ranges[i].bits[0], ranges[i].bits[1],ranges[i].subchannel[0],
- ranges[i].subchannel[1]);
- for(i=j=0; i < nlevels; i++)
- {
- for (k = 0; k < 2; k++)
- {
- if (ranges[i].bits[k] > s->bit_max)
- s->bit_max = ranges[i].bits[k];
- s->ink_list[2*j+k].dot_size = ranges[i].bits[k]; /* FIXME */
- s->ink_list[2*j+k].value = ranges[i].value[k] * 65535;
- s->ink_list[2*j+k].range = s->ink_list[2*j+k].value*density;
- s->ink_list[2*j+k].bits = ranges[i].bits[k];
- s->ink_list[2*j+k].subchannel = ranges[i].subchannel[k];
- }
- s->ranges[j].lower = &s->ink_list[2*j];
- s->ranges[j].upper = &s->ink_list[2*j+1];
- s->ranges[j].range_span = s->ranges[j].upper->range - s->ranges[j].lower->range;
- s->ranges[j].value_span = s->ranges[j].upper->value - s->ranges[j].lower->value;
- j++;
- }
- s->ink_list[2*j] = s->ink_list[2*(j-1)+1];
- s->ink_list[2*j+1] = s->ink_list[2*j];
- s->ink_list[2*j+1].range = 65535;
- s->ink_list[2*j+1].value = 65535; /* ??? Is this correct ??? */
- s->ranges[j].lower = &s->ink_list[2*j];
- s->ranges[j].upper = &s->ink_list[2*j+1];
- s->ranges[j].range_span = s->ranges[j].upper->range - s->ranges[j].lower->range;
- s->ranges[j].value_span = 0;
- s->nlevels = j+1;
- stp_dither_finalize_ranges(d, s);
-}
-
-void
-stp_dither_set_ranges(void *vd, int color, int nlevels,
- const stp_simple_dither_range_t *ranges, double density)
-{
- dither_t *d = (dither_t *) vd;
- if (color < 0 || color >= d->n_channels)
- return;
- stp_dither_set_generic_ranges(d, &(CHANNEL(d, color)), nlevels,
- ranges, density);
-}
-
-void
-stp_dither_set_ranges_simple(void *vd, int color, int nlevels,
- const double *levels, double density)
-{
- stp_simple_dither_range_t *r =
- stp_malloc(nlevels * sizeof(stp_simple_dither_range_t));
- int i;
- for (i = 0; i < nlevels; i++)
- {
- r[i].bit_pattern = i + 1;
- r[i].dot_size = i + 1;
- r[i].value = levels[i];
- r[i].subchannel = 0;
- }
- stp_dither_set_ranges(vd, color, nlevels, r, density);
- stp_free(r);
-}
-
-void
-stp_dither_set_ranges_full(void *vd, int color, int nlevels,
- const stp_full_dither_range_t *ranges,
- double density)
-{
- dither_t *d = (dither_t *) vd;
- stp_dither_set_generic_ranges_full(d, &(CHANNEL(d, color)), nlevels,
- ranges, density);
-}
-
-void
-stp_free_dither(void *vd)
-{
- dither_t *d = (dither_t *) vd;
- int i;
- int j;
- for (j = 0; j < d->n_channels; j++)
- {
- SAFE_FREE(CHANNEL(d, j).vals);
- SAFE_FREE(CHANNEL(d, j).row_ends[0]);
- SAFE_FREE(CHANNEL(d, j).row_ends[1]);
- SAFE_FREE(CHANNEL(d, j).ptrs);
- if (CHANNEL(d, j).errs)
- {
- for (i = 0; i < d->error_rows; i++)
- SAFE_FREE(CHANNEL(d, j).errs[i]);
- SAFE_FREE(CHANNEL(d, j).errs);
- }
- SAFE_FREE(CHANNEL(d, j).ranges);
- stp_destroy_matrix(&(CHANNEL(d, j).pick));
- stp_destroy_matrix(&(CHANNEL(d, j).dithermat));
- }
- SAFE_FREE(d->offset0_table);
- SAFE_FREE(d->offset1_table);
- stp_destroy_matrix(&(d->dither_matrix));
- stp_destroy_matrix(&(d->transition_matrix));
- if (d->eventone) {
- eventone_t *et = d->eventone;
- stp_free(et->recip);
- for (i=0; i<d->n_channels; i++) {
- stp_free(et->dx[i]);
- stp_free(et->dy[i]);
- stp_free(et->r_sq[i]);
- }
- stp_free(et->r_sq);
- stp_free(et->dx);
- stp_free(et->dy);
- stp_free(d->eventone);
- }
- stp_free(d);
-}
-
-int
-stp_dither_get_first_position(void *vd, int color, int subchannel)
-{
- dither_t *d = (dither_t *) vd;
- if (color < 0 || color >= d->n_channels)
- return -1;
- return CHANNEL(d, color).row_ends[0][subchannel];
-}
-
-int
-stp_dither_get_last_position(void *vd, int color, int subchannel)
-{
- dither_t *d = (dither_t *) vd;
- if (color < 0 || color >= d->n_channels)
- return -1;
- return CHANNEL(d, color).row_ends[0][subchannel];
-}
-
-static int *
-get_errline(dither_t *d, int row, int color)
-{
- if (row < 0 || color < 0 || color >= d->n_channels)
- return NULL;
- if (CHANNEL(d, color).errs[row & 1])
- return CHANNEL(d, color).errs[row & 1] + MAX_SPREAD;
- else
- {
- int size = 2 * MAX_SPREAD + (16 * ((d->dst_width + 7) / 8));
- CHANNEL(d, color).errs[row & 1] = stp_zalloc(size * sizeof(int));
- return CHANNEL(d, color).errs[row & 1] + MAX_SPREAD;
- }
-}
-
-#define ADVANCE_UNIDIRECTIONAL(d, bit, input, width, xerror, xmod) \
-do \
-{ \
- bit >>= 1; \
- if (bit == 0) \
- { \
- d->ptr_offset++; \
- bit = 128; \
- } \
- if (d->src_width == d->dst_width) \
- input += (width); \
- else \
- { \
- input += xstep; \
- xerror += xmod; \
- if (xerror >= d->dst_width) \
- { \
- xerror -= d->dst_width; \
- input += (width); \
- } \
- } \
-} while (0)
-
-#define ADVANCE_REVERSE(d, bit, input, width, xerror, xmod) \
-do \
-{ \
- if (bit == 128) \
- { \
- d->ptr_offset--; \
- bit = 1; \
- } \
- else \
- bit <<= 1; \
- if (d->src_width == d->dst_width) \
- input -= (width); \
- else \
- { \
- input -= xstep; \
- xerror -= xmod; \
- if (xerror < 0) \
- { \
- xerror += d->dst_width; \
- input -= (width); \
- } \
- } \
-} while (0)
-
-#define ADVANCE_BIDIRECTIONAL(d, bit, in, dir, width, xer, xmod, err, N, S) \
-do \
-{ \
- int i; \
- int j; \
- for (i = 0; i < N; i++) \
- for (j = 0; j < S; j++) \
- err[i][j] += dir; \
- if (dir == 1) \
- ADVANCE_UNIDIRECTIONAL(d, bit, in, width, xer, xmod); \
- else \
- ADVANCE_REVERSE(d, bit, in, width, xer, xmod); \
-} while (0)
-
-/*
- * Add the error to the input value. Notice that we micro-optimize this
- * to save a division when appropriate.
- */
-
-#define UPDATE_COLOR(color, dither) (\
- ((dither) >= 0)? \
- (color) + ((dither) >> 3): \
- (color) - ((-(dither)) >> 3))
-
-/*
- * For Floyd-Steinberg, distribute the error residual. We spread the
- * error to nearby points, spreading more broadly in lighter regions to
- * achieve more uniform distribution of color. The actual distribution
- * is a triangular function.
- */
-
-static inline int
-update_dither(dither_t *d, int channel, int width,
- int direction, int *error0, int *error1)
-{
- int r = CHANNEL(d, channel).v;
- int o = CHANNEL(d, channel).o;
- int tmp = r;
- int i, dist, dist1;
- int delta, delta1;
- int offset;
- if (tmp == 0)
- return error0[direction];
- if (tmp > 65535)
- tmp = 65535;
- if (d->spread >= 16 || o >= 2048)
- {
- tmp += tmp;
- tmp += tmp;
- error1[0] += tmp;
- return error0[direction] + tmp;
- }
- else
- {
- int tmpo = o << 5;
- offset = ((65535 - tmpo) >> d->spread) +
- ((tmp & d->spread_mask) > (tmpo & d->spread_mask));
- }
- switch (offset)
- {
- case 0:
- tmp += tmp;
- tmp += tmp;
- error1[0] += tmp;
- return error0[direction] + tmp;
- case 1:
- error1[-1] += tmp;
- error1[1] += tmp;
- tmp += tmp;
- error1[0] += tmp;
- tmp += tmp;
- return error0[direction] + tmp;
- default:
- tmp += tmp;
- tmp += tmp;
- dist = tmp / d->offset0_table[offset];
- dist1 = tmp / d->offset1_table[offset];
- delta = dist;
- delta1 = dist1;
- for (i = -offset; i; i++)
- {
- error1[i] += delta;
- error1[-i] += delta;
- error0[i] += delta1;
- error0[-i] += delta1;
- delta1 += dist1;
- delta += dist;
- }
- error1[0] += delta;
- return error0[direction];
- }
-}
-
-#define USMIN(a, b) ((a) < (b) ? (a) : (b))
-
-static inline int
-compute_black(const dither_t *d)
-{
- int answer = INT_MAX;
- int i;
- for (i = 1; i < d->n_channels; i++)
- answer = USMIN(answer, CHANNEL(d, i).v);
- return answer;
-}
-
-static inline void
-set_row_ends(dither_channel_t *dc, int x, int subchannel)
-{
- if (dc->row_ends[0][subchannel] == -1)
- dc->row_ends[0][subchannel] = x;
- dc->row_ends[1][subchannel] = x;
-}
-
-/*
- * Print a single dot. This routine has become awfully complicated
- * awfully fast!
- */
-
-static inline int
-print_color(const dither_t *d, dither_channel_t *dc, int x, int y,
- unsigned char bit, int length, int dontprint, int dither_type)
-{
- int base = dc->b;
- int density = dc->o;
- int adjusted = dc->v;
- unsigned randomizer = dc->randomizer;
- dither_matrix_t *pick_matrix = &(dc->pick);
- dither_matrix_t *dither_matrix = &(dc->dithermat);
- unsigned rangepoint = 32768;
- unsigned virtual_value;
- unsigned vmatrix;
- int i;
- int j;
- int subchannel;
- unsigned char *tptr;
- unsigned bits;
- unsigned v;
- unsigned dot_size;
- int levels = dc->nlevels - 1;
- int dither_value = adjusted;
- dither_segment_t *dd;
- ink_defn_t *lower;
- ink_defn_t *upper;
-
- if (base <= 0 || density <= 0 ||
- (adjusted <= 0 && !(dither_type & D_ADAPTIVE_BASE)))
- return adjusted;
- if (density > 65535)
- density = 65535;
-
- /*
- * Look for the appropriate range into which the input value falls.
- * Notice that we use the input, not the error, to decide what dot type
- * to print (if any). We actually use the "density" input to permit
- * the caller to use something other that simply the input value, if it's
- * desired to use some function of overall density, rather than just
- * this color's input, for this purpose.
- */
- for (i = levels; i >= 0; i--)
- {
- dd = &(dc->ranges[i]);
-
- if (density <= dd->lower->range)
- continue;
-
- /*
- * If we're using an adaptive dithering method, decide whether
- * to use the Floyd-Steinberg or the ordered method based on the
- * input value.
- */
- if (dither_type & D_ADAPTIVE_BASE)
- {
- dither_type -= D_ADAPTIVE_BASE;
-
- if (base <= d->adaptive_limit)
- {
- dither_type = D_ORDERED;
- dither_value = base;
- }
- else if (adjusted <= 0)
- return adjusted;
- }
-
- /*
- * Where are we within the range. If we're going to print at
- * all, this determines the probability of printing the darker
- * vs. the lighter ink. If the inks are identical (same value
- * and darkness), it doesn't matter.
- *
- * We scale the input linearly against the top and bottom of the
- * range.
- */
-
- lower = dd->lower;
- upper = dd->upper;
-
- if (!dd->is_equal)
- rangepoint =
- ((unsigned) (density - lower->range)) * 65535 / dd->range_span;
-
- /*
- * Compute the virtual dot size that we're going to print.
- * This is somewhere between the two candidate dot sizes.
- * This is scaled between the high and low value.
- */
-
- if (dd->value_span == 0)
- virtual_value = upper->value;
- else if (dd->range_span == 0)
- virtual_value = (upper->value + lower->value) / 2;
- else
- virtual_value = lower->value +
- (dd->value_span * d->virtual_dot_scale[rangepoint] / 65535);
-
- /*
- * Reduce the randomness as the base value increases, to get
- * smoother output in the midtones. Idea suggested by
- * Thomas Tonino.
- */
- if (dither_type & D_ORDERED_BASE)
- randomizer = 65535; /* With ordered dither, we need this */
- else if (randomizer > 0)
- {
- if (base > d->d_cutoff)
- randomizer = 0;
- else if (base > d->d_cutoff / 2)
- randomizer = randomizer * 2 * (d->d_cutoff - base) / d->d_cutoff;
- }
-
- /*
- * Compute the comparison value to decide whether to print at
- * all. If there is no randomness, simply divide the virtual
- * dotsize by 2 to get standard "pure" Floyd-Steinberg (or "pure"
- * matrix dithering, which degenerates to a threshold).
- */
- if (randomizer == 0)
- vmatrix = virtual_value / 2;
- else
- {
- /*
- * First, compute a value between 0 and 65535 that will be
- * scaled to produce an offset from the desired threshold.
- */
- vmatrix = ditherpoint(d, dither_matrix, x);
- /*
- * Now, scale the virtual dot size appropriately. Note that
- * we'll get something evenly distributed between 0 and
- * the virtual dot size, centered on the dot size / 2,
- * which is the normal threshold value.
- */
- vmatrix = vmatrix * virtual_value / 65535;
- if (randomizer != 65535)
- {
- /*
- * We want vmatrix to be scaled between 0 and
- * virtual_value when randomizer is 65535 (fully random).
- * When it's less, we want it to scale through part of
- * that range. In all cases, it should center around
- * virtual_value / 2.
- *
- * vbase is the bottom of the scaling range.
- */
- unsigned vbase = virtual_value * (65535u - randomizer) /
- 131070u;
- vmatrix = vmatrix * randomizer / 65535;
- vmatrix += vbase;
- }
- } /* randomizer != 0 */
-
- /*
- * After all that, printing is almost an afterthought.
- * Pick the actual dot size (using a matrix here) and print it.
- */
- if (dither_value >= vmatrix)
- {
- ink_defn_t *subc;
-
- if (dd->is_same_ink)
- subc = upper;
- else
- {
- rangepoint = rangepoint * dc->density / 65535u;
- if (rangepoint >= ditherpoint(d, pick_matrix, x))
- subc = upper;
- else
- subc = lower;
- }
- subchannel = subc->subchannel;
- bits = subc->bits;
- v = subc->value;
- dot_size = subc->dot_size;
- tptr = dc->ptrs[subchannel] + d->ptr_offset;
-
- /*
- * Lay down all of the bits in the pixel.
- */
- if (dontprint < v)
- {
- set_row_ends(dc, x, subchannel);
- for (j = 1; j <= bits; j += j, tptr += length)
- {
- if (j & bits)
- tptr[0] |= bit;
- }
- }
- if (dither_type & D_ORDERED_BASE)
- adjusted = -(int) v / 2;
- else
- adjusted -= v;
- }
- return adjusted;
- }
- return adjusted;
-}
-
-static inline int
-print_color_ordered(const dither_t *d, dither_channel_t *dc, int x, int y,
- unsigned char bit, int length, int dontprint)
-{
- int density = dc->o;
- int adjusted = dc->v;
- dither_matrix_t *pick_matrix = &(dc->pick);
- dither_matrix_t *dither_matrix = &(dc->dithermat);
- unsigned rangepoint;
- unsigned virtual_value;
- unsigned vmatrix;
- int i;
- int j;
- int subchannel;
- unsigned char *tptr;
- unsigned bits;
- unsigned v;
- unsigned dot_size;
- int levels = dc->nlevels - 1;
- int dither_value = adjusted;
- dither_segment_t *dd;
- ink_defn_t *lower;
- ink_defn_t *upper;
-
- if (adjusted <= 0 || density <= 0)
- return 0;
- if (density > 65535)
- density = 65535;
-
- /*
- * Look for the appropriate range into which the input value falls.
- * Notice that we use the input, not the error, to decide what dot type
- * to print (if any). We actually use the "density" input to permit
- * the caller to use something other that simply the input value, if it's
- * desired to use some function of overall density, rather than just
- * this color's input, for this purpose.
- */
- for (i = levels; i >= 0; i--)
- {
- dd = &(dc->ranges[i]);
-
- if (density <= dd->lower->range)
- continue;
-
- /*
- * Where are we within the range. If we're going to print at
- * all, this determines the probability of printing the darker
- * vs. the lighter ink. If the inks are identical (same value
- * and darkness), it doesn't matter.
- *
- * We scale the input linearly against the top and bottom of the
- * range.
- */
-
- lower = dd->lower;
- upper = dd->upper;
-
- if (dd->is_equal)
- rangepoint = 32768;
- else
- rangepoint =
- ((unsigned) (density - lower->range)) * 65535 / dd->range_span;
-
- /*
- * Compute the virtual dot size that we're going to print.
- * This is somewhere between the two candidate dot sizes.
- * This is scaled between the high and low value.
- */
-
- if (dd->value_span == 0)
- virtual_value = upper->value;
- else if (dd->range_span == 0)
- virtual_value = (upper->value + lower->value) / 2;
- else
- virtual_value = lower->value +
- (dd->value_span * d->virtual_dot_scale[rangepoint] / 65535);
-
- /*
- * Compute the comparison value to decide whether to print at
- * all. If there is no randomness, simply divide the virtual
- * dotsize by 2 to get standard "pure" Floyd-Steinberg (or "pure"
- * matrix dithering, which degenerates to a threshold).
- */
- /*
- * First, compute a value between 0 and 65535 that will be
- * scaled to produce an offset from the desired threshold.
- */
- vmatrix = ditherpoint(d, dither_matrix, x);
- /*
- * Now, scale the virtual dot size appropriately. Note that
- * we'll get something evenly distributed between 0 and
- * the virtual dot size, centered on the dot size / 2,
- * which is the normal threshold value.
- */
- vmatrix = vmatrix * virtual_value / 65535;
-
- /*
- * After all that, printing is almost an afterthought.
- * Pick the actual dot size (using a matrix here) and print it.
- */
- if (dither_value >= vmatrix)
- {
- ink_defn_t *subc;
-
- if (dd->is_same_ink)
- subc = upper;
- else
- {
- rangepoint = rangepoint * dc->density / 65535u;
- if (rangepoint >= ditherpoint(d, pick_matrix, x))
- subc = upper;
- else
- subc = lower;
- }
- subchannel = subc->subchannel;
- bits = subc->bits;
- v = subc->value;
- dot_size = subc->dot_size;
- tptr = dc->ptrs[subchannel] + d->ptr_offset;
-
- /*
- * Lay down all of the bits in the pixel.
- */
- if (dontprint < v)
- {
- set_row_ends(dc, x, subchannel);
- for (j = 1; j <= bits; j += j, tptr += length)
- {
- if (j & bits)
- tptr[0] |= bit;
- }
- return v;
- }
- }
- return 0;
- }
- return 0;
-}
-
-static inline void
-print_color_fast(const dither_t *d, dither_channel_t *dc, int x, int y,
- unsigned char bit, int length)
-{
- int density = dc->o;
- int adjusted = dc->v;
- dither_matrix_t *dither_matrix = &(dc->dithermat);
- int i;
- int levels = dc->nlevels - 1;
- int j;
- unsigned char *tptr;
- unsigned bits;
-
- if (density <= 0 || adjusted <= 0)
- return;
- for (i = levels; i >= 0; i--)
- {
- dither_segment_t *dd = &(dc->ranges[i]);
- unsigned vmatrix;
- unsigned rangepoint;
- unsigned dpoint;
- unsigned range0;
- ink_defn_t *subc;
-
- range0 = dd->lower->range;
- if (density <= range0)
- continue;
- dpoint = ditherpoint(d, dither_matrix, x);
-
- if (dd->is_same_ink)
- subc = dd->upper;
- else
- {
- rangepoint = ((density - range0) << 16) / dd->range_span;
- rangepoint = (rangepoint * dc->density) >> 16;
- if (rangepoint >= dpoint)
- subc = dd->upper;
- else
- subc = dd->lower;
- }
- vmatrix = (subc->value * dpoint) >> 16;
-
- /*
- * After all that, printing is almost an afterthought.
- * Pick the actual dot size (using a matrix here) and print it.
- */
- if (adjusted >= vmatrix)
- {
- int subchannel = subc->subchannel;
- bits = subc->bits;
- tptr = dc->ptrs[subchannel] + d->ptr_offset;
- set_row_ends(dc, x, subchannel);
-
- /*
- * Lay down all of the bits in the pixel.
- */
- for (j = 1; j <= bits; j += j, tptr += length)
- {
- if (j & bits)
- tptr[0] |= bit;
- }
- }
- return;
- }
-}
-
-static inline void
-update_cmyk(dither_t *d)
-{
- int ak;
- int i;
- int kdarkness = 0;
- unsigned ks, kl;
- int ub, lb;
- int ok;
- int bk;
- unsigned density;
- int k = CHANNEL(d, ECOLOR_K).o;
-
- ub = d->k_upper;
- lb = d->k_lower;
- density = d->density;
-
- /*
- * Calculate total ink amount.
- * If there is a lot of ink, black gets added sooner. Saves ink
- * and with a lot of ink the black doesn't show as speckles.
- *
- * k already contains the grey contained in CMY.
- * First we find out if the color is darker than the K amount
- * suggests, and we look up where is value is between
- * lowerbound and density:
- */
-
- for (i = 1; i < d->n_channels; i++)
- kdarkness += CHANNEL(d, i).o * CHANNEL(d, i).darkness / 64;
- kdarkness -= d->density2;
-
- if (kdarkness > (k + k + k))
- ok = kdarkness / 3;
- else
- ok = k;
- if (ok <= lb)
- kl = 0;
- else if (ok >= density)
- kl = density;
- else
- kl = (unsigned) ( ok - lb ) * density / d->dlb_range;
-
- /*
- * We have a second value, ks, that will be the scaler.
- * ks is initially showing where the original black
- * amount is between upper and lower bounds:
- */
-
- if (k >= ub)
- ks = density;
- else if (k <= lb)
- ks = 0;
- else
- ks = (unsigned) (k - lb) * density / d->bound_range;
-
- /*
- * ks is then processed by a second order function that produces
- * an S curve: 2ks - ks^2. This is then multiplied by the
- * darkness value in kl. If we think this is too complex the
- * following line can be tried instead:
- * ak = ks;
- */
- ak = ks;
- if (kl == 0 || ak == 0)
- k = 0;
- else if (ak == density)
- k = kl;
- else
- k = (unsigned) kl * (unsigned) ak / density;
- ok = k;
- bk = k;
- if (bk > 0 && density != d->black_density)
- bk = (unsigned) bk * (unsigned) d->black_density / density;
- if (bk > 65535)
- bk = 65535;
-
- if (k && ak && ok > 0)
- {
- int i;
- /*
- * Because black is always fairly neutral, we do not have to
- * calculate the amount to take out of CMY. The result will
- * be a bit dark but that is OK. If things are okay CMY
- * cannot go negative here - unless extra K is added in the
- * previous block. We multiply by ak to prevent taking out
- * too much. This prevents dark areas from becoming very
- * dull.
- */
-
- if (ak == density)
- ok = k;
- else
- ok = (unsigned) k * (unsigned) ak / density;
-
- for (i = 1; i < d->n_channels; i++)
- {
- if (CHANNEL(d, i).k_level == 64)
- CHANNEL(d, i).v -= ok;
- else
- CHANNEL(d, i).v -= (ok * CHANNEL(d, i).k_level) >> 6;
- if (CHANNEL(d, i).v < 0)
- CHANNEL(d, i).v = 0;
- }
- }
- else
- for (i = 1; i < d->n_channels; i++)
- CHANNEL(d, i).v = CHANNEL(d, i).o;
- CHANNEL(d, ECOLOR_K).b = bk;
- CHANNEL(d, ECOLOR_K).v = k;
-}
-
-static int
-shared_ed_initializer(dither_t *d,
- int row,
- int duplicate_line,
- int zero_mask,
- int length,
- int direction,
- int ****error,
- int **ndither)
-{
- int i, j;
- if (!duplicate_line)
- {
- if ((zero_mask & ((1 << d->n_input_channels) - 1)) !=
- ((1 << d->n_input_channels) - 1))
- d->last_line_was_empty = 0;
- else
- d->last_line_was_empty++;
- }
- else if (d->last_line_was_empty)
- d->last_line_was_empty++;
- if (d->last_line_was_empty >= 5)
- return 0;
- else if (d->last_line_was_empty == 4)
- {
- for (i = 0; i < d->n_channels; i++)
- for (j = 0; j < d->error_rows; j++)
- memset(get_errline(d, row + j, i), 0, d->dst_width * sizeof(int));
- return 0;
- }
- d->ptr_offset = (direction == 1) ? 0 : length - 1;
-
- *error = stp_malloc(d->n_channels * sizeof(int **));
- *ndither = stp_malloc(d->n_channels * sizeof(int));
- for (i = 0; i < d->n_channels; i++)
- {
- (*error)[i] = stp_malloc(d->error_rows * sizeof(int *));
- for (j = 0; j < d->error_rows; j++)
- {
- (*error)[i][j] = get_errline(d, row + j, i);
- if (j == d->error_rows - 1)
- memset((*error)[i][j], 0, d->dst_width * sizeof(int));
- if (direction == -1)
- (*error)[i][j] += d->dst_width - 1;
- }
- (*ndither)[i] = (*error)[i][0][0];
- }
- return 1;
-}
-
-
-#define V_WHITE 0
-#define V_CYAN (1<<ECOLOR_C)
-#define V_MAGENTA (1<<ECOLOR_M)
-#define V_YELLOW (1<<ECOLOR_Y)
-#define V_BLUE (V_CYAN|V_MAGENTA)
-#define V_GREEN (V_CYAN|V_YELLOW)
-#define V_RED (V_MAGENTA|V_YELLOW)
-#define V_BLACK (V_CYAN|V_MAGENTA|V_YELLOW)
-
-static inline int
-pick_vertex(int c, int m, int y, int k)
-{
- int best;
- int tmax, vmax;
-
- if (c+m+y <= 65535) {
- best = V_WHITE; vmax = 65535-c-m-y; /* White */
- if (c > vmax) { best = V_CYAN; vmax = c; } /* Cyan */
- if (m > vmax) { best = V_MAGENTA; vmax = m; } /* Magenta */
- if (y > vmax) { best = V_YELLOW; vmax = y; } /* Yellow */
- } else if (c+m+y >= 2*65535) {
- best = V_BLACK; vmax = c+m+y-2*65535; /* Black */
- if ((tmax = 65535-y) > vmax) {best = V_BLUE; vmax = tmax; } /* Blue */
- if ((tmax = 65535-m) > vmax) {best = V_GREEN; vmax = tmax; } /* Green */
- if ((tmax = 65535-c) > vmax) {best = V_RED; vmax = tmax; } /* Red */
- } else if (m+c <= 65535) {
- if (m+y <= 65535) {
- best = V_GREEN; vmax = c+m+y-65535; /* Green */
- if (m > vmax) {best = V_MAGENTA; vmax = m;} /* Magenta */
- if ((tmax = 65535-m-y) > vmax) {best = V_CYAN; vmax = tmax;} /* Cyan */
- if ((tmax = 65535-c-m) > vmax) {best = V_YELLOW; vmax = tmax;} /* Yellow */
- } else {
- best = V_RED; vmax = m+y-65535; /* Red */
- if (c > vmax) { best = V_GREEN; vmax = c;} /* Green */
- if ((tmax = 65535-y) > vmax) {best = V_MAGENTA; vmax = tmax;} /* Magenta */
- if ((tmax = 65535-m-c) > vmax) {best = V_YELLOW; vmax = tmax;} /* Yellow */
- }
- } else {
- if (m+y > 65535) {
- best = V_MAGENTA; vmax = 2*65535-m-c-y; /* Magenta */
- if ((tmax = c+m-65535) > vmax) { best = V_BLUE; vmax = tmax; } /* Blue */
- if ((tmax = y+m-65535) > vmax) { best = V_RED; vmax = tmax; } /* Red */
- if ((tmax = 65535-m) > vmax) { best = V_GREEN; vmax = tmax; } /* Green */
- } else {
- best = V_CYAN; vmax = 65535-y-m; /* Cyan */
- if ((tmax = c+m-65535) > vmax) { best = V_BLUE; vmax = tmax; } /* Blue */
- if ((tmax = 65535-c) > vmax) { best = V_MAGENTA; vmax = tmax; } /* Magenta */
- if (y > vmax) { best = V_GREEN; vmax = y;} /* Green */
- }
- }
-
- if (k >= 32768) {
- best |= (1 << ECOLOR_K);
- }
-
- return best;
-}
-
-typedef struct {
- int dx, dy, r_sq, wetness, ri, point;
- int maxdot_dens; /* Max dot size * density */
- int maxdot_wet; /* Maximum wetness allowed */
- dither_segment_t dr;
-} et_chdata_t;
-
-static inline void find_segment(dither_t *d, dither_channel_t *dc, int wetness, int density, dither_segment_t *range)
-{
- int i;
- ink_defn_t *di;
- int max_dot;
-
- if (wetness < 0) max_dot = 0;
- else max_dot = wetness >> 16;
-
- range->lower = range->upper = dc->ranges[0].lower;
-
- for (i = dc->nlevels-1; i > 0; i--) {
- di = dc->ranges[i].lower;
- if (density < di->value) continue;
- if (max_dot < di->dot_size) continue;
- range->lower = di;
- range->upper = di;
- break;
- }
-
- for (; i < dc->nlevels; i++) {
- di = dc->ranges[i].upper;
- if (max_dot < di->dot_size) continue;
- range->upper = di;
- if (density < di->value) break;
- }
-}
-
-#define EVEN_C1 256
-#define EVEN_C2 222 /* = sqrt(3)/2 * EVEN_C1 */
-
-static inline void
-eventone_init(dither_t *d, et_chdata_t **cd)
-{
- int i;
- eventone_t *et = d->eventone;
-
- if (!et) {
-
- et = stp_zalloc(sizeof(eventone_t));
-
- { int xa, ya;
- xa = d->x_aspect / d->y_aspect;
- if (xa == 0) xa = 1;
- et->dx2 = xa * xa;
- et->d2x = 2 * et->dx2;
-
- ya = d->y_aspect / d->x_aspect;
- if (ya == 0) ya = 1;
- et->dy2 = ya * ya;
- et->d2y = 2 * et->dy2;
-
- et->aspect = EVEN_C2 / (xa * ya);
- }
-
- et->recip = stp_malloc(65536 * sizeof(int));
- et->dx = stp_malloc(sizeof(int *) * d->n_channels);
- et->dy = stp_malloc(sizeof(int *) * d->n_channels);
- et->r_sq = stp_malloc(sizeof(int *) * d->n_channels);
-
- for (i=0; i < d->n_channels; i++) {
- int x;
- et->dx[i] = stp_malloc(sizeof(int) * d->dst_width);
- et->dy[i] = stp_malloc(sizeof(int) * d->dst_width);
- et->r_sq[i] = stp_zalloc(sizeof(int) * d->dst_width);
- for (x = 0; x < d->dst_width; x++) {
- et->dx[i][x] = et->dx2;
- et->dy[i][x] = et->dy2;
- }
- }
-
- for (i=0; i < 65536; i++) {
- if (i == 0)
- et->recip[i] = EVEN_C1 * 65536;
- else
- et->recip[i] = EVEN_C1 * 65536 / i;
- }
-
- for (i = 0; i < d->n_channels; i++) {
- CHANNEL(d, i).ranges[0].lower->value = 0;
- CHANNEL(d, i).ranges[0].lower->range = 0;
- CHANNEL(d, i).ranges[0].lower->bits = 0;
- CHANNEL(d, i).ranges[0].lower->subchannel = 0;
- CHANNEL(d, i).ranges[0].lower->dot_size = 0;
- }
-
- d->eventone = et;
- }
-
- { et_chdata_t *p;
- *cd = stp_malloc(sizeof(et_chdata_t) * d->n_channels);
-
- for (i = 0, p = *cd; i < d->n_channels; i++, p++)
- {
- p->wetness = 0;
- p->maxdot_dens = CHANNEL(d, i).maxdot * d->density;
- p->maxdot_wet = (65536 + d->density / 2) * CHANNEL(d, i).maxdot;
- p->dx = et->dx2;
- p->dy = et->dy2;
- p->r_sq = 0;
- }
- }
-}
-
-static inline void
-advance_eventone_pre(dither_t *d, et_chdata_t *cd, eventone_t *et, int x)
-{
- int i;
-
- for (i=0; i < d->n_channels; cd++, i++) {
- if (cd->r_sq + cd->dx <= et->r_sq[i][x]) { /* Do our eventone calculations */
- cd->r_sq += cd->dx; /* Nearest pixel same as last one */
- cd->dx += et->d2x;
- } else {
- cd->dx = et->dx[i][x]; /* Nearest pixel is from a previous line */
- cd->dy = et->dy[i][x];
- cd->r_sq = et->r_sq[i][x];
- }
- }
-}
-
-static inline void
-advance_eventone_post(dither_t *d, et_chdata_t *cd, eventone_t *et, int x)
-{
- int i;
- int t;
-
- for (i=0; i < d->n_channels; cd++, i++) {
- if (cd->point > 0) {
- cd->r_sq = 0;
- cd->dx = et->dx2;
- cd->dy = et->dy2;
- }
- t = et->r_sq[i][x] + et->dy[i][x];
- et->dy[i][x] += et->d2y;
- if (cd->r_sq + cd->dy < t) {
- t = cd->r_sq + cd->dy;
- et->dx[i][x] = cd->dx;
- et->dy[i][x] = cd->dy + et->d2y;
- }
- if (t > 65535) {
- t = 65535;
- }
- et->r_sq[i][x] = t;
- }
-}
-
-static inline int
-eventone_adjust(dither_segment_t *range, eventone_t *et, int r_sq, int base, int value)
-{
- unsigned upper;
- unsigned lower;
- unsigned value_span;
- int ditherpoint;
-
- lower = range->lower->value;
- upper = range->upper->value;
- value_span = upper - lower;
-
- if (value >= upper) {
- ditherpoint = 65535;
- } else {
- if (value <= lower) {
- ditherpoint = 0;
- } else {
- ditherpoint = ((unsigned)(value - lower) << 16) / value_span;
- }
- /* Adjust for Eventone here */
- if (lower == 0) {
- ditherpoint += r_sq * et->aspect;
- if (base < upper) {
- ditherpoint -= et->recip[(base<<16) / value_span];
- }
- if (ditherpoint > 65535) ditherpoint = 65535;
- else if (ditherpoint < 0) ditherpoint = 0;
- }
- }
- return ditherpoint;
-}
-
-static inline void
-print_all_inks(dither_t *d, et_chdata_t *cd, int print_inks, int pick, unsigned char bit, int length)
-{
- int i, mask;
- for (i = 0, mask = 1; i < d->n_channels; mask <<= 1, cd++, i++) {
- int j;
- ink_defn_t *subc;
- int bits;
- unsigned char *tptr;
-
- if (!(print_inks & mask)) continue;
-
- subc = (pick & mask) ? cd->dr.upper : cd->dr.lower;
- bits = subc->bits;
- if (bits == 0) continue;
-
- tptr = CHANNEL(d, i).ptrs[subc->subchannel] + d->ptr_offset;
- cd->wetness += subc->dot_size << 16;
-
- for (j=1; j <= bits; j+=j, tptr += length) {
- if (j & bits) *tptr |= bit;
- }
- }
-}
-
-static inline void
-diffuse_error(dither_t *d, int *ndither, int ***error, int aspect, int direction)
-{
- int i;
- int fraction, frac_2, frac_3;
- int *err;
- static const int diff_fact[] = {1, 10, 16, 23, 32};
- int factor = diff_fact[aspect];
-
- for (i=0; i < d->n_channels; i++, ndither++, error++) {
- fraction = (*ndither + (factor>>1)) / factor;
- frac_2 = fraction + fraction;
- frac_3 = frac_2 + fraction;
- err = (*error)[1];
- err[0] += frac_3;
- err[-direction] += frac_2;
- *ndither += (*error)[0][direction] - frac_2 - frac_3;
- }
-}
-
-/*
- * Dithering functions!
- *
- * Documentation moved to README.dither
- */
-
-/*
- * 'stp_dither_monochrome()' - Dither grayscale pixels to black using a hard
- * threshold. This is for use with predithered output, or for text
- * or other pure black and white only.
- */
-
-static void
-stp_dither_monochrome(const unsigned short *gray,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- xerror,
- xstep,
- xmod,
- length;
- unsigned char bit,
- *kptr;
- dither_channel_t *dc = &(CHANNEL(d, ECOLOR_K));
- dither_matrix_t *kdither = &(dc->dithermat);
- unsigned bits = dc->signif_bits;
- int j;
- unsigned char *tptr;
- int dst_width = d->dst_width;
- if ((zero_mask & ((1 << d->n_input_channels) - 1)) ==
- ((1 << d->n_input_channels) - 1))
- return;
-
- kptr = CHANNEL(d, ECOLOR_K).ptrs[0];
- length = (d->dst_width + 7) / 8;
-
- bit = 128;
- x = 0;
-
- xstep = d->src_width / d->dst_width;
- xmod = d->src_width % d->dst_width;
- xerror = 0;
- for (x = 0; x < dst_width; x++)
- {
- if (gray[0] && (d->density >= ditherpoint(d, kdither, x)))
- {
- tptr = kptr + d->ptr_offset;
- set_row_ends(dc, x, 0);
- for (j = 0; j < bits; j++, tptr += length)
- tptr[0] |= bit;
- }
- ADVANCE_UNIDIRECTIONAL(d, bit, gray, 1, xerror, xmod);
- }
-}
-
-static void
-stp_dither_monochrome_very_fast(const unsigned short *gray,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- xerror,
- xstep,
- xmod,
- length;
- unsigned char bit,
- *kptr;
- dither_channel_t *dc = &(CHANNEL(d, ECOLOR_K));
- dither_matrix_t *kdither = &(dc->dithermat);
- int dst_width = d->dst_width;
- if ((zero_mask & ((1 << d->n_input_channels) - 1)) ==
- ((1 << d->n_input_channels) - 1))
- return;
- if (!dc->very_fast)
- {
- stp_dither_monochrome(gray, row, d, duplicate_line, zero_mask);
- return;
- }
-
- kptr = CHANNEL(d, ECOLOR_K).ptrs[0];
- length = (d->dst_width + 7) / 8;
-
- bit = 128;
- x = 0;
-
- xstep = d->src_width / d->dst_width;
- xmod = d->src_width % d->dst_width;
- xerror = 0;
- for (x = 0; x < dst_width; x++)
- {
- if (gray[0] && (d->density > ditherpoint_fast(d, kdither, x)))
- {
- set_row_ends(dc, x, 0);
- kptr[d->ptr_offset] |= bit;
- }
- ADVANCE_UNIDIRECTIONAL(d, bit, gray, 1, xerror, xmod);
- }
-}
-
-/*
- * 'stp_dither_black()' - Dither grayscale pixels to black.
- * This is for grayscale output.
- */
-
-static void
-stp_dither_black_fast(const unsigned short *gray,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int dst_width = d->dst_width;
- int xerror, xstep, xmod;
-
- if ((zero_mask & ((1 << d->n_input_channels) - 1)) ==
- ((1 << d->n_input_channels) - 1))
- return;
- length = (d->dst_width + 7) / 8;
-
- bit = 128;
- xstep = d->src_width / d->dst_width;
- xmod = d->src_width % d->dst_width;
- xerror = 0;
-
- for (x = 0; x < dst_width; x++)
- {
- CHANNEL(d, ECOLOR_K).v = gray[0];
- CHANNEL(d, ECOLOR_K).o = gray[0];
- print_color_fast(d, &(CHANNEL(d, ECOLOR_K)), x, row, bit, length);
- ADVANCE_UNIDIRECTIONAL(d, bit, gray, 1, xerror, xmod);
- }
-}
-
-static void
-stp_dither_black_very_fast(const unsigned short *gray,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- dither_channel_t *dc = &CHANNEL(d, ECOLOR_K);
- int dst_width = d->dst_width;
- int xerror, xstep, xmod;
- if ((zero_mask & ((1 << d->n_input_channels) - 1)) ==
- ((1 << d->n_input_channels) - 1))
- return;
- if (!dc->very_fast)
- {
- stp_dither_black_fast(gray, row, d, duplicate_line, zero_mask);
- return;
- }
- length = (d->dst_width + 7) / 8;
-
- bit = 128;
- xstep = d->src_width / d->dst_width;
- xmod = d->src_width % d->dst_width;
- xerror = 0;
-
- for (x = 0; x < dst_width; x++)
- {
- if (gray[0] > ditherpoint_fast(d, &(dc->dithermat), x))
- {
- set_row_ends(dc, x, 0);
- dc->ptrs[0][d->ptr_offset] |= bit;
- }
- ADVANCE_UNIDIRECTIONAL(d, bit, gray, 1, xerror, xmod);
- }
-}
-
-static void
-stp_dither_black_ordered(const unsigned short *gray,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
-
- int x,
- length;
- unsigned char bit;
- int terminate;
- int xerror, xstep, xmod;
-
- if ((zero_mask & ((1 << d->n_input_channels) - 1)) ==
- ((1 << d->n_input_channels) - 1))
- return;
-
- length = (d->dst_width + 7) / 8;
-
- bit = 128;
- x = 0;
- terminate = d->dst_width;
- xstep = d->src_width / d->dst_width;
- xmod = d->src_width % d->dst_width;
- xerror = 0;
-
- for (x = 0; x < terminate; x ++)
- {
- CHANNEL(d, ECOLOR_K).o = CHANNEL(d, ECOLOR_K).v = gray[0];
- print_color_ordered(d, &(CHANNEL(d, ECOLOR_K)), x, row, bit, length, 0);
- ADVANCE_UNIDIRECTIONAL(d, bit, gray, 1, xerror, xmod);
- }
-}
-
-static void
-stp_dither_black_ed(const unsigned short *gray,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int i;
- int x,
- length;
- unsigned char bit;
- int ***error;
- int *ndither;
- int terminate;
- int direction = row & 1 ? 1 : -1;
- int xerror, xstep, xmod;
-
- length = (d->dst_width + 7) / 8;
-
- if (!shared_ed_initializer(d, row, duplicate_line, zero_mask, length,
- direction, &error, &ndither))
- return;
-
- x = (direction == 1) ? 0 : d->dst_width - 1;
- bit = 1 << (7 - (x & 7));
- xstep = d->src_width / d->dst_width;
- xmod = d->src_width % d->dst_width;
- xerror = (xmod * x) % d->dst_width;
- terminate = (direction == 1) ? d->dst_width : -1;
-
- if (direction == -1)
- gray += d->src_width - 1;
-
- for (; x != terminate; x += direction)
- {
- CHANNEL(d, ECOLOR_K).b = gray[0];
- CHANNEL(d, ECOLOR_K).o = gray[0];
- CHANNEL(d, ECOLOR_K).v = UPDATE_COLOR(gray[0], ndither[ECOLOR_K]);
- CHANNEL(d, ECOLOR_K).v = print_color(d, &(CHANNEL(d, ECOLOR_K)), x, row,
- bit, length, 0, d->dither_type);
- ndither[ECOLOR_K] = update_dither(d, ECOLOR_K, d->src_width, direction,
- error[ECOLOR_K][0],error[ECOLOR_K][1]);
- ADVANCE_BIDIRECTIONAL(d, bit, gray, direction, 1, xerror, xmod, error,
- 1, d->error_rows);
- }
- stp_free(ndither);
- for (i = 1; i < d->n_channels; i++)
- stp_free(error[i]);
- stp_free(error);
- if (direction == -1)
- reverse_row_ends(d);
-}
-
-static void
-stp_dither_black_et(const unsigned short *gray,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int i;
- int *ndither;
- eventone_t *et;
- et_chdata_t *cd;
-
- int ***error;
- int terminate;
- int direction = row & 1 ? 1 : -1;
- int xerror, xstep, xmod;
- int aspect = d->y_aspect / d->x_aspect;
-
- if (aspect >= 4) { aspect = 4; }
- else if (aspect >= 2) { aspect = 2; }
- else aspect = 1;
-
- length = (d->dst_width + 7) / 8;
- if (!shared_ed_initializer(d, row, duplicate_line, zero_mask, length,
- direction, &error, &ndither))
- return;
-
- eventone_init(d, &cd);
- et = d->eventone;
-
- x = (direction == 1) ? 0 : d->dst_width - 1;
- bit = 1 << (7 - (x & 7));
- xstep = d->src_width / d->dst_width;
- xmod = d->src_width % d->dst_width;
- xerror = (xmod * x) % d->dst_width;
- terminate = (direction == 1) ? d->dst_width : -1;
- if (direction == -1) {
- gray += d->src_width - 1;
- }
-
- QUANT(6);
- for (; x != terminate; x += direction)
- { int pick, print_inks;
-
- advance_eventone_pre(d, cd, et, x);
-
- { int value = *gray;
- int base = value;
- int maxwet;
-
- CHANNEL(d, ECOLOR_K).b = value;
- CHANNEL(d, ECOLOR_K).v = value;
- CHANNEL(d, ECOLOR_K).o = value;
-
- if ((cd->wetness -= cd->maxdot_dens) < 0) cd->wetness = 0;
-
- value = *ndither + base;
- if (value < 0) value = 0; /* Dither can make this value negative */
-
- maxwet = (CHANNEL(d, ECOLOR_K).b * CHANNEL(d,ECOLOR_K).maxdot >> 1)
- + cd->maxdot_wet - cd->wetness;
-
- find_segment(d, &CHANNEL(d, ECOLOR_K), maxwet, value, &cd->dr);
-
- cd->ri = eventone_adjust(&cd->dr, et, cd->r_sq, base, value);
- }
-
- pick = cd[ECOLOR_K].ri > 32768 ? (1<<ECOLOR_K) : 0;
-
- { if (pick & (1 << ECOLOR_K)) {
- cd->point = cd->dr.upper->value;
- } else {
- cd->point = cd->dr.lower->value;
- }
-
- advance_eventone_post(d, cd, et, x);
-
- print_inks = (1 << ECOLOR_K);
-
- /* Adjust error values for dither */
- ndither[ECOLOR_K] += 2 * (CHANNEL(d, ECOLOR_K).b - cd->point);
- }
-
- /* Now we can finally print it! */
-
- print_all_inks(d, cd, print_inks, pick, bit, length);
-
- QUANT(11);
-
- /* Diffuse the error round a bit */
- diffuse_error(d, ndither, error, aspect, direction);
-
- QUANT(12);
- ADVANCE_BIDIRECTIONAL(d, bit, gray, direction, 1, xerror, xmod, error,
- d->n_channels, ERROR_ROWS);
- QUANT(13);
- }
-
- stp_free(cd);
- stp_free(ndither);
- for (i = 0; i < d->n_channels; i++)
- stp_free(error[i]);
- stp_free(error);
-}
-
-static void
-stp_dither_cmy_fast(const unsigned short *cmy,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int i;
- int dst_width = d->dst_width;
- int xerror, xstep, xmod;
-
- if ((zero_mask & ((1 << d->n_input_channels) - 1)) ==
- ((1 << d->n_input_channels) - 1))
- return;
-
- length = (d->dst_width + 7) / 8;
-
- bit = 128;
- xstep = 3 * (d->src_width / d->dst_width);
- xmod = d->src_width % d->dst_width;
- xerror = 0;
- x = 0;
-
- QUANT(14);
- for (; x != dst_width; x++)
- {
- CHANNEL(d, ECOLOR_C).v = CHANNEL(d, ECOLOR_C).o = cmy[0];
- CHANNEL(d, ECOLOR_M).v = CHANNEL(d, ECOLOR_M).o = cmy[1];
- CHANNEL(d, ECOLOR_Y).v = CHANNEL(d, ECOLOR_Y).o = cmy[2];
-
- for (i = 1; i < d->n_channels; i++)
- print_color_fast(d, &(CHANNEL(d, i)), x, row, bit, length);
- QUANT(16);
- ADVANCE_UNIDIRECTIONAL(d, bit, cmy, 3, xerror, xmod);
- QUANT(17);
- }
-}
-
-static void
-stp_dither_cmy_very_fast(const unsigned short *cmy,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int i;
- int dst_width = d->dst_width;
- int xerror, xstep, xmod;
-
- if ((zero_mask & ((1 << d->n_input_channels) - 1)) ==
- ((1 << d->n_input_channels) - 1))
- return;
-
- for (i = 1; i < d->n_channels; i++)
- if (!(CHANNEL(d, i).very_fast))
- {
- stp_dither_cmy_fast(cmy, row, d, duplicate_line, zero_mask);
- return;
- }
-
- length = (d->dst_width + 7) / 8;
-
- bit = 128;
- xstep = 3 * (d->src_width / d->dst_width);
- xmod = d->src_width % d->dst_width;
- xerror = 0;
- x = 0;
-
- QUANT(14);
- for (; x != dst_width; x++)
- {
- CHANNEL(d, ECOLOR_C).v = cmy[0];
- CHANNEL(d, ECOLOR_M).v = cmy[1];
- CHANNEL(d, ECOLOR_Y).v = cmy[2];
-
- for (i = 1; i < d->n_channels; i++)
- {
- dither_channel_t *dc = &(CHANNEL(d, i));
- if (dc->v > ditherpoint_fast(d, &(dc->dithermat), x))
- {
- set_row_ends(dc, x, 0);
- dc->ptrs[0][d->ptr_offset] |= bit;
- }
- }
- QUANT(16);
- ADVANCE_UNIDIRECTIONAL(d, bit, cmy, 3, xerror, xmod);
- QUANT(17);
- }
-}
-
-static void
-stp_dither_cmy_ordered(const unsigned short *cmy,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int i;
-
- int terminate;
- int xerror, xstep, xmod;
-
- if ((zero_mask & ((1 << d->n_input_channels) - 1)) ==
- ((1 << d->n_input_channels) - 1))
- return;
- length = (d->dst_width + 7) / 8;
-
- bit = 128;
- xstep = 3 * (d->src_width / d->dst_width);
- xmod = d->src_width % d->dst_width;
- xerror = 0;
- x = 0;
- terminate = d->dst_width;
-
- QUANT(6);
- for (; x != terminate; x ++)
- {
- CHANNEL(d, ECOLOR_C).v = CHANNEL(d, ECOLOR_C).o = cmy[0];
- CHANNEL(d, ECOLOR_M).v = CHANNEL(d, ECOLOR_M).o = cmy[1];
- CHANNEL(d, ECOLOR_Y).v = CHANNEL(d, ECOLOR_Y).o = cmy[2];
- QUANT(9);
- for (i = 1; i < d->n_channels; i++)
- print_color_ordered(d, &(CHANNEL(d, i)), x, row, bit, length, 0);
- QUANT(12);
- ADVANCE_UNIDIRECTIONAL(d, bit, cmy, 3, xerror, xmod);
- QUANT(13);
- }
-}
-
-static void
-stp_dither_cmy_ed(const unsigned short *cmy,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int i;
- int *ndither;
- int ***error;
-
- int terminate;
- int direction = row & 1 ? 1 : -1;
- int xerror, xstep, xmod;
-
- length = (d->dst_width + 7) / 8;
-
- if (!shared_ed_initializer(d, row, duplicate_line, zero_mask, length,
- direction, &error, &ndither))
- return;
-
- x = (direction == 1) ? 0 : d->dst_width - 1;
- bit = 1 << (7 - (x & 7));
- xstep = 3 * (d->src_width / d->dst_width);
- xmod = d->src_width % d->dst_width;
- xerror = (xmod * x) % d->dst_width;
- terminate = (direction == 1) ? d->dst_width : -1;
-
- if (direction == -1)
- cmy += (3 * (d->src_width - 1));
-
- QUANT(6);
- for (; x != terminate; x += direction)
- {
- CHANNEL(d, ECOLOR_C).v = cmy[0];
- CHANNEL(d, ECOLOR_M).v = cmy[1];
- CHANNEL(d, ECOLOR_Y).v = cmy[2];
-
- for (i = 1; i < d->n_channels; i++)
- {
- QUANT(9);
- CHANNEL(d, i).o = CHANNEL(d, i).b = CHANNEL(d, i).v;
- CHANNEL(d, i).v = UPDATE_COLOR(CHANNEL(d, i).v, ndither[i]);
- CHANNEL(d, i).v = print_color(d, &(CHANNEL(d, i)), x, row, bit,
- length, 0, d->dither_type);
- ndither[i] = update_dither(d, i, d->src_width,
- direction, error[i][0], error[i][1]);
- QUANT(10);
- }
-
- QUANT(12);
- ADVANCE_BIDIRECTIONAL(d, bit, cmy, direction, 3, xerror, xmod, error,
- d->n_channels, d->error_rows);
- QUANT(13);
- }
- stp_free(ndither);
- for (i = 1; i < d->n_channels; i++)
- stp_free(error[i]);
- stp_free(error);
- if (direction == -1)
- reverse_row_ends(d);
-}
-
-static void
-stp_dither_cmy_et(const unsigned short *cmy,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int i;
- int *ndither;
- eventone_t *et;
- et_chdata_t *cd;
-
- int ***error;
- int terminate;
- int direction = row & 1 ? 1 : -1;
- int xerror, xstep, xmod;
- int aspect = d->y_aspect / d->x_aspect;
-
- if (aspect >= 4) { aspect = 4; }
- else if (aspect >= 2) { aspect = 2; }
- else aspect = 1;
-
- length = (d->dst_width + 7) / 8;
- if (!shared_ed_initializer(d, row, duplicate_line, zero_mask, length,
- direction, &error, &ndither))
- return;
-
- eventone_init(d, &cd);
- et = d->eventone;
-
- x = (direction == 1) ? 0 : d->dst_width - 1;
- bit = 1 << (7 - (x & 7));
- xstep = 3 * (d->src_width / d->dst_width);
- xmod = d->src_width % d->dst_width;
- xerror = (xmod * x) % d->dst_width;
- terminate = (direction == 1) ? d->dst_width : -1;
- if (direction == -1) {
- cmy += (3 * (d->src_width - 1));
- }
-
- QUANT(6);
- for (; x != terminate; x += direction)
- { int pick, print_inks;
-
- advance_eventone_pre(d, cd, et, x);
-
- for (i=1; i < d->n_channels; i++) {
- int value = cmy[i-1];
-
- CHANNEL(d, i).o = value; /* Remember value we want printed here */
- CHANNEL(d, i).v = value;
- CHANNEL(d, i).b = value;
- }
-
- for (i=1; i < d->n_channels; i++) {
- int value;
- int base;
- int maxwet;
- et_chdata_t *p = &cd[i];
-
- if ((p->wetness -= p->maxdot_dens) < 0) p->wetness = 0;
-
- base = CHANNEL(d, i).b;
- value = ndither[i] + base;
- if (value < 0) value = 0; /* Dither can make this value negative */
-
- maxwet = (CHANNEL(d, i).b * CHANNEL(d, i).maxdot >> 1)
- + p->maxdot_wet - p->wetness;
-
- find_segment(d, &CHANNEL(d, i), maxwet, value, &p->dr);
-
- p->ri = eventone_adjust(&p->dr, et, p->r_sq, base, value);
- }
-
- pick = pick_vertex(cd[ECOLOR_C].ri, cd[ECOLOR_M].ri, cd[ECOLOR_Y].ri, 0);
-
- { for (i=1; i < d->n_channels; i++) {
- if (pick & (1 << i)) {
- cd[i].point = cd[i].dr.upper->value;
- } else {
- cd[i].point = cd[i].dr.lower->value;
- }
- }
-
- advance_eventone_post(d, cd, et, x);
-
- print_inks = (1 << ECOLOR_C)|(1 << ECOLOR_M)|(1<<ECOLOR_Y);
-
- /* Adjust error values for dither */
- for (i=1; i < d->n_channels; i++) {
- ndither[i] += 2 * (CHANNEL(d, i).b - cd[i].point);
- }
- }
-
- /* Now we can finally print it! */
-
- print_all_inks(d, cd, print_inks, pick, bit, length);
-
- QUANT(11);
-
- /* Diffuse the error round a bit */
- diffuse_error(d, ndither, error, aspect, direction);
-
- QUANT(12);
- ADVANCE_BIDIRECTIONAL(d, bit, cmy, direction, 3, xerror, xmod, error,
- d->n_channels, ERROR_ROWS);
- QUANT(13);
- }
-
- stp_free(cd);
- stp_free(ndither);
- for (i = 0; i < d->n_channels; i++)
- stp_free(error[i]);
- stp_free(error);
-}
-
-static void
-stp_dither_cmyk_fast(const unsigned short *cmy,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int i;
-
- int dst_width = d->dst_width;
- int xerror, xstep, xmod;
-
- if (!CHANNEL(d, ECOLOR_K).ptrs[0])
- {
- stp_dither_cmy_fast(cmy, row, d, duplicate_line, zero_mask);
- return;
- }
-
- if ((zero_mask & ((1 << d->n_input_channels) - 1)) ==
- ((1 << d->n_input_channels) - 1))
- return;
-
- length = (d->dst_width + 7) / 8;
-
- bit = 128;
- xstep = 3 * (d->src_width / d->dst_width);
- xmod = d->src_width % d->dst_width;
- xerror = 0;
- x = 0;
-
- QUANT(14);
- for (; x != dst_width; x++)
- {
- int nonzero = 0;
- nonzero |= CHANNEL(d, ECOLOR_C).v = cmy[0];
- nonzero |= CHANNEL(d, ECOLOR_M).v = cmy[1];
- nonzero |= CHANNEL(d, ECOLOR_Y).v = cmy[2];
- CHANNEL(d, ECOLOR_C).o = cmy[0];
- CHANNEL(d, ECOLOR_M).o = cmy[1];
- CHANNEL(d, ECOLOR_Y).o = cmy[2];
-
- if (nonzero)
- {
- int ok;
- unsigned lb = d->k_lower;
- unsigned ub = d->k_upper;
- int k = compute_black(d);
- if (k < lb)
- k = 0;
- else if (k < ub)
- k = (k - lb) * ub / d->bound_range;
- for (i = 1; i < d->n_channels; i++)
- CHANNEL(d, i).v -= k;
- ok = k;
- if (ok > 0 && d->density != d->black_density)
- ok = (unsigned) ok * (unsigned) d->black_density / d->density;
- if (ok > 65535)
- ok = 65535;
- QUANT(15);
- CHANNEL(d, ECOLOR_K).v = k;
- CHANNEL(d, ECOLOR_K).o = ok;
-
- for (i = 0; i < d->n_channels; i++)
- print_color_fast(d, &(CHANNEL(d, i)), x, row, bit, length);
- QUANT(16);
- }
- ADVANCE_UNIDIRECTIONAL(d, bit, cmy, 3, xerror, xmod);
- QUANT(17);
- }
-}
-
-static void
-stp_dither_cmyk_very_fast(const unsigned short *cmy,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int i;
-
- int dst_width = d->dst_width;
- int xerror, xstep, xmod;
-
- if (!CHANNEL(d, ECOLOR_K).ptrs[0])
- {
- stp_dither_cmy_very_fast(cmy, row, d, duplicate_line, zero_mask);
- return;
- }
-
- if ((zero_mask & ((1 << d->n_input_channels) - 1)) ==
- ((1 << d->n_input_channels) - 1))
- return;
-
- for (i = 0; i < d->n_channels; i++)
- if (!(CHANNEL(d, i).very_fast))
- {
- stp_dither_cmyk_fast(cmy, row, d, duplicate_line, zero_mask);
- return;
- }
-
- length = (d->dst_width + 7) / 8;
-
- bit = 128;
- xstep = 3 * (d->src_width / d->dst_width);
- xmod = d->src_width % d->dst_width;
- xerror = 0;
- x = 0;
-
- QUANT(14);
- for (; x != dst_width; x++)
- {
- int nonzero = 0;
- nonzero |= CHANNEL(d, ECOLOR_C).v = cmy[0];
- nonzero |= CHANNEL(d, ECOLOR_M).v = cmy[1];
- nonzero |= CHANNEL(d, ECOLOR_Y).v = cmy[2];
-
- if (nonzero)
- {
- int k = compute_black(d);
- for (i = 1; i < d->n_channels; i++)
- CHANNEL(d, i).v -= k;
- QUANT(15);
- CHANNEL(d, ECOLOR_K).v = k;
-
- for (i = 0; i < d->n_channels; i++)
- {
- dither_channel_t *dc = &(CHANNEL(d, i));
- if (dc->v > ditherpoint_fast(d, &(dc->dithermat), x))
- {
- set_row_ends(dc, x, 0);
- dc->ptrs[0][d->ptr_offset] |= bit;
- }
- }
- QUANT(16);
- }
- ADVANCE_UNIDIRECTIONAL(d, bit, cmy, 3, xerror, xmod);
- QUANT(17);
- }
-}
-
-static void
-stp_dither_cmyk_ordered(const unsigned short *cmy,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int i;
-
- int terminate;
- int xerror, xstep, xmod;
-
- if (!CHANNEL(d, ECOLOR_K).ptrs[0])
- {
- stp_dither_cmy_ordered(cmy, row, d, duplicate_line, zero_mask);
- return;
- }
-
- if ((zero_mask & ((1 << d->n_input_channels) - 1)) ==
- ((1 << d->n_input_channels) - 1))
- return;
-
- length = (d->dst_width + 7) / 8;
-
- bit = 128;
- xstep = 3 * (d->src_width / d->dst_width);
- xmod = d->src_width % d->dst_width;
- xerror = 0;
- x = 0;
- terminate = d->dst_width;
-
- QUANT(6);
- for (; x != terminate; x ++)
- {
- int nonzero = 0;
- int printed_black = 0;
- CHANNEL(d, ECOLOR_C).v = cmy[0];
- CHANNEL(d, ECOLOR_M).v = cmy[1];
- CHANNEL(d, ECOLOR_Y).v = cmy[2];
- for (i = 0; i < d->n_channels; i++)
- nonzero |= CHANNEL(d, i).o = CHANNEL(d, i).v;
-
- if (nonzero)
- {
- QUANT(7);
-
- CHANNEL(d, ECOLOR_K).o = CHANNEL(d, ECOLOR_K).v = compute_black(d);
-
- if (CHANNEL(d, ECOLOR_K).v > 0)
- update_cmyk(d);
-
- QUANT(9);
-
- if (d->density != d->black_density)
- CHANNEL(d, ECOLOR_K).v =
- CHANNEL(d, ECOLOR_K).v * d->black_density / d->density;
-
- for (i = 0; i < d->n_channels; i++)
- {
- int tmp = print_color_ordered(d, &(CHANNEL(d, i)), x, row, bit,
- length, printed_black);
- if (i == ECOLOR_K && d->density <= 45000)
- printed_black = CHANNEL(d, i).v - tmp;
- }
- QUANT(12);
- }
- ADVANCE_UNIDIRECTIONAL(d, bit, cmy, 3, xerror, xmod);
- QUANT(13);
- }
-}
-
-static void
-stp_dither_cmyk_ed(const unsigned short *cmy,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int i;
- int *ndither;
- int ***error;
-
- int terminate;
- int direction = row & 1 ? 1 : -1;
- int xerror, xstep, xmod;
-
- if (!CHANNEL(d, ECOLOR_K).ptrs[0])
- {
- stp_dither_cmy_ed(cmy, row, d, duplicate_line, zero_mask);
- return;
- }
-
- length = (d->dst_width + 7) / 8;
- if (!shared_ed_initializer(d, row, duplicate_line, zero_mask, length,
- direction, &error, &ndither))
- return;
-
- x = (direction == 1) ? 0 : d->dst_width - 1;
- bit = 1 << (7 - (x & 7));
- xstep = 3 * (d->src_width / d->dst_width);
- xmod = d->src_width % d->dst_width;
- xerror = (xmod * x) % d->dst_width;
- terminate = (direction == 1) ? d->dst_width : -1;
-
- if (direction == -1)
- cmy += (3 * (d->src_width - 1));
-
- QUANT(6);
- for (; x != terminate; x += direction)
- {
- int nonzero = 0;
- int printed_black = 0;
- CHANNEL(d, ECOLOR_C).v = cmy[0];
- CHANNEL(d, ECOLOR_M).v = cmy[1];
- CHANNEL(d, ECOLOR_Y).v = cmy[2];
- for (i = 0; i < d->n_channels; i++)
- nonzero |= (CHANNEL(d, i).o = CHANNEL(d, i).v);
-
- if (nonzero)
- {
- QUANT(7);
-
- CHANNEL(d, ECOLOR_K).v = compute_black(d);
- CHANNEL(d, ECOLOR_K).o = CHANNEL(d, ECOLOR_K).v;
- CHANNEL(d, ECOLOR_K).b = 0;
-
- /*
- * At this point we've computed the basic CMYK separations.
- * Now we adjust the levels of each to improve the print quality.
- */
-
- if (CHANNEL(d, ECOLOR_K).v > 0)
- update_cmyk(d);
-
- for (i = 1; i < d->n_channels; i++)
- CHANNEL(d, i).b = CHANNEL(d, i).v;
-
- QUANT(8);
- /*
- * We've done all of the cmyk separations at this point.
- * Now to do the dithering.
- *
- * At this point:
- *
- * bk = Amount of black printed with black ink
- * ak = Adjusted "raw" K value
- * k = raw K value derived from CMY
- * oc, om, oy = raw CMY values assuming no K component
- * c, m, y = CMY values adjusted for the presence of K
- *
- * The main reason for this rather elaborate setup, where we have
- * 8 channels at this point, is to handle variable intensities
- * (in particular light and dark variants) of inks. Very dark regions
- * with slight color tints should be printed with dark inks, not with
- * the light inks that would be implied by the small amount of
- * remnant CMY.
- *
- * It's quite likely that for simple four-color printers ordinary
- * CMYK separations would work. It's possible that they would work
- * for variable dot sizes, too.
- */
-
- QUANT(9);
-
- if (d->density != d->black_density)
- CHANNEL(d, ECOLOR_K).v =
- CHANNEL(d, ECOLOR_K).v * d->black_density / d->density;
-
- CHANNEL(d, ECOLOR_K).o = CHANNEL(d, ECOLOR_K).b;
-
- for (i = 0; i < d->n_channels; i++)
- {
- int tmp;
- CHANNEL(d, i).v = UPDATE_COLOR(CHANNEL(d, i).v, ndither[i]);
- tmp = print_color(d, &(CHANNEL(d, i)), x, row, bit, length,
- printed_black, d->dither_type);
- if (i == ECOLOR_K && d->density <= 45000)
- printed_black = CHANNEL(d, i).v - tmp;
- CHANNEL(d, i).v = tmp;
- }
- }
- else
- for (i = 0; i < d->n_channels; i++)
- CHANNEL(d, i).v = UPDATE_COLOR(CHANNEL(d, i).v, ndither[i]);
-
- QUANT(11);
- for (i = 0; i < d->n_channels; i++)
- ndither[i] = update_dither(d, i, d->src_width,
- direction, error[i][0], error[i][1]);
-
- QUANT(12);
- ADVANCE_BIDIRECTIONAL(d, bit, cmy, direction, 3, xerror, xmod, error,
- d->n_channels, d->error_rows);
- QUANT(13);
- }
- stp_free(ndither);
- for (i = 1; i < d->n_channels; i++)
- stp_free(error[i]);
- stp_free(error);
- if (direction == -1)
- reverse_row_ends(d);
-}
-
-/* This code uses the Eventone dither algorithm. This is described
- * at the website http://www.artofcode.com/eventone/
- * This algorithm is covered by US Patents 5,055,942 and 5,917,614
- * and was invented by Raph Levien <raph@acm.org>
- * It was made available to be used free of charge in open source
- * code.
- */
-
-static void
-stp_dither_cmyk_et(const unsigned short *cmy,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int i;
- int *ndither;
- eventone_t *et;
- et_chdata_t *cd;
-
- int ***error;
- int terminate;
- int direction = row & 1 ? 1 : -1;
- int xerror, xstep, xmod;
- int aspect = d->y_aspect / d->x_aspect;
-
- if (!CHANNEL(d, ECOLOR_K).ptrs[0])
- {
- stp_dither_cmy_et(cmy, row, d, duplicate_line, zero_mask);
- return;
- }
-
- if (aspect >= 4) { aspect = 4; }
- else if (aspect >= 2) { aspect = 2; }
- else aspect = 1;
-
- length = (d->dst_width + 7) / 8;
- if (!shared_ed_initializer(d, row, duplicate_line, zero_mask, length,
- direction, &error, &ndither))
- return;
-
- eventone_init(d, &cd);
- et = d->eventone;
-
- x = (direction == 1) ? 0 : d->dst_width - 1;
- bit = 1 << (7 - (x & 7));
- xstep = 3 * (d->src_width / d->dst_width);
- xmod = d->src_width % d->dst_width;
- xerror = (xmod * x) % d->dst_width;
- terminate = (direction == 1) ? d->dst_width : -1;
- if (direction == -1) {
- cmy += (3 * (d->src_width - 1));
- }
-
- QUANT(6);
- for (; x != terminate; x += direction)
- { int pick, print_inks;
-
- advance_eventone_pre(d, cd, et, x);
-
- CHANNEL(d, ECOLOR_K).b = 0;
-
- for (i=1; i < d->n_channels; i++) {
- int value = cmy[i-1];
-
- CHANNEL(d, i).o = value; /* Remember value we want printed here */
- CHANNEL(d, i).v = value;
- if (i == 1 || value < CHANNEL(d, ECOLOR_K).o)
- CHANNEL(d, ECOLOR_K).o = value; /* Set black to minimum of C,M,Y */
- }
-
- CHANNEL(d, ECOLOR_K).v = CHANNEL(d, ECOLOR_K).o;
- if (CHANNEL(d, ECOLOR_K).v > 0) {
- update_cmyk(d);
- }
-
- for (i = 1; i < d->n_channels; i++)
- CHANNEL(d, i).b = CHANNEL(d, i).v;
-
- for (i=0; i < d->n_channels; i++) {
- int base;
- int value;
- int maxwet;
- et_chdata_t *p = &cd[i];
-
- if ((p->wetness -= p->maxdot_dens) < 0) p->wetness = 0;
-
- base = CHANNEL(d, i).b;
- value = ndither[i] + base;
- if (value < 0) value = 0; /* Dither can make this value negative */
-
- maxwet = (CHANNEL(d, i).b * CHANNEL(d, i).maxdot >> 1)
- + p->maxdot_wet - p->wetness;
-
- find_segment(d, &CHANNEL(d, i), maxwet, value, &p->dr);
-
- p->ri = eventone_adjust(&p->dr, et, p->r_sq, base, value);
- }
-
- pick = pick_vertex(cd[ECOLOR_C].ri, cd[ECOLOR_M].ri, cd[ECOLOR_Y].ri, cd[ECOLOR_K].ri);
-
- { int useblack = 0; /* Do we print black at all? */
- int printed_black;
- int adjusted_black;
-
- for (i=0; i < d->n_channels; i++) {
- if (pick & (1 << i)) {
- cd[i].point = cd[i].dr.upper->value;
- } else {
- cd[i].point = cd[i].dr.lower->value;
- }
- }
-
- printed_black = cd[ECOLOR_K].point;
- adjusted_black = printed_black;
- if (printed_black > 0 && d->black_density != d->density) {
- adjusted_black = (unsigned)printed_black * (unsigned)d->density / d->black_density;
- }
-
- advance_eventone_post(d, cd, et, x);
-
- /* Only print the black ink if it means we can avoid printing another ink, otherwise we're just wasting ink */
-
- if (printed_black > 0) {
- for (i=1; i < d->n_channels; i++) {
- if (cd[i].point <= adjusted_black) {
- useblack = 1;
- break;
- }
- }
- }
-
- /* Find which channels we actually print */
-
- /* Adjust colours to print based on black ink */
- if (useblack) {
- print_inks = (1 << ECOLOR_K);
- for (i=1; i < d->n_channels; i++) {
- if (cd[i].point > adjusted_black) {
- print_inks |= (1 << i);
- }
- }
- } else {
- print_inks = (1 << ECOLOR_C)|(1 << ECOLOR_M)|(1<<ECOLOR_Y);
- }
-
- /* Adjust error values for dither */
- ndither[ECOLOR_K] += 2 * (CHANNEL(d, ECOLOR_K).b - printed_black);
- for (i=1; i < d->n_channels; i++) {
- ndither[i] += 2 * (CHANNEL(d, i).b - cd[i].point);
- }
- }
-
- /* Now we can finally print it! */
-
- print_all_inks(d, cd, print_inks, pick, bit, length);
-
- QUANT(11);
-
- /* Diffuse the error round a bit */
- diffuse_error(d, ndither, error, aspect, direction);
-
- QUANT(12);
- ADVANCE_BIDIRECTIONAL(d, bit, cmy, direction, 3, xerror, xmod, error,
- d->n_channels, ERROR_ROWS);
- QUANT(13);
- }
-
- stp_free(cd);
- stp_free(ndither);
- for (i = 0; i < d->n_channels; i++)
- stp_free(error[i]);
- stp_free(error);
-}
-
-static void
-stp_dither_raw_cmyk_fast(const unsigned short *cmyk,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int i;
-
- int dst_width = d->dst_width;
- int xerror, xstep, xmod;
- if ((zero_mask & ((1 << d->n_input_channels) - 1)) ==
- ((1 << d->n_input_channels) - 1))
- return;
-
- length = (d->dst_width + 7) / 8;
-
- bit = 128;
- xstep = 4 * (d->src_width / d->dst_width);
- xmod = d->src_width % d->dst_width;
- xerror = 0;
- x = 0;
-
- QUANT(14);
- for (; x != dst_width; x++)
- {
- int extra_k;
- CHANNEL(d, ECOLOR_C).v = cmyk[0];
- CHANNEL(d, ECOLOR_M).v = cmyk[1];
- CHANNEL(d, ECOLOR_Y).v = cmyk[2];
- CHANNEL(d, ECOLOR_K).v = cmyk[3];
- extra_k = compute_black(d) + CHANNEL(d, ECOLOR_K).v;
- for (i = 0; i < d->n_channels; i++)
- {
- CHANNEL(d, i).o = CHANNEL(d, i).v;
- if (i != ECOLOR_K)
- CHANNEL(d, i).o += extra_k;
- if (CHANNEL(d, i).ptrs[0])
- print_color_fast(d, &(CHANNEL(d, i)), x, row, bit, length);
- }
- QUANT(16);
- ADVANCE_UNIDIRECTIONAL(d, bit, cmyk, 4, xerror, xmod);
- QUANT(17);
- }
-}
-
-static void
-stp_dither_raw_cmyk_very_fast(const unsigned short *cmyk,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int i;
-
- int dst_width = d->dst_width;
- int xerror, xstep, xmod;
- if ((zero_mask & ((1 << d->n_input_channels) - 1)) ==
- ((1 << d->n_input_channels) - 1))
- return;
-
- for (i = 0; i < d->n_channels; i++)
- if (!(CHANNEL(d, i).very_fast))
- {
- stp_dither_raw_cmyk_fast(cmyk, row, d, duplicate_line, zero_mask);
- return;
- }
-
- length = (d->dst_width + 7) / 8;
-
- bit = 128;
- xstep = 4 * (d->src_width / d->dst_width);
- xmod = d->src_width % d->dst_width;
- xerror = 0;
- x = 0;
-
- QUANT(14);
- for (; x != dst_width; x++)
- {
- int extra_k;
- CHANNEL(d, ECOLOR_C).v = cmyk[0];
- CHANNEL(d, ECOLOR_M).v = cmyk[1];
- CHANNEL(d, ECOLOR_Y).v = cmyk[2];
- CHANNEL(d, ECOLOR_K).v = cmyk[3];
- extra_k = compute_black(d) + CHANNEL(d, ECOLOR_K).v;
- for (i = 0; i < d->n_channels; i++)
- {
- dither_channel_t *dc = &(CHANNEL(d, i));
- if (dc->ptrs[0] && dc->v > ditherpoint_fast(d, &(dc->dithermat), x))
- {
- set_row_ends(dc, x, 0);
- dc->ptrs[0][d->ptr_offset] |= bit;
- }
- }
- QUANT(16);
- ADVANCE_UNIDIRECTIONAL(d, bit, cmyk, 4, xerror, xmod);
- QUANT(17);
- }
-}
-
-static void
-stp_dither_raw_cmyk_ordered(const unsigned short *cmyk,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int i;
-
- int terminate;
- int xerror, xstep, xmod;
-
- if ((zero_mask & ((1 << d->n_input_channels) - 1)) ==
- ((1 << d->n_input_channels) - 1))
- return;
-
- length = (d->dst_width + 7) / 8;
-
- bit = 128;
- xstep = 4 * (d->src_width / d->dst_width);
- xmod = d->src_width % d->dst_width;
- xerror = 0;
- x = 0;
- terminate = d->dst_width;
-
- QUANT(6);
- for (; x != terminate; x ++)
- {
- int extra_k;
- CHANNEL(d, ECOLOR_K).v = cmyk[3];
- CHANNEL(d, ECOLOR_C).v = cmyk[0];
- CHANNEL(d, ECOLOR_M).v = cmyk[1];
- CHANNEL(d, ECOLOR_Y).v = cmyk[2];
- extra_k = compute_black(d) + CHANNEL(d, ECOLOR_K).v;
- for (i = 0; i < d->n_channels; i++)
- {
- CHANNEL(d, i).o = CHANNEL(d, i).v;
- if (i != ECOLOR_K)
- CHANNEL(d, i).o += extra_k;
- print_color_ordered(d, &(CHANNEL(d, i)), x, row, bit, length, 0);
- }
-
- QUANT(11);
- ADVANCE_UNIDIRECTIONAL(d, bit, cmyk, 4, xerror, xmod);
- QUANT(13);
- }
-}
-
-
-static void
-stp_dither_raw_cmyk_ed(const unsigned short *cmyk,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int i;
- int *ndither;
- int ***error;
-
- int terminate;
- int direction = row & 1 ? 1 : -1;
- int xerror, xstep, xmod;
-
- length = (d->dst_width + 7) / 8;
- if (!shared_ed_initializer(d, row, duplicate_line, zero_mask, length,
- direction, &error, &ndither))
- return;
-
- x = (direction == 1) ? 0 : d->dst_width - 1;
- bit = 1 << (7 - (x & 7));
- xstep = 4 * (d->src_width / d->dst_width);
- xmod = d->src_width % d->dst_width;
- xerror = (xmod * x) % d->dst_width;
- terminate = (direction == 1) ? d->dst_width : -1;
-
- if (direction == -1)
- cmyk += (4 * (d->src_width - 1));
-
- QUANT(6);
- for (; x != terminate; x += direction)
- {
- int extra_k;
- CHANNEL(d, ECOLOR_K).v = cmyk[3];
- CHANNEL(d, ECOLOR_C).v = cmyk[0];
- CHANNEL(d, ECOLOR_M).v = cmyk[1];
- CHANNEL(d, ECOLOR_Y).v = cmyk[2];
- extra_k = compute_black(d) + CHANNEL(d, ECOLOR_K).v;
- for (i = 0; i < d->n_channels; i++)
- {
- CHANNEL(d, i).o = CHANNEL(d, i).v;
- if (i != ECOLOR_K)
- CHANNEL(d, i).o += extra_k;
- CHANNEL(d, i).b = CHANNEL(d, i).v;
- CHANNEL(d, i).v = UPDATE_COLOR(CHANNEL(d, i).v, ndither[i]);
- CHANNEL(d, i).v = print_color(d, &(CHANNEL(d, i)), x, row, bit,
- length, 0, d->dither_type);
- ndither[i] = update_dither(d, i, d->src_width,
- direction, error[i][0], error[i][1]);
- }
- QUANT(12);
- ADVANCE_BIDIRECTIONAL(d, bit, cmyk, direction, 4, xerror, xmod, error,
- d->n_channels, d->error_rows);
- QUANT(13);
- }
- stp_free(ndither);
- for (i = 1; i < d->n_channels; i++)
- stp_free(error[i]);
- stp_free(error);
- if (direction == -1)
- reverse_row_ends(d);
-}
-
-static void
-stp_dither_raw_cmyk_et(const unsigned short *cmyk,
- int row,
- dither_t *d,
- int duplicate_line,
- int zero_mask)
-{
- int x,
- length;
- unsigned char bit;
- int i;
- int *ndither;
- eventone_t *et;
- et_chdata_t *cd;
-
- int ***error;
- int terminate;
- int direction = row & 1 ? 1 : -1;
- int xerror, xstep, xmod;
- int aspect = d->y_aspect / d->x_aspect;
-
- if (aspect >= 4) { aspect = 4; }
- else if (aspect >= 2) { aspect = 2; }
- else aspect = 1;
-
- length = (d->dst_width + 7) / 8;
- if (!shared_ed_initializer(d, row, duplicate_line, zero_mask, length,
- direction, &error, &ndither))
- return;
-
- eventone_init(d, &cd);
- et = d->eventone;
-
- x = (direction == 1) ? 0 : d->dst_width - 1;
- bit = 1 << (7 - (x & 7));
- xstep = 4 * (d->src_width / d->dst_width);
- xmod = d->src_width % d->dst_width;
- xerror = (xmod * x) % d->dst_width;
- terminate = (direction == 1) ? d->dst_width : -1;
- if (direction == -1) {
- cmyk += (4 * (d->src_width - 1));
- }
-
- QUANT(6);
- for (; x != terminate; x += direction)
- { int pick, print_inks;
-
- advance_eventone_pre(d, cd, et, x);
-
- { int value = cmyk[3]; /* Order of input is C,M,Y,K */
- CHANNEL(d, ECOLOR_K).o = value; /* Remember value we want printed here */
- CHANNEL(d, ECOLOR_K).v = value;
- CHANNEL(d, ECOLOR_K).b = value;
- }
-
- for (i=1; i < d->n_channels; i++) {
- int value = cmyk[i-1];
- CHANNEL(d, i).o = value; /* Remember value we want printed here */
- CHANNEL(d, i).v = value;
- CHANNEL(d, i).b = value;
- }
-
- for (i=0; i < d->n_channels; i++) {
- int value;
- int base;
- int maxwet;
- et_chdata_t *p = &cd[i];
-
- if ((p->wetness -= p->maxdot_dens) < 0) p->wetness = 0;
-
- base = CHANNEL(d, i).b;
- value = ndither[i] + base;
- if (value < 0) value = 0; /* Dither can make this value negative */
-
- maxwet = (CHANNEL(d, i).b * CHANNEL(d, i).maxdot >> 1)
- + p->maxdot_wet - p->wetness;
-
- find_segment(d, &CHANNEL(d, i), maxwet, value, &p->dr);
-
- p->ri = eventone_adjust(&p->dr, et, p->r_sq, base, value);
- }
-
- pick = pick_vertex(cd[ECOLOR_C].ri, cd[ECOLOR_M].ri, cd[ECOLOR_Y].ri, cd[ECOLOR_K].ri);
-
- { int useblack = 0; /* Do we print black at all? */
- int printed_black;
- int adjusted_black;
-
- for (i=0; i < d->n_channels; i++) {
- if (pick & (1 << i)) {
- cd[i].point = cd[i].dr.upper->value;
- } else {
- cd[i].point = cd[i].dr.lower->value;
- }
- }
-
- printed_black = cd[ECOLOR_K].point;
- adjusted_black = printed_black;
- if (printed_black > 0 && d->black_density != d->density) {
- adjusted_black = (unsigned)printed_black * (unsigned)d->density / d->black_density;
- }
-
- advance_eventone_post(d, cd, et, x);
-
- /* Only print the black ink if it means we can avoid printing another ink, otherwise we're just wasting ink */
-
- if (printed_black > 0) {
- for (i=1; i < d->n_channels; i++) {
- if (cd[i].point <= adjusted_black) {
- useblack = 1;
- break;
- }
- }
- }
-
- /* Find which channels we actually print */
-
- /* Adjust colours to print based on black ink */
- if (useblack) {
- print_inks = (1 << ECOLOR_K);
- for (i=1; i < d->n_channels; i++) {
- if (cd[i].point > adjusted_black) {
- print_inks |= (1 << i);
- }
- }
- } else {
- print_inks = (1 << ECOLOR_C)|(1 << ECOLOR_M)|(1<<ECOLOR_Y);
- }
-
- /* Adjust error values for dither */
- ndither[ECOLOR_K] += 2 * (CHANNEL(d, ECOLOR_K).b - printed_black);
- for (i=1; i < d->n_channels; i++) {
- ndither[i] += 2 * (CHANNEL(d, i).b - cd[i].point);
- }
- }
-
- /* Now we can finally print it! */
-
- print_all_inks(d, cd, print_inks, pick, bit, length);
-
- QUANT(11);
-
- /* Diffuse the error round a bit */
- diffuse_error(d, ndither, error, aspect, direction);
-
- QUANT(12);
- ADVANCE_BIDIRECTIONAL(d, bit, cmyk, direction, 4, xerror, xmod, error,
- d->n_channels, ERROR_ROWS);
- QUANT(13);
- }
-
- stp_free(cd);
- stp_free(ndither);
- for (i = 0; i < d->n_channels; i++)
- stp_free(error[i]);
- stp_free(error);
-}
-
-void
-stp_dither(const unsigned short *input,
- int row,
- void *vd,
- stp_dither_data_t *dt,
- int duplicate_line,
- int zero_mask)
-{
- int i, j;
- dither_t *d = (dither_t *) vd;
- for (i = 0; i < d->n_channels; i++)
- {
- for (j = 0; j < CHANNEL(d, i).subchannels; j++)
- {
- if (i >= dt->channel_count || j >= dt->c[i].subchannel_count)
- CHANNEL(d, i).ptrs[j] = NULL;
- else
- CHANNEL(d, i).ptrs[j] = dt->c[i].c[j];
- if (CHANNEL(d, i).ptrs[j])
- memset(CHANNEL(d, i).ptrs[j], 0,
- (d->dst_width + 7) / 8 * CHANNEL(d, i).signif_bits);
- CHANNEL(d, i).row_ends[0][j] = -1;
- CHANNEL(d, i).row_ends[1][j] = -1;
- }
- stp_matrix_set_row(&(CHANNEL(d, i).dithermat), row);
- stp_matrix_set_row(&(CHANNEL(d, i).pick), row);
- }
- d->ptr_offset = 0;
- (d->ditherfunc)(input, row, d, duplicate_line, zero_mask);
-}
diff --git a/src/main/print-dither.h b/src/main/print-dither.h
deleted file mode 100644
index cafb2be..0000000
--- a/src/main/print-dither.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * "$Id: print-dither.h,v 1.1.4.1 2002/05/03 01:30:28 rlk Exp $"
- *
- * Print plug-in header file for the GIMP.
- *
- * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
- * Robert Krawitz (rlk@alum.mit.edu)
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Revision History:
- *
- * See ChangeLog
- */
-
-/*
- * This file must include only standard C header files. The core code must
- * compile on generic platforms that don't support glib, gimp, gtk, etc.
- */
-
-#ifndef _GIMP_PRINT_DITHER_H_
-#define _GIMP_PRINT_DITHER_H_
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gimp-print/gimp-print.h>
-#include "gimp-print-internal.h"
-
-extern const stp_dither_matrix_short_t stp_1_1_matrix;
-extern const stp_dither_matrix_short_t stp_2_1_matrix;
-extern const stp_dither_matrix_short_t stp_4_1_matrix;
-
-typedef struct dither_matrix
-{
- int base;
- int exp;
- int x_size;
- int y_size;
- int total_size;
- int last_x;
- int last_x_mod;
- int last_y;
- int last_y_mod;
- int index;
- int i_own;
- int x_offset;
- int y_offset;
- unsigned fast_mask;
- unsigned *matrix;
-} dither_matrix_t;
-
-extern void stp_init_iterated_matrix(dither_matrix_t *mat, size_t size,
- size_t exp, const unsigned *array);
-extern void stp_shear_matrix(dither_matrix_t *mat, int x_shear, int y_shear);
-extern void stp_init_matrix(dither_matrix_t *mat, int x_size, int y_size,
- const unsigned int *array, int transpose,
- int prescaled);
-extern void stp_init_matrix_short(dither_matrix_t *mat, int x_size, int y_size,
- const unsigned short *array, int transpose,
- int prescaled);
-extern void stp_destroy_matrix(dither_matrix_t *mat);
-extern void stp_clone_matrix(const dither_matrix_t *src, dither_matrix_t *dest,
- int x_offset, int y_offset);
-extern void stp_copy_matrix(const dither_matrix_t *src, dither_matrix_t *dest);
-extern void stp_exponential_scale_matrix(dither_matrix_t *mat,double exponent);
-extern void stp_matrix_set_row(dither_matrix_t *mat, int y);
-
-#endif /* _GIMP_PRINT_DITHER_H_ */
diff --git a/src/main/print-escp2-data.c b/src/main/print-escp2-data.c
index 62a02ef..aa32b58 100644
--- a/src/main/print-escp2-data.c
+++ b/src/main/print-escp2-data.c
@@ -1,5 +1,5 @@
/*
- * "$Id: print-escp2-data.c,v 1.15.4.45 2004/04/12 10:33:44 rlk Exp $"
+ * "$Id: print-escp2-data.c,v 1.177 2005/06/26 22:08:01 rlk Exp $"
*
* Print plug-in EPSON ESC/P2 driver for the GIMP.
*
@@ -24,4178 +24,260 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#include <gimp-print/gimp-print.h>
-#include "gimp-print-internal.h"
-#include <gimp-print/gimp-print-intl-internal.h>
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
#include "print-escp2.h"
-static const double standard_sat_adjustment[49] =
-{
- 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, /* C */
- 1.8, 1.9, 1.9, 1.9, 1.7, 1.5, 1.3, 1.1, /* B */
- 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, /* M */
- 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, /* R */
- 1.0, 1.0, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, /* Y */
- 1.5, 1.4, 1.3, 1.2, 1.1, 1.0, 1.0, 1.0, /* G */
- 1.0 /* C */
-};
-
-static const double standard_lum_adjustment[49] =
-{
- 0.50, 0.6, 0.7, 0.8, 0.9, 0.86, 0.82, 0.79, /* C */
- 0.78, 0.8, 0.83, 0.87, 0.9, 0.95, 1.05, 1.15, /* B */
- 1.3, 1.25, 1.2, 1.15, 1.12, 1.09, 1.06, 1.03, /* M */
- 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, /* R */
- 1.0, 0.9, 0.8, 0.7, 0.65, 0.6, 0.55, 0.52, /* Y */
- 0.48, 0.47, 0.47, 0.49, 0.49, 0.49, 0.52, 0.51, /* G */
- 0.50 /* C */
-};
-
-static const double standard_hue_adjustment[49] =
-{
- 0.00, 0.05, 0.04, 0.01, -.03, -.10, -.18, -.26, /* C */
- -.35, -.43, -.40, -.32, -.25, -.18, -.10, -.07, /* B */
- 0.00, -.04, -.09, -.13, -.18, -.23, -.27, -.31, /* M */
- -.35, -.38, -.30, -.23, -.15, -.08, 0.00, -.02, /* R */
- 0.00, 0.08, 0.10, 0.08, 0.05, 0.03, -.03, -.12, /* Y */
- -.20, 0.17, -.20, -.17, -.15, -.12, -.10, -.08, /* G */
- 0.00, /* C */
-};
-
-static const double plain_paper_lum_adjustment[49] =
-{
- 1.2, 1.22, 1.28, 1.34, 1.39, 1.42, 1.45, 1.48, /* C */
- 1.5, 1.4, 1.3, 1.25, 1.2, 1.1, 1.05, 1.05, /* B */
- 1.05, 1.05, 1.05, 1.05, 1.05, 1.05, 1.05, 1.05, /* M */
- 1.05, 1.05, 1.05, 1.1, 1.1, 1.1, 1.1, 1.1, /* R */
- 1.1, 1.15, 1.3, 1.45, 1.6, 1.75, 1.9, 2.0, /* Y */
- 2.1, 2.0, 1.8, 1.7, 1.6, 1.5, 1.4, 1.3, /* G */
- 1.2 /* C */
-};
-
-static const double pgpp_sat_adjustment[49] =
-{
- 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, /* C */
- 1.00, 1.00, 1.00, 1.03, 1.05, 1.07, 1.09, 1.11, /* B */
- 1.13, 1.13, 1.13, 1.13, 1.13, 1.13, 1.13, 1.13, /* M */
- 1.13, 1.10, 1.05, 1.00, 1.00, 1.00, 1.00, 1.00, /* R */
- 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, /* Y */
- 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, /* G */
- 1.00, /* C */
-};
-
-static const double pgpp_lum_adjustment[49] =
-{
- 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, /* C */
- 1.00, 1.00, 1.00, 1.03, 1.05, 1.07, 1.09, 1.11, /* B */
- 1.13, 1.13, 1.13, 1.13, 1.13, 1.13, 1.13, 1.13, /* M */
- 1.13, 1.10, 1.05, 1.00, 1.00, 1.00, 1.00, 1.00, /* R */
- 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, /* Y */
- 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, /* G */
- 1.00, /* C */
-};
-
-static const double pgpp_hue_adjustment[49] =
-{
- 0.00, 0.00, 0.00, 0.00, 0.00, 0.01, 0.02, 0.03, /* C */
- 0.05, 0.05, 0.05, 0.04, 0.04, 0.03, 0.02, 0.01, /* B */
- 0.00, -.03, -.05, -.07, -.09, -.11, -.13, -.14, /* M */
- -.15, -.13, -.10, -.06, -.04, -.02, -.01, 0.00, /* R */
- 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, /* Y */
- 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, /* G */
- 0.00, /* C */
-};
-
-#define DECLARE_INK(name, density) \
-static const escp2_variable_ink_t name##_ink = \
-{ \
- name##_dither_ranges, \
- sizeof(name##_dither_ranges) / sizeof(stp_simple_dither_range_t), \
- density \
-}
-
-#define PIEZO_0 .25
-#define PIEZO_1 .5
-#define PIEZO_2 .75
-#define PIEZO_3 1.0
-
-#define PIEZO_DENSITY 1.0
-
-/***************************************************************\
-* *
-* SINGLE DOT SIZE *
-* *
-\***************************************************************/
-
-static const stp_simple_dither_range_t photo_cyan_dither_ranges[] =
-{
- { 0.27, 0x1, 1, 1 },
- { 1.0, 0x1, 0, 1 }
-};
-
-DECLARE_INK(photo_cyan, 1.0);
-
-static const stp_simple_dither_range_t photo_magenta_dither_ranges[] =
-{
- { 0.35, 0x1, 1, 1 },
- { 1.0, 0x1, 0, 1 }
-};
-
-DECLARE_INK(photo_magenta, 1.0);
-
-static const stp_simple_dither_range_t photo2_yellow_dither_ranges[] =
-{
- { 0.35, 0x1, 1, 1 },
- { 1.0, 0x1, 0, 1 }
-};
-
-DECLARE_INK(photo2_yellow, 1.0);
-
-static const stp_simple_dither_range_t photo2_black_dither_ranges[] =
-{
- { 0.27, 0x1, 1, 1 },
- { 1.0, 0x1, 0, 1 }
-};
-
-DECLARE_INK(photo2_black, 1.0);
-
-static const stp_simple_dither_range_t piezo_quadtone_dither_ranges[] =
-{
- { PIEZO_0, 0x1, 0, 1 },
- { PIEZO_1, 0x1, 1, 1 },
- { PIEZO_2, 0x1, 2, 1 },
- { PIEZO_3, 0x1, 3, 1 },
-};
-
-DECLARE_INK(piezo_quadtone, PIEZO_DENSITY);
-
-/***************************************************************\
-* *
-* LOW RESOLUTION, 4 AND 6 PICOLITRE PRINTERS *
-* *
-\***************************************************************/
-
-static const stp_simple_dither_range_t standard_multishot_dither_ranges[] =
-{
- { 0.28, 0x1, 0, 2 },
- { 0.58, 0x2, 0, 4 },
- { 1.0, 0x3, 0, 7 }
-};
-
-DECLARE_INK(standard_multishot, 1.0);
-
-static const stp_simple_dither_range_t photo_multishot_dither_ranges[] =
-{
- { 0.0728, 0x1, 1, 1 },
- { 0.151, 0x2, 1, 2 },
- { 0.26, 0x3, 1, 3 },
- { 1.0, 0x3, 0, 3 }
-};
-
-DECLARE_INK(photo_multishot, 1.0);
-
-static const stp_simple_dither_range_t photo_multishot_y_dither_ranges[] =
-{
- { 0.140, 0x1, 0, 1 },
- { 0.290, 0x2, 0, 2 },
- { 0.5, 0x3, 0, 3 },
- { 1.0, 0x3, 1, 3 }
-};
-
-DECLARE_INK(photo_multishot_y, 1.0);
-
-static const stp_simple_dither_range_t piezo_multishot_quadtone_dither_ranges[] =
-{
- { PIEZO_0 * .28, 0x1, 0, 2 },
- { PIEZO_0 * .58, 0x2, 0, 4 },
- { PIEZO_1 * .58, 0x2, 1, 4 },
- { PIEZO_2 * .58, 0x2, 2, 4 },
- { PIEZO_2 * 1.0, 0x3, 2, 7 },
- { PIEZO_3 * 1.0, 0x3, 3, 7 },
-};
-
-DECLARE_INK(piezo_multishot_quadtone, PIEZO_DENSITY);
-
-/***************************************************************\
-* *
-* 4 AND 6 PICOLITRE PRINTERS, 6 PICOLITRE DOTS *
-* *
-\***************************************************************/
-
-static const stp_simple_dither_range_t standard_6pl_dither_ranges[] =
-{
- { 0.25, 0x1, 0, 1 },
- { 0.5, 0x2, 0, 2 },
- { 1.0, 0x3, 0, 4 }
-};
-
-DECLARE_INK(standard_6pl, 1.0);
-
-static const stp_simple_dither_range_t standard_6pl_1440_dither_ranges[] =
-{
- { 0.5, 0x1, 0, 1 },
- { 1.0, 0x2, 0, 2 },
-};
-
-DECLARE_INK(standard_6pl_1440, 1.0);
-
-static const stp_simple_dither_range_t standard_6pl_2880_dither_ranges[] =
-{
- { 1.0, 0x1, 0, 1 },
-};
-
-DECLARE_INK(standard_6pl_2880, 1.0);
-
-static const stp_simple_dither_range_t photo_6pl_dither_ranges[] =
-{
- { 0.065, 0x1, 1, 1 },
- { 0.13, 0x2, 1, 2 },
-/* { 0.26, 0x3, 1, 4 }, */
- { 0.25, 0x1, 0, 1 },
- { 0.5, 0x2, 0, 2 },
- { 1.0, 0x3, 0, 4 }
-};
-
-DECLARE_INK(photo_6pl, 1.0);
-
-static const stp_simple_dither_range_t photo_6pl_y_dither_ranges[] =
-{
- { 0.125, 0x1, 0, 1 },
- { 0.25, 0x2, 0, 2 },
- { 0.5, 0x2, 1, 2 },
- { 1.0, 0x3, 1, 4 }
-};
-
-DECLARE_INK(photo_6pl_y, 1.0);
-
-static const stp_simple_dither_range_t photo_6pl_1440_dither_ranges[] =
-{
- { 0.13, 0x1, 1, 1 },
- { 0.26, 0x2, 1, 2 },
-/* { 0.52, 0x3, 1, 4 }, */
- { 0.5, 0x1, 0, 1 },
- { 1.0, 0x2, 0, 2 },
-};
-
-DECLARE_INK(photo_6pl_1440, 1.0);
-
-static const stp_simple_dither_range_t photo_6pl_2880_dither_ranges[] =
-{
- { 0.26, 0x1, 1, 1 },
- { 1.0, 0x1, 0, 1 },
-};
-
-DECLARE_INK(photo_6pl_2880, 1.0);
-
-static const stp_simple_dither_range_t piezo_6pl_quadtone_dither_ranges[] =
-{
- { PIEZO_0 * .25, 0x1, 0, 1 },
- { PIEZO_0 * .50, 0x2, 0, 2 },
- { PIEZO_1 * .50, 0x2, 1, 2 },
- { PIEZO_2 * .50, 0x2, 2, 2 },
- { PIEZO_2 * 1.0, 0x3, 2, 4 },
- { PIEZO_3 * 1.0, 0x3, 3, 4 },
-};
-
-DECLARE_INK(piezo_6pl_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t piezo_6pl_1440_quadtone_dither_ranges[] =
-{
- { PIEZO_0 * .50, 0x1, 0, 1 },
- { PIEZO_1 * .50, 0x1, 1, 1 },
- { PIEZO_2 * .50, 0x1, 2, 1 },
- { PIEZO_2 * 1.0, 0x2, 2, 2 },
- { PIEZO_3 * 1.0, 0x2, 3, 2 },
-};
-
-DECLARE_INK(piezo_6pl_1440_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t piezo_6pl_2880_quadtone_dither_ranges[] =
-{
- { PIEZO_0 * 1.0, 0x1, 0, 1 },
- { PIEZO_1 * 1.0, 0x1, 1, 1 },
- { PIEZO_2 * 1.0, 0x1, 2, 1 },
- { PIEZO_3 * 1.0, 0x1, 3, 1 },
-};
-
-DECLARE_INK(piezo_6pl_2880_quadtone, PIEZO_DENSITY);
-
-
-/***************************************************************\
-* *
-* STYLUS COLOR 480/580 *
-* *
-\***************************************************************/
-
-static const stp_simple_dither_range_t standard_x80_multishot_dither_ranges[] =
-{
- { 0.163, 0x1, 0, 1 },
- { 0.5, 0x2, 0, 3 },
- { 1.0, 0x3, 0, 6 }
-};
-
-DECLARE_INK(standard_x80_multishot, 1.0);
-
-static const stp_simple_dither_range_t standard_x80_6pl_dither_ranges[] =
-{
- { 0.325, 0x1, 0, 2 },
- { 0.5, 0x2, 0, 3 },
- { 1.0, 0x3, 0, 6 }
-};
-
-DECLARE_INK(standard_x80_6pl, 1.0);
-
-static const stp_simple_dither_range_t standard_x80_1440_6pl_dither_ranges[] =
-{
- { 0.65, 0x1, 0, 2 },
- { 1.0, 0x2, 0, 3 },
-};
-
-DECLARE_INK(standard_x80_1440_6pl, 1.0);
-
-static const stp_simple_dither_range_t standard_x80_2880_6pl_dither_ranges[] =
-{
- { 1.00, 0x1, 0, 1 },
-};
-
-DECLARE_INK(standard_x80_2880_6pl, 1.0);
-
-static const stp_simple_dither_range_t piezo_x80_multishot_quadtone_dither_ranges[] =
-{
- { PIEZO_0 * .163, 0x1, 0, 1 },
- { PIEZO_0 * .500, 0x2, 0, 3 },
- { PIEZO_1 * .500, 0x2, 1, 3 },
- { PIEZO_2 * .500, 0x2, 2, 3 },
- { PIEZO_2 * 1.00, 0x3, 2, 6 },
- { PIEZO_3 * 1.00, 0x3, 3, 6 },
-};
-
-DECLARE_INK(piezo_x80_multishot_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t piezo_x80_6pl_quadtone_dither_ranges[] =
-{
- { PIEZO_0 * .325, 0x1, 0, 2 },
- { PIEZO_0 * .500, 0x2, 0, 3 },
- { PIEZO_1 * .500, 0x2, 1, 3 },
- { PIEZO_2 * .500, 0x2, 2, 3 },
- { PIEZO_2 * 1.00, 0x3, 2, 6 },
- { PIEZO_3 * 1.00, 0x3, 3, 6 },
-};
-
-DECLARE_INK(piezo_x80_6pl_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t piezo_x80_1440_6pl_quadtone_dither_ranges[] =
-{
- { PIEZO_0 * .650, 0x1, 0, 2 },
- { PIEZO_1 * .650, 0x1, 1, 2 },
- { PIEZO_2 * .650, 0x1, 2, 2 },
- { PIEZO_2 * 1.00, 0x2, 2, 3 },
- { PIEZO_3 * 1.00, 0x2, 3, 3 },
-};
-
-DECLARE_INK(piezo_x80_1440_6pl_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t piezo_x80_2880_6pl_quadtone_dither_ranges[] =
-{
- { PIEZO_0 * 1.00, 0x1, 0, 1 },
- { PIEZO_1 * 1.00, 0x1, 1, 1 },
- { PIEZO_2 * 1.00, 0x1, 2, 1 },
- { PIEZO_3 * 1.00, 0x1, 3, 1 },
-};
-
-DECLARE_INK(piezo_x80_2880_6pl_quadtone, PIEZO_DENSITY);
-
-
-/***************************************************************\
-* *
-* STYLUS COLOR 680/777
-* *
-\***************************************************************/
-
-static const stp_simple_dither_range_t standard_680_multishot_dither_ranges[] =
-{
- { 0.375, 0x1, 0, 3 },
- { 0.75, 0x2, 0, 6 },
- { 1.0, 0x3, 0, 8 }
-};
-
-DECLARE_INK(standard_680_multishot, 1.0);
-
-static const stp_simple_dither_range_t standard_680_6pl_dither_ranges[] =
-{
- { 0.50, 0x1, 0, 3 },
- { 0.66, 0x2, 0, 4 },
- { 1.0, 0x3, 0, 6 }
-};
-
-DECLARE_INK(standard_680_6pl, 1.0);
-
-static const stp_simple_dither_range_t piezo_680_multishot_quadtone_dither_ranges[] =
-{
- { PIEZO_0 * .375, 0x1, 0, 3 },
- { PIEZO_0 * .750, 0x2, 0, 6 },
- { PIEZO_1 * .750, 0x2, 1, 6 },
- { PIEZO_2 * .750, 0x2, 2, 6 },
- { PIEZO_2 * 1.00, 0x3, 2, 8 },
- { PIEZO_3 * 1.00, 0x3, 3, 8 },
-};
-
-DECLARE_INK(piezo_680_multishot_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t piezo_680_6pl_quadtone_dither_ranges[] =
-{
- { PIEZO_0 * .500, 0x1, 0, 3 },
- { PIEZO_1 * .660, 0x2, 1, 4 },
- { PIEZO_2 * .660, 0x2, 2, 4 },
- { PIEZO_2 * 1.00, 0x2, 3, 6 },
- { PIEZO_3 * 1.00, 0x3, 3, 6 },
-};
-
-DECLARE_INK(piezo_680_6pl_quadtone, PIEZO_DENSITY);
-
-
-/***************************************************************\
-* *
-* 4 PICOLITRE DOTS *
-* *
-\***************************************************************/
-
-static const stp_simple_dither_range_t standard_4pl_dither_ranges[] =
-{
- { 0.661, 0x1, 0, 2 },
- { 1.00, 0x2, 0, 3 }
-};
-
-DECLARE_INK(standard_4pl, 1.0);
-
-static const stp_simple_dither_range_t standard_4pl_2880_dither_ranges[] =
-{
- { 1.00, 0x1, 0, 1 },
-};
-
-DECLARE_INK(standard_4pl_2880, 1.0);
-
-static const stp_simple_dither_range_t photo_4pl_dither_ranges[] =
-{
- { 0.17, 0x1, 1, 2 },
- { 0.26, 0x2, 1, 3 },
- { 0.661, 0x1, 0, 2 },
- { 1.00, 0x2, 0, 3 }
-};
-
-DECLARE_INK(photo_4pl, 1.0);
-
-static const stp_simple_dither_range_t photo_4pl_y_dither_ranges[] =
-{
- { 0.330, 0x1, 0, 2 },
- { 0.50, 0x2, 0, 3 },
- { 0.661, 0x1, 1, 2 },
- { 1.00, 0x2, 1, 3 }
-};
-
-DECLARE_INK(photo_4pl_y, 1.0);
-
-static const stp_simple_dither_range_t photo_4pl_2880_dither_ranges[] =
-{
- { 0.26, 0x1, 1, 1 },
- { 1.00, 0x1, 0, 1 },
-};
-
-DECLARE_INK(photo_4pl_2880, 1.0);
-
-static const stp_simple_dither_range_t piezo_4pl_quadtone_dither_ranges[] =
-{
- { PIEZO_0 * .661, 0x1, 0, 2 },
- { PIEZO_1 * .661, 0x1, 1, 2 },
- { PIEZO_2 * .661, 0x1, 2, 2 },
- { PIEZO_2 * 1.00, 0x2, 2, 3 },
- { PIEZO_3 * 1.00, 0x2, 3, 3 },
-};
-
-DECLARE_INK(piezo_4pl_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t piezo_4pl_2880_quadtone_dither_ranges[] =
-{
- { PIEZO_0, 0x1, 0, 1 },
- { PIEZO_1, 0x1, 1, 1 },
- { PIEZO_2, 0x1, 2, 1 },
- { PIEZO_3, 0x1, 3, 1 },
-};
-
-DECLARE_INK(piezo_4pl_2880_quadtone, PIEZO_DENSITY);
-
-
-/***************************************************************\
-* *
-* 3 PICOLITRE DOTS (900 AND 980) *
-* *
-\***************************************************************/
-
-static const stp_simple_dither_range_t standard_3pl_dither_ranges[] =
-{
- { 0.25, 0x1, 0, 2 },
- { 0.61, 0x2, 0, 5 },
- { 1.0, 0x3, 0, 8 }
-};
-
-DECLARE_INK(standard_3pl, 1.0);
-
-
-static const stp_simple_dither_range_t standard_3pl_1440_dither_ranges[] =
-{
- { 0.39, 0x1, 0, 2 },
- { 1.0, 0x2, 0, 5 }
-};
-
-DECLARE_INK(standard_3pl_1440, 1.0);
-
-
-static const stp_simple_dither_range_t standard_3pl_2880_dither_ranges[] =
-{
- { 1.0, 0x1, 0, 1 }
-};
-
-DECLARE_INK(standard_3pl_2880, 1.0);
-
-static const stp_simple_dither_range_t standard_980_6pl_dither_ranges[] =
-{
- { 0.40, 0x1, 0, 4 },
- { 0.675, 0x2, 0, 7 },
- { 1.0, 0x3, 0, 10 }
-};
-
-DECLARE_INK(standard_980_6pl, 1.0);
-
-static const stp_simple_dither_range_t piezo_3pl_quadtone_dither_ranges[] =
-{
- { PIEZO_0 * .25, 0x1, 0, 2 },
- { PIEZO_0 * .61, 0x2, 0, 5 },
- { PIEZO_1 * .61, 0x2, 1, 5 },
- { PIEZO_2 * .61, 0x2, 2, 5 },
- { PIEZO_2 * 1.0, 0x3, 2, 8 },
- { PIEZO_3 * 1.0, 0x3, 3, 8 },
-};
-
-DECLARE_INK(piezo_3pl_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t piezo_3pl_1440_quadtone_dither_ranges[]=
-{
- { PIEZO_0 * .390, 0x1, 0, 2 },
- { PIEZO_1 * .390, 0x1, 1, 2 },
- { PIEZO_2 * .390, 0x1, 2, 2 },
- { PIEZO_2 * 1.00, 0x2, 2, 5 },
- { PIEZO_3 * 1.00, 0x2, 3, 5 },
-};
-
-DECLARE_INK(piezo_3pl_1440_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t piezo_3pl_2880_quadtone_dither_ranges[]=
-{
- { PIEZO_0, 0x1, 0, 1 },
- { PIEZO_1, 0x1, 1, 1 },
- { PIEZO_2, 0x1, 2, 1 },
- { PIEZO_3, 0x1, 3, 1 },
-};
-
-DECLARE_INK(piezo_3pl_2880_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t piezo_980_6pl_quadtone_dither_ranges[] =
-{
- { PIEZO_0 * .400, 0x1, 0, 4 },
- { PIEZO_0 * .675, 0x2, 0, 7 },
- { PIEZO_1 * .675, 0x2, 1, 7 },
- { PIEZO_2 * .675, 0x2, 2, 7 },
- { PIEZO_3 * 1.00, 0x3, 3, 10 },
-};
-
-DECLARE_INK(piezo_980_6pl_quadtone, PIEZO_DENSITY);
-
-
-/***************************************************************\
-* *
-* 2 PICOLITRE DOTS (950) *
-* *
-\***************************************************************/
-
-static const stp_simple_dither_range_t standard_2pl_2880_dither_ranges[] =
-{
- { 1.00, 0x1, 0, 1 },
-};
-
-DECLARE_INK(standard_2pl_2880, 1.0);
-
-static const stp_simple_dither_range_t photo_2pl_2880_dither_ranges[] =
-{
- { 0.26, 0x1, 1, 1 },
- { 1.00, 0x1, 0, 1 },
-};
-
-DECLARE_INK(photo_2pl_2880, 0.5);
-
-static const stp_simple_dither_range_t photo_2pl_2880_c_dither_ranges[] =
-{
- { 0.26, 0x1, 1, 1 },
- { 1.00, 0x1, 0, 1 },
-};
-
-DECLARE_INK(photo_2pl_2880_c, .5);
-
-static const stp_simple_dither_range_t photo_2pl_2880_m_dither_ranges[] =
-{
- { 0.31, 0x1, 1, 1 },
- { 1.00, 0x1, 0, 1 },
-};
-
-DECLARE_INK(photo_2pl_2880_m, .5);
-
-static const stp_simple_dither_range_t photo_2pl_2880_y_dither_ranges[] =
-{
- { 0.5, 0x1, 0, 1 },
- { 1.00, 0x1, 1, 1 },
-};
-
-DECLARE_INK(photo_2pl_2880_y, 1.00);
-
-static const stp_simple_dither_range_t piezo_2pl_2880_quadtone_dither_ranges[]=
-{
- { PIEZO_0, 0x1, 0, 1 },
- { PIEZO_1, 0x1, 1, 1 },
- { PIEZO_2, 0x1, 2, 1 },
- { PIEZO_3, 0x1, 3, 1 },
-};
-
-DECLARE_INK(piezo_2pl_2880_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t standard_2pl_1440_dither_ranges[] =
-{
- { 0.5, 0x1, 0, 1 },
- { 1.00, 0x2, 0, 2 }
-};
-
-DECLARE_INK(standard_2pl_1440, 1.0);
-
-static const stp_simple_dither_range_t piezo_2pl_1440_quadtone_dither_ranges[] =
-{
- { PIEZO_0 * .5, 0x1, 0, 1 },
- { PIEZO_1 * .5, 0x1, 1, 1 },
- { PIEZO_2 * .5, 0x1, 2, 1 },
- { PIEZO_2 * 1.00, 0x2, 2, 2 },
- { PIEZO_3 * 1.00, 0x2, 3, 2 },
-};
-
-DECLARE_INK(piezo_2pl_1440_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t photo_2pl_1440_dither_ranges[] =
-{
- { 0.13, 0x1, 1, 1 },
- { 0.26, 0x2, 1, 2 },
- { 0.5, 0x1, 0, 1 },
- { 1.00, 0x2, 0, 2 }
-};
-
-DECLARE_INK(photo_2pl_1440, 1.0);
-
-static const stp_simple_dither_range_t photo_2pl_1440_y_dither_ranges[] =
-{
- { 0.25, 0x1, 0, 1 },
- { 0.50, 0x2, 0, 2 },
- { 1.00, 0x2, 1, 2 }
-};
-
-DECLARE_INK(photo_2pl_1440_y, 1.0);
-
-static const stp_simple_dither_range_t standard_2pl_720_dither_ranges[] =
-{
- { 0.25, 0x1, 0, 1 },
- { 0.5, 0x2, 0, 2 },
- { 1.0, 0x3, 0, 4 }
-};
-
-DECLARE_INK(standard_2pl_720, 1.0);
-
-static const stp_simple_dither_range_t photo_2pl_720_dither_ranges[] =
-{
- { 0.065, 0x1, 1, 1 },
- { 0.13, 0x2, 1, 2 },
-/* { 0.26, 0x3, 1, 4 }, */
- { 0.25, 0x1, 0, 1 },
- { 0.5, 0x2, 0, 2 },
- { 1.0, 0x3, 0, 4 }
-};
-
-DECLARE_INK(photo_2pl_720, 1.0);
-
-static const stp_simple_dither_range_t photo_2pl_720_y_dither_ranges[] =
-{
- { 0.125, 0x1, 0, 1 },
- { 0.25, 0x2, 0, 2 },
- { 0.5, 0x2, 1, 2 },
- { 1.0, 0x3, 1, 4 }
-};
-
-DECLARE_INK(photo_2pl_720_y, 1.0);
-
-static const stp_simple_dither_range_t piezo_2pl_720_quadtone_dither_ranges[] =
-{
- { PIEZO_0 * .25, 0x1, 0, 1 },
- { PIEZO_0 * .50, 0x2, 0, 2 },
- { PIEZO_1 * .50, 0x2, 1, 2 },
- { PIEZO_2 * .50, 0x2, 2, 2 },
- { PIEZO_2 * 1.0, 0x3, 2, 4 },
- { PIEZO_3 * 1.0, 0x3, 3, 4 },
-};
-
-DECLARE_INK(piezo_2pl_720_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t standard_2pl_360_dither_ranges[] =
-{
- { 0.25, 0x1, 0, 2 },
- { 0.5, 0x2, 0, 4 },
- { 1.0, 0x3, 0, 7 }
-};
-
-DECLARE_INK(standard_2pl_360, 1.0);
-
-static const stp_simple_dither_range_t photo_2pl_360_dither_ranges[] =
-{
- { 0.065, 0x1, 1, 1 },
- { 0.13, 0x2, 1, 2 },
- { 0.26, 0x3, 1, 3 },
- { 1.0, 0x3, 0, 3 }
-};
-
-DECLARE_INK(photo_2pl_360, 1.0);
-
-static const stp_simple_dither_range_t photo_2pl_360_y_dither_ranges[] =
-{
- { 0.145, 0x1, 0, 1 },
- { 0.290, 0x2, 0, 2 },
- { 0.5, 0x3, 0, 3 },
- { 1.0, 0x3, 1, 3 }
-};
-
-DECLARE_INK(photo_2pl_360_y, 1.0);
-
-static const stp_simple_dither_range_t piezo_2pl_360_quadtone_dither_ranges[] =
-{
- { PIEZO_0 * .25, 0x1, 0, 2 },
- { PIEZO_0 * .50, 0x2, 0, 4 },
- { PIEZO_1 * .50, 0x2, 1, 4 },
- { PIEZO_2 * .50, 0x2, 2, 4 },
- { PIEZO_2 * 1.0, 0x3, 2, 7 },
- { PIEZO_3 * 1.0, 0x3, 3, 7 },
-};
-
-DECLARE_INK(piezo_2pl_360_quadtone, PIEZO_DENSITY);
-
-
-/***************************************************************\
-* *
-* STYLUS C70/C80 (PIGMENT) *
-* *
-\***************************************************************/
-
-static const stp_simple_dither_range_t standard_economy_pigment_dither_ranges[] =
-{
- { 1.0, 0x3, 0, 3 }
-};
-
-DECLARE_INK(standard_economy_pigment, 1.0);
-
-static const stp_simple_dither_range_t standard_multishot_pigment_dither_ranges[] =
-{
- { 0.410, 0x1, 0, 2 },
- { 1.0, 0x3, 0, 5 }
-};
-
-DECLARE_INK(standard_multishot_pigment, 1.0);
-
-static const stp_simple_dither_range_t standard_6pl_pigment_dither_ranges[] =
-{
- { 0.300, 0x1, 0, 3 },
- { 1.0, 0x3, 0, 10 }
-};
-
-DECLARE_INK(standard_6pl_pigment, 1.0);
-
-static const stp_simple_dither_range_t standard_3pl_pigment_dither_ranges[] =
-{
- { 0.650, 0x1, 0, 2 },
- { 1.000, 0x2, 0, 3 },
-};
-
-DECLARE_INK(standard_3pl_pigment, 1.0);
-
-static const stp_simple_dither_range_t standard_3pl_pigment_2880_dither_ranges[] =
-{
- { 1.0, 0x1, 0, 1 }
-};
-
-DECLARE_INK(standard_3pl_pigment_2880, 1.0);
-
-static const stp_simple_dither_range_t piezo_economy_pigment_quadtone_dither_ranges[]=
-{
- { PIEZO_0, 0x3, 0, 1 },
- { PIEZO_1, 0x3, 1, 1 },
- { PIEZO_2, 0x3, 2, 1 },
- { PIEZO_3, 0x3, 3, 1 },
-};
-
-DECLARE_INK(piezo_economy_pigment_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t piezo_multishot_pigment_quadtone_dither_ranges[]=
-{
- { PIEZO_0 * .410, 0x1, 0, 2 },
- { PIEZO_1 * .410, 0x1, 1, 2 },
- { PIEZO_2 * .410, 0x1, 2, 2 },
- { PIEZO_3 * 1.00, 0x3, 3, 5 },
-};
-
-DECLARE_INK(piezo_multishot_pigment_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t piezo_6pl_pigment_quadtone_dither_ranges[]=
-{
- { PIEZO_0 * .300, 0x1, 0, 3 },
- { PIEZO_0 * .600, 0x2, 0, 6 },
- { PIEZO_1 * .600, 0x2, 1, 6 },
- { PIEZO_2 * .600, 0x2, 2, 6 },
- { PIEZO_3 * 1.00, 0x3, 3, 10 },
-};
-
-DECLARE_INK(piezo_6pl_pigment_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t piezo_3pl_pigment_quadtone_dither_ranges[]=
-{
- { PIEZO_0 * .650, 0x1, 0, 2 },
- { PIEZO_1 * .650, 0x1, 1, 2 },
- { PIEZO_2 * .650, 0x1, 2, 2 },
- { PIEZO_3 * 1.00, 0x2, 3, 3 },
-};
-
-DECLARE_INK(piezo_3pl_pigment_quadtone, PIEZO_DENSITY);
-
-static const stp_simple_dither_range_t piezo_3pl_pigment_2880_quadtone_dither_ranges[]=
-{
- { PIEZO_0, 0x1, 0, 1 },
- { PIEZO_1, 0x1, 1, 1 },
- { PIEZO_2, 0x1, 2, 1 },
- { PIEZO_3, 0x1, 3, 1 },
-};
-
-DECLARE_INK(piezo_3pl_pigment_2880_quadtone, PIEZO_DENSITY);
-
-
-/***************************************************************\
-* *
-* STYLUS PHOTO 2000P *
-* *
-\***************************************************************/
-
-static const stp_simple_dither_range_t standard_pigment_dither_ranges[] =
-{ /* MRS: Not calibrated! */
- { 0.55, 0x1, 0, 1 },
- { 1.0, 0x2, 0, 2 }
-};
-
-DECLARE_INK(standard_pigment, 1.0);
-
-static const stp_simple_dither_range_t photo_pigment_dither_ranges[] =
-{ /* MRS: Not calibrated! */
- { 0.15, 0x1, 1, 1 },
- { 0.227, 0x2, 1, 2 },
- { 0.5, 0x1, 0, 1 },
- { 1.0, 0x2, 0, 2 }
-};
-
-DECLARE_INK(photo_pigment, 1.0);
-
-static const stp_simple_dither_range_t piezo_pigment_quadtone_dither_ranges[]=
-{
- { PIEZO_0 * .550, 0x1, 0, 1 },
- { PIEZO_1 * .550, 0x1, 1, 1 },
- { PIEZO_2 * .550, 0x1, 2, 1 },
- { PIEZO_3 * .550, 0x1, 3, 1 },
- { PIEZO_3 * 1.00, 0x2, 3, 2 },
-};
-
-DECLARE_INK(piezo_pigment_quadtone, PIEZO_DENSITY);
-
-
-/***************************************************************\
-* *
-* ULTRACHROME (2100/2200, 7600, 9600) *
-* *
-\***************************************************************/
-
-static const stp_simple_dither_range_t standard_4pl_pigment_low_dither_ranges[] =
-{
- { 0.40, 0x1, 0, 40 },
- { 0.70, 0x2, 0, 70 },
- { 1.00, 0x3, 0, 100 }
-};
-
-DECLARE_INK(standard_4pl_pigment_low, 0.5);
-
-static const stp_simple_dither_range_t photo_4pl_pigment_low_m_dither_ranges[] =
-{
- { 0.104, 0x1, 1, 40 },
- { 0.182, 0x2, 1, 70 },
- { 0.26, 0x3, 1, 100 },
- { 0.70, 0x2, 0, 70 },
- { 1.00, 0x3, 0, 100 }
-};
-
-DECLARE_INK(photo_4pl_pigment_low_m, 0.5);
-
-static const stp_simple_dither_range_t photo_4pl_pigment_low_c_dither_ranges[] =
-{
- { 0.16, 0x1, 1, 40 },
- { 0.28, 0x2, 1, 70 },
- { 0.40, 0x3, 1, 100 },
- { 0.70, 0x2, 0, 70 },
- { 1.00, 0x3, 0, 100 }
-};
-
-DECLARE_INK(photo_4pl_pigment_low_c, 0.5);
-
-static const stp_simple_dither_range_t photo_4pl_pigment_low_y_dither_ranges[] =
-{
- { 0.20, 0x1, 1, 40 },
- { 0.35, 0x2, 1, 70 },
- { 0.50, 0x3, 1, 100 },
- { 1.00, 0x3, 0, 100 }
-};
-
-DECLARE_INK(photo_4pl_pigment_low_y, 1.5);
-
-static const stp_simple_dither_range_t photo_4pl_pigment_low_k_dither_ranges[] =
-{
- { 0.196, 0x1, 1, 40 },
- { 0.40, 0x1, 0, 40 },
- { 0.70, 0x2, 0, 70 },
- { 1.00, 0x3, 0, 100 }
-};
-
-DECLARE_INK(photo_4pl_pigment_low_k, 0.5);
-
-static const stp_simple_dither_range_t standard_4pl_pigment_dither_ranges[] =
-{
- { 0.28, 0x1, 0, 28 },
- { 0.50, 0x2, 0, 50 },
- { 1.00, 0x3, 0, 100 }
-};
-
-DECLARE_INK(standard_4pl_pigment, 1.0);
-
-static const stp_simple_dither_range_t photo_4pl_pigment_m_dither_ranges[] =
-{
- { 0.0728, 0x1, 1, 28 },
- { 0.13, 0x2, 1, 50 },
- { 0.26, 0x3, 1, 100 },
- { 0.50, 0x2, 0, 50 },
- { 1.00, 0x3, 0, 100 }
-};
-
-DECLARE_INK(photo_4pl_pigment_m, 1.0);
-
-static const stp_simple_dither_range_t photo_4pl_pigment_c_dither_ranges[] =
-{
- { 0.112, 0x1, 1, 28 },
- { 0.20, 0x2, 1, 50 },
- { 0.40, 0x3, 1, 100 },
- { 0.50, 0x2, 0, 50 },
- { 1.00, 0x3, 0, 100 }
-};
-
-DECLARE_INK(photo_4pl_pigment_c, 1.0);
-
-static const stp_simple_dither_range_t photo_4pl_pigment_y_dither_ranges[] =
-{
- { 0.14, 0x1, 1, 28 },
- { 0.25, 0x2, 1, 50 },
- { 0.50, 0x3, 1, 100 },
- { 1.00, 0x3, 0, 100 }
-};
-
-DECLARE_INK(photo_4pl_pigment_y, 1.5);
-
-static const stp_simple_dither_range_t photo_4pl_pigment_k_dither_ranges[] =
-{
- { 0.1344, 0x1, 1, 28 },
- { 0.24, 0x2, 1, 50 },
- { 0.50, 0x2, 0, 50 },
- { 1.00, 0x3, 0, 100 }
-};
-
-DECLARE_INK(photo_4pl_pigment_k, 0.75);
-
-static const stp_simple_dither_range_t standard_4pl_pigment_1440_dither_ranges[] =
-{
- { 0.56, 0x1, 0, 56 },
- { 1.00, 0x2, 0, 100 },
-};
-
-DECLARE_INK(standard_4pl_pigment_1440, 1.0);
-
-static const stp_simple_dither_range_t photo_4pl_pigment_1440_m_dither_ranges[] =
-{
- { 0.1456, 0x1, 1, 56 },
- { 0.26, 0x2, 1, 100 },
- { 0.56, 0x1, 0, 56 },
- { 1.00, 0x2, 0, 100 }
-};
-
-DECLARE_INK(photo_4pl_pigment_1440_m, 1.0);
-
-static const stp_simple_dither_range_t photo_4pl_pigment_1440_c_dither_ranges[] =
-{
- { 0.224, 0x1, 1, 56 },
- { 0.40, 0x2, 1, 100 },
- { 0.56, 0x1, 0, 56 },
- { 1.00, 0x2, 0, 100 }
-};
-
-DECLARE_INK(photo_4pl_pigment_1440_c, 1.0);
-
-static const stp_simple_dither_range_t photo_4pl_pigment_1440_y_dither_ranges[] =
-{
- { 0.28, 0x1, 1, 56 },
- { 0.50, 0x2, 1, 100 },
- { 1.00, 0x2, 0, 100 }
-};
-
-DECLARE_INK(photo_4pl_pigment_1440_y, 1.5);
-
-static const stp_simple_dither_range_t photo_4pl_pigment_1440_k_dither_ranges[] =
-{
- { 0.2688, 0x1, 1, 56 },
- { 0.56, 0x1, 0, 56 },
- { 1.00, 0x2, 0, 100 }
-};
-
-DECLARE_INK(photo_4pl_pigment_1440_k, 0.75);
-
-static const stp_simple_dither_range_t standard_4pl_pigment_2880_dither_ranges[] =
-{
- { 1.00, 0x1, 0, 1 },
-};
-
-DECLARE_INK(standard_4pl_pigment_2880, 1.0);
-
-static const stp_simple_dither_range_t photo_4pl_pigment_2880_m_dither_ranges[] =
-{
- { 0.26, 0x1, 1, 1 },
- { 1.00, 0x1, 0, 1 },
-};
-
-DECLARE_INK(photo_4pl_pigment_2880_m, 0.75);
-
-static const stp_simple_dither_range_t photo_4pl_pigment_2880_c_dither_ranges[] =
-{
- { 0.40, 0x1, 1, 1 },
- { 1.00, 0x1, 0, 1 },
-};
-
-DECLARE_INK(photo_4pl_pigment_2880_c, 0.75);
-
-static const stp_simple_dither_range_t photo_4pl_pigment_2880_y_dither_ranges[] =
-{
- { 0.50, 0x1, 1, 1 },
- { 1.00, 0x1, 0, 1 },
-};
-
-DECLARE_INK(photo_4pl_pigment_2880_y, 1.5);
-
-static const stp_simple_dither_range_t photo_4pl_pigment_2880_k_dither_ranges[] =
-{
- { 0.48, 0x1, 1, 1 },
- { 1.00, 0x1, 0, 1 },
-};
-
-DECLARE_INK(photo_4pl_pigment_2880_k, 0.75);
-
-
-/***************************************************************\
-* *
-* STYLUS PRO 10000 *
-* *
-\***************************************************************/
-
-static const stp_simple_dither_range_t spro10000_standard_dither_ranges[] =
-{
- { 0.661, 0x1, 0, 2 },
- { 1.00, 0x2, 0, 3 }
-};
-
-DECLARE_INK(spro10000_standard, 1.0);
-
-static const stp_simple_dither_range_t spro10000_photo_dither_ranges[] =
-{
- { 0.17, 0x1, 1, 2 },
- { 0.26, 0x2, 1, 3 },
- { 0.661, 0x1, 0, 2 },
- { 1.00, 0x2, 0, 3 }
-};
-
-DECLARE_INK(spro10000_photo, 1.0);
-
-
-/***************************************************************\
-* *
-* STYLUS PHOTO R300 *
-* *
-\***************************************************************/
-
-static const stp_simple_dither_range_t standard_r300_360_dither_ranges[] =
-{
- { 0.15, 0x1, 0, 3 },
- { 0.30, 0x2, 0, 6 },
- { 1.00, 0x3, 0, 20 },
-};
-
-DECLARE_INK(standard_r300_360, 1.0);
-
-static const stp_simple_dither_range_t photo_r300_360_dither_ranges[] =
-{
- { 0.053, 0x1, 1, 3 },
- { 0.105, 0x2, 1, 6 },
- { 0.30, 0x2, 0, 6 },
- { 1.00, 0x3, 0, 20 },
-};
-
-DECLARE_INK(photo_r300_360, 0.5);
-
-static const stp_simple_dither_range_t piezo_r300_360_quadtone_dither_ranges[]=
-{
- { PIEZO_0 * .15, 0x1, 0, 3 },
- { PIEZO_0 * .30, 0x2, 0, 6 },
- { PIEZO_1 * .30, 0x2, 1, 6 },
- { PIEZO_2 * .30, 0x2, 2, 6 },
- { PIEZO_2 * 1.0, 0x3, 2, 20 },
- { PIEZO_3 * 1.0, 0x3, 3, 20 },
-};
-
-DECLARE_INK(piezo_r300_360_quadtone, 0.5);
-
-static const stp_simple_dither_range_t standard_r300_720_dither_ranges[] =
-{
- { 0.15, 0x1, 0, 3 },
- { 0.50, 0x2, 0, 10 },
- { 1.00, 0x3, 0, 20 },
-};
-
-DECLARE_INK(standard_r300_720, 1.0);
-
-static const stp_simple_dither_range_t photo_r300_720_dither_ranges[] =
-{
- { 0.053, 0x1, 1, 3 },
- { 0.175, 0x2, 1, 10 },
- { 0.50, 0x2, 0, 10 },
- { 1.00, 0x3, 0, 20 },
-};
-
-DECLARE_INK(photo_r300_720, 0.5);
-
-static const stp_simple_dither_range_t piezo_r300_720_quadtone_dither_ranges[]=
-{
- { PIEZO_0 * .15, 0x1, 0, 3 },
- { PIEZO_0 * .50, 0x2, 0, 10 },
- { PIEZO_1 * .50, 0x2, 1, 10 },
- { PIEZO_2 * .50, 0x2, 2, 10 },
- { PIEZO_2 * 1.0, 0x3, 2, 20 },
- { PIEZO_3 * 1.0, 0x3, 3, 20 },
-};
-
-DECLARE_INK(piezo_r300_720_quadtone, 0.5);
-
-static const stp_simple_dither_range_t standard_r300_1440_dither_ranges[] =
-{
- { 0.25, 0x1, 0, 1 },
- { 0.50, 0x2, 0, 2 },
- { 1.00, 0x3, 0, 4 },
-};
-
-DECLARE_INK(standard_r300_1440, 1.0);
-
-static const stp_simple_dither_range_t photo_r300_1440_dither_ranges[] =
-{
- { 0.088, 0x1, 1, 1 },
- { 0.175, 0x2, 1, 2 },
- { 0.50, 0x2, 0, 2 },
- { 1.00, 0x3, 0, 4 },
-};
-
-DECLARE_INK(photo_r300_1440, 0.5);
-
-static const stp_simple_dither_range_t piezo_r300_1440_quadtone_dither_ranges[]=
-{
- { PIEZO_0 * .25, 0x1, 0, 1 },
- { PIEZO_0 * .50, 0x2, 0, 2 },
- { PIEZO_1 * .50, 0x2, 1, 2 },
- { PIEZO_2 * .50, 0x2, 2, 2 },
- { PIEZO_2 * 1.0, 0x3, 2, 4 },
- { PIEZO_3 * 1.0, 0x3, 3, 4 },
-};
-
-DECLARE_INK(piezo_r300_1440_quadtone, 0.5);
-
-static const stp_simple_dither_range_t standard_r300_2880_dither_ranges[] =
-{
- { 0.50, 0x1, 0, 1 },
- { 1.00, 0x2, 0, 2 },
-};
-
-DECLARE_INK(standard_r300_2880, 1.0);
-
-static const stp_simple_dither_range_t photo_r300_2880_dither_ranges[] =
-{
- { 0.175, 0x1, 1, 1 },
- { 0.50, 0x1, 0, 1 },
- { 1.00, 0x2, 0, 2 },
-};
-
-DECLARE_INK(photo_r300_2880, 0.5);
-
-static const stp_simple_dither_range_t piezo_r300_2880_quadtone_dither_ranges[]=
-{
- { PIEZO_0 * .50, 0x1, 0, 1 },
- { PIEZO_1 * .50, 0x1, 1, 1 },
- { PIEZO_2 * .50, 0x1, 2, 1 },
- { PIEZO_2 * 1.0, 0x2, 2, 2 },
- { PIEZO_3 * 1.0, 0x2, 3, 2 },
-};
-
-DECLARE_INK(piezo_r300_2880_quadtone, 0.5);
-
-static const stp_simple_dither_range_t standard_r300_2880_1440_dither_ranges[] =
-{
- { 1.00, 0x1, 0, 1 },
-};
-
-DECLARE_INK(standard_r300_2880_1440, 1.0);
-
-static const stp_simple_dither_range_t photo_r300_2880_1440_dither_ranges[] =
-{
- { 0.35, 0x1, 1, 1 },
- { 1.00, 0x1, 0, 1 },
-};
-
-DECLARE_INK(photo_r300_2880_1440, 0.5);
-
-static const stp_simple_dither_range_t piezo_r300_2880_1440_quadtone_dither_ranges[]=
-{
- { PIEZO_0, 0x1, 0, 1 },
- { PIEZO_1, 0x1, 1, 1 },
- { PIEZO_2, 0x1, 2, 1 },
- { PIEZO_3, 0x1, 3, 1 },
-};
-
-DECLARE_INK(piezo_r300_2880_1440_quadtone, 0.5);
-
-
-
-static const escp2_variable_inkset_t standard_inks =
-{
- NULL,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t photo_inks =
-{
- NULL,
- &photo_cyan_ink,
- &photo_magenta_ink,
- NULL
-};
-
-static const escp2_variable_inkset_t piezo_quadtone_inks =
-{
- &piezo_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t escp2_multishot_standard_inks =
-{
- &standard_multishot_ink,
- &standard_multishot_ink,
- &standard_multishot_ink,
- &standard_multishot_ink
-};
-
-static const escp2_variable_inkset_t escp2_multishot_photo_inks =
-{
- &standard_multishot_ink,
- &photo_multishot_ink,
- &photo_multishot_ink,
- &standard_multishot_ink
-};
-
-static const escp2_variable_inkset_t escp2_multishot_photo2_inks =
-{
- &photo_multishot_ink,
- &photo_multishot_ink,
- &photo_multishot_ink,
- &standard_multishot_ink
-};
-
-static const escp2_variable_inkset_t escp2_multishot_photoj_inks =
-{
- &standard_multishot_ink,
- &photo_multishot_ink,
- &photo_multishot_ink,
- &photo_multishot_y_ink
-};
-
-static const escp2_variable_inkset_t piezo_multishot_quadtone_inks =
-{
- &piezo_multishot_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-
-static const escp2_variable_inkset_t escp2_6pl_standard_inks =
-{
- &standard_6pl_ink,
- &standard_6pl_ink,
- &standard_6pl_ink,
- &standard_6pl_ink
-};
-
-static const escp2_variable_inkset_t escp2_6pl_photo_inks =
-{
- &standard_6pl_ink,
- &photo_6pl_ink,
- &photo_6pl_ink,
- &standard_6pl_ink
-};
-
-static const escp2_variable_inkset_t escp2_6pl_photo2_inks =
-{
- &photo_6pl_ink,
- &photo_6pl_ink,
- &photo_6pl_ink,
- &standard_6pl_ink
-};
-
-static const escp2_variable_inkset_t escp2_6pl_photoj_inks =
-{
- &standard_6pl_ink,
- &photo_6pl_ink,
- &photo_6pl_ink,
- &photo_6pl_y_ink
-};
-
-static const escp2_variable_inkset_t piezo_6pl_quadtone_inks =
-{
- &piezo_6pl_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-
-static const escp2_variable_inkset_t escp2_6pl_1440_standard_inks =
-{
- &standard_6pl_1440_ink,
- &standard_6pl_1440_ink,
- &standard_6pl_1440_ink,
- &standard_6pl_1440_ink
-};
-
-static const escp2_variable_inkset_t escp2_6pl_1440_photo_inks =
-{
- &standard_6pl_1440_ink,
- &photo_6pl_1440_ink,
- &photo_6pl_1440_ink,
- &standard_6pl_1440_ink
-};
-
-static const escp2_variable_inkset_t piezo_6pl_1440_quadtone_inks =
-{
- &piezo_6pl_1440_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-
-static const escp2_variable_inkset_t escp2_6pl_2880_standard_inks =
-{
- &standard_6pl_2880_ink,
- &standard_6pl_2880_ink,
- &standard_6pl_2880_ink,
- &standard_6pl_2880_ink
-};
-
-static const escp2_variable_inkset_t escp2_6pl_2880_photo_inks =
-{
- &standard_6pl_2880_ink,
- &photo_6pl_2880_ink,
- &photo_6pl_2880_ink,
- &standard_6pl_2880_ink
-};
-
-static const escp2_variable_inkset_t piezo_6pl_2880_quadtone_inks =
-{
- &piezo_6pl_2880_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-
-static const escp2_variable_inkset_t escp2_680_multishot_standard_inks =
-{
- &standard_680_multishot_ink,
- &standard_680_multishot_ink,
- &standard_680_multishot_ink,
- &standard_680_multishot_ink
-};
-
-static const escp2_variable_inkset_t escp2_680_6pl_standard_inks =
-{
- &standard_680_6pl_ink,
- &standard_680_6pl_ink,
- &standard_680_6pl_ink,
- &standard_680_6pl_ink
-};
-
-static const escp2_variable_inkset_t piezo_680_multishot_quadtone_inks =
-{
- &piezo_680_multishot_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t piezo_680_6pl_quadtone_inks =
-{
- &piezo_680_6pl_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-
-static const escp2_variable_inkset_t escp2_4pl_standard_inks =
-{
- &standard_4pl_ink,
- &standard_4pl_ink,
- &standard_4pl_ink,
- &standard_4pl_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_photo_inks =
-{
- &standard_4pl_ink,
- &photo_4pl_ink,
- &photo_4pl_ink,
- &standard_4pl_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_photoj_inks =
-{
- &standard_4pl_ink,
- &photo_4pl_ink,
- &photo_4pl_ink,
- &photo_4pl_y_ink,
-};
-
-static const escp2_variable_inkset_t piezo_4pl_quadtone_inks =
-{
- &piezo_4pl_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t escp2_4pl_2880_standard_inks =
-{
- &standard_4pl_2880_ink,
- &standard_4pl_2880_ink,
- &standard_4pl_2880_ink,
- &standard_4pl_2880_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_2880_photo_inks =
-{
- &standard_4pl_2880_ink,
- &photo_4pl_2880_ink,
- &photo_4pl_2880_ink,
- &standard_4pl_2880_ink
-};
-
-static const escp2_variable_inkset_t piezo_4pl_2880_quadtone_inks =
-{
- &piezo_4pl_2880_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-
-static const escp2_variable_inkset_t escp2_6pl_standard_980_inks =
-{
- &standard_980_6pl_ink,
- &standard_980_6pl_ink,
- &standard_980_6pl_ink,
- &standard_980_6pl_ink
-};
-
-static const escp2_variable_inkset_t piezo_6pl_quadtone_980_inks =
-{
- &piezo_980_6pl_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t escp2_3pl_standard_inks =
-{
- &standard_3pl_ink,
- &standard_3pl_ink,
- &standard_3pl_ink,
- &standard_3pl_ink
-};
-
-static const escp2_variable_inkset_t escp2_3pl_1440_standard_inks =
-{
- &standard_3pl_1440_ink,
- &standard_3pl_1440_ink,
- &standard_3pl_1440_ink,
- &standard_3pl_1440_ink
-};
-
-static const escp2_variable_inkset_t escp2_3pl_2880_standard_inks =
-{
- &standard_3pl_2880_ink,
- &standard_3pl_2880_ink,
- &standard_3pl_2880_ink,
- &standard_3pl_2880_ink
-};
-
-static const escp2_variable_inkset_t piezo_3pl_quadtone_inks =
-{
- &piezo_3pl_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t piezo_3pl_1440_quadtone_inks =
-{
- &piezo_3pl_1440_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t piezo_3pl_2880_quadtone_inks =
-{
- &piezo_3pl_2880_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-
-static const escp2_variable_inkset_t escp2_2pl_2880_standard_inks =
-{
- &standard_2pl_2880_ink,
- &standard_2pl_2880_ink,
- &standard_2pl_2880_ink,
- &standard_2pl_2880_ink
-};
-
-static const escp2_variable_inkset_t escp2_2pl_2880_photo_inks =
-{
- &standard_2pl_2880_ink,
- &photo_2pl_2880_c_ink,
- &photo_2pl_2880_m_ink,
- &standard_2pl_2880_ink
-};
-
-static const escp2_variable_inkset_t escp2_2pl_2880_photo2_inks =
-{
- &photo_2pl_2880_ink,
- &photo_2pl_2880_ink,
- &photo_2pl_2880_ink,
- &standard_2pl_2880_ink
-};
-
-static const escp2_variable_inkset_t escp2_2pl_2880_photoj_inks =
-{
- &standard_2pl_2880_ink,
- &photo_2pl_2880_ink,
- &photo_2pl_2880_ink,
- &photo_2pl_2880_y_ink
-};
-
-static const escp2_variable_inkset_t piezo_2pl_2880_quadtone_inks =
-{
- &piezo_2pl_2880_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t escp2_2pl_1440_standard_inks =
-{
- &standard_2pl_1440_ink,
- &standard_2pl_1440_ink,
- &standard_2pl_1440_ink,
- &standard_2pl_1440_ink
-};
-
-static const escp2_variable_inkset_t escp2_2pl_1440_photo_inks =
-{
- &standard_2pl_1440_ink,
- &photo_2pl_1440_ink,
- &photo_2pl_1440_ink,
- &standard_2pl_1440_ink
-};
-
-static const escp2_variable_inkset_t escp2_2pl_1440_photoj_inks =
-{
- &standard_2pl_1440_ink,
- &photo_2pl_1440_ink,
- &photo_2pl_1440_ink,
- &photo_2pl_1440_y_ink,
-};
-
-static const escp2_variable_inkset_t piezo_2pl_1440_quadtone_inks =
-{
- &piezo_2pl_1440_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t escp2_2pl_720_standard_inks =
-{
- &standard_2pl_720_ink,
- &standard_2pl_720_ink,
- &standard_2pl_720_ink,
- &standard_2pl_720_ink
-};
-
-static const escp2_variable_inkset_t escp2_2pl_720_photo_inks =
-{
- &standard_2pl_720_ink,
- &photo_2pl_720_ink,
- &photo_2pl_720_ink,
- &standard_2pl_720_ink
-};
-
-static const escp2_variable_inkset_t escp2_2pl_720_photo2_inks =
-{
- &photo_2pl_720_ink,
- &photo_2pl_720_ink,
- &photo_2pl_720_ink,
- &standard_2pl_720_ink
-};
-
-static const escp2_variable_inkset_t escp2_2pl_720_photoj_inks =
-{
- &standard_2pl_720_ink,
- &photo_2pl_720_ink,
- &photo_2pl_720_ink,
- &photo_2pl_720_y_ink
-};
-
-static const escp2_variable_inkset_t piezo_2pl_720_quadtone_inks =
-{
- &piezo_2pl_720_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t escp2_2pl_360_standard_inks =
-{
- &standard_2pl_360_ink,
- &standard_2pl_360_ink,
- &standard_2pl_360_ink,
- &standard_2pl_360_ink
-};
-
-static const escp2_variable_inkset_t escp2_2pl_360_photo_inks =
-{
- &standard_2pl_360_ink,
- &photo_2pl_360_ink,
- &photo_2pl_360_ink,
- &standard_2pl_360_ink
-};
-
-static const escp2_variable_inkset_t escp2_2pl_360_photo2_inks =
-{
- &photo_2pl_360_ink,
- &photo_2pl_360_ink,
- &photo_2pl_360_ink,
- &standard_2pl_360_ink
-};
-
-static const escp2_variable_inkset_t escp2_2pl_360_photoj_inks =
-{
- &standard_2pl_360_ink,
- &photo_2pl_360_ink,
- &photo_2pl_360_ink,
- &photo_2pl_360_y_ink
-};
-
-static const escp2_variable_inkset_t piezo_2pl_360_quadtone_inks =
-{
- &piezo_2pl_360_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-
-static const escp2_variable_inkset_t escp2_x80_multishot_standard_inks =
-{
- &standard_x80_multishot_ink,
- &standard_x80_multishot_ink,
- &standard_x80_multishot_ink,
- &standard_x80_multishot_ink
-};
-
-static const escp2_variable_inkset_t escp2_x80_6pl_standard_inks =
-{
- &standard_x80_6pl_ink,
- &standard_x80_6pl_ink,
- &standard_x80_6pl_ink,
- &standard_x80_6pl_ink
-};
-
-static const escp2_variable_inkset_t escp2_x80_1440_6pl_standard_inks =
-{
- &standard_x80_1440_6pl_ink,
- &standard_x80_1440_6pl_ink,
- &standard_x80_1440_6pl_ink,
- &standard_x80_1440_6pl_ink
-};
-
-static const escp2_variable_inkset_t escp2_x80_2880_6pl_standard_inks =
-{
- &standard_x80_2880_6pl_ink,
- &standard_x80_2880_6pl_ink,
- &standard_x80_2880_6pl_ink,
- &standard_x80_2880_6pl_ink
-};
-
-static const escp2_variable_inkset_t piezo_x80_multishot_quadtone_inks =
-{
- &piezo_x80_multishot_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t piezo_x80_6pl_quadtone_inks =
-{
- &piezo_x80_6pl_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t piezo_x80_1440_6pl_quadtone_inks =
-{
- &piezo_x80_1440_6pl_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t piezo_x80_2880_6pl_quadtone_inks =
-{
- &piezo_x80_2880_6pl_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-
-static const escp2_variable_inkset_t escp2_pigment_standard_inks =
-{
- &standard_pigment_ink,
- &standard_pigment_ink,
- &standard_pigment_ink,
- &standard_pigment_ink
-};
-
-static const escp2_variable_inkset_t escp2_pigment_photo_inks =
-{
- &standard_pigment_ink,
- &photo_pigment_ink,
- &photo_pigment_ink,
- &standard_pigment_ink
-};
-
-static const escp2_variable_inkset_t piezo_pigment_quadtone_inks =
-{
- &piezo_pigment_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-
-static const escp2_variable_inkset_t escp2_multishot_pigment_standard_inks =
-{
- &standard_multishot_pigment_ink,
- &standard_multishot_pigment_ink,
- &standard_multishot_pigment_ink,
- &standard_multishot_pigment_ink
-};
-
-static const escp2_variable_inkset_t piezo_multishot_pigment_quadtone_inks =
-{
- &piezo_multishot_pigment_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t escp2_economy_pigment_standard_inks =
-{
- &standard_economy_pigment_ink,
- &standard_economy_pigment_ink,
- &standard_economy_pigment_ink,
- &standard_economy_pigment_ink
-};
-
-static const escp2_variable_inkset_t piezo_economy_pigment_quadtone_inks =
-{
- &piezo_economy_pigment_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-
-static const escp2_variable_inkset_t escp2_6pl_pigment_standard_inks =
-{
- &standard_6pl_pigment_ink,
- &standard_6pl_pigment_ink,
- &standard_6pl_pigment_ink,
- &standard_6pl_pigment_ink
-};
-
-static const escp2_variable_inkset_t piezo_6pl_pigment_quadtone_inks =
-{
- &piezo_6pl_pigment_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-
-static const escp2_variable_inkset_t escp2_4pl_pigment_low_standard_inks =
-{
- &standard_4pl_pigment_low_ink,
- &standard_4pl_pigment_low_ink,
- &standard_4pl_pigment_low_ink,
- &standard_4pl_pigment_low_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_pigment_low_photo_inks =
-{
- &standard_4pl_pigment_low_ink,
- &photo_4pl_pigment_low_c_ink,
- &photo_4pl_pigment_low_m_ink,
- &standard_4pl_pigment_low_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_pigment_low_photo2_inks =
-{
- &photo_4pl_pigment_low_k_ink,
- &photo_4pl_pigment_low_c_ink,
- &photo_4pl_pigment_low_m_ink,
- &standard_4pl_pigment_low_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_pigment_low_photoj_inks =
-{
- &standard_4pl_pigment_low_ink,
- &photo_4pl_pigment_low_c_ink,
- &photo_4pl_pigment_low_m_ink,
- &photo_4pl_pigment_low_y_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_pigment_standard_inks =
-{
- &standard_4pl_pigment_ink,
- &standard_4pl_pigment_ink,
- &standard_4pl_pigment_ink,
- &standard_4pl_pigment_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_pigment_photo_inks =
-{
- &standard_4pl_pigment_ink,
- &photo_4pl_pigment_c_ink,
- &photo_4pl_pigment_m_ink,
- &standard_4pl_pigment_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_pigment_photo2_inks =
-{
- &photo_4pl_pigment_k_ink,
- &photo_4pl_pigment_c_ink,
- &photo_4pl_pigment_m_ink,
- &standard_4pl_pigment_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_pigment_photoj_inks =
-{
- &standard_4pl_pigment_ink,
- &photo_4pl_pigment_c_ink,
- &photo_4pl_pigment_m_ink,
- &photo_4pl_pigment_y_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_pigment_1440_standard_inks =
-{
- &standard_4pl_pigment_1440_ink,
- &standard_4pl_pigment_1440_ink,
- &standard_4pl_pigment_1440_ink,
- &standard_4pl_pigment_1440_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_pigment_1440_photo_inks =
-{
- &standard_4pl_pigment_1440_ink,
- &photo_4pl_pigment_1440_c_ink,
- &photo_4pl_pigment_1440_m_ink,
- &standard_4pl_pigment_1440_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_pigment_1440_photo2_inks =
-{
- &photo_4pl_pigment_1440_k_ink,
- &photo_4pl_pigment_1440_c_ink,
- &photo_4pl_pigment_1440_m_ink,
- &standard_4pl_pigment_1440_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_pigment_1440_photoj_inks =
-{
- &standard_4pl_pigment_1440_ink,
- &photo_4pl_pigment_1440_c_ink,
- &photo_4pl_pigment_1440_m_ink,
- &photo_4pl_pigment_1440_y_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_pigment_2880_standard_inks =
-{
- &standard_4pl_pigment_2880_ink,
- &standard_4pl_pigment_2880_ink,
- &standard_4pl_pigment_2880_ink,
- &standard_4pl_pigment_2880_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_pigment_2880_photo_inks =
-{
- &standard_4pl_pigment_2880_ink,
- &photo_4pl_pigment_2880_c_ink,
- &photo_4pl_pigment_2880_m_ink,
- &standard_4pl_pigment_2880_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_pigment_2880_photo2_inks =
-{
- &photo_4pl_pigment_2880_k_ink,
- &photo_4pl_pigment_2880_c_ink,
- &photo_4pl_pigment_2880_m_ink,
- &standard_4pl_pigment_2880_ink
-};
-
-static const escp2_variable_inkset_t escp2_4pl_pigment_2880_photoj_inks =
-{
- &standard_4pl_pigment_2880_ink,
- &photo_4pl_pigment_2880_c_ink,
- &photo_4pl_pigment_2880_m_ink,
- &photo_4pl_pigment_2880_y_ink
-};
-
-
-static const escp2_variable_inkset_t escp2_3pl_pigment_standard_inks =
-{
- &standard_3pl_pigment_ink,
- &standard_3pl_pigment_ink,
- &standard_3pl_pigment_ink,
- &standard_3pl_pigment_ink
-};
-
-static const escp2_variable_inkset_t piezo_3pl_pigment_quadtone_inks =
-{
- &piezo_3pl_pigment_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t escp2_3pl_pigment_2880_standard_inks =
-{
- &standard_3pl_pigment_2880_ink,
- &standard_3pl_pigment_2880_ink,
- &standard_3pl_pigment_2880_ink,
- &standard_3pl_pigment_2880_ink
-};
-
-static const escp2_variable_inkset_t piezo_3pl_pigment_2880_quadtone_inks =
-{
- &piezo_3pl_pigment_2880_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-
-static const escp2_variable_inkset_t spro10000_standard_inks =
-{
- &spro10000_standard_ink,
- &spro10000_standard_ink,
- &spro10000_standard_ink,
- &spro10000_standard_ink
-};
-
-static const escp2_variable_inkset_t spro10000_photo_inks =
-{
- &spro10000_standard_ink,
- &spro10000_photo_ink,
- &spro10000_photo_ink,
- &spro10000_standard_ink
-};
-
-
-static const escp2_variable_inkset_t escp2_r300_360_standard_inks =
-{
- &standard_r300_360_ink,
- &standard_r300_360_ink,
- &standard_r300_360_ink,
- &standard_r300_360_ink
-};
-
-static const escp2_variable_inkset_t escp2_r300_360_photo_inks =
-{
- &standard_r300_360_ink,
- &photo_r300_360_ink,
- &photo_r300_360_ink,
- &standard_r300_360_ink
-};
-
-static const escp2_variable_inkset_t piezo_r300_360_quadtone_inks =
-{
- &piezo_r300_360_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t escp2_r300_720_standard_inks =
-{
- &standard_r300_720_ink,
- &standard_r300_720_ink,
- &standard_r300_720_ink,
- &standard_r300_720_ink
-};
-
-static const escp2_variable_inkset_t escp2_r300_720_photo_inks =
-{
- &standard_r300_720_ink,
- &photo_r300_720_ink,
- &photo_r300_720_ink,
- &standard_r300_720_ink
-};
-
-static const escp2_variable_inkset_t piezo_r300_720_quadtone_inks =
-{
- &piezo_r300_720_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t escp2_r300_1440_standard_inks =
-{
- &standard_r300_1440_ink,
- &standard_r300_1440_ink,
- &standard_r300_1440_ink,
- &standard_r300_1440_ink
-};
-
-static const escp2_variable_inkset_t escp2_r300_1440_photo_inks =
-{
- &standard_r300_1440_ink,
- &photo_r300_1440_ink,
- &photo_r300_1440_ink,
- &standard_r300_1440_ink
-};
-
-static const escp2_variable_inkset_t piezo_r300_1440_quadtone_inks =
-{
- &piezo_r300_1440_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t escp2_r300_2880_standard_inks =
-{
- &standard_r300_2880_ink,
- &standard_r300_2880_ink,
- &standard_r300_2880_ink,
- &standard_r300_2880_ink
-};
-
-static const escp2_variable_inkset_t escp2_r300_2880_photo_inks =
-{
- &standard_r300_2880_ink,
- &photo_r300_2880_ink,
- &photo_r300_2880_ink,
- &standard_r300_2880_ink
-};
-
-static const escp2_variable_inkset_t piezo_r300_2880_quadtone_inks =
-{
- &piezo_r300_2880_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-static const escp2_variable_inkset_t escp2_r300_2880_1440_standard_inks =
-{
- &standard_r300_2880_1440_ink,
- &standard_r300_2880_1440_ink,
- &standard_r300_2880_1440_ink,
- &standard_r300_2880_1440_ink
-};
-
-static const escp2_variable_inkset_t escp2_r300_2880_1440_photo_inks =
-{
- &standard_r300_2880_1440_ink,
- &photo_r300_2880_1440_ink,
- &photo_r300_2880_1440_ink,
- &standard_r300_2880_1440_ink
-};
-
-static const escp2_variable_inkset_t piezo_r300_2880_1440_quadtone_inks =
-{
- &piezo_r300_2880_1440_quadtone_ink,
- NULL,
- NULL,
- NULL
-};
-
-
-
-static const escp2_variable_inklist_t simple_inks =
-{
- {
- &standard_inks,
- &standard_inks,
- &standard_inks,
- &standard_inks,
- &standard_inks,
- &standard_inks,
- &standard_inks,
- &standard_inks,
- &standard_inks,
- },
- {
- &photo_inks,
- &photo_inks,
- &photo_inks,
- &photo_inks,
- &photo_inks,
- &photo_inks,
- &photo_inks,
- &photo_inks,
- &photo_inks,
- },
- { NULL, },
- { NULL, },
- {
- &piezo_quadtone_inks,
- &piezo_quadtone_inks,
- &piezo_quadtone_inks,
- &piezo_quadtone_inks,
- &piezo_quadtone_inks,
- &piezo_quadtone_inks,
- &piezo_quadtone_inks,
- &piezo_quadtone_inks,
- &piezo_quadtone_inks,
- }
-};
-
-static const escp2_variable_inklist_t variable_6pl_inks =
-{
- {
- &escp2_6pl_standard_inks,
- &escp2_6pl_standard_inks,
- &escp2_6pl_standard_inks,
- &escp2_6pl_standard_inks,
- &escp2_6pl_standard_inks,
- &escp2_6pl_1440_standard_inks,
- &escp2_6pl_2880_standard_inks,
- &escp2_6pl_2880_standard_inks,
- &escp2_6pl_2880_standard_inks
- },
- {
- &escp2_6pl_photo_inks,
- &escp2_6pl_photo_inks,
- &escp2_6pl_photo_inks,
- &escp2_6pl_photo_inks,
- &escp2_6pl_photo_inks,
- &escp2_6pl_1440_photo_inks,
- &escp2_6pl_2880_photo_inks,
- &escp2_6pl_2880_photo_inks,
- &escp2_6pl_2880_photo_inks
- },
- { NULL, },
- { NULL, },
- {
- &piezo_6pl_quadtone_inks,
- &piezo_6pl_quadtone_inks,
- &piezo_6pl_quadtone_inks,
- &piezo_6pl_quadtone_inks,
- &piezo_6pl_quadtone_inks,
- &piezo_6pl_1440_quadtone_inks,
- &piezo_6pl_2880_quadtone_inks,
- &piezo_6pl_2880_quadtone_inks,
- &piezo_6pl_2880_quadtone_inks
- },
-};
-
-static const escp2_variable_inklist_t variable_x80_6pl_inks =
-{
- {
- &escp2_x80_multishot_standard_inks,
- &escp2_x80_multishot_standard_inks,
- &escp2_x80_multishot_standard_inks,
- &escp2_x80_multishot_standard_inks,
- &escp2_x80_6pl_standard_inks,
- &escp2_x80_1440_6pl_standard_inks,
- &escp2_x80_2880_6pl_standard_inks,
- &escp2_x80_2880_6pl_standard_inks,
- &escp2_x80_2880_6pl_standard_inks,
- },
- { NULL, },
- { NULL, },
- { NULL, },
- {
- &piezo_x80_multishot_quadtone_inks,
- &piezo_x80_multishot_quadtone_inks,
- &piezo_x80_multishot_quadtone_inks,
- &piezo_x80_multishot_quadtone_inks,
- &piezo_x80_6pl_quadtone_inks,
- &piezo_x80_1440_6pl_quadtone_inks,
- &piezo_x80_2880_6pl_quadtone_inks,
- &piezo_x80_2880_6pl_quadtone_inks,
- &piezo_x80_2880_6pl_quadtone_inks,
- }
-};
-
-static const escp2_variable_inklist_t variable_4pl_inks =
-{
- {
- &escp2_multishot_standard_inks,
- &escp2_multishot_standard_inks,
- &escp2_multishot_standard_inks,
- &escp2_multishot_standard_inks,
- &escp2_6pl_standard_inks,
- &escp2_4pl_standard_inks,
- &escp2_4pl_2880_standard_inks,
- &escp2_4pl_2880_standard_inks,
- &escp2_4pl_2880_standard_inks,
- },
- {
- &escp2_multishot_photo_inks,
- &escp2_multishot_photo_inks,
- &escp2_multishot_photo_inks,
- &escp2_multishot_photo_inks,
- &escp2_6pl_photo_inks,
- &escp2_4pl_photo_inks,
- &escp2_4pl_2880_photo_inks,
- &escp2_4pl_2880_photo_inks,
- &escp2_4pl_2880_photo_inks
- },
- { NULL, },
- { NULL, },
- {
- &piezo_multishot_quadtone_inks,
- &piezo_multishot_quadtone_inks,
- &piezo_multishot_quadtone_inks,
- &piezo_multishot_quadtone_inks,
- &piezo_6pl_quadtone_inks,
- &piezo_4pl_quadtone_inks,
- &piezo_4pl_2880_quadtone_inks,
- &piezo_4pl_2880_quadtone_inks,
- &piezo_4pl_2880_quadtone_inks,
- }
-};
-
-static const escp2_variable_inklist_t variable_3pl_pmg_inks =
-{
- {
- &escp2_r300_360_standard_inks,
- &escp2_r300_360_standard_inks,
- &escp2_r300_360_standard_inks,
- &escp2_r300_360_standard_inks,
- &escp2_r300_720_standard_inks,
- &escp2_r300_1440_standard_inks,
- &escp2_r300_2880_standard_inks,
- &escp2_r300_2880_1440_standard_inks,
- &escp2_r300_2880_1440_standard_inks,
- },
- {
- &escp2_r300_360_photo_inks,
- &escp2_r300_360_photo_inks,
- &escp2_r300_360_photo_inks,
- &escp2_r300_360_photo_inks,
- &escp2_r300_720_photo_inks,
- &escp2_r300_1440_photo_inks,
- &escp2_r300_2880_photo_inks,
- &escp2_r300_2880_1440_photo_inks,
- &escp2_r300_2880_1440_photo_inks,
- },
- { NULL, },
- { NULL, },
- {
- &piezo_r300_360_quadtone_inks,
- &piezo_r300_360_quadtone_inks,
- &piezo_r300_360_quadtone_inks,
- &piezo_r300_360_quadtone_inks,
- &piezo_r300_720_quadtone_inks,
- &piezo_r300_1440_quadtone_inks,
- &piezo_r300_2880_quadtone_inks,
- &piezo_r300_2880_1440_quadtone_inks,
- &piezo_r300_2880_1440_quadtone_inks,
- }
-};
-
-static const escp2_variable_inklist_t variable_680_4pl_inks =
-{
- {
- &escp2_680_multishot_standard_inks,
- &escp2_680_multishot_standard_inks,
- &escp2_680_multishot_standard_inks,
- &escp2_680_multishot_standard_inks,
- &escp2_680_6pl_standard_inks,
- &escp2_4pl_standard_inks,
- &escp2_4pl_2880_standard_inks,
- &escp2_4pl_2880_standard_inks,
- &escp2_4pl_2880_standard_inks,
- },
- { NULL, },
- { NULL, },
- { NULL, },
- {
- &piezo_680_multishot_quadtone_inks,
- &piezo_680_multishot_quadtone_inks,
- &piezo_680_multishot_quadtone_inks,
- &piezo_680_multishot_quadtone_inks,
- &piezo_680_6pl_quadtone_inks,
- &piezo_4pl_quadtone_inks,
- &piezo_4pl_2880_quadtone_inks,
- &piezo_4pl_2880_quadtone_inks,
- &piezo_4pl_2880_quadtone_inks,
- }
-};
-
-static const escp2_variable_inklist_t variable_3pl_inks =
-{
- {
- &escp2_multishot_standard_inks,
- &escp2_multishot_standard_inks,
- &escp2_6pl_standard_980_inks,
- &escp2_6pl_standard_980_inks,
- &escp2_3pl_standard_inks,
- &escp2_3pl_1440_standard_inks,
- &escp2_3pl_2880_standard_inks,
- &escp2_3pl_2880_standard_inks,
- &escp2_3pl_2880_standard_inks,
- },
- { NULL, },
- { NULL, },
- { NULL, },
- {
- &piezo_multishot_quadtone_inks,
- &piezo_multishot_quadtone_inks,
- &piezo_6pl_quadtone_980_inks,
- &piezo_6pl_quadtone_980_inks,
- &piezo_3pl_quadtone_inks,
- &piezo_3pl_1440_quadtone_inks,
- &piezo_3pl_2880_quadtone_inks,
- &piezo_3pl_2880_quadtone_inks,
- &piezo_3pl_2880_quadtone_inks,
- }
-};
-
-static const escp2_variable_inklist_t variable_2pl_inks =
-{
- {
- &escp2_2pl_360_standard_inks,
- &escp2_2pl_360_standard_inks,
- &escp2_2pl_360_standard_inks,
- &escp2_2pl_360_standard_inks,
- &escp2_2pl_720_standard_inks,
- &escp2_2pl_1440_standard_inks,
- &escp2_2pl_2880_standard_inks,
- &escp2_2pl_2880_standard_inks,
- &escp2_2pl_2880_standard_inks,
- },
- {
- &escp2_2pl_360_photo_inks,
- &escp2_2pl_360_photo_inks,
- &escp2_2pl_360_photo_inks,
- &escp2_2pl_360_photo_inks,
- &escp2_2pl_720_photo_inks,
- &escp2_2pl_1440_photo_inks,
- &escp2_2pl_2880_photo_inks,
- &escp2_2pl_2880_photo_inks,
- &escp2_2pl_2880_photo_inks
- },
- {
- &escp2_2pl_360_photoj_inks,
- &escp2_2pl_360_photoj_inks,
- &escp2_2pl_360_photoj_inks,
- &escp2_2pl_360_photoj_inks,
- &escp2_2pl_720_photoj_inks,
- &escp2_2pl_1440_photoj_inks,
- &escp2_2pl_2880_photoj_inks,
- &escp2_2pl_2880_photoj_inks,
- &escp2_2pl_2880_photoj_inks
- },
- { NULL, },
- {
- &piezo_2pl_360_quadtone_inks,
- &piezo_2pl_360_quadtone_inks,
- &piezo_2pl_360_quadtone_inks,
- &piezo_2pl_360_quadtone_inks,
- &piezo_2pl_720_quadtone_inks,
- &piezo_2pl_1440_quadtone_inks,
- &piezo_2pl_2880_quadtone_inks,
- &piezo_2pl_2880_quadtone_inks,
- &piezo_2pl_2880_quadtone_inks,
- }
-};
-
-static const escp2_variable_inklist_t variable_pigment_inks =
-{
- {
- &escp2_pigment_standard_inks,
- &escp2_pigment_standard_inks,
- &escp2_pigment_standard_inks,
- &escp2_pigment_standard_inks,
- &escp2_pigment_standard_inks,
- &escp2_pigment_standard_inks,
- &escp2_pigment_standard_inks,
- &escp2_pigment_standard_inks,
- &escp2_pigment_standard_inks
- },
- {
- &escp2_pigment_photo_inks,
- &escp2_pigment_photo_inks,
- &escp2_pigment_photo_inks,
- &escp2_pigment_photo_inks,
- &escp2_pigment_photo_inks,
- &escp2_pigment_photo_inks,
- &escp2_pigment_photo_inks,
- &escp2_pigment_photo_inks,
- &escp2_pigment_photo_inks
- },
- { NULL, },
- { NULL, },
- {
- &piezo_pigment_quadtone_inks,
- &piezo_pigment_quadtone_inks,
- &piezo_pigment_quadtone_inks,
- &piezo_pigment_quadtone_inks,
- &piezo_pigment_quadtone_inks,
- &piezo_pigment_quadtone_inks,
- &piezo_pigment_quadtone_inks,
- &piezo_pigment_quadtone_inks,
- &piezo_pigment_quadtone_inks
- },
-};
-
-static const escp2_variable_inklist_t variable_4pl_pigment_inks =
-{
- {
- &escp2_4pl_pigment_low_standard_inks,
- &escp2_4pl_pigment_low_standard_inks,
- &escp2_4pl_pigment_low_standard_inks,
- &escp2_4pl_pigment_low_standard_inks,
- &escp2_4pl_pigment_standard_inks,
- &escp2_4pl_pigment_1440_standard_inks,
- &escp2_4pl_pigment_2880_standard_inks,
- &escp2_4pl_pigment_2880_standard_inks,
- &escp2_4pl_pigment_2880_standard_inks,
- },
- {
- &escp2_4pl_pigment_low_photo_inks,
- &escp2_4pl_pigment_low_photo_inks,
- &escp2_4pl_pigment_low_photo_inks,
- &escp2_4pl_pigment_low_photo_inks,
- &escp2_4pl_pigment_photo_inks,
- &escp2_4pl_pigment_1440_photo_inks,
- &escp2_4pl_pigment_2880_photo_inks,
- &escp2_4pl_pigment_2880_photo_inks,
- &escp2_4pl_pigment_2880_photo_inks
- },
- { NULL, },
- {
- &escp2_4pl_pigment_low_photo2_inks,
- &escp2_4pl_pigment_low_photo2_inks,
- &escp2_4pl_pigment_low_photo2_inks,
- &escp2_4pl_pigment_low_photo2_inks,
- &escp2_4pl_pigment_photo2_inks,
- &escp2_4pl_pigment_1440_photo2_inks,
- &escp2_4pl_pigment_2880_photo2_inks,
- &escp2_4pl_pigment_2880_photo2_inks,
- &escp2_4pl_pigment_2880_photo2_inks
- },
-};
-
-static const escp2_variable_inklist_t variable_3pl_pigment_inks =
-{
- {
- &escp2_economy_pigment_standard_inks,
- &escp2_economy_pigment_standard_inks,
- &escp2_multishot_pigment_standard_inks,
- &escp2_multishot_pigment_standard_inks,
- &escp2_6pl_pigment_standard_inks,
- &escp2_3pl_pigment_standard_inks,
- &escp2_3pl_pigment_2880_standard_inks,
- &escp2_3pl_pigment_2880_standard_inks,
- &escp2_3pl_pigment_2880_standard_inks,
- },
- { NULL, },
- { NULL, },
- { NULL, },
- {
- &piezo_economy_pigment_quadtone_inks,
- &piezo_economy_pigment_quadtone_inks,
- &piezo_multishot_pigment_quadtone_inks,
- &piezo_multishot_pigment_quadtone_inks,
- &piezo_6pl_pigment_quadtone_inks,
- &piezo_3pl_pigment_quadtone_inks,
- &piezo_3pl_pigment_2880_quadtone_inks,
- &piezo_3pl_pigment_2880_quadtone_inks,
- &piezo_3pl_pigment_2880_quadtone_inks,
- }
-};
-
-static const escp2_variable_inklist_t spro10000_inks =
-{
- {
- &standard_inks,
- &spro10000_standard_inks,
- &spro10000_standard_inks,
- &spro10000_standard_inks,
- &spro10000_standard_inks,
- &spro10000_standard_inks,
- &spro10000_standard_inks,
- &spro10000_standard_inks,
- &spro10000_standard_inks
- },
- {
- &photo_inks,
- &spro10000_photo_inks,
- &spro10000_photo_inks,
- &spro10000_photo_inks,
- &spro10000_photo_inks,
- &spro10000_photo_inks,
- &spro10000_photo_inks,
- &spro10000_photo_inks,
- &spro10000_photo_inks
- }
-};
-
-
-#define DECLARE_INK_CHANNEL(name) \
-static const ink_channel_t name##_channels = \
-{ \
- name##_subchannels, \
- sizeof(name##_subchannels) / sizeof(physical_subchannel_t), \
-}
-
-static const physical_subchannel_t standard_black_subchannels[] =
-{
- { 0, -1, 0 }
-};
-
-DECLARE_INK_CHANNEL(standard_black);
-
-static const physical_subchannel_t x80_black_subchannels[] =
-{
- { 0, -1, 48 }
-};
-
-DECLARE_INK_CHANNEL(x80_black);
-
-static const physical_subchannel_t c80_black_subchannels[] =
-{
- { 0, -1, 0 }
-};
-
-DECLARE_INK_CHANNEL(c80_black);
-
-static const physical_subchannel_t c64_black_subchannels[] =
-{
- { 0, -1, 0 }
-};
-
-DECLARE_INK_CHANNEL(c64_black);
-
-static const physical_subchannel_t standard_cyan_subchannels[] =
-{
- { 2, -1, 0 }
-};
-
-DECLARE_INK_CHANNEL(standard_cyan);
-
-static const physical_subchannel_t x80_cyan_subchannels[] =
-{
- { 2, -1, 96 }
-};
-
-DECLARE_INK_CHANNEL(x80_cyan);
-
-static const physical_subchannel_t c80_cyan_subchannels[] =
-{
- { 2, -1, 0 }
-};
-
-DECLARE_INK_CHANNEL(c80_cyan);
-
-static const physical_subchannel_t c64_cyan_subchannels[] =
-{
- { 2, -1, 0 }
-};
-
-DECLARE_INK_CHANNEL(c64_cyan);
-
-static const physical_subchannel_t standard_magenta_subchannels[] =
-{
- { 1, -1, 0 }
-};
-
-DECLARE_INK_CHANNEL(standard_magenta);
-
-static const physical_subchannel_t x80_magenta_subchannels[] =
-{
- { 1, -1, 48 }
-};
-
-DECLARE_INK_CHANNEL(x80_magenta);
-
-static const physical_subchannel_t c80_magenta_subchannels[] =
-{
- { 1, -1, 120 }
-};
-
-DECLARE_INK_CHANNEL(c80_magenta);
-
-static const physical_subchannel_t c64_magenta_subchannels[] =
-{
- { 1, -1, 90 }
-};
-
-DECLARE_INK_CHANNEL(c64_magenta);
-
-static const physical_subchannel_t standard_yellow_subchannels[] =
-{
- { 4, -1, 0 }
-};
-
-DECLARE_INK_CHANNEL(standard_yellow);
-
-static const physical_subchannel_t x80_yellow_subchannels[] =
-{
- { 4, -1, 0 }
-};
-
-DECLARE_INK_CHANNEL(x80_yellow);
-
-static const physical_subchannel_t c80_yellow_subchannels[] =
-{
- { 4, -1, 240 }
-};
-
-DECLARE_INK_CHANNEL(c80_yellow);
-
-static const physical_subchannel_t c64_yellow_subchannels[] =
-{
- { 4, -1, 180 }
-};
-
-DECLARE_INK_CHANNEL(c64_yellow);
-
-static const physical_subchannel_t photo_black_subchannels[] =
-{
- { 0, 0, 0 }
-};
-
-DECLARE_INK_CHANNEL(photo_black);
-
-static const physical_subchannel_t photo_cyan_subchannels[] =
-{
- { 2, 0, 0 },
- { 2, 1, 0 }
-};
-
-DECLARE_INK_CHANNEL(photo_cyan);
-
-static const physical_subchannel_t photo_magenta_subchannels[] =
-{
- { 1, 0, 0 },
- { 1, 1, 0 }
-};
-
-DECLARE_INK_CHANNEL(photo_magenta);
-
-static const physical_subchannel_t photo_yellow_subchannels[] =
-{
- { 4, 0, 0 }
-};
-
-DECLARE_INK_CHANNEL(photo_yellow);
-
-/* For Japanese 7-color printers, with dark yellow */
-static const physical_subchannel_t photo2_yellow_subchannels[] =
-{
- { 4, 0, 0 },
- { 4, 2, 0 }
-};
-
-DECLARE_INK_CHANNEL(photo2_yellow);
-
-static const physical_subchannel_t photo2_black_subchannels[] =
-{
- { 0, 0, 0 },
- { 0, 1, 0 }
-};
-
-DECLARE_INK_CHANNEL(photo2_black);
-
-static const physical_subchannel_t quadtone_subchannels[] =
-{
- { 4, -1, 0 },
- { 1, -1, 0 },
- { 2, -1, 0 },
- { 0, -1, 0 }
-};
-
-DECLARE_INK_CHANNEL(quadtone);
-
-static const physical_subchannel_t c80_quadtone_subchannels[] =
-{
- { 4, -1, 240 },
- { 1, -1, 120 },
- { 2, -1, 0 },
- { 0, -1, 0 }
-};
-
-DECLARE_INK_CHANNEL(c80_quadtone);
-
-static const physical_subchannel_t c64_quadtone_subchannels[] =
-{
- { 4, -1, 180 },
- { 1, -1, 90 },
- { 2, -1, 0 },
- { 0, -1, 0 }
-};
-
-DECLARE_INK_CHANNEL(c64_quadtone);
-
-static const physical_subchannel_t f360_standard_cyan_subchannels[] =
-{
- { 2, -1, 1 }
-};
-
-DECLARE_INK_CHANNEL(f360_standard_cyan);
-
-static const physical_subchannel_t f360_standard_magenta_subchannels[] =
-{
- { 1, -1, 1 }
-};
-
-DECLARE_INK_CHANNEL(f360_standard_magenta);
-
-static const physical_subchannel_t f360_photo_black_subchannels[] =
-{
- { 0, 0, 1 }
-};
-
-DECLARE_INK_CHANNEL(f360_photo_black);
-
-static const physical_subchannel_t f360_photo_yellow_subchannels[] =
-{
- { 4, 0, 1 }
-};
-
-DECLARE_INK_CHANNEL(f360_photo_yellow);
-
-static const physical_subchannel_t f360_photo2_yellow_subchannels[] =
-{
- { 4, 2, 0 },
- { 4, 0, 1 }
-};
-
-DECLARE_INK_CHANNEL(f360_photo2_yellow);
-
-static const physical_subchannel_t f360_photo2_black_subchannels[] =
-{
- { 0, 0, 1 },
- { 0, 1, 0 }
-};
-
-DECLARE_INK_CHANNEL(f360_photo2_black);
-
-static const physical_subchannel_t f360_photo_cyan_subchannels[] =
-{
- { 2, 0, 1 },
- { 2, 1, 0 }
-};
-
-DECLARE_INK_CHANNEL(f360_photo_cyan);
-
-static const physical_subchannel_t f360_photo_magenta_subchannels[] =
-{
- { 1, 0, 1 },
- { 1, 1, 0 }
-};
-
-DECLARE_INK_CHANNEL(f360_photo_magenta);
-
-
-
-static const escp2_inkname_t three_color_composite_inkset =
-{
- "RGB", N_ ("Three Color Composite"), 1, INKSET_CMYK, 0, 0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- NULL, &standard_cyan_channels,
- &standard_magenta_channels, &standard_yellow_channels
- }
-};
-
-static const escp2_inkname_t x80_three_color_composite_inkset =
-{
- "RGB", N_ ("Three Color Composite"), 1, INKSET_CMYK, 0, 0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- NULL, &x80_cyan_channels,
- &x80_magenta_channels, &x80_yellow_channels
- }
-};
-
-static const escp2_inkname_t c80_three_color_composite_inkset =
-{
- "RGB", N_ ("Three Color Composite"), 1, INKSET_CMYK, 0, 0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- NULL, &c80_cyan_channels,
- &c80_magenta_channels, &c80_yellow_channels
- }
-};
-
-static const escp2_inkname_t c64_three_color_composite_inkset =
-{
- "RGB", N_ ("Three Color Composite"), 1, INKSET_CMYK, 0, 0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- NULL, &c64_cyan_channels,
- &c64_magenta_channels, &c64_yellow_channels
- }
-};
-
-static const escp2_inkname_t four_color_standard_inkset =
-{
- "CMYK", N_ ("Four Color Standard"), 1, INKSET_CMYK, .25, 1.0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- &standard_black_channels, &standard_cyan_channels,
- &standard_magenta_channels, &standard_yellow_channels
- }
-};
-
-static const escp2_inkname_t x80_four_color_standard_inkset =
-{
- "CMYK", N_ ("Four Color Standard"), 1, INKSET_CMYK, .25, 1.0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- &x80_black_channels, &x80_cyan_channels,
- &x80_magenta_channels, &x80_yellow_channels
- }
-};
-
-static const escp2_inkname_t c80_four_color_standard_inkset =
-{
- "CMYK", N_ ("Four Color Standard"), 1, INKSET_CMYK, .25, 1.0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- &c80_black_channels, &c80_cyan_channels,
- &c80_magenta_channels, &c80_yellow_channels
- }
-};
-
-static const escp2_inkname_t c64_four_color_standard_inkset =
-{
- "CMYK", N_ ("Four Color Standard"), 1, INKSET_CMYK, .25, 1.0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- &c64_black_channels, &c64_cyan_channels,
- &c64_magenta_channels, &c64_yellow_channels
- }
-};
-
-static const escp2_inkname_t six_color_photo_inkset =
-{
- "PhotoCMYK", N_ ("Six Color Photo"), 1, INKSET_CcMmYK, .5, 1.0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- &photo_black_channels, &photo_cyan_channels,
- &photo_magenta_channels, &photo_yellow_channels
- }
-};
-
-static const escp2_inkname_t five_color_photo_composite_inkset =
-{
- "PhotoCMY", N_ ("Five Color Photo Composite"), 1, INKSET_CcMmYK, 0, 0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- NULL, &photo_cyan_channels,
- &photo_magenta_channels, &photo_yellow_channels
- }
-};
-
-static const escp2_inkname_t j_seven_color_enhanced_inkset =
-{
- "Photo7J", N_ ("Seven Color Enhanced"), 1, INKSET_CcMmYyK, .5, 1.0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- &photo_black_channels, &photo_cyan_channels,
- &photo_magenta_channels, &photo2_yellow_channels
- }
-};
-
-static const escp2_inkname_t j_six_color_enhanced_composite_inkset =
-{
- "PhotoEnhanceJ", N_ ("Six Color Enhanced Composite"), 1, INKSET_CcMmYyK, .5, 1.0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- NULL, &standard_cyan_channels,
- &standard_magenta_channels, &standard_yellow_channels
- }
-};
-
-static const escp2_inkname_t seven_color_photo_inkset =
-{
- "PhotoCMYK7", N_ ("Seven Color Photo"), 1, INKSET_CcMmYKk, .05 , 1.0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- &photo2_black_channels, &photo_cyan_channels,
- &photo_magenta_channels, &photo_yellow_channels
- }
-};
-
-static const escp2_inkname_t two_color_grayscale_inkset =
-{
- "Gray2", N_ ("Two Level Grayscale"), 0, INKSET_CcMmYKk, 0, 0,
- NULL, NULL, NULL,
- {
- &photo2_black_channels, NULL, NULL, NULL
- }
-};
-
-static const escp2_inkname_t piezo_quadtone_inkset =
-{
- "Quadtone", N_ ("Quadtone"), 0, INKSET_PIEZO_QUADTONE, 0, 0,
- NULL, NULL, NULL,
- {
- &quadtone_channels, NULL, NULL, NULL
- }
-};
-
-static const escp2_inkname_t c80_piezo_quadtone_inkset =
-{
- "Quadtone", N_ ("Quadtone"), 0, INKSET_PIEZO_QUADTONE, 0, 0,
- NULL, NULL, NULL,
- {
- &c80_quadtone_channels, NULL, NULL, NULL
- }
-};
-
-static const escp2_inkname_t c64_piezo_quadtone_inkset =
-{
- "Quadtone", N_ ("Quadtone"), 0, INKSET_PIEZO_QUADTONE, 0, 0,
- NULL, NULL, NULL,
- {
- &c64_quadtone_channels, NULL, NULL, NULL
- }
-};
-
-static const escp2_inkname_t f360_six_color_photo_inkset =
-{
- "PhotoCMYK", N_("Six Color Photo"), 1, INKSET_CcMmYK, .5, 1.0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- &f360_photo_black_channels, &f360_photo_cyan_channels,
- &f360_photo_magenta_channels, &f360_photo_yellow_channels
- }
-};
-
-static const escp2_inkname_t f360_five_color_photo_composite_inkset =
-{
- "PhotoCMY", N_("Five Color Photo Composite"), 1, INKSET_CcMmYK, 0, 0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- NULL, &f360_photo_cyan_channels,
- &f360_photo_magenta_channels, &f360_photo_yellow_channels
- }
-};
-
-static const escp2_inkname_t f360_j_seven_color_enhanced_inkset =
-{
- "Photo7J", N_("Seven Color Enhanced"), 1, INKSET_CcMmYyK, .5, 1.0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- &f360_photo_black_channels, &f360_photo_cyan_channels,
- &f360_photo_magenta_channels, &f360_photo2_yellow_channels
- }
-};
-
-static const escp2_inkname_t f360_j_six_color_enhanced_composite_inkset =
-{
- "PhotoEnhanceJ", N_("Six Color Enhanced Composite"), 1, INKSET_CcMmYyK, .5, 1.0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- NULL, &f360_photo_cyan_channels,
- &f360_photo_magenta_channels, &f360_photo2_yellow_channels
- }
-};
-
-static const escp2_inkname_t f360_seven_color_photo_inkset =
-{
- "PhotoCMYK7", N_("Seven Color Photo"), 1, INKSET_CcMmYKk, .05 , 1.0,
- standard_lum_adjustment, standard_hue_adjustment, standard_sat_adjustment,
- {
- &f360_photo2_black_channels, &f360_photo_cyan_channels,
- &f360_photo_magenta_channels, &f360_photo_yellow_channels
- }
-};
-
-static const escp2_inkname_t f360_two_color_grayscale_inkset =
-{
- "Gray2", N_("Two Level Grayscale"), 0, INKSET_CcMmYKk, 0, 0,
- NULL, NULL, NULL,
- {
- &f360_photo2_black_channels
- }
-};
-
-
-#define DECLARE_INKLIST(name) \
-static const inklist_t name##_inklist = \
-{ \
- name##_ink_types, \
- sizeof(name##_ink_types) / sizeof(escp2_inkname_t *), \
-} \
-
-
-static const escp2_inkname_t *const cmy_ink_types[] =
-{
- &three_color_composite_inkset
-};
-
-DECLARE_INKLIST(cmy);
-
-static const escp2_inkname_t *const standard_ink_types[] =
-{
- &four_color_standard_inkset,
- &three_color_composite_inkset,
- &piezo_quadtone_inkset
-};
-
-DECLARE_INKLIST(standard);
-
-static const escp2_inkname_t *const c80_ink_types[] =
-{
- &c80_four_color_standard_inkset,
- &c80_three_color_composite_inkset,
- &c80_piezo_quadtone_inkset
-};
-
-DECLARE_INKLIST(c80);
-
-static const escp2_inkname_t *const c64_ink_types[] =
-{
- &c64_four_color_standard_inkset,
- &c64_three_color_composite_inkset,
- &c64_piezo_quadtone_inkset
-};
-
-DECLARE_INKLIST(c64);
-
-static const escp2_inkname_t *const x80_ink_types[] =
-{
- &x80_four_color_standard_inkset,
- &x80_three_color_composite_inkset,
-};
-
-DECLARE_INKLIST(x80);
-
-static const escp2_inkname_t *const photo_ink_types[] =
-{
- &six_color_photo_inkset,
- &five_color_photo_composite_inkset,
- &four_color_standard_inkset,
- &three_color_composite_inkset,
- &piezo_quadtone_inkset
-};
-
-DECLARE_INKLIST(photo);
-
-static const escp2_inkname_t *const f360_photo_ink_types[] =
-{
- &f360_six_color_photo_inkset,
- &f360_five_color_photo_composite_inkset,
- &four_color_standard_inkset,
- &three_color_composite_inkset,
- &piezo_quadtone_inkset
-};
-
-DECLARE_INKLIST(f360_photo);
-
-static const escp2_inkname_t *const photo7_japan_ink_types[] =
-{
- &j_seven_color_enhanced_inkset,
- &j_six_color_enhanced_composite_inkset,
- &six_color_photo_inkset,
- &five_color_photo_composite_inkset,
- &four_color_standard_inkset,
- &three_color_composite_inkset,
- &piezo_quadtone_inkset
-};
-
-DECLARE_INKLIST(photo7_japan);
-
-static const escp2_inkname_t *const f360_photo7_japan_ink_types[] =
-{
- &f360_j_seven_color_enhanced_inkset,
- &f360_j_six_color_enhanced_composite_inkset,
- &f360_six_color_photo_inkset,
- &f360_five_color_photo_composite_inkset,
- &four_color_standard_inkset,
- &three_color_composite_inkset,
- &piezo_quadtone_inkset
-};
-
-DECLARE_INKLIST(f360_photo7_japan);
-
-static const escp2_inkname_t *const photo7_ink_types[] =
-{
- &seven_color_photo_inkset,
- &six_color_photo_inkset,
- &five_color_photo_composite_inkset,
- &four_color_standard_inkset,
- &three_color_composite_inkset,
- &two_color_grayscale_inkset
-};
-
-DECLARE_INKLIST(photo7);
-
-static const escp2_inkname_t *const f360_photo7_ink_types[] =
-{
- &f360_seven_color_photo_inkset,
- &f360_six_color_photo_inkset,
- &f360_five_color_photo_composite_inkset,
- &four_color_standard_inkset,
- &three_color_composite_inkset,
- &two_color_grayscale_inkset
-};
-
-DECLARE_INKLIST(f360_photo7);
-
-
-
-static const paper_t standard_papers[] =
-{
- { "Plain", N_("Plain Paper"),
- 1, 0, 0.80, .1, .5, 1.0, 1.0, 1.0, .9, 1.05, 1.15,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "PlainFast", N_("Plain Paper Fast Load"),
- 5, 0, 0.80, .1, .5, 1.0, 1.0, 1.0, .9, 1.05, 1.15,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "Postcard", N_("Postcard"),
- 2, 0, 0.83, .2, .6, 1.0, 1.0, 1.0, .9, 1.0, 1.1,
- 1, 1.0, 0x00, 0x00, 0x02, NULL, plain_paper_lum_adjustment, NULL},
- { "GlossyFilm", N_("Glossy Film"),
- 3, 0, 1.00 ,1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6d, 0x00, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "Transparency", N_("Transparencies"),
- 3, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, 1.0, 0x6d, 0x00, 0x02, NULL, plain_paper_lum_adjustment, NULL},
- { "Envelope", N_("Envelopes"),
- 4, 0, 0.80, .125, .5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "BackFilm", N_("Back Light Film"),
- 6, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6d, 0x00, 0x01, NULL, NULL, NULL},
- { "Matte", N_("Matte Paper"),
- 7, 0, 0.85, 1.0, .999, 1.05, 1.0, 0.95, .9, 1.0, 1.1,
- 1, 1.0, 0x00, 0x00, 0x02, NULL, NULL, NULL},
- { "Inkjet", N_("Inkjet Paper"),
- 7, 0, 0.85, .25, .6, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "Coated", N_("Photo Quality Inkjet Paper"),
- 7, 0, 1.00, 1.0, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, NULL, NULL},
- { "Photo", N_("Photo Paper"),
- 8, 0, 1.00, 1.0, .9, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x67, 0x00, 0x02, NULL, NULL, NULL},
- { "GlossyPhoto", N_("Premium Glossy Photo Paper"),
- 8, 0, 1.10, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.03, 1.0,
- 1, 1.0, 0x80, 0x00, 0x02,
- pgpp_hue_adjustment, pgpp_lum_adjustment, pgpp_sat_adjustment},
- { "Luster", N_("Premium Luster Photo Paper"),
- 8, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, 1.0, 0x80, 0x00, 0x02, NULL, NULL, NULL},
- { "GlossyPaper", N_("Photo Quality Glossy Paper"),
- 6, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, 1.0, 0x6b, 0x1a, 0x01, NULL, NULL, NULL},
- { "Ilford", N_("Ilford Heavy Paper"),
- 8, 0, .85, .5, 1.35, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x80, 0x00, 0x02, NULL, NULL, NULL },
- { "ColorLife", N_("ColorLife Paper"),
- 8, 0, 1.00, 1.0, .9, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x67, 0x00, 0x02, NULL, NULL, NULL},
- { "Other", N_("Other"),
- 0, 0, 0.80, 0.125, .5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
-};
-
-static const paperlist_t standard_paper_list =
-{
- sizeof(standard_papers) / sizeof(paper_t),
- standard_papers
-};
-
-static const paper_t sp780_papers[] =
-{
- { "Plain", N_("Plain Paper"),
- 6, 0, 0.80, .1, .5, 1.0, 1.0, 1.0, .9, 1.05, 1.15,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "PlainFast", N_("Plain Paper Fast Load"),
- 1, 0, 0.80, .1, .5, 1.0, 1.0, 1.0, .9, 1.05, 1.15,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "Postcard", N_("Postcard"),
- 3, 0, 0.83, .2, .6, 1.0, 1.0, 1.0, .9, 1.0, 1.1,
- 1, 1.0, 0x00, 0x00, 0x02, NULL, plain_paper_lum_adjustment, NULL},
- { "GlossyFilm", N_("Glossy Film"),
- 0, 0, 1.00 ,1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6d, 0x00, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "Transparency", N_("Transparencies"),
- 0, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, 1.0, 0x6d, 0x00, 0x02, NULL, plain_paper_lum_adjustment, NULL},
- { "Envelope", N_("Envelopes"),
- 4, 0, 0.80, .125, .5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "BackFilm", N_("Back Light Film"),
- 0, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6d, 0x00, 0x01, NULL, NULL, NULL},
- { "Matte", N_("Matte Paper"),
- 2, 0, 0.85, 1.0, .999, 1.05, .9, 1.05, .9, 1.0, 1.1,
- 1, 1.0, 0x00, 0x00, 0x02, NULL, NULL, NULL},
- { "Inkjet", N_("Inkjet Paper"),
- 6, 0, 0.85, .25, .6, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "Coated", N_("Photo Quality Inkjet Paper"),
- 0, 0, 1.00, 1.0, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, NULL, NULL},
- { "Photo", N_("Photo Paper"),
- 2, 0, 1.00, 1.0, .9, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x67, 0x00, 0x02, NULL, NULL, NULL},
- { "GlossyPhoto", N_("Premium Glossy Photo Paper"),
- 7, 0, 1.10, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.03, 1.0,
- 1, 1.0, 0x80, 0x00, 0x02,
- pgpp_hue_adjustment, pgpp_lum_adjustment, pgpp_sat_adjustment},
- { "Luster", N_("Premium Luster Photo Paper"),
- 7, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, 1.0, 0x80, 0x00, 0x02, NULL, NULL, NULL},
- { "GlossyPaper", N_("Photo Quality Glossy Paper"),
- 0, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, 1.0, 0x6b, 0x1a, 0x01, NULL, NULL, NULL},
- { "Ilford", N_("Ilford Heavy Paper"),
- 2, 0, .85, .5, 1.35, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x80, 0x00, 0x02, NULL, NULL, NULL },
- { "ColorLife", N_("ColorLife Paper"),
- 2, 0, 1.00, 1.0, .9, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x67, 0x00, 0x02, NULL, NULL, NULL},
- { "Other", N_("Other"),
- 0, 0, 0.80, 0.125, .5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
-};
-
-static const paperlist_t sp780_paper_list =
-{
- sizeof(sp780_papers) / sizeof(paper_t),
- sp780_papers
-};
-
-static const paper_t c80_papers[] =
-{
- { "Plain", N_("Plain Paper"),
- 1, 0, 0.80, .1, .5, 1.0, 1.0, 1.0, .9, 1.05, 1.15,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "PlainFast", N_("Plain Paper Fast Load"),
- 5, 0, 0.80, .1, .5, 1.0, 1.0, 1.0, .9, 1.05, 1.15,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "Postcard", N_("Postcard"),
- 2, 0, 0.83, .2, .6, 1.0, 1.0, 1.0, .9, 1.0, 1.1,
- 1, 1.0, 0x00, 0x00, 0x02, NULL, plain_paper_lum_adjustment, NULL},
- { "GlossyFilm", N_("Glossy Film"),
- 3, 0, 1.00 ,1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6d, 0x00, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "Transparency", N_("Transparencies"),
- 3, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, 1.0, 0x6d, 0x00, 0x02, NULL, plain_paper_lum_adjustment, NULL},
- { "Envelope", N_("Envelopes"),
- 4, 0, 0.80, .125, .5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "BackFilm", N_("Back Light Film"),
- 6, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6d, 0x00, 0x01, NULL, NULL, NULL},
- { "Matte", N_("Matte Paper"),
- 7, 0, 0.9, 1.0, .999, 1.0, 1.0, 1.0, .9, 1.0, 1.1,
- 1, 1.0, 0x00, 0x00, 0x02, NULL, NULL, NULL},
- { "Inkjet", N_("Inkjet Paper"),
- 7, 0, 0.85, .25, .6, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "Coated", N_("Photo Quality Inkjet Paper"),
- 7, 0, 1.00, 1.0, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, NULL, NULL},
- { "Photo", N_("Photo Paper"),
- 8, 0, 1.20, 1.0, .9, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x67, 0x00, 0x02, NULL, NULL, NULL},
- { "GlossyPhoto", N_("Premium Glossy Photo Paper"),
- 8, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.03, 1.0,
- 1, 1.0, 0x80, 0x00, 0x02,
- pgpp_hue_adjustment, pgpp_lum_adjustment, pgpp_sat_adjustment},
- { "Luster", N_("Premium Luster Photo Paper"),
- 8, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, 1.0, 0x80, 0x00, 0x02, NULL, NULL, NULL},
- { "GlossyPaper", N_("Photo Quality Glossy Paper"),
- 6, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, 1.0, 0x6b, 0x1a, 0x01, NULL, NULL, NULL},
- { "Ilford", N_("Ilford Heavy Paper"),
- 8, 0, .85, .5, 1.35, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x80, 0x00, 0x02, NULL, NULL, NULL },
- { "ColorLife", N_("ColorLife Paper"),
- 8, 0, 1.20, 1.0, .9, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x67, 0x00, 0x02, NULL, NULL, NULL},
- { "Other", N_("Other"),
- 0, 0, 0.80, 0.125, .5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
-};
-
-static const paperlist_t c80_paper_list =
-{
- sizeof(c80_papers) / sizeof(paper_t),
- c80_papers
-};
-
-static const paper_t sp950_papers[] =
-{
- { "Plain", N_("Plain Paper"),
- 6, 0, 0.80, .1, .5, 1.0, 1.0, 1.0, .9, 1.05, 1.15,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "PlainFast", N_("Plain Paper Fast Load"),
- 1, 0, 0.80, .1, .5, 1.0, 1.0, 1.0, .9, 1.05, 1.15,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "Postcard", N_("Postcard"),
- 3, 0, 0.83, .2, .6, 1.0, 1.0, 1.0, .9, 1.0, 1.1,
- 1, 1.0, 0x00, 0x00, 0x02, NULL, plain_paper_lum_adjustment, NULL},
- { "GlossyFilm", N_("Glossy Film"),
- 0, 0, 1.00 ,1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6d, 0x00, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "Transparency", N_("Transparencies"),
- 0, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, 1.0, 0x6d, 0x00, 0x02, NULL, plain_paper_lum_adjustment, NULL},
- { "Envelope", N_("Envelopes"),
- 4, 0, 0.80, .125, .5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "BackFilm", N_("Back Light Film"),
- 0, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6d, 0x00, 0x01, NULL, NULL, NULL},
- { "Matte", N_("Matte Paper"),
- 2, 0, 0.85, 1.0, .999, 1.05, .9, 1.05, .9, 1.0, 1.1,
- 1, 1.0, 0x00, 0x00, 0x02, NULL, NULL, NULL},
- { "Inkjet", N_("Inkjet Paper"),
- 6, 0, 0.85, .25, .6, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
- { "Coated", N_("Photo Quality Inkjet Paper"),
- 0, 0, 1.00, 1.0, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, NULL, NULL},
- { "Photo", N_("Photo Paper"),
- 2, 0, 1.00, 1.0, .9, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x67, 0x00, 0x02, NULL, NULL, NULL},
- { "GlossyPhoto", N_("Premium Glossy Photo Paper"),
- 7, 0, 0.85, 1.0, .999, 0.9, 1.04, 0.93, 0.9, 1.04, 0.93,
- 0.9, 1.0, 0x80, 0x00, 0x02,
- pgpp_hue_adjustment, pgpp_lum_adjustment, pgpp_sat_adjustment},
- { "Luster", N_("Premium Luster Photo Paper"),
- 7, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, 1.0, 0x80, 0x00, 0x02, NULL, NULL, NULL},
- { "GlossyPaper", N_("Photo Quality Glossy Paper"),
- 0, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, 1.0, 0x6b, 0x1a, 0x01, NULL, NULL, NULL},
- { "Ilford", N_("Ilford Heavy Paper"),
- 2, 0, .85, .5, 1.35, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x80, 0x00, 0x02, NULL, NULL, NULL },
- { "ColorLife", N_("ColorLife Paper"),
- 2, 0, 1.00, 1.0, .9, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x67, 0x00, 0x02, NULL, NULL, NULL},
- { "Other", N_("Other"),
- 0, 0, 0.80, 0.125, .5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
-};
-
-static const paperlist_t sp950_paper_list =
-{
- sizeof(sp950_papers) / sizeof(paper_t),
- sp950_papers
-};
-
/*
* Dot sizes are for:
*
- * 0: 120/180 DPI micro
- * 1: 120/180 DPI soft
- * 2: 360 micro
- * 3: 360 soft
- * 4: 720x360 micro
- * 5: 720x360 soft
- * 6: 720 micro
- * 7: 720 soft
- * 8: 1440x720 micro
- * 9: 1440x720 soft
- * 10: 2880x720 micro
- * 11: 2880x720 soft
- * 12: 2880x1440
+ * 0: 120/180
+ * 1: 360
+ * 2: 720x360
+ * 3: 720
+ * 4: 1440x720
+ * 5: 2880x720 or 1440x1440
+ * 6: 2880x1440
+ * 7: 2880x2880
*/
-/* 0 1 2 3 4 5 6 7 8 9 10 11 12 */
+/* 0 1 2 3 4 5 6 7 */
static const escp2_dot_size_t g1_dotsizes =
-{ -2, -1, -2, -1, -1, -2, -2, -1, -1, -1, -1, -1, -1 };
+{ -2, -2, -2, -2, -1, -1, -1, -1 };
static const escp2_dot_size_t g2_dotsizes =
-{ -2, -1, -2, -1, -2, -2, -2, -2, -1, -1, -1, -1, -1 };
-
-static const escp2_dot_size_t sc600_dotsizes =
-{ 4, -1, 4, -1, -1, 3, 2, 2, -1, 1, -1, -1, -1 };
+{ -2, -2, -2, -2, -1, -1, -1, -1 };
static const escp2_dot_size_t g3_dotsizes =
-{ 3, -1, 3, -1, -1, 2, 1, 1, -1, 1, -1, -1, -1 };
+{ 3, 3, 2, 1, 1, -1, -1, -1 };
-static const escp2_dot_size_t photo_dotsizes =
-{ 3, -1, 3, -1, -1, 2, -1, 1, -1, 4, -1, -1, -1 };
-
-static const escp2_dot_size_t sp5000_dotsizes =
-{ -1, 3, -1, 3, -1, 2, -1, 1, -1, 4, -1, -1, -1 };
-
-static const escp2_dot_size_t sc440_dotsizes =
-{ 3, -1, 3, -1, -1, 2, -1, 1, -1, -1, -1, -1, -1 };
+static const escp2_dot_size_t c6pl_dotsizes =
+{ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 };
-static const escp2_dot_size_t sc640_dotsizes =
-{ 3, -1, 3, -1, -1, 2, 1, 1, -1, 1, -1, -1, -1 };
+static const escp2_dot_size_t c4pl_dotsizes =
+{ 0x12, 0x12, 0x12, 0x11, 0x10, 0x10, 0x10, 0x10 };
-static const escp2_dot_size_t c6pl_dotsizes =
-{ -1, 0x10, -1, 0x10, -1, 0x10, -1, 0x10, -1, 0x10, -1, 0x10, 0x10 };
+static const escp2_dot_size_t c4pl_pigment_dotsizes =
+{ 0x12, 0x12, 0x12, 0x11, 0x11, 0x10, 0x10, 0x10 };
static const escp2_dot_size_t c3pl_dotsizes =
-{ -1, 0x11, -1, 0x11, -1, 0x11, -1, 0x10, -1, 0x10, -1, 0x10, 0x10 };
+{ 0x11, 0x11, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10 };
-static const escp2_dot_size_t c4pl_dotsizes =
-{ -1, 0x12, -1, 0x12, -1, 0x12, -1, 0x11, -1, 0x10, -1, 0x10, 0x10 };
+static const escp2_dot_size_t c3pl_pigment_dotsizes =
+{ 0x10, 0x10, 0x10, 0x11, 0x12, 0x12, 0x12, 0x12 };
static const escp2_dot_size_t p3pl_dotsizes =
-{ -1, 0x10, -1, 0x10, -1, 0x10, -1, 0x11, -1, 0x12, -1, -1, 0x12 };
+{ 0x10, 0x10, 0x10, 0x11, 0x12, 0x12, 0x12, 0x12 };
-static const escp2_dot_size_t sc720_dotsizes =
-{ -1, 0x12, -1, 0x12, -1, 0x11, -1, 0x11, -1, 0x11, -1, -1, -1 };
+static const escp2_dot_size_t p1_5pl_dotsizes =
+{ 0x10, 0x10, 0x10, 0x11, 0x12, 0x13, 0x13, 0x13 };
-static const escp2_dot_size_t sc660_dotsizes =
-{ 3, -1, 3, -1, 3, 0, -1, 0, -1, 0, -1, -1, -1 };
+static const escp2_dot_size_t c2pl_dotsizes =
+{ 0x12, 0x12, 0x12, 0x11, 0x13, -1, 0x10, 0x10 };
+
+static const escp2_dot_size_t c1_8pl_dotsizes =
+{ 0x10, 0x10, 0x10, 0x10, 0x11, 0x12, 0x12, 0x13 };
+
+static const escp2_dot_size_t sc440_dotsizes =
+{ 3, 3, 2, 1, -1, -1, -1, -1 };
static const escp2_dot_size_t sc480_dotsizes =
-{ -1, 0x13, -1, 0x13, -1, 0x13, -1, 0x10, -1, 0x10, -1, 0x10, 0x10 };
+{ 0x13, 0x13, 0x13, 0x10, 0x10, 0x10, 0x10, 0x10 };
+
+static const escp2_dot_size_t sc600_dotsizes =
+{ 4, 4, 3, 2, 1, -1, -1, -1 };
+
+static const escp2_dot_size_t sc640_dotsizes =
+{ 3, 3, 2, 1, 1, -1, -1, -1 };
+
+static const escp2_dot_size_t sc660_dotsizes =
+{ 3, 3, 0, 0, 0, -1, -1, -1 };
static const escp2_dot_size_t sc670_dotsizes =
-{ -1, 0x12, -1, 0x12, -1, 0x12, -1, 0x11, -1, 0x11, -1, -1, -1 };
+{ 0x12, 0x12, 0x12, 0x11, 0x11, -1, -1, -1 };
+
+static const escp2_dot_size_t sp700_dotsizes =
+{ 3, 3, 2, 1, 4, -1, -1, -1 };
+
+static const escp2_dot_size_t sp720_dotsizes =
+{ 0x12, 0x12, 0x11, 0x11, 0x11, -1, -1, -1 };
static const escp2_dot_size_t sp2000_dotsizes =
-{ -1, 0x11, -1, 0x11, -1, 0x11, -1, 0x10, -1, 0x10, -1, -1, -1 };
+{ 0x11, 0x11, 0x11, 0x10, 0x10, -1, -1, -1 };
static const escp2_dot_size_t spro_dye_dotsizes =
-{ 3, -1, 3, -1, 3, -1, 1, -1, 1, -1, -1, -1, -1 };
+{ 3, 3, 3, 1, 1, -1, -1, -1 };
static const escp2_dot_size_t spro_pigment_dotsizes =
-{ 3, -1, 3, -1, 2, -1, 1, -1, 1, -1, -1, -1, -1 };
+{ 3, 3, 2, 1, 1, -1, -1, -1 };
static const escp2_dot_size_t spro10000_dotsizes =
-{ 4, -1, 0x11, -1, 0x11, -1, 0x10, -1, 0x10, -1, -1, -1, -1 };
+{ 4, 0x11, 0x11, 0x10, 0x10, -1, -1, -1 };
-static const escp2_dot_size_t c3pl_pigment_dotsizes =
-{ -1, 0x10, -1, 0x10, -1, 0x10, -1, 0x11, -1, 0x12, -1, 0x12, 0x12 };
-
-static const escp2_dot_size_t c2pl_dotsizes =
-{ -1, 0x12, -1, 0x12, -1, 0x12, -1, 0x11, -1, 0x13, -1, 0x13, 0x10 };
-
-static const escp2_dot_size_t c1_8pl_dotsizes =
-{ -1, 0x10, -1, 0x10, -1, 0x10, -1, 0x10, -1, 0x11, -1, -1, 0x12 };
-
-static const escp2_dot_size_t c4pl_pigment_dotsizes =
-{ -1, 0x12, -1, 0x12, -1, 0x12, -1, 0x11, -1, 0x11, -1, 0x10, 0x10 };
+static const escp2_dot_size_t spro5000_dotsizes =
+{ 3, 3, 2, 1, 4, -1, -1, -1 };
static const escp2_dot_size_t spro_c4pl_pigment_dotsizes =
-{ 0x11, -1, 0x11, -1, 0x11, -1, 0x10, -1, 0x10, -1, 5, 5, 5 };
+{ 0x11, 0x11, 0x11, 0x10, 0x10, -1, 5, 5 };
/*
* Bits are for:
*
- * 0: 120/180 DPI micro
- * 1: 120/180 DPI soft
- * 2: 360 micro
- * 3: 360 soft
- * 4: 720x360 micro
- * 5: 720x360 soft
- * 6: 720 micro
- * 7: 720 soft
- * 8: 1440x720 micro
- * 9: 1440x720 soft
- * 10: 2880x720 micro
- * 11: 2880x720 soft
- * 12: 2880x1440
+ * 0: 120/180
+ * 1: 360
+ * 2: 720x360
+ * 3: 720
+ * 4: 1440x720
+ * 5: 2880x720 or 1440x1440
+ * 6: 2880x1440
+ * 7: 2880x2880
*/
-/* 0 1 2 3 4 5 6 7 8 9 10 11 12 */
+/* 0 1 2 3 4 5 6 7 */
static const escp2_bits_t variable_bits =
-{ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 };
+{ 2, 2, 2, 2, 2, 2, 2, 2 };
static const escp2_bits_t stp950_bits =
-{ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 };
+{ 2, 2, 2, 2, 2, 2, 1, 1 };
static const escp2_bits_t ultrachrome_bits =
-{ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 };
+{ 2, 2, 2, 2, 2, 1, 1, 1 };
static const escp2_bits_t standard_bits =
-{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
+{ 1, 1, 1, 1, 1, 1, 1, 1 };
static const escp2_bits_t c1_8_bits =
-{ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 };
-
+{ 2, 2, 2, 2, 2, 1, 1, 1 };
/*
* Base resolutions are for:
*
- * 0: 120/180 DPI micro
- * 1: 120/180 DPI soft
- * 2: 360 micro
- * 3: 360 soft
- * 4: 720x360 micro
- * 5: 720x360 soft
- * 6: 720 micro
- * 7: 720 soft
- * 8: 1440x720 micro
- * 9: 1440x720 soft
- * 10: 2880x720 micro
- * 11: 2880x720 soft
- * 12: 2880x1440
+ * 0: 120/180
+ * 1: 360
+ * 2: 720x360
+ * 3: 720
+ * 4: 1440x720
+ * 5: 2880x720 or 1440x1440
+ * 6: 2880x1440
+ * 7: 2880x2880
*/
-/* 0 1 2 3 4 5 6 7 8 9 10 11 12 */
+/* 0 1 2 3 4 5 6 7 */
static const escp2_base_resolutions_t standard_base_res =
-{ 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720 };
+{ 720, 720, 720, 720, 720, 720, 720, 720 };
static const escp2_base_resolutions_t g3_base_res =
-{ 720, 720, 720, 720, 720, 720, 720, 720, 360, 360, 360, 360, 360 };
+{ 720, 720, 720, 720, 360, 360, 360, 360 };
static const escp2_base_resolutions_t variable_base_res =
-{ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360 };
+{ 360, 360, 360, 360, 360, 360, 360, 360 };
static const escp2_base_resolutions_t stp950_base_res =
-{ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 720, 720, 720 };
+{ 360, 360, 360, 360, 360, 720, 720, 720 };
static const escp2_base_resolutions_t ultrachrome_base_res =
-{ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 720, 720, 720 };
+{ 360, 360, 360, 360, 360, 720, 720, 720 };
static const escp2_base_resolutions_t c1_8_base_res =
-{ 360, 360, 360, 360, 720, 720, 720, 720, 720, 720, 1440, 1440, 1440 };
+{ 360, 360, 720, 720, 720, 1440, 1440, 1440 };
+
+static const escp2_base_resolutions_t c1_5_base_res =
+{ 360, 360, 720, 720, 720, 720, 720, 720 };
static const escp2_base_resolutions_t stc900_base_res =
-{ 360, 360, 360, 360, 360, 360, 360, 360, 180, 180, 180, 180, 180 };
+{ 360, 360, 360, 360, 180, 180, 360, 360 };
static const escp2_base_resolutions_t pro_base_res =
-{ 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880 };
+{ 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880 };
/*
* Densities are for:
*
- * 0: 120/180 DPI micro
- * 1: 120/180 DPI soft
- * 2: 360 micro
- * 3: 360 soft
- * 4: 720x360 micro
- * 5: 720x360 soft
- * 6: 720 micro
- * 7: 720 soft
- * 8: 1440x720 micro
- * 9: 1440x720 soft
- * 10: 2880x720 micro
- * 11: 2880x720 soft
- * 12: 2880x1440
+ * 0: 120/180
+ * 1: 360
+ * 2: 720x360
+ * 3: 720
+ * 4: 1440x720
+ * 5: 2880x720 or 1440x1440
+ * 6: 2880x1440
+ * 7: 2880x2880
*/
-/* 0 1 2 3 4 5 6 7 8 9 10 11 12 */
+/* 0 1 2 3 4 5 6 7 */
static const escp2_densities_t g1_densities =
-{ 2.0, 2.0, 1.3, 1.3, 1.3, 1.3, 0.568, 0.568, 0.0, 0.0, 0.0, 0.0, 0.0 };
-
-static const escp2_densities_t sc1500_densities =
-{ 2.0, 2.0, 1.3, 1.3, 1.3, 1.3, 0.631, 0.631, 0.0, 0.0, 0.0, 0.0, 0.0 };
+{ 2.6, 1.3, 1.3, 0.568, 0.0, 0.0, 0.0, 0.0 };
static const escp2_densities_t g3_densities =
-{ 2.0, 2.0, 1.3, 1.3, 1.3, 1.3, 0.775, 0.775, 0.388, 0.388, 0.194, 0.194, 0.097 };
-
-static const escp2_densities_t photo_densities =
-{ 2.0, 2.0, 1.3, 1.3, 1.3, 1.3, 0.775, 0.775, 0.55, 0.55, 0.275, 0.275, 0.138 };
-
-static const escp2_densities_t sc440_densities =
-{ 3.0, 3.0, 2.0, 2.0, 1.0, 1.0, 0.900, 0.900, 0.45, 0.45, 0.45, 0.45, 0.113 };
-
-static const escp2_densities_t sc480_densities =
-{ 2.0, 2.0, 0.0, 1.4, 0.0, 0.7, 0.0, 0.710, 0.0, 0.710, 0.0, 0.546, 0.273 };
-
-static const escp2_densities_t sc980_densities =
-{ 2.0, 2.0, 1.3, 1.3, 0.65, 0.65, 0.646, 0.511, 0.49, 0.49, 0.637, 0.637, 0.455 };
+{ 2.6, 1.3, 0.65, 0.775, 0.388, 0.0, 0.0, 0.0, };
static const escp2_densities_t c6pl_densities =
-{ 2.0, 2.0, 1.3, 2.0, 0.65, 1.0, 0.646, 0.568, 0.323, 0.568, 0.568, 0.568, 0.284 };
-
-static const escp2_densities_t c3pl_densities =
-{ 2.0, 2.0, 1.3, 1.3, 0.65, 0.65, 0.646, 0.73, 0.7, 0.7, 0.91, 0.91, 0.455 };
+{ 4.0, 2.0, 1.0, 0.568, 0.568, 0.568, 0.0, 0.0 };
-static const escp2_densities_t sc680_densities =
-{ 2.0, 2.0, 1.2, 1.2, 0.60, 0.60, 0.792, 0.792, 0.792, 0.792, 0.594, 0.594, 0.297 };
+static const escp2_densities_t c4pl_2880_densities =
+{ 2.6, 1.3, 0.65, 0.650, 0.650, 0.650, 0.32, 0.0 };
static const escp2_densities_t c4pl_densities =
-{ 2.0, 2.0, 1.3, 1.3, 0.65, 0.65, 0.431, 0.568, 0.784, 0.784, 0.593, 0.593, 0.297 };
-
-static const escp2_densities_t p3pl_densities =
-{ 2.0, 2.0, 1.5, 1.5, 0.75, 0.75, 0.523, 0.523, 0.523, 0.523, 0.523, 0.523, 0.523 };
-
-static const escp2_densities_t sc660_densities =
-{ 3.0, 3.0, 2.0, 2.0, 1.0, 1.0, 0.646, 0.646, 0.323, 0.323, 0.162, 0.162, 0.081 };
-
-static const escp2_densities_t sp2000_densities =
-{ 2.0, 2.0, 1.3, 1.3, 0.65, 0.65, 0.775, 0.852, 0.388, 0.438, 0.219, 0.219, 0.110 };
-
-static const escp2_densities_t spro_dye_densities =
-{ 2.0, 2.0, 1.3, 1.3, 1.3, 1.3, 0.775, 0.775, 0.388, 0.388, 0.275, 0.275, 0.138 };
-
-static const escp2_densities_t spro_pigment_densities =
-{ 2.0, 2.0, 1.5, 1.5, 0.78, 0.78, 0.775, 0.775, 0.388, 0.388, 0.194, 0.194, 0.097 };
-
-static const escp2_densities_t spro10000_densities =
-{ 2.0, 2.0, 1.3, 1.3, 0.65, 0.65, 0.431, 0.710, 0.216, 0.784, 0.392, 0.392, 0.196 };
-
-static const escp2_densities_t c3pl_pigment_densities =
-{ 2.0, 2.0, 1.3, 1.3, 0.69, 0.69, 0.511, 0.511, 0.765, 0.765, 0.585, 0.585, 0.293 };
-
-static const escp2_densities_t c2pl_densities =
-{ 2.0, 2.0, 1.15,1.15,0.57, 0.57, 0.650, 0.650, 0.650, 0.650, 0.650, 0.650, 0.650 };
+{ 2.6, 1.3, 0.65, 0.568, 0.523, 0.792, 0.396, 0.0 };
static const escp2_densities_t c4pl_pigment_densities =
-{ 2.0, 2.0, 1.35,1.35,0.68, 0.68, 0.518, 0.518, 0.518, 0.518, 0.518, 0.518, 0.259 };
-
-
-static const res_t standard_reslist[] =
-{
- { "360x90dpi", N_("360 x 90 DPI Fast Economy Draft"),
- 360, 90, 360, 90, 0, 0, 1, 1, 0, 1, 1, RES_120_M },
- { "360x90sw", N_("360 x 90 DPI Fast Economy Draft"),
- 360, 90, 360, 90, 1, 0, 1, 1, 0, 1, 1, RES_120 },
-
- { "360x120dpi", N_("360 x 120 DPI Economy Draft"),
- 360, 120, 360, 120, 0, 0, 1, 1, 0, 3, 1, RES_120_M },
- { "360x120sw", N_("360 x 120 DPI Economy Draft"),
- 360, 120, 360, 120, 1, 0, 1, 1, 0, 3, 1, RES_120 },
-
- { "180dpi", N_("180 DPI Economy Draft"),
- 180, 180, 180, 180, 0, 0, 1, 1, 0, 1, 1, RES_180_M },
- { "180sw", N_("180 DPI Economy Draft"),
- 180, 180, 180, 180, 1, 0, 1, 1, 0, 1, 1, RES_180 },
-
- { "360x240dpi", N_("360 x 240 DPI Draft"),
- 360, 240, 360, 240, 0, 0, 1, 1, 0, 3, 2, RES_180_M },
- { "360x240sw", N_("360 x 240 DPI Draft"),
- 360, 240, 360, 240, 1, 0, 1, 1, 0, 3, 2, RES_180 },
-
- { "360x180dpi", N_("360 x 180 DPI Draft"),
- 360, 180, 360, 180, 0, 0, 1, 1, 0, 1, 1, RES_180_M },
- { "360x180sw", N_("360 x 180 DPI Draft"),
- 360, 180, 360, 180, 1, 0, 1, 1, 0, 1, 1, RES_180 },
-
- { "360sw", N_("360 DPI"),
- 360, 360, 360, 360, 1, 0, 1, 1, 0, 1, 1, RES_360 },
- { "360swuni", N_("360 DPI Unidirectional"),
- 360, 360, 360, 360, 1, 0, 1, 1, 1, 1, 1, RES_360 },
- { "360mw", N_("360 DPI Interleave"),
- 360, 360, 360, 360, 0, 1, 1, 1, 0, 1, 1, RES_360_M },
- { "360mwuni", N_("360 DPI Interleave Unidirectional"),
- 360, 360, 360, 360, 0, 1, 1, 1, 1, 1, 1, RES_360_M },
- { "360dpi", N_("360 DPI"),
- 360, 360, 360, 360, 0, 0, 1, 1, 0, 1, 1, RES_360_M },
- { "360uni", N_("360 DPI Unidirectional"),
- 360, 360, 360, 360, 0, 0, 1, 1, 1, 1, 1, RES_360_M },
-
- { "720x360sw", N_("720 x 360 DPI"),
- 720, 360, 720, 360, 1, 0, 1, 1, 0, 2, 1, RES_720_360 },
- { "720x360swuni", N_("720 x 360 DPI Unidirectional"),
- 720, 360, 720, 360, 1, 0, 1, 1, 1, 2, 1, RES_720_360 },
+{ 2.3, 1.15, 0.58, 0.766, 0.388, 0.958, 0.479, 0.0 };
- { "720mw", N_("720 DPI Interleave"),
- 720, 720, 720, 720, 0, 1, 1, 1, 0, 1, 1, RES_720_M },
- { "720mwuni", N_("720 DPI Interleave Unidirectional"),
- 720, 720, 720, 720, 0, 1, 1, 1, 1, 1, 1, RES_720_M },
- { "720sw", N_("720 DPI"),
- 720, 720, 720, 720, 1, 0, 1, 1, 0, 1, 1, RES_720 },
- { "720swuni", N_("720 DPI Unidirectional"),
- 720, 720, 720, 720, 1, 0, 1, 1, 1, 1, 1, RES_720 },
- { "720hq", N_("720 DPI High Quality"),
- 720, 720, 720, 720, 1, 0, 2, 1, 0, 1, 1, RES_720 },
- { "720hquni", N_("720 DPI High Quality Unidirectional"),
- 720, 720, 720, 720, 1, 0, 2, 1, 1, 1, 1, RES_720 },
- { "720hq2", N_("720 DPI Highest Quality"),
- 720, 720, 720, 720, 1, 0, 4, 1, 1, 1, 1, RES_720 },
-
- { "1440x720mw", N_("1440 x 720 DPI Interleave"),
- 1440, 720, 1440, 720, 0, 1, 1, 1, 0, 1, 1, RES_1440_720_M },
- { "1440x720mwuni", N_("1440 x 720 DPI Interleave Unidirectional"),
- 1440, 720, 1440, 720, 0, 1, 1, 1, 1, 1, 1, RES_1440_720_M },
- { "1440x720sw", N_("1440 x 720 DPI"),
- 1440, 720, 1440, 720, 1, 0, 1, 1, 0, 1, 1, RES_1440_720 },
- { "1440x720swuni", N_("1440 x 720 DPI Unidirectional"),
- 1440, 720, 1440, 720, 1, 0, 1, 1, 1, 1, 1, RES_1440_720 },
- { "1440x720hq2", N_("1440 x 720 DPI Highest Quality"),
- 1440, 720, 1440, 720, 1, 0, 2, 1, 1, 1, 1, RES_1440_720 },
-
- {"2880x720sw", N_("2880 x 720 DPI"),
- 2880, 720, 2880, 720, 1, 0, 1, 1, 0, 1, 1, RES_2880_720},
- { "2880x720swuni", N_("2880 x 720 DPI Unidirectional"),
- 2880, 720, 2880, 720, 1, 0, 1, 1, 1, 1, 1, RES_2880_720},
-
- { "1440x1440sw", N_("1440 x 1440 DPI"),
- 1440, 1440, 1440, 1440, 1, 0, 1, 1, 1, 1, 1, RES_1440_1440},
- { "1440x1440hq2", N_("1440 x 1440 DPI Highest Quality"),
- 1440, 1440, 1440, 1440, 1, 0, 2, 1, 1, 1, 1, RES_1440_1440},
-
- { "2880x1440sw", N_("2880 x 1440 DPI"),
- 2880, 1440, 2880, 1440, 1, 0, 1, 1, 1, 1, 1, RES_2880_1440},
-
- { "", "", 0, 0, 0, 0, 0, 0, 0, 0, 1, -1 }
-};
-
-static const res_t sp5000_reslist[] =
-{
- { "180sw", N_("180 DPI Economy Draft"),
- 180, 180, 180, 180, 1, 0, 1, 1, 0, 4, 1, RES_180 },
-
- { "360x180sw", N_("360 x 180 DPI Draft"),
- 360, 180, 360, 180, 1, 0, 1, 1, 0, 4, 1, RES_180 },
-
- { "360sw", N_("360 DPI"),
- 360, 360, 360, 360, 1, 0, 1, 1, 0, 2, 1, RES_360 },
- { "360swuni", N_("360 DPI Unidirectional"),
- 360, 360, 360, 360, 1, 0, 1, 1, 1, 2, 1, RES_360 },
-
- { "720x360sw", N_("720 x 360 DPI"),
- 720, 360, 720, 360, 1, 0, 1, 1, 0, 2, 1, RES_720_360 },
- { "720x360swuni", N_("720 x 360 DPI Unidirectional"),
- 720, 360, 720, 360, 1, 0, 1, 1, 1, 2, 1, RES_720_360 },
-
- { "720sw", N_("720 DPI"),
- 720, 720, 720, 720, 1, 0, 1, 1, 0, 1, 1, RES_720 },
- { "720swuni", N_("720 DPI Unidirectional"),
- 720, 720, 720, 720, 1, 0, 1, 1, 1, 1, 1, RES_720 },
- { "720hq", N_("720 DPI High Quality"),
- 720, 720, 720, 720, 1, 0, 2, 1, 0, 1, 1, RES_720 },
- { "720hquni", N_("720 DPI High Quality Unidirectional"),
- 720, 720, 720, 720, 1, 0, 2, 1, 1, 1, 1, RES_720 },
- { "720hq2", N_("720 DPI Highest Quality"),
- 720, 720, 720, 720, 1, 0, 4, 1, 1, 1, 1, RES_720 },
-
- { "1440x720sw", N_("1440 x 720 DPI"),
- 1440, 720, 1440, 720, 1, 0, 1, 1, 0, 1, 1, RES_1440_720 },
- { "1440x720swuni", N_("1440 x 720 DPI Unidirectional"),
- 1440, 720, 1440, 720, 1, 0, 1, 1, 1, 1, 1, RES_1440_720 },
- { "1440x720hq2", N_("1440 x 720 DPI Highest Quality"),
- 1440, 720, 1440, 720, 1, 0, 2, 1, 1, 1, 1, RES_1440_720 },
-
- { "", "", 0, 0, 0, 0, 0, 0, 0, 0, 1, -1 }
-};
-
-static const res_t escp950_reslist[] =
-{
- { "360x180dpi", N_("360 x 180 DPI Draft"),
- 360, 180, 360, 180, 0, 0, 1, 1, 0, 1, 1, RES_180_M },
- { "360x180sw", N_("360 x 180 DPI Draft"),
- 360, 180, 360, 180, 1, 0, 1, 1, 0, 1, 1, RES_180 },
-
- { "360sw", N_("360 DPI"),
- 360, 360, 360, 360, 1, 0, 1, 1, 0, 1, 1, RES_360 },
- { "360swuni", N_("360 DPI Unidirectional"),
- 360, 360, 360, 360, 1, 0, 1, 1, 1, 1, 1, RES_360 },
-
- { "720x360sw", N_("720 x 360 DPI"),
- 720, 360, 720, 360, 1, 0, 1, 1, 0, 2, 1, RES_720_360 },
- { "720x360swuni", N_("720 x 360 DPI Unidirectional"),
- 720, 360, 720, 360, 1, 0, 1, 1, 1, 2, 1, RES_720_360 },
-
- { "720sw", N_("720 DPI"),
- 720, 720, 720, 720, 1, 0, 1, 1, 0, 1, 1, RES_720 },
- { "720swuni", N_("720 DPI Unidirectional"),
- 720, 720, 720, 720, 1, 0, 1, 1, 1, 1, 1, RES_720 },
- { "720hq", N_("720 DPI High Quality"),
- 720, 720, 720, 720, 1, 0, 2, 1, 0, 1, 1, RES_720 },
- { "720hquni", N_("720 DPI High Quality Unidirectional"),
- 720, 720, 720, 720, 1, 0, 2, 1, 1, 1, 1, RES_720 },
- { "720hq2", N_("720 DPI Highest Quality"),
- 720, 720, 720, 720, 1, 0, 4, 1, 1, 1, 1, RES_720 },
-
- { "1440x720sw", N_("1440 x 720 DPI"),
- 1440, 720, 1440, 720, 1, 0, 1, 1, 0, 1, 1, RES_1440_720 },
- { "1440x720swuni", N_("1440 x 720 DPI Unidirectional"),
- 1440, 720, 1440, 720, 1, 0, 1, 1, 1, 1, 1, RES_1440_720 },
- { "1440x720hq2", N_("1440 x 720 DPI Highest Quality"),
- 1440, 720, 1440, 720, 1, 0, 2, 1, 1, 1, 1, RES_1440_720 },
-
- { "2880x720sw", N_("2880 x 720 DPI"),
- 2880, 1440, 2880, 720, 1, 0, 1, 1, 0, 1, 1, RES_2880_1440},
- { "2880x720swuni", N_("2880 x 720 DPI Unidirectional"),
- 2880, 1440, 2880, 720, 1, 0, 1, 1, 1, 1, 1, RES_2880_1440},
-
- { "1440x1440sw", N_("1440 x 1440 DPI"),
- 2880, 1440, 1440, 1440, 1, 0, 1, 1, 1, 1, 1, RES_2880_1440},
- { "1440x1440hq2", N_("1440 x 1440 DPI Highest Quality"),
- 2880, 1440, 1440, 1440, 1, 0, 1, 1, 1, 1, 1, RES_2880_1440},
-
- { "2880x1440sw", N_("2880 x 1440 DPI"),
- 2880, 1440, 2880, 1440, 1, 0, 1, 1, 1, 1, 1, RES_2880_1440},
-
- { "", "", 0, 0, 0, 0, 0, 0, 0, 0, 1, -1 }
-};
-
-static const res_t c1_8pl_reslist[] =
-{
- { "720x360sw", N_("720 x 360 DPI"),
- 720, 360, 720, 360, 1, 0, 1, 1, 0, 2, 1, RES_720_360 },
- { "720x360swuni", N_("720 x 360 DPI Unidirectional"),
- 720, 360, 720, 360, 1, 0, 1, 1, 1, 2, 1, RES_720_360 },
-
- { "720sw", N_("720 DPI"),
- 720, 720, 720, 720, 1, 0, 1, 1, 0, 1, 1, RES_720 },
- { "720swuni", N_("720 DPI Unidirectional"),
- 720, 720, 720, 720, 1, 0, 1, 1, 1, 1, 1, RES_720 },
- { "720hq", N_("720 DPI High Quality"),
- 720, 720, 720, 720, 1, 0, 2, 1, 0, 1, 1, RES_720 },
- { "720hquni", N_("720 DPI High Quality Unidirectional"),
- 720, 720, 720, 720, 1, 0, 2, 1, 1, 1, 1, RES_720 },
- { "720hq2", N_("720 DPI Highest Quality"),
- 720, 720, 720, 720, 1, 0, 4, 1, 1, 1, 1, RES_720 },
-
- { "1440x720sw", N_("1440 x 720 DPI"),
- 1440, 720, 1440, 720, 1, 0, 1, 1, 0, 1, 1, RES_1440_720 },
- { "1440x720swuni", N_("1440 x 720 DPI Unidirectional"),
- 1440, 720, 1440, 720, 1, 0, 1, 1, 1, 1, 1, RES_1440_720 },
- { "1440x720hq2", N_("1440 x 720 DPI Highest Quality"),
- 1440, 720, 1440, 720, 1, 0, 2, 1, 1, 1, 1, RES_1440_720 },
-
- { "2880x1440sw", N_("2880 x 1440 DPI"),
- 2880, 1440, 2880, 1440, 1, 0, 1, 1, 1, 1, 1, RES_2880_1440},
-
- { "", "", 0, 0, 0, 0, 0, 0, 0, 0, 1, -1 }
-};
-
-static const res_t escp2200_reslist[] =
-{
- { "360x180dpi", N_("360 x 180 DPI Draft"),
- 360, 180, 360, 180, 0, 0, 1, 1, 0, 1, 1, RES_180_M },
- { "360x180sw", N_("360 x 180 DPI Draft"),
- 360, 180, 360, 180, 1, 0, 1, 1, 0, 1, 1, RES_180 },
-
- { "360sw", N_("360 DPI"),
- 360, 360, 360, 360, 1, 0, 1, 1, 0, 1, 1, RES_360 },
- { "360swuni", N_("360 DPI Unidirectional"),
- 360, 360, 360, 360, 1, 0, 1, 1, 1, 1, 1, RES_360 },
-
- { "720x360sw", N_("720 x 360 DPI"),
- 720, 360, 720, 360, 1, 0, 1, 1, 0, 2, 1, RES_720_360 },
- { "720x360swuni", N_("720 x 360 DPI Unidirectional"),
- 720, 360, 720, 360, 1, 0, 1, 1, 1, 2, 1, RES_720_360 },
-
- { "720sw", N_("720 DPI"),
- 720, 720, 720, 720, 1, 0, 1, 1, 0, 1, 1, RES_720 },
- { "720swuni", N_("720 DPI Unidirectional"),
- 720, 720, 720, 720, 1, 0, 1, 1, 1, 1, 1, RES_720 },
- { "720hq", N_("720 DPI High Quality"),
- 720, 720, 720, 720, 1, 0, 2, 1, 0, 1, 1, RES_720 },
- { "720hquni", N_("720 DPI High Quality Unidirectional"),
- 720, 720, 720, 720, 1, 0, 2, 1, 1, 1, 1, RES_720 },
- { "720hq2", N_("720 DPI Highest Quality"),
- 720, 720, 720, 720, 1, 0, 4, 1, 1, 1, 1, RES_720 },
-
- { "1440x720sw", N_("1440 x 720 DPI"),
- 1440, 720, 1440, 720, 1, 0, 1, 1, 0, 1, 1, RES_1440_720 },
- { "1440x720swuni", N_("1440 x 720 DPI Unidirectional"),
- 1440, 720, 1440, 720, 1, 0, 1, 1, 1, 1, 1, RES_1440_720 },
- { "1440x720hq2", N_("1440 x 720 DPI Highest Quality"),
- 1440, 720, 1440, 720, 1, 0, 2, 1, 1, 1, 1, RES_1440_720 },
-
- { "2880x720sw", N_("2880 x 720 DPI"),
- 2880, 720, 2880, 720, 1, 0, 1, 1, 0, 1, 1, RES_2880_720},
- { "2880x720swuni", N_("2880 x 720 DPI Unidirectional"),
- 2880, 720, 2880, 720, 1, 0, 1, 1, 1, 1, 1, RES_2880_720},
-
- { "1440x1440sw", N_("1440 x 1440 DPI"),
- 2880, 1440, 1440, 1440, 1, 0, 1, 1, 1, 1, 1, RES_2880_1440},
- { "1440x1440hq2", N_("1440 x 1440 DPI Highest Quality"),
- 2880, 1440, 1440, 1440, 1, 0, 1, 1, 1, 1, 1, RES_2880_1440},
-
- { "2880x1440sw", N_("2880 x 1440 DPI"),
- 2880, 1440, 2880, 1440, 1, 0, 1, 1, 1, 1, 1, RES_2880_1440},
-
- { "", "", 0, 0, 0, 0, 0, 0, 0, 0, 1, -1 }
-};
-
-static const res_t no_interleave_reslist[] =
-{
- { "360x90dpi", N_("360 x 90 DPI Fast Economy Draft"),
- 360, 90, 360, 90, 0, 0, 1, 1, 0, 1, 1, RES_120_M },
- { "360x90sw", N_("360 x 90 DPI Fast Economy Draft"),
- 360, 90, 360, 90, 1, 0, 1, 1, 0, 1, 1, RES_120 },
-
- { "360x120dpi", N_("360 x 120 DPI Economy Draft"),
- 360, 120, 360, 120, 0, 0, 1, 1, 0, 3, 1, RES_120_M },
- { "360x120sw", N_("360 x 120 DPI Economy Draft"),
- 360, 120, 360, 120, 1, 0, 1, 1, 0, 3, 1, RES_120 },
-
- { "180dpi", N_("180 DPI Economy Draft"),
- 180, 180, 180, 180, 0, 0, 1, 1, 0, 1, 1, RES_180_M },
- { "180sw", N_("180 DPI Economy Draft"),
- 180, 180, 180, 180, 1, 0, 1, 1, 0, 1, 1, RES_180 },
-
- { "360x240dpi", N_("360 x 240 DPI Draft"),
- 360, 240, 360, 240, 0, 0, 1, 1, 0, 3, 2, RES_180_M },
- { "360x240sw", N_("360 x 240 DPI Draft"),
- 360, 240, 360, 240, 1, 0, 1, 1, 0, 3, 2, RES_180 },
-
- { "360x180dpi", N_("360 x 180 DPI Draft"),
- 360, 180, 360, 180, 0, 0, 1, 1, 0, 1, 1, RES_180_M },
- { "360x180sw", N_("360 x 180 DPI Draft"),
- 360, 180, 360, 180, 1, 0, 1, 1, 0, 1, 1, RES_180 },
-
- { "360sw", N_("360 DPI"),
- 360, 360, 360, 360, 1, 0, 1, 1, 0, 1, 1, RES_360 },
- { "360swuni", N_("360 DPI Unidirectional"),
- 360, 360, 360, 360, 1, 0, 1, 1, 1, 1, 1, RES_360 },
- { "360dpi", N_("360 DPI"),
- 360, 360, 360, 360, 0, 0, 1, 1, 0, 1, 1, RES_360_M },
- { "360uni", N_("360 DPI Unidirectional"),
- 360, 360, 360, 360, 0, 0, 1, 1, 1, 1, 1, RES_360_M },
-
- { "720x360sw", N_("720 x 360 DPI"),
- 720, 360, 720, 360, 1, 0, 1, 1, 0, 2, 1, RES_720_360 },
- { "720x360swuni", N_("720 x 360 DPI Unidirectional"),
- 720, 360, 720, 360, 1, 0, 1, 1, 1, 2, 1, RES_720_360 },
-
- { "720sw", N_("720 DPI"),
- 720, 720, 720, 720, 1, 0, 1, 1, 0, 1, 1, RES_720 },
- { "720swuni", N_("720 DPI Unidirectional"),
- 720, 720, 720, 720, 1, 0, 1, 1, 1, 1, 1, RES_720 },
- { "720hq", N_("720 DPI High Quality"),
- 720, 720, 720, 720, 1, 0, 2, 1, 0, 1, 1, RES_720 },
- { "720hquni", N_("720 DPI High Quality Unidirectional"),
- 720, 720, 720, 720, 1, 0, 2, 1, 1, 1, 1, RES_720 },
- { "720hq2", N_("720 DPI Highest Quality"),
- 720, 720, 720, 720, 1, 0, 4, 1, 1, 1, 1, RES_720 },
-
- { "1440x720sw", N_("1440 x 720 DPI"),
- 1440, 720, 1440, 720, 1, 0, 1, 1, 0, 1, 1, RES_1440_720 },
- { "1440x720swuni", N_("1440 x 720 DPI Unidirectional"),
- 1440, 720, 1440, 720, 1, 0, 1, 1, 1, 1, 1, RES_1440_720 },
- { "1440x720hq2", N_("1440 x 720 DPI Highest Quality"),
- 1440, 720, 1440, 720, 1, 0, 2, 1, 1, 1, 1, RES_1440_720 },
+static const escp2_densities_t c3pl_pigment_densities =
+{ 2.4, 1.2, 0.60, 0.600, 0.512, 0.512, 0.512, 0.0 };
- { "2880x720sw", N_("2880 x 720 DPI"),
- 2880, 720, 2880, 720, 1, 0, 1, 1, 0, 1, 1, RES_2880_720},
- { "2880x720swuni", N_("2880 x 720 DPI Unidirectional"),
- 2880, 720, 2880, 720, 1, 0, 1, 1, 1, 1, 1, RES_2880_720},
+static const escp2_densities_t c3pl_pigment_c66_densities =
+{ 2.8, 1.4, 0.70, 0.600, 0.512, 0.512, 0.512, 0.0 };
- { "1440x1440sw", N_("1440 x 1440 DPI"),
- 1440, 1440, 1440, 1440, 1, 0, 1, 1, 1, 1, 1, RES_1440_1440},
- { "1440x1440hq2", N_("1440 x 1440 DPI Highest Quality"),
- 1440, 1440, 1440, 1440, 1, 0, 2, 1, 1, 1, 1, RES_1440_1440},
+static const escp2_densities_t c3pl_densities =
+{ 2.6, 1.3, 0.65, 0.730, 0.7, 0.91, 0.455, 0.0 };
- { "2880x1440sw", N_("2880 x 1440 DPI"),
- 2880, 1440, 2880, 1440, 1, 0, 1, 1, 1, 1, 1, RES_2880_1440},
+static const escp2_densities_t p3pl_densities =
+{ 4.0, 2.0, 1.00, 0.815, 0.788, 0.821, 0.680, 0.340 };
- { "", "", 0, 0, 0, 0, 0, 0, 0, 0, 1, -1 }
-};
+static const escp2_densities_t p1_5pl_densities =
+{ 2.8, 1.4, 1.00, 1.000, 0.869, 0.942, 0.471, 0.500 };
-static const res_t pro_reslist[] =
-{
- { "360x90dpi", N_("360 x 90 DPI Fast Economy Draft"),
- 360, 90, 360, 90, 0, 0, 1, 1, 0, 1, 1, RES_120_M },
+static const escp2_densities_t c2pl_densities =
+{ 2.0, 1.0, 0.5, 0.650, 0.650, 0.0, 0.650, 0.325 };
- { "360x120dpi", N_("360 x 120 DPI Economy Draft"),
- 360, 120, 360, 120, 0, 0, 1, 1, 0, 3, 1, RES_120_M },
+static const escp2_densities_t c1_8pl_densities =
+{ 2.3, 1.15, 0.57, 0.650, 0.650, 0.0, 0.650, 0.360 };
- { "180dpi", N_("180 DPI Economy Draft"),
- 180, 180, 180, 180, 0, 0, 1, 1, 0, 1, 1, RES_180_M },
+static const escp2_densities_t sc1500_densities =
+{ 2.6, 1.3, 1.3, 0.631, 0.0, 0.0, 0.0, 0.0 };
- { "360x240dpi", N_("360 x 240 DPI Draft"),
- 360, 240, 360, 240, 0, 0, 1, 1, 0, 3, 2, RES_180_M },
+static const escp2_densities_t sc440_densities =
+{ 4.0, 2.0, 1.0, 0.900, 0.45, 0.0, 0.0, 0.0 };
- { "360x180dpi", N_("360 x 180 DPI Draft"),
- 360, 180, 360, 180, 0, 0, 1, 1, 0, 1, 1, RES_180_M },
+static const escp2_densities_t sc480_densities =
+{ 2.8, 1.4, 0.7, 0.710, 0.710, 0.546, 0.0, 0.0 };
- { "360mw", N_("360 DPI Interleave"),
- 360, 360, 360, 360, 0, 1, 1, 1, 0, 1, 1, RES_360_M },
- { "360mwuni", N_("360 DPI Interleave Unidirectional"),
- 360, 360, 360, 360, 0, 1, 1, 1, 1, 1, 1, RES_360_M },
- { "360dpi", N_("360 DPI"),
- 360, 360, 360, 360, 0, 0, 1, 1, 0, 1, 1, RES_360_M },
- { "360uni", N_("360 DPI Unidirectional"),
- 360, 360, 360, 360, 0, 0, 1, 1, 1, 1, 1, RES_360_M },
- { "360fol", N_("360 DPI Full Overlap"),
- 360, 360, 360, 360, 0, 2, 1, 1, 0, 1, 1, RES_360_M },
- { "360foluni", N_("360 DPI Full Overlap Unidirectional"),
- 360, 360, 360, 360, 0, 2, 1, 1, 1, 1, 1, RES_360_M },
- { "360fol2", N_("360 DPI FOL2"),
- 360, 360, 360, 360, 0, 4, 1, 1, 0, 1, 1, RES_360_M },
- { "360fol2uni", N_("360 DPI FOL2 Unidirectional"),
- 360, 360, 360, 360, 0, 4, 1, 1, 1, 1, 1, RES_360_M },
- { "360mw2", N_("360 DPI MW2"),
- 360, 360, 360, 360, 0, 5, 1, 1, 0, 1, 1, RES_360_M },
- { "360mw2uni", N_("360 DPI MW2 Unidirectional"),
- 360, 360, 360, 360, 0, 5, 1, 1, 1, 1, 1, RES_360_M },
+static const escp2_densities_t sc660_densities =
+{ 4.0, 2.0, 1.0, 0.646, 0.323, 0.0, 0.0, 0.0 };
- { "720x360dpi", N_("720 x 360 DPI"),
- 720, 360, 720, 360, 0, 0, 1, 1, 0, 2, 1, RES_720_360_M },
- { "720x360uni", N_("720 x 360 DPI Unidirectional"),
- 720, 360, 720, 360, 0, 0, 1, 1, 1, 2, 1, RES_720_360_M },
- { "720x360mw", N_("720 x 360 DPI Interleave"),
- 720, 360, 720, 360, 0, 1, 1, 1, 0, 2, 1, RES_720_360_M },
- { "720x360mwuni", N_("720 x 360 DPI Interleave Unidirectional"),
- 720, 360, 720, 360, 0, 1, 1, 1, 1, 2, 1, RES_720_360_M },
- { "720x360fol", N_("720 x 360 DPI FOL"),
- 720, 360, 720, 360, 0, 2, 1, 1, 0, 2, 1, RES_720_360_M },
- { "720x360foluni", N_("720 x 360 DPI FOL Unidirectional"),
- 720, 360, 720, 360, 0, 2, 1, 1, 1, 2, 1, RES_720_360_M },
- { "720x360fol2", N_("720 x 360 DPI FOL2"),
- 720, 360, 720, 360, 0, 4, 1, 1, 0, 2, 1, RES_720_360_M },
- { "720x360fol2uni", N_("720 x 360 DPI FOL2 Unidirectional"),
- 720, 360, 720, 360, 0, 4, 1, 1, 1, 2, 1, RES_720_360_M },
- { "720x360mw2", N_("720 x 360 DPI MW2"),
- 720, 360, 720, 360, 0, 5, 1, 1, 0, 2, 1, RES_720_360_M },
- { "720x360mw2uni", N_("720 x 360 DPI MW2 Unidirectional"),
- 720, 360, 720, 360, 0, 5, 1, 1, 1, 2, 1, RES_720_360_M },
+static const escp2_densities_t sc980_densities =
+{ 2.6, 1.3, 0.65, 0.511, 0.49, 0.637, 0.455, 0.0 };
- { "720mw", N_("720 DPI Interleave"),
- 720, 720, 720, 720, 0, 1, 1, 1, 0, 1, 1, RES_720_M },
- { "720mwuni", N_("720 DPI Interleave Unidirectional"),
- 720, 720, 720, 720, 0, 1, 1, 1, 1, 1, 1, RES_720_M },
- { "720fol", N_("720 DPI Full Overlap"),
- 720, 720, 720, 720, 0, 2, 1, 1, 0, 1, 1, RES_720_M },
- { "720foluni", N_("720 DPI Full Overlap Unidirectional"),
- 720, 720, 720, 720, 0, 2, 1, 1, 1, 1, 1, RES_720_M },
- { "720fourp", N_("720 DPI Four Pass"),
- 720, 720, 720, 720, 0, 3, 1, 1, 0, 1, 1, RES_720_M },
- { "720fourpuni", N_("720 DPI Four Pass Unidirectional"),
- 720, 720, 720, 720, 0, 3, 1, 1, 1, 1, 1, RES_720_M },
+static const escp2_densities_t sp700_densities =
+{ 2.6, 1.3, 1.3, 0.775, 0.55, 0.0, 0.0, 0.0 };
- { "1440x720mw", N_("1440 x 720 DPI Interleave"),
- 1440, 720, 1440, 720, 0, 1, 1, 1, 0, 1, 1, RES_1440_720_M },
- { "1440x720mwuni", N_("1440 x 720 DPI Interleave Unidirectional"),
- 1440, 720, 1440, 720, 0, 1, 1, 1, 1, 1, 1, RES_1440_720_M },
- { "1440x720fol", N_("1440 x 720 DPI FOL"),
- 1440, 720, 1440, 720, 0, 2, 1, 1, 0, 1, 1, RES_1440_720_M },
- { "1440x720foluni", N_("1440 x 720 DPI FOL Unidirectional"),
- 1440, 720, 1440, 720, 0, 2, 1, 1, 1, 1, 1, RES_1440_720_M },
- { "1440x720fourp", N_("1440 x 720 DPI Four Pass"),
- 1440, 720, 1440, 720, 0, 3, 1, 1, 0, 1, 1, RES_1440_720_M },
- { "1440x720fourpuni", N_("1440 x 720 DPI Four Pass Unidirectional"),
- 1440, 720, 1440, 720, 0, 3, 1, 1, 1, 1, 1, RES_1440_720_M },
+static const escp2_densities_t sp2000_densities =
+{ 2.6, 1.3, 0.65, 0.852, 0.438, 0.219, 0.0, 0.0 };
- { "2880x720mw", N_("2880 x 720 DPI Interleave"),
- 2880, 720, 2880, 720, 0, 1, 1, 1, 0, 1, 1, RES_2880_720_M },
- { "2880x720mwuni", N_("2880 x 720 DPI Interleave Unidirectional"),
- 2880, 720, 2880, 720, 0, 1, 1, 1, 1, 1, 1, RES_2880_720_M },
- { "2880x720fol", N_("2880 x 720 DPI FOL"),
- 2880, 720, 2880, 720, 0, 2, 1, 1, 0, 1, 1, RES_2880_720_M },
- { "2880x720foluni", N_("2880 x 720 DPI FOL Unidirectional"),
- 2880, 720, 2880, 720, 0, 2, 1, 1, 1, 1, 1, RES_2880_720_M },
- { "2880x720fourp", N_("2880 x 720 DPI Four Pass"),
- 2880, 720, 2880, 720, 0, 3, 1, 1, 0, 1, 1, RES_2880_720_M },
- { "2880x720fourpuni", N_("2880 x 720 DPI Four Pass Unidirectional"),
- 2880, 720, 2880, 720, 0, 3, 1, 1, 1, 1, 1, RES_2880_720_M },
+static const escp2_densities_t spro_dye_densities =
+{ 2.6, 1.3, 1.3, 0.775, 0.388, 0.275, 0.0, 0.0 };
- { "1440x1440mw", N_("1440 x 1440 DPI Interleave"),
- 1440, 1440, 1440, 1440, 0, 1, 1, 1, 0, 1, 1, RES_1440_1440_M },
- { "1440x1440mwuni", N_("1440 x 1440 DPI Interleave Unidirectional"),
- 1440, 1440, 1440, 1440, 0, 1, 1, 1, 1, 1, 1, RES_1440_1440_M },
- { "1440x1440fol", N_("1440 x 1440 DPI FOL"),
- 1440, 1440, 1440, 1440, 0, 2, 1, 1, 0, 1, 1, RES_1440_1440_M },
- { "1440x1440foluni", N_("1440 x 1440 DPI FOL Unidirectional"),
- 1440, 1440, 1440, 1440, 0, 2, 1, 1, 1, 1, 1, RES_1440_1440_M },
- { "1440x1440fourp", N_("1440 x 1440 DPI Four Pass"),
- 1440, 1440, 1440, 1440, 0, 3, 1, 1, 0, 1, 1, RES_1440_1440_M },
- { "1440x1440fourpuni", N_("1440 x 1440 DPI Four Pass Unidirectional"),
- 1440, 1440, 1440, 1440, 0, 3, 1, 1, 1, 1, 1, RES_1440_1440_M },
+static const escp2_densities_t spro_pigment_densities =
+{ 3.0, 1.5, 0.78, 0.775, 0.388, 0.194, 0.0, 0.0 };
- { "2880x1440mw", N_("2880 x 1440 DPI Interleave"),
- 2880, 1440, 2880, 1440, 0, 1, 1, 1, 0, 1, 1, RES_2880_1440_M },
- { "2880x1440mwuni", N_("2880 x 1440 DPI Interleave Unidirectional"),
- 2880, 1440, 2880, 1440, 0, 1, 1, 1, 1, 1, 1, RES_2880_1440_M },
- { "2880x1440fol", N_("2880 x 1440 DPI FOL"),
- 2880, 1440, 2880, 1440, 0, 2, 1, 1, 0, 1, 1, RES_2880_1440_M },
- { "2880x1440foluni", N_("2880 x 1440 DPI FOL Unidirectional"),
- 2880, 1440, 2880, 1440, 0, 2, 1, 1, 1, 1, 1, RES_2880_1440_M },
- { "2880x1440fourp", N_("2880 x 1440 DPI Four Pass"),
- 2880, 1440, 2880, 1440, 0, 3, 1, 1, 0, 1, 1, RES_2880_1440_M },
- { "2880x1440fourpuni", N_("2880 x 1440 DPI Four Pass Unidirectional"),
- 2880, 1440, 2880, 1440, 0, 3, 1, 1, 1, 1, 1, RES_2880_1440_M },
+static const escp2_densities_t spro10000_densities =
+{ 2.6, 1.3, 0.65, 0.431, 0.216, 0.392, 0.0, 0.0 };
- { "", "", 0, 0, 0, 0, 0, 0, 0, 0, 1, -1 }
-};
static const input_slot_t standard_roll_feed_input_slots[] =
{
@@ -4204,16 +286,18 @@ static const input_slot_t standard_roll_feed_input_slots[] =
N_("Standard"),
0,
0,
- { "IR\002\000\000\001EX\006\000\000\000\000\000\005\000", 16 },
- { "IR\002\000\000\000", 6}
+ 0,
+ { 16, "IR\002\000\000\001EX\006\000\000\000\000\000\005\000" },
+ { 6, "IR\002\000\000\000"}
},
{
"Roll",
N_("Roll Feed"),
- 1,
0,
- { "IR\002\000\000\001EX\006\000\000\000\000\000\005\001", 16 },
- { "IR\002\000\000\002", 6 }
+ 1,
+ ROLL_FEED_DONT_EJECT,
+ { 16, "IR\002\000\000\001EX\006\000\000\000\000\000\005\001" },
+ { 6, "IR\002\000\000\002" }
}
};
@@ -4230,24 +314,27 @@ static const input_slot_t cutter_roll_feed_input_slots[] =
N_("Standard"),
0,
0,
- { "IR\002\000\000\001EX\006\000\000\000\000\000\005\000", 16 },
- { "IR\002\000\000\000", 6}
+ 0,
+ { 16, "IR\002\000\000\001EX\006\000\000\000\000\000\005\000" },
+ { 6, "IR\002\000\000\000"}
},
{
"RollCutPage",
N_("Roll Feed (cut each page)"),
+ 0,
1,
- 1,
- { "IR\002\000\000\001EX\006\000\000\000\000\000\005\001", 16 },
- { "IR\002\000\000\002", 6 }
+ ROLL_FEED_CUT_ALL,
+ { 16, "IR\002\000\000\001EX\006\000\000\000\000\000\005\001" },
+ { 6, "IR\002\000\000\002" }
},
{
"RollCutNone",
N_("Roll Feed (do not cut)"),
- 1,
0,
- { "IR\002\000\000\001EX\006\000\000\000\000\000\005\001", 16 },
- { "IR\002\000\000\002", 6 }
+ 1,
+ ROLL_FEED_DONT_EJECT,
+ { 16, "IR\002\000\000\001EX\006\000\000\000\000\000\005\001" },
+ { 6, "IR\002\000\000\002" }
}
};
@@ -4257,6 +344,107 @@ static const input_slot_list_t cutter_roll_feed_input_slot_list =
sizeof(cutter_roll_feed_input_slots) / sizeof(const input_slot_t)
};
+static const input_slot_t cd_cutter_roll_feed_input_slots[] =
+{
+ {
+ "Standard",
+ N_("Standard"),
+ 0,
+ 0,
+ 0,
+ { 23, "IR\002\000\000\001EX\006\000\000\000\000\000\005\000PP\003\000\000\001\377" },
+ { 6, "IR\002\000\000\000"}
+ },
+ {
+ "Manual",
+ N_("Manual Feed"),
+ 0,
+ 0,
+ 0,
+ { 36, "PM\002\000\000\000IR\002\000\000\001EX\006\000\000\000\000\000\005\000FP\003\000\000\000\000PP\003\000\000\002\001" },
+ { 6, "IR\002\000\000\000"}
+ },
+ {
+ "CD",
+ N_("Print to CD"),
+ 1,
+ 0,
+ 0,
+ { 36, "PM\002\000\000\000IR\002\000\000\001EX\006\000\000\000\000\000\005\000FP\003\000\000\000\000PP\003\000\000\002\001" },
+ { 6, "IR\002\000\000\000"}
+ },
+ {
+ "RollCutPage",
+ N_("Roll Feed (cut each page)"),
+ 0,
+ 1,
+ ROLL_FEED_CUT_ALL,
+ { 23, "IR\002\000\000\001EX\006\000\000\000\000\000\005\001PP\003\000\000\001\377" },
+ { 6, "IR\002\000\000\002" }
+ },
+ {
+ "RollCutNone",
+ N_("Roll Feed (do not cut)"),
+ 0,
+ 1,
+ ROLL_FEED_DONT_EJECT,
+ { 23, "IR\002\000\000\001EX\006\000\000\000\000\000\005\001PP\003\000\000\001\377" },
+ { 6, "IR\002\000\000\002" }
+ }
+};
+
+static const input_slot_list_t cd_cutter_roll_feed_input_slot_list =
+{
+ cd_cutter_roll_feed_input_slots,
+ sizeof(cd_cutter_roll_feed_input_slots) / sizeof(const input_slot_t)
+};
+
+static const input_slot_t cd_roll_feed_input_slots[] =
+{
+ {
+ "Standard",
+ N_("Standard"),
+ 0,
+ 0,
+ 0,
+ { 23, "IR\002\000\000\001EX\006\000\000\000\000\000\005\000PP\003\000\000\001\377" },
+ { 6, "IR\002\000\000\000"}
+ },
+ {
+ "Manual",
+ N_("Manual Feed"),
+ 0,
+ 0,
+ 0,
+ { 36, "PM\002\000\000\000IR\002\000\000\001EX\006\000\000\000\000\000\005\000FP\003\000\000\000\000PP\003\000\000\002\001" },
+ { 6, "IR\002\000\000\000"}
+ },
+ {
+ "CD",
+ N_("Print to CD"),
+ 1,
+ 0,
+ 0,
+ { 36, "PM\002\000\000\000IR\002\000\000\001EX\006\000\000\000\000\000\005\000FP\003\000\000\000\000PP\003\000\000\002\001" },
+ { 6, "IR\002\000\000\000"}
+ },
+ {
+ "Roll",
+ N_("Roll Feed"),
+ 0,
+ 1,
+ ROLL_FEED_DONT_EJECT,
+ { 23, "IR\002\000\000\001EX\006\000\000\000\000\000\005\001PP\003\000\000\001\377" },
+ { 6, "IR\002\000\000\002" }
+ }
+};
+
+static const input_slot_list_t cd_roll_feed_input_slot_list =
+{
+ cd_roll_feed_input_slots,
+ sizeof(cd_roll_feed_input_slots) / sizeof(const input_slot_t)
+};
+
static const input_slot_t pro_roll_feed_input_slots[] =
{
{
@@ -4264,16 +452,18 @@ static const input_slot_t pro_roll_feed_input_slots[] =
N_("Standard"),
0,
0,
- { "PP\003\000\000\002\000", 7 },
- { "", 0 }
+ 0,
+ { 7, "PP\003\000\000\002\000" },
+ { 0, "" }
},
{
"Roll",
N_("Roll Feed"),
+ 0,
1,
0,
- { "PP\003\000\000\003\000", 7 },
- { "", 0 }
+ { 7, "PP\003\000\000\003\000" },
+ { 0, "" }
}
};
@@ -4283,46 +473,50 @@ static const input_slot_list_t pro_roll_feed_input_slot_list =
sizeof(pro_roll_feed_input_slots) / sizeof(const input_slot_t)
};
-static const input_slot_t sp5000_input_slots[] =
+static const input_slot_t spro5000_input_slots[] =
{
{
"CutSheet1",
N_("Cut Sheet Bin 1"),
0,
0,
- { "PP\003\000\000\001\001", 7 },
- { "", 0 }
+ 0,
+ { 7, "PP\003\000\000\001\001" },
+ { 0, "" }
},
{
"CutSheet2",
N_("Cut Sheet Bin 2"),
0,
0,
- { "PP\003\000\000\002\001", 7 },
- { "", 0 }
+ 0,
+ { 7, "PP\003\000\000\002\001" },
+ { 0, "" }
},
{
"CutSheetAuto",
N_("Cut Sheet Autoselect"),
0,
0,
- { "PP\003\000\000\001\377", 7 },
- { "", 0 }
+ 0,
+ { 7, "PP\003\000\000\001\377" },
+ { 0, "" }
},
{
"ManualSelect",
N_("Manual Selection"),
0,
0,
- { "PP\003\000\000\002\001", 7 },
- { "", 0 }
+ 0,
+ { 7, "PP\003\000\000\002\001" },
+ { 0, "" }
}
};
-static const input_slot_list_t sp5000_input_slot_list =
+static const input_slot_list_t spro5000_input_slot_list =
{
- sp5000_input_slots,
- sizeof(sp5000_input_slots) / sizeof(const input_slot_t)
+ spro5000_input_slots,
+ sizeof(spro5000_input_slots) / sizeof(const input_slot_t)
};
static const input_slot_list_t default_input_slot_list =
@@ -4331,983 +525,1318 @@ static const input_slot_list_t default_input_slot_list =
0,
};
-static const init_sequence_t new_init_sequence =
+static const stp_raw_t new_init_sequence =
{
- "\0\0\0\033\001@EJL 1284.4\n@EJL \n\033@", 29
+ 29, "\0\0\0\033\001@EJL 1284.4\n@EJL \n\033@"
};
-static const init_sequence_t je_deinit_sequence =
+static const stp_raw_t je_deinit_sequence =
{
- "JE\001\000\000", 5
+ 5, "JE\001\000\000"
};
#define INCH(x) (72 * x)
-const escp2_stp_printer_t stp_escp2_model_capabilities[] =
+static const quality_t standard_qualities[] =
+{
+ { "FastEconomy", N_("Fast Economy"), 360, 120, 0, 0, 360, 90 },
+ { "Economy", N_("Economy"), 360, 240, 0, 0, 360, 180 },
+ { "Draft", N_("Draft"), 360, 360, 0, 0, 360, 360 },
+ { "Standard", N_("Standard"), 0, 0, 0, 0, 720, 360 },
+ { "High", N_("High"), 0, 0, 0, 0, 720, 720 },
+ { "Photo", N_("Photo"), 0, 0, 1440, 720, 1440, 720 },
+ { "HighPhoto", N_("Super Photo"), 0, 0, 2880, 2880, 2880, 1440 },
+ { "UltraPhoto", N_("Ultra Photo"), 0, 0, 2880, 2880, 2880, 2880 },
+ { "Best", N_("Best"), 720, 360, 0, 0, -1, -1 },
+};
+
+static const quality_list_t standard_quality_list =
+{
+ standard_qualities,
+ sizeof(standard_qualities) / sizeof(quality_t)
+};
+
+#define DECLARE_CHANNEL_LIST(name) \
+static const channel_name_t name##_channel_name_list = \
+{ \
+ #name, \
+ sizeof(name##_channel_names) / sizeof(const char *), \
+ name##_channel_names \
+}
+
+static const char *standard_channel_names[] =
+{
+ N_("Black"),
+ N_("Cyan"),
+ N_("Magenta"),
+ N_("Yellow")
+};
+
+DECLARE_CHANNEL_LIST(standard);
+
+static const char *photo_channel_names[] =
+{
+ N_("Black"),
+ N_("Cyan"),
+ N_("Magenta"),
+ N_("Yellow"),
+ N_("Light Cyan"),
+ N_("Light Magenta"),
+};
+
+DECLARE_CHANNEL_LIST(photo);
+
+static const char *sp2200_channel_names[] =
+{
+ N_("Black"),
+ N_("Cyan"),
+ N_("Magenta"),
+ N_("Yellow"),
+ N_("Light Cyan"),
+ N_("Light Magenta"),
+ N_("Light Black"),
+};
+
+DECLARE_CHANNEL_LIST(sp2200);
+
+static const char *pm_950c_channel_names[] =
+{
+ N_("Black"),
+ N_("Cyan"),
+ N_("Magenta"),
+ N_("Yellow"),
+ N_("Light Cyan"),
+ N_("Light Magenta"),
+ N_("Dark Yellow"),
+};
+
+DECLARE_CHANNEL_LIST(pm_950c);
+
+static const char *sp960_channel_names[] =
+{
+ N_("Black"),
+ N_("Cyan"),
+ N_("Magenta"),
+ N_("Yellow"),
+ N_("Light Cyan"),
+ N_("Light Magenta"),
+ N_("Black"),
+};
+
+DECLARE_CHANNEL_LIST(sp960);
+
+static const char *r800_channel_names[] =
+{
+ N_("Yellow"),
+ N_("Magenta"),
+ N_("Cyan"),
+ N_("Matte Black"),
+ N_("Photo Black"),
+ N_("Red"),
+ N_("Blue"),
+ N_("Gloss Optimizer"),
+};
+
+DECLARE_CHANNEL_LIST(r800);
+
+const stpi_escp2_printer_t stpi_escp2_model_capabilities[] =
{
/* FIRST GENERATION PRINTERS */
/* 0: Stylus Color */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1998 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 15, 1, 4, 15, 1, 4, 15, 1, 4,
- 360, 720, 720, 14400, -1, 720, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- g1_dotsizes, g1_densities, &simple_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 15, 1, 4, 15, 1, 4, 15, 1, 4, 4,
+ 360, 14400, -1, 720, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ g1_dotsizes, g1_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_720dpi_reslist, &stpi_escp2_standard_inkgroup,
standard_bits, standard_base_res, &default_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ NULL, &standard_channel_name_list
},
/* 1: Stylus Color 400/500 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1998 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 48, 1, 3, 48, 1, 3,
- 360, 720, 720, 14400, -1, 720, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- g2_dotsizes, g1_densities, &simple_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4,
+ 360, 14400, -1, 720, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ g2_dotsizes, g1_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_sc500_reslist, &stpi_escp2_standard_inkgroup,
standard_bits, standard_base_res, &default_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ NULL, &standard_channel_name_list
},
/* 2: Stylus Color 1500 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1998 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 360, 720, 720, 14400, -1, 720, 720, 90, 90,
- INCH(17), INCH(44), INCH(2), INCH(4),
- 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- g1_dotsizes, sc1500_densities, &simple_inks,
- &standard_paper_list, standard_reslist, &cmy_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4,
+ 360, 14400, -1, 720, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(17), INCH(44), INCH(2), INCH(2),
+ 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ g1_dotsizes, sc1500_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_sc500_reslist, &stpi_escp2_cmy_inkgroup,
standard_bits, standard_base_res, &standard_roll_feed_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ NULL, &standard_channel_name_list
},
/* 3: Stylus Color 600 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1998 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 32, 1, 4, 32, 1, 4, 32, 1, 4,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 8, 9, 0, 30, 8, 9, 0, 30, 8, 9, 0, 0, 8, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 8,
- sc600_dotsizes, g3_densities, &simple_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 32, 1, 4, 32, 1, 4, 32, 1, 4, 4,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 8,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 8, 9, 0, 30, 8, 9, 0, 30, 8, 9, 0, 0, 8, 9, 0, 0, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ sc600_dotsizes, g3_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_g3_reslist, &stpi_escp2_standard_inkgroup,
standard_bits, g3_base_res, &default_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ NULL, &standard_channel_name_list
},
/* 4: Stylus Color 800 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1998 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 64, 1, 2, 64, 1, 2, 64, 1, 2,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 8, 9, 9, 40, 8, 9, 9, 40, 8, 9, 0, 0, 8, 9, 0, 0,
- 0, 1, 4, 0, 0, 0, 0,
- g3_dotsizes, g3_densities, &simple_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 64, 1, 2, 64, 1, 2, 64, 1, 2, 4,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 4, 0, 0, 0, 0,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 8, 9, 9, 40, 8, 9, 9, 40, 8, 9, 0, 0, 8, 9, 0, 0, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ g3_dotsizes, g3_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_g3_reslist, &stpi_escp2_standard_inkgroup,
standard_bits, g3_base_res, &default_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ NULL, &standard_channel_name_list
},
/* 5: Stylus Color 850 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1998 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 64, 1, 2, 64, 1, 2, 64, 1, 2,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 4, 0, 0, 0, 0,
- g3_dotsizes, g3_densities, &simple_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 64, 1, 2, 64, 1, 2, 64, 1, 2, 4,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 4, 0, 0, 0, 0,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ g3_dotsizes, g3_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_g3_reslist, &stpi_escp2_standard_inkgroup,
standard_bits, g3_base_res, &default_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ NULL, &standard_channel_name_list
},
/* 6: Stylus Color 1520 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1998 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 64, 1, 2, 64, 1, 2, 64, 1, 2,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17), INCH(44), INCH(2), INCH(4),
- 8, 9, 9, 40, 8, 9, 9, 40, 8, 9, 0, 0, 8, 9, 0, 0,
- 0, 1, 4, 0, 0, 0, 0,
- g3_dotsizes, g3_densities, &simple_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 64, 1, 2, 64, 1, 2, 64, 1, 2, 4,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 4, 0, 0, 0, 0,
+ INCH(17), INCH(44), INCH(2), INCH(2),
+ 8, 9, 9, 40, 8, 9, 9, 40, 8, 9, 0, 0, 8, 9, 0, 0, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ g3_dotsizes, g3_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_g3_reslist, &stpi_escp2_standard_inkgroup,
standard_bits, g3_base_res, &standard_roll_feed_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ NULL, &standard_channel_name_list
},
/* SECOND GENERATION PRINTERS */
/* 7: Stylus Photo 700 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1998 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 32, 1, 4, 32, 1, 4, 32, 1, 4,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 9, 9, 0, 30, 9, 9, 0, 30, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 8,
- photo_dotsizes, photo_densities, &simple_inks,
- &standard_paper_list, standard_reslist, &photo_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 32, 1, 4, 32, 1, 4, 32, 1, 4, 6,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 8,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 9, 9, 0, 30, 9, 9, 0, 30, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ sp700_dotsizes, sp700_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_g3_reslist, &stpi_escp2_photo_gen1_inkgroup,
standard_bits, g3_base_res, &default_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ NULL, &photo_channel_name_list
},
/* 8: Stylus Photo EX */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1998 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 32, 1, 4, 32, 1, 4, 32, 1, 4,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(118 / 10), INCH(44), INCH(2), INCH(4),
- 9, 9, 0, 30, 9, 9, 0, 30, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 8,
- photo_dotsizes, photo_densities, &simple_inks,
- &standard_paper_list, standard_reslist, &photo_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_NO | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 32, 1, 4, 32, 1, 4, 32, 1, 4, 6,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 8,
+ INCH(118 / 10), INCH(44), INCH(2), INCH(2),
+ 9, 9, 0, 30, 9, 9, 0, 30, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ sp700_dotsizes, sp700_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_g3_reslist, &stpi_escp2_photo_gen1_inkgroup,
standard_bits, g3_base_res, &default_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ NULL, &photo_channel_name_list
},
/* 9: Stylus Photo */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1998 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 32, 1, 4, 32, 1, 4, 32, 1, 4,
- 360, 720, 720, 14400, -1, 720, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 9, 9, 0, 30, 9, 9, 0, 30, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 8,
- photo_dotsizes, photo_densities, &simple_inks,
- &standard_paper_list, standard_reslist, &photo_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 32, 1, 4, 32, 1, 4, 32, 1, 4, 6,
+ 360, 14400, -1, 720, 720, 90, 90, 0, 1, 0, 0, 0, 0, 8,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 9, 9, 0, 30, 9, 9, 0, 30, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ sp700_dotsizes, sp700_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_g3_720dpi_reslist, &stpi_escp2_photo_gen1_inkgroup,
standard_bits, g3_base_res, &default_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ NULL, &photo_channel_name_list
},
/* THIRD GENERATION PRINTERS */
/* 10: Stylus Color 440/460 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 21, 1, 4, 21, 1, 4, 21, 1, 4,
- 360, 720, 720, 14400, -1, 720, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 8,
- sc440_dotsizes, sc440_densities, &simple_inks,
- &standard_paper_list, no_interleave_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 21, 1, 4, 21, 1, 4, 21, 1, 4, 4,
+ 360, 14400, -1, 720, 720, 90, 90, 0, 1, 0, 0, 0, 0, 8,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 1, 15, 0, 0,
+ sc440_dotsizes, sc440_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_g3_720dpi_reslist, &stpi_escp2_standard_inkgroup,
standard_bits, standard_base_res, &default_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ NULL, &standard_channel_name_list
},
/* 11: Stylus Color 640 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1999 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 32, 1, 4, 32, 1, 4, 32, 1, 4,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 8,
- sc640_dotsizes, sc440_densities, &simple_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 32, 1, 4, 32, 1, 4, 32, 1, 4, 4,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 8,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 1, 15, 0, 0,
+ sc640_dotsizes, sc440_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_sc640_reslist, &stpi_escp2_standard_inkgroup,
standard_bits, standard_base_res, &default_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ NULL, &standard_channel_name_list
},
/* 12: Stylus Color 740/Stylus Scan 2000/Stylus Scan 2500 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 144, 1, 1, 144, 1, 1,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- c6pl_dotsizes, c6pl_densities, &variable_6pl_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 48, 1, 3, 144, 1, 1, 144, 1, 1, 4,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c6pl_dotsizes, c6pl_densities, &stpi_escp2_variable_6pl_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_standard_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ NULL, &standard_channel_name_list
},
/* 13: Stylus Color 900 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 96, 1, 2, 192, 1, 1, 192, 1, 1,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- c3pl_dotsizes, c3pl_densities, &variable_3pl_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 96, 1, 2, 192, 1, 1, 192, 1, 1, 4,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c3pl_dotsizes, c3pl_densities, &stpi_escp2_variable_3pl_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_standard_inkgroup,
variable_bits, stc900_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 14: Stylus Photo 750 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_1999 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 48, 1, 3, 48, 1, 3,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- c6pl_dotsizes, c6pl_densities, &variable_6pl_inks,
- &standard_paper_list, standard_reslist, &photo_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 48, 1, 3, 48, 1, 3, 6,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c6pl_dotsizes, c6pl_densities, &stpi_escp2_variable_6pl_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_photo_gen1_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &photo_channel_name_list
},
/* 15: Stylus Photo 1200 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_1999 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 48, 1, 3, 48, 1, 3,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(13), INCH(44), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- c6pl_dotsizes, c6pl_densities, &variable_6pl_inks,
- &standard_paper_list, standard_reslist, &photo_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 48, 1, 3, 48, 1, 3, 6,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(13), INCH(44), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c6pl_dotsizes, c6pl_densities, &stpi_escp2_variable_6pl_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_photo_gen1_inkgroup,
variable_bits, variable_base_res, &standard_roll_feed_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &photo_channel_name_list
},
/* 16: Stylus Color 860 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 144, 1, 1, 144, 1, 1,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- c4pl_dotsizes, c4pl_densities, &variable_4pl_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 144, 1, 1, 144, 1, 1, 4,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c4pl_dotsizes, c4pl_densities, &stpi_escp2_variable_1440_4pl_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_standard_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 17: Stylus Color 1160 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 144, 1, 1, 144, 1, 1,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(13), INCH(44), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- c4pl_dotsizes, c4pl_densities, &variable_4pl_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 144, 1, 1, 144, 1, 1, 4,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(13), INCH(44), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c4pl_dotsizes, c4pl_densities, &stpi_escp2_variable_1440_4pl_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_standard_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 18: Stylus Color 660 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1999 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 32, 1, 4, 32, 1, 4, 32, 1, 4,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 9, 9, 9, 9, 9, 9, 9, 26, 9, 9, 9, 0, 9, 9, 9, 0,
- 0, 1, 0, 0, 0, 0, 8,
- sc660_dotsizes,sc660_densities, &simple_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 32, 1, 4, 32, 1, 4, 32, 1, 4, 4,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 8,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 9, 9, 9, 9, 9, 9, 9, 26, 9, 9, 9, 0, 9, 9, 9, 0, -1, -1, 0, 0,
+ 1, 15, 0, 0,
+ sc660_dotsizes, sc660_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_sc640_reslist, &stpi_escp2_standard_inkgroup,
standard_bits, standard_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 19: Stylus Color 760 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 144, 1, 1, 144, 1, 1,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- c4pl_dotsizes, c4pl_densities, &variable_4pl_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 144, 1, 1, 144, 1, 1, 4,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c4pl_dotsizes, c4pl_densities, &stpi_escp2_variable_1440_4pl_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_standard_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 20: Stylus Photo 720 (Australia) */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_1999 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 32, 1, 4, 32, 1, 4, 32, 1, 4,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- sc720_dotsizes, c6pl_densities, &variable_6pl_inks,
- &standard_paper_list, standard_reslist, &photo_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 32, 1, 4, 32, 1, 4, 32, 1, 4, 6,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ sp720_dotsizes, c6pl_densities, &stpi_escp2_variable_6pl_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_photo_gen1_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &photo_channel_name_list
},
/* 21: Stylus Color 480 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 15, 15, 3, 48, 48, 3, 48, 48, 3,
- 360, 720, 720, 14400, 360, 720, 720, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, -99, 0, 0,
- sc480_dotsizes, sc480_densities, &variable_x80_6pl_inks,
- &standard_paper_list, standard_reslist, &x80_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_YES |
+ MODEL_PACKET_MODE_YES),
+ 15, 15, 3, 48, 48, 3, 48, 48, 3, 4,
+ 360, 14400, 360, 720, 720, 90, 90, 0, 1, 0, 0, -99, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ sc480_dotsizes, sc480_densities, &stpi_escp2_variable_x80_6pl_drops,
+ stpi_escp2_720dpi_soft_reslist, &stpi_escp2_x80_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 22: Stylus Photo 870/875 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 48, 1, 3, 48, 1, 3,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 0, 0, 0, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 97, 0, 0, 0,
- c4pl_dotsizes, c4pl_densities, &variable_4pl_inks,
- &standard_paper_list, standard_reslist, &photo_inklist,
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 48, 1, 3, 48, 1, 3, 6,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 97, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c4pl_dotsizes, c4pl_densities, &stpi_escp2_variable_1440_4pl_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_photo_gen2_inkgroup,
variable_bits, variable_base_res, &standard_roll_feed_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &photo_channel_name_list
},
/* 23: Stylus Photo 1270 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 48, 1, 3, 48, 1, 3,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(13), INCH(1200), INCH(2), INCH(4),
- 0, 0, 0, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 97, 0, 0, 0,
- c4pl_dotsizes, c4pl_densities, &variable_4pl_inks,
- &standard_paper_list, standard_reslist, &photo_inklist,
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 48, 1, 3, 48, 1, 3, 6,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 97, 0, 0, 0,
+ INCH(13), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c4pl_dotsizes, c4pl_densities, &stpi_escp2_variable_1440_4pl_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_photo_gen2_inkgroup,
variable_bits, variable_base_res, &standard_roll_feed_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &photo_channel_name_list
},
/* 24: Stylus Color 3000 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1998 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 64, 1, 2, 64, 1, 2, 64, 1, 2,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17), INCH(44), INCH(2), INCH(4),
- 8, 9, 9, 40, 8, 9, 9, 40, 8, 9, 0, 0, 8, 9, 0, 0,
- 0, 1, 4, 0, 0, 0, 0,
- g3_dotsizes, g3_densities, &simple_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 64, 1, 2, 64, 1, 2, 64, 1, 2, 4,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 4, 0, 0, 0, 0,
+ INCH(17), INCH(44), INCH(2), INCH(2),
+ 8, 9, 9, 40, 8, 9, 9, 40, 8, 9, 0, 0, 8, 9, 0, 0, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ g3_dotsizes, g3_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_g3_reslist, &stpi_escp2_standard_inkgroup,
standard_bits, g3_base_res, &standard_roll_feed_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ NULL, &standard_channel_name_list
},
/* 25: Stylus Color 670 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 32, 1, 4, 64, 1, 2, 64, 1, 2,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- sc670_dotsizes, c6pl_densities, &variable_6pl_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 32, 1, 4, 64, 1, 2, 64, 1, 2, 4,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ sc670_dotsizes, c6pl_densities, &stpi_escp2_variable_6pl_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_standard_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 26: Stylus Photo 2000P */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 144, 1, 1, 144, 1, 1,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(13), INCH(1200), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- sp2000_dotsizes, sp2000_densities, &variable_pigment_inks,
- &standard_paper_list, standard_reslist, &photo_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 144, 1, 1, 144, 1, 1, 6,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(13), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 2, 15, 0, 0,
+ sp2000_dotsizes, sp2000_densities, &stpi_escp2_variable_2000p_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_photo_pigment_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &photo_channel_name_list
},
/* 27: Stylus Pro 5000 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1998 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 64, 1, 2, 64, 1, 2, 64, 1, 2,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(13), INCH(44), INCH(2), INCH(4),
- 9, 9, 0, 30, 9, 9, 0, 30, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 4,
- sp5000_dotsizes, photo_densities, &simple_inks,
- &standard_paper_list, sp5000_reslist, &photo_inklist,
- standard_bits, g3_base_res, &sp5000_input_slot_list,
- NULL, NULL
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 64, 1, 2, 64, 1, 2, 64, 1, 2, 6,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 4,
+ INCH(13), INCH(44), INCH(2), INCH(2),
+ 9, 9, 0, 30, 9, 9, 0, 30, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ spro5000_dotsizes, sp700_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_photo_gen1_inkgroup,
+ standard_bits, g3_base_res, &spro5000_input_slot_list,
+ &standard_quality_list, NULL, NULL,
+ NULL, &photo_channel_name_list
},
/* 28: Stylus Pro 7000 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_PRO | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 360, 1440, 1440, 14400, -1, 1440, 720, 90, 90,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 6,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
INCH(24), INCH(1200), INCH(7), INCH(7),
- 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 9, 9, 9, 9, 9, 9,
- 0, 1, 0, 0, 0, 0, 0,
- spro_dye_dotsizes, spro_dye_densities, &simple_inks,
- &standard_paper_list, pro_reslist, &photo_inklist,
+ 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ spro_dye_dotsizes, spro_dye_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_pro_reslist, &stpi_escp2_photo_gen1_inkgroup,
standard_bits, pro_base_res, &pro_roll_feed_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ &stpi_escp2_pro7000_printer_weave_list, &photo_channel_name_list
},
/* 29: Stylus Pro 7500 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_PRO | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_YES |
- MODEL_FAST_360_NO),
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 360, 1440, 1440, 14400, -1, 1440, 720, 90, 90,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_YES | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 6,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
INCH(24), INCH(1200), INCH(7), INCH(7),
- 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 9, 9, 9, 9, 9, 9,
- 0, 1, 0, 0, 0, 0, 0,
- spro_pigment_dotsizes, spro_pigment_densities, &simple_inks,
- &standard_paper_list, pro_reslist, &photo_inklist,
+ 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ spro_pigment_dotsizes, spro_pigment_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_pro_reslist, &stpi_escp2_photo_pigment_inkgroup,
standard_bits, pro_base_res, &pro_roll_feed_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ &stpi_escp2_pro7500_printer_weave_list, &photo_channel_name_list
},
/* 30: Stylus Pro 9000 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_PRO | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 360, 1440, 1440, 14400, -1, 1440, 720, 90, 90,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 6,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
INCH(44), INCH(1200), INCH(7), INCH(7),
- 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 9, 9, 9, 9, 9, 9,
- 0, 1, 0, 0, 0, 0, 0,
- spro_dye_dotsizes, spro_dye_densities, &simple_inks,
- &standard_paper_list, pro_reslist, &photo_inklist,
+ 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ spro_dye_dotsizes, spro_dye_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_pro_reslist, &stpi_escp2_photo_gen1_inkgroup,
standard_bits, pro_base_res, &pro_roll_feed_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ &stpi_escp2_pro7000_printer_weave_list, &photo_channel_name_list
},
/* 31: Stylus Pro 9500 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_PRO | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_YES |
- MODEL_FAST_360_NO),
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 360, 1440, 1440, 14400, -1, 1440, 720, 90, 90,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_YES | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 6,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
INCH(44), INCH(1200), INCH(7), INCH(7),
- 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 9, 9, 9, 9, 9, 9,
- 0, 1, 0, 0, 0, 0, 0,
- spro_pigment_dotsizes, spro_pigment_densities, &simple_inks,
- &standard_paper_list, pro_reslist, &photo_inklist,
+ 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ spro_pigment_dotsizes, spro_pigment_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_pro_reslist, &stpi_escp2_photo_pigment_inkgroup,
standard_bits, pro_base_res, &pro_roll_feed_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ &stpi_escp2_pro7500_printer_weave_list, &photo_channel_name_list
},
/* 32: Stylus Color 777/680 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 144, 1, 1, 144, 1, 1,
- 360, 720, 720, 14400, -1, 2880, 720, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- c4pl_dotsizes, sc680_densities, &variable_680_4pl_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 144, 1, 1, 144, 1, 1, 4,
+ 360, 14400, -1, 2880, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c4pl_dotsizes, c4pl_2880_densities, &stpi_escp2_variable_2880_4pl_drops,
+ stpi_escp2_2880dpi_reslist, &stpi_escp2_standard_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 33: Stylus Color 880/83/C60 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 144, 1, 1, 144, 1, 1,
- 360, 720, 720, 14400, -1, 2880, 720, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- c4pl_dotsizes, c4pl_densities, &variable_4pl_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 144, 1, 1, 144, 1, 1, 4,
+ 360, 14400, -1, 2880, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c4pl_dotsizes, c4pl_2880_densities, &stpi_escp2_variable_2880_4pl_drops,
+ stpi_escp2_2880dpi_reslist, &stpi_escp2_standard_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 34: Stylus Color 980 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 96, 1, 2, 192, 1, 1, 192, 1, 1,
- 360, 720, 720, 14400, -1, 2880, 720, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 192, 1, 0, 0, 0, 0, 0,
- c3pl_dotsizes, sc980_densities, &variable_3pl_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 96, 1, 2, 192, 1, 1, 192, 1, 1, 4,
+ 360, 14400, -1, 2880, 720, 90, 90, 38, 1, 0, 0, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c3pl_dotsizes, sc980_densities, &stpi_escp2_variable_3pl_drops,
+ stpi_escp2_2880dpi_reslist, &stpi_escp2_standard_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 35: Stylus Photo 780/790/810/820 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 48, 1, 3, 48, 1, 3,
- 360, 720, 720, 14400, -1, 2880, 720, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 55, 0, 0, 0,
- c4pl_dotsizes, c4pl_densities, &variable_4pl_inks,
- &sp780_paper_list, standard_reslist, &photo_inklist,
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 48, 1, 3, 48, 1, 3, 6,
+ 360, 14400, -1, 2880, 720, 90, 90, 0, 1, 0, 55, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c4pl_dotsizes, c4pl_2880_densities, &stpi_escp2_variable_2880_4pl_drops,
+ stpi_escp2_2880dpi_reslist, &stpi_escp2_photo_gen2_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &photo_channel_name_list
},
- /* 36: Stylus Photo 785/890/895/915 */
+ /* 36: Stylus Photo 785/890/895/915/935 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 48, 1, 3, 48, 1, 3,
- 360, 720, 720, 14400, -1, 2880, 720, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 55, 0, 0, 0,
- c4pl_dotsizes, c4pl_densities, &variable_4pl_inks,
- &standard_paper_list, standard_reslist, &photo_inklist,
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 48, 1, 3, 48, 1, 3, 6,
+ 360, 14400, -1, 2880, 720, 90, 90, 0, 1, 0, 55, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c4pl_dotsizes, c4pl_2880_densities, &stpi_escp2_variable_2880_4pl_drops,
+ stpi_escp2_2880dpi_reslist, &stpi_escp2_photo_gen2_inkgroup,
variable_bits, variable_base_res, &standard_roll_feed_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &photo_channel_name_list
},
/* 37: Stylus Photo 1280/1290 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 48, 1, 3, 48, 1, 3,
- 360, 720, 720, 14400, -1, 2880, 720, 90, 90,
- INCH(13), INCH(1200), INCH(2), INCH(4),
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 55, 0, 0, 0,
- c4pl_dotsizes, c4pl_densities, &variable_4pl_inks,
- &standard_paper_list, standard_reslist, &photo_inklist,
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 48, 1, 3, 48, 1, 3, 6,
+ 360, 14400, -1, 2880, 720, 90, 90, 0, 1, 0, 55, 0, 0, 0,
+ INCH(13), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c4pl_dotsizes, c4pl_2880_densities, &stpi_escp2_variable_2880_4pl_drops,
+ stpi_escp2_2880dpi_reslist, &stpi_escp2_photo_gen2_inkgroup,
variable_bits, variable_base_res, &standard_roll_feed_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &photo_channel_name_list
},
/* 38: Stylus Color 580 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 15, 15, 3, 48, 48, 3, 48, 48, 3,
- 360, 720, 720, 14400, 360, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, -99, 0, 0,
- sc480_dotsizes, sc480_densities, &variable_x80_6pl_inks,
- &standard_paper_list, standard_reslist, &x80_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_YES |
+ MODEL_PACKET_MODE_YES),
+ 15, 15, 3, 48, 48, 3, 48, 48, 3, 4,
+ 360, 14400, 360, 1440, 720, 90, 90, 0, 1, 0, 0, -99, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ sc480_dotsizes, sc480_densities, &stpi_escp2_variable_x80_6pl_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_x80_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 39: Stylus Color Pro XL */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1998 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 16, 1, 4, 16, 1, 4, 16, 1, 4,
- 360, 720, 720, 14400, -1, 720, 720, 90, 90,
- INCH(13), INCH(1200), INCH(2), INCH(4),
- 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- g1_dotsizes, g1_densities, &simple_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 16, 1, 4, 16, 1, 4, 16, 1, 4, 4,
+ 360, 14400, -1, 720, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(13), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ g1_dotsizes, g1_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_720dpi_reslist, &stpi_escp2_standard_inkgroup,
standard_bits, standard_base_res, &default_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ NULL, &standard_channel_name_list
},
/* 40: Stylus Pro 5500 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_PRO | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_YES |
- MODEL_FAST_360_NO),
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 360, 1440, 1440, 14400, -1, 1440, 720, 90, 90,
- INCH(13), INCH(1200), INCH(2), INCH(4),
- 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- spro_pigment_dotsizes, spro_pigment_densities, &simple_inks,
- &standard_paper_list, pro_reslist, &photo_inklist,
- standard_bits, pro_base_res, &sp5000_input_slot_list,
- NULL, NULL
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_YES | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 6,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(13), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ spro_pigment_dotsizes, spro_pigment_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_pro_reslist, &stpi_escp2_photo_pigment_inkgroup,
+ standard_bits, pro_base_res, &spro5000_input_slot_list,
+ &standard_quality_list, NULL, NULL,
+ &stpi_escp2_pro7500_printer_weave_list, &photo_channel_name_list
},
/* 41: Stylus Pro 10000 */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_PRO | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_YES |
- MODEL_FAST_360_NO),
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 360, 1440, 1440, 14400, -1, 1440, 720, 90, 90,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_YES | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 6,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
INCH(44), INCH(1200), INCH(7), INCH(7),
- 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 9, 9, 9, 9, 9, 9,
- 0, 1, 0, 0, 0, 0, 0,
- spro10000_dotsizes, spro10000_densities, &spro10000_inks,
- &standard_paper_list, pro_reslist, &photo_inklist,
+ 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ spro10000_dotsizes, spro10000_densities, &stpi_escp2_spro10000_drops,
+ stpi_escp2_pro_reslist, &stpi_escp2_photo_gen2_inkgroup,
variable_bits, pro_base_res, &pro_roll_feed_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ &stpi_escp2_pro7000_printer_weave_list, &photo_channel_name_list
},
/* 42: Stylus C20SX/C20UX */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 15, 15, 3, 48, 48, 3, 48, 48, 3,
- 360, 720, 720, 14400, -1, 720, 720, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, -99, 0, 0,
- sc480_dotsizes, sc480_densities, &variable_x80_6pl_inks,
- &standard_paper_list, standard_reslist, &x80_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_YES |
+ MODEL_PACKET_MODE_YES),
+ 15, 15, 3, 48, 48, 3, 48, 48, 3, 4,
+ 360, 14400, -1, 720, 720, 90, 90, 0, 1, 0, 0, -99, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ sc480_dotsizes, sc480_densities, &stpi_escp2_variable_x80_6pl_drops,
+ stpi_escp2_720dpi_soft_reslist, &stpi_escp2_x80_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 43: Stylus C40SX/C40UX/C41SX/C41UX/C42SX/C42UX */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 15, 15, 3, 48, 48, 3, 48, 48, 3,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, -99, 0, 0,
- sc480_dotsizes, sc480_densities, &variable_x80_6pl_inks,
- &standard_paper_list, standard_reslist, &x80_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_YES |
+ MODEL_PACKET_MODE_YES),
+ 15, 15, 3, 48, 48, 3, 48, 48, 3, 4,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, -99, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ sc480_dotsizes, sc480_densities, &stpi_escp2_variable_x80_6pl_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_x80_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 44: Stylus C70/C80 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 60, 60, 2, 180, 180, 2, 180, 180, 2,
- 360, 720, 720, 14400, -1, 2880, 1440, 360, 180,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, -240, 0, 0,
- c3pl_pigment_dotsizes, c3pl_pigment_densities, &variable_3pl_pigment_inks,
- &c80_paper_list, standard_reslist, &c80_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 60, 60, 2, 180, 180, 2, 180, 180, 2, 4,
+ 360, 14400, -1, 2880, 1440, 360, 180, 0, 1, 0, 0, -240, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 4, 15, 0, 0,
+ c3pl_pigment_dotsizes, c3pl_pigment_densities, &stpi_escp2_variable_3pl_pigment_drops,
+ stpi_escp2_2880_1440dpi_reslist, &stpi_escp2_c80_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 45: Stylus Color Pro */
{
(MODEL_VARIABLE_NO | MODEL_COMMAND_1998 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 16, 1, 4, 16, 1, 4, 16, 1, 4,
- 360, 720, 720, 14400, -1, 720, 720, 90, 90,
- INCH(17 / 2), INCH(44), INCH(2), INCH(4),
- 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- g1_dotsizes, g1_densities, &simple_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_NO),
+ 16, 1, 4, 16, 1, 4, 16, 1, 4, 4,
+ 360, 14400, -1, 720, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(17 / 2), INCH(44), INCH(2), INCH(2),
+ 9, 9, 9, 40, 9, 9, 9, 40, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 1, 7, 0, 0,
+ g1_dotsizes, g1_densities, &stpi_escp2_simple_drops,
+ stpi_escp2_720dpi_reslist, &stpi_escp2_standard_inkgroup,
standard_bits, standard_base_res, &default_input_slot_list,
- NULL, NULL
+ &standard_quality_list, NULL, NULL,
+ NULL, &standard_channel_name_list
},
/* 46: Stylus Photo 950/960 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO |
- MODEL_FAST_360_YES),
- 96, 1, 2, 96, 1, 2, 24, 1, 1,
- 360, 720, 720, 14400, -1, 2880, 1440, 360, 180,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 190, 0, 0, 0,
- c2pl_dotsizes, c2pl_densities, &variable_2pl_inks,
- &sp950_paper_list, escp950_reslist, &f360_photo_inklist,
- stp950_bits, stp950_base_res, &cutter_roll_feed_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_YES |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 96, 96, 2, 96, 96, 2, 24, 24, 1, 6,
+ 360, 14400, -1, 2880, 1440, 360, 180, 0, 1, 0, 190, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 204, 191, 0, 0,
+ 4, 15, 0, 0,
+ c2pl_dotsizes, c2pl_densities, &stpi_escp2_variable_2pl_drops,
+ stpi_escp2_superfine_reslist, &stpi_escp2_f360_photo_inkgroup,
+ stp950_bits, stp950_base_res, &cd_cutter_roll_feed_input_slot_list,
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &sp960_channel_name_list
},
/* 47: Stylus Photo 2100/2200 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO |
- MODEL_FAST_360_YES),
- 96, 1, 2, 96, 1, 2, 192, 1, 1,
- 360, 720, 720, 14400, -1, 2880, 1440, 360, 180,
- INCH(13), INCH(1200), INCH(2), INCH(4),
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 190, 0, 0, 0,
- c4pl_pigment_dotsizes, c4pl_pigment_densities, &variable_4pl_pigment_inks,
- &standard_paper_list, escp2200_reslist, &f360_photo7_inklist,
- ultrachrome_bits, ultrachrome_base_res, &cutter_roll_feed_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_YES |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 96, 96, 2, 96, 96, 2, 192, 192, 1, 7,
+ 360, 14400, -1, 2880, 1440, 360, 180, 0, 1, 0, 190, 0, 0, 0,
+ INCH(13), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, 204, 191, 0, 0,
+ 4, 15, 0, 0,
+ c4pl_pigment_dotsizes, c4pl_pigment_densities, &stpi_escp2_variable_ultrachrome_drops,
+ stpi_escp2_superfine_reslist, &stpi_escp2_f360_ultrachrome_inkgroup,
+ ultrachrome_bits, ultrachrome_base_res, &cd_cutter_roll_feed_input_slot_list,
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &sp2200_channel_name_list
},
/* 48: Stylus Pro 7600 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_PRO | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_YES |
- MODEL_FAST_360_NO),
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 360, 2880, 2880, 14400, -1, 2880, 1440, 360, 180,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_YES | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 7,
+ 360, 14400, -1, 2880, 1440, 360, 180, 0, 1, 0, 0, 0, 0, 0,
INCH(24), INCH(1200), INCH(7), INCH(7),
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- spro_c4pl_pigment_dotsizes, c4pl_pigment_densities, &variable_4pl_pigment_inks,
- &standard_paper_list, pro_reslist, &photo7_inklist,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ spro_c4pl_pigment_dotsizes, c4pl_pigment_densities, &stpi_escp2_variable_ultrachrome_drops,
+ stpi_escp2_pro_reslist, &stpi_escp2_ultrachrome_inkgroup,
ultrachrome_bits, pro_base_res, &pro_roll_feed_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ &stpi_escp2_pro7600_printer_weave_list, &photo_channel_name_list
},
/* 49: Stylus Pro 9600 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_PRO | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_YES |
- MODEL_FAST_360_NO),
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 360, 2880, 2880, 14400, -1, 2880, 1440, 360, 180,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_YES | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 7,
+ 360, 14400, -1, 2880, 1440, 360, 180, 0, 1, 0, 0, 0, 0, 0,
INCH(44), INCH(1200), INCH(7), INCH(7),
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- spro_c4pl_pigment_dotsizes, c4pl_pigment_densities, &variable_4pl_pigment_inks,
- &standard_paper_list, pro_reslist, &photo7_inklist,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ spro_c4pl_pigment_dotsizes, c4pl_pigment_densities, &stpi_escp2_variable_ultrachrome_drops,
+ stpi_escp2_pro_reslist, &stpi_escp2_ultrachrome_inkgroup,
ultrachrome_bits, pro_base_res, &pro_roll_feed_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ &stpi_escp2_pro7600_printer_weave_list, &photo_channel_name_list
},
/* 50: Stylus Photo 825/830 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 48, 1, 3, 48, 1, 3,
- 360, 720, 720, 14400, -1, 2880, 1440, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 190, 0, 0, 0,
- c4pl_dotsizes, c4pl_densities, &variable_4pl_inks,
- &sp780_paper_list, standard_reslist, &photo_inklist,
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 48, 1, 3, 48, 1, 3, 6,
+ 360, 14400, -1, 2880, 1440, 90, 90, 0, 1, 0, 55, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c4pl_dotsizes, c4pl_2880_densities, &stpi_escp2_variable_2880_4pl_drops,
+ stpi_escp2_2880_1440dpi_reslist, &stpi_escp2_photo_gen2_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &photo_channel_name_list
},
/* 51: Stylus Photo 925 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 48, 1, 3, 48, 1, 3,
- 360, 720, 720, 14400, -1, 2880, 1440, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 190, 0, 0, 0,
- c4pl_dotsizes, c4pl_densities, &variable_4pl_inks,
- &standard_paper_list, standard_reslist, &photo_inklist,
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 48, 1, 3, 48, 1, 3, 6,
+ 360, 14400, -1, 2880, 1440, 90, 90, 0, 1, 0, 55, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c4pl_dotsizes, c4pl_2880_densities, &stpi_escp2_variable_2880_4pl_drops,
+ stpi_escp2_2880_1440dpi_reslist, &stpi_escp2_photo_gen2_inkgroup,
variable_bits, variable_base_res, &cutter_roll_feed_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &photo_channel_name_list
},
/* 52: Stylus Color C62 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 144, 1, 1, 144, 1, 1,
- 360, 720, 720, 14400, -1, 2880, 1440, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- c4pl_dotsizes, c4pl_densities, &variable_4pl_inks,
- &standard_paper_list, standard_reslist, &standard_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 144, 1, 1, 144, 1, 1, 4,
+ 360, 14400, -1, 2880, 1440, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c4pl_dotsizes, c4pl_2880_densities, &stpi_escp2_variable_2880_4pl_drops,
+ stpi_escp2_2880_1440dpi_reslist, &stpi_escp2_standard_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 53: Japanese PM-950C */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO |
- MODEL_FAST_360_YES),
- 96, 1, 2, 96, 1, 2, 96, 1, 2,
- 360, 720, 720, 14400, -1, 2880, 1440, 360, 180,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 190, 0, 0, 0,
- c2pl_dotsizes, c2pl_densities, &variable_2pl_inks,
- &sp950_paper_list, escp950_reslist, &f360_photo7_japan_inklist,
- stp950_bits, stp950_base_res, &standard_roll_feed_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_YES |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 96, 96, 2, 96, 96, 2, 24, 24, 1, 6,
+ 360, 14400, -1, 2880, 1440, 360, 180, 0, 1, 0, 190, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 204, 191, 0, 0,
+ 4, 15, 0, 0,
+ c2pl_dotsizes, c2pl_densities, &stpi_escp2_variable_2pl_drops,
+ stpi_escp2_superfine_reslist, &stpi_escp2_f360_photo7_japan_inkgroup,
+ stp950_bits, stp950_base_res, &cd_cutter_roll_feed_input_slot_list,
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &pm_950c_channel_name_list
},
/* 54: Stylus Photo EX3 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_1999 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 32, 1, 4, 32, 1, 4, 32, 1, 4,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(13), INCH(44), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, 0, 0, 0,
- sc720_dotsizes, c6pl_densities, &variable_6pl_inks,
- &standard_paper_list, standard_reslist, &photo_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 32, 1, 4, 32, 1, 4, 32, 1, 4, 6,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, 0, 0, 0,
+ INCH(13), INCH(44), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ sp720_dotsizes, c6pl_densities, &stpi_escp2_variable_6pl_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_photo_gen1_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &photo_channel_name_list
},
/* 55: Stylus C82/CX-5200 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 59, 60, 2, 180, 180, 2, 180, 180, 2,
- 360, 720, 720, 14400, -1, 2880, 1440, 360, 180,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, -240, 0, 0,
- c3pl_pigment_dotsizes, c3pl_pigment_densities, &variable_3pl_pigment_inks,
- &c80_paper_list, standard_reslist, &c80_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 59, 60, 2, 180, 180, 2, 180, 180, 2, 4,
+ 360, 14400, -1, 2880, 1440, 360, 180, 0, 1, 0, 0, -240, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 4, 15, 0, 0,
+ c3pl_pigment_dotsizes, c3pl_pigment_densities, &stpi_escp2_variable_3pl_pigment_drops,
+ stpi_escp2_2880_1440dpi_reslist, &stpi_escp2_c82_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 56: Stylus C50 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 15, 15, 3, 48, 48, 3, 48, 48, 3,
- 360, 720, 720, 14400, -1, 1440, 720, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, -99, 0, 0,
- c4pl_dotsizes, c4pl_densities, &variable_4pl_inks,
- &standard_paper_list, standard_reslist, &x80_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 15, 15, 3, 48, 48, 3, 48, 48, 3, 4,
+ 360, 14400, -1, 1440, 720, 90, 90, 0, 1, 0, 0, -99, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c4pl_dotsizes, c4pl_densities, &stpi_escp2_variable_x80_6pl_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_x80_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 57: Japanese PM-970C */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO |
- MODEL_FAST_360_YES),
- 180, 180, 2, 360, 360, 1, 360, 360, 1,
- 360, 720, 720, 14400, -1, 2880, 1440, 720, 360,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 190, 0, 0, 0,
- c1_8pl_dotsizes, c2pl_densities, &variable_2pl_inks,
- &sp950_paper_list, c1_8pl_reslist, &f360_photo7_japan_inklist,
- c1_8_bits, c1_8_base_res, &standard_roll_feed_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_YES |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 180, 180, 2, 360, 360, 1, 360, 360, 1, 6,
+ 360, 14400, -1, 2880, 2880, 720, 360, 0, 1, 0, 190, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 4, 15, 0, 0,
+ c1_8pl_dotsizes, c1_8pl_densities, &stpi_escp2_variable_2pl_drops,
+ stpi_escp2_superfine_reslist, &stpi_escp2_f360_photo7_japan_inkgroup,
+ c1_8_bits, c1_8_base_res, &cutter_roll_feed_input_slot_list,
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &pm_950c_channel_name_list
},
/* 58: Japanese PM-930C */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_NO |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 90, 90, 2, 90, 90, 2, 90, 90, 2,
- 360, 720, 720, 14400, -1, 2880, 1440, 720, 360,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 190, 0, 0, 0,
- c1_8pl_dotsizes, c2pl_densities, &variable_2pl_inks,
- &sp950_paper_list, c1_8pl_reslist, &photo_inklist,
- c1_8_bits, c1_8_base_res, &standard_roll_feed_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
- },
- /* 59: Stylus C43SX/C43UX/C44SX/C44UX (WRONG -- Really entry 43!) */
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 90, 90, 2, 90, 90, 2, 90, 90, 2, 6,
+ 360, 14400, -1, 2880, 2880, 720, 360, 0, 1, 0, 190, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 4, 15, 0, 0,
+ c1_8pl_dotsizes, c1_8pl_densities, &stpi_escp2_variable_2pl_drops,
+ stpi_escp2_superfine_reslist, &stpi_escp2_photo_gen2_inkgroup,
+ c1_8_bits, c1_8_base_res, &cutter_roll_feed_input_slot_list,
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &photo_channel_name_list
+ },
+ /* 59: Stylus C43SX/C43UX/C44SX/C44UX (WRONG -- see 43!) */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 15, 15, 3, 48, 48, 3, 48, 48, 3,
- 360, 720, 720, 14400, -1, 2880, 720, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0,
- 0, 1, 0, 0, -99, 0, 0,
- sc480_dotsizes, sc480_densities, &variable_x80_6pl_inks,
- &standard_paper_list, standard_reslist, &x80_inklist,
+ MODEL_XZEROMARGIN_NO | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_YES |
+ MODEL_PACKET_MODE_YES),
+ 15, 15, 3, 48, 48, 3, 48, 48, 3, 4,
+ 360, 14400, -1, 2880, 720, 90, 90, 0, 1, 0, 0, -99, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 3, 15, 0, 0,
+ c4pl_dotsizes, c4pl_densities, &stpi_escp2_variable_x80_6pl_drops,
+ stpi_escp2_1440dpi_reslist, &stpi_escp2_x80_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
- /* 60: Stylus C83/C84 */
+ /* 60: Stylus C84 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 59, 60, 2, 180, 180, 2, 180, 180, 2,
- 360, 720, 720, 14400, -1, 2880, 1440, 360, 180,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 0, 0, 0, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 125, -240, 0, 0,
- c3pl_pigment_dotsizes, c3pl_pigment_densities, &variable_3pl_pigment_inks,
- &c80_paper_list, standard_reslist, &c80_inklist,
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 59, 60, 2, 180, 180, 2, 180, 180, 2, 4,
+ 360, 14400, -1, 2880, 1440, 360, 180, 0, 1, 0, 0, -240, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 4, 15, 0, 0,
+ c3pl_pigment_dotsizes, c3pl_pigment_densities, &stpi_escp2_variable_3pl_pigment_drops,
+ stpi_escp2_2880_1440dpi_reslist, &stpi_escp2_c82_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
- /* 61: Stylus C63/C64 */
+ /* 61: Stylus Color C63/C64 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_NO | MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 29, 30, 3, 90, 90, 3, 90, 90, 3,
- 360, 720, 720, 14400, -1, 2880, 1440, 360, 180,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 0, 0, 0, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 125, -180, 0, 0,
- c3pl_pigment_dotsizes, c3pl_pigment_densities, &variable_3pl_pigment_inks,
- &c80_paper_list, standard_reslist, &c64_inklist,
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 29, 30, 3, 90, 90, 3, 90, 90, 3, 4,
+ 360, 14400, -1, 2880, 1440, 360, 120, 0, 1, 0, 0, -180, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 4, 15, 0, 0,
+ c3pl_pigment_dotsizes, c3pl_pigment_densities, &stpi_escp2_variable_3pl_pigment_drops,
+ stpi_escp2_2880_1440dpi_reslist, &stpi_escp2_c64_inkgroup,
variable_bits, variable_base_res, &default_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
/* 62: Stylus Photo 900 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 48, 1, 3, 48, 1, 3, 48, 1, 3,
- 360, 720, 720, 14400, -1, 2880, 1440, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 125, 0, 0, 0,
- c4pl_dotsizes, c4pl_densities, &variable_4pl_inks,
- &standard_paper_list, standard_reslist, &photo_inklist,
- variable_bits, variable_base_res, &cutter_roll_feed_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 48, 1, 3, 48, 1, 3, 48, 1, 3, 6,
+ 360, 14400, -1, 2880, 720, 90, 90, 0, 1, 0, 55, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 399, 394, 595, 842,
+ 3, 15, 0, 0,
+ c4pl_dotsizes, c4pl_2880_densities, &stpi_escp2_variable_2880_4pl_drops,
+ stpi_escp2_2880dpi_reslist, &stpi_escp2_photo_gen2_inkgroup,
+ variable_bits, variable_base_res, &cd_roll_feed_input_slot_list,
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &photo_channel_name_list
},
/* 63: Stylus Photo R300 */
{
(MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
- MODEL_ROLLFEED_YES | MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO |
- MODEL_FAST_360_NO),
- 90, 1, 3, 90, 1, 3, 90, 1, 3,
- 360, 720, 720, 14400, -1, 2880, 1440, 90, 90,
- INCH(17 / 2), INCH(1200), INCH(2), INCH(4),
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 125, 0, 0, 0,
- p3pl_dotsizes, p3pl_densities, &variable_3pl_pmg_inks,
- &standard_paper_list, standard_reslist, &photo_inklist,
- variable_bits, variable_base_res, &cutter_roll_feed_input_slot_list,
- &new_init_sequence, &je_deinit_sequence
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 90, 1, 3, 90, 1, 3, 90, 1, 3, 6,
+ 360, 14400, -1, 2880, 1440, 360, 120, 0, 1, 0, 190, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 204, 191, 595, 842,
+ 4, 15, 0, 0,
+ p3pl_dotsizes, p3pl_densities, &stpi_escp2_variable_3pl_pmg_drops,
+ stpi_escp2_superfine_reslist, &stpi_escp2_photo_gen3_inkgroup,
+ variable_bits, variable_base_res, &cd_roll_feed_input_slot_list,
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &photo_channel_name_list
+ },
+ /* 64: PM-G800/Stylus Photo R800 */
+ {
+ (MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 180, 1, 2, 180, 1, 2, 180, 1, 2, 8,
+ 360, 14400, -1, 2880, 2880, 360, 180, 0, 1, 0, 190, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 204, 191, 595, 842,
+ 4, 15, 0, 0,
+ p1_5pl_dotsizes, p1_5pl_densities, &stpi_escp2_variable_1_5pl_drops,
+ stpi_escp2_superfine_reslist, &stpi_escp2_cmykrb_inkgroup,
+ variable_bits, c1_5_base_res, &cd_roll_feed_input_slot_list,
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &r800_channel_name_list
+ },
+ /* 65: Stylus Photo CX4600 */
+ {
+ (MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 90, 1, 3, 90, 1, 3, 90, 1, 3, 6,
+ 360, 14400, -1, 2880, 1440, 360, 120, 0, 1, 0, 190, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 204, 191, 595, 842,
+ 4, 15, 0, 0,
+ p3pl_dotsizes, p3pl_densities, &stpi_escp2_variable_3pl_pmg_drops,
+ stpi_escp2_superfine_reslist, &stpi_escp2_cx3650_inkgroup,
+ variable_bits, variable_base_res, &default_input_slot_list,
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &photo_channel_name_list
+ },
+ /* 66: Stylus Color C65/C66 */
+ {
+ (MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 29, 30, 3, 90, 90, 3, 90, 90, 3, 4,
+ 360, 14400, -1, 2880, 1440, 360, 120, 0, 1, 0, 0, -180, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 4, 15, 0, 0,
+ c3pl_pigment_dotsizes, c3pl_pigment_c66_densities, &stpi_escp2_variable_3pl_pigment_c66_drops,
+ stpi_escp2_2880_1440dpi_reslist, &stpi_escp2_c64_inkgroup,
+ variable_bits, variable_base_res, &default_input_slot_list,
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
+ },
+ /* 67: Stylus Photo R1800 */
+ {
+ (MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 180, 1, 2, 180, 1, 2, 180, 1, 2, 8,
+ 360, 14400, -1, 2880, 2880, 360, 180, 0, 1, 0, 190, 0, 0, 0,
+ INCH(13), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 204, 191, 595, 842,
+ 4, 15, 0, 0,
+ p1_5pl_dotsizes, p1_5pl_densities, &stpi_escp2_variable_1_5pl_drops,
+ stpi_escp2_superfine_reslist, &stpi_escp2_cmykrb_inkgroup,
+ variable_bits, c1_5_base_res, &cd_roll_feed_input_slot_list,
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &r800_channel_name_list
+ },
+ /* 68: PM-G820 */
+ {
+ (MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 180, 1, 2, 180, 1, 2, 180, 1, 2, 8,
+ 360, 14400, -1, 2880, 2880, 360, 180, 0, 1, 0, 190, 0, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 204, 191, 595, 842,
+ 4, 15, 0, 0,
+ p1_5pl_dotsizes, p1_5pl_densities, &stpi_escp2_variable_1_5pl_drops,
+ stpi_escp2_superfine_reslist, &stpi_escp2_photo_gen3_inkgroup,
+ variable_bits, c1_5_base_res, &cd_roll_feed_input_slot_list,
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &r800_channel_name_list
+ },
+ /* 69: Stylus C86 */
+ {
+ (MODEL_VARIABLE_YES | MODEL_COMMAND_2000 | MODEL_GRAYMODE_YES |
+ MODEL_XZEROMARGIN_YES | MODEL_VACUUM_NO | MODEL_FAST_360_NO |
+ MODEL_SEND_ZERO_ADVANCE_YES | MODEL_SUPPORTS_INK_CHANGE_NO |
+ MODEL_PACKET_MODE_YES),
+ 59, 60, 2, 180, 180, 2, 180, 180, 2, 4,
+ 360, 14400, -1, 2880, 2880, 360, 180, 0, 1, 0, 0, -240, 0, 0,
+ INCH(17 / 2), INCH(1200), INCH(2), INCH(2),
+ 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 0, 0, -1, -1, 0, 0,
+ 4, 15, 0, 0,
+ c3pl_pigment_dotsizes, c3pl_pigment_densities, &stpi_escp2_variable_3pl_pigment_drops,
+ stpi_escp2_2880_1440dpi_reslist, &stpi_escp2_c82_inkgroup,
+ variable_bits, variable_base_res, &default_input_slot_list,
+ &standard_quality_list, &new_init_sequence, &je_deinit_sequence,
+ NULL, &standard_channel_name_list
},
};
+
+const int stpi_escp2_model_limit =
+sizeof(stpi_escp2_model_capabilities) / sizeof(stpi_escp2_printer_t);
diff --git a/src/main/print-escp2.c b/src/main/print-escp2.c
index 4818a23..03f0cce 100644
--- a/src/main/print-escp2.c
+++ b/src/main/print-escp2.c
@@ -1,5 +1,5 @@
/*
- * "$Id: print-escp2.c,v 1.147.2.24 2003/12/02 01:51:00 rlk Exp $"
+ * "$Id: print-escp2.c,v 1.340 2005/06/30 00:12:14 rlk Exp $"
*
* Print plug-in EPSON ESC/P2 driver for the GIMP.
*
@@ -29,140 +29,609 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#include <gimp-print/gimp-print.h>
-#include "gimp-print-internal.h"
-#include <gimp-print/gimp-print-intl-internal.h>
+#include <gutenprint/gutenprint.h>
+#include <gutenprint/gutenprint-intl-internal.h>
+#include "gutenprint-internal.h"
#include <string.h>
-#include <stdio.h>
+#include <assert.h>
+#include <math.h>
#include "print-escp2.h"
#ifdef __GNUC__
#define inline __inline__
#endif
-#ifdef TEST_UNCOMPRESSED
-#define COMPRESSION (0)
-#define FILLFUNC stp_fill_uncompressed
-#define COMPUTEFUNC stp_compute_uncompressed_linewidth
-#define PACKFUNC stp_pack_uncompressed
-#else
-#define COMPRESSION (1)
-#define FILLFUNC stp_fill_tiff
-#define COMPUTEFUNC stp_compute_tiff_linewidth
-#define PACKFUNC stp_pack_tiff
-#endif
-
#define OP_JOB_START 1
#define OP_JOB_PRINT 2
#define OP_JOB_END 4
-static void flush_pass(stp_softweave_t *sw, int passno, int model, int width,
- int hoffset, int ydpi, int xdpi, int physical_xdpi,
- int vertical_subpass);
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
-static const int dotidmap[] =
-{ 0, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 10, 11, 12, 12 };
-
-static int
-resid2dotid(int resid)
+typedef struct
{
- if (resid < 0 || resid >= RES_N)
- return -1;
- return dotidmap[resid];
-}
+ const char *attr_name;
+ short bit_shift;
+ short bit_width;
+} escp2_printer_attr_t;
static const escp2_printer_attr_t escp2_printer_attrs[] =
{
{ "command_mode", 0, 4 },
{ "horizontal_zero_margin", 4, 1 },
- { "rollfeed", 5, 1 },
- { "variable_mode", 6, 1 },
- { "graymode", 7, 1 },
- { "vacuum", 8, 1 },
- { "fast_360", 9, 1 },
+ { "variable_mode", 5, 1 },
+ { "graymode", 6, 1 },
+ { "vacuum", 7, 1 },
+ { "fast_360", 8, 1 },
+ { "send_zero_advance", 9, 1 },
+ { "supports_ink_change", 10, 1 },
+ { "packet_mode", 11, 1 },
+};
+
+typedef struct
+{
+ unsigned count;
+ const char *name;
+} channel_count_t;
+
+static const channel_count_t escp2_channel_counts[] =
+{
+ { 1, "1" },
+ { 2, "2" },
+ { 3, "3" },
+ { 4, "4" },
+ { 5, "5" },
+ { 6, "6" },
+ { 7, "7" },
+ { 8, "8" },
+ { 9, "9" },
+ { 10, "10" },
+ { 11, "11" },
+ { 12, "12" },
+ { 13, "13" },
+ { 14, "14" },
+ { 15, "15" },
+ { 16, "16" },
+ { 17, "17" },
+ { 18, "18" },
+ { 19, "19" },
+ { 20, "20" },
+ { 21, "21" },
+ { 22, "22" },
+ { 23, "23" },
+ { 24, "24" },
+ { 25, "25" },
+ { 26, "26" },
+ { 27, "27" },
+ { 28, "28" },
+ { 29, "29" },
+ { 30, "30" },
+ { 31, "31" },
+ { 32, "32" },
+};
+
+static stp_curve_t *hue_curve_bounds = NULL;
+static int escp2_channel_counts_count =
+sizeof(escp2_channel_counts) / sizeof(channel_count_t);
+
+static const double ink_darknesses[] =
+{
+ 1.0, 0.31 / .4, 0.61 / .96, 0.08, 0.31 * 0.33 / .4, 0.61 * 0.33 / .96, 0.33, 1.0
};
#define INCH(x) (72 * x)
-static const res_t *escp2_find_resolution(int model, const stp_vars_t v,
- const char *resolution);
+static const res_t *escp2_find_resolution(const stp_vars_t *v);
+
+#define PARAMETER_INT(s) \
+{ \
+ "escp2_" #s, "escp2_" #s, N_("Advanced Printer Functionality"), NULL, \
+ STP_PARAMETER_TYPE_INT, STP_PARAMETER_CLASS_FEATURE, \
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 1, -1, 1, 0 \
+}
+
+#define PARAMETER_INT_RO(s) \
+{ \
+ "escp2_" #s, "escp2_" #s, N_("Advanced Printer Functionality"), NULL, \
+ STP_PARAMETER_TYPE_INT, STP_PARAMETER_CLASS_FEATURE, \
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 1, -1, 1, 1 \
+}
+
+#define PARAMETER_RAW(s) \
+{ \
+ "escp2_" #s, "escp2_" #s, N_("Advanced Printer Functionality"), NULL, \
+ STP_PARAMETER_TYPE_RAW, STP_PARAMETER_CLASS_FEATURE, \
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 1, -1, 1, 0 \
+}
typedef struct
{
- int undersample;
- int denominator;
- int initial_vertical_offset;
- int min_nozzles;
- int printed_something;
- int last_color;
- const physical_subchannel_t **channels;
-} escp2_privdata_t;
-
-typedef struct escp2_init
-{
- int model;
- int output_type;
- int ydpi;
- int xdpi;
- int physical_xdpi;
- int use_softweave;
- int use_interleave;
- int page_true_height;
- int page_width;
- int page_top;
- int page_bottom;
- int nozzles;
- int nozzle_separation;
- int horizontal_passes;
- int vertical_passes;
- int vertical_oversample;
- int bits;
- int unidirectional;
- int resid;
- int initial_vertical_offset;
- int total_channels;
- int use_black_parameters;
- int use_fast_360;
- int print_op;
- const char *paper_type;
- const char *media_source;
- const escp2_inkname_t *inkname;
- const input_slot_t *input_slot;
- stp_vars_t v;
-} escp2_init_t;
+ const stp_parameter_t param;
+ double min;
+ double max;
+ double defval;
+ int color_only;
+} float_param_t;
+
+static const stp_parameter_t the_parameters[] =
+{
+#if 0
+ {
+ "AutoMode", N_("Automatic Printing Mode"), N_("Basic Output Adjustment"),
+ N_("Automatic printing mode"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+#endif
+ /*
+ * Don't check this parameter. We may offer different settings for
+ * different papers, but we need to be able to handle settings from PPD
+ * files that don't have constraints set up.
+ */
+ {
+ "Quality", N_("Print Quality"), N_("Basic Output Adjustment"),
+ N_("Print Quality"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 0, 0
+ },
+ {
+ "PageSize", N_("Page Size"), N_("Basic Printer Setup"),
+ N_("Size of the paper being printed to"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "MediaType", N_("Media Type"), N_("Basic Printer Setup"),
+ N_("Type of media (plain paper, photo paper, etc.)"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "InputSlot", N_("Media Source"), N_("Basic Printer Setup"),
+ N_("Source (input slot) of the media"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "CDInnerRadius", N_("CD Hub Size"), N_("Basic Printer Setup"),
+ N_("Print only outside of the hub of the CD, or all the way to the hole"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "CDXAdjustment", N_("CD Horizontal Fine Adjustment"), N_("Advanced Printer Setup"),
+ N_("Fine adjustment to horizontal position for CD printing"),
+ STP_PARAMETER_TYPE_DIMENSION, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_ADVANCED, 1, 1, -1, 1, 0
+ },
+ {
+ "CDYAdjustment", N_("CD Vertical Fine Adjustment"), N_("Advanced Printer Setup"),
+ N_("Fine adjustment to horizontal position for CD printing"),
+ STP_PARAMETER_TYPE_DIMENSION, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_ADVANCED, 1, 1, -1, 1, 0
+ },
+ {
+ "Resolution", N_("Resolution"), N_("Basic Printer Setup"),
+ N_("Resolution of the print"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_ADVANCED, 1, 1, -1, 1, 0
+ },
+ /*
+ * Don't check this parameter. We may offer different settings for
+ * different ink sets, but we need to be able to handle settings from PPD
+ * files that don't have constraints set up.
+ */
+ {
+ "InkType", N_("Ink Type"), N_("Advanced Printer Setup"),
+ N_("Type of ink in the printer"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_ADVANCED2, 1, 1, -1, 0, 0
+ },
+ {
+ "UseGloss", N_("Enhanced Gloss"), N_("Basic Printer Setup"),
+ N_("Add gloss enhancement"),
+ STP_PARAMETER_TYPE_BOOLEAN, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 0, 0
+ },
+ {
+ "InkSet", N_("Ink Set"), N_("Basic Printer Setup"),
+ N_("Type of ink in the printer"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "PrintingDirection", N_("Printing Direction"), N_("Advanced Output Adjustment"),
+ N_("Printing direction (unidirectional is higher quality, but slower)"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_ADVANCED1, 1, 1, -1, 1, 0
+ },
+ {
+ "FullBleed", N_("Borderless"), N_("Basic Printer Setup"),
+ N_("Print without borders"),
+ STP_PARAMETER_TYPE_BOOLEAN, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "Weave", N_("Interleave Method"), N_("Advanced Output Adjustment"),
+ N_("Interleave pattern to use"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_ADVANCED1, 1, 1, -1, 1, 0
+ },
+ {
+ "AdjustDotsize", N_("Adjust dot size as necessary"), N_("Advanced Printer Setup"),
+ N_("Adjust dot size as necessary to achieve desired density"),
+ STP_PARAMETER_TYPE_BOOLEAN, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_ADVANCED4, 1, 1, -1, 1, 0
+ },
+ {
+ "OutputOrder", N_("Output Order"), N_("Basic Printer Setup"),
+ N_("Output Order"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 0, 0, -1, 0, 0
+ },
+ {
+ "AlignmentPasses", N_("Alignment Passes"), N_("Advanced Printer Functionality"),
+ N_("Alignment Passes"),
+ STP_PARAMETER_TYPE_INT, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 0, -1, 0, 0
+ },
+ {
+ "AlignmentChoices", N_("Alignment Choices"), N_("Advanced Printer Functionality"),
+ N_("Alignment Choices"),
+ STP_PARAMETER_TYPE_INT, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 0, -1, 0, 0
+ },
+ {
+ "InkChange", N_("Ink change command"), N_("Advanced Printer Functionality"),
+ N_("Ink change command"),
+ STP_PARAMETER_TYPE_INT, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 0, -1, 0, 0
+ },
+ {
+ "AlternateAlignmentPasses", N_("Alternate Alignment Passes"), N_("Advanced Printer Functionality"),
+ N_("Alternate Alignment Passes"),
+ STP_PARAMETER_TYPE_INT, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 0, -1, 0, 0
+ },
+ {
+ "AlternateAlignmentChoices", N_("Alternate Alignment Choices"), N_("Advanced Printer Functionality"),
+ N_("Alternate Alignment Choices"),
+ STP_PARAMETER_TYPE_INT, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 0, -1, 0, 0
+ },
+ {
+ "SupportsPacketMode", N_("Supports Packet Mode"), N_("Advanced Printer Functionality"),
+ N_("Alternate Alignment Choices"),
+ STP_PARAMETER_TYPE_BOOLEAN, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 0, -1, 0, 0
+ },
+ {
+ "InkChannels", N_("Ink Channels"), N_("Advanced Printer Functionality"),
+ N_("Ink Channels"),
+ STP_PARAMETER_TYPE_INT, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 0, -1, 0, 0
+ },
+ {
+ "ChannelNames", N_("Channel Names"), N_("Advanced Printer Functionality"),
+ N_("Channel Names"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 0, -1, 0, 0
+ },
+ {
+ "PrintingMode", N_("Printing Mode"), N_("Core Parameter"),
+ N_("Printing Output Mode"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "RawChannels", N_("Raw Channels"), N_("Core Parameter"),
+ N_("Raw Channel Count"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 0, 1, -1, 1, 0
+ },
+ {
+ "CyanHueCurve", N_("Cyan Map"), N_("Advanced Output Control"),
+ N_("Adjust the cyan map"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, 1, 1, 0
+ },
+ {
+ "MagentaHueCurve", N_("Magenta Map"), N_("Advanced Output Control"),
+ N_("Adjust the magenta map"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, 2, 1, 0
+ },
+ {
+ "YellowHueCurve", N_("Yellow Map"), N_("Advanced Output Control"),
+ N_("Adjust the yellow map"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, 3, 1, 0
+ },
+ {
+ "BlueHueCurve", N_("Blue Map"), N_("Advanced Output Control"),
+ N_("Adjust the blue map"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, 4, 1, 0
+ },
+ {
+ "RedHueCurve", N_("Red Map"), N_("Advanced Output Control"),
+ N_("Adjust the red map"),
+ STP_PARAMETER_TYPE_CURVE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, 5, 1, 0
+ },
+ PARAMETER_INT(max_hres),
+ PARAMETER_INT(max_vres),
+ PARAMETER_INT(min_hres),
+ PARAMETER_INT(min_vres),
+ PARAMETER_INT(nozzles),
+ PARAMETER_INT(black_nozzles),
+ PARAMETER_INT(fast_nozzles),
+ PARAMETER_INT(min_nozzles),
+ PARAMETER_INT(min_black_nozzles),
+ PARAMETER_INT(min_fast_nozzles),
+ PARAMETER_INT(nozzle_separation),
+ PARAMETER_INT(black_nozzle_separation),
+ PARAMETER_INT(fast_nozzle_separation),
+ PARAMETER_INT(separation_rows),
+ PARAMETER_INT(max_paper_width),
+ PARAMETER_INT(max_paper_height),
+ PARAMETER_INT(min_paper_width),
+ PARAMETER_INT(min_paper_height),
+ PARAMETER_INT(extra_feed),
+ PARAMETER_INT(pseudo_separation_rows),
+ PARAMETER_INT(base_separation),
+ PARAMETER_INT(resolution_scale),
+ PARAMETER_INT(initial_vertical_offset),
+ PARAMETER_INT(black_initial_vertical_offset),
+ PARAMETER_INT(max_black_resolution),
+ PARAMETER_INT(zero_margin_offset),
+ PARAMETER_INT(extra_720dpi_separation),
+ PARAMETER_INT(physical_channels),
+ PARAMETER_INT(left_margin),
+ PARAMETER_INT(right_margin),
+ PARAMETER_INT(top_margin),
+ PARAMETER_INT(bottom_margin),
+ PARAMETER_INT_RO(alignment_passes),
+ PARAMETER_INT_RO(alignment_choices),
+ PARAMETER_INT_RO(alternate_alignment_passes),
+ PARAMETER_INT_RO(alternate_alignment_choices),
+ PARAMETER_INT(cd_x_offset),
+ PARAMETER_INT(cd_y_offset),
+ PARAMETER_INT(cd_page_width),
+ PARAMETER_INT(cd_page_height),
+ PARAMETER_RAW(preinit_sequence),
+ PARAMETER_RAW(postinit_remote_sequence)
+};
+
+static const int the_parameter_count =
+sizeof(the_parameters) / sizeof(const stp_parameter_t);
+
+static const float_param_t float_parameters[] =
+{
+ {
+ {
+ "CyanDensity", N_("Cyan Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the cyan balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 1, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "MagentaDensity", N_("Magenta Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the magenta balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 2, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "YellowDensity", N_("Yellow Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the yellow balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 3, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "BlackDensity", N_("Black Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the black balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 0, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "RedDensity", N_("Red Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the red balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 4, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "BlueDensity", N_("Blue Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the blue balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 5, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "GlossLimit", N_("Gloss Level"), N_("Output Level Adjustment"),
+ N_("Adjust the gloss level"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 6, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "LightCyanTransition", N_("Light Cyan Transition"), N_("Advanced Ink Adjustment"),
+ N_("Light Cyan Transition"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, -1, 1, 0
+ }, 0.0, 5.0, 1.0, 1
+ },
+ {
+ {
+ "LightMagentaTransition", N_("Light Magenta Transition"), N_("Advanced Ink Adjustment"),
+ N_("Light Magenta Transition"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, -1, 1, 0
+ }, 0.0, 5.0, 1.0, 1
+ },
+ {
+ {
+ "DarkYellowTransition", N_("Dark Yellow Transition"), N_("Advanced Ink Adjustment"),
+ N_("Dark Yellow Transition"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, -1, 1, 0
+ }, 0.0, 5.0, 1.0, 1
+ },
+ {
+ {
+ "GrayTransition", N_("Gray Transition"), N_("Advanced Ink Adjustment"),
+ N_("Gray Transition"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, -1, 1, 0
+ }, 0.0, 5.0, 1.0, 1
+ },
+ {
+ {
+ "Gray3Transition", N_("Dark Gray Transition"), N_("Advanced Ink Adjustment"),
+ N_("Dark Gray Transition"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, -1, 1, 0
+ }, 0.0, 5.0, 1.0, 1
+ },
+ {
+ {
+ "Gray2Transition", N_("Mid Gray Transition"), N_("Advanced Ink Adjustment"),
+ N_("Medium Gray Transition"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, -1, 1, 0
+ }, 0.0, 5.0, 1.0, 1
+ },
+ {
+ {
+ "Gray1Transition", N_("Light Gray Transition"), N_("Advanced Ink Adjustment"),
+ N_("Light Gray Transition"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, -1, 1, 0
+ }, 0.0, 5.0, 1.0, 1
+ },
+ {
+ {
+ "MultiChannelLimit", N_("Red and Blue Ink Usage"), N_("Advanced Ink Adjustment"),
+ N_("Amount of red and blue ink to use"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, -1, 1, 0
+ }, 0.0, 1.0, 1.0, 1
+ },
+};
+static const int float_parameter_count =
+sizeof(float_parameters) / sizeof(const float_param_t);
+
+
+static escp2_privdata_t *
+get_privdata(stp_vars_t *v)
+{
+ return (escp2_privdata_t *) stp_get_component_data(v, "Driver");
+}
+
+static model_featureset_t
+escp2_get_cap(const stp_vars_t *v, escp2_model_option_t feature)
+{
+ int model = stp_get_model_id(v);
+ if (feature < 0 || feature >= MODEL_LIMIT)
+ return (model_featureset_t) -1;
+ else
+ {
+ model_featureset_t featureset =
+ (((1ul << escp2_printer_attrs[feature].bit_width) - 1ul) <<
+ escp2_printer_attrs[feature].bit_shift);
+ return stpi_escp2_model_capabilities[model].flags & featureset;
+ }
+}
static int
-escp2_has_cap(int model, escp2_model_option_t feature,
- model_featureset_t class, const stp_vars_t v)
+escp2_has_cap(const stp_vars_t *v, escp2_model_option_t feature,
+ model_featureset_t class)
{
+ int model = stp_get_model_id(v);
if (feature < 0 || feature >= MODEL_LIMIT)
return -1;
else
{
model_featureset_t featureset =
- (((1ul << escp2_printer_attrs[feature].bits) - 1ul) <<
- escp2_printer_attrs[feature].shift);
- return ((stp_escp2_model_capabilities[model].flags & featureset)==class);
+ (((1ul << escp2_printer_attrs[feature].bit_width) - 1ul) <<
+ escp2_printer_attrs[feature].bit_shift);
+ if ((stpi_escp2_model_capabilities[model].flags & featureset) == class)
+ return 1;
+ else
+ return 0;
}
}
-#define DEF_SIMPLE_ACCESSOR(f, t) \
-static t \
-escp2_##f(int model, const stp_vars_t v) \
+#define DEF_SIMPLE_ACCESSOR(f, t) \
+static inline t \
+escp2_##f(const stp_vars_t *v) \
+{ \
+ if (stp_check_int_parameter(v, "escp2_" #f, STP_PARAMETER_ACTIVE)) \
+ return stp_get_int_parameter(v, "escp2_" #f); \
+ else \
+ { \
+ int model = stp_get_model_id(v); \
+ return (stpi_escp2_model_capabilities[model].f); \
+ } \
+}
+
+#define DEF_RAW_ACCESSOR(f, t) \
+static inline t \
+escp2_##f(const stp_vars_t *v) \
+{ \
+ if (stp_check_raw_parameter(v, "escp2_" #f, STP_PARAMETER_ACTIVE)) \
+ return stp_get_raw_parameter(v, "escp2_" #f); \
+ else \
+ { \
+ int model = stp_get_model_id(v); \
+ return (stpi_escp2_model_capabilities[model].f); \
+ } \
+}
+
+#define DEF_COMPOSITE_ACCESSOR(f, t) \
+static inline t \
+escp2_##f(const stp_vars_t *v) \
{ \
- return (stp_escp2_model_capabilities[model].f); \
+ int model = stp_get_model_id(v); \
+ return (stpi_escp2_model_capabilities[model].f); \
}
-#define DEF_INTERLEAVE_ACCESSOR(f, t) \
-static t \
-escp2_##f(int model, const stp_vars_t v) \
-{ \
- const res_t *res = escp2_find_resolution(model, v, stp_get_resolution(v)); \
- if (res && !(res->softweave)) \
- return (stp_escp2_model_capabilities[model].m_##f); \
- else \
- return (stp_escp2_model_capabilities[model].f); \
+#define DEF_ROLL_ACCESSOR(f, t) \
+static inline t \
+escp2_##f(const stp_vars_t *v, int rollfeed) \
+{ \
+ if (stp_check_int_parameter(v, "escp2_" #f, STP_PARAMETER_ACTIVE)) \
+ return stp_get_int_parameter(v, "escp2_" #f); \
+ else \
+ { \
+ int model = stp_get_model_id(v); \
+ const res_t *res = escp2_find_resolution(v); \
+ if (res && !(res->softweave)) \
+ { \
+ if (rollfeed) \
+ return (stpi_escp2_model_capabilities[model].m_roll_##f); \
+ else \
+ return (stpi_escp2_model_capabilities[model].m_##f); \
+ } \
+ else \
+ { \
+ if (rollfeed) \
+ return (stpi_escp2_model_capabilities[model].roll_##f); \
+ else \
+ return (stpi_escp2_model_capabilities[model].f); \
+ } \
+ } \
}
DEF_SIMPLE_ACCESSOR(max_hres, int)
@@ -183,148 +652,371 @@ DEF_SIMPLE_ACCESSOR(max_paper_width, unsigned)
DEF_SIMPLE_ACCESSOR(max_paper_height, unsigned)
DEF_SIMPLE_ACCESSOR(min_paper_width, unsigned)
DEF_SIMPLE_ACCESSOR(min_paper_height, unsigned)
+DEF_SIMPLE_ACCESSOR(cd_x_offset, int)
+DEF_SIMPLE_ACCESSOR(cd_y_offset, int)
+DEF_SIMPLE_ACCESSOR(cd_page_width, int)
+DEF_SIMPLE_ACCESSOR(cd_page_height, int)
DEF_SIMPLE_ACCESSOR(extra_feed, unsigned)
DEF_SIMPLE_ACCESSOR(pseudo_separation_rows, int)
DEF_SIMPLE_ACCESSOR(base_separation, int)
-DEF_SIMPLE_ACCESSOR(base_resolution, int)
-DEF_SIMPLE_ACCESSOR(enhanced_resolution, int)
DEF_SIMPLE_ACCESSOR(resolution_scale, int)
DEF_SIMPLE_ACCESSOR(initial_vertical_offset, int)
DEF_SIMPLE_ACCESSOR(black_initial_vertical_offset, int)
DEF_SIMPLE_ACCESSOR(max_black_resolution, int)
DEF_SIMPLE_ACCESSOR(zero_margin_offset, int)
DEF_SIMPLE_ACCESSOR(extra_720dpi_separation, int)
-DEF_SIMPLE_ACCESSOR(paperlist, const paperlist_t *)
-DEF_SIMPLE_ACCESSOR(reslist, const res_t *)
-DEF_SIMPLE_ACCESSOR(inklist, const inklist_t *)
-DEF_SIMPLE_ACCESSOR(input_slots, const input_slot_list_t *)
-DEF_SIMPLE_ACCESSOR(preinit_sequence, const init_sequence_t *)
-DEF_SIMPLE_ACCESSOR(postinit_remote_sequence, const init_sequence_t *)
-
-DEF_INTERLEAVE_ACCESSOR(left_margin, unsigned)
-DEF_INTERLEAVE_ACCESSOR(right_margin, unsigned)
-DEF_INTERLEAVE_ACCESSOR(top_margin, unsigned)
-DEF_INTERLEAVE_ACCESSOR(bottom_margin, unsigned)
-DEF_INTERLEAVE_ACCESSOR(roll_left_margin, unsigned)
-DEF_INTERLEAVE_ACCESSOR(roll_right_margin, unsigned)
-DEF_INTERLEAVE_ACCESSOR(roll_top_margin, unsigned)
-DEF_INTERLEAVE_ACCESSOR(roll_bottom_margin, unsigned)
+DEF_SIMPLE_ACCESSOR(physical_channels, int)
+DEF_SIMPLE_ACCESSOR(alignment_passes, int)
+DEF_SIMPLE_ACCESSOR(alignment_choices, int)
+DEF_SIMPLE_ACCESSOR(alternate_alignment_passes, int)
+DEF_SIMPLE_ACCESSOR(alternate_alignment_choices, int)
+DEF_COMPOSITE_ACCESSOR(printer_weaves, const printer_weave_list_t *)
+
+DEF_ROLL_ACCESSOR(left_margin, unsigned)
+DEF_ROLL_ACCESSOR(right_margin, unsigned)
+DEF_ROLL_ACCESSOR(top_margin, unsigned)
+DEF_ROLL_ACCESSOR(bottom_margin, unsigned)
+
+DEF_RAW_ACCESSOR(preinit_sequence, const stp_raw_t *)
+DEF_RAW_ACCESSOR(postinit_remote_sequence, const stp_raw_t *)
+
+DEF_COMPOSITE_ACCESSOR(reslist, const res_t *const *)
+DEF_COMPOSITE_ACCESSOR(inkgroup, const inkgroup_t *)
+DEF_COMPOSITE_ACCESSOR(input_slots, const input_slot_list_t *)
+DEF_COMPOSITE_ACCESSOR(quality_list, const quality_list_t *)
+DEF_COMPOSITE_ACCESSOR(channel_names, const channel_name_t *)
+
+static const channel_count_t *
+get_channel_count_by_name(const char *name)
+{
+ int i;
+ for (i = 0; i < escp2_channel_counts_count; i++)
+ if (strcmp(name, escp2_channel_counts[i].name) == 0)
+ return &(escp2_channel_counts[i]);
+ return NULL;
+}
+
+static const channel_count_t *
+get_channel_count_by_number(unsigned count)
+{
+ int i;
+ for (i = 0; i < escp2_channel_counts_count; i++)
+ if (count == escp2_channel_counts[i].count)
+ return &(escp2_channel_counts[i]);
+ return NULL;
+}
static int
-reslist_count(const res_t *rt)
+escp2_ink_type(const stp_vars_t *v, int resid)
{
- int i = 0;
- while (rt->hres)
+ if (stp_check_int_parameter(v, "escp2_ink_type", STP_PARAMETER_ACTIVE))
+ return stp_get_int_parameter(v, "escp2_ink_type");
+ else
{
- i++;
- rt++;
+ int model = stp_get_model_id(v);
+ return stpi_escp2_model_capabilities[model].dot_sizes[resid];
+ }
+}
+
+static double
+escp2_density(const stp_vars_t *v, int resid)
+{
+ if (stp_check_float_parameter(v, "escp2_density", STP_PARAMETER_ACTIVE))
+ return stp_get_float_parameter(v, "escp2_density");
+ else
+ {
+ int model = stp_get_model_id(v);
+ return stpi_escp2_model_capabilities[model].densities[resid];
}
- return i;
}
static int
-escp2_ink_type(int model, int resid, const stp_vars_t v)
+escp2_bits(const stp_vars_t *v, int resid)
{
- int dotid = resid2dotid(resid);
- return stp_escp2_model_capabilities[model].dot_sizes[dotid];
+ if (stp_check_int_parameter(v, "escp2_bits", STP_PARAMETER_ACTIVE))
+ return stp_get_int_parameter(v, "escp2_bits");
+ else
+ {
+ int model = stp_get_model_id(v);
+ return stpi_escp2_model_capabilities[model].bits[resid];
+ }
}
static double
-escp2_density(int model, int resid, const stp_vars_t v)
+escp2_base_res(const stp_vars_t *v, int resid)
{
- int dotid = resid2dotid(resid);
- return stp_escp2_model_capabilities[model].densities[dotid];
+ if (stp_check_float_parameter(v, "escp2_base_res", STP_PARAMETER_ACTIVE))
+ return stp_get_float_parameter(v, "escp2_base_res");
+ else
+ {
+ int model = stp_get_model_id(v);
+ return stpi_escp2_model_capabilities[model].base_resolutions[resid];
+ }
}
-static double
-escp2_bits(int model, int resid, const stp_vars_t v)
+static const escp2_dropsize_t *
+escp2_dropsizes(const stp_vars_t *v, int resid)
{
- int dotid = resid2dotid(resid);
- return stp_escp2_model_capabilities[model].bits[dotid];
+ int model = stp_get_model_id(v);
+ const escp2_drop_list_t *drops = stpi_escp2_model_capabilities[model].drops;
+ return (*drops)[resid];
}
-static double
-escp2_base_res(int model, int resid, const stp_vars_t v)
+static const inklist_t *
+escp2_inklist(const stp_vars_t *v)
{
- int dotid = resid2dotid(resid);
- return stp_escp2_model_capabilities[model].base_resolutions[dotid];
+ int model = stp_get_model_id(v);
+ int i;
+ const char *ink_list_name = NULL;
+ const inkgroup_t *inkgroup = stpi_escp2_model_capabilities[model].inkgroup;
+
+ if (stp_check_string_parameter(v, "InkSet", STP_PARAMETER_ACTIVE))
+ ink_list_name = stp_get_string_parameter(v, "InkSet");
+ if (ink_list_name)
+ {
+ for (i = 0; i < inkgroup->n_inklists; i++)
+ {
+ if (strcmp(ink_list_name, inkgroup->inklists[i]->name) == 0)
+ return inkgroup->inklists[i];
+ }
+ }
+ return inkgroup->inklists[0];
}
-static const escp2_variable_inkset_t *
-escp2_inks(int model, int resid, int inkset, const stp_vars_t v)
+static const shade_t *
+escp2_shades(const stp_vars_t *v, int channel)
{
- const escp2_variable_inklist_t *inks =
- stp_escp2_model_capabilities[model].inks;
- resid /= 2;
- return (*inks)[inkset][resid];
+ const inklist_t *inklist = escp2_inklist(v);
+ return &((*inklist->shades)[channel]);
}
-static const paper_t *
-get_media_type(int model, const char *name, const stp_vars_t v)
+static const paperlist_t *
+escp2_paperlist(const stp_vars_t *v)
+{
+ const inklist_t *inklist = escp2_inklist(v);
+ if (inklist)
+ return inklist->papers;
+ else
+ return NULL;
+}
+
+static int
+using_automatic_settings(const stp_vars_t *v, auto_mode_t mode)
+{
+ int is_raw = 0;
+ if (stp_get_string_parameter(v, "InputImageType") &&
+ strcmp(stp_get_string_parameter(v, "InputImageType"), "Raw") == 0)
+ is_raw = 1;
+ switch (mode)
+ {
+ case AUTO_MODE_QUALITY:
+ if (stp_check_string_parameter(v, "Quality", STP_PARAMETER_ACTIVE) &&
+ strcmp(stp_get_string_parameter(v, "Quality"), "None") != 0 &&
+ !is_raw)
+ return 1;
+ else
+ return 0;
+#if 0
+ case AUTO_MODE_FULL_AUTO:
+ if (stp_check_string_parameter(v, "AutoMode", STP_PARAMETER_ACTIVE) &&
+ strcmp(stp_get_string_parameter(v, "AutoMode"), "None") != 0 &&
+ !is_raw)
+ return 1;
+ else
+ return 0;
+#endif
+ case AUTO_MODE_MANUAL:
+ if (!stp_check_string_parameter(v, "Quality", STP_PARAMETER_ACTIVE) ||
+ strcmp(stp_get_string_parameter(v, "Quality"), "None") == 0 ||
+ is_raw)
+ return 1;
+ else
+ return 0;
+ }
+ return 0;
+}
+
+static int
+compute_internal_resid(int hres, int vres)
{
+ static const int resolutions[RES_N] =
+ {
+ 0,
+ 360 * 360,
+ 720 * 360,
+ 720 * 720,
+ 1440 * 720,
+ 1440 * 1440,
+ 2880 * 1440,
+ 2880 * 2880,
+ };
+ int total_resolution = hres * vres;
int i;
- const paperlist_t *p = escp2_paperlist(model, v);
- int paper_type_count = p->paper_count;
- for (i = 0; i < paper_type_count; i++)
+ for (i = 0; i < RES_N; i++)
{
- if (!strcmp(name, p->papers[i].name))
- return &(p->papers[i]);
+ if (total_resolution < resolutions[i])
+ return i - 1;
}
- return NULL;
+ return RES_N - 1;
}
static int
-escp2_has_advanced_command_set(int model, const stp_vars_t v)
+compute_resid(const res_t *res)
{
- return (escp2_has_cap(model, MODEL_COMMAND, MODEL_COMMAND_PRO,v) ||
- escp2_has_cap(model, MODEL_COMMAND, MODEL_COMMAND_1999,v) ||
- escp2_has_cap(model, MODEL_COMMAND, MODEL_COMMAND_2000,v));
+ return compute_internal_resid(res->hres, res->vres);
}
static int
-escp2_use_extended_commands(int model, const stp_vars_t v, int use_softweave)
+compute_printed_resid(const res_t *res)
{
- return (escp2_has_cap(model, MODEL_COMMAND, MODEL_COMMAND_PRO, v) ||
- (escp2_has_cap(model, MODEL_VARIABLE_DOT, MODEL_VARIABLE_YES, v) &&
- use_softweave));
+ return compute_internal_resid(res->printed_hres, res->printed_vres);
}
-static char *
-c_strdup(const char *s)
+static const input_slot_t *
+get_input_slot(const stp_vars_t *v)
{
- char *ret = stp_malloc(strlen(s) + 1);
- strcpy(ret, s);
- return ret;
+ int i;
+ const char *input_slot = stp_get_string_parameter(v, "InputSlot");
+ if (input_slot && strlen(input_slot) > 0)
+ {
+ const input_slot_list_t *slots = escp2_input_slots(v);
+ if (slots)
+ {
+ for (i = 0; i < slots->n_input_slots; i++)
+ {
+ if (slots->slots[i].name &&
+ strcmp(input_slot, slots->slots[i].name) == 0)
+ {
+ return &(slots->slots[i]);
+ break;
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
+static const printer_weave_t *
+get_printer_weave(const stp_vars_t *v)
+{
+ int i;
+ const printer_weave_list_t *p = escp2_printer_weaves(v);
+ if (p)
+ {
+ const char *name = stp_get_string_parameter(v, "Weave");
+ int printer_weave_count = p->n_printer_weaves;
+ if (name)
+ {
+ for (i = 0; i < printer_weave_count; i++)
+ {
+ if (!strcmp(name, p->printer_weaves[i].name))
+ return &(p->printer_weaves[i]);
+ }
+ }
+ }
+ return NULL;
+}
+
+static int
+use_printer_weave(const stp_vars_t *v)
+{
+ const res_t *res = escp2_find_resolution(v);
+ if (!res)
+ return 1;
+ else if (!(res->softweave))
+ return 1;
+ else if (res->printer_weave)
+ return 1;
+ else
+ return 0;
+}
+
+
+static const paper_t *
+get_media_type(const stp_vars_t *v)
+{
+ int i;
+ const paperlist_t *p = escp2_paperlist(v);
+ if (p)
+ {
+ const char *name = stp_get_string_parameter(v, "MediaType");
+ int paper_type_count = p->paper_count;
+ if (name)
+ {
+ for (i = 0; i < paper_type_count; i++)
+ {
+ if (!strcmp(name, p->papers[i].name))
+ return &(p->papers[i]);
+ }
+ }
+ }
+ return NULL;
+}
+
+static int
+verify_resolution_by_paper_type(const stp_vars_t *v, const res_t *res)
+{
+ const paper_t *paper = get_media_type(v);
+ if (paper)
+ {
+ switch (paper->paper_class)
+ {
+ case PAPER_PLAIN:
+ if (res->printed_vres > 720 || res->hres > 720)
+ return 0;
+ break;
+ case PAPER_GOOD:
+ if (res->printed_vres < 180 || res->hres < 360 ||
+ res->printed_vres > 720 || res->hres > 1440)
+ return 0;
+ break;
+ case PAPER_PHOTO:
+ if (res->printed_vres < 360 ||
+ (res->hres < 720 && res->hres < escp2_max_hres(v)))
+ return 0;
+ break;
+ case PAPER_PREMIUM_PHOTO:
+ if (res->printed_vres < 720 ||
+ (res->hres < 720 && res->hres < escp2_max_hres(v)))
+ return 0;
+ break;
+ case PAPER_TRANSPARENCY:
+ if (res->printed_vres < 360 || res->hres < 360 ||
+ res->printed_vres > 720 || res->hres > 720)
+ return 0;
+ break;
+ }
+ }
+ return 1;
}
static int
-verify_resolution(const res_t *res, int model, const stp_vars_t v)
+verify_resolution(const stp_vars_t *v, const res_t *res)
{
int nozzle_width =
- (escp2_base_separation(model, v) / escp2_nozzle_separation(model, v));
- int nozzles = escp2_nozzles(model, v);
- if (escp2_ink_type(model, res->resid, v) != -1 &&
- res->vres <= escp2_max_vres(model, v) &&
- res->hres <= escp2_max_hres(model, v) &&
- res->vres >= escp2_min_vres(model, v) &&
- res->hres >= escp2_min_hres(model, v) &&
+ (escp2_base_separation(v) / escp2_nozzle_separation(v));
+ int nozzles = escp2_nozzles(v);
+ if (escp2_ink_type(v, compute_printed_resid(res)) != -1 &&
+ res->vres <= escp2_max_vres(v) &&
+ res->hres <= escp2_max_hres(v) &&
+ res->vres >= escp2_min_vres(v) &&
+ res->hres >= escp2_min_hres(v) &&
(nozzles == 1 ||
((res->vres / nozzle_width) * nozzle_width) == res->vres))
{
int xdpi = res->hres;
- int physical_xdpi = escp2_base_res(model, res->resid, v);
+ int physical_xdpi = escp2_base_res(v, compute_resid(res));
int horizontal_passes, oversample;
if (physical_xdpi > xdpi)
physical_xdpi = xdpi;
horizontal_passes = xdpi / physical_xdpi;
- oversample = horizontal_passes * res->vertical_passes
- * res->vertical_oversample;
+ oversample = horizontal_passes * res->vertical_passes;
if (horizontal_passes < 1)
horizontal_passes = 1;
if (oversample < 1)
oversample = 1;
- if (((horizontal_passes * res->vertical_passes) <= 8) &&
+ if (((horizontal_passes * res->vertical_passes) <= STP_MAX_WEAVE) &&
(! res->softweave || (nozzles > 1 && nozzles > oversample)))
return 1;
}
@@ -332,1574 +1024,2075 @@ verify_resolution(const res_t *res, int model, const stp_vars_t v)
}
static int
-verify_papersize(const stp_papersize_t pt, int model, const stp_vars_t v)
+printer_supports_rollfeed(const stp_vars_t *v)
+{
+ int i;
+ const input_slot_list_t *slots = escp2_input_slots(v);
+ for (i = 0; i < slots->n_input_slots; i++)
+ {
+ if (slots->slots[i].is_roll_feed)
+ return 1;
+ }
+ return 0;
+}
+
+static int
+printer_supports_print_to_cd(const stp_vars_t *v)
+{
+ int i;
+ const input_slot_list_t *slots = escp2_input_slots(v);
+ for (i = 0; i < slots->n_input_slots; i++)
+ {
+ if (slots->slots[i].is_cd)
+ return 1;
+ }
+ return 0;
+}
+
+static int
+verify_papersize(const stp_vars_t *v, const stp_papersize_t *pt)
{
unsigned int height_limit, width_limit;
unsigned int min_height_limit, min_width_limit;
- unsigned int pwidth = stp_papersize_get_width(pt);
- unsigned int pheight = stp_papersize_get_height(pt);
- width_limit = escp2_max_paper_width(model, v);
- height_limit = escp2_max_paper_height(model, v);
- min_width_limit = escp2_min_paper_width(model, v);
- min_height_limit = escp2_min_paper_height(model, v);
- if (strlen(stp_papersize_get_name(pt)) > 0 &&
- pwidth <= width_limit && pheight <= height_limit &&
- (pheight >= min_height_limit || pheight == 0) &&
- (pwidth >= min_width_limit || pwidth == 0) &&
- (pwidth == 0 || pheight > 0 ||
- escp2_has_cap(model, MODEL_ROLLFEED, MODEL_ROLLFEED_YES, v)))
+ width_limit = escp2_max_paper_width(v);
+ height_limit = escp2_max_paper_height(v);
+ min_width_limit = escp2_min_paper_width(v);
+ min_height_limit = escp2_min_paper_height(v);
+ if (strlen(pt->name) > 0 &&
+ pt->width <= width_limit && pt->height <= height_limit &&
+ (pt->height >= min_height_limit || pt->height == 0) &&
+ (pt->width >= min_width_limit || pt->width == 0) &&
+ (pt->width == 0 || pt->height > 0 || printer_supports_rollfeed(v)))
return 1;
else
return 0;
}
-/*
- * 'escp2_parameters()' - Return the parameter values for the given parameter.
- */
-
-static stp_param_t * /* O - Parameter values */
-escp2_parameters(const stp_printer_t printer, /* I - Printer model */
- const char *ppd_file, /* I - PPD file (not used) */
- const char *name, /* I - Name of parameter */
- int *count) /* O - Number of values */
+static int
+verify_inktype(const stp_vars_t *v, const escp2_inkname_t *inks)
{
- int i;
- stp_param_t *valptrs;
- int model = stp_printer_get_model(printer);
- const stp_vars_t v = stp_printer_get_printvars(printer);
+ if (inks->inkset == INKSET_EXTENDED)
+ return 0;
+ else
+ return 1;
+}
- if (count == NULL)
- return (NULL);
+static const char *
+get_default_inktype(const stp_vars_t *v)
+{
+ const inklist_t *ink_list = escp2_inklist(v);
+ const paper_t *paper_type = get_media_type(v);
+ if (!ink_list)
+ return NULL;
+ if (!paper_type)
+ {
+ const paperlist_t *p = escp2_paperlist(v);
+ if (p)
+ paper_type = &(p->papers[0]);
+ }
+ if (paper_type && paper_type->preferred_ink_type)
+ return paper_type->preferred_ink_type;
+ else if (escp2_has_cap(v, MODEL_FAST_360, MODEL_FAST_360_YES) &&
+ stp_check_string_parameter(v, "Resolution", STP_PARAMETER_ACTIVE))
+ {
+ const res_t *res = escp2_find_resolution(v);
+ if (res)
+ {
+ int resid = compute_printed_resid(res);
+ if (res->vres == 360 && res->hres == escp2_base_res(v, resid))
+ {
+ int i;
+ for (i = 0; i < ink_list->n_inks; i++)
+ if (strcmp(ink_list->inknames[i]->name, "CMYK") == 0)
+ return ink_list->inknames[i]->name;
+ }
+ }
+ }
+ return ink_list->inknames[0]->name;
+}
- *count = 0;
- if (name == NULL)
- return (NULL);
+static const escp2_inkname_t *
+get_inktype(const stp_vars_t *v)
+{
+ const char *ink_type = stp_get_string_parameter(v, "InkType");
+ const inklist_t *ink_list = escp2_inklist(v);
+ int i;
- if (strcmp(name, "PageSize") == 0)
- {
- int papersizes = stp_known_papersizes();
- valptrs = stp_malloc(sizeof(stp_param_t) * papersizes);
- *count = 0;
+ if (!ink_type || strcmp(ink_type, "None") == 0 ||
+ (ink_list && ink_list->n_inks == 1) ||
+ !using_automatic_settings(v, AUTO_MODE_MANUAL))
+ ink_type = get_default_inktype(v);
- for (i = 0; i < papersizes; i++)
+ if (ink_type && ink_list)
{
- const stp_papersize_t pt = stp_get_papersize_by_index(i);
- if (verify_papersize(pt, model, v))
+ for (i = 0; i < ink_list->n_inks; i++)
{
- valptrs[*count].name = c_strdup(stp_papersize_get_name(pt));
- valptrs[*count].text = c_strdup(stp_papersize_get_text(pt));
- (*count)++;
+ if (strcmp(ink_type, ink_list->inknames[i]->name) == 0)
+ return ink_list->inknames[i];
}
}
-
- return (valptrs);
- }
- else if (strcmp(name, "Resolution") == 0)
- {
- const res_t *res = escp2_reslist(model, v);
- valptrs = stp_malloc(sizeof(stp_param_t) * reslist_count(res));
- *count = 0;
- while (res->hres)
- {
- if (verify_resolution(res, model, v))
- {
- valptrs[*count].name = c_strdup(res->name);
- valptrs[*count].text = c_strdup(_(res->text));
- (*count)++;
- }
- res++;
- }
- return (valptrs);
- }
- else if (strcmp(name, "InkType") == 0)
- {
- const inklist_t *inks = escp2_inklist(model, v);
- int ninktypes = inks->n_inks;
- if (ninktypes == 0)
- {
- *count = 0;
- return NULL;
- }
- valptrs = stp_malloc(sizeof(stp_param_t) * ninktypes);
- for (i = 0; i < ninktypes; i++)
- {
- valptrs[i].name = c_strdup(inks->inknames[i]->name);
- valptrs[i].text = c_strdup(_(inks->inknames[i]->text));
- }
- *count = ninktypes;
- return valptrs;
- }
- else if (strcmp(name, "MediaType") == 0)
- {
- const paperlist_t *p = escp2_paperlist(model, v);
- int nmediatypes = p->paper_count;
- valptrs = stp_malloc(sizeof(stp_param_t) * nmediatypes);
- if (nmediatypes == 0)
- {
- *count = 0;
- return NULL;
- }
- for (i = 0; i < nmediatypes; i++)
- {
- valptrs[i].name = c_strdup(p->papers[i].name);
- valptrs[i].text = c_strdup(_(p->papers[i].text));
- }
- *count = nmediatypes;
- return valptrs;
- }
- else if (strcmp(name, "InputSlot") == 0)
- {
- const input_slot_list_t *slots = escp2_input_slots(model, v);
- int ninputslots = slots->n_input_slots;
- if (ninputslots == 0)
- {
- valptrs = NULL;
- *count = 0;
- return NULL;
- }
- valptrs = stp_malloc(sizeof(stp_param_t) * ninputslots);
- for (i = 0; i < ninputslots; i++)
+ /*
+ * If we couldn't find anything, try again with the default ink type.
+ * This may mean duplicate work, but that's cheap enough.
+ */
+ ink_type = get_default_inktype(v);
+ for (i = 0; i < ink_list->n_inks; i++)
{
- valptrs[i].name = c_strdup(slots->slots[i].name);
- valptrs[i].text = c_strdup(_(slots->slots[i].text));
+ if (strcmp(ink_type, ink_list->inknames[i]->name) == 0)
+ return ink_list->inknames[i];
}
- *count = ninputslots;
- return valptrs;
- }
- else
- return (NULL);
+ return NULL;
}
-static const res_t *
-escp2_find_resolution(int model, const stp_vars_t v, const char *resolution)
+static const paper_adjustment_t *
+get_media_adjustment(const stp_vars_t *v)
{
- const res_t *res;
- if (!resolution || !strcmp(resolution, ""))
- return NULL;
- for (res = escp2_reslist(model, v);;res++)
+ const paper_t *pt = get_media_type(v);
+ const inklist_t *ink_list = escp2_inklist(v);
+ if (pt && ink_list && ink_list->paper_adjustments)
{
- if (!strcmp(resolution, res->name))
- return res;
- else if (!strcmp(res->name, ""))
- return NULL;
+ const paper_adjustment_list_t *adjlist = ink_list->paper_adjustments;
+ const char *paper_name = pt->name;
+ int i;
+ for (i = 0; i < adjlist->paper_count; i++)
+ {
+ if (strcmp(paper_name, adjlist->papers[i].name) == 0)
+ return &(adjlist->papers[i]);
+ }
}
+ return NULL;
}
+
/*
- * 'escp2_imageable_area()' - Return the imageable area of the page.
+ * 'escp2_parameters()' - Return the parameter values for the given parameter.
*/
+static stp_parameter_list_t
+escp2_list_parameters(const stp_vars_t *v)
+{
+ stp_parameter_list_t *ret = stp_parameter_list_create();
+ int i;
+ for (i = 0; i < the_parameter_count; i++)
+ stp_parameter_list_add_param(ret, &(the_parameters[i]));
+ for (i = 0; i < float_parameter_count; i++)
+ stp_parameter_list_add_param(ret, &(float_parameters[i].param));
+ return ret;
+}
+
static void
-escp2_imageable_area(const stp_printer_t printer, /* I - Printer model */
- const stp_vars_t v, /* I */
- int *left, /* O - Left position in points */
- int *right, /* O - Right position in points */
- int *bottom, /* O - Bottom position in points */
- int *top) /* O - Top position in points */
+fill_transition_parameters(stp_parameter_t *description)
{
- int width, height; /* Size of page */
- int rollfeed = 0; /* Roll feed selected */
- int model = stp_printer_get_model(printer);
- const char *input_slot = stp_get_media_source(v);
+ description->is_active = 1;
+ description->bounds.dbl.lower = 0;
+ description->bounds.dbl.upper = 5.0;
+ description->deflt.dbl = 1.0;
+}
- if (input_slot && strlen(input_slot) > 0)
+static void
+set_density_parameter(const stp_vars_t *v,
+ stp_parameter_t *description,
+ int color)
+{
+ description->is_active = 0;
+ if (stp_get_string_parameter(v, "PrintingMode") &&
+ strcmp(stp_get_string_parameter(v, "PrintingMode"), "BW") != 0 &&
+ using_automatic_settings(v, AUTO_MODE_MANUAL))
{
- int i;
- const input_slot_list_t *slots = escp2_input_slots(model, v);
- for (i = 0; i < slots->n_input_slots; i++)
+ const escp2_inkname_t *ink_name = get_inktype(v);
+ if (ink_name &&
+ ink_name->channel_set->channel_count > color &&
+ ink_name->channel_set->channels[color])
+ description->is_active = 1;
+ }
+}
+
+static void
+set_hue_map_parameter(const stp_vars_t *v,
+ stp_parameter_t *description,
+ int color)
+{
+ description->is_active = 0;
+ description->deflt.curve = hue_curve_bounds;
+ description->bounds.curve = stp_curve_create_copy(hue_curve_bounds);
+ if (stp_get_string_parameter(v, "PrintingMode") &&
+ strcmp(stp_get_string_parameter(v, "PrintingMode"), "BW") != 0 &&
+ using_automatic_settings(v, AUTO_MODE_MANUAL))
+ {
+ const escp2_inkname_t *ink_name = get_inktype(v);
+ if (ink_name &&
+ ink_name->channel_set->channel_count > color &&
+ ink_name->channel_set->channels[color] &&
+ ink_name->channel_set->channels[color]->hue_curve &&
+ ink_name->channel_set->channels[color]->hue_curve->curve)
{
- if (slots->slots[i].name &&
- strcmp(input_slot, slots->slots[i].name) == 0)
- {
- rollfeed = slots->slots[i].is_roll_feed;
- break;
- }
+ if (!ink_name->channel_set->channels[color]->hue_curve->curve_impl)
+ ink_name->channel_set->channels[color]->hue_curve->curve_impl =
+ stp_curve_create_from_string
+ (ink_name->channel_set->channels[color]->hue_curve->curve);
+ description->deflt.curve =
+ ink_name->channel_set->channels[color]->hue_curve->curve_impl;
+ description->is_active = 1;
}
}
+}
- stp_default_media_size(printer, v, &width, &height);
+static void
+set_gray_transition_parameter(const stp_vars_t *v,
+ stp_parameter_t *description,
+ int expected_channels)
+{
+ const escp2_inkname_t *ink_name = get_inktype(v);
+ description->is_active = 0;
+ if (ink_name && ink_name->channel_set->channels[STP_ECOLOR_K] &&
+ (ink_name->channel_set->channels[STP_ECOLOR_K]->n_subchannels ==
+ expected_channels) &&
+ using_automatic_settings(v, AUTO_MODE_MANUAL))
+ fill_transition_parameters(description);
+}
- if (rollfeed)
+static void
+set_color_transition_parameter(const stp_vars_t *v,
+ stp_parameter_t *description,
+ int color)
+{
+ description->is_active = 0;
+ if (stp_get_string_parameter(v, "PrintingMode") &&
+ strcmp(stp_get_string_parameter(v, "PrintingMode"), "BW") != 0 &&
+ using_automatic_settings(v, AUTO_MODE_MANUAL))
{
- *left = escp2_roll_left_margin(model, v);
- *right = width - escp2_roll_right_margin(model, v);
- *top = height - escp2_roll_top_margin(model, v);
- *bottom = escp2_roll_bottom_margin(model, v);
+ const escp2_inkname_t *ink_name = get_inktype(v);
+ if (ink_name &&
+ ink_name->channel_set->channel_count == 4 &&
+ ink_name->channel_set->channels[color] &&
+ ink_name->channel_set->channels[color]->n_subchannels == 2)
+ fill_transition_parameters(description);
}
- else
+}
+
+static const res_t *
+find_default_resolution(const stp_vars_t *v, int desired_hres, int desired_vres,
+ int strict)
+{
+ const res_t *const *res = escp2_reslist(v);
+ int i = 0;
+ if (desired_hres < 0)
{
- *left = escp2_left_margin(model, v);
- *right = width - escp2_right_margin(model, v);
- *top = height - escp2_top_margin(model, v);
- *bottom = escp2_bottom_margin(model, v);
+ while (res[i])
+ i++;
+ i--;
+ while (i >= 0)
+ {
+ if (verify_resolution(v, res[i]) &&
+ verify_resolution_by_paper_type(v, res[i]))
+ return res[i];
+ i--;
+ }
+ }
+ i = 0;
+ while (res[i])
+ {
+ if (verify_resolution(v, res[i]) &&
+ verify_resolution_by_paper_type(v, res[i]) &&
+ res[i]->vres >= desired_vres && res[i]->hres >= desired_hres &&
+ res[i]->vres <= 2 * desired_vres && res[i]->hres <= 2 * desired_hres)
+ return res[i];
+ i++;
}
+#if 0
+ if (!strict) /* Try again to find a match */
+ {
+ i = 0;
+ while (res[i])
+ {
+ if (verify_resolution(v, res[i]) &&
+ res[i]->vres >= desired_vres &&
+ res[i]->hres >= desired_hres &&
+ res[i]->vres <= 2 * desired_vres &&
+ res[i]->hres <= 2 * desired_hres)
+ return res[i];
+ i++;
+ }
+ }
+#endif
+ return NULL;
}
-static void
-escp2_limit(const stp_printer_t printer, /* I - Printer model */
- const stp_vars_t v, /* I */
- int *width,
- int *height,
- int *min_width,
- int *min_height)
+static const res_t *
+find_resolution_from_quality(const stp_vars_t *v, const char *quality,
+ int strict)
{
- int model = stp_printer_get_model(printer);
- *width = escp2_max_paper_width(model, v);
- *height = escp2_max_paper_height(model, v);
- *min_width = escp2_min_paper_width(model, v);
- *min_height = escp2_min_paper_height(model, v);
+ int i;
+ const quality_list_t *quals = escp2_quality_list(v);
+ for (i = 0; i < quals->n_quals; i++)
+ {
+ const quality_t *q = &(quals->qualities[i]);
+ if (strcmp(quality, q->name) == 0 &&
+ (q->min_vres == 0 || escp2_min_vres(v) <= q->min_vres) &&
+ (q->min_hres == 0 || escp2_min_hres(v) <= q->min_hres) &&
+ (q->max_vres == 0 || escp2_max_vres(v) >= q->max_vres) &&
+ (q->max_hres == 0 || escp2_max_hres(v) >= q->max_hres))
+ {
+ return find_default_resolution(v, q->desired_hres, q->desired_vres,
+ strict);
+ }
+ }
+ return NULL;
}
-static const char *
-escp2_default_parameters(const stp_printer_t printer,
- const char *ppd_file,
- const char *name)
+static void
+escp2_parameters(const stp_vars_t *v, const char *name,
+ stp_parameter_t *description)
{
- int i;
- int model = stp_printer_get_model(printer);
- const stp_vars_t v = stp_printer_get_printvars(printer);
+ int i;
+ description->p_type = STP_PARAMETER_TYPE_INVALID;
if (name == NULL)
- return NULL;
- if (strcmp(name, "PageSize") == 0)
+ return;
+
+ for (i = 0; i < float_parameter_count; i++)
+ if (strcmp(name, float_parameters[i].param.name) == 0)
+ {
+ stp_fill_parameter_settings(description,
+ &(float_parameters[i].param));
+ description->deflt.dbl = float_parameters[i].defval;
+ description->bounds.dbl.upper = float_parameters[i].max;
+ description->bounds.dbl.lower = float_parameters[i].min;
+ break;
+ }
+
+ for (i = 0; i < the_parameter_count; i++)
+ if (strcmp(name, the_parameters[i].name) == 0)
+ {
+ stp_fill_parameter_settings(description, &(the_parameters[i]));
+ break;
+ }
+
+ description->deflt.str = NULL;
+ if (strcmp(name, "AutoMode") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ stp_string_list_add_string(description->bounds.str, "None",
+ _("Full Manual Control"));
+ stp_string_list_add_string(description->bounds.str, "Auto",
+ _("Automatic Setting Control"));
+ description->deflt.str = "None"; /* so CUPS and Foomatic don't break */
+ }
+ else if (strcmp(name, "PageSize") == 0)
{
int papersizes = stp_known_papersizes();
- for (i = 0; i < papersizes; i++)
+ const input_slot_t *slot = get_input_slot(v);
+ description->bounds.str = stp_string_list_create();
+ if (slot && slot->is_cd)
+ {
+ stp_string_list_add_string
+ (description->bounds.str, "CD5Inch", _("CD - 5 inch"));
+ stp_string_list_add_string
+ (description->bounds.str, "CD3Inch", _("CD - 3 inch"));
+ }
+ else
+ {
+ for (i = 0; i < papersizes; i++)
+ {
+ const stp_papersize_t *pt = stp_get_papersize_by_index(i);
+ if (verify_papersize(v, pt))
+ stp_string_list_add_string(description->bounds.str,
+ pt->name, pt->text);
+ }
+ }
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ else if (strcmp(name, "CDInnerRadius") == 0)
+ {
+ const input_slot_t *slot = get_input_slot(v);
+ description->bounds.str = stp_string_list_create();
+ if (printer_supports_print_to_cd(v) && (!slot || (slot && slot->is_cd)))
+ {
+ stp_string_list_add_string
+ (description->bounds.str, "None", _("Normal"));
+ stp_string_list_add_string
+ (description->bounds.str, "Small", _("Print To Hub"));
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ else
+ description->is_active = 0;
+ }
+ else if (strcmp(name, "CDXAdjustment") == 0 ||
+ strcmp(name, "CDYAdjustment") == 0)
+ {
+ const input_slot_t *slot = get_input_slot(v);
+ if (printer_supports_print_to_cd(v) && (!slot || (slot && slot->is_cd)))
{
- const stp_papersize_t pt = stp_get_papersize_by_index(i);
- if (verify_papersize(pt, model, v))
- return (stp_papersize_get_name(pt));
+ description->bounds.dimension.lower = -15;
+ description->bounds.dimension.upper = 15;
+ description->deflt.dimension = 0;
}
- return NULL;
+ else
+ description->is_active = 0;
+ }
+ else if (strcmp(name, "Quality") == 0)
+ {
+ const quality_list_t *quals = escp2_quality_list(v);
+ int has_standard_quality = 0;
+ description->bounds.str = stp_string_list_create();
+ stp_string_list_add_string(description->bounds.str, "None",
+ _("Manual Control"));
+ for (i = 0; i < quals->n_quals; i++)
+ {
+ const quality_t *q = &(quals->qualities[i]);
+ if (((q->min_vres == 0 || escp2_min_vres(v) <= q->min_vres) &&
+ (q->min_hres == 0 || escp2_min_hres(v) <= q->min_hres) &&
+ (q->max_vres == 0 || escp2_max_vres(v) >= q->max_vres) &&
+ (q->max_hres == 0 || escp2_max_hres(v) >= q->max_hres)) &&
+ (find_resolution_from_quality(v, q->name, 1) ||
+ (!stp_check_string_parameter(v, "MediaType",
+ STP_PARAMETER_ACTIVE))))
+ stp_string_list_add_string(description->bounds.str, q->name,
+ _(q->text));
+ if (strcmp(q->name, "Standard") == 0)
+ has_standard_quality = 1;
+ }
+ if (has_standard_quality)
+ description->deflt.str = "Standard";
+ else
+ description->deflt.str = "None";
}
else if (strcmp(name, "Resolution") == 0)
{
- int model = stp_printer_get_model(printer);
- stp_vars_t v = stp_printer_get_printvars(printer);
- const res_t *res = escp2_reslist(model, v);
- while (res->hres)
+ const res_t *const *res = escp2_reslist(v);
+ const res_t *defval = find_default_resolution(v, 720, 360, 0);
+ description->bounds.str = stp_string_list_create();
+ i = 0;
+ while (res[i])
{
- if (res->vres >= 360 && res->hres >= 360 &&
- verify_resolution(res, model, v))
- return (res->name);
- res++;
+ if (verify_resolution(v, res[i]) &&
+ (using_automatic_settings(v, AUTO_MODE_MANUAL) ||
+ !stp_check_string_parameter(v, "MediaType",
+ STP_PARAMETER_ACTIVE) ||
+ verify_resolution_by_paper_type(v, res[i])))
+ stp_string_list_add_string(description->bounds.str,
+ res[i]->name, _(res[i]->text));
+ i++;
}
- return NULL;
+ if (defval)
+ description->deflt.str = defval->name;
+ else
+ description->deflt.str = res[0]->name;
+ if (!using_automatic_settings(v, AUTO_MODE_MANUAL))
+ description->is_active = 0;
}
else if (strcmp(name, "InkType") == 0)
{
- const inklist_t *inks = escp2_inklist(model, v);
- return inks->inknames[0]->name;
+ const inklist_t *inks = escp2_inklist(v);
+ int ninktypes = inks->n_inks;
+ description->bounds.str = stp_string_list_create();
+ if (ninktypes > 1)
+ {
+ stp_string_list_add_string(description->bounds.str, "None",
+ _("Standard"));
+ for (i = 0; i < ninktypes; i++)
+ if (verify_inktype(v, inks->inknames[i]))
+ stp_string_list_add_string(description->bounds.str,
+ inks->inknames[i]->name,
+ _(inks->inknames[i]->text));
+ description->deflt.str = "None";
+ }
+ if (ninktypes <= 1 || !using_automatic_settings(v, AUTO_MODE_MANUAL))
+ description->is_active = 0;
+ }
+ else if (strcmp(name, "InkSet") == 0)
+ {
+ const inkgroup_t *inks = escp2_inkgroup(v);
+ int ninklists = inks->n_inklists;
+ description->bounds.str = stp_string_list_create();
+ if (ninklists > 1)
+ {
+ int has_default_choice = 0;
+ for (i = 0; i < ninklists; i++)
+ {
+ stp_string_list_add_string(description->bounds.str,
+ inks->inklists[i]->name,
+ _(inks->inklists[i]->text));
+ if (strcmp(inks->inklists[i]->name, "None") == 0)
+ has_default_choice = 1;
+ }
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ if (!using_automatic_settings(v, AUTO_MODE_MANUAL) &&
+ has_default_choice)
+ description->is_active = 0;
+ }
+ else
+ description->is_active = 0;
}
else if (strcmp(name, "MediaType") == 0)
{
- const paperlist_t *p = escp2_paperlist(model, v);
- return (p->papers[0].name);
+ const paperlist_t *p = escp2_paperlist(v);
+ int nmediatypes = p->paper_count;
+ description->bounds.str = stp_string_list_create();
+ if (nmediatypes)
+ {
+ for (i = 0; i < nmediatypes; i++)
+ stp_string_list_add_string(description->bounds.str,
+ p->papers[i].name,
+ _(p->papers[i].text));
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ else
+ description->is_active = 0;
}
else if (strcmp(name, "InputSlot") == 0)
{
- const input_slot_list_t *slots = escp2_input_slots(model, v);
- if (slots->n_input_slots)
- return slots->slots[0].name;
- return NULL;
+ const input_slot_list_t *slots = escp2_input_slots(v);
+ int ninputslots = slots->n_input_slots;
+ description->bounds.str = stp_string_list_create();
+ if (ninputslots)
+ {
+ for (i = 0; i < ninputslots; i++)
+ stp_string_list_add_string(description->bounds.str,
+ slots->slots[i].name,
+ _(slots->slots[i].text));
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ else
+ description->is_active = 0;
+ }
+ else if (strcmp(name, "PrintingDirection") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ stp_string_list_add_string
+ (description->bounds.str, "None", _("Automatic"));
+ stp_string_list_add_string
+ (description->bounds.str, "Bidirectional", _("Bidirectional"));
+ stp_string_list_add_string
+ (description->bounds.str, "Unidirectional", _("Unidirectional"));
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ if (!using_automatic_settings(v, AUTO_MODE_MANUAL))
+ description->is_active = 0;
+ }
+ else if (strcmp(name, "Weave") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ if (escp2_has_cap(v, MODEL_COMMAND, MODEL_COMMAND_PRO))
+ {
+ const res_t *res = escp2_find_resolution(v);
+ const printer_weave_list_t *printer_weaves = escp2_printer_weaves(v);
+ int nprinter_weaves = 0;
+ if (use_printer_weave(v) && (!res || res->printer_weave))
+ nprinter_weaves = printer_weaves->n_printer_weaves;
+ if (nprinter_weaves)
+ {
+ stp_string_list_add_string(description->bounds.str, "None",
+ _("Standard"));
+ for (i = 0; i < nprinter_weaves; i++)
+ stp_string_list_add_string(description->bounds.str,
+ printer_weaves->printer_weaves[i].name,
+ _(printer_weaves->printer_weaves[i].text));
+ }
+ else
+ description->is_active = 0;
+ }
+ else
+ {
+ stp_string_list_add_string
+ (description->bounds.str, "None", _("Standard"));
+ stp_string_list_add_string
+ (description->bounds.str, "Alternate", _("Alternate Fill"));
+ stp_string_list_add_string
+ (description->bounds.str, "Ascending", _("Ascending Fill"));
+ stp_string_list_add_string
+ (description->bounds.str, "Descending", _("Descending Fill"));
+ stp_string_list_add_string
+ (description->bounds.str, "Ascending2X", _("Ascending Double"));
+ stp_string_list_add_string
+ (description->bounds.str, "Staggered", _("Nearest Neighbor Avoidance"));
+ }
+ if (description->is_active)
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ if (!using_automatic_settings(v, AUTO_MODE_MANUAL))
+ description->is_active = 0;
+ }
+ else if (strcmp(name, "OutputOrder") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ description->deflt.str = "Reverse";
+ }
+ else if (strcmp(name, "FullBleed") == 0)
+ {
+ const input_slot_t *slot = get_input_slot(v);
+ if (slot && slot->is_cd)
+ description->is_active = 0;
+ else if (escp2_has_cap(v, MODEL_XZEROMARGIN, MODEL_XZEROMARGIN_YES))
+ description->deflt.boolean = 0;
+ else
+ description->is_active = 0;
+ }
+ else if (strcmp(name, "AdjustDotsize") == 0)
+ {
+ description->deflt.boolean = 0;
+ if (!using_automatic_settings(v, AUTO_MODE_MANUAL))
+ description->is_active = 0;
+ }
+ else if (strcmp(name, "CyanDensity") == 0)
+ set_density_parameter(v, description, STP_ECOLOR_C);
+ else if (strcmp(name, "MagentaDensity") == 0)
+ set_density_parameter(v, description, STP_ECOLOR_M);
+ else if (strcmp(name, "YellowDensity") == 0)
+ set_density_parameter(v, description, STP_ECOLOR_Y);
+ else if (strcmp(name, "BlackDensity") == 0)
+ set_density_parameter(v, description, STP_ECOLOR_K);
+ else if (strcmp(name, "RedDensity") == 0)
+ set_density_parameter(v, description, XCOLOR_R);
+ else if (strcmp(name, "BlueDensity") == 0)
+ set_density_parameter(v, description, XCOLOR_B);
+ else if (strcmp(name, "CyanHueCurve") == 0)
+ set_hue_map_parameter(v, description, STP_ECOLOR_C);
+ else if (strcmp(name, "MagentaHueCurve") == 0)
+ set_hue_map_parameter(v, description, STP_ECOLOR_M);
+ else if (strcmp(name, "YellowHueCurve") == 0)
+ set_hue_map_parameter(v, description, STP_ECOLOR_Y);
+ else if (strcmp(name, "RedHueCurve") == 0)
+ set_hue_map_parameter(v, description, XCOLOR_R);
+ else if (strcmp(name, "BlueHueCurve") == 0)
+ set_hue_map_parameter(v, description, XCOLOR_B);
+ else if (strcmp(name, "UseGloss") == 0)
+ {
+ const escp2_inkname_t *ink_name = get_inktype(v);
+ if (ink_name && ink_name->channel_set->aux_channel_count > 0)
+ description->is_active = 1;
+ else
+ description->is_active = 0;
+ }
+ else if (strcmp(name, "GlossLimit") == 0)
+ {
+ const escp2_inkname_t *ink_name = get_inktype(v);
+ if (ink_name && ink_name->channel_set->aux_channel_count > 0)
+ description->is_active = 1;
+ else
+ description->is_active = 0;
+ }
+ else if (strcmp(name, "GrayTransition") == 0)
+ set_gray_transition_parameter(v, description, 2);
+ else if (strcmp(name, "Gray1Transition") == 0 ||
+ strcmp(name, "Gray2Transition") == 0 ||
+ strcmp(name, "Gray3Transition") == 0)
+ set_gray_transition_parameter(v, description, 4);
+ else if (strcmp(name, "LightCyanTransition") == 0)
+ set_color_transition_parameter(v, description, STP_ECOLOR_C);
+ else if (strcmp(name, "LightMagentaTransition") == 0)
+ set_color_transition_parameter(v, description, STP_ECOLOR_M);
+ else if (strcmp(name, "DarkYellowTransition") == 0)
+ set_color_transition_parameter(v, description, STP_ECOLOR_Y);
+ else if (strcmp(name, "AlignmentPasses") == 0)
+ {
+ description->deflt.integer = escp2_alignment_passes(v);
+ }
+ else if (strcmp(name, "AlignmentChoices") == 0)
+ {
+ description->deflt.integer = escp2_alignment_choices(v);
+ }
+ else if (strcmp(name, "SupportsInkChange") == 0)
+ {
+ description->deflt.integer =
+ escp2_has_cap(v, MODEL_SUPPORTS_INK_CHANGE,
+ MODEL_SUPPORTS_INK_CHANGE_YES);
+ }
+ else if (strcmp(name, "AlternateAlignmentPasses") == 0)
+ {
+ description->deflt.integer = escp2_alternate_alignment_passes(v);
+ }
+ else if (strcmp(name, "AlternateAlignmentChoices") == 0)
+ {
+ description->deflt.integer = escp2_alternate_alignment_choices(v);
+ }
+ else if (strcmp(name, "InkChannels") == 0)
+ {
+ description->deflt.integer = escp2_physical_channels(v);
+ }
+ else if (strcmp(name, "ChannelNames") == 0)
+ {
+ const channel_name_t *channel_names = escp2_channel_names(v);
+ description->bounds.str = stp_string_list_create();
+ for (i = 0; i < channel_names->count; i++)
+ stp_string_list_add_string
+ (description->bounds.str,
+ channel_names->names[i], channel_names->names[i]);
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ else if (strcmp(name, "SupportsPacketMode") == 0)
+ {
+ description->deflt.integer =
+ escp2_has_cap(v, MODEL_PACKET_MODE, MODEL_PACKET_MODE_YES);
+ }
+ else if (strcmp(name, "PrintingMode") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ stp_string_list_add_string
+ (description->bounds.str, "Color", _("Color"));
+ stp_string_list_add_string
+ (description->bounds.str, "BW", _("Black and White"));
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ else if (strcmp(name, "RawChannels") == 0)
+ {
+ const inklist_t *inks = escp2_inklist(v);
+ int ninktypes = inks->n_inks;
+ description->bounds.str = stp_string_list_create();
+ if (ninktypes > 1)
+ {
+ stp_string_list_add_string(description->bounds.str, "None", "None");
+ for (i = 0; i < ninktypes; i++)
+ if (inks->inknames[i]->inkset == INKSET_EXTENDED)
+ {
+ const channel_count_t *ch =
+ (get_channel_count_by_number
+ (inks->inknames[i]->channel_set->channel_count));
+ stp_string_list_add_string(description->bounds.str,
+ ch->name, ch->name);
+ }
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ if (ninktypes <= 1)
+ description->is_active = 0;
+ }
+ else if (strcmp(name, "MultiChannelLimit") == 0)
+ {
+ if (stp_get_string_parameter(v, "PrintingMode") &&
+ strcmp(stp_get_string_parameter(v, "PrintingMode"), "BW") != 0 &&
+ using_automatic_settings(v, AUTO_MODE_MANUAL))
+ {
+ const escp2_inkname_t *ink_name = get_inktype(v);
+ if (ink_name && ink_name->inkset == INKSET_CMYKRB)
+ description->is_active = 1;
+ }
+ else
+ description->is_active = 0;
}
- else
- return (NULL);
}
-static void
-escp2_describe_resolution(const stp_printer_t printer,
- const char *resolution, int *x, int *y)
+static const res_t *
+escp2_find_resolution(const stp_vars_t *v)
{
- int model = stp_printer_get_model(printer);
- stp_vars_t v = stp_printer_get_printvars(printer);
- const res_t *res = escp2_reslist(model, v);
- while (res->hres)
+ const char *resolution;
+ if (stp_check_string_parameter(v, "Quality", STP_PARAMETER_ACTIVE))
{
- if (!strcmp(resolution, res->name) &&
- verify_resolution(res, model, v))
+ const res_t *default_res =
+ find_resolution_from_quality(v, stp_get_string_parameter(v, "Quality"),
+ 0);
+ if (default_res)
{
- *x = res->external_hres;
- *y = res->external_vres;
- return;
+ stp_dprintf(STP_DBG_ESCP2, v,
+ "Setting resolution to %s from quality %s\n",
+ default_res->name,
+ stp_get_string_parameter(v, "Quality"));
+ return default_res;
}
- res++;
+ else
+ stp_dprintf(STP_DBG_ESCP2, v, "Unable to map quality %s\n",
+ stp_get_string_parameter(v, "Quality"));
}
- *x = -1;
- *y = -1;
+ resolution = stp_get_string_parameter(v, "Resolution");
+ if (resolution)
+ {
+ const res_t *const *res = escp2_reslist(v);
+ int i = 0;
+ while (res[i])
+ {
+ if (!strcmp(resolution, res[i]->name))
+ return res[i];
+ else if (!strcmp(res[i]->name, ""))
+ return NULL;
+ i++;
+ }
+ }
+ return NULL;
+}
+
+static inline int
+imax(int a, int b)
+{
+ if (a > b)
+ return a;
+ else
+ return b;
}
static void
-escp2_reset_printer(const escp2_init_t *init)
+internal_imageable_area(const stp_vars_t *v, int use_paper_margins,
+ int *left, int *right, int *bottom, int *top)
{
- /*
- * Magic initialization string that's needed to take printer out of
- * packet mode.
- */
- const init_sequence_t *inits = escp2_preinit_sequence(init->model, init->v);
- if (inits)
- stp_zfwrite(inits->data, inits->length, 1, init->v);
+ int width, height; /* Size of page */
+ int rollfeed = 0; /* Roll feed selected */
+ int cd = 0; /* CD selected */
+ const char *media_size = stp_get_string_parameter(v, "PageSize");
+ int left_margin = 0;
+ int right_margin = 0;
+ int bottom_margin = 0;
+ int top_margin = 0;
+ const stp_papersize_t *pt = NULL;
+ const input_slot_t *input_slot = NULL;
+
+ if (media_size && use_paper_margins)
+ pt = stp_get_papersize_by_name(media_size);
+
+ input_slot = get_input_slot(v);
+ if (input_slot)
+ {
+ cd = input_slot->is_cd;
+ rollfeed = input_slot->is_roll_feed;
+ }
- stp_puts("\033@", init->v); /* ESC/P2 reset */
+ stp_default_media_size(v, &width, &height);
+ if (cd)
+ {
+ left_margin = 0;
+ right_margin = 0;
+ bottom_margin = 0;
+ top_margin = 0;
+ }
+ else
+ {
+ if (pt)
+ {
+ left_margin = pt->left;
+ right_margin = pt->right;
+ bottom_margin = pt->bottom;
+ top_margin = pt->top;
+ }
+
+ left_margin = imax(left_margin, escp2_left_margin(v, rollfeed));
+ right_margin = imax(right_margin, escp2_right_margin(v, rollfeed));
+ bottom_margin = imax(bottom_margin, escp2_bottom_margin(v, rollfeed));
+ top_margin = imax(top_margin, escp2_top_margin(v, rollfeed));
+ }
+ *left = left_margin;
+ *right = width - right_margin;
+ *top = top_margin;
+ *bottom = height - bottom_margin;
+ if (!cd &&
+ escp2_has_cap(v, MODEL_XZEROMARGIN, MODEL_XZEROMARGIN_YES) &&
+ stp_get_boolean_parameter(v, "FullBleed"))
+ {
+ *left -= 80 / (360 / 72); /* 80 per the Epson manual */
+ *right += 80 / (360 / 72); /* 80 per the Epson manual */
+ *bottom += escp2_nozzles(v) * escp2_nozzle_separation(v) * 72 /
+ escp2_base_separation(v);
+ }
}
+/*
+ * 'escp2_imageable_area()' - Return the imageable area of the page.
+ */
+
static void
-print_remote_param(const stp_vars_t v, const char *param, const char *value)
+escp2_imageable_area(const stp_vars_t *v, /* I */
+ int *left, /* O - Left position in points */
+ int *right, /* O - Right position in points */
+ int *bottom, /* O - Bottom position in points */
+ int *top) /* O - Top position in points */
{
- unsigned bytes = 2 + strlen(param) + strlen(value);
- stp_zprintf(v, "\033(R%c%c%c%s:%s", (bytes & 0xff), ((bytes >> 8) & 0xff), 0,
- param, value);
- stp_zprintf(v, "\033%c%c%c", 0, 0, 0);
+ internal_imageable_area(v, 1, left, right, bottom, top);
}
static void
-print_remote_int_param(const stp_vars_t v, const char *param, int value)
+escp2_limit(const stp_vars_t *v, /* I */
+ int *width, int *height,
+ int *min_width, int *min_height)
{
- char buf[64];
- (void) snprintf(buf, 64, "%d", value);
- print_remote_param(v, param, buf);
+ *width = escp2_max_paper_width(v);
+ *height = escp2_max_paper_height(v);
+ *min_width = escp2_min_paper_width(v);
+ *min_height = escp2_min_paper_height(v);
}
static void
-print_remote_float_param(const stp_vars_t v, const char *param, double value)
+escp2_describe_resolution(const stp_vars_t *v, int *x, int *y)
{
- char buf[64];
- (void) snprintf(buf, 64, "%f", value);
- print_remote_param(v, param, buf);
+ const res_t *res = escp2_find_resolution(v);
+ if (res && verify_resolution(v, res))
+ {
+ *x = res->printed_hres;
+ *y = res->printed_vres;
+ return;
+ }
+ *x = -1;
+ *y = -1;
}
-static void
-escp2_set_remote_sequence(const escp2_init_t *init)
-{
- /* Magic remote mode commands, whatever they do */
-
- if (stp_debug_level & STP_DBG_MARK_FILE)
- {
- print_remote_param(init->v, "Package", PACKAGE);
- print_remote_param(init->v, "Version", VERSION);
- print_remote_param(init->v, "Release Date", RELEASE_DATE);
- print_remote_param(init->v, "Driver", stp_get_driver(init->v));
- print_remote_param(init->v, "Resolution", stp_get_resolution(init->v));
- print_remote_param(init->v, "Media Size", stp_get_media_size(init->v));
- print_remote_param(init->v, "Media Type", stp_get_media_type(init->v));
- print_remote_param(init->v, "Media Source", stp_get_media_source(init->v));
- print_remote_param(init->v, "Ink Type", stp_get_ink_type(init->v));
- print_remote_param(init->v, "Dither", stp_get_dither_algorithm(init->v));
- print_remote_int_param(init->v, "Output Type", stp_get_output_type(init->v));
- print_remote_int_param(init->v, "Orientation", stp_get_orientation(init->v));
- print_remote_int_param(init->v, "Left", stp_get_left(init->v));
- print_remote_int_param(init->v, "Top", stp_get_top(init->v));
- print_remote_int_param(init->v, "Image Type", stp_get_image_type(init->v));
- print_remote_int_param(init->v, "Page Width", stp_get_page_width(init->v));
- print_remote_int_param(init->v, "Page Height", stp_get_page_height(init->v));
- print_remote_int_param(init->v, "Input Model", stp_get_input_color_model(init->v));
- print_remote_int_param(init->v, "Output Model", stp_get_output_color_model(init->v));
- print_remote_float_param(init->v, "Brightness", stp_get_brightness(init->v));
- print_remote_float_param(init->v, "Scaling", stp_get_scaling(init->v));
- print_remote_float_param(init->v, "Gamma", stp_get_gamma(init->v));
- print_remote_float_param(init->v, "App Gamma", stp_get_app_gamma(init->v));
- print_remote_float_param(init->v, "Contrast", stp_get_contrast(init->v));
- print_remote_float_param(init->v, "Cyan", stp_get_cyan(init->v));
- print_remote_float_param(init->v, "Magenta", stp_get_magenta(init->v));
- print_remote_float_param(init->v, "Yellow", stp_get_yellow(init->v));
- print_remote_float_param(init->v, "Saturation", stp_get_saturation(init->v));
- print_remote_float_param(init->v, "Density", stp_get_density(init->v));
- print_remote_int_param(init->v, "Model", init->model);
- print_remote_int_param(init->v, "Output_type", init->output_type);
- print_remote_int_param(init->v, "Ydpi", init->ydpi);
- print_remote_int_param(init->v, "Xdpi", init->xdpi);
- print_remote_int_param(init->v, "Physical_xdpi", init->physical_xdpi);
- print_remote_int_param(init->v, "Use_softweave", init->use_softweave);
- print_remote_int_param(init->v, "Use_interleave", init->use_interleave);
- print_remote_int_param(init->v, "Page_true_height", init->page_true_height);
- print_remote_int_param(init->v, "Page_width", init->page_width);
- print_remote_int_param(init->v, "Page_top", init->page_top);
- print_remote_int_param(init->v, "Page_bottom", init->page_bottom);
- print_remote_int_param(init->v, "Nozzles", init->nozzles);
- print_remote_int_param(init->v, "Nozzle_separation", init->nozzle_separation);
- print_remote_int_param(init->v, "Horizontal_passes", init->horizontal_passes);
- print_remote_int_param(init->v, "Vertical_passes", init->vertical_passes);
- print_remote_int_param(init->v, "Vertical_oversample", init->vertical_oversample);
- print_remote_int_param(init->v, "Bits", init->bits);
- print_remote_int_param(init->v, "Unidirectional", init->unidirectional);
- print_remote_int_param(init->v, "Resid", init->resid);
- print_remote_int_param(init->v, "Initial_vertical_offset", init->initial_vertical_offset);
- print_remote_int_param(init->v, "Total_channels", init->total_channels);
- print_remote_int_param(init->v, "Use_black_parameters", init->use_black_parameters);
- print_remote_int_param(init->v, "Use_fast_360", init->use_fast_360);
- print_remote_param(init->v, "Ink name", init->inkname->name);
- print_remote_int_param(init->v, " is_color", init->inkname->is_color);
- print_remote_int_param(init->v, " inkset", init->inkname->inkset);
- stp_puts("\033@", init->v);
- }
- if (escp2_has_advanced_command_set(init->model, init->v) || init->input_slot)
- {
- int feed_sequence = 0;
- const paper_t *p =
- get_media_type(init->model, init->paper_type, init->v);
- /* Enter remote mode */
- stp_zprintf(init->v, "\033(R%c%c%cREMOTE1", 8, 0, 0);
- if (escp2_has_cap(init->model, MODEL_COMMAND,
- MODEL_COMMAND_PRO, init->v))
- {
- if (p)
- {
- stp_zprintf(init->v, "PH%c%c%c%c", 2, 0, 0, p->paper_thickness);
- if (escp2_has_cap(init->model, MODEL_VACUUM, MODEL_VACUUM_YES,
- init->v))
- stp_zprintf(init->v, "SN%c%c%c%c%c",
- 3, 0, 0, 5, p->vacuum_intensity);
- stp_zprintf(init->v, "SN%c%c%c%c%c",
- 3, 0, 0, 4, p->feed_adjustment);
- }
- }
- else if (escp2_has_advanced_command_set(init->model, init->v))
- {
- if (p)
- feed_sequence = p->paper_feed_sequence;
- /* Function unknown */
- stp_zprintf(init->v, "PM%c%c%c%c", 2, 0, 0, 0);
- /* Set mechanism sequence */
- stp_zprintf(init->v, "SN%c%c%c%c%c", 3, 0, 0, 0, feed_sequence);
- if (escp2_has_cap(init->model, MODEL_XZEROMARGIN,
- MODEL_XZEROMARGIN_YES, init->v))
- stp_zprintf(init->v, "FP%c%c%c%c%c", 3, 0, 0, 0260, 0xff);
- }
- if (init->input_slot)
+static const char *
+escp2_describe_output(const stp_vars_t *v)
+{
+ const char *printing_mode = stp_get_string_parameter(v, "PrintingMode");
+ const char *input_image_type = stp_get_string_parameter(v, "InputImageType");
+ if (input_image_type && strcmp(input_image_type, "Raw") == 0)
+ return "Raw";
+ else if (printing_mode && strcmp(printing_mode, "BW") == 0)
+ return "Grayscale";
+ else
+ {
+ const escp2_inkname_t *ink_type = get_inktype(v);
+ if (ink_type)
{
- int divisor = escp2_base_separation(init->model, init->v) / 360;
- int height = init->page_true_height * 5 / divisor;
- if (init->input_slot->init_sequence.length)
- stp_zfwrite(init->input_slot->init_sequence.data,
- init->input_slot->init_sequence.length, 1, init->v);
- switch (init->input_slot->roll_feed_cut_flags)
+ switch (ink_type->inkset)
{
- case ROLL_FEED_CUT_ALL:
- stp_zprintf(init->v, "JS%c%c%c%c", 2, 0, 0, 0);
- stp_zprintf(init->v, "CO%c%c%c%c%c%c%c%c%c%c",
- 8, 0, 0, 0, 1, 0, 0, 0, 0, 0);
- stp_zprintf(init->v, "CO%c%c%c%c%c%c%c%c%c%c",
- 8, 0, 0, 0, 0, 0,
- height & 0xff, (height >> 8) & 0xff,
- (height >> 16) & 0xff, (height >> 24) & 0xff);
- break;
- case ROLL_FEED_CUT_LAST:
- stp_zprintf(init->v, "CO%c%c%c%c%c%c%c%c%c%c",
- 8, 0, 0, 0, 1, 0, 0, 0, 0, 0);
- stp_zprintf(init->v, "CO%c%c%c%c%c%c%c%c%c%c",
- 8, 0, 0, 0, 2, 0,
- height & 0xff, (height >> 8) & 0xff,
- (height >> 16) & 0xff, (height >> 24) & 0xff);
- break;
+ case INKSET_CMYKRB:
+ case INKSET_CMYK:
+ case INKSET_CcMmYK:
+ case INKSET_CcMmYyK:
+ case INKSET_CcMmYKk:
default:
+ if (ink_type->channel_set->channels[0])
+ return "KCMY";
+ else
+ return "CMY";
break;
}
}
-
- /* Exit remote mode */
- stp_zprintf(init->v, "\033%c%c%c", 0, 0, 0);
+ else
+ return "CMYK";
}
}
-static void
-escp2_set_graphics_mode(const escp2_init_t *init)
+static int
+escp2_has_advanced_command_set(const stp_vars_t *v)
{
- stp_zfwrite("\033(G\001\000\001", 6, 1, init->v);
+ return (escp2_has_cap(v, MODEL_COMMAND, MODEL_COMMAND_PRO) ||
+ escp2_has_cap(v, MODEL_COMMAND, MODEL_COMMAND_1999) ||
+ escp2_has_cap(v, MODEL_COMMAND, MODEL_COMMAND_2000));
}
-static void
-escp2_set_resolution(const escp2_init_t *init)
+static int
+escp2_use_extended_commands(const stp_vars_t *v, int use_softweave)
{
- if (escp2_use_extended_commands(init->model, init->v, init->use_softweave))
- {
- int hres = escp2_max_hres(init->model, init->v);
- stp_zprintf(init->v, "\033(U\005%c%c%c%c%c%c", 0, hres / init->ydpi,
- hres / init->ydpi, hres / init->xdpi,
- hres % 256, hres / 256);
- }
- else
- stp_zprintf(init->v, "\033(U\001%c%c", 0, 3600 / init->ydpi);
+ return (escp2_has_cap(v, MODEL_COMMAND, MODEL_COMMAND_PRO) ||
+ (escp2_has_cap(v, MODEL_VARIABLE_DOT, MODEL_VARIABLE_YES) &&
+ use_softweave));
}
-static void
-escp2_set_color(const escp2_init_t *init)
+static int
+set_raw_ink_type(stp_vars_t *v)
{
- if (init->use_fast_360)
- stp_zprintf(init->v, "\033(K\002%c%c%c", 0, 0, 3);
- else if (escp2_has_cap(init->model, MODEL_GRAYMODE, MODEL_GRAYMODE_YES,
- init->v))
- stp_zprintf(init->v, "\033(K\002%c%c%c", 0, 0,
- (init->use_black_parameters ? 1 : 2));
-}
+ const inklist_t *inks = escp2_inklist(v);
+ int ninktypes = inks->n_inks;
+ int i;
+ const char *channel_name = stp_get_string_parameter(v, "RawChannels");
+ const channel_count_t *count;
+ if (!channel_name)
+ return 0;
+ count = get_channel_count_by_name(channel_name);
+ if (!count)
+ return 0;
-static void
-escp2_set_interleave(const escp2_init_t *init)
-{
- stp_zprintf(init->v, "\033(i\001%c%c", 0, init->use_interleave);
+ /*
+ * If we're using raw printer output, we dummy up the appropriate inkset.
+ */
+ for (i = 0; i < ninktypes; i++)
+ if (inks->inknames[i]->inkset == INKSET_EXTENDED &&
+ (inks->inknames[i]->channel_set->channel_count == count->count))
+ {
+ stp_dprintf(STP_DBG_INK, v, "Changing ink type from %s to %s\n",
+ stp_get_string_parameter(v, "InkType") ?
+ stp_get_string_parameter(v, "InkType") : "NULL",
+ inks->inknames[i]->name);
+ stp_set_string_parameter(v, "InkType", inks->inknames[i]->name);
+ stp_set_int_parameter(v, "STPIRawChannels", count->count);
+ return 1;
+ }
+ stp_eprintf
+ (v, _("This printer does not support raw printer output at depth %d\n"),
+ count->count);
+ return 0;
}
static void
-escp2_set_printhead_speed(const escp2_init_t *init)
+adjust_density_and_ink_type(stp_vars_t *v, stp_image_t *image)
{
- if (init->unidirectional)
+ escp2_privdata_t *pd = get_privdata(v);
+ const paper_adjustment_t *pt = pd->paper_adjustment;
+ double paper_density = .8;
+ int o_resid = compute_printed_resid(pd->res);
+
+ if (pt)
+ paper_density = pt->base_density;
+
+ if (!stp_check_float_parameter(v, "Density", STP_PARAMETER_DEFAULTED))
{
- stp_zprintf(init->v, "\033U%c", 1);
- if (init->xdpi > escp2_enhanced_resolution(init->model, init->v))
- stp_zprintf(init->v, "\033(s%c%c%c", 1, 0, 2);
+ stp_set_float_parameter_active(v, "Density", STP_PARAMETER_ACTIVE);
+ stp_set_float_parameter(v, "Density", 1.0);
}
- else
- stp_zprintf(init->v, "\033U%c", 0);
-}
-
-static void
-escp2_set_dot_size(const escp2_init_t *init)
-{
- /* Dot size */
- int drop_size = escp2_ink_type(init->model, init->resid, init->v);
- if (drop_size >= 0)
- stp_zprintf(init->v, "\033(e\002%c%c%c", 0, 0, drop_size);
-}
-static void
-escp2_set_page_height(const escp2_init_t *init)
-{
- int l = init->ydpi * init->page_true_height / 72;
- if (escp2_use_extended_commands(init->model, init->v, init->use_softweave))
- stp_zprintf(init->v, "\033(C\004%c%c%c%c%c", 0,
- l & 0xff, (l >> 8) & 0xff, (l >> 16) & 0xff, (l >> 24) & 0xff);
- else
- stp_zprintf(init->v, "\033(C\002%c%c%c", 0, l & 255, l >> 8);
-}
+ stp_scale_float_parameter
+ (v, "Density", paper_density * escp2_density(v, o_resid));
+ pd->drop_size = escp2_ink_type(v, o_resid);
+ pd->ink_resid = o_resid;
-static void
-escp2_set_margins(const escp2_init_t *init)
-{
- int left = init->ydpi * (init->page_true_height - init->page_bottom) / 72;
- int top = init->ydpi * (init->page_true_height - init->page_top) / 72;
-
- top += init->initial_vertical_offset;
- if (escp2_use_extended_commands(init->model, init->v, init->use_softweave))
+ /*
+ * If density is greater than 1, try to find the dot size from a lower
+ * resolution that will let us print. This allows use of high ink levels
+ * on special paper types that need a lot of ink.
+ */
+ if (stp_get_float_parameter(v, "Density") > 1.0)
{
- if (escp2_has_cap(init->model,MODEL_COMMAND,MODEL_COMMAND_2000,init->v)||
- escp2_has_cap(init->model,MODEL_COMMAND,MODEL_COMMAND_PRO,init->v))
- stp_zprintf(init->v, "\033(c\010%c%c%c%c%c%c%c%c%c", 0,
- top & 0xff, (top >> 8) & 0xff,
- (top >> 16) & 0xff, (top >> 24) & 0xff,
- left & 0xff, (left >> 8) & 0xff,
- (left >> 16) & 0xff, (left >> 24) & 0xff);
+ if (stp_check_int_parameter(v, "escp2_ink_type", STP_PARAMETER_ACTIVE) ||
+ stp_check_int_parameter(v, "escp2_density", STP_PARAMETER_ACTIVE) ||
+ stp_check_int_parameter(v, "escp2_bits", STP_PARAMETER_ACTIVE) ||
+ (stp_check_boolean_parameter(v, "AdjustDotsize",
+ STP_PARAMETER_ACTIVE) &&
+ ! stp_get_boolean_parameter(v, "AdjustDotsize")))
+ {
+ stp_set_float_parameter(v, "Density", 1.0);
+ }
else
- stp_zprintf(init->v, "\033(c\004%c%c%c%c%c", 0,
- top & 0xff, top >> 8, left & 0xff, left >> 8);
+ {
+ double density = stp_get_float_parameter(v, "Density");
+ int resid = o_resid;
+ int xresid = resid;
+ double xdensity = density;
+ while (density > 1.0 && resid >= RES_360)
+ {
+ int tresid = xresid - 1;
+ int bits_now = escp2_bits(v, resid);
+ double density_now = escp2_density(v, resid);
+ int bits_then = escp2_bits(v, tresid);
+ double density_then = escp2_density(v, tresid);
+ int drop_size_then = escp2_ink_type(v, tresid);
+
+ /*
+ * If we would change the number of bits in the ink type,
+ * don't try this. Some resolutions require using a certain
+ * number of bits!
+ */
+
+ if (bits_now != bits_then || density_then <= 0.0 ||
+ drop_size_then == -1)
+ break;
+ xdensity = density * density_then / density_now / 2;
+ xresid = tresid;
+
+ /*
+ * If we wouldn't get a significant improvement by changing the
+ * resolution, don't waste the effort trying.
+ */
+ if (density / xdensity > 1.001)
+ {
+ density = xdensity;
+ resid = tresid;
+ }
+ }
+ pd->drop_size = escp2_ink_type(v, resid);
+ pd->ink_resid = resid;
+ if (density > 1.0)
+ density = 1.0;
+ stp_set_float_parameter(v, "Density", density);
+ }
}
- else
- stp_zprintf(init->v, "\033(c\004%c%c%c%c%c", 0,
- top & 0xff, top >> 8, left & 0xff, left >> 8);
}
static void
-escp2_set_form_factor(const escp2_init_t *init)
+adjust_print_quality(stp_vars_t *v, stp_image_t *image)
{
- if (escp2_has_advanced_command_set(init->model, init->v))
- {
- int page_width = init->page_width * init->ydpi / 72;
- int page_height = init->page_true_height * init->ydpi / 72;
+ escp2_privdata_t *pd = get_privdata(v);
+ stp_curve_t *adjustment = NULL;
+ const paper_adjustment_t *pt;
+ double k_upper = 1.0;
+ double k_lower = 0;
+ double k_transition = 1.0;
- if (escp2_has_cap(init->model, MODEL_XZEROMARGIN, MODEL_XZEROMARGIN_YES,
- init->v))
- /* Make the page 2/10" wider (probably ignored by the printer) */
- page_width += 144 * init->xdpi / 720;
+ /*
+ * Compute the LUT. For now, it's 8 bit, but that may eventually
+ * sometimes change.
+ */
- stp_zprintf(init->v, "\033(S\010%c%c%c%c%c%c%c%c%c", 0,
- ((page_width >> 0) & 0xff), ((page_width >> 8) & 0xff),
- ((page_width >> 16) & 0xff), ((page_width >> 24) & 0xff),
- ((page_height >> 0) & 0xff), ((page_height >> 8) & 0xff),
- ((page_height >> 16) & 0xff), ((page_height >> 24) & 0xff));
+ pt = pd->paper_adjustment;
+ if (pt)
+ {
+ k_lower = pt->k_lower;
+ k_upper = pt->k_upper;
+ k_transition = pt->k_transition;
+ stp_set_default_float_parameter(v, "CyanDensity", 1.0);
+ stp_scale_float_parameter(v, "CyanDensity", pt->cyan);
+ stp_set_default_float_parameter(v, "MagentaDensity", 1.0);
+ stp_scale_float_parameter(v, "MagentaDensity", pt->magenta);
+ stp_set_default_float_parameter(v, "YellowDensity", 1.0);
+ stp_scale_float_parameter(v, "YellowDensity", pt->yellow);
+ stp_set_default_float_parameter(v, "BlackDensity", 1.0);
+ stp_scale_float_parameter(v, "BlackDensity", pt->black);
+ stp_set_default_float_parameter(v, "Saturation", 1.0);
+ stp_scale_float_parameter(v, "Saturation", pt->saturation);
+ stp_set_default_float_parameter(v, "Gamma", 1.0);
+ stp_scale_float_parameter(v, "Gamma", pt->gamma);
}
-}
-static void
-escp2_set_printhead_resolution(const escp2_init_t *init)
-{
- if (escp2_use_extended_commands(init->model, init->v, init->use_softweave))
- {
- int xres;
- int yres;
- int scale = escp2_resolution_scale(init->model, init->v);
- xres = scale / init->physical_xdpi;
+ if (!stp_check_float_parameter(v, "GCRLower", STP_PARAMETER_ACTIVE))
+ stp_set_default_float_parameter(v, "GCRLower", k_lower);
+ if (!stp_check_float_parameter(v, "GCRUpper", STP_PARAMETER_ACTIVE))
+ stp_set_default_float_parameter(v, "GCRUpper", k_upper);
+ if (!stp_check_float_parameter(v, "BlackTrans", STP_PARAMETER_ACTIVE))
+ stp_set_default_float_parameter(v, "BlackTrans", k_transition);
- if (escp2_has_cap(init->model, MODEL_COMMAND, MODEL_COMMAND_PRO,
- init->v) && !init->use_softweave)
- yres = scale / init->ydpi;
- else
- yres = (init->nozzle_separation * scale /
- escp2_base_separation(init->model, init->v));
- /* Magic resolution cookie */
- stp_zprintf(init->v, "\033(D%c%c%c%c%c%c", 4, 0,
- scale % 256, scale / 256, yres, xres);
+ if (!stp_check_curve_parameter(v, "HueMap", STP_PARAMETER_ACTIVE) &&
+ pt->hue_adjustment)
+ {
+ adjustment = stp_curve_create_from_string(pt->hue_adjustment);
+ stp_set_curve_parameter(v, "HueMap", adjustment);
+ stp_set_curve_parameter_active(v, "HueMap", STP_PARAMETER_ACTIVE);
+ stp_curve_destroy(adjustment);
+ }
+ if (!stp_check_curve_parameter(v, "SatMap", STP_PARAMETER_ACTIVE) &&
+ pt->sat_adjustment)
+ {
+ adjustment = stp_curve_create_from_string(pt->sat_adjustment);
+ stp_set_curve_parameter(v, "SatMap", adjustment);
+ stp_set_curve_parameter_active(v, "SatMap", STP_PARAMETER_ACTIVE);
+ stp_curve_destroy(adjustment);
+ }
+ if (!stp_check_curve_parameter(v, "LumMap", STP_PARAMETER_ACTIVE) &&
+ pt->lum_adjustment)
+ {
+ adjustment = stp_curve_create_from_string(pt->lum_adjustment);
+ stp_set_curve_parameter(v, "LumMap", adjustment);
+ stp_set_curve_parameter_active(v, "LumMap", STP_PARAMETER_ACTIVE);
+ stp_curve_destroy(adjustment);
}
}
-static void
-escp2_init_printer(const escp2_init_t *init)
-{
- escp2_reset_printer(init);
- escp2_set_remote_sequence(init);
- escp2_set_graphics_mode(init);
- escp2_set_resolution(init);
- escp2_set_color(init);
- escp2_set_interleave(init);
- escp2_set_printhead_speed(init);
- escp2_set_dot_size(init);
- escp2_set_printhead_resolution(init);
- escp2_set_page_height(init);
- escp2_set_margins(init);
- escp2_set_form_factor(init);
+static int
+count_channels(const escp2_inkname_t *inks, int use_aux_channels)
+{
+ int answer = 0;
+ int i;
+ for (i = 0; i < inks->channel_set->channel_count; i++)
+ if (inks->channel_set->channels[i])
+ answer += inks->channel_set->channels[i]->n_subchannels;
+ if (use_aux_channels)
+ for (i = 0; i < inks->channel_set->aux_channel_count; i++)
+ if (inks->channel_set->aux_channels[i])
+ answer += inks->channel_set->aux_channels[i]->n_subchannels;
+ return answer;
}
-static void
-escp2_deinit_printer(const escp2_init_t *init)
+static int
+compute_channel_count(const escp2_inkname_t *ink_type, int channel_limit,
+ int use_aux_channels)
{
- stp_puts("\033@", init->v); /* ESC/P2 reset */
- if (escp2_has_advanced_command_set(init->model, init->v) || init->input_slot)
+ int i;
+ int physical_channels = 0;
+ for (i = 0; i < channel_limit; i++)
{
- const init_sequence_t *deinit =
- escp2_postinit_remote_sequence(init->model, init->v);
- stp_zprintf(init->v, /* Enter remote mode */
- "\033(R\010%c%cREMOTE1", 0, 0);
- if (init->input_slot && init->input_slot->deinit_sequence.length)
- stp_zfwrite(init->input_slot->deinit_sequence.data,
- init->input_slot->deinit_sequence.length, 1, init->v);
- /* Load settings from NVRAM */
- stp_zprintf(init->v, "LD%c%c", 0, 0);
-
- /* Magic deinit sequence reported by Simone Falsini */
- if (deinit)
- stp_zfwrite(deinit->data, deinit->length, 1, init->v);
- /* Exit remote mode */
- stp_zprintf(init->v, "\033%c%c%c", 0, 0, 0);
-
+ const ink_channel_t *channel = ink_type->channel_set->channels[i];
+ if (channel)
+ physical_channels += channel->n_subchannels;
}
+ if (use_aux_channels)
+ for (i = 0; i < ink_type->channel_set->aux_channel_count; i++)
+ if (ink_type->channel_set->aux_channels[i])
+ physical_channels += ink_type->channel_set->aux_channels[i]->n_subchannels;
+ return physical_channels;
}
-static void
-adjust_print_quality(const escp2_init_t *init, void *dither,
- double **lum_adjustment, double **sat_adjustment,
- double **hue_adjustment)
+static double
+get_double_param(const stp_vars_t *v, const char *param)
{
- const paper_t *pt;
- const stp_vars_t nv = init->v;
- int i;
- const escp2_variable_inkset_t *inks;
- double k_upper, k_lower;
- double paper_k_upper;
- int ink_spread;
- /*
- * Compute the LUT. For now, it's 8 bit, but that may eventually
- * sometimes change.
- */
- k_lower = init->inkname->k_lower;
- k_upper = init->inkname->k_upper;
+ if (param && stp_check_float_parameter(v, param, STP_PARAMETER_ACTIVE))
+ return stp_get_float_parameter(v, param);
+ else
+ return 1.0;
+}
- pt = get_media_type(init->model, stp_get_media_type(nv), nv);
- if (pt)
+static void
+setup_inks(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ int i, j;
+ const escp2_dropsize_t *drops;
+ const escp2_inkname_t *ink_type = pd->inkname;
+ const paper_adjustment_t *paper = pd->paper_adjustment;
+ double multi_channel_limit = 1.0;
+ int gloss_channel = -1;
+ double gloss_scale = get_double_param(v, "Density");
+
+ drops = escp2_dropsizes(v, pd->ink_resid);
+ stp_init_debug_messages(v);
+ if (stp_check_float_parameter(v, "MultiChannelLimit",
+ STP_PARAMETER_DEFAULTED))
+ multi_channel_limit =
+ stp_get_float_parameter(v, "MultiChannelLimit");
+ for (i = 0; i < pd->logical_channels; i++)
{
- stp_set_density(nv, stp_get_density(nv) * pt->base_density);
- if (init->total_channels >= 5)
+ const ink_channel_t *channel = ink_type->channel_set->channels[i];
+ if (channel && channel->n_subchannels > 0)
{
- stp_set_cyan(nv, stp_get_cyan(nv) * pt->p_cyan);
- stp_set_magenta(nv, stp_get_magenta(nv) * pt->p_magenta);
- stp_set_yellow(nv, stp_get_yellow(nv) * pt->p_yellow);
- }
- else
- {
- stp_set_cyan(nv, stp_get_cyan(nv) * pt->cyan);
- stp_set_magenta(nv, stp_get_magenta(nv) * pt->magenta);
- stp_set_yellow(nv, stp_get_yellow(nv) * pt->yellow);
+ int hue_curve_found = 0;
+ const char *param = channel->subchannels[0].channel_density;
+ const shade_t *shades = escp2_shades(v, i);
+ double userval = get_double_param(v, param);
+ if (shades->n_shades < channel->n_subchannels)
+ {
+ stp_erprintf("Not enough shades!\n");
+ }
+ if (strcmp(param, "BlackDensity") == 0)
+ stp_channel_set_black_channel(v, i);
+ else if (strcmp(param, "GlossDensity") == 0)
+ {
+ gloss_scale *= get_double_param(v, param);
+ gloss_channel = i;
+ }
+ stp_dither_set_inks(v, i, 1.0, ink_darknesses[i % 8],
+ channel->n_subchannels, shades->shades,
+ drops->numdropsizes, drops->dropsizes);
+ for (j = 0; j < channel->n_subchannels; j++)
+ {
+ const char *subparam =
+ channel->subchannels[j].subchannel_scale;
+ double scale = userval * get_double_param(v, subparam);
+ scale *= get_double_param(v, "Density");
+ stp_channel_set_density_adjustment(v, i, j, scale);
+ if (paper)
+ stp_channel_set_cutoff_adjustment(v, i, j,
+ paper->subchannel_cutoff);
+ }
+ if (channel->hue_curve && channel->hue_curve->curve_name)
+ {
+ char *hue_curve_name;
+ const stp_curve_t *curve = NULL;
+ stp_asprintf(&hue_curve_name, "%sHueCurve",
+ channel->hue_curve->curve_name);
+ curve = stp_get_curve_parameter(v, hue_curve_name);
+ if (curve)
+ {
+ stp_channel_set_curve(v, i, curve);
+ hue_curve_found = 1;
+ }
+ stp_free(hue_curve_name);
+ }
+ if (channel->hue_curve && !hue_curve_found)
+ {
+ if (!channel->hue_curve->curve_impl)
+ channel->hue_curve->curve_impl =
+ stp_curve_create_from_string(channel->hue_curve->curve);
+ if (channel->hue_curve->curve_impl)
+ {
+ stp_curve_t *curve_tmp =
+ stp_curve_create_copy(channel->hue_curve->curve_impl);
+ (void) stp_curve_rescale(curve_tmp,
+ sqrt(1.0 / stp_get_float_parameter(v, "Gamma")),
+ STP_CURVE_COMPOSE_EXPONENTIATE,
+ STP_CURVE_BOUNDS_RESCALE);
+ stp_channel_set_curve(v, i, curve_tmp);
+ stp_curve_destroy(curve_tmp);
+ }
+ }
}
- stp_set_saturation(nv, stp_get_saturation(nv) * pt->saturation);
- stp_set_gamma(nv, stp_get_gamma(nv) * pt->gamma);
- k_lower *= pt->k_lower_scale;
- paper_k_upper = pt->k_upper;
- k_upper *= pt->k_upper;
- }
- else /* Can't find paper type? Assume plain */
- {
- stp_set_density(nv, stp_get_density(nv) * .8);
- k_lower *= .1;
- paper_k_upper = .5;
- k_upper *= .5;
- }
- stp_set_density(nv, stp_get_density(nv) *
- escp2_density(init->model, init->resid, nv));
- if (stp_get_density(nv) > 1.0)
- stp_set_density(nv, 1.0);
- if (init->output_type == OUTPUT_GRAY)
- stp_set_gamma(nv, stp_get_gamma(nv) / .8);
- stp_compute_lut(nv, 256);
-
- for (i = 0; i <= NCOLORS; i++)
- stp_dither_set_black_level(dither, i, 1.0);
- stp_dither_set_black_lower(dither, k_lower);
- stp_dither_set_black_upper(dither, k_upper);
-
- inks = escp2_inks(init->model, init->resid, init->inkname->inkset, nv);
- if (inks)
- for (i = 0; i < NCOLORS; i++)
- if ((*inks)[i])
- stp_dither_set_ranges(dither, i, (*inks)[i]->count, (*inks)[i]->range,
- (*inks)[i]->density * paper_k_upper *
- stp_get_density(nv));
-
- switch (stp_get_image_type(nv))
- {
- case IMAGE_LINE_ART:
- stp_dither_set_ink_spread(dither, 19);
- break;
- case IMAGE_SOLID_TONE:
- stp_dither_set_ink_spread(dither, 15);
- break;
- case IMAGE_CONTINUOUS:
- ink_spread = 13;
- if (init->ydpi > escp2_max_vres(init->model, nv))
- ink_spread++;
- if (init->bits > 1)
- ink_spread++;
- stp_dither_set_ink_spread(dither, ink_spread);
- break;
- }
- stp_dither_set_density(dither, stp_get_density(nv));
- if (init->inkname->lum_adjustment)
- {
- *lum_adjustment = stp_malloc(sizeof(double) * 49);
- for (i = 0; i < 49; i++)
+ }
+ if (pd->use_aux_channels)
+ {
+ int base_count = pd->logical_channels;
+ for (i = 0; i < ink_type->channel_set->aux_channel_count; i++)
{
- (*lum_adjustment)[i] = init->inkname->lum_adjustment[i];
- if (pt && pt->lum_adjustment)
- (*lum_adjustment)[i] *= pt->lum_adjustment[i];
+ const ink_channel_t *channel =
+ ink_type->channel_set->aux_channels[i];
+ if (channel && channel->n_subchannels > 0)
+ {
+ int ch = i + base_count;
+ const char *param = channel->subchannels[0].channel_density;
+ const shade_t *shades = escp2_shades(v, ch);
+ double userval = get_double_param(v, param);
+ if (shades->n_shades < channel->n_subchannels)
+ {
+ stp_erprintf("Not enough shades!\n");
+ }
+ if (strcmp(param, "GlossDensity") == 0)
+ {
+ gloss_scale *= get_double_param(v, param);
+ stp_channel_set_gloss_channel(v, ch);
+ stp_channel_set_gloss_limit(v, gloss_scale);
+ }
+ stp_dither_set_inks(v, ch, 1.0, ink_darknesses[ch % 8],
+ channel->n_subchannels, shades->shades,
+ drops->numdropsizes, drops->dropsizes);
+ for (j = 0; j < channel->n_subchannels; j++)
+ {
+ const char *subparam =
+ channel->subchannels[j].subchannel_scale;
+ double scale = userval * get_double_param(v, subparam);
+ scale *= get_double_param(v, "Density");
+ stp_channel_set_density_adjustment(v, ch, j, scale);
+ if (paper)
+ stp_channel_set_cutoff_adjustment(v, ch, j,
+ paper->subchannel_cutoff);
+ }
+ if (channel->hue_curve)
+ {
+ stp_curve_t *curve_tmp =
+ stp_curve_create_copy(channel->hue_curve->curve_impl);
+ (void) stp_curve_rescale(curve_tmp,
+ sqrt(1.0 / stp_get_float_parameter(v, "Gamma")),
+ STP_CURVE_COMPOSE_EXPONENTIATE,
+ STP_CURVE_BOUNDS_RESCALE);
+ stp_channel_set_curve(v, ch, curve_tmp);
+ stp_curve_destroy(curve_tmp);
+ }
+ }
}
}
- if (init->inkname->sat_adjustment)
+ stp_flush_debug_messages(v);
+}
+
+static void
+setup_head_offset(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ int i;
+ int channel_id = 0;
+ int channel_limit = pd->logical_channels;
+ const escp2_inkname_t *ink_type = pd->inkname;
+ if (pd->channels_in_use > pd->logical_channels)
+ channel_limit = pd->channels_in_use;
+ pd->head_offset = stp_zalloc(sizeof(int) * channel_limit);
+ for (i = 0; i < pd->logical_channels; i++)
{
- *sat_adjustment = stp_malloc(sizeof(double) * 49);
- for (i = 0; i < 49; i++)
+ const ink_channel_t *channel = ink_type->channel_set->channels[i];
+ if (channel)
{
- (*sat_adjustment)[i] = init->inkname->sat_adjustment[i];
- if (pt && pt->sat_adjustment)
- (*sat_adjustment)[i] *= pt->sat_adjustment[i];
+ int j;
+ for (j = 0; j < channel->n_subchannels; j++)
+ {
+ pd->head_offset[channel_id] =
+ channel->subchannels[j].head_offset;
+ channel_id++;
+ }
}
}
- if (init->inkname->hue_adjustment)
+ if (pd->use_aux_channels)
{
- *hue_adjustment = stp_malloc(sizeof(double) * 49);
- for (i = 0; i < 49; i++)
+ for (i = 0; i < ink_type->channel_set->aux_channel_count; i++)
{
- (*hue_adjustment)[i] = init->inkname->hue_adjustment[i];
- if (pt && pt->hue_adjustment)
- (*hue_adjustment)[i] += pt->hue_adjustment[i];
+ const ink_channel_t *channel = ink_type->channel_set->aux_channels[i];
+ if (channel)
+ {
+ int j;
+ for (j = 0; j < channel->n_subchannels; j++)
+ {
+ pd->head_offset[channel_id] =
+ channel->subchannels[j].head_offset;
+ channel_id++;
+ }
+ }
}
}
+ if (pd->physical_channels == 1)
+ pd->head_offset[0] = 0;
+ pd->max_head_offset = 0;
+ if (pd->physical_channels > 1)
+ for (i = 0; i < pd->channels_in_use; i++)
+ {
+ pd->head_offset[i] = pd->head_offset[i] * pd->res->vres /
+ escp2_base_separation(v);
+ if (pd->head_offset[i] > pd->max_head_offset)
+ pd->max_head_offset = pd->head_offset[i];
+ }
}
-static int
-count_channels(const escp2_inkname_t *inks)
+static void
+setup_misc(stp_vars_t *v)
{
- int answer = 0;
- int i;
- for (i = 0; i < NCOLORS; i++)
- if (inks->channels[i])
- answer += inks->channels[i]->n_subchannels;
- return answer;
+ escp2_privdata_t *pd = get_privdata(v);
+ pd->input_slot = get_input_slot(v);
+ pd->paper_type = get_media_type(v);
+ pd->paper_adjustment = get_media_adjustment(v);
+ pd->ink_group = escp2_inkgroup(v);
+ pd->init_sequence = escp2_preinit_sequence(v);
+ pd->deinit_sequence = escp2_postinit_remote_sequence(v);
+ pd->advanced_command_set = escp2_has_advanced_command_set(v);
+ pd->command_set = escp2_get_cap(v, MODEL_COMMAND);
+ pd->variable_dots = escp2_has_cap(v, MODEL_VARIABLE_DOT, MODEL_VARIABLE_YES);
+ pd->has_vacuum = escp2_has_cap(v, MODEL_VACUUM, MODEL_VACUUM_YES);
+ pd->has_graymode = escp2_has_cap(v, MODEL_GRAYMODE, MODEL_GRAYMODE_YES);
+ pd->base_separation = escp2_base_separation(v);
+ pd->resolution_scale = escp2_resolution_scale(v);
+ pd->use_extended_commands =
+ escp2_use_extended_commands(v, pd->res->softweave);
}
-static const escp2_inkname_t *
-get_inktype(const stp_printer_t printer, const stp_vars_t v, int model)
+static void
+allocate_channels(stp_vars_t *v, int line_length)
{
- const char *ink_type = stp_get_ink_type(v);
- const inklist_t *ink_list = escp2_inklist(model, v);
+ escp2_privdata_t *pd = get_privdata(v);
+ const escp2_inkname_t *ink_type = pd->inkname;
int i;
+ int channel_id = 0;
- for (i = 0; i < ink_list->n_inks; i++)
+ pd->cols = stp_zalloc(sizeof(unsigned char *) * pd->channels_in_use);
+ pd->channels =
+ stp_zalloc(sizeof(physical_subchannel_t *) * pd->channels_in_use);
+
+ for (i = 0; i < pd->logical_channels; i++)
{
- if (strcmp(ink_type, ink_list->inknames[i]->name) == 0)
- return ink_list->inknames[i];
+ const ink_channel_t *channel = ink_type->channel_set->channels[i];
+ if (channel)
+ {
+ int j;
+ for (j = 0; j < channel->n_subchannels; j++)
+ {
+ pd->cols[channel_id] = stp_zalloc(line_length);
+ pd->channels[channel_id] = &(channel->subchannels[j]);
+ stp_dither_add_channel(v, pd->cols[channel_id], i, j);
+ channel_id++;
+ }
+ }
}
- ink_type = escp2_default_parameters(printer, NULL, "InkType");
- for (i = 0; i < ink_list->n_inks; i++)
+ if (pd->use_aux_channels && ink_type->channel_set->aux_channel_count > 0)
{
- if (strcmp(ink_type, ink_list->inknames[i]->name) == 0)
- return ink_list->inknames[i];
+ for (i = 0; i < ink_type->channel_set->aux_channel_count; i++)
+ {
+ const ink_channel_t *channel = ink_type->channel_set->aux_channels[i];
+ int j;
+ for (j = 0; j < channel->n_subchannels; j++)
+ {
+ pd->cols[channel_id] = stp_zalloc(line_length);
+ pd->channels[channel_id] = &(channel->subchannels[j]);
+ stp_dither_add_channel(v, pd->cols[channel_id],
+ i + pd->logical_channels, j);
+ channel_id++;
+ }
+ }
}
- return NULL;
+ stp_set_string_parameter(v, "STPIOutputType", escp2_describe_output(v));
}
-static const physical_subchannel_t default_black_subchannels[] =
+static unsigned
+gcd(unsigned a, unsigned b)
{
- { 0, 0, 0 }
-};
+ unsigned tmp;
+ if (b > a)
+ {
+ tmp = a;
+ a = b;
+ b = tmp;
+ }
+ while (1)
+ {
+ tmp = a % b;
+ if (tmp == 0)
+ return b;
+ a = b;
+ b = tmp;
+ }
+}
-static const ink_channel_t default_black_channels =
+static unsigned
+lcm(unsigned a, unsigned b)
{
- default_black_subchannels, 1
-};
+ if (a == b)
+ return a;
+ else
+ return a * b / gcd(a, b);
+}
-static const escp2_inkname_t default_black_ink =
+static int
+adjusted_vertical_resolution(const res_t *res)
{
- NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL,
- {
- &default_black_channels, NULL, NULL, NULL
- }
-};
+ if (res->vres >= 720)
+ return res->vres;
+ else if (res->hres >= 720) /* Special case 720x360 */
+ return 720;
+ else if (res->vres % 90 == 0)
+ return res->vres;
+ else
+ return lcm(res->hres, res->vres);
+}
static int
-setup_ink_types(const escp2_inkname_t *ink_type,
- escp2_privdata_t *privdata,
- unsigned char **cols,
- int *head_offset,
- stp_dither_data_t *dt,
- int channel_limit,
- int line_length)
+adjusted_horizontal_resolution(const res_t *res)
{
- int i;
- int channels_in_use = 0;
- for (i = 0; i < channel_limit; i++)
- {
- const ink_channel_t *channel = ink_type->channels[i];
- if (channel)
- {
- int j;
- for (j = 0; j < channel->n_subchannels; j++)
- {
- cols[channels_in_use] = stp_zalloc(line_length);
- privdata->channels[channels_in_use] = &(channel->channels[j]);
- stp_add_channel(dt, cols[channels_in_use], i, j);
- head_offset[channels_in_use] = channel->channels[j].head_offset;
- channels_in_use++;
- }
- }
- }
- return channels_in_use;
+ if (res->vres % 90 == 0)
+ return res->hres;
+ else
+ return lcm(res->hres, res->vres);
}
-/*
- * 'escp2_print()' - Print an image to an EPSON printer.
- */
static void
-escp2_do_print(const stp_printer_t printer, /* I - Model */
- stp_image_t *image, /* I - Image to print */
- const stp_vars_t v,
- int print_op)
-{
- unsigned char *cmap = stp_get_cmap(v);
- int model = stp_printer_get_model(printer);
- int output_type = stp_get_output_type(v);
- int orientation = stp_get_orientation(v);
- int top = stp_get_top(v);
- int left = stp_get_left(v);
+setup_resolution(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ const res_t *res = escp2_find_resolution(v);
+ int resid = compute_resid(res);
- int i;
- int y; /* Looping vars */
-
- const res_t *res;
- int xdpi;
- int ydpi; /* Resolution */
- int physical_ydpi;
- int physical_xdpi;
- int undersample;
- int resid;
-
- int n; /* Output number */
- unsigned short *out; /* Output pixels (16-bit) */
- unsigned char *in; /* Input pixels */
- int page_left, /* Left margin of page */
- page_right, /* Right margin of page */
- page_top, /* Top of page */
- page_bottom, /* Bottom of page */
- page_width, /* Width of page */
- page_height, /* Height of page */
- page_true_height; /* True height of page */
- int out_width, /* Width of image on page */
- out_height, /* Height of image on page */
- out_bpp, /* Output bytes per pixel */
- length; /* Length of raster data */
- int errdiv, /* Error dividend */
- errmod, /* Error modulus */
- errval, /* Current error value */
- errline, /* Current raster line */
- errlast; /* Last raster line loaded */
- stp_convert_t colorfunc; /* Color conversion function... */
- int image_height,
- image_width,
- image_bpp;
-
- int nozzles;
- int nozzle_separation;
- int horizontal_passes;
-
- int bits;
- void * weave;
- void * dither;
- stp_vars_t nv = stp_allocate_copy(v);
- escp2_init_t init;
- int max_vres;
- unsigned char **cols;
- int *head_offset;
- int max_head_offset;
- double *lum_adjustment = NULL;
- double *sat_adjustment = NULL;
- double *hue_adjustment = NULL;
- escp2_privdata_t privdata;
- stp_dither_data_t *dt;
- const escp2_inkname_t *ink_type;
- int total_channels;
- int channels_in_use;
- int channel_limit;
- const char *input_slot = stp_get_media_source(v);
-
- if (!stp_get_verified(nv))
- {
- stp_eprintf(nv, "Print options not verified; cannot print.\n");
- return;
- }
+ int vertical = adjusted_vertical_resolution(res);
+ int horizontal = adjusted_horizontal_resolution(res);
- privdata.undersample = 1;
- privdata.denominator = 1;
- privdata.initial_vertical_offset = 0;
- privdata.printed_something = 0;
- privdata.last_color = -1;
- stp_set_driver_data(nv, &privdata);
+ pd->res = res;
+ pd->physical_xdpi = escp2_base_res(v, resid);
+ if (pd->physical_xdpi > pd->res->hres)
+ pd->physical_xdpi = pd->res->hres;
- ink_type = get_inktype(printer, nv, model);
- total_channels = count_channels(ink_type);
- if (output_type != OUTPUT_GRAY && output_type != OUTPUT_MONOCHROME &&
- !ink_type->is_color)
+ if (escp2_use_extended_commands(v, pd->res->softweave))
+ {
+ pd->unit_scale = escp2_max_hres(v);
+ pd->horizontal_units = horizontal;
+ pd->micro_units = horizontal;
+ }
+ else
{
- output_type = OUTPUT_GRAY;
- stp_set_output_type(nv, OUTPUT_GRAY);
+ pd->unit_scale = 3600;
+ if (pd->res->hres <= 720)
+ pd->micro_units = vertical;
+ else
+ pd->micro_units = horizontal;
+ pd->horizontal_units = vertical;
}
+ if (escp2_has_cap(v, MODEL_COMMAND, MODEL_COMMAND_1999) &&
+ escp2_has_cap(v, MODEL_VARIABLE_DOT, MODEL_VARIABLE_NO))
+ pd->micro_units = 1440;
+ pd->vertical_units = vertical;
+ pd->page_management_units = vertical;
+ pd->printing_resolution = escp2_base_res(v, resid);
+}
- /*
- * Figure out the output resolution...
- */
- res = escp2_find_resolution(model, nv, stp_get_resolution(nv));
- if (res->softweave)
- max_vres = escp2_max_vres(model, nv);
+static void
+setup_softweave_parameters(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ pd->horizontal_passes = pd->res->printed_hres / pd->physical_xdpi;
+ if (pd->physical_channels == 1 &&
+ (pd->res->vres >=
+ (escp2_base_separation(v) / escp2_black_nozzle_separation(v))) &&
+ (escp2_max_black_resolution(v) < 0 ||
+ pd->res->vres <= escp2_max_black_resolution(v)) &&
+ escp2_black_nozzles(v))
+ pd->use_black_parameters = 1;
+ else
+ pd->use_black_parameters = 0;
+ if (pd->use_fast_360)
+ {
+ pd->nozzles = escp2_fast_nozzles(v);
+ pd->nozzle_separation = escp2_fast_nozzle_separation(v);
+ pd->min_nozzles = escp2_min_fast_nozzles(v);
+ }
+ else if (pd->use_black_parameters)
+ {
+ pd->nozzles = escp2_black_nozzles(v);
+ pd->nozzle_separation = escp2_black_nozzle_separation(v);
+ pd->min_nozzles = escp2_min_black_nozzles(v);
+ }
else
- max_vres = escp2_base_resolution(model, nv);
- xdpi = res->hres;
- ydpi = res->vres;
- resid = res->resid;
- undersample = res->vertical_undersample;
- privdata.undersample = res->vertical_undersample;
- privdata.denominator = res->vertical_denominator;
-
- physical_xdpi = escp2_base_res(model, resid, nv);
- if (physical_xdpi > xdpi)
- physical_xdpi = xdpi;
-
- physical_ydpi = ydpi;
- if (ydpi > max_vres)
- physical_ydpi = max_vres;
-
- bits = escp2_bits(model, resid, nv);
-
- /*
- * Compute the output size...
- */
- image->init(image);
- image_height = image->height(image);
- image_width = image->width(image);
-
- escp2_imageable_area(printer, nv, &page_left, &page_right,
- &page_bottom, &page_top);
-
- stp_compute_page_parameters(page_right, page_left, page_top, page_bottom,
- stp_get_scaling(nv), image_width, image_height,
- image, &orientation, &page_width, &page_height,
- &out_width, &out_height, &left, &top);
+ {
+ pd->nozzles = escp2_nozzles(v);
+ pd->nozzle_separation = escp2_nozzle_separation(v);
+ pd->min_nozzles = escp2_min_nozzles(v);
+ }
+}
+static void
+setup_printer_weave_parameters(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ pd->horizontal_passes = 1;
+ pd->nozzles = 1;
+ pd->nozzle_separation = 1;
+ pd->min_nozzles = 1;
+ pd->use_black_parameters = 0;
+}
+
+static void
+setup_head_parameters(stp_vars_t *v)
+{
+ escp2_privdata_t *pd = get_privdata(v);
/*
- * Recompute the image height and width. If the image has been
- * rotated, these will change from previously.
+ * Set up the output channels
*/
- image_height = image->height(image);
- image_width = image->width(image);
- stp_default_media_size(printer, nv, &n, &page_true_height);
-
- /*
- * Convert image size to printer resolution...
- */
-
- out_width = xdpi * out_width / 72;
- out_height = ydpi * out_height / 72;
- length = (out_width + 7) / 8;
-
- left = physical_ydpi * undersample * left / 72 / res->vertical_denominator;
+ if (strcmp(stp_get_string_parameter(v, "PrintingMode"), "BW") == 0)
+ pd->logical_channels = 1;
+ else
+ pd->logical_channels = pd->inkname->channel_set->channel_count;
- /*
- * Adjust for zero-margin printing...
- */
+ pd->physical_channels =
+ compute_channel_count(pd->inkname, pd->logical_channels,
+ pd->use_aux_channels);
+ if (pd->physical_channels == 0)
+ {
+ pd->inkname = &stpi_escp2_default_black_inkset;
+ pd->physical_channels =
+ compute_channel_count(pd->inkname, pd->logical_channels,
+ pd->use_aux_channels);
+ }
- if (escp2_has_cap(model, MODEL_XZEROMARGIN, MODEL_XZEROMARGIN_YES, nv))
+ pd->use_printer_weave = use_printer_weave(v);
+ if (pd->use_printer_weave)
{
- /*
- * In zero-margin mode, the origin is about 3/20" to the left of the
- * paper's left edge.
- */
- left += escp2_zero_margin_offset(model, nv) * physical_ydpi *
- undersample / max_vres / res->vertical_denominator;
+ pd->printer_weave = get_printer_weave(v);
+ if (pd->res->softweave && pd->printer_weave && pd->printer_weave->value == 0)
+ pd->printer_weave = NULL;
}
- /*
- * Set up the output channels
- */
- cols = stp_zalloc(sizeof(unsigned char *) * total_channels);
- privdata.channels =
- stp_zalloc(sizeof(physical_subchannel_t *) * total_channels);
- head_offset = stp_zalloc(sizeof(int) * total_channels);
-
- memset(head_offset, 0, sizeof(head_offset));
- channel_limit = NCOLORS;
- if (output_type == OUTPUT_GRAY || output_type == OUTPUT_MONOCHROME)
- channel_limit = 1;
-
- dt = stp_create_dither_data();
-
- channels_in_use = setup_ink_types(ink_type, &privdata, cols, head_offset,
- dt, channel_limit, length * bits);
- if (channels_in_use == 0)
- {
- ink_type = &default_black_ink;
- channels_in_use = setup_ink_types(ink_type, &privdata, cols, head_offset,
- dt, channel_limit, length * bits);
- }
- if (channels_in_use == 1)
- head_offset[0] = 0;
- if (escp2_has_cap(model, MODEL_FAST_360, MODEL_FAST_360_YES, nv) &&
- (ink_type->inkset == INKSET_CMYK || channels_in_use == 1) &&
- xdpi == 360 && ydpi == 360)
- init.use_fast_360 = 1;
+ if (escp2_has_cap(v, MODEL_FAST_360, MODEL_FAST_360_YES) &&
+ (pd->inkname->inkset == INKSET_CMYK || pd->physical_channels == 1) &&
+ pd->res->hres == pd->physical_xdpi && pd->res->vres == 360)
+ pd->use_fast_360 = 1;
else
- init.use_fast_360 = 0;
+ pd->use_fast_360 = 0;
/*
* Set up the printer-specific parameters (weaving)
*/
- if (res->softweave)
+ if (pd->use_printer_weave)
+ setup_printer_weave_parameters(v);
+ else
+ setup_softweave_parameters(v);
+ pd->separation_rows = escp2_separation_rows(v);
+ pd->pseudo_separation_rows = escp2_pseudo_separation_rows(v);
+ pd->extra_720dpi_separation = escp2_extra_720dpi_separation(v);
+
+ if (pd->horizontal_passes == 0)
+ pd->horizontal_passes = 1;
+
+ setup_head_offset(v);
+
+ if (strcmp(stp_get_string_parameter(v, "PrintingMode"), "BW") == 0 &&
+ pd->physical_channels == 1)
{
- horizontal_passes = xdpi / physical_xdpi;
- if ((output_type == OUTPUT_GRAY || output_type == OUTPUT_MONOCHROME) &&
- channels_in_use == 1 &&
- (ydpi >= (escp2_base_separation(model, nv) /
- escp2_black_nozzle_separation(model, nv))) &&
- (escp2_max_black_resolution(model, nv) < 0 ||
- ydpi <= escp2_max_black_resolution(model, nv)) &&
- escp2_black_nozzles(model, nv))
- init.use_black_parameters = 1;
+ if (pd->use_black_parameters)
+ pd->initial_vertical_offset =
+ escp2_black_initial_vertical_offset(v) * pd->page_management_units /
+ escp2_base_separation(v);
else
- init.use_black_parameters = 0;
- if (init.use_fast_360)
+ pd->initial_vertical_offset = pd->head_offset[0] +
+ (escp2_initial_vertical_offset(v) *
+ pd->page_management_units / escp2_base_separation(v));
+ }
+ else
+ pd->initial_vertical_offset =
+ escp2_initial_vertical_offset(v) * pd->page_management_units /
+ escp2_base_separation(v);
+
+ pd->printing_initial_vertical_offset = 0;
+ pd->bitwidth = escp2_bits(v, compute_printed_resid(pd->res));
+}
+
+static void
+setup_page(stp_vars_t *v)
+{
+ int n;
+ escp2_privdata_t *pd = get_privdata(v);
+ const input_slot_t *input_slot = get_input_slot(v);
+ int extra_left = 0;
+ int extra_top = 0;
+ const char *inner_radius_name = stp_get_string_parameter(v, "CDInnerRadius");
+ int hub_size = 43; /* 43 mm standard CD hub */
+
+ if (inner_radius_name && strcmp(inner_radius_name, "Small") == 0)
+ hub_size = 16; /* 15 mm prints to the hole - play it
+ safe and print 16 mm */
+
+ stp_default_media_size(v, &n, &(pd->page_true_height));
+ internal_imageable_area(v, 0, &pd->page_left, &pd->page_right,
+ &pd->page_bottom, &pd->page_top);
+
+ if (input_slot && input_slot->is_cd && escp2_cd_x_offset(v) > 0)
+ {
+ int left_center = escp2_cd_x_offset(v) +
+ stp_get_dimension_parameter(v, "CDXAdjustment");
+ int top_center = escp2_cd_y_offset(v) +
+ stp_get_dimension_parameter(v, "CDYAdjustment");
+ extra_top = top_center - (pd->page_bottom / 2);
+ extra_left = left_center - (pd->page_right / 2);
+ pd->cd_inner_radius = hub_size * pd->micro_units * 10 / 254 / 2;
+ pd->cd_outer_radius = pd->page_right * pd->micro_units / 72 / 2;
+ pd->cd_x_offset =
+ ((pd->page_right / 2) - stp_get_left(v)) * pd->micro_units / 72;
+ pd->cd_y_offset =
+ ((pd->page_bottom / 2) - stp_get_top(v)) * pd->micro_units / 72;
+ if (escp2_cd_page_height(v))
{
- nozzles = escp2_fast_nozzles(model, nv);
- nozzle_separation = escp2_fast_nozzle_separation(model, nv);
- privdata.min_nozzles = escp2_min_fast_nozzles(model, nv);
+ pd->page_right = escp2_cd_page_width(v);
+ pd->page_bottom = escp2_cd_page_height(v);
+ pd->page_true_height = escp2_cd_page_height(v);
}
- else if (init.use_black_parameters)
+ }
+
+ pd->page_right += extra_left + 1;
+ pd->page_width = pd->page_right - pd->page_left;
+ pd->image_left = stp_get_left(v) - pd->page_left + extra_left;
+ pd->image_width = stp_get_width(v);
+ pd->image_scaled_width = pd->image_width * pd->res->hres / 72;
+ pd->image_printed_width = pd->image_width * pd->res->printed_hres / 72;
+ pd->image_left_position = pd->image_left * pd->micro_units / 72;
+
+
+ pd->page_bottom += extra_top + 1;
+ pd->page_true_height += extra_top + 1;
+ pd->page_height = pd->page_bottom - pd->page_top;
+ pd->image_top = stp_get_top(v) - pd->page_top + extra_top;
+ pd->image_height = stp_get_height(v);
+ pd->image_scaled_height = pd->image_height * pd->res->vres / 72;
+ pd->image_printed_height = pd->image_height * pd->res->printed_vres / 72;
+
+ if (input_slot && input_slot->roll_feed_cut_flags)
+ {
+ pd->page_true_height += 4; /* Empirically-determined constants */
+ pd->page_top += 2;
+ pd->page_bottom += 2;
+ pd->image_top += 2;
+ pd->page_height += 2;
+ }
+}
+
+static void
+set_mask(unsigned char *cd_mask, int x_center, int scaled_x_where,
+ int limit, int expansion, int invert)
+{
+ int clear_val = invert ? 255 : 0;
+ int set_val = invert ? 0 : 255;
+ int bytesize = 8 / expansion;
+ int byteextra = bytesize - 1;
+ int first_x_on = x_center - scaled_x_where;
+ int first_x_off = x_center + scaled_x_where;
+ if (first_x_on < 0)
+ first_x_on = 0;
+ if (first_x_on > limit)
+ first_x_on = limit;
+ if (first_x_off < 0)
+ first_x_off = 0;
+ if (first_x_off > limit)
+ first_x_off = limit;
+ first_x_on += byteextra;
+ if (first_x_off > (first_x_on - byteextra))
+ {
+ int first_x_on_byte = first_x_on / bytesize;
+ int first_x_on_mod = expansion * (byteextra - (first_x_on % bytesize));
+ int first_x_on_extra = ((1 << first_x_on_mod) - 1) ^ clear_val;
+ int first_x_off_byte = first_x_off / bytesize;
+ int first_x_off_mod = expansion * (byteextra - (first_x_off % bytesize));
+ int first_x_off_extra = ((1 << 8) - (1 << first_x_off_mod)) ^ clear_val;
+ if (first_x_off_byte < first_x_on_byte)
{
- nozzles = escp2_black_nozzles(model, nv);
- nozzle_separation = escp2_black_nozzle_separation(model, nv);
- privdata.min_nozzles = escp2_min_black_nozzles(model, nv);
+ /* This can happen, if 6 or fewer points are turned on */
+ cd_mask[first_x_on_byte] = first_x_on_extra & first_x_off_extra;
}
else
{
- nozzles = escp2_nozzles(model, nv);
- nozzle_separation = escp2_nozzle_separation(model, nv);
- privdata.min_nozzles = escp2_min_nozzles(model, nv);
+ if (first_x_on_extra != clear_val)
+ cd_mask[first_x_on_byte - 1] = first_x_on_extra;
+ if (first_x_off_byte > first_x_on_byte)
+ memset(cd_mask + first_x_on_byte, set_val,
+ first_x_off_byte - first_x_on_byte);
+ if (first_x_off_extra != clear_val)
+ cd_mask[first_x_off_byte] = first_x_off_extra;
}
- init.nozzle_separation = nozzle_separation;
- nozzle_separation =
- nozzle_separation * ydpi / escp2_base_separation(model, nv);
}
- else
+}
+
+static int
+escp2_print_data(stp_vars_t *v, stp_image_t *image)
+{
+ escp2_privdata_t *pd = get_privdata(v);
+ int errdiv = stp_image_height(image) / pd->image_printed_height;
+ int errmod = stp_image_height(image) % pd->image_printed_height;
+ int errval = 0;
+ int errlast = -1;
+ int errline = 0;
+ int y;
+ double outer_r_sq = 0;
+ double inner_r_sq = 0;
+ int x_center = pd->cd_x_offset * pd->res->printed_hres / pd->micro_units;
+ unsigned char *cd_mask = NULL;
+ if (pd->cd_outer_radius > 0)
{
- horizontal_passes = xdpi / escp2_base_resolution(model, nv);
- nozzles = 1;
- privdata.min_nozzles = 1;
- nozzle_separation = 1;
- init.nozzle_separation = nozzle_separation;
- init.use_black_parameters = 0;
+ cd_mask = stp_malloc(1 + (pd->image_printed_width + 7) / 8);
+ outer_r_sq = (double) pd->cd_outer_radius * (double) pd->cd_outer_radius;
+ inner_r_sq = (double) pd->cd_inner_radius * (double) pd->cd_inner_radius;
}
- init.nozzles = nozzles;
- if (horizontal_passes == 0)
- horizontal_passes = 1;
+ for (y = 0; y < pd->image_printed_height; y ++)
+ {
+ int duplicate_line = 1;
+ unsigned zero_mask;
- max_head_offset = 0;
- if (channels_in_use > 1)
- for (i = 0; i < total_channels; i++)
- {
- head_offset[i] = head_offset[i] * ydpi/escp2_base_separation(model,nv);
- if (head_offset[i] > max_head_offset)
- max_head_offset = head_offset[i];
- }
+ if (errline != errlast)
+ {
+ errlast = errline;
+ duplicate_line = 0;
+ if (stp_color_get_row(v, image, errline, &zero_mask))
+ return 2;
+ }
- /*
- * Send ESC/P2 initialization commands...
- */
- init.model = model;
- init.output_type = output_type;
- if (init.output_type == OUTPUT_MONOCHROME)
- init.output_type = OUTPUT_GRAY;
- init.ydpi = ydpi * undersample;
- if (init.ydpi > escp2_max_vres(init.model, init.v))
- init.ydpi = escp2_max_vres(init.model, init.v);
- init.xdpi = xdpi;
- init.physical_xdpi = physical_xdpi;
- init.use_softweave = res->softweave;
- init.use_interleave = res->interleave;
- init.page_true_height = page_true_height;
- init.page_width = page_width;
- init.page_top = page_top;
- if (init.output_type == OUTPUT_GRAY && channels_in_use == 1)
- {
- if (init.use_black_parameters)
- init.initial_vertical_offset =
- escp2_black_initial_vertical_offset(init.model, init.v) * init.ydpi /
- escp2_base_separation(model, nv);
- else
- init.initial_vertical_offset =
- head_offset[0] +
- (escp2_initial_vertical_offset(init.model, init.v) *
- init.ydpi / escp2_base_separation(model, nv));
- }
- else
- init.initial_vertical_offset =
- escp2_initial_vertical_offset(init.model, init.v) * init.ydpi /
- escp2_base_separation(model, nv);
-
- /* adjust bottom margin for a 480 like head configuration */
- init.page_bottom = page_bottom - max_head_offset * 72 / ydpi;
- if ((max_head_offset * 72 % ydpi) != 0)
- init.page_bottom -= 1;
- if (init.page_bottom < 0)
- init.page_bottom = 0;
-
- init.horizontal_passes = horizontal_passes;
- init.vertical_passes = res->vertical_passes;
- init.vertical_oversample = res->vertical_oversample;
- init.unidirectional = res->unidirectional;
- init.resid = resid;
- init.bits = bits;
- init.paper_type = stp_get_media_type(nv);
- init.media_source = stp_get_media_source(nv);
- init.v = nv;
- init.inkname = ink_type;
- init.total_channels = total_channels;
-
- init.input_slot = NULL;
- if (input_slot && strlen(input_slot) > 0)
- {
- const input_slot_list_t *slots = escp2_input_slots(model, v);
- for (i = 0; i < slots->n_input_slots; i++)
+ if (cd_mask)
{
- if (slots->slots[i].name &&
- strcmp(input_slot, slots->slots[i].name) == 0)
+ int y_distance_from_center =
+ pd->cd_outer_radius - (y * pd->micro_units / pd->res->printed_vres);
+ if (y_distance_from_center < 0)
+ y_distance_from_center = -y_distance_from_center;
+ memset(cd_mask, 0, (pd->image_printed_width + 7) / 8);
+ if (y_distance_from_center < pd->cd_outer_radius)
{
- init.input_slot = &(slots->slots[i]);
- break;
+ double y_sq = (double) y_distance_from_center *
+ (double) y_distance_from_center;
+ int x_where = sqrt(outer_r_sq - y_sq) + .5;
+ int scaled_x_where = x_where * pd->res->printed_hres / pd->micro_units;
+ set_mask(cd_mask, x_center, scaled_x_where,
+ pd->image_printed_width, 1, 0);
+ if (y_distance_from_center < pd->cd_inner_radius)
+ {
+ x_where = sqrt(inner_r_sq - y_sq) + .5;
+ scaled_x_where = x_where * pd->res->printed_hres / pd->micro_units;
+ set_mask(cd_mask, x_center, scaled_x_where,
+ pd->image_printed_width, 1, 1);
+ }
}
}
+
+ stp_dither(v, y, duplicate_line, zero_mask, cd_mask);
+
+ stp_write_weave(v, pd->cols);
+ errval += errmod;
+ errline += errdiv;
+ if (errval >= pd->image_printed_height)
+ {
+ errval -= pd->image_printed_height;
+ errline ++;
+ }
}
- if (init.input_slot && init.input_slot->roll_feed_cut_flags)
+ if (cd_mask)
+ stp_free(cd_mask);
+ return 1;
+}
+
+static int
+escp2_print_page(stp_vars_t *v, stp_image_t *image)
+{
+ int status;
+ int i;
+ escp2_privdata_t *pd = get_privdata(v);
+ int out_channels; /* Output bytes per pixel */
+ int line_width = (pd->image_printed_width + 7) / 8 * pd->bitwidth;
+ int weave_pattern = STP_WEAVE_ZIGZAG;
+ if (stp_check_string_parameter(v, "Weave", STP_PARAMETER_ACTIVE))
{
- init.page_true_height += 4;
- init.page_top += 2;
- init.page_bottom += 2;
- top += 2;
- page_height += 2;
+ const char *weave = stp_get_string_parameter(v, "Weave");
+ if (strcmp(weave, "Alternate") == 0)
+ weave_pattern = STP_WEAVE_ZIGZAG;
+ else if (strcmp(weave, "Ascending") == 0)
+ weave_pattern = STP_WEAVE_ASCENDING;
+ else if (strcmp(weave, "Descending") == 0)
+ weave_pattern = STP_WEAVE_DESCENDING;
+ else if (strcmp(weave, "Ascending2X") == 0)
+ weave_pattern = STP_WEAVE_ASCENDING_2X;
+ else if (strcmp(weave, "Staggered") == 0)
+ weave_pattern = STP_WEAVE_STAGGERED;
}
- if (print_op & OP_JOB_START)
- escp2_init_printer(&init);
- if (print_op & OP_JOB_PRINT)
- {
+ stp_initialize_weave
+ (v,
+ pd->nozzles,
+ pd->nozzle_separation * pd->res->vres / escp2_base_separation(v),
+ pd->horizontal_passes,
+ pd->res->vertical_passes,
+ 1,
+ pd->channels_in_use,
+ pd->bitwidth,
+ pd->image_printed_width,
+ pd->image_printed_height,
+ pd->image_top * pd->res->vres / 72,
+ (pd->page_height + escp2_extra_feed(v)) * pd->res->vres / 72,
+ pd->head_offset,
+ weave_pattern,
+ stpi_escp2_flush_pass,
+ FILLFUNC,
+ PACKFUNC,
+ COMPUTEFUNC);
+
+ stp_dither_init(v, image, pd->image_printed_width, pd->res->printed_hres,
+ pd->res->printed_vres);
+ allocate_channels(v, line_width);
+ adjust_print_quality(v, image);
+ out_channels = stp_color_init(v, image, 65536);
+
+/* stpi_dither_set_expansion(v, pd->res->hres / pd->res->printed_hres); */
+
+ setup_inks(v);
+
+ status = escp2_print_data(v, image);
+ stp_image_conclude(image);
+ stp_flush_all(v);
+ stpi_escp2_terminate_page(v);
- /*
- * Allocate memory for the raster data...
- */
-
- weave = stp_initialize_weave(nozzles, nozzle_separation,
- horizontal_passes, res->vertical_passes,
- res->vertical_oversample, total_channels,
- bits,
- out_width, out_height,
- top * physical_ydpi / 72,
- (page_height * physical_ydpi / 72 +
- escp2_extra_feed(model, nv) *
- physical_ydpi /
- escp2_base_resolution(model, nv)),
- 1, head_offset, nv, flush_pass,
- FILLFUNC, PACKFUNC, COMPUTEFUNC);
-
- stp_set_output_color_model(nv, COLOR_MODEL_CMY);
- image_bpp = image->bpp(image);
- colorfunc = stp_choose_colorfunc(output_type, image_bpp, cmap,
- &out_bpp, nv);
-
- in = stp_zalloc(image_width * image_bpp);
- out = stp_zalloc(image_width * out_bpp * 2);
-
- errdiv = image_height / out_height;
- errmod = image_height % out_height;
- errval = 0;
- errlast = -1;
- errline = 0;
-
- if (xdpi > ydpi)
- dither = stp_init_dither(image_width, out_width, 1, xdpi / ydpi, nv);
- else
- dither = stp_init_dither(image_width, out_width, ydpi / xdpi, 1, nv);
+ /*
+ * Cleanup...
+ */
+ for (i = 0; i < pd->channels_in_use; i++)
+ if (pd->cols[i])
+ stp_free(pd->cols[i]);
+ stp_free(pd->cols);
+ stp_free(pd->channels);
+ return status;
+}
- adjust_print_quality(&init, dither,
- &lum_adjustment, &sat_adjustment, &hue_adjustment);
+/*
+ * 'escp2_print()' - Print an image to an EPSON printer.
+ */
+static int
+escp2_do_print(stp_vars_t *v, stp_image_t *image, int print_op)
+{
+ int status = 1;
- /*
- * Let the user know what we're doing...
- */
+ escp2_privdata_t *pd;
- image->progress_init(image);
+ if (!stp_verify(v))
+ {
+ stp_eprintf(v, _("Print options not verified; cannot print.\n"));
+ return 0;
+ }
+ stp_image_init(image);
- QUANT(0);
- for (y = 0; y < out_height; y ++)
- {
- int duplicate_line = 1;
- int zero_mask;
- if ((y & 63) == 0)
- image->note_progress(image, y, out_height);
+ if (strcmp(stp_get_string_parameter(v, "InputImageType"), "Raw") == 0 &&
+ !set_raw_ink_type(v))
+ return 0;
- if (errline != errlast)
- {
- errlast = errline;
- duplicate_line = 0;
- if (image->get_row(image, in, errline) != STP_IMAGE_OK)
- break;
- (*colorfunc)(nv, in, out, &zero_mask, image_width, image_bpp,
- cmap, hue_adjustment, lum_adjustment,
- sat_adjustment);
- }
- QUANT(1);
+ pd = (escp2_privdata_t *) stp_zalloc(sizeof(escp2_privdata_t));
+ pd->printed_something = 0;
+ pd->last_color = -1;
+ pd->last_pass_offset = 0;
+ pd->last_pass = -1;
+ pd->send_zero_pass_advance =
+ escp2_has_cap(v, MODEL_SEND_ZERO_ADVANCE, MODEL_SEND_ZERO_ADVANCE_YES);
+ stp_allocate_component_data(v, "Driver", NULL, NULL, pd);
+
+ pd->inkname = get_inktype(v);
+ if (stp_check_boolean_parameter(v, "UseGloss", STP_PARAMETER_ACTIVE) &&
+ stp_get_boolean_parameter(v, "UseGloss"))
+ pd->use_aux_channels = 1;
+ else
+ pd->use_aux_channels = 0;
+ pd->channels_in_use = count_channels(pd->inkname, pd->use_aux_channels);
- stp_dither(out, y, dither, dt, duplicate_line, zero_mask);
- QUANT(2);
+ setup_resolution(v);
+ setup_head_parameters(v);
+ setup_page(v);
+ setup_misc(v);
- stp_write_weave(weave, length, ydpi, model, out_width, left,
- xdpi, physical_xdpi, cols);
- QUANT(3);
- errval += errmod;
- errline += errdiv;
- if (errval >= out_height)
- {
- errval -= out_height;
- errline ++;
- }
- QUANT(4);
- }
- image->progress_conclude(image);
- stp_flush_all(weave, model, out_width, left, ydpi, xdpi, physical_xdpi);
- QUANT(5);
-
- /*
- * Cleanup...
- */
- stp_destroy_weave(weave);
- stp_free_dither(dither);
- stp_free_lut(nv);
- stp_free(in);
- stp_free(out);
- if (hue_adjustment)
- stp_free(hue_adjustment);
- if (sat_adjustment)
- stp_free(sat_adjustment);
- if (lum_adjustment)
- stp_free(lum_adjustment);
- if (!privdata.printed_something)
- stp_putc('\n', nv);
- stp_puts("\014", nv); /* Eject page */
- }
+ adjust_density_and_ink_type(v, image);
+ if (print_op & OP_JOB_START)
+ stpi_escp2_init_printer(v);
+ if (print_op & OP_JOB_PRINT)
+ status = escp2_print_page(v, image);
if (print_op & OP_JOB_END)
- escp2_deinit_printer(&init);
-
- stp_free_dither_data(dt);
- for (i = 0; i < total_channels; i++)
- if (cols[i])
- stp_free((unsigned char *) cols[i]);
- stp_free(cols);
- stp_free(head_offset);
- stp_free(privdata.channels);
-
-#ifdef QUANTIFY
- print_timers(nv);
-#endif
- stp_free_vars(nv);
+ stpi_escp2_deinit_printer(v);
+
+ stp_free(pd->head_offset);
+ stp_free(pd);
+
+ return status;
}
-static void
-escp2_print(const stp_printer_t printer, /* I - Model */
- stp_image_t *image, /* I - Image to print */
- const stp_vars_t v)
+static int
+escp2_print(const stp_vars_t *v, stp_image_t *image)
{
+ stp_vars_t *nv = stp_vars_create_copy(v);
int op = OP_JOB_PRINT;
- if (stp_get_job_mode(v) == STP_JOB_MODE_PAGE)
+ int status;
+ if (!stp_get_string_parameter(v, "JobMode") ||
+ strcmp(stp_get_string_parameter(v, "JobMode"), "Page") == 0)
op = OP_JOB_START | OP_JOB_PRINT | OP_JOB_END;
- escp2_do_print(printer, image, v, op);
+ stp_prune_inactive_options(nv);
+ status = escp2_do_print(nv, image, op);
+ stp_vars_destroy(nv);
+ return status;
}
static int
-escp2_job_start(const stp_printer_t printer, /* I - Model */
- stp_image_t *image, /* I - Image to print */
- const stp_vars_t v)
+escp2_job_start(const stp_vars_t *v, stp_image_t *image)
{
- if (!stp_get_verified(v))
- return 0;
- if (stp_get_job_mode(v) != STP_JOB_MODE_JOB)
- return 0;
- escp2_do_print(printer, image, v, OP_JOB_START);
- return 1;
+ stp_vars_t *nv = stp_vars_create_copy(v);
+ int status;
+ stp_prune_inactive_options(nv);
+ status = escp2_do_print(nv, image, OP_JOB_START);
+ stp_vars_destroy(nv);
+ return status;
}
static int
-escp2_job_end(const stp_printer_t printer, /* I - Model */
- stp_image_t *image, /* I - Image to print */
- const stp_vars_t v)
+escp2_job_end(const stp_vars_t *v, stp_image_t *image)
{
- if (!stp_get_verified(v))
- return 0;
- if (stp_get_job_mode(v) != STP_JOB_MODE_JOB)
- return 0;
- escp2_do_print(printer, image, v, OP_JOB_END);
- return 1;
+ stp_vars_t *nv = stp_vars_create_copy(v);
+ int status;
+ stp_prune_inactive_options(nv);
+ status = escp2_do_print(nv, image, OP_JOB_END);
+ stp_vars_destroy(nv);
+ return status;
}
-const stp_printfuncs_t stp_escp2_printfuncs =
+static const stp_printfuncs_t print_escp2_printfuncs =
{
+ escp2_list_parameters,
escp2_parameters,
stp_default_media_size,
escp2_imageable_area,
escp2_limit,
escp2_print,
- escp2_default_parameters,
escp2_describe_resolution,
+ escp2_describe_output,
stp_verify_printer_params,
escp2_job_start,
escp2_job_end
};
-static void
-set_vertical_position(stp_softweave_t *sw, stp_pass_t *pass, int model,
- const stp_vars_t v)
-{
- escp2_privdata_t *pd = (escp2_privdata_t *) stp_get_driver_data(v);
- int advance = pass->logicalpassstart - sw->last_pass_offset -
- (escp2_separation_rows(model, v) - 1);
- advance *= pd->undersample;
- if (pass->logicalpassstart > sw->last_pass_offset ||
- pd->initial_vertical_offset != 0)
- {
- int a0, a1, a2, a3;
- advance += pd->initial_vertical_offset;
- pd->initial_vertical_offset = 0;
- a0 = advance & 0xff;
- a1 = (advance >> 8) & 0xff;
- a2 = (advance >> 16) & 0xff;
- a3 = (advance >> 24) & 0xff;
- if (escp2_use_extended_commands(model, v, sw->jets > 1))
- stp_zprintf(v, "\033(v%c%c%c%c%c%c", 4, 0, a0, a1, a2, a3);
- else
- stp_zprintf(v, "\033(v%c%c%c%c", 2, 0, a0, a1);
- sw->last_pass_offset = pass->logicalpassstart;
- }
-}
+static stp_family_t print_escp2_module_data =
+ {
+ &print_escp2_printfuncs,
+ NULL
+ };
-static void
-set_color(stp_softweave_t *sw, stp_pass_t *pass, int model, const stp_vars_t v,
- int color)
+
+static int
+print_escp2_module_init(void)
{
- escp2_privdata_t *pd = (escp2_privdata_t *) stp_get_driver_data(v);
- if (pd->last_color != color &&
- ! escp2_use_extended_commands(model, v, sw->jets > 1))
- {
- int ncolor = pd->channels[color]->color;
- int density = pd->channels[color]->density;
- if (density >= 0)
- stp_zprintf(v, "\033(r%c%c%c%c", 2, 0, density, ncolor);
- else
- stp_zprintf(v, "\033r%c", ncolor);
- pd->last_color = color;
- }
+ hue_curve_bounds = stp_curve_create_from_string
+ ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+ "<sequence count=\"2\" lower-bound=\"0\" upper-bound=\"1\">\n"
+ "1 1\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>");
+ return stp_family_register(print_escp2_module_data.printer_list);
}
-static void
-set_horizontal_position(stp_softweave_t *sw, stp_pass_t *pass, int model,
- const stp_vars_t v, int hoffset, int ydpi,
- int xdpi, int vertical_subpass)
-{
- int microoffset = vertical_subpass & (sw->horizontal_weave - 1);
- escp2_privdata_t *pd = (escp2_privdata_t *) stp_get_driver_data(v);
- if (!escp2_has_advanced_command_set(model, v) &&
- (xdpi <= escp2_base_resolution(model, v) ||
- escp2_max_hres(model, v) < 1440))
- {
- int pos = (hoffset + microoffset);
- if (pos > 0)
- stp_zprintf(v, "\033\\%c%c", pos & 255, pos >> 8);
- }
- else if (escp2_has_cap(model, MODEL_COMMAND, MODEL_COMMAND_PRO,v) ||
- (escp2_has_advanced_command_set(model, v) &&
- escp2_has_cap(model, MODEL_VARIABLE_DOT, MODEL_VARIABLE_YES, v)))
- {
- int pos = ((hoffset * xdpi * pd->denominator / ydpi) + microoffset);
- if (pos > 0)
- stp_zprintf(v, "\033($%c%c%c%c%c%c", 4, 0,
- pos & 255, (pos >> 8) & 255,
- (pos >> 16) & 255, (pos >> 24) & 255);
- }
- else
- {
- int pos = ((hoffset * escp2_max_hres(model, v) * pd->denominator / ydpi)+
- microoffset);
- if (pos > 0)
- stp_zprintf(v, "\033(\\%c%c%c%c%c%c", 4, 0, 160, 5,
- pos & 255, pos >> 8);
- }
-}
-static void
-send_print_command(stp_softweave_t *sw, stp_pass_t *pass, int model, int color,
- int lwidth, const stp_vars_t v, int hoffset, int ydpi,
- int xdpi, int physical_xdpi, int nlines)
-{
- if (!escp2_has_cap(model, MODEL_COMMAND, MODEL_COMMAND_PRO,v) &&
- sw->jets == 1 && sw->bitwidth == 1)
- {
- int ygap = 3600 / ydpi;
- int xgap = 3600 / xdpi;
- if (ydpi == 720 && escp2_extra_720dpi_separation(model, v))
- ygap *= escp2_extra_720dpi_separation(model, v);
- stp_zprintf(v, "\033.%c%c%c%c%c%c", COMPRESSION, ygap, xgap,
- 1, lwidth & 255, (lwidth >> 8) & 255);
- }
- else if (!escp2_has_cap(model, MODEL_COMMAND, MODEL_COMMAND_PRO,v) &&
- escp2_has_cap(model, MODEL_VARIABLE_DOT, MODEL_VARIABLE_NO, v))
- {
- int ygap = 3600 / ydpi;
- int xgap = 3600 / physical_xdpi;
- if (escp2_extra_720dpi_separation(model, v))
- ygap *= escp2_extra_720dpi_separation(model, v);
- else if (escp2_pseudo_separation_rows(model, v) > 0)
- ygap *= escp2_pseudo_separation_rows(model, v);
- else
- ygap *= escp2_separation_rows(model, v);
- stp_zprintf(v, "\033.%c%c%c%c%c%c", COMPRESSION, ygap, xgap,
- nlines, lwidth & 255, (lwidth >> 8) & 255);
- }
- else
- {
- escp2_privdata_t *pd = (escp2_privdata_t *) stp_get_driver_data(v);
- int ncolor = pd->channels[color]->color;
- int nwidth = sw->bitwidth * ((lwidth + 7) / 8);
- if (pd->channels[color]->density >= 0)
- ncolor |= (pd->channels[color]->density << 4);
- stp_zprintf(v, "\033i%c%c%c%c%c%c%c", ncolor, COMPRESSION,
- sw->bitwidth, nwidth & 255, (nwidth >> 8) & 255,
- nlines & 255, (nlines >> 8) & 255);
- }
+static int
+print_escp2_module_exit(void)
+{
+ return stp_family_unregister(print_escp2_module_data.printer_list);
}
-static void
-send_extra_data(stp_softweave_t *sw, stp_vars_t v, int extralines, int lwidth)
-{
- int k, l;
- int bytes_to_fill = sw->bitwidth * ((lwidth + 7) / 8);
- int full_blocks = bytes_to_fill / 128;
- int leftover = bytes_to_fill % 128;
- int total_bytes = extralines * (full_blocks + 1) * 2;
- unsigned char *buf = stp_malloc(total_bytes);
- total_bytes = 0;
- for (k = 0; k < extralines; k++)
- {
- for (l = 0; l < full_blocks; l++)
- {
- buf[total_bytes++] = 129;
- buf[total_bytes++] = 0;
- }
- if (leftover == 1)
- {
- buf[total_bytes++] = 1;
- buf[total_bytes++] = 0;
- }
- else if (leftover > 0)
- {
- buf[total_bytes++] = 257 - leftover;
- buf[total_bytes++] = 0;
- }
- }
- stp_zfwrite((const char *) buf, total_bytes, 1, v);
- stp_free(buf);
-}
-static void
-flush_pass(stp_softweave_t *sw, int passno, int model, int width,
- int hoffset, int ydpi, int xdpi, int physical_xdpi,
- int vertical_subpass)
-{
- int j;
- const stp_vars_t v = (sw->v);
- escp2_privdata_t *pd = (escp2_privdata_t *) stp_get_driver_data(v);
- stp_lineoff_t *lineoffs = stp_get_lineoffsets_by_pass(sw, passno);
- stp_lineactive_t *lineactive = stp_get_lineactive_by_pass(sw, passno);
- const stp_linebufs_t *bufs = stp_get_linebases_by_pass(sw, passno);
- stp_pass_t *pass = stp_get_pass_by_pass(sw, passno);
- stp_linecount_t *linecount = stp_get_linecount_by_pass(sw, passno);
- int lwidth = (width + (sw->horizontal_weave - 1)) / sw->horizontal_weave;
-
- ydpi *= pd->undersample;
-
- if (ydpi > escp2_max_vres(model, v))
- ydpi = escp2_max_vres(model, v);
- for (j = 0; j < sw->ncolors; j++)
- {
- if (lineactive[0].v[j] > 0)
- {
- int nlines = linecount[0].v[j];
- int minlines = pd->min_nozzles;
- int extralines = 0;
- if (nlines < minlines)
- {
- extralines = minlines - nlines;
- nlines = minlines;
- }
- set_vertical_position(sw, pass, model, v);
- set_color(sw, pass, model, v, j);
- set_horizontal_position(sw, pass, model, v, hoffset, ydpi, xdpi,
- vertical_subpass);
- send_print_command(sw, pass, model, j, lwidth, v, hoffset, ydpi,
- xdpi, physical_xdpi, nlines);
-
- /*
- * Send the data
- */
- stp_zfwrite((const char *)bufs[0].v[j], lineoffs[0].v[j], 1, v);
- if (extralines)
- send_extra_data(sw, v, extralines, lwidth);
- stp_putc('\r', v);
- pd->printed_something = 1;
- }
- lineoffs[0].v[j] = 0;
- linecount[0].v[j] = 0;
- }
+/* Module header */
+#define stp_module_version print_escp2_LTX_stp_module_version
+#define stp_module_data print_escp2_LTX_stp_module_data
+
+stp_module_version_t stp_module_version = {0, 0};
+
+stp_module_t stp_module_data =
+ {
+ "escp2",
+ VERSION,
+ "Epson family driver",
+ STP_MODULE_CLASS_FAMILY,
+ NULL,
+ print_escp2_module_init,
+ print_escp2_module_exit,
+ (void *) &print_escp2_module_data
+ };
- sw->last_pass = pass->pass;
- pass->pass = -1;
-}
diff --git a/src/main/print-escp2.h b/src/main/print-escp2.h
index f289f95..2e0df38 100644
--- a/src/main/print-escp2.h
+++ b/src/main/print-escp2.h
@@ -1,5 +1,5 @@
/*
- * "$Id: print-escp2.h,v 1.7.4.9 2003/12/02 01:51:00 rlk Exp $"
+ * "$Id: print-escp2.h,v 1.94 2005/06/14 02:49:10 rlk Exp $"
*
* Print plug-in EPSON ESC/P2 driver for the GIMP.
*
@@ -21,6 +21,20 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
+#ifndef GUTENPRINT_INTERNAL_ESCP2_H
+#define GUTENPRINT_INTERNAL_ESCP2_H
+
+/*
+ * Maximum number of channels in a printer. If Epson comes out with an
+ * 8-head printer, this needs to be increased.
+ */
+#define PHYSICAL_CHANNEL_LIMIT 8
+#define MAX_DROP_SIZES 3
+
+#define XCOLOR_R (STP_NCOLORS + 0)
+#define XCOLOR_B (STP_NCOLORS + 1)
+#define XCOLOR_GLOSS (STP_NCOLORS + 2)
+
/*
* Printer capabilities.
*
@@ -31,6 +45,222 @@ typedef unsigned long model_cap_t;
typedef unsigned long model_featureset_t;
+#define RES_LOW 0
+#define RES_360 1
+#define RES_720_360 2
+#define RES_720 3
+#define RES_1440_720 4
+#define RES_2880_720 5
+#define RES_2880_1440 6
+#define RES_2880_2880 7
+#define RES_N 8
+
+/*
+ ****************************************************************
+ * *
+ * DROP SIZES *
+ * *
+ ****************************************************************
+ */
+
+typedef struct
+{
+ const char *listname;
+ short numdropsizes;
+ const double dropsizes[MAX_DROP_SIZES];
+} escp2_dropsize_t;
+
+typedef const escp2_dropsize_t *const escp2_drop_list_t[RES_N];
+
+/*
+ ****************************************************************
+ * *
+ * PAPERS *
+ * *
+ ****************************************************************
+ */
+
+typedef struct
+{
+ const char *name;
+ float base_density;
+ float subchannel_cutoff;
+ float k_transition;
+ float k_lower;
+ float k_upper;
+ float cyan;
+ float magenta;
+ float yellow;
+ float black;
+ float saturation;
+ float gamma;
+ const char *hue_adjustment;
+ const char *lum_adjustment;
+ const char *sat_adjustment;
+} paper_adjustment_t;
+
+typedef struct
+{
+ const char *listname;
+ short paper_count;
+ const paper_adjustment_t *papers;
+} paper_adjustment_list_t;
+
+typedef enum
+{
+ PAPER_PLAIN = 0x01,
+ PAPER_GOOD = 0x02,
+ PAPER_PHOTO = 0x04,
+ PAPER_PREMIUM_PHOTO = 0x08,
+ PAPER_TRANSPARENCY = 0x10
+} paper_class_t;
+
+typedef struct
+{
+ const char *name;
+ const char *text;
+ paper_class_t paper_class;
+ short paper_feed_sequence;
+ short platen_gap;
+ short feed_adjustment;
+ short vacuum_intensity;
+ short paper_thickness;
+ const char *preferred_ink_type;
+ const char *preferred_ink_set;
+} paper_t;
+
+typedef struct
+{
+ const char *listname;
+ short paper_count;
+ const paper_t *papers;
+} paperlist_t;
+
+
+/*
+ ****************************************************************
+ * *
+ * RESOLUTIONS *
+ * *
+ ****************************************************************
+ */
+
+typedef struct
+{
+ const char *name;
+ const char *text;
+ short hres;
+ short vres;
+ short printed_hres;
+ short printed_vres;
+ short softweave;
+ short printer_weave;
+ short vertical_passes;
+} res_t;
+
+
+/*
+ ****************************************************************
+ * *
+ * INKS *
+ * *
+ ****************************************************************
+ */
+
+typedef struct
+{
+ short color;
+ short subchannel;
+ short head_offset;
+ const char *channel_density;
+ const char *subchannel_scale;
+} physical_subchannel_t;
+
+typedef struct
+{
+ const char *curve_name;
+ const char *curve;
+ stp_curve_t *curve_impl;
+} hue_curve_t;
+
+typedef struct
+{
+ const char *listname;
+ const physical_subchannel_t *subchannels;
+ short n_subchannels;
+ hue_curve_t *hue_curve;
+} ink_channel_t;
+
+typedef enum
+{
+ INKSET_CMYK = 0,
+ INKSET_CcMmYK = 1,
+ INKSET_CcMmYyK = 2,
+ INKSET_CcMmYKk = 3,
+ INKSET_QUADTONE = 4,
+ INKSET_CMYKRB = 5,
+ INKSET_EXTENDED = 6
+} inkset_id_t;
+
+typedef struct
+{
+ const char *name;
+ const ink_channel_t *const *channels;
+ const ink_channel_t *const *aux_channels;
+ short channel_count;
+ short aux_channel_count;
+} channel_set_t;
+
+typedef struct
+{
+ const char *name;
+ const char *text;
+ inkset_id_t inkset;
+ const channel_set_t *channel_set;
+} escp2_inkname_t;
+
+typedef struct
+{
+ int n_shades;
+ const double shades[PHYSICAL_CHANNEL_LIMIT];
+} shade_t;
+
+typedef shade_t shade_set_t[PHYSICAL_CHANNEL_LIMIT];
+
+typedef struct
+{
+ const char *name;
+ const char *text;
+ const escp2_inkname_t *const *inknames;
+ const paperlist_t *papers;
+ const paper_adjustment_list_t *paper_adjustments;
+ const shade_set_t *shades;
+ short n_inks;
+} inklist_t;
+
+typedef struct
+{
+ const char *listname;
+ const inklist_t *const *inklists;
+ short n_inklists;
+} inkgroup_t;
+
+typedef struct
+{
+ const char *listname;
+ int count;
+ const char *const *names;
+} channel_name_t;
+
+
+/*
+ ****************************************************************
+ * *
+ * MISCELLANEOUS *
+ * *
+ ****************************************************************
+ */
+
/*
* For each printer, we can select from a variety of dot sizes.
* For single dot size printers, the available sizes are usually 0,
@@ -48,105 +278,85 @@ typedef unsigned long model_featureset_t;
* An entry of -1 in a slot means that this resolution is not available.
*/
-typedef int escp2_dot_size_t[13];
+typedef short escp2_dot_size_t[RES_N];
/*
* Choose the number of bits to use at each resolution.
*/
-typedef int escp2_bits_t[13];
+typedef short escp2_bits_t[RES_N];
/*
* Choose the base resolution to use at each resolution.
*/
-typedef int escp2_base_resolutions_t[13];
+typedef short escp2_base_resolutions_t[RES_N];
/*
* Specify the base density for each available resolution.
* This obviously depends upon the dot size.
*/
-typedef double escp2_densities_t[13];
+typedef float escp2_densities_t[RES_N];
-/*
- * Definition of the multi-level inks available to a given printer.
- * Each printer may use a different kind of ink droplet for variable
- * and single drop size for each supported horizontal resolution and
- * type of ink (4 or 6 color).
- *
- * Recall that 6 color ink is treated as simply another kind of
- * multi-level ink, but the driver offers the user a choice of 4 and
- * 6 color ink, so we need to define appropriate inksets for both
- * kinds of ink.
- *
- * Stuff like the MIS 4 and 6 "color" monochrome inks doesn't fit into
- * this model very nicely, so we'll either have to special case it
- * or find some way of handling it in here.
- */
+#define ROLL_FEED_CUT_ALL (1)
+#define ROLL_FEED_CUT_LAST (2)
+#define ROLL_FEED_DONT_EJECT (4)
-#define RES_120_M 0
-#define RES_120 1
-#define RES_180_M 2
-#define RES_180 3
-#define RES_360_M 4
-#define RES_360 5
-#define RES_720_360_M 6
-#define RES_720_360 7
-#define RES_720_M 8
-#define RES_720 9
-#define RES_1440_720_M 10
-#define RES_1440_720 11
-#define RES_1440_1440_M 12
-#define RES_1440_1440 13
-#define RES_2880_720_M 14
-#define RES_2880_720 15
-#define RES_2880_1440_M 16
-#define RES_2880_1440 17
-#define RES_N 18
-
-typedef struct escp2_variable_ink
+typedef struct
{
- const stp_simple_dither_range_t *range;
- int count;
- double density;
-} escp2_variable_ink_t;
-
-typedef const escp2_variable_ink_t *escp2_variable_inkset_t[NCOLORS];
+ const char *name;
+ const char *text;
+ short is_cd;
+ short is_roll_feed;
+ unsigned roll_feed_cut_flags;
+ const stp_raw_t init_sequence;
+ const stp_raw_t deinit_sequence;
+} input_slot_t;
-typedef const escp2_variable_inkset_t *escp2_variable_inklist_t[][RES_N / 2];
+typedef struct
+{
+ const input_slot_t *slots;
+ size_t n_input_slots;
+} input_slot_list_t;
typedef struct
{
const char *name;
const char *text;
- int paper_feed_sequence;
- int platen_gap;
- double base_density;
- double k_lower_scale;
- double k_upper;
- double cyan;
- double magenta;
- double yellow;
- double p_cyan;
- double p_magenta;
- double p_yellow;
- double saturation;
- double gamma;
- int feed_adjustment;
- int vacuum_intensity;
- int paper_thickness;
- const double *hue_adjustment;
- const double *lum_adjustment;
- const double *sat_adjustment;
-} paper_t;
+ short min_hres;
+ short min_vres;
+ short max_hres;
+ short max_vres;
+ short desired_hres;
+ short desired_vres;
+} quality_t;
typedef struct
{
- int paper_count;
- const paper_t *papers;
-} paperlist_t;
+ const quality_t *qualities;
+ size_t n_quals;
+} quality_list_t;
+typedef enum
+{
+ AUTO_MODE_QUALITY,
+ AUTO_MODE_MANUAL
+} auto_mode_t;
+
+typedef struct
+{
+ const char *name;
+ const char *text;
+ short value;
+} printer_weave_t;
+
+typedef struct
+{
+ const char *name;
+ size_t n_printer_weaves;
+ const printer_weave_t *printer_weaves;
+} printer_weave_list_t;
#define MODEL_COMMAND_MASK 0xful /* What general command set does */
#define MODEL_COMMAND_1998 0x0ul
@@ -158,160 +368,90 @@ typedef struct
#define MODEL_XZEROMARGIN_NO 0x00ul /* zero margin mode? */
#define MODEL_XZEROMARGIN_YES 0x10ul /* (print to edge of the paper) */
-#define MODEL_ROLLFEED_MASK 0x20ul /* Does this printer support */
-#define MODEL_ROLLFEED_NO 0x00ul /* a roll feed? */
-#define MODEL_ROLLFEED_YES 0x20ul
-
-#define MODEL_VARIABLE_DOT_MASK 0x40ul /* Does this printer support var */
+#define MODEL_VARIABLE_DOT_MASK 0x20ul /* Does this printer support var */
#define MODEL_VARIABLE_NO 0x00ul /* dot size printing? The newest */
-#define MODEL_VARIABLE_YES 0x40ul /* printers support multiple modes */
+#define MODEL_VARIABLE_YES 0x20ul /* printers support multiple modes */
-#define MODEL_GRAYMODE_MASK 0x80ul /* Does this printer support special */
+#define MODEL_GRAYMODE_MASK 0x40ul /* Does this printer support special */
#define MODEL_GRAYMODE_NO 0x00ul /* fast black printing? */
-#define MODEL_GRAYMODE_YES 0x80ul
+#define MODEL_GRAYMODE_YES 0x40ul
-#define MODEL_VACUUM_MASK 0x100ul
-#define MODEL_VACUUM_NO 0x000ul
-#define MODEL_VACUUM_YES 0x100ul
+#define MODEL_VACUUM_MASK 0x80ul
+#define MODEL_VACUUM_NO 0x00ul
+#define MODEL_VACUUM_YES 0x80ul
-#define MODEL_FAST_360_MASK 0x200ul
+#define MODEL_FAST_360_MASK 0x100ul
#define MODEL_FAST_360_NO 0x000ul
-#define MODEL_FAST_360_YES 0x200ul
+#define MODEL_FAST_360_YES 0x100ul
+
+#define MODEL_SEND_ZERO_ADVANCE_MASK 0x200ul
+#define MODEL_SEND_ZERO_ADVANCE_NO 0x000ul
+#define MODEL_SEND_ZERO_ADVANCE_YES 0x200ul
+
+#define MODEL_SUPPORTS_INK_CHANGE_MASK 0x400ul
+#define MODEL_SUPPORTS_INK_CHANGE_NO 0x000ul
+#define MODEL_SUPPORTS_INK_CHANGE_YES 0x400ul
+
+#define MODEL_PACKET_MODE_MASK 0x800ul
+#define MODEL_PACKET_MODE_NO 0x000ul
+#define MODEL_PACKET_MODE_YES 0x800ul
typedef enum
{
MODEL_COMMAND,
MODEL_XZEROMARGIN,
- MODEL_ROLLFEED,
MODEL_VARIABLE_DOT,
MODEL_GRAYMODE,
MODEL_VACUUM,
MODEL_FAST_360,
+ MODEL_SEND_ZERO_ADVANCE,
+ MODEL_SUPPORTS_INK_CHANGE,
+ MODEL_PACKET_MODE,
MODEL_LIMIT
} escp2_model_option_t;
-typedef struct
-{
- const char *attr_name;
- int shift;
- int bits;
-} escp2_printer_attr_t;
-
-typedef struct
-{
- const char *name;
- const char *text;
- int hres;
- int vres;
- int external_hres;
- int external_vres;
- int softweave;
- int interleave;
- int vertical_passes;
- int vertical_oversample;
- int unidirectional;
- int vertical_undersample;
- int vertical_denominator;
- int resid;
-} res_t;
-
-typedef struct
-{
- int color;
- int density;
- int head_offset;
-} physical_subchannel_t;
-
-typedef struct
-{
- const physical_subchannel_t *channels;
- int n_subchannels;
-} ink_channel_t;
-
-typedef enum
-{
- INKSET_CMYK = 0,
- INKSET_CcMmYK = 1,
- INKSET_CcMmYyK = 2,
- INKSET_CcMmYKk = 3,
- INKSET_PIEZO_QUADTONE = 4
-} inkset_id_t;
-
-typedef struct
-{
- const char *name;
- const char *text;
- int is_color;
- inkset_id_t inkset;
- double k_lower;
- double k_upper;
- const double *lum_adjustment;
- const double *hue_adjustment;
- const double *sat_adjustment;
- const ink_channel_t *channels[NCOLORS];
-} escp2_inkname_t;
-
-typedef struct
-{
- const escp2_inkname_t *const *inknames;
- size_t n_inks;
-} inklist_t;
-
-#define ROLL_FEED_CUT_ALL (1)
-#define ROLL_FEED_CUT_LAST (2)
-
-typedef struct
-{
- const char *data;
- size_t length;
-} init_sequence_t;
-
-typedef struct
-{
- const char *name;
- const char *text;
- int is_roll_feed;
- unsigned roll_feed_cut_flags;
- init_sequence_t init_sequence;
- init_sequence_t deinit_sequence;
-} input_slot_t;
-
-typedef struct
-{
- const input_slot_t *slots;
- size_t n_input_slots;
-} input_slot_list_t;
-
typedef struct escp2_printer
{
model_cap_t flags; /* Bitmask of flags, see above */
/*****************************************************************************/
/* Basic head configuration */
- int nozzles; /* Number of nozzles per color */
- int min_nozzles; /* Minimum number of nozzles per color */
- int nozzle_separation; /* Separation between rows, in 1/360" */
- int black_nozzles; /* Number of black nozzles (may be extra) */
- int min_black_nozzles; /* # of black nozzles (may be extra) */
- int black_nozzle_separation; /* Separation between rows */
- int fast_nozzles; /* Number of fast nozzles */
- int min_fast_nozzles; /* # of fast nozzles (may be extra) */
- int fast_nozzle_separation; /* Separation between rows */
+ short nozzles; /* Number of nozzles per color */
+ short min_nozzles; /* Minimum number of nozzles per color */
+ short nozzle_separation; /* Separation between rows, in 1/360" */
+ short black_nozzles; /* Number of black nozzles (may be extra) */
+ short min_black_nozzles; /* # of black nozzles (may be extra) */
+ short black_nozzle_separation; /* Separation between rows */
+ short fast_nozzles; /* Number of fast nozzles */
+ short min_fast_nozzles; /* # of fast nozzles (may be extra) */
+ short fast_nozzle_separation; /* Separation between rows */
+ short physical_channels; /* Number of ink channels */
/*****************************************************************************/
/* Print head resolution */
- int base_separation; /* Basic unit of row separation */
- int base_resolution; /* Base hardware line spacing (above this */
- /* always requires multiple passes) */
- int enhanced_resolution;/* Above this we use the */
- /* enhanced_xres rather than xres */
- int resolution_scale; /* Scaling factor for ESC(D command */
- int max_black_resolution; /* Above this resolution, we */
+ short base_separation; /* Basic unit of row separation */
+ short resolution_scale; /* Scaling factor for ESC(D command */
+ short max_black_resolution; /* Above this resolution, we */
/* must use color parameters */
/* rather than (faster) black */
/* only parameters*/
- int max_hres;
- int max_vres;
- int min_hres;
- int min_vres;
+ short max_hres;
+ short max_vres;
+ short min_hres;
+ short min_vres;
+ /* Miscellaneous printer-specific data */
+ short extra_feed; /* Extra distance the paper can be spaced */
+ /* beyond the bottom margin, in 1/360". */
+ /* (maximum useful value is */
+ /* nozzles * nozzle_separation) */
+ short separation_rows; /* Some printers require funky spacing */
+ /* arguments in softweave mode. */
+ short pseudo_separation_rows;/* Some printers require funky */
+ /* spacing arguments in printer_weave mode */
+
+ short zero_margin_offset; /* Offset to use to achieve */
+ /* zero-margin printing */
+ short initial_vertical_offset;
+ short black_initial_vertical_offset;
+ short extra_720dpi_separation;
/*****************************************************************************/
/* Paper size limits */
int max_paper_width; /* Maximum paper width, in points */
@@ -322,58 +462,247 @@ typedef struct escp2_printer
/* Borders */
/* SHEET FED: */
/* Softweave: */
- int left_margin; /* Left margin, points */
- int right_margin; /* Right margin, points */
- int top_margin; /* Absolute top margin, points */
- int bottom_margin; /* Absolute bottom margin, points */
- /* Printer interleave: */
- int m_left_margin; /* Left margin, points */
- int m_right_margin; /* Right margin, points */
- int m_top_margin; /* Absolute top margin, points */
- int m_bottom_margin; /* Absolute bottom margin, points */
+ short left_margin; /* Left margin, points */
+ short right_margin; /* Right margin, points */
+ short top_margin; /* Absolute top margin, points */
+ short bottom_margin; /* Absolute bottom margin, points */
+ /* Printer weave: */
+ short m_left_margin; /* Left margin, points */
+ short m_right_margin; /* Right margin, points */
+ short m_top_margin; /* Absolute top margin, points */
+ short m_bottom_margin; /* Absolute bottom margin, points */
/* ROLL FEED: */
/* Softweave: */
- int roll_left_margin; /* Left margin, points */
- int roll_right_margin; /* Right margin, points */
- int roll_top_margin; /* Absolute top margin, points */
- int roll_bottom_margin; /* Absolute bottom margin, points */
- /* Printer interleave: */
- int m_roll_left_margin; /* Left margin, points */
- int m_roll_right_margin; /* Right margin, points */
- int m_roll_top_margin; /* Absolute top margin, points */
- int m_roll_bottom_margin; /* Absolute bottom margin, points */
+ short roll_left_margin; /* Left margin, points */
+ short roll_right_margin; /* Right margin, points */
+ short roll_top_margin; /* Absolute top margin, points */
+ short roll_bottom_margin; /* Absolute bottom margin, points */
+ /* Printer weave: */
+ short m_roll_left_margin; /* Left margin, points */
+ short m_roll_right_margin; /* Right margin, points */
+ short m_roll_top_margin; /* Absolute top margin, points */
+ short m_roll_bottom_margin; /* Absolute bottom margin, points */
+ /* Print directly to CD */
+ short cd_x_offset; /* Center of CD (horizontal offset) */
+ short cd_y_offset; /* Center of CD (vertical offset) */
+ short cd_page_width; /* Width of "page" when printing to CD */
+ short cd_page_height; /* Height of "page" when printing to CD */
/*****************************************************************************/
- /* Miscellaneous printer-specific data */
- int extra_feed; /* Extra distance the paper can be spaced */
- /* beyond the bottom margin, in 1/360". */
- /* (maximum useful value is */
- /* nozzles * nozzle_separation) */
- int separation_rows; /* Some printers require funky spacing */
- /* arguments in interleave mode. */
- int pseudo_separation_rows;/* Some printers require funky */
- /* spacing arguments in softweave mode */
-
- int zero_margin_offset; /* Offset to use to achieve */
- /* zero-margin printing */
- int initial_vertical_offset;
- int black_initial_vertical_offset;
- int extra_720dpi_separation;
-
+ /* Parameters for escputil */
+ short alignment_passes;
+ short alignment_choices;
+ short alternate_alignment_passes;
+ short alternate_alignment_choices;
/*****************************************************************************/
- const int *dot_sizes; /* Vector of dot sizes for resolutions */
- const double *densities; /* List of densities for each printer */
- const escp2_variable_inklist_t *inks; /* Choices of inks for this printer */
+ const short *dot_sizes; /* Vector of dot sizes for resolutions */
+ const float *densities; /* List of densities for each printer */
+ const escp2_drop_list_t *drops; /* Drop sizes */
/*****************************************************************************/
- const paperlist_t *paperlist;
- const res_t *reslist;
- const inklist_t *inklist;
+ const res_t *const *reslist;
+ const inkgroup_t *inkgroup;
/*****************************************************************************/
- const int *bits;
- const int *base_resolutions;
+ const short *bits;
+ const short *base_resolutions;
const input_slot_list_t *input_slots;
/*****************************************************************************/
- const init_sequence_t *preinit_sequence;
- const init_sequence_t *postinit_remote_sequence;
-} escp2_stp_printer_t;
+ const quality_list_t *quality_list;
+ const stp_raw_t *preinit_sequence;
+ const stp_raw_t *postinit_remote_sequence;
+/*****************************************************************************/
+ const printer_weave_list_t *const printer_weaves;
+ const channel_name_t *channel_names;
+} stpi_escp2_printer_t;
+
+extern const stpi_escp2_printer_t stpi_escp2_model_capabilities[];
+extern const int stpi_escp2_model_limit;
+
+extern const escp2_drop_list_t stpi_escp2_simple_drops;
+extern const escp2_drop_list_t stpi_escp2_spro10000_drops;
+extern const escp2_drop_list_t stpi_escp2_variable_1_5pl_drops;
+extern const escp2_drop_list_t stpi_escp2_variable_2pl_drops;
+extern const escp2_drop_list_t stpi_escp2_variable_3pl_drops;
+extern const escp2_drop_list_t stpi_escp2_variable_3pl_pigment_drops;
+extern const escp2_drop_list_t stpi_escp2_variable_3pl_pigment_c66_drops;
+extern const escp2_drop_list_t stpi_escp2_variable_3pl_pmg_drops;
+extern const escp2_drop_list_t stpi_escp2_variable_1440_4pl_drops;
+extern const escp2_drop_list_t stpi_escp2_variable_ultrachrome_drops;
+extern const escp2_drop_list_t stpi_escp2_variable_2880_4pl_drops;
+extern const escp2_drop_list_t stpi_escp2_variable_6pl_drops;
+extern const escp2_drop_list_t stpi_escp2_variable_2000p_drops;
+extern const escp2_drop_list_t stpi_escp2_variable_x80_6pl_drops;
+
+extern const paperlist_t stpi_escp2_standard_paper_list;
+extern const paperlist_t stpi_escp2_durabrite_paper_list;
+extern const paperlist_t stpi_escp2_durabrite2_paper_list;
+extern const paperlist_t stpi_escp2_ultrachrome_paper_list;
+extern const paperlist_t stpi_escp2_r800_paper_list;
+
+extern const paper_adjustment_list_t stpi_escp2_standard_paper_adjustment_list;
+extern const paper_adjustment_list_t stpi_escp2_durabrite_paper_adjustment_list;
+extern const paper_adjustment_list_t stpi_escp2_durabrite2_paper_adjustment_list;
+extern const paper_adjustment_list_t stpi_escp2_photo_paper_adjustment_list;
+extern const paper_adjustment_list_t stpi_escp2_photo2_paper_adjustment_list;
+extern const paper_adjustment_list_t stpi_escp2_photo3_paper_adjustment_list;
+extern const paper_adjustment_list_t stpi_escp2_sp960_paper_adjustment_list;
+extern const paper_adjustment_list_t stpi_escp2_ultrachrome_photo_paper_adjustment_list;
+extern const paper_adjustment_list_t stpi_escp2_ultrachrome_matte_paper_adjustment_list;
+extern const paper_adjustment_list_t stpi_escp2_r800_photo_paper_adjustment_list;
+extern const paper_adjustment_list_t stpi_escp2_r800_matte_paper_adjustment_list;
+
+extern const res_t *const stpi_escp2_superfine_reslist[];
+extern const res_t *const stpi_escp2_no_printer_weave_reslist[];
+extern const res_t *const stpi_escp2_pro_reslist[];
+extern const res_t *const stpi_escp2_sp5000_reslist[];
+extern const res_t *const stpi_escp2_720dpi_reslist[];
+extern const res_t *const stpi_escp2_720dpi_soft_reslist[];
+extern const res_t *const stpi_escp2_g3_720dpi_reslist[];
+extern const res_t *const stpi_escp2_1440dpi_reslist[];
+extern const res_t *const stpi_escp2_2880dpi_reslist[];
+extern const res_t *const stpi_escp2_2880_1440dpi_reslist[];
+extern const res_t *const stpi_escp2_g3_reslist[];
+extern const res_t *const stpi_escp2_sc500_reslist[];
+extern const res_t *const stpi_escp2_sc640_reslist[];
+
+extern const inkgroup_t stpi_escp2_cmy_inkgroup;
+extern const inkgroup_t stpi_escp2_standard_inkgroup;
+extern const inkgroup_t stpi_escp2_c80_inkgroup;
+extern const inkgroup_t stpi_escp2_c82_inkgroup;
+extern const inkgroup_t stpi_escp2_c64_inkgroup;
+extern const inkgroup_t stpi_escp2_f360_inkgroup;
+extern const inkgroup_t stpi_escp2_cx3650_inkgroup;
+extern const inkgroup_t stpi_escp2_x80_inkgroup;
+extern const inkgroup_t stpi_escp2_photo_gen1_inkgroup;
+extern const inkgroup_t stpi_escp2_photo_gen2_inkgroup;
+extern const inkgroup_t stpi_escp2_photo_gen3_inkgroup;
+extern const inkgroup_t stpi_escp2_photo_pigment_inkgroup;
+extern const inkgroup_t stpi_escp2_photo7_japan_inkgroup;
+extern const inkgroup_t stpi_escp2_ultrachrome_inkgroup;
+extern const inkgroup_t stpi_escp2_f360_photo_inkgroup;
+extern const inkgroup_t stpi_escp2_f360_photo7_japan_inkgroup;
+extern const inkgroup_t stpi_escp2_f360_ultrachrome_inkgroup;
+extern const inkgroup_t stpi_escp2_cmykrb_inkgroup;
+
+extern const escp2_inkname_t stpi_escp2_default_black_inkset;
+
+extern const printer_weave_list_t stpi_escp2_standard_printer_weave_list;
+extern const printer_weave_list_t stpi_escp2_sp2200_printer_weave_list;
+extern const printer_weave_list_t stpi_escp2_pro7000_printer_weave_list;
+extern const printer_weave_list_t stpi_escp2_pro7500_printer_weave_list;
+extern const printer_weave_list_t stpi_escp2_pro7600_printer_weave_list;
-extern const escp2_stp_printer_t stp_escp2_model_capabilities[];
+typedef struct
+{
+ /* Basic print head parameters */
+ int nozzles; /* Number of nozzles */
+ int min_nozzles; /* Fewest nozzles we're allowed to use */
+ int nozzle_separation; /* Nozzle separation, in dots */
+ int *head_offset; /* Head offset (for C80-type printers) */
+ int max_head_offset; /* Largest head offset */
+ int page_management_units; /* Page management units (dpi) */
+ int vertical_units; /* Vertical units (dpi) */
+ int horizontal_units; /* Horizontal units (dpi) */
+ int micro_units; /* Micro-units for horizontal positioning */
+ int unit_scale; /* Scale factor for units */
+ int send_zero_pass_advance; /* Send explicit command for zero advance */
+
+ /* Ink parameters */
+ int bitwidth; /* Number of bits per ink drop */
+ int drop_size; /* ID of the drop size we're using */
+ int ink_resid; /* Array index for the drop set we're using */
+ const escp2_inkname_t *inkname; /* Description of the ink set */
+ int use_aux_channels; /* Use gloss channel */
+
+ /* Ink channels */
+ int logical_channels; /* Number of logical ink channels (e.g.CMYK) */
+ int physical_channels; /* Number of physical channels (e.g. CcMmYK) */
+ int channels_in_use; /* Number of channels we're using
+ FIXME merge with physical_channels! */
+ unsigned char **cols; /* Output dithered data */
+ const physical_subchannel_t **channels; /* Description of each channel */
+
+ /* Miscellaneous printer control */
+ int use_black_parameters; /* Can we use (faster) black head parameters */
+ int use_fast_360; /* Can we use fast 360 DPI 4 color mode */
+ int advanced_command_set; /* Uses one of the advanced command sets */
+ int use_extended_commands; /* Do we use the extended commands? */
+ const input_slot_t *input_slot; /* Input slot description */
+ const paper_t *paper_type; /* Paper type */
+ const paper_adjustment_t *paper_adjustment; /* Paper adjustments */
+ const inkgroup_t *ink_group; /* Which set of inks */
+ const stp_raw_t *init_sequence; /* Initialization sequence */
+ const stp_raw_t *deinit_sequence; /* De-initialization sequence */
+ model_featureset_t command_set; /* Which command set this printer supports */
+ int variable_dots; /* Print supports variable dot sizes */
+ int has_vacuum; /* Printer supports vacuum command */
+ int has_graymode; /* Printer supports fast grayscale mode */
+ int base_separation; /* Basic unit of separation */
+ int resolution_scale; /* Scale factor for ESC(D command */
+ int printing_resolution; /* Printing resolution for this resolution */
+ int separation_rows; /* Row separation scaling */
+ int pseudo_separation_rows; /* Special row separation for some printers */
+ int extra_720dpi_separation; /* Special separation needed at 720 DPI */
+
+ /* weave parameters */
+ int horizontal_passes; /* Number of horizontal passes required
+ to print a complete row */
+ int physical_xdpi; /* Horizontal distance between dots in pass */
+ const res_t *res; /* Description of the printing resolution */
+ const printer_weave_t *printer_weave; /* Printer weave parameters */
+ int use_printer_weave; /* Use the printer weaving mechanism */
+
+ /* page parameters */ /* Indexed from top left */
+ int page_left; /* Left edge of page (points) */
+ int page_right; /* Right edge of page (points) */
+ int page_top; /* Top edge of page (points) */
+ int page_bottom; /* Bottom edge of page (points) */
+ int page_width; /* Page width (points) */
+ int page_height; /* Page height (points) */
+ int page_true_height; /* Physical page height (points) */
+ int cd_x_offset; /* CD X offset (micro units) */
+ int cd_y_offset; /* CD Y offset (micro units) */
+ int cd_outer_radius; /* CD radius (micro units) */
+ int cd_inner_radius; /* CD radius (micro units) */
+
+ /* Image parameters */ /* Indexed from top left */
+ int image_height; /* Height of printed region (points) */
+ int image_width; /* Width of printed region (points) */
+ int image_top; /* First printed row (points) */
+ int image_left; /* Left edge of image (points) */
+ int image_scaled_width; /* Width of physical printed region (dots) */
+ int image_printed_width; /* Width of printed region (dots) */
+ int image_scaled_height; /* Height of physical printed region (dots) */
+ int image_printed_height; /* Height of printed region (dots) */
+ int image_left_position; /* Left dot position of image */
+
+ /* Transitory state */
+ int printed_something; /* Have we actually printed anything? */
+ int initial_vertical_offset; /* Vertical offset for C80-type printers */
+ int printing_initial_vertical_offset; /* Vertical offset, for print cmd */
+ int last_color; /* Last color we printed */
+ int last_pass_offset; /* Starting row of last pass we printed */
+ int last_pass; /* Last pass printed */
+
+} escp2_privdata_t;
+
+extern void stpi_escp2_init_printer(stp_vars_t *v);
+extern void stpi_escp2_deinit_printer(stp_vars_t *v);
+extern void stpi_escp2_flush_pass(stp_vars_t *v, int passno,
+ int vertical_subpass);
+extern void stpi_escp2_terminate_page(stp_vars_t *v);
+
+#ifdef TEST_UNCOMPRESSED
+#define COMPRESSION (0)
+#define FILLFUNC stp_fill_uncompressed
+#define COMPUTEFUNC stp_compute_uncompressed_linewidth
+#define PACKFUNC stp_pack_uncompressed
+#else
+#define COMPRESSION (1)
+#define FILLFUNC stp_fill_tiff
+#define COMPUTEFUNC stp_compute_tiff_linewidth
+#define PACKFUNC stp_pack_tiff
+#endif
+
+#endif /* GUTENPRINT_INTERNAL_ESCP2_H */
+/*
+ * End of "$Id: print-escp2.h,v 1.94 2005/06/14 02:49:10 rlk Exp $".
+ */
diff --git a/src/main/print-lexmark.c b/src/main/print-lexmark.c
index 018d5ba..64d4075 100644
--- a/src/main/print-lexmark.c
+++ b/src/main/print-lexmark.c
@@ -1,5 +1,6 @@
+
/*
- * "$Id: print-lexmark.c,v 1.65.2.9 2003/10/16 11:51:10 rlk Exp $"
+ * "$Id: print-lexmark.c,v 1.149 2005/05/08 03:10:38 rlk Exp $"
*
* Print plug-in Lexmark driver for the GIMP.
*
@@ -57,21 +58,34 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#include <gimp-print/gimp-print.h>
-#include "gimp-print-internal.h"
-#include <gimp-print/gimp-print-intl-internal.h>
+#include <gutenprint/gutenprint.h>
+#include <gutenprint/gutenprint-intl-internal.h>
+#include "gutenprint-internal.h"
#include <string.h>
#ifdef DEBUG
#include <stdio.h>
#endif
+#define STP_ECOLOR_LC 4
+#define STP_ECOLOR_LM 5
+#define STP_ECOLOR_LY 6
#define false 0
#define true 1
-#define max(a, b) ((a > b) ? a : b)
+#define max(a, b) ((a > b) ? (a) : (b))
#define INCH(x) (72 * x)
+static const stp_dotsize_t single_dotsize[] =
+{
+ { 0x1, 1.0 }
+};
+
+static const stp_shade_t photo_dither_shades[] =
+{
+ { 1.0000, 1, single_dotsize },
+ { 0.3333, 1, single_dotsize },
+};
typedef enum Lex_model { m_lex7500, m_z52=10052, m_z42=10042, m_3200=3200 } Lex_model;
@@ -80,7 +94,7 @@ typedef enum Lex_model { m_lex7500, m_z52=10052, m_z42=10042, m_3200=3200 } Le
typedef union { /* Offsets from the start of each line */
unsigned long v[NCHANNELS]; /* (really pass) */
- struct { /* IMPORTANT: order corresponds to ECOLOR_* */
+ struct { /* IMPORTANT: order corresponds to STP_ECOLOR_* */
unsigned long k;
unsigned long c;
unsigned long m;
@@ -93,7 +107,7 @@ typedef union { /* Offsets from the start of each line */
typedef union { /* Base pointers for each pass */
unsigned char *v[NCHANNELS];
- struct { /* IMPORTANT: order corresponds to ECOLOR_* */
+ struct { /* IMPORTANT: order corresponds to STP_ECOLOR_* */
unsigned char *k;
unsigned char *c;
unsigned char *m;
@@ -114,19 +128,17 @@ typedef struct testdata {
char *input_line;
} testdata;
-const stp_vars_t *dbgfileprn;
+const stp_vars_t **dbgfileprn;
int lex_show_lcount, lex_show_length;
-const stp_vars_t lex_open_tmp_file();
-const stp_vars_t lex_write_tmp_file(const stp_vars_t ofile, void *data,int length);
+const stp_vars_t *lex_open_tmp_file();
+const stp_vars_t *lex_write_tmp_file(const stp_vars_t *ofile, void *data,int length);
static void testprint(testdata *td);
static void readtestprintline(testdata *td, lexmark_linebufs_t *linebufs);
#endif
static void
-flush_pass(stp_softweave_t *sw, int passno, int model, int width,
- int hoffset, int ydpi, int xdpi, int physical_xdpi,
- int vertical_subpass);
+flush_pass(stp_vars_t *v, int passno, int vertical_subpass);
/*** resolution specific parameters */
#define DPI300 0
@@ -166,219 +178,50 @@ flush_pass(stp_softweave_t *sw, int passno, int model, int width,
#define CL 3
-
-static const double standard_sat_adjustment[49] =
-{
- 1.0, /* C */
- 1.1,
- 1.2,
- 1.3,
- 1.4,
- 1.5,
- 1.6,
- 1.7,
- 1.8, /* B */
- 1.9,
- 1.9,
- 1.9,
- 1.7,
- 1.5,
- 1.3,
- 1.1,
- 1.0, /* M */
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0, /* R */
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0, /* Y */
- 1.0,
- 1.0,
- 1.1,
- 1.2,
- 1.3,
- 1.4,
- 1.5,
- 1.5, /* G */
- 1.4,
- 1.3,
- 1.2,
- 1.1,
- 1.0,
- 1.0,
- 1.0,
- 1.0 /* C */
-};
-
-static const double standard_lum_adjustment[49] =
-{
- 0.50, /* C */
- 0.6,
- 0.7,
- 0.8,
- 0.9,
- 0.86,
- 0.82,
- 0.79,
- 0.78, /* B */
- 0.8,
- 0.83,
- 0.87,
- 0.9,
- 0.95,
- 1.05,
- 1.15,
- 1.3, /* M */
- 1.25,
- 1.2,
- 1.15,
- 1.12,
- 1.09,
- 1.06,
- 1.03,
- 1.0, /* R */
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0, /* Y */
- 0.9,
- 0.8,
- 0.7,
- 0.65,
- 0.6,
- 0.55,
- 0.52,
- 0.48, /* G */
- 0.47,
- 0.47,
- 0.49,
- 0.49,
- 0.49,
- 0.52,
- 0.51,
- 0.50 /* C */
-};
-
-static const double standard_hue_adjustment[49] =
-{
- 0.00, /* C */
- 0.05,
- 0.04,
- 0.01,
- -0.03,
- -0.10,
- -0.18,
- -0.26,
- -0.35, /* B */
- -0.43,
- -0.40,
- -0.32,
- -0.25,
- -0.18,
- -0.10,
- -0.07,
- 0.00, /* M */
- -0.04,
- -0.09,
- -0.13,
- -0.18,
- -0.23,
- -0.27,
- -0.31,
- -0.35, /* R */
- -0.38,
- -0.30,
- -0.23,
- -0.15,
- -0.08,
- 0.00,
- -0.02,
- 0.00, /* Y */
- 0.08,
- 0.10,
- 0.08,
- 0.05,
- 0.03,
- -0.03,
- -0.12,
- -0.20, /* G */
- -0.17,
- -0.20,
- -0.17,
- -0.15,
- -0.12,
- -0.10,
- -0.08,
- 0.00, /* C */
-};
-
-
-static const double plain_paper_lum_adjustment[49] =
-{
- 1.2, /* C */
- 1.22,
- 1.28,
- 1.34,
- 1.39,
- 1.42,
- 1.45,
- 1.48,
- 1.5, /* B */
- 1.4,
- 1.3,
- 1.25,
- 1.2,
- 1.1,
- 1.05,
- 1.05,
- 1.05, /* M */
- 1.05,
- 1.05,
- 1.05,
- 1.05,
- 1.05,
- 1.05,
- 1.05,
- 1.05, /* R */
- 1.05,
- 1.05,
- 1.1,
- 1.1,
- 1.1,
- 1.1,
- 1.1,
- 1.1, /* Y */
- 1.15,
- 1.3,
- 1.45,
- 1.6,
- 1.75,
- 1.9,
- 2.0,
- 2.1, /* G */
- 2.0,
- 1.8,
- 1.7,
- 1.6,
- 1.5,
- 1.4,
- 1.3,
- 1.2 /* C */
-};
+static const char standard_sat_adjustment[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* B */
+/* B */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* M */
+/* M */ "1.00 0.95 0.90 0.90 0.90 0.90 0.90 0.90 " /* R */
+/* R */ "0.90 0.95 0.95 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* G */
+/* G */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char standard_lum_adjustment[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "0.65 0.67 0.70 0.72 0.77 0.80 0.82 0.85 " /* B */
+/* B */ "0.87 0.86 0.82 0.79 0.79 0.82 0.85 0.88 " /* M */
+/* M */ "0.92 0.95 0.96 0.97 0.97 0.97 0.96 0.96 " /* R */
+/* R */ "0.96 0.97 0.97 0.98 0.99 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 0.97 0.95 0.94 0.93 0.92 0.90 0.86 " /* G */
+/* G */ "0.79 0.76 0.71 0.68 0.68 0.68 0.68 0.66 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char standard_hue_adjustment[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"-6\" upper-bound=\"6\">\n"
+/* C */ "0.00 0.06 0.10 0.10 0.06 -.01 -.09 -.17 " /* B */
+/* B */ "-.25 -.33 -.38 -.38 -.36 -.34 -.34 -.34 " /* M */
+/* M */ "-.34 -.34 -.36 -.40 -.50 -.40 -.30 -.20 " /* R */
+/* R */ "-.12 -.07 -.04 -.02 0.00 0.00 0.00 0.00 " /* Y */
+/* Y */ "0.00 0.00 0.00 -.05 -.10 -.15 -.22 -.24 " /* G */
+/* G */ "-.26 -.30 -.33 -.28 -.25 -.20 -.13 -.06 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
/* Codes for possible ink-tank combinations.
@@ -417,6 +260,119 @@ static const double plain_paper_lum_adjustment[49] =
static const int lr_shift_color[10] = { 9, 18, 2*18 }; /* vertical distance between ever 2nd inkjet (related to resolution) */
static const int lr_shift_black[10] = { 9, 18, 2*18 }; /* vertical distance between ever 2nd inkjet (related to resolution) */
+static const stp_parameter_t the_parameters[] =
+{
+ {
+ "PageSize", N_("Page Size"), N_("Basic Printer Setup"),
+ N_("Size of the paper being printed to"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "MediaType", N_("Media Type"), N_("Basic Printer Setup"),
+ N_("Type of media (plain paper, photo paper, etc.)"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "InputSlot", N_("Media Source"), N_("Basic Printer Setup"),
+ N_("Source (input slot) of the media"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "Resolution", N_("Resolution"), N_("Basic Printer Setup"),
+ N_("Resolution and quality of the print"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "InkType", N_("Ink Type"), N_("Advanced Printer Setup"),
+ N_("Type of ink in the printer"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "InkChannels", N_("Ink Channels"), N_("Advanced Printer Functionality"),
+ N_("Ink Channels"),
+ STP_PARAMETER_TYPE_INT, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 0, -1, 0, 0
+ },
+ {
+ "PrintingMode", N_("Printing Mode"), N_("Core Parameter"),
+ N_("Printing Output Mode"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+};
+
+static const int the_parameter_count =
+sizeof(the_parameters) / sizeof(const stp_parameter_t);
+
+typedef struct
+{
+ const stp_parameter_t param;
+ double min;
+ double max;
+ double defval;
+ int color_only;
+} float_param_t;
+
+static const float_param_t float_parameters[] =
+{
+ {
+ {
+ "CyanDensity", N_("Cyan Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the cyan balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 1, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "MagentaDensity", N_("Magenta Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the magenta balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 2, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "YellowDensity", N_("Yellow Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the yellow balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 3, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "BlackDensity", N_("Black Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the black balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 0, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "LightCyanTransition", N_("Light Cyan Transition"), N_("Advanced Ink Adjustment"),
+ N_("Light Cyan Transition"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, -1, 1, 0
+ }, 0.0, 5.0, 1.0, 1
+ },
+ {
+ {
+ "LightMagentaTransition", N_("Light Magenta Transition"), N_("Advanced Ink Adjustment"),
+ N_("Light Magenta Transition"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, -1, 1, 0
+ }, 0.0, 5.0, 1.0, 1
+ },
+};
+
+static const int float_parameter_count =
+sizeof(float_parameters) / sizeof(const float_param_t);
+
/* returns the offset of the first jet when printing in the other direction */
static int get_lr_shift(int mode)
{
@@ -508,7 +464,6 @@ typedef lexmark_res_t lexmark_res_t_array[LEXM_RES_COUNT];
/* ink type parameters (substructure of lexmark_cap_t) */
typedef struct {
- unsigned int output_type; /* type of output */
int ncolors;
unsigned int used_colors; /* specifies the head colors to be used (e.g. COLOR_MODE_K */
unsigned int pass_length; /* avaliable jets for one color */
@@ -522,7 +477,7 @@ typedef struct
{
const char *name;
const char *text;
- lexmark_inkparam_t ink_parameter[4];
+ lexmark_inkparam_t ink_parameter[2];
} lexmark_inkname_t;
@@ -551,9 +506,9 @@ typedef struct {
int y_raster_res; /* vertical resolution for positioning of the printer head in DPI */
const lexmark_res_t_array *res_parameters; /* resolution specific parameters; last entry has resid = -1 */
const lexmark_inkname_t *ink_types; /* type of supported inks */
- const double *lum_adjustment;
- const double *hue_adjustment;
- const double *sat_adjustment;
+ const char *lum_adjustment;
+ const char *hue_adjustment;
+ const char *sat_adjustment;
} lexmark_cap_t;
@@ -644,30 +599,20 @@ static const lexmark_inkname_t ink_types_z52[] =
* h_direction_offset
* head_offset */
{ "CMYK", N_("Four Color Standard"),
- {{ OUTPUT_GRAY, 1, COLOR_MODE_K, 208, 324, 0, 10, head_offset_cmyk },
- { OUTPUT_COLOR, 4, COLOR_MODE_CMYK, 192/3, 0, 0, 10, head_offset_cmyk },
- { OUTPUT_MONOCHROME, 1, COLOR_MODE_K, 208, 324, 0, 10, head_offset_cmyk },
- { OUTPUT_RAW_CMYK, 4, COLOR_MODE_CMYK, 192/3, 0, 0, 10, head_offset_cmyk }}},
+ {{ 1, COLOR_MODE_K, 208, 324, 0, 10, head_offset_cmyk },
+ { 4, COLOR_MODE_CMYK, 192/3, 0, 0, 10, head_offset_cmyk }}},
{ "RGB", N_("Three Color Composite"),
- {{ OUTPUT_GRAY, 1, COLOR_MODE_K, 208, 324, 0, 10, head_offset_cmyk }, /* we ignor CMY, use black */
- { OUTPUT_COLOR, 4, COLOR_MODE_CMY, 192/3, 0, 0, 10, head_offset_cmy },
- { OUTPUT_MONOCHROME, 1, COLOR_MODE_K, 208, 324, 0, 10, head_offset_cmyk }, /* we ignor CMY, use black */
- { OUTPUT_RAW_CMYK, 4, COLOR_MODE_CMY, 192/3, 0, 0, 10, head_offset_cmy }}},
+ {{ 1, COLOR_MODE_K, 208, 324, 0, 10, head_offset_cmyk }, /* we ignor CMY, use black */
+ { 4, COLOR_MODE_CMY, 192/3, 0, 0, 10, head_offset_cmy }}},
{ "PhotoCMYK", N_("Six Color Photo"),
- {{OUTPUT_MONOCHROME, 1, COLOR_MODE_K, 192/3, 0, 0, 10, head_offset_cCmMyk },
- { OUTPUT_COLOR, 6, COLOR_MODE_CcMcYK, 192/3, 0, 0, 10, head_offset_cCmMyk },
- { OUTPUT_GRAY, 1, COLOR_MODE_K, 192/3, 0, 0, 10, head_offset_cCmMyk },
- { OUTPUT_RAW_CMYK, 6, COLOR_MODE_CcMcYK, 192/3, 0, 0, 10, head_offset_cCmMyk }}},
+ {{ 1, COLOR_MODE_K, 192/3, 0, 0, 10, head_offset_cCmMyk },
+ { 6, COLOR_MODE_CcMcYK, 192/3, 0, 0, 10, head_offset_cCmMyk }}},
{ "PhotoCMY", N_("Five Color Photo Composite"),
- {{ OUTPUT_MONOCHROME, 1, COLOR_MODE_K, 208, 324, 0, 10, head_offset_cCmMyk }, /* we ignor CMY, use black */
- { OUTPUT_COLOR, 5, COLOR_MODE_CcMcY, 192/3, 0, 0, 10, head_offset_cCmMyk },
- { OUTPUT_GRAY, 1, COLOR_MODE_K, 208, 324, 0, 10, head_offset_cCmMyk }, /* we ignor CMY, use black */
- { OUTPUT_RAW_CMYK, 5, COLOR_MODE_CcMcY, 192/3, 0, 0, 10, head_offset_cCmMyk }}},
+ {{ 1, COLOR_MODE_K, 208, 324, 0, 10, head_offset_cCmMyk },
+ { 5, COLOR_MODE_CcMcY, 192/3, 0, 0, 10, head_offset_cCmMyk }}}, /* we ignor CMY, use black */
{ "Gray", N_("Black"),
- {{ OUTPUT_GRAY, 1, COLOR_MODE_K, 208, 324, 0, 10, head_offset_cmyk },
- { OUTPUT_COLOR, 1, COLOR_MODE_K, 208, 324, 0, 10, head_offset_cmyk },
- { OUTPUT_MONOCHROME, 1, COLOR_MODE_K, 208, 324, 0, 10, head_offset_cmyk },
- { OUTPUT_RAW_CMYK, 1, COLOR_MODE_K, 208, 324, 0, 10, head_offset_cmyk }}},
+ {{ 1, COLOR_MODE_K, 208, 324, 0, 10, head_offset_cmyk },
+ { 1, COLOR_MODE_K, 208, 324, 0, 10, head_offset_cmyk }}},
{ NULL, NULL }
};
@@ -724,25 +669,17 @@ static const lexmark_inkname_t ink_types_3200[] =
* h_direction_offset
* head_offset */
{ "CMYK", N_("Four Color Standard"),
- {{ OUTPUT_GRAY, 1, COLOR_MODE_K, 208, 20, 0, 12, head_offset_cmyk },
- { OUTPUT_COLOR, 4, COLOR_MODE_CMYK, 192/3, 0, 0, 12, head_offset_cmyk },
- { OUTPUT_MONOCHROME, 1, COLOR_MODE_K, 208, 20, 0, 12, head_offset_cmyk },
- { OUTPUT_RAW_CMYK, 4, COLOR_MODE_CMYK, 192/3, 0, 0, 12, head_offset_cmyk }}},
+ {{ 1, COLOR_MODE_K, 208, 20, 0, 12, head_offset_cmyk },
+ { 4, COLOR_MODE_CMYK, 192/3, 0, 0, 12, head_offset_cmyk }}},
{ "RGB", N_("Three Color Composite"),
- {{ OUTPUT_GRAY, 1, COLOR_MODE_K, 208, 20, 0, 12, head_offset_cmyk }, /* we ignor CMY, use black */
- { OUTPUT_COLOR, 4, COLOR_MODE_CMY, 192/3, 0, 0, 12, head_offset_cmy },
- { OUTPUT_MONOCHROME, 1, COLOR_MODE_K, 208, 20, 0, 12, head_offset_cmyk }, /* we ignor CMY, use black */
- { OUTPUT_RAW_CMYK, 4, COLOR_MODE_CMY, 192/3, 0, 0, 12, head_offset_cmy }}},
+ {{ 1, COLOR_MODE_K, 208, 20, 0, 12, head_offset_cmyk }, /* we ignor CMY, use black */
+ { 4, COLOR_MODE_CMY, 192/3, 0, 0, 12, head_offset_cmy }}},
{ "PhotoCMYK", N_("Six Color Photo"),
- {{OUTPUT_MONOCHROME, 1, COLOR_MODE_K, 192/3, 0, 0, 12, head_offset_cCmMyk },
- { OUTPUT_COLOR, 6, COLOR_MODE_CcMcYK, 192/3, 0, 0, 12, head_offset_cCmMyk },
- { OUTPUT_GRAY, 1, COLOR_MODE_K, 192/3, 0, 0, 12, head_offset_cCmMyk },
- { OUTPUT_RAW_CMYK, 6, COLOR_MODE_CcMcYK, 192/3, 0, 0, 12, head_offset_cCmMyk }}},
+ {{ 1, COLOR_MODE_K, 192/3, 0, 0, 12, head_offset_cCmMyk },
+ { 6, COLOR_MODE_CcMcYK, 192/3, 0, 0, 12, head_offset_cCmMyk }}},
{ "PhotoCMY", N_("Five Color Photo Composite"),
- {{ OUTPUT_MONOCHROME, 1, COLOR_MODE_K, 208, 20, 0, 12, head_offset_cCmMyk }, /* we ignor CMY, use black */
- { OUTPUT_COLOR, 5, COLOR_MODE_CcMcY, 192/3, 0, 0, 12, head_offset_cCmMyk },
- { OUTPUT_GRAY, 1, COLOR_MODE_K, 208, 20, 0, 12, head_offset_cCmMyk }, /* we ignor CMY, use black */
- { OUTPUT_RAW_CMYK, 5, COLOR_MODE_CcMcY, 192/3, 0, 0, 12, head_offset_cCmMyk }}},
+ {{ 1, COLOR_MODE_K, 208, 20, 0, 12, head_offset_cCmMyk }, /* we ignor CMY, use black */
+ { 5, COLOR_MODE_CcMcY, 192/3, 0, 0, 12, head_offset_cCmMyk }}},
{ NULL, NULL }
};
@@ -841,6 +778,17 @@ typedef struct lexm_privdata_weave {
const lexmark_inkparam_t *ink_parameter;
int bidirectional; /* tells us if we are allowed to print bidirectional */
int direction; /* stores the last direction or print head */
+ int hoffset;
+ int model;
+ int width;
+ int ydpi;
+ int xdpi;
+ int physical_xdpi;
+ int last_pass_offset;
+ int jets;
+ int bitwidth;
+ int ncolors;
+ int horizontal_weave;
unsigned char *outbuf;
} lexm_privdata_weave;
@@ -897,9 +845,9 @@ typedef struct
int feed_adjustment;
int vacuum_intensity;
int paper_thickness;
- const double *hue_adjustment;
- const double *lum_adjustment;
- const double *sat_adjustment;
+ const char *hue_adjustment;
+ const char *lum_adjustment;
+ const char *sat_adjustment;
} paper_t;
@@ -908,70 +856,83 @@ static const paper_t lexmark_paper_list[] =
{
{ "Plain", N_("Plain Paper"),
1, 0, 0.80, .1, .5, 1.0, 1.0, 1.0, .9, 1.05, 1.15,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
+ 1, 1.0, 0x6b, 0x1a, 0x01,
+ standard_hue_adjustment, standard_lum_adjustment, standard_sat_adjustment},
{ "GlossyFilm", N_("Glossy Film"),
3, 0, 1.00 ,1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6d, 0x00, 0x01, NULL, plain_paper_lum_adjustment, NULL},
+ 1, 1.0, 0x6d, 0x00, 0x01,
+ standard_hue_adjustment, standard_lum_adjustment, standard_sat_adjustment},
{ "Transparency", N_("Transparencies"),
3, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, 1.0, 0x6d, 0x00, 0x02, NULL, plain_paper_lum_adjustment, NULL},
+ 1.0, 1.0, 0x6d, 0x00, 0x02,
+ standard_hue_adjustment, standard_lum_adjustment, standard_sat_adjustment},
{ "Envelope", N_("Envelopes"),
4, 0, 0.80, .125, .5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
+ 1, 1.0, 0x6b, 0x1a, 0x01,
+ standard_hue_adjustment, standard_lum_adjustment, standard_sat_adjustment},
{ "Matte", N_("Matte Paper"),
7, 0, 0.85, 1.0, .999, 1.05, .9, 1.05, .9, 1.0, 1.1,
- 1, 1.0, 0x00, 0x00, 0x02, NULL, NULL, NULL},
+ 1, 1.0, 0x00, 0x00, 0x02,
+ standard_hue_adjustment, standard_sat_adjustment, standard_sat_adjustment},
{ "Inkjet", N_("Inkjet Paper"),
7, 0, 0.85, .25, .6, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
+ 1, 1.0, 0x6b, 0x1a, 0x01,
+ standard_hue_adjustment, standard_lum_adjustment, standard_sat_adjustment},
{ "Coated", N_("Photo Quality Inkjet Paper"),
7, 0, 1.00, 1.0, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, NULL, NULL},
+ 1, 1.0, 0x6b, 0x1a, 0x01,
+ standard_hue_adjustment, standard_lum_adjustment, standard_sat_adjustment},
{ "Photo", N_("Photo Paper"),
8, 0, 1.00, 1.0, .9, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x67, 0x00, 0x02, NULL, NULL, NULL},
+ 1, 1.0, 0x67, 0x00, 0x02,
+ standard_hue_adjustment, standard_lum_adjustment, standard_sat_adjustment},
{ "GlossyPhoto", N_("Premium Glossy Photo Paper"),
8, 0, 1.10, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.03, 1.0,
- 1, 1.0, 0x80, 0x00, 0x02, NULL, NULL, NULL},
+ 1, 1.0, 0x80, 0x00, 0x02,
+ standard_hue_adjustment, standard_lum_adjustment, standard_sat_adjustment},
{ "Luster", N_("Premium Luster Photo Paper"),
8, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, 1.0, 0x80, 0x00, 0x02, NULL, NULL, NULL},
+ 1.0, 1.0, 0x80, 0x00, 0x02,
+ standard_hue_adjustment, standard_lum_adjustment, standard_sat_adjustment},
{ "GlossyPaper", N_("Photo Quality Glossy Paper"),
6, 0, 1.00, 1, .999, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, 1.0, 0x6b, 0x1a, 0x01, NULL, NULL, NULL},
+ 1.0, 1.0, 0x6b, 0x1a, 0x01,
+ standard_hue_adjustment, standard_lum_adjustment, standard_sat_adjustment},
{ "Ilford", N_("Ilford Heavy Paper"),
8, 0, .85, .5, 1.35, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x80, 0x00, 0x02, NULL, NULL, NULL },
+ 1, 1.0, 0x80, 0x00, 0x02,
+ standard_hue_adjustment, standard_lum_adjustment, standard_sat_adjustment},
{ "Other", N_("Other"),
0, 0, 0.80, 0.125, .5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1, 1.0, 0x6b, 0x1a, 0x01, NULL, plain_paper_lum_adjustment, NULL},
+ 1, 1.0, 0x6b, 0x1a, 0x01,
+ standard_hue_adjustment, standard_lum_adjustment, standard_sat_adjustment},
};
static const int paper_type_count = sizeof(lexmark_paper_list) / sizeof(paper_t);
static const lexmark_inkname_t *
-lexmark_get_ink_type(const char *name, int output_type, const lexmark_cap_t * caps)
+lexmark_get_ink_type(const char *name, int printing_color, const lexmark_cap_t * caps)
{
- int i;
+ int i = 0;
const lexmark_inkname_t *ink_type = caps->ink_types;
- for (i=0; ((ink_type[i].name != NULL) &&
- (strcmp(name, ink_type[i].name) != 0)); i++) ;
+ if (name)
+ for (i=0; ((ink_type[i].name != NULL) &&
+ (strcmp(name, ink_type[i].name) != 0)); i++) ;
return &(ink_type[i]);
+
}
static const lexmark_inkparam_t *
-lexmark_get_ink_parameter(const char *name, int output_type, const lexmark_cap_t * caps, stp_vars_t nv)
+lexmark_get_ink_parameter(const char *name, int printing_color, const lexmark_cap_t * caps, const stp_vars_t *nv)
{
- int i;
- const lexmark_inkname_t *ink_type = lexmark_get_ink_type(name, output_type, caps);
+ const lexmark_inkname_t *ink_type = lexmark_get_ink_type(name, printing_color, caps);
if (ink_type->name == NULL) {
return (NULL); /* not found ! */
}
- for (i=0; (ink_type->ink_parameter[i].output_type != output_type); i++) ;
- return &(ink_type->ink_parameter[i]);
+ return &(ink_type->ink_parameter[printing_color]);
}
@@ -979,10 +940,13 @@ static const paper_t *
get_media_type(const char *name, const lexmark_cap_t * caps)
{
int i;
- for (i = 0; i < paper_type_count; i++)
+ if (name)
{
- if (!strcmp(name, lexmark_paper_list[i].name))
- return &(lexmark_paper_list[i]);
+ for (i = 0; i < paper_type_count; i++)
+ {
+ if (!strcmp(name, lexmark_paper_list[i].name))
+ return &(lexmark_paper_list[i]);
+ }
}
return NULL;
}
@@ -990,9 +954,12 @@ get_media_type(const char *name, const lexmark_cap_t * caps)
static int
lexmark_source_type(const char *name, const lexmark_cap_t * caps)
{
- if (!strcmp(name,"Auto")) return 4;
- if (!strcmp(name,"Manual")) return 0;
- if (!strcmp(name,"ManualNP")) return 1;
+ if (name)
+ {
+ if (!strcmp(name,"Auto")) return 4;
+ if (!strcmp(name,"Manual")) return 0;
+ if (!strcmp(name,"ManualNP")) return 1;
+ }
#ifdef DEBUG
stp_erprintf("lexmark: Unknown source type '%s' - reverting to auto\n",name);
@@ -1033,13 +1000,13 @@ lexmark_size_type
/* This method is actually not used.
Is there a possibility to set such value ???????????? */
static unsigned char
-lexmark_size_type(const stp_vars_t v, const lexmark_cap_t * caps)
+lexmark_size_type(const stp_vars_t *v, const lexmark_cap_t * caps)
{
- const stp_papersize_t pp = stp_get_papersize_by_size(stp_get_page_height(v),
- stp_get_page_width(v));
+ const stp_papersize_t *pp = stp_get_papersize_by_size(stp_get_page_height(v),
+ stp_get_page_width(v));
if (pp)
{
- const char *name = stp_papersize_get_name(pp);
+ const char *name = pp->name;
/* built ins: */
if (!strcmp(name,"A5")) return 0x01;
if (!strcmp(name,"A4")) return 0x03;
@@ -1065,45 +1032,37 @@ lexmark_size_type(const stp_vars_t v, const lexmark_cap_t * caps)
#endif
-static int lexmark_get_phys_resolution_vertical(const stp_printer_t printer)
+static int lexmark_get_phys_resolution_vertical(int model)
{
return 600;
}
#if 0
-static int lexmark_get_phys_resolution_horizontal(const stp_printer_t printer)
+static int lexmark_get_phys_resolution_horizontal(int model)
{
return 1200;
}
#endif
-static char *
-c_strdup(const char *s)
-{
- char *ret = stp_malloc(strlen(s) + 1);
- strcpy(ret, s);
- return ret;
-}
-
-
static const lexmark_res_t
-*lexmark_get_resolution_para(const stp_printer_t printer,
- const char *resolution)
+*lexmark_get_resolution_para(int model, const char *resolution)
{
- const lexmark_cap_t * caps= lexmark_get_model_capabilities(stp_printer_get_model(printer));
+ const lexmark_cap_t * caps= lexmark_get_model_capabilities(model);
const lexmark_res_t *res = *(caps->res_parameters); /* get the resolution specific parameters of printer */
-
- while (res->hres)
+ if (resolution)
{
- if ((res->vres <= caps->max_ydpi) && (caps->max_ydpi != -1) &&
- (res->hres <= caps->max_xdpi) && (caps->max_xdpi != -1) &&
- (!strcmp(resolution, res->name)))
+ while (res->hres)
{
- return res;
+ if ((res->vres <= caps->max_ydpi) && (caps->max_ydpi != -1) &&
+ (res->hres <= caps->max_xdpi) && (caps->max_xdpi != -1) &&
+ (!strcmp(resolution, res->name)))
+ {
+ return res;
+ }
+ res++;
}
- res++;
}
stp_erprintf("lexmark_get_resolution_para: resolution not found (%s)\n", resolution);
return NULL;
@@ -1111,37 +1070,37 @@ static const lexmark_res_t
static int
-lexmark_print_bidirectional(const stp_printer_t printer,
- const char *resolution)
+lexmark_print_bidirectional(int model, const char *resolution)
{
- const lexmark_res_t *res_para = lexmark_get_resolution_para(printer, resolution);
+ const lexmark_res_t *res_para = lexmark_get_resolution_para(model, resolution);
return !res_para->unidirectional;
}
-static const double *
-lexmark_lum_adjustment(const lexmark_cap_t * caps, const stp_vars_t v)
+static const char *
+lexmark_lum_adjustment(const lexmark_cap_t * caps, const stp_vars_t *v)
{
return (caps->lum_adjustment);
}
-static const double *
-lexmark_hue_adjustment(const lexmark_cap_t * caps, const stp_vars_t v)
+static const char *
+lexmark_hue_adjustment(const lexmark_cap_t * caps, const stp_vars_t *v)
{
return (caps->hue_adjustment);
}
-static const double *
-lexmark_sat_adjustment(const lexmark_cap_t * caps, const stp_vars_t v)
+static const char *
+lexmark_sat_adjustment(const lexmark_cap_t * caps, const stp_vars_t *v)
{
return (caps->sat_adjustment);
}
static void
-lexmark_describe_resolution(const stp_printer_t printer,
- const char *resolution, int *x, int *y)
+lexmark_describe_resolution(const stp_vars_t *v, int *x, int *y)
{
- const lexmark_res_t *res = lexmark_get_resolution_para(printer, resolution);
+ const char *resolution = stp_get_string_parameter(v, "Resolution");
+ const lexmark_res_t *res =
+ lexmark_get_resolution_para(stp_get_model_id(v), resolution);
if (res)
{
@@ -1154,8 +1113,7 @@ lexmark_describe_resolution(const stp_printer_t printer,
}
-
-static stp_param_t media_sources[] =
+static stp_param_string_t media_sources[] =
{
{ "Auto", N_("Auto Sheet Feeder") },
{ "Manual", N_("Manual with Pause") },
@@ -1167,33 +1125,78 @@ static stp_param_t media_sources[] =
* 'lexmark_parameters()' - Return the parameter values for the given parameter.
*/
-static stp_param_t * /* O - Parameter values */
-lexmark_parameters(const stp_printer_t printer, /* I - Printer model */
- const char *ppd_file, /* I - PPD file (not used) */
- const char *name, /* I - Name of parameter */
- int *count) /* O - Number of values */
+static stp_parameter_list_t
+lexmark_list_parameters(const stp_vars_t *v)
{
- int i;
- stp_param_t *p= 0;
- stp_param_t *valptrs= 0;
+ stp_parameter_list_t *ret = stp_parameter_list_create();
+ int i;
+ for (i = 0; i < the_parameter_count; i++)
+ stp_parameter_list_add_param(ret, &(the_parameters[i]));
+ for (i = 0; i < float_parameter_count; i++)
+ stp_parameter_list_add_param(ret, &(float_parameters[i].param));
+ return ret;
+}
+
+static const char *
+lexmark_describe_output(const stp_vars_t *v)
+{
+ int printing_color = 0;
+ int model = stp_get_model_id(v);
+ const lexmark_cap_t *caps = lexmark_get_model_capabilities(model);
+ const char *print_mode = stp_get_string_parameter(v, "PrintingMode");
+ const char *ink_type = stp_get_string_parameter(v, "InkType");
+ const lexmark_inkparam_t *ink_parameter;
+
+ if (!print_mode || strcmp(print_mode, "Color") == 0)
+ printing_color = 1;
+
+ ink_parameter = lexmark_get_ink_parameter(ink_type, printing_color, caps, v);
- const lexmark_cap_t * caps= lexmark_get_model_capabilities(stp_printer_get_model(printer));
+ if (ink_parameter->used_colors == COLOR_MODE_K ||
+ caps->inks == LEXMARK_INK_K || !printing_color)
+ return "Grayscale";
+ else if (!(ink_parameter->used_colors & COLOR_MODE_K))
+ return "CMY";
+ else
+ return "CMYK";
+}
- if (count == NULL)
- return (NULL);
+static void
+lexmark_parameters(const stp_vars_t *v, const char *name,
+ stp_parameter_t *description)
+{
+ int i;
- *count = 0;
+ const lexmark_cap_t * caps= lexmark_get_model_capabilities(stp_get_model_id(v));
+ description->p_type = STP_PARAMETER_TYPE_INVALID;
if (name == NULL)
- return (NULL);
+ return;
+
+ for (i = 0; i < float_parameter_count; i++)
+ if (strcmp(name, float_parameters[i].param.name) == 0)
+ {
+ stp_fill_parameter_settings(description,
+ &(float_parameters[i].param));
+ description->deflt.dbl = float_parameters[i].defval;
+ description->bounds.dbl.upper = float_parameters[i].max;
+ description->bounds.dbl.lower = float_parameters[i].min;
+ return;
+ }
+
+ for (i = 0; i < the_parameter_count; i++)
+ if (strcmp(name, the_parameters[i].name) == 0)
+ {
+ stp_fill_parameter_settings(description, &(the_parameters[i]));
+ break;
+ }
if (strcmp(name, "PageSize") == 0)
{
unsigned int height_limit, width_limit;
unsigned int min_height_limit, min_width_limit;
int papersizes = stp_known_papersizes();
- valptrs = stp_zalloc(sizeof(stp_param_t) * papersizes);
- *count = 0;
+ description->bounds.str = stp_string_list_create();
width_limit = caps->max_paper_width;
height_limit = caps->max_paper_height;
@@ -1201,186 +1204,153 @@ lexmark_parameters(const stp_printer_t printer, /* I - Printer model */
min_height_limit = caps->min_paper_height;
for (i = 0; i < papersizes; i++) {
- const stp_papersize_t pt = stp_get_papersize_by_index(i);
- unsigned int pwidth = stp_papersize_get_width(pt);
- unsigned int pheight = stp_papersize_get_height(pt);
- if (strlen(stp_papersize_get_name(pt)) > 0 &&
- pwidth <= width_limit && pheight <= height_limit &&
- (pheight >= min_height_limit || pheight == 0) &&
- (pwidth >= min_width_limit || pwidth == 0))
+ const stp_papersize_t *pt = stp_get_papersize_by_index(i);
+ if (strlen(pt->name) > 0 &&
+ pt->width <= width_limit && pt->height <= height_limit &&
+ (pt->height >= min_height_limit || pt->height == 0) &&
+ (pt->width >= min_width_limit || pt->width == 0))
{
- valptrs[*count].name = c_strdup(stp_papersize_get_name(pt));
- valptrs[*count].text = c_strdup(stp_papersize_get_text(pt));
- (*count)++;
+ if (stp_string_list_count(description->bounds.str) == 0)
+ description->deflt.str = pt->name;
+ stp_string_list_add_string(description->bounds.str,
+ pt->name, pt->text);
}
}
- return (valptrs);
}
else if (strcmp(name, "Resolution") == 0)
{
- int c= 0;
const lexmark_res_t *res;
+ description->bounds.str = stp_string_list_create();
res = *(caps->res_parameters); /* get resolution specific parameters of printer */
- for (i=0; res[i].hres; i++); /* get number of entries */
- valptrs = stp_zalloc(sizeof(stp_param_t) * i);
/* check for allowed resolutions */
while (res->hres)
{
- valptrs[c].name = c_strdup(res->name);
- valptrs[c++].text = c_strdup(_(res->text));
+ if (stp_string_list_count(description->bounds.str) == 0)
+ description->deflt.str = res->name;
+ stp_string_list_add_string(description->bounds.str,
+ res->name, _(res->text));
res++;
}
- *count= c;
- return (valptrs);
}
else if (strcmp(name, "InkType") == 0)
{
- for (i = 0; caps->ink_types[i].name != NULL; i++); /* get number of entries */
- valptrs = stp_zalloc(sizeof(stp_param_t) * i);
-
- *count = 0;
+ description->bounds.str = stp_string_list_create();
+ description->deflt.str = caps->ink_types[0].name;
for (i = 0; caps->ink_types[i].name != NULL; i++)
- {
- valptrs[*count].name = c_strdup(caps->ink_types[i].name);
- valptrs[*count].text = c_strdup(_(caps->ink_types[i].text));
- (*count)++;
- }
- return valptrs;
+ stp_string_list_add_string(description->bounds.str,
+ caps->ink_types[i].name,
+ _(caps->ink_types[i].text));
}
else if (strcmp(name, "MediaType") == 0)
{
- int nmediatypes = paper_type_count;
- valptrs = stp_zalloc(sizeof(stp_param_t) * nmediatypes);
- for (i = 0; i < nmediatypes; i++)
- {
- valptrs[i].name = c_strdup(lexmark_paper_list[i].name);
- valptrs[i].text = c_strdup(_(lexmark_paper_list[i].text));
- }
- *count = nmediatypes;
- return valptrs;
+ description->bounds.str = stp_string_list_create();
+ description->deflt.str = lexmark_paper_list[0].name;
+ for (i = 0; i < paper_type_count; i++)
+ stp_string_list_add_string(description->bounds.str,
+ lexmark_paper_list[i].name,
+ _(lexmark_paper_list[i].text));
}
else if (strcmp(name, "InputSlot") == 0)
{
- *count = 3;
- p = media_sources;
- }
- else
- return (NULL);
-
- valptrs = stp_zalloc(*count * sizeof(stp_param_t));
- for (i = 0; i < *count; i ++)
- {
- /* translate media_types and media_sources */
- valptrs[i].name = c_strdup(p[i].name);
- valptrs[i].text = c_strdup(_(p[i].text));
+ description->bounds.str = stp_string_list_create();
+ description->deflt.str = media_sources[0].name;
+ for (i = 0; i < sizeof(media_sources) / sizeof(stp_param_string_t); i++)
+ stp_string_list_add_string(description->bounds.str,
+ media_sources[i].name,
+ _(media_sources[i].name));
}
-
- return (valptrs);
+ else if (strcmp(name, "InkChannels") == 0)
+ {
+ if (caps->inks & LEXMARK_INK_CcMmYyK)
+ description->deflt.integer = 7;
+ else if (caps->inks & LEXMARK_INK_CcMmYK)
+ description->deflt.integer = 6;
+ else if (caps->inks & LEXMARK_INK_CMYK)
+ description->deflt.integer = 4;
+ else if (caps->inks & LEXMARK_INK_CMY)
+ description->deflt.integer = 3;
+ else
+ description->deflt.integer = 1;
+ description->bounds.integer.lower = -1;
+ description->bounds.integer.upper = -1;
+ }
+ else if (strcmp(name, "PrintingMode") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ stp_string_list_add_string
+ (description->bounds.str, "Color", _("Color"));
+ stp_string_list_add_string
+ (description->bounds.str, "BW", _("Black and White"));
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
}
-static const char *
-lexmark_default_parameters(const stp_printer_t printer,
- const char *ppd_file,
- const char *name)
-{
- int i;
-
- const lexmark_cap_t * caps= lexmark_get_model_capabilities(stp_printer_get_model(printer));
-
- if (name == NULL)
- return (NULL);
+/*
+ * 'lexmark_imageable_area()' - Return the imageable area of the page.
+ */
- if (strcmp(name, "PageSize") == 0)
- {
- unsigned int height_limit, width_limit;
- unsigned int min_height_limit, min_width_limit;
- int papersizes = stp_known_papersizes();
+static void
+internal_imageable_area(const stp_vars_t *v, /* I */
+ int use_paper_margins,
+ int *left, /* O - Left position in points */
+ int *right, /* O - Right position in points */
+ int *bottom, /* O - Bottom position in points */
+ int *top) /* O - Top position in points */
+{
+ int width, length; /* Size of page */
+ int left_margin = 0;
+ int right_margin = 0;
+ int bottom_margin = 0;
+ int top_margin = 0;
+ const char *media_size = stp_get_string_parameter(v, "PageSize");
+ const stp_papersize_t *pt = NULL;
+ const lexmark_cap_t *caps =
+ lexmark_get_model_capabilities(stp_get_model_id(v));
- width_limit = caps->max_paper_width;
- height_limit = caps->max_paper_height;
- min_width_limit = caps->min_paper_width;
- min_height_limit = caps->min_paper_height;
- for (i = 0; i < papersizes; i++)
- {
- const stp_papersize_t pt = stp_get_papersize_by_index(i);
- if (strlen(stp_papersize_get_name(pt)) > 0 &&
- stp_papersize_get_width(pt) >= min_width_limit &&
- stp_papersize_get_height(pt) >= min_height_limit &&
- stp_papersize_get_width(pt) <= width_limit &&
- stp_papersize_get_height(pt) <= height_limit)
- {
- return (stp_papersize_get_name(pt));
- }
- }
- return NULL;
- }
- else if (strcmp(name, "Resolution") == 0)
- {
- const lexmark_res_t *res = NULL;
+ if (media_size && use_paper_margins)
+ pt = stp_get_papersize_by_name(media_size);
- res = *(caps->res_parameters); /* get resolution specific parameters of printer */
- /* check for allowed resolutions */
- if (res->hres)
- {
- return (res->name);
- }
- return NULL;
- }
- else if (strcmp(name, "InkType") == 0)
- {
- return (caps->ink_types[0].name);
- }
- else if (strcmp(name, "MediaType") == 0)
- {
- return (lexmark_paper_list[0].name);
- }
- else if (strcmp(name, "InputSlot") == 0)
- {
- return (media_sources[0].name);
- }
- else
- return (NULL);
+ stp_default_media_size(v, &width, &length);
+ if (pt)
+ {
+ left_margin = pt->left;
+ right_margin = pt->right;
+ bottom_margin = pt->bottom;
+ top_margin = pt->top;
+ }
+ left_margin = max(left_margin, caps->border_left);
+ right_margin = max(right_margin, caps->border_right);
+ top_margin = max(top_margin, caps->border_top);
+ bottom_margin = max(bottom_margin, caps->border_bottom);
+
+ *left = left_margin;
+ *right = width - right_margin;
+ *top = top_margin;
+ *bottom = length - bottom_margin;
}
-
-/*
- * 'lexmark_imageable_area()' - Return the imageable area of the page.
- */
-
static void
-lexmark_imageable_area(const stp_printer_t printer, /* I - Printer model */
- const stp_vars_t v, /* I */
+lexmark_imageable_area(const stp_vars_t *v, /* I */
int *left, /* O - Left position in points */
int *right, /* O - Right position in points */
int *bottom, /* O - Bottom position in points */
int *top) /* O - Top position in points */
{
- int width, length; /* Size of page */
-
- const lexmark_cap_t * caps= lexmark_get_model_capabilities(stp_printer_get_model(printer));
-
- stp_default_media_size(printer, v, &width, &length);
-
- *left = caps->border_left;
- *right = width - caps->border_right;
- *top = length - caps->border_top;
- *bottom = caps->border_bottom;
-
- lxm3200_linetoeject = (length * 1200) / 72;
+ internal_imageable_area(v, 1, left, right, bottom, top);
}
static void
-lexmark_limit(const stp_printer_t printer, /* I - Printer model */
- const stp_vars_t v, /* I */
- int *width,
- int *height,
- int *min_width,
- int *min_height)
+lexmark_limit(const stp_vars_t *v, /* I */
+ int *width,
+ int *height,
+ int *min_width,
+ int *min_height)
{
- const lexmark_cap_t * caps= lexmark_get_model_capabilities(stp_printer_get_model(printer));
+ const lexmark_cap_t * caps= lexmark_get_model_capabilities(stp_get_model_id(v));
*width = caps->max_paper_width;
*height = caps->max_paper_height;
*min_width = caps->min_paper_width;
@@ -1390,8 +1360,8 @@ lexmark_limit(const stp_printer_t printer, /* I - Printer model */
static int
-lexmark_init_printer(const stp_vars_t v, const lexmark_cap_t * caps,
- int output_type,
+lexmark_init_printer(const stp_vars_t *v, const lexmark_cap_t * caps,
+ int printing_color,
const char *source_str,
int xdpi, int ydpi,
int page_width, int page_height,
@@ -1473,7 +1443,7 @@ lexmark_init_printer(const stp_vars_t v, const lexmark_cap_t * caps,
return 1;
}
-static void lexmark_deinit_printer(const stp_vars_t v, const lexmark_cap_t * caps)
+static void lexmark_deinit_printer(const stp_vars_t *v, const lexmark_cap_t * caps)
{
switch(caps->model) {
@@ -1540,7 +1510,7 @@ static void lexmark_deinit_printer(const stp_vars_t v, const lexmark_cap_t * cap
/* paper_shift() -- shift paper in printer -- units are unknown :-)
*/
-static void paper_shift(const stp_vars_t v, int offset, const lexmark_cap_t * caps)
+static void paper_shift(const stp_vars_t *v, int offset, const lexmark_cap_t * caps)
{
switch(caps->model) {
case m_z52:
@@ -1595,17 +1565,15 @@ lexmark_advance_buffer(unsigned char *buf, int len, int num)
}
#endif
-
-static int
-clean_color(unsigned char *line, int len)
+static double
+get_double_param(stp_vars_t *v, const char *param)
{
- return 0;
+ if (param && stp_check_float_parameter(v, param, STP_PARAMETER_ACTIVE))
+ return stp_get_float_parameter(v, param);
+ else
+ return 1.0;
}
-
-
-
-
/**********************************************************
* lexmark_print() - Print an image to a LEXMARK printer.
**********************************************************/
@@ -1616,27 +1584,23 @@ clean_color(unsigned char *line, int len)
The method lexmark_write() is responsible to handle the received lines
in a correct way.
*/
-static void
-lexmark_print(const stp_printer_t printer, /* I - Model */
- stp_image_t *image, /* I - Image to print */
- const stp_vars_t v)
+static int
+lexmark_do_print(stp_vars_t *v, stp_image_t *image)
{
- int i;
+ int status = 1;
int y; /* Looping vars */
int xdpi, ydpi; /* Resolution */
int n; /* Output number */
- unsigned short *out; /* Output pixels (16-bit) */
- unsigned char *in; /* Input pixels */
- int page_left, /* Left margin of page */
- page_right, /* Right margin of page */
- page_top, /* Top of page */
- page_bottom, /* Bottom of page */
- page_width, /* Width of page */
+ int page_width, /* Width of page */
page_height, /* Length of page */
+ page_left,
+ page_top,
+ page_right,
+ page_bottom,
page_true_height, /* True length of page */
out_width, /* Width of image on page in pixles */
out_height, /* Length of image on page */
- out_bpp, /* Output bytes per pixel */
+ out_channels, /* Output bytes per pixel */
length, /* Length of raster data in bytes*/
buf_length, /* Length of raster data buffer (dmt) */
errdiv, /* Error dividend */
@@ -1644,13 +1608,10 @@ lexmark_print(const stp_printer_t printer, /* I - Model */
errval, /* Current error value */
errline, /* Current raster line */
errlast; /* Last raster line loaded */
- stp_convert_t colorfunc = 0; /* Color conversion function... */
- int zero_mask;
+ unsigned zero_mask;
int image_height,
- image_width,
- image_bpp;
+ image_width;
int use_dmt = 0;
- void * dither;
int pass_length=0; /* count of inkjets for one pass */
int add_top_offset=0; /* additional top offset */
int printMode = 0;
@@ -1660,8 +1621,11 @@ lexmark_print(const stp_printer_t printer, /* I - Model */
double k_lower, k_upper;
int physical_xdpi = 0;
int physical_ydpi = 0;
+ int i;
- double lum_adjustment[49], sat_adjustment[49], hue_adjustment[49];
+ stp_curve_t *lum_adjustment = NULL;
+ stp_curve_t *hue_adjustment = NULL;
+ stp_curve_t *sat_adjustment = NULL;
/* weave parameters */
lexmark_linebufs_t cols;
@@ -1669,61 +1633,52 @@ lexmark_print(const stp_printer_t printer, /* I - Model */
int horizontal_passes;
int ncolors;
lexm_privdata_weave privdata;
- void * weave = NULL;
- stp_dither_data_t *dt;
lexmark_lineoff_t lineoff_buffer; /* holds the line offsets of each color */
- int doTestPrint = 0;
#ifdef DEBUG
testdata td;
#endif
- const unsigned char *cmap = stp_get_cmap(v);
- int model = stp_printer_get_model(printer);
- const char *resolution = stp_get_resolution(v);
- const char *media_type = stp_get_media_type(v);
- const char *media_source = stp_get_media_source(v);
- int output_type = stp_get_output_type(v);
- int orientation = stp_get_orientation(v);
- const char *ink_type = stp_get_ink_type(v);
- double scaling = stp_get_scaling(v);
- int top = stp_get_top(v);
- int left = stp_get_left(v);
- stp_vars_t nv = stp_allocate_copy(v);
+ int model = stp_get_model_id(v);
+ const char *resolution = stp_get_string_parameter(v, "Resolution");
+ const char *media_type = stp_get_string_parameter(v, "MediaType");
+ const char *media_source = stp_get_string_parameter(v, "InputSlot");
+ const char *print_mode = stp_get_string_parameter(v, "PrintingMode");
+ int printing_color = 0;
+ const char *ink_type = stp_get_string_parameter(v, "InkType");
+ int top = stp_get_top(v);
+ int left = stp_get_left(v);
const lexmark_cap_t * caps= lexmark_get_model_capabilities(model);
- const lexmark_res_t *res_para_ptr = lexmark_get_resolution_para(printer, resolution);
+ const lexmark_res_t *res_para_ptr =
+ lexmark_get_resolution_para(model, resolution);
const paper_t *media = get_media_type(media_type,caps);
- const lexmark_inkparam_t *ink_parameter = lexmark_get_ink_parameter(ink_type, output_type, caps, nv);
+ const lexmark_inkparam_t *ink_parameter;
+ stp_prune_inactive_options(v);
#ifdef DEBUG
dbgfileprn = lex_open_tmp_file(); /* open file with xx */
#endif
- if (ink_parameter == NULL)
+ if (!stp_verify(v))
{
- stp_eprintf(nv, "Illegal Ink Type specified; cannot print.\n");
- return;
+ stp_eprintf(v, "Print options not verified; cannot print.\n");
+ return 0;
}
+ if (strcmp(print_mode, "Color") == 0)
+ printing_color = 1;
- if (!stp_get_verified(nv))
+ ink_parameter = lexmark_get_ink_parameter(ink_type, printing_color, caps, v);
+
+ if (ink_parameter == NULL)
{
- stp_eprintf(nv, "Print options not verified; cannot print.\n");
- return;
+ stp_eprintf(v, "Illegal Ink Type specified; cannot print.\n");
+ return 0;
}
-
- /*
- * Setup a read-only pixel region for the entire image...
- */
-
- image->init(image);
- image_height = image->height(image);
- image_width = image->width(image);
- image_bpp = image->bpp(image);
-
+ stp_image_init(image);
source= lexmark_source_type(media_source,caps);
@@ -1732,20 +1687,16 @@ lexmark_print(const stp_printer_t printer, /* I - Model */
*/
if ((ink_parameter->used_colors == COLOR_MODE_K) ||
- ((caps->inks == LEXMARK_INK_K) &&
- output_type != OUTPUT_MONOCHROME))
+ (caps->inks == LEXMARK_INK_K))
{
- output_type = OUTPUT_GRAY;
- stp_set_output_type(nv, OUTPUT_GRAY);
+ printing_color = 0;
+ stp_set_string_parameter(v, "PrintingMode", "BW");
}
- stp_set_output_color_model(nv, COLOR_MODEL_CMY);
/*
* Choose the correct color conversion function...
*/
- colorfunc = stp_choose_colorfunc(output_type, image_bpp, cmap, &out_bpp, nv);
-
ncolors = ink_parameter->ncolors;
printMode = ink_parameter->used_colors;
@@ -1757,8 +1708,7 @@ lexmark_print(const stp_printer_t printer, /* I - Model */
* Figure out the output resolution...
*/
- lexmark_describe_resolution(printer,
- resolution, &xdpi,&ydpi);
+ stp_describe_resolution(v, &xdpi, &ydpi);
#ifdef DEBUG
stp_erprintf("lexmark: resolution=%dx%d\n",xdpi,ydpi);
#endif
@@ -1766,19 +1716,19 @@ lexmark_print(const stp_printer_t printer, /* I - Model */
switch (res_para_ptr->resid) {
case DPI300:
physical_xdpi = 300;
- physical_ydpi = lexmark_get_phys_resolution_vertical(printer);
+ physical_ydpi = lexmark_get_phys_resolution_vertical(model);
break;
case DPI600:
physical_xdpi = 600;
- physical_ydpi = lexmark_get_phys_resolution_vertical(printer);
+ physical_ydpi = lexmark_get_phys_resolution_vertical(model);
break;
case DPI1200:
case DPItest:
physical_xdpi = 1200;
- physical_ydpi = lexmark_get_phys_resolution_vertical(printer);
+ physical_ydpi = lexmark_get_phys_resolution_vertical(model);
break;
default:
- return;
+ return 0;
break;
}
/* adapt the density */
@@ -1808,12 +1758,10 @@ densityDivisor /= 1.2;
if (!strcmp(resolution+(strlen(resolution)-3),"DMT") &&
- (caps->features & LEXMARK_CAP_DMT) &&
- stp_get_output_type(nv) != OUTPUT_MONOCHROME &&
- output_type != OUTPUT_MONOCHROME) {
+ (caps->features & LEXMARK_CAP_DMT)) {
use_dmt= 1;
#ifdef DEBUG
- stp_erprintf("lexmark: using drop modulation technology\n");
+ stpi_erprintf("lexmark: using drop modulation technology\n");
#endif
}
@@ -1821,36 +1769,32 @@ densityDivisor /= 1.2;
* Compute the output size...
*/
- lexmark_imageable_area(printer, nv, &page_left, &page_right,
- &page_bottom, &page_top);
+ out_width = stp_get_width(v);
+ out_height = stp_get_height(v);
- stp_compute_page_parameters(page_right, page_left, page_top, page_bottom,
- scaling, image_width, image_height, image,
- &orientation, &page_width, &page_height,
- &out_width, &out_height, &left, &top);
+ internal_imageable_area(v, 0, &page_left, &page_right,
+ &page_bottom, &page_top);
+ left -= page_left;
+ top -= page_top;
+ page_width = page_right - page_left;
+ page_height = page_bottom - page_top;
#ifdef DEBUG
stp_erprintf("page_right %d, page_left %d, page_top %d, page_bottom %d, left %d, top %d\n",page_right, page_left, page_top, page_bottom,left, top);
#endif
- /*
- * Recompute the image length and width. If the image has been
- * rotated, these will change from previously.
- */
- image_height = image->height(image);
- image_width = image->width(image);
-
- stp_default_media_size(printer, nv, &n, &page_true_height);
+ image_height = stp_image_height(image);
+ image_width = stp_image_width(image);
+ stp_default_media_size(v, &n, &page_true_height);
+ lxm3200_linetoeject = (page_true_height * 1200) / 72;
- image->progress_init(image);
-
- if (!lexmark_init_printer(nv, caps, output_type,
+ if (!lexmark_init_printer(v, caps, printing_color,
media_source,
xdpi, ydpi, page_width, page_height,
top,left,use_dmt))
- return;
+ return 0;
/*
* Convert image size to printer resolution...
@@ -1938,6 +1882,15 @@ densityDivisor /= 1.2;
cols.p.M = stp_zalloc(buf_length+10);
}
+ if (cols.p.k)
+ {
+ if (cols.p.c)
+ stp_set_string_parameter(v, "STPIOutputType", "KCMY");
+ else
+ stp_set_string_parameter(v, "STPIOutputType", "Grayscale");
+ }
+ else
+ stp_set_string_parameter(v, "STPIOutputType", "CMY");
#ifdef DEBUG
stp_erprintf("lexmark: driver will use colors ");
@@ -1953,44 +1906,56 @@ densityDivisor /= 1.2;
/* initialize soft weaveing */
privdata.ink_parameter = ink_parameter;
- privdata.bidirectional = lexmark_print_bidirectional(printer, resolution);
+ privdata.bidirectional = lexmark_print_bidirectional(model, resolution);
privdata.outbuf = stp_malloc((((((pass_length/8)*11))+40) * out_width)+2000);
- stp_set_driver_data(nv, &privdata);
+ privdata.direction = 0;
+ stp_allocate_component_data(v, "Driver", NULL, NULL, &privdata);
/* lxm_nozzles_used = 1;*/
- weave = stp_initialize_weave(pass_length, /* jets */
- nozzle_separation, /* separation */
- horizontal_passes, /* h overample */
- res_para_ptr->vertical_passes, /* v passes */
- res_para_ptr->vertical_oversample, /* v oversample */
- ncolors, /* colors */
- 1, /* bits/pixel */
- out_width, /* line width */
- out_height,
- ((top * ydpi) / 72)+(((caps->offset_top_border+add_top_offset)*ydpi)
- /caps->y_raster_res),
- (page_height * ydpi) / 72,
- 1, /* weave_strategy */
- (int *)lexmark_head_offset(ydpi, ink_type, caps, ink_parameter, &lineoff_buffer),
- nv, flush_pass,
- stp_fill_uncompressed, /* fill_start */
- stp_pack_uncompressed, /* pack */
- stp_compute_uncompressed_linewidth); /* compute_linewidth */
-
-
-
+ stp_initialize_weave(v,
+ pass_length, /* jets */
+ nozzle_separation, /* separation */
+ horizontal_passes, /* h overample */
+ res_para_ptr->vertical_passes, /* v passes */
+ res_para_ptr->vertical_oversample, /* v oversample */
+ ncolors, /* colors */
+ 1, /* bits/pixel */
+ out_width, /* line width */
+ out_height,
+ ((top * ydpi) / 72)+(((caps->offset_top_border+add_top_offset)*ydpi)
+ /caps->y_raster_res),
+ (page_height * ydpi) / 72,
+ (const int *) lexmark_head_offset(ydpi, ink_type, caps, ink_parameter, &lineoff_buffer),
+ STP_WEAVE_ZIGZAG, /* weave_strategy */
+ flush_pass,
+ stp_fill_uncompressed, /* fill_start */
+ stp_pack_uncompressed, /* pack */
+ stp_compute_uncompressed_linewidth); /* compute_linewidth */
+ privdata.last_pass_offset = 0;
+ privdata.jets = pass_length;
+ privdata.ncolors = ncolors;
+ privdata.horizontal_weave = horizontal_passes;
+
+
+ if (!stp_check_float_parameter(v, "Density", STP_PARAMETER_DEFAULTED))
+ {
+ stp_set_float_parameter_active(v, "Density", STP_PARAMETER_ACTIVE);
+ stp_set_float_parameter(v, "Density", 1.0);
+ }
#ifdef DEBUG
- stp_erprintf("density is %f\n",stp_get_density(nv));
+ stp_erprintf("density is %f\n",stp_get_parameter(v, "Density"));
#endif
#ifdef DEBUG
- stp_erprintf("density is %f and will be changed to %f (%f)\n",stp_get_density(nv), stp_get_density(nv)/densityDivisor, densityDivisor);
+ stp_erprintf("density is %f and will be changed to %f (%f)\n",
+ stp_get_float_parameter(v, "Density"),
+ stp_get_float_parameter(v, "Density") / densityDivisor,
+ densityDivisor);
#endif
/* Lexmark do not have differnet pixel sizes. We have to correct the density according the print resolution. */
- stp_set_density(nv, stp_get_density(nv) / densityDivisor);
-
+ stp_scale_float_parameter(v, "Density", 1.0 / densityDivisor);
/*
@@ -2002,84 +1967,130 @@ densityDivisor /= 1.2;
else
k_lower = .25;
-
-
-
-
-
if (media)
{
- stp_set_density(nv, stp_get_density(nv) * media->base_density);
- stp_set_cyan(nv, stp_get_cyan(nv) * media->p_cyan);
- stp_set_magenta(nv, stp_get_magenta(nv) * media->p_magenta);
- stp_set_yellow(nv, stp_get_yellow(nv) * media->p_yellow);
+ stp_scale_float_parameter(v, "Density", media->base_density);
+ stp_scale_float_parameter(v, "Cyan", media->p_cyan);
+ stp_scale_float_parameter(v, "Magenta", media->p_magenta);
+ stp_scale_float_parameter(v, "Yellow", media->p_yellow);
k_lower *= media->k_lower_scale;
k_upper = media->k_upper;
}
else
{
- stp_set_density(nv, stp_get_density(nv) * .8);
+ stp_scale_float_parameter(v, "Density", .8);
k_lower *= .1;
k_upper = .5;
}
- if (stp_get_density(nv) > 1.0)
- stp_set_density(nv, 1.0);
-
- stp_compute_lut(nv, 256);
+ if (stp_get_float_parameter(v, "Density") > 1.0)
+ stp_set_float_parameter(v, "Density", 1.0);
#ifdef DEBUG
- stp_erprintf("density is %f\n",stp_get_density(nv));
+ stp_erprintf("density is %f\n",stp_get_float_parameter(v, "Density"));
#endif
- if (xdpi > ydpi)
- dither = stp_init_dither(image_width, out_width, 1, xdpi / ydpi, nv);
- else
- dither = stp_init_dither(image_width, out_width, ydpi / xdpi, 1, nv);
- for (i = 0; i <= NCOLORS; i++)
- stp_dither_set_black_level(dither, i, 1.0);
- stp_dither_set_black_lower(dither, k_lower);
- stp_dither_set_black_upper(dither, k_upper);
+ if (!stp_check_float_parameter(v, "GCRLower", STP_PARAMETER_ACTIVE))
+ stp_set_default_float_parameter(v, "GCRLower", k_lower);
+ if (!stp_check_float_parameter(v, "GCRUpper", STP_PARAMETER_ACTIVE))
+ stp_set_default_float_parameter(v, "GCRUpper", k_upper);
+ stp_dither_init(v, image, out_width, xdpi, ydpi);
/*
- stp_dither_set_black_lower(dither, .8 / ((1 << (use_dmt+1)) - 1));*/
- /*stp_dither_set_black_levels(dither, 0.5, 0.5, 0.5);
- stp_dither_set_black_lower(dither, 0.4);*/
+ stpi_dither_set_black_lower(dither, .8 / ((1 << (use_dmt+1)) - 1));*/
+ /*stpi_dither_set_black_levels(dither, 0.5, 0.5, 0.5);
+ stpi_dither_set_black_lower(dither, 0.4);*/
/*
if (use_glossy_film)
*/
- stp_dither_set_black_upper(dither, .8);
if (!use_dmt) {
if (cols.p.C)
- stp_dither_set_light_ink(dither, ECOLOR_C, .3333, stp_get_density(nv));
+ {
+ stp_dither_set_inks_full(v, STP_ECOLOR_C, 2, photo_dither_shades, 1.0,
+ 0.31 / .5);
+ }
if (cols.p.M)
- stp_dither_set_light_ink(dither, ECOLOR_M, .3333, stp_get_density(nv));
+ {
+ stp_dither_set_inks_full(v, STP_ECOLOR_M, 2, photo_dither_shades, 1.0,
+ 0.61 / .97);
+ }
if (cols.p.Y)
- stp_dither_set_light_ink(dither, ECOLOR_Y, .3333, stp_get_density(nv));
+ {
+ stp_dither_set_inks_full(v, STP_ECOLOR_Y, 2, photo_dither_shades, 1.0,
+ 0.08);
+ }
}
- switch (stp_get_image_type(nv))
- {
- case IMAGE_LINE_ART:
- stp_dither_set_ink_spread(dither, 19);
- break;
- case IMAGE_SOLID_TONE:
- stp_dither_set_ink_spread(dither, 15);
- break;
- case IMAGE_CONTINUOUS:
- stp_dither_set_ink_spread(dither, 14);
- break;
- }
- stp_dither_set_density(dither, stp_get_density(nv));
+ stp_channel_set_density_adjustment(v, STP_ECOLOR_K, 0,
+ get_double_param(v, "BlackDensity") *
+ get_double_param(v, "Density"));
+ stp_channel_set_density_adjustment(v, STP_ECOLOR_C, 0,
+ get_double_param(v, "CyanDensity") *
+ get_double_param(v, "Density"));
+ stp_channel_set_density_adjustment(v, STP_ECOLOR_M, 0,
+ get_double_param(v, "MagentaDensity") *
+ get_double_param(v, "Density"));
+ stp_channel_set_density_adjustment(v, STP_ECOLOR_Y, 0,
+ get_double_param(v, "YellowDensity") *
+ get_double_param(v, "Density"));
+ if (!use_dmt) {
+ if (cols.p.C)
+ {
+ stp_channel_set_density_adjustment
+ (v, STP_ECOLOR_C, 1, (get_double_param(v, "CyanDensity") *
+ get_double_param(v, "LightCyanTransition") *
+ get_double_param(v, "Density")));
+ }
+ if (cols.p.M)
+ {
+ stp_channel_set_density_adjustment
+ (v, STP_ECOLOR_M, 1, (get_double_param(v, "MagentaDensity") *
+ get_double_param(v, "LightMagentaTransition") *
+ get_double_param(v, "Density")));
+ }
+ if (cols.p.Y)
+ {
+ stp_channel_set_density_adjustment
+ (v, STP_ECOLOR_Y, 1, (get_double_param(v, "YellowDensity") *
+ get_double_param(v, "LightYellowTransition") *
+ get_double_param(v, "Density")));
+ }
+ }
/*
* Output the page...
*/
+ if (!stp_check_curve_parameter(v, "HueMap", STP_PARAMETER_ACTIVE) &&
+ media->hue_adjustment)
+ {
+ hue_adjustment = stp_read_and_compose_curves
+ (lexmark_hue_adjustment(caps, v),
+ media ? media->hue_adjustment : NULL, STP_CURVE_COMPOSE_ADD, 384);
+ stp_set_curve_parameter(v, "HueMap", hue_adjustment);
+ stp_curve_destroy(hue_adjustment);
+ }
+ if (!stp_check_curve_parameter(v, "LumMap", STP_PARAMETER_ACTIVE) &&
+ media->lum_adjustment)
+ {
+ lum_adjustment = stp_read_and_compose_curves
+ (lexmark_lum_adjustment(caps, v),
+ media ? media->lum_adjustment : NULL, STP_CURVE_COMPOSE_MULTIPLY, 384);
+ stp_set_curve_parameter(v, "LumMap", lum_adjustment);
+ stp_curve_destroy(lum_adjustment);
+ }
+ if (!stp_check_curve_parameter(v, "SatMap", STP_PARAMETER_ACTIVE) &&
+ media->sat_adjustment)
+ {
+ sat_adjustment = stp_read_and_compose_curves
+ (lexmark_sat_adjustment(caps, v),
+ media ? media->sat_adjustment : NULL, STP_CURVE_COMPOSE_MULTIPLY, 384);
+ stp_set_curve_parameter(v, "SatMap", sat_adjustment);
+ stp_curve_destroy(sat_adjustment);
+ }
- in = stp_zalloc(image_width * image_bpp);
- out = stp_zalloc(image_width * out_bpp * 2);
+ out_channels = stp_color_init(v, image, 65536);
/* calculate the memory we need for one line of the printer image (hopefully we are right) */
#ifdef DEBUG
@@ -2092,91 +2103,46 @@ densityDivisor /= 1.2;
errlast = -1;
errline = 0;
- if (lexmark_lum_adjustment(caps, nv))
- {
- for (i = 0; i < 49; i++)
- {
- lum_adjustment[i] = lexmark_lum_adjustment(caps, nv)[i];
- if (media && media->lum_adjustment) {
- lum_adjustment[i] *= media->lum_adjustment[i];
- }
- }
- }
- if (lexmark_sat_adjustment(caps, nv))
- {
- for (i = 0; i < 49; i++)
- {
- sat_adjustment[i] = lexmark_sat_adjustment(caps, nv)[i];
- if (media && media->sat_adjustment)
- sat_adjustment[i] *= media->sat_adjustment[i];
- }
- }
- if (lexmark_hue_adjustment(caps, nv))
+ if (cols.p.k)
{
- for (i = 0; i < 49; i++)
- {
- hue_adjustment[i] = lexmark_hue_adjustment(caps, nv)[i];
- if (media && media->hue_adjustment)
- hue_adjustment[i] += media->hue_adjustment[i];
- }
+ stp_dither_add_channel(v, cols.p.k, STP_ECOLOR_K, 0);
+ stp_channel_set_black_channel(v, STP_ECOLOR_K);
}
-
-
- dt = stp_create_dither_data();
- stp_add_channel(dt, cols.p.k, ECOLOR_K, 0);
- stp_add_channel(dt, cols.p.c, ECOLOR_C, 0);
- stp_add_channel(dt, cols.p.C, ECOLOR_C, 1);
- stp_add_channel(dt, cols.p.m, ECOLOR_M, 0);
- stp_add_channel(dt, cols.p.M, ECOLOR_M, 1);
- stp_add_channel(dt, cols.p.y, ECOLOR_Y, 0);
- stp_add_channel(dt, cols.p.Y, ECOLOR_Y, 1);
-
- for (y = 0; y < out_height; y ++) /* go through every pixle line of image */
+ if (cols.p.c)
+ stp_dither_add_channel(v, cols.p.c, STP_ECOLOR_C, 0);
+ if (cols.p.C)
+ stp_dither_add_channel(v, cols.p.C, STP_ECOLOR_C, 1);
+ if (cols.p.m)
+ stp_dither_add_channel(v, cols.p.m, STP_ECOLOR_M, 0);
+ if (cols.p.M)
+ stp_dither_add_channel(v, cols.p.M, STP_ECOLOR_M, 1);
+ if (cols.p.y)
+ stp_dither_add_channel(v, cols.p.y, STP_ECOLOR_Y, 0);
+ if (cols.p.Y)
+ stp_dither_add_channel(v, cols.p.Y, STP_ECOLOR_Y, 1);
+ privdata.hoffset = left;
+ privdata.ydpi = ydpi;
+ privdata.model = model;
+ privdata.width = out_width;
+ privdata.xdpi = xdpi;
+ privdata.physical_xdpi = physical_xdpi;
+
+ for (y = 0; y < out_height; y ++)
{
int duplicate_line = 1;
-#ifdef DEBUGyy
- stp_erprintf("print y %i\n", y);
-#endif
-
- if ((y & 63) == 0)
- image->note_progress(image, y, out_height);
-
if (errline != errlast)
{
errlast = errline;
duplicate_line = 0;
- if (image->get_row(image, in, errline) != STP_IMAGE_OK)
- break;
- /* stp_erprintf("errline %d , image height %d\n", errline, image_height);*/
-#if 1
- (*colorfunc)(nv, in, out, &zero_mask, image_width, image_bpp, cmap,
- hue_adjustment, lum_adjustment, sat_adjustment);
-#else
- (*colorfunc)(nv, in, out, &zero_mask, image_width, image_bpp, cmap,
- NULL, NULL, NULL);
-#endif
+ if (stp_color_get_row(v, image, errline, &zero_mask))
+ {
+ status = 2;
+ break;
+ }
}
- /* stp_erprintf("Let's dither %d %d %d\n", ((y)), buf_length, length);*/
- if (doTestPrint == 0) {
- stp_dither(out, y, dither, dt, duplicate_line, zero_mask);
- } else {
-#ifdef DEBUG
- readtestprintline(&td, &cols);
-#endif
- }
- clean_color(cols.p.c, length);
- clean_color(cols.p.m, length);
- clean_color(cols.p.y, length);
-
-
-#ifdef DEBUGyy
- stp_erprintf("Let's go stp_write_weave\n");
- stp_erprintf("length %d\n", length);
-#endif
-
- stp_write_weave(weave, length, ydpi, model, out_width, left,
- xdpi, physical_xdpi, (unsigned char **)cols.v);
+ stp_dither(v, y, duplicate_line, zero_mask, NULL);
+ stp_write_weave(v, (unsigned char **)cols.v);
errval += errmod;
errline += errdiv;
@@ -2185,68 +2151,59 @@ densityDivisor /= 1.2;
errval -= out_height;
errline ++;
}
-
}
- image->progress_conclude(image);
-
- stp_flush_all(weave, model, out_width, left,
- ydpi, xdpi, physical_xdpi);
-
-
-
- lexmark_deinit_printer(nv, caps);
-
- stp_free_dither_data(dt);
-
- if (doTestPrint == 0) {
- stp_free_dither(dither);
- }
+ stp_image_conclude(image);
+ stp_flush_all(v);
+ lexmark_deinit_printer(v, caps);
/*
* Cleanup...
*/
- stp_free_lut(nv);
- stp_free(in);
- stp_free(out);
- stp_destroy_weave(weave);
if (privdata.outbuf != NULL) {
stp_free(privdata.outbuf);/* !!!!!!!!!!!!!! */
}
- if (cols.p.k != NULL) stp_free(cols.p.k);
- if (cols.p.c != NULL) stp_free(cols.p.c);
- if (cols.p.m != NULL) stp_free(cols.p.m);
- if (cols.p.y != NULL) stp_free(cols.p.y);
- if (cols.p.C != NULL) stp_free(cols.p.C);
- if (cols.p.M != NULL) stp_free(cols.p.M);
- if (cols.p.Y != NULL) stp_free(cols.p.Y);
-
-
+ for (i = 0; i < NCHANNELS; i++)
+ if (cols.v[i])
+ stp_free(cols.v[i]);
#ifdef DEBUG
lex_tmp_file_deinit(dbgfileprn);
#endif
- stp_free_vars(nv);
+ return status;
+}
+
+static int
+lexmark_print(const stp_vars_t *v, stp_image_t *image)
+{
+ int status;
+ stp_vars_t *nv = stp_vars_create_copy(v);
+ stp_prune_inactive_options(nv);
+ status = lexmark_do_print(nv, image);
+ stp_vars_destroy(nv);
+ return status;
}
-const stp_printfuncs_t stp_lexmark_printfuncs =
+static const stp_printfuncs_t print_lexmark_printfuncs =
{
+ lexmark_list_parameters,
lexmark_parameters,
stp_default_media_size,
lexmark_imageable_area,
lexmark_limit,
lexmark_print,
- lexmark_default_parameters,
lexmark_describe_resolution,
+ lexmark_describe_output,
stp_verify_printer_params,
- stp_start_job,
- stp_end_job
+ NULL,
+ NULL
};
+
/* lexmark_init_line
This method is printer type dependent code.
@@ -2468,7 +2425,7 @@ typedef struct Lexmark_head_colors {
static int
-lexmark_write(const stp_vars_t v, /* I - Print file or command */
+lexmark_write(const stp_vars_t *v, /* I - Print file or command */
unsigned char *prnBuf, /* mem block to buffer output */
int *paperShift,
int direction,
@@ -2725,9 +2682,9 @@ lexmark_write(const stp_vars_t v, /* I - Print file or command */
#ifdef DEBUG
-const stp_vars_t lex_open_tmp_file() {
+const stp_vars_t *lex_open_tmp_file() {
int i;
- const stp_vars_t ofile;
+ const stp_vars_t *ofile;
char tmpstr[256];
stp_erprintf(" create file !\n");
@@ -2744,17 +2701,17 @@ const stp_vars_t lex_open_tmp_file() {
if (ofile == NULL)
{
stp_erprintf("Can't create file !\n");
- exit(2);
+ stp_abort();
}
return ofile;
}
-void lex_tmp_file_deinit(const stp_vars_t file) {
+void lex_tmp_file_deinit(const stp_vars_t *file) {
stp_erprintf("Close file %lx\n", file);
fclose(file);
}
-const stp_vars_t lex_write_tmp_file(const stp_vars_t ofile, void *data,int length) {
+const stp_vars_t *lex_write_tmp_file(const stp_vars_t *ofile, void *data,int length) {
fwrite(data, 1, length, ofile);
}
@@ -2763,22 +2720,26 @@ const stp_vars_t lex_write_tmp_file(const stp_vars_t ofile, void *data,int lengt
static void
-flush_pass(stp_softweave_t *sw, int passno, int model, int width,
- int hoffset, int ydpi, int xdpi, int physical_xdpi,
- int vertical_subpass)
+flush_pass(stp_vars_t *v, int passno, int vertical_subpass)
{
- const stp_vars_t nv = (sw->v);
- stp_lineoff_t *lineoffs = stp_get_lineoffsets_by_pass(sw, passno);
- stp_lineactive_t *lineactive = stp_get_lineactive_by_pass(sw, passno);
- const stp_linebufs_t *bufs = stp_get_linebases_by_pass(sw, passno);
- stp_pass_t *pass = stp_get_pass_by_pass(sw, passno);
- stp_linecount_t *linecount = stp_get_linecount_by_pass(sw, passno);
- int lwidth = (width + (sw->horizontal_weave - 1)) / sw->horizontal_weave;
- int microoffset = vertical_subpass & (sw->horizontal_weave - 1);
+ stp_lineoff_t *lineoffs = stp_get_lineoffsets_by_pass(v, passno);
+ stp_lineactive_t *lineactive = stp_get_lineactive_by_pass(v, passno);
+ const stp_linebufs_t *bufs = stp_get_linebases_by_pass(v, passno);
+ stp_pass_t *pass = stp_get_pass_by_pass(v, passno);
+ stp_linecount_t *linecount = stp_get_linecount_by_pass(v, passno);
+ lexm_privdata_weave *pd =
+ (lexm_privdata_weave *) stp_get_component_data(v, "Driver");
+ int width = pd->width;
+ int hoffset = pd->hoffset;
+ int model = pd->model;
+ int xdpi = pd->xdpi;
+ int ydpi = pd->ydpi;
+ int physical_xdpi = pd->physical_xdpi;
+ int lwidth = (width + (pd->horizontal_weave - 1)) / pd->horizontal_weave;
+ int microoffset = vertical_subpass & (pd->horizontal_weave - 1);
int prn_mode;
int j; /* color counter */
- lexm_privdata_weave *privdata_weave = stp_get_driver_data(nv);
const lexmark_cap_t * caps= lexmark_get_model_capabilities(model);
int paperShift;
Lexmark_head_colors head_colors[3]={{0, NULL, 0, 64/2, 64},
@@ -2786,15 +2747,13 @@ flush_pass(stp_softweave_t *sw, int passno, int model, int width,
{0, NULL, 128/2, 192/2, 64}};
-
-
#ifdef DEBUG
stp_erprintf("Lexmark: flush_pass, here we are !\n");
- stp_erprintf(" passno %i, sw->ncolors %i, width %d, lwidth %d, linecount k % d, linecount m % d, bitwidth %d\n",
- passno, sw->ncolors, width, lwidth, /*linecount[0].p.k, linecount[0].p.m,*/ sw->bitwidth);
- stp_erprintf("microoffset %d, vertical_subpass %d, sw->horizontal_weave %d\n", microoffset,vertical_subpass, sw->horizontal_weave);
+ stp_erprintf(" passno %i, pd->ncolors %i, width %d, lwidth %d, linecount k % d, linecount m % d, bitwidth %d\n",
+ passno, pd->ncolors, width, lwidth, /*linecount[0].p.k, linecount[0].p.m,*/ pd->bitwidth);
+ stp_erprintf("microoffset %d, vertical_subpass %d, pd->horizontal_weave %d\n", microoffset,vertical_subpass, pd->horizontal_weave);
- stp_erprintf("Lexmark: last_pass_offset %d, last_pass %d, logicalpassstart %d\n", sw->last_pass_offset, sw->last_pass, pass->logicalpassstart);
+ stp_erprintf("Lexmark: last_pass_offset %d, logicalpassstart %d\n", pd->last_pass_offset, pass->logicalpassstart);
stp_erprintf("Lexmark: vertical adapt: caps->y_raster_res %d, ydpi %d, \n", caps->y_raster_res, ydpi);
#endif
@@ -2827,14 +2786,14 @@ flush_pass(stp_softweave_t *sw, int passno, int model, int width,
break;
}
/* calculate paper shift and adapt actual resoution to physical positioning resolution */
- paperShift = (pass->logicalpassstart - sw->last_pass_offset) * (caps->y_raster_res/ydpi);
+ paperShift = (pass->logicalpassstart - pd->last_pass_offset) * (caps->y_raster_res/ydpi);
+
-
/*** do we have to print something with the color cartridge ? ***/
- if ((ECOLOR_C < sw->ncolors) && (lineactive[0].v[ECOLOR_C] > 0))
+ if ((STP_ECOLOR_C < pd->ncolors) && (lineactive[0].v[STP_ECOLOR_C] > 0))
{
- head_colors[0].line = bufs[0].v[ECOLOR_C];
- head_colors[0].used_jets = linecount[0].v[ECOLOR_C];
+ head_colors[0].line = bufs[0].v[STP_ECOLOR_C];
+ head_colors[0].used_jets = linecount[0].v[STP_ECOLOR_C];
}
else
{
@@ -2842,10 +2801,10 @@ flush_pass(stp_softweave_t *sw, int passno, int model, int width,
head_colors[0].used_jets = 0;
}
- if ((ECOLOR_M < sw->ncolors) && (lineactive[0].v[ECOLOR_M] > 0))
+ if ((STP_ECOLOR_M < pd->ncolors) && (lineactive[0].v[STP_ECOLOR_M] > 0))
{
- head_colors[1].line = bufs[0].v[ECOLOR_M];
- head_colors[1].used_jets = linecount[0].v[ECOLOR_M];
+ head_colors[1].line = bufs[0].v[STP_ECOLOR_M];
+ head_colors[1].used_jets = linecount[0].v[STP_ECOLOR_M];
}
else
{
@@ -2853,10 +2812,10 @@ flush_pass(stp_softweave_t *sw, int passno, int model, int width,
head_colors[1].used_jets = 0;
}
- if ((ECOLOR_Y < sw->ncolors) && (lineactive[0].v[ECOLOR_Y] > 0))
+ if ((STP_ECOLOR_Y < pd->ncolors) && (lineactive[0].v[STP_ECOLOR_Y] > 0))
{
- head_colors[2].line = bufs[0].v[ECOLOR_Y];
- head_colors[2].used_jets = linecount[0].v[ECOLOR_Y];
+ head_colors[2].line = bufs[0].v[STP_ECOLOR_Y];
+ head_colors[2].used_jets = linecount[0].v[STP_ECOLOR_Y];
}
else
{
@@ -2871,13 +2830,13 @@ flush_pass(stp_softweave_t *sw, int passno, int model, int width,
#ifdef DEBUG
stp_erprintf("lexmark_write: lwidth %d\n", lwidth);
#endif
- lexmark_write(nv, /* I - Print file or command */
- privdata_weave->outbuf,/*unsigned char *prnBuf, mem block to buffer output */
+ lexmark_write(v, /* I - Print file or command */
+ pd->outbuf,/*unsigned char *prnBuf, mem block to buffer output */
&paperShift, /* int *paperShift, */
- privdata_weave->direction, /* int direction, */
- sw->jets, /* num of inks to print */
+ pd->direction, /* int direction, */
+ pd->jets, /* num of inks to print */
caps, /* const lexmark_cap_t * caps, I - Printer model */
- privdata_weave->ink_parameter,
+ pd->ink_parameter,
xdpi, /* int xresolution, */
2, /* yCount,*/
head_colors, /* Lexmark_head_colors *head_colors, */
@@ -2887,21 +2846,21 @@ flush_pass(stp_softweave_t *sw, int passno, int model, int width,
lwidth, /* width, I - Printed width in pixles*/
hoffset+microoffset, /* offset I - Offset from left side in x_raster_res DPI */
0 /* dmt */);
- if (privdata_weave->bidirectional)
- privdata_weave->direction = (privdata_weave->direction +1) & 1;
+ if (pd->bidirectional)
+ pd->direction = (pd->direction +1) & 1;
}
-
+
/*** do we have to print somthing with black or photo cartridge ? ***/
/* we print with the photo or black cartidge */
- if (sw->jets != 208)
+ if (pd->jets != 208)
{
/* we have photo or black cartridge */
- if ((ECOLOR_LC < sw->ncolors) && (lineactive[0].v[ECOLOR_LC] > 0))
+ if ((STP_ECOLOR_LC < pd->ncolors) && (lineactive[0].v[STP_ECOLOR_LC] > 0))
{
- head_colors[0].line = bufs[0].v[ECOLOR_LC];
- head_colors[0].used_jets = linecount[0].v[ECOLOR_LC];
+ head_colors[0].line = bufs[0].v[STP_ECOLOR_LC];
+ head_colors[0].used_jets = linecount[0].v[STP_ECOLOR_LC];
}
else
{
@@ -2909,10 +2868,10 @@ flush_pass(stp_softweave_t *sw, int passno, int model, int width,
head_colors[0].used_jets = 0;
}
- if ((ECOLOR_LM < sw->ncolors) && (lineactive[0].v[ECOLOR_LM] > 0))
+ if ((STP_ECOLOR_LM < pd->ncolors) && (lineactive[0].v[STP_ECOLOR_LM] > 0))
{
- head_colors[1].line = bufs[0].v[ECOLOR_LM];
- head_colors[1].used_jets = linecount[0].v[ECOLOR_LM];
+ head_colors[1].line = bufs[0].v[STP_ECOLOR_LM];
+ head_colors[1].used_jets = linecount[0].v[STP_ECOLOR_LM];
}
else
{
@@ -2920,10 +2879,10 @@ flush_pass(stp_softweave_t *sw, int passno, int model, int width,
head_colors[1].used_jets = 0;
}
- if ((ECOLOR_K < sw->ncolors) && (lineactive[0].v[ECOLOR_K] > 0))
+ if ((STP_ECOLOR_K < pd->ncolors) && (lineactive[0].v[STP_ECOLOR_K] > 0))
{
- head_colors[2].line = bufs[0].v[ECOLOR_K];
- head_colors[2].used_jets = linecount[0].v[ECOLOR_K];
+ head_colors[2].line = bufs[0].v[STP_ECOLOR_K];
+ head_colors[2].used_jets = linecount[0].v[STP_ECOLOR_K];
}
else
{
@@ -2933,13 +2892,13 @@ flush_pass(stp_softweave_t *sw, int passno, int model, int width,
}
else
{
- if ((ECOLOR_K < sw->ncolors) && (lineactive[0].v[ECOLOR_K] > 0))
+ if ((STP_ECOLOR_K < pd->ncolors) && (lineactive[0].v[STP_ECOLOR_K] > 0))
{
/* we have black cartridge; we have to print with all 208 jets at once */
- head_colors[0].line = bufs[0].v[ECOLOR_K];
- head_colors[0].used_jets = linecount[0].v[ECOLOR_K];
+ head_colors[0].line = bufs[0].v[STP_ECOLOR_K];
+ head_colors[0].used_jets = linecount[0].v[STP_ECOLOR_K];
head_colors[0].head_nozzle_start = 0;
- head_colors[0].head_nozzle_end = sw->jets/2;
+ head_colors[0].head_nozzle_end = pd->jets/2;
head_colors[2].line = NULL;
head_colors[2].used_jets = 0;
head_colors[2].head_nozzle_start = 0;
@@ -2949,7 +2908,7 @@ flush_pass(stp_softweave_t *sw, int passno, int model, int width,
head_colors[1].head_nozzle_start = 0;
head_colors[1].head_nozzle_end = 0;
}
- else
+ else
{
head_colors[2].line = NULL;
head_colors[2].used_jets = 0;
@@ -2967,14 +2926,14 @@ flush_pass(stp_softweave_t *sw, int passno, int model, int width,
}
if ((head_colors[0].line != 0) || (head_colors[1].line != 0) || (head_colors[2].line != 0)) {
-
- lexmark_write(nv, /* I - Print file or command */
- privdata_weave->outbuf,/*unsigned char *prnBuf, mem block to buffer output */
+
+ lexmark_write(v, /* I - Print file or command */
+ pd->outbuf,/*unsigned char *prnBuf, mem block to buffer output */
&paperShift, /* int *paperShift, */
- privdata_weave->direction, /* int direction, */
- sw->jets, /* num of inks to print */
+ pd->direction, /* int direction, */
+ pd->jets, /* num of inks to print */
caps, /* const lexmark_cap_t * caps, I - Printer model */
- privdata_weave->ink_parameter,
+ pd->ink_parameter,
xdpi, /* int xresolution, */
2, /* yCount,*/
head_colors, /* Lexmark_head_colors *head_colors, */
@@ -2984,16 +2943,16 @@ flush_pass(stp_softweave_t *sw, int passno, int model, int width,
lwidth, /* width, I - Printed width in pixles*/
hoffset+microoffset, /* offset I - Offset from left side in x_raster_res DPI */
0 /* dmt */);
- if (privdata_weave->bidirectional)
+ if (pd->bidirectional)
{
- privdata_weave->direction = (privdata_weave->direction +1) & 1;
+ pd->direction = (pd->direction +1) & 1;
}
}
/* store paper position in respect if there was a paper shift */
- sw->last_pass_offset = pass->logicalpassstart - (paperShift / (caps->y_raster_res/ydpi));
+ pd->last_pass_offset = pass->logicalpassstart - (paperShift / (caps->y_raster_res/ydpi));
}
- for (j = 0; j < sw->ncolors; j++)
+ for (j = 0; j < pd->ncolors; j++)
{
lineoffs[0].v[j] = 0;
linecount[0].v[j] = 0;
@@ -3003,8 +2962,6 @@ flush_pass(stp_softweave_t *sw, int passno, int model, int width,
stp_erprintf("lexmark_write finished\n");
#endif
- sw->last_pass = pass->pass;
- pass->pass = -1;
}
@@ -3030,7 +2987,7 @@ static void testprint(testdata *td)
/* find "{" */
fscanf(td->ifile, "%[^{]{%[^\"]\"%d %d %d %d\",", dummy1, dummy2, &(td->x), &(td->y), &(td->cols), &(td->deep));
td->cols -= 1; /* we reduce it by one because fist color will be ignored */
- td->input_line = (char *)malloc(td->x+10);
+ td->input_line = (char *)stp_malloc(td->x+10);
stp_erprintf("<%s> <%s>\n", dummy1, dummy2);
stp_erprintf("%d %d %d %d\n", td->x, td->y, td->cols, td->deep);
if (td->cols > 16) {
@@ -3049,16 +3006,16 @@ static void testprint(testdata *td)
if (td->cols > 5) {
td->cols = 7;
for (icol=0; icol < td->cols; icol++) { /* we ignor the first color. It is "no dot". */
- linebufs.v[icol] = (char *)malloc((td->x+7)/8); /* allocate the color */
+ linebufs.v[icol] = (char *)stp_malloc((td->x+7)/8); /* allocate the color */
}
} else if (td->cols > 4) {
td->cols = 5;
for (icol=0; icol < td->cols; icol++) { /* we ignor the first color. It is "no dot". */
- linebufs.v[icol] = (char *)malloc((td->x+7)/8); /* allocate the color */
+ linebufs.v[icol] = (char *)stp_malloc((td->x+7)/8); /* allocate the color */
}
} else {
td->cols = 1;
- linebufs.v[0] = (char *)malloc((td->x+7)/8); /* allocate the color */
+ linebufs.v[0] = (char *)stp_malloc((td->x+7)/8); /* allocate the color */
}
} else {
stp_erprintf("can't open file !\n");
@@ -3100,3 +3057,43 @@ static void readtestprintline(testdata *td, lexmark_linebufs_t *linebufs)
}
#endif
+
+
+static stp_family_t print_lexmark_module_data =
+ {
+ &print_lexmark_printfuncs,
+ NULL
+ };
+
+static int
+print_lexmark_module_init(void)
+{
+ return stp_family_register(print_lexmark_module_data.printer_list);
+}
+
+
+static int
+print_lexmark_module_exit(void)
+{
+ return stp_family_unregister(print_lexmark_module_data.printer_list);
+}
+
+
+/* Module header */
+#define stp_module_version print_lexmark_LTX_stp_module_version
+#define stp_module_data print_lexmark_LTX_stp_module_data
+
+stp_module_version_t stp_module_version = {0, 0};
+
+stp_module_t stp_module_data =
+ {
+ "lexmark",
+ VERSION,
+ "Lexmark family driver",
+ STP_MODULE_CLASS_FAMILY,
+ NULL,
+ print_lexmark_module_init,
+ print_lexmark_module_exit,
+ (void *) &print_lexmark_module_data
+ };
+
diff --git a/src/main/print-list.c b/src/main/print-list.c
new file mode 100644
index 0000000..f3d0a4b
--- /dev/null
+++ b/src/main/print-list.c
@@ -0,0 +1,711 @@
+/*
+ * "$Id: print-list.c,v 1.23 2005/06/30 02:11:49 rlk Exp $"
+ *
+ * Gutenprint list functions. A doubly-linked list implementation,
+ * with callbacks for freeing, sorting, and retrieving nodes by name
+ * or long name.
+ *
+ * Copyright 2002 Roger Leigh (rleigh@debian.org)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * This file must include only standard C header files. The core code must
+ * compile on generic platforms that don't support glib, gimp, etc.
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+/** The internal representation of an stp_list_item_t list node. */
+struct stp_list_item
+{
+ void *data; /*!< Data */
+ struct stp_list_item *prev; /*!< Previous node */
+ struct stp_list_item *next; /*!< Next node */
+};
+
+/** The internal representation of an stp_list_t list. */
+struct stp_list
+{
+ int index_cache; /*!< Cached node index */
+ struct stp_list_item *start; /*!< Start node */
+ struct stp_list_item *end; /*!< End node */
+ struct stp_list_item *index_cache_node; /*!< Cached node (for index) */
+ int length; /*!< Number of nodes */
+ stp_node_freefunc freefunc; /*!< Callback to free node data */
+ stp_node_copyfunc copyfunc; /*!< Callback to copy node */
+ stp_node_namefunc namefunc; /*!< Callback to get node name */
+ stp_node_namefunc long_namefunc; /*!< Callback to get node long name */
+ stp_node_sortfunc sortfunc; /*!< Callback to compare (sort) nodes */
+ char *name_cache; /*!< Cached name */
+ struct stp_list_item *name_cache_node; /*!< Cached node (for name) */
+ char *long_name_cache; /*!< Cached long name */
+ struct stp_list_item *long_name_cache_node; /*!< Cached node (for long name) */
+};
+
+/**
+ * Cache a list node by its short name.
+ * @param list the list to use.
+ * @param name the short name.
+ * @param cache the node to cache.
+ */
+static void
+set_name_cache(stp_list_t *list,
+ const char *name,
+ stp_list_item_t *cache)
+{
+ if (list->name_cache)
+ stp_free(list->name_cache);
+ list->name_cache = NULL;
+ if (name)
+ list->name_cache = stp_strdup(name);
+ list->name_cache_node = cache;
+}
+
+/**
+ * Cache a list node by its long name.
+ * @param list the list to use.
+ * @param long_name the long name.
+ * @param cache the node to cache.
+ */
+static void
+set_long_name_cache(stp_list_t *list,
+ const char *long_name,
+ stp_list_item_t *cache)
+{
+ if (list->long_name_cache)
+ stp_free(list->long_name_cache);
+ list->long_name_cache = NULL;
+ if (long_name)
+ list->long_name_cache = stp_strdup(long_name);
+ list->long_name_cache_node = cache;
+}
+
+/**
+ * Clear cached nodes.
+ * @param list the list to use.
+ */
+static inline void
+clear_cache(stp_list_t *list)
+{
+ list->index_cache = 0;
+ list->index_cache_node = NULL;
+ set_name_cache(list, NULL, NULL);
+ set_long_name_cache(list, NULL, NULL);
+}
+
+void
+stp_list_node_free_data (void *item)
+{
+ stp_free(item);
+ stp_deprintf(STP_DBG_LIST, "stp_list_node_free_data destructor\n");
+}
+
+/** Check the validity of a list. */
+#define check_list(List) assert(List != NULL)
+
+/* List head functions.
+ * These functions operate on the list as a whole, and not the
+ * individual nodes in a list. */
+
+/* create a new list */
+stp_list_t *
+stp_list_create(void)
+{
+ stp_list_t *list =
+ stp_malloc(sizeof(stp_list_t));
+
+ /* initialise an empty list */
+ list->index_cache = 0;
+ list->length = 0;
+ list->start = NULL;
+ list->end = NULL;
+ list->index_cache_node = NULL;
+ list->freefunc = NULL;
+ list->namefunc = NULL;
+ list->long_namefunc = NULL;
+ list->sortfunc = NULL;
+ list->copyfunc = NULL;
+ list->name_cache = NULL;
+ list->name_cache_node = NULL;
+ list->long_name_cache = NULL;
+ list->long_name_cache_node = NULL;
+
+ stp_deprintf(STP_DBG_LIST, "stp_list_head constructor\n");
+ return list;
+}
+
+stp_list_t *
+stp_list_copy(const stp_list_t *list)
+{
+ stp_list_t *ret;
+ stp_node_copyfunc copyfunc = stp_list_get_copyfunc(list);
+ stp_list_item_t *item = list->start;
+
+ check_list(list);
+
+ ret = stp_list_create();
+ stp_list_set_copyfunc(ret, stp_list_get_copyfunc(list));
+ /* If we use default (shallow) copy, we can't free the elements of it */
+ if (stp_list_get_copyfunc(list))
+ stp_list_set_freefunc(ret, stp_list_get_freefunc(list));
+ stp_list_set_namefunc(ret, stp_list_get_namefunc(list));
+ stp_list_set_long_namefunc(ret, stp_list_get_long_namefunc(list));
+ stp_list_set_sortfunc(ret, stp_list_get_sortfunc(list));
+ while (item)
+ {
+ void *data = item->data;
+ if (copyfunc)
+ stp_list_item_create (ret, NULL, (*copyfunc)(data));
+ else
+ stp_list_item_create(ret, NULL, data);
+ item = stp_list_item_next(item);
+ }
+ return ret;
+}
+
+/* free a list, freeing all child nodes first */
+int
+stp_list_destroy(stp_list_t *list)
+{
+ stp_list_item_t *cur;
+ stp_list_item_t *next;
+
+ check_list(list);
+ clear_cache(list);
+ cur = list->start;
+ while(cur)
+ {
+ next = cur->next;
+ stp_list_item_destroy(list, cur);
+ cur = next;
+ }
+ stp_deprintf(STP_DBG_LIST, "stp_list_head destructor\n");
+ stp_free(list);
+
+ return 0;
+}
+
+int
+stp_list_get_length(const stp_list_t *list)
+{
+ check_list(list);
+ return list->length;
+}
+
+/* find a node */
+
+/* get the first node in the list */
+
+stp_list_item_t *
+stp_list_get_start(const stp_list_t *list)
+{
+ return list->start;
+}
+
+/* get the last node in the list */
+
+stp_list_item_t *
+stp_list_get_end(const stp_list_t *list)
+{
+ return list->end;
+}
+
+static stp_list_t *
+deconst_list(const stp_list_t *list)
+{
+ return (stp_list_t *) list;
+}
+
+/* get the node by its place in the list */
+stp_list_item_t *
+stp_list_get_item_by_index(const stp_list_t *list, int idx)
+{
+ stp_list_item_t *node = NULL;
+ stp_list_t *ulist = deconst_list(list);
+ int i; /* current index */
+ int d = 0; /* direction of list traversal, 0=forward */
+ int c = 0; /* use cache? */
+ check_list(list);
+
+ if (idx >= list->length)
+ return NULL;
+
+ /* see if using the cache is worthwhile */
+ if (list->index_cache)
+ {
+ if (idx < (list->length/2))
+ {
+ if (idx > abs(idx - list->index_cache))
+ c = 1;
+ else
+ d = 0;
+ }
+ else
+ {
+ if (list->length - 1 - idx >
+ abs (list->length - 1 - idx - list->index_cache))
+ c = 1;
+ else
+ d = 1;
+ }
+ }
+
+
+ if (c) /* use the cached index and node */
+ {
+ if (idx > list->index_cache) /* forward */
+ d = 0;
+ else /* backward */
+ d = 1;
+ i = list->index_cache;
+ node = list->index_cache_node;
+ }
+ else /* start from one end of the list */
+ {
+ if (d)
+ {
+ i = list->length - 1;
+ node = list->end;
+ }
+ else
+ {
+ i = 0;
+ node = list->start;
+ }
+ }
+
+ while (node && i != idx)
+ {
+ if (d)
+ {
+ i--;
+ node = node->prev;
+ }
+ else
+ {
+ i++;
+ node = node->next;
+ }
+ }
+
+ /* update cache */
+ ulist->index_cache = i;
+ ulist->index_cache_node = node;
+
+ return node;
+}
+
+/**
+ * Find an item in a list by its name.
+ * This internal helper is not optimised to use any caching.
+ * @param list the list to use.
+ * @param name the name to find.
+ * @returns a pointer to the list item, or NULL if the name is
+ * invalid or the list is empty.
+ */
+static stp_list_item_t *
+stp_list_get_item_by_name_internal(const stp_list_t *list, const char *name)
+{
+ stp_list_item_t *node = list->start;
+ while (node && strcmp(name, list->namefunc(node->data)))
+ {
+ node = node->next;
+ }
+ return node;
+}
+
+/* get the first node with name; requires a callback function to
+ read data */
+stp_list_item_t *
+stp_list_get_item_by_name(const stp_list_t *list, const char *name)
+{
+ stp_list_item_t *node = NULL;
+ stp_list_t *ulist = deconst_list(list);
+ check_list(list);
+
+ if (!list->namefunc)
+ return NULL;
+
+ if (list->name_cache && name && list->name_cache_node)
+ {
+ const char *new_name;
+ node = list->name_cache_node;
+ /* Is this the item we've cached? */
+ if (strcmp(name, list->name_cache) == 0 &&
+ strcmp(name, list->namefunc(node->data)) == 0)
+ return node;
+
+ /* If not, check the next item in case we're searching the list */
+ node = node->next;
+ if (node)
+ {
+ new_name = list->namefunc(node->data);
+ if (strcmp(name, new_name) == 0)
+ {
+ set_name_cache(ulist, new_name, node);
+ return node;
+ }
+ }
+ /* If not, check the index cache */
+ node = list->index_cache_node;
+ if (node)
+ {
+ new_name = list->namefunc(node->data);
+ if (strcmp(name, new_name) == 0)
+ {
+ set_name_cache(ulist, new_name, node);
+ return node;
+ }
+ }
+ }
+
+ node = stp_list_get_item_by_name_internal(list, name);
+
+ if (node)
+ set_name_cache(ulist, name, node);
+
+ return node;
+}
+
+
+/**
+ * Find an item in a list by its long name.
+ * This internal helper is not optimised to use any caching.
+ * @param list the list to use.
+ * @param long_name the long name to find.
+ * @returns a pointer to the list item, or NULL if the long name is
+ * invalid or the list is empty.
+ */
+static stp_list_item_t *
+stp_list_get_item_by_long_name_internal(const stp_list_t *list,
+ const char *long_name)
+{
+ stp_list_item_t *node = list->start;
+ while (node && strcmp(long_name, list->long_namefunc(node->data)))
+ {
+ node = node->next;
+ }
+ return node;
+}
+
+/* get the first node with long_name; requires a callack function to
+ read data */
+stp_list_item_t *
+stp_list_get_item_by_long_name(const stp_list_t *list, const char *long_name)
+{
+ stp_list_item_t *node = NULL;
+ stp_list_t *ulist = deconst_list(list);
+ check_list(list);
+
+ if (!list->long_namefunc)
+ return NULL;
+
+ if (list->long_name_cache && long_name && list->long_name_cache_node)
+ {
+ const char *new_long_name;
+ node = list->long_name_cache_node;
+ /* Is this the item we've cached? */
+ if (strcmp(long_name, list->long_name_cache) == 0 &&
+ strcmp(long_name, list->long_namefunc(node->data)) == 0)
+ return node;
+
+ /* If not, check the next item in case we're searching the list */
+ node = node->next;
+ if (node)
+ {
+ new_long_name = list->long_namefunc(node->data);
+ if (strcmp(long_name, new_long_name) == 0)
+ {
+ set_long_name_cache(ulist, new_long_name, node);
+ return node;
+ }
+ }
+ /* If not, check the index cache */
+ node = list->index_cache_node;
+ if (node)
+ {
+ new_long_name = list->long_namefunc(node->data);
+ if (strcmp(long_name, new_long_name) == 0)
+ {
+ set_long_name_cache(ulist, new_long_name, node);
+ return node;
+ }
+ }
+ }
+
+ node = stp_list_get_item_by_long_name_internal(list, long_name);
+
+ if (node)
+ set_long_name_cache(ulist, long_name, node);
+
+ return node;
+}
+
+
+/* callback for freeing data */
+void
+stp_list_set_freefunc(stp_list_t *list, stp_node_freefunc freefunc)
+{
+ check_list(list);
+ list->freefunc = freefunc;
+}
+
+stp_node_freefunc
+stp_list_get_freefunc(const stp_list_t *list)
+{
+ check_list(list);
+ return list->freefunc;
+}
+
+/* callback for copying data */
+void
+stp_list_set_copyfunc(stp_list_t *list, stp_node_copyfunc copyfunc)
+{
+ check_list(list);
+ list->copyfunc = copyfunc;
+}
+
+stp_node_copyfunc
+stp_list_get_copyfunc(const stp_list_t *list)
+{
+ check_list(list);
+ return list->copyfunc;
+}
+
+/* callback for getting data name */
+void
+stp_list_set_namefunc(stp_list_t *list, stp_node_namefunc namefunc)
+{
+ check_list(list);
+ list->namefunc = namefunc;
+}
+
+stp_node_namefunc
+stp_list_get_namefunc(const stp_list_t *list)
+{
+ check_list(list);
+ return list->namefunc;
+}
+
+/* callback for getting data long_name */
+void
+stp_list_set_long_namefunc(stp_list_t *list, stp_node_namefunc long_namefunc)
+{
+ check_list(list);
+ list->long_namefunc = long_namefunc;
+}
+
+stp_node_namefunc
+stp_list_get_long_namefunc(const stp_list_t *list)
+{
+ check_list(list);
+ return list->long_namefunc;
+}
+
+/* callback for sorting nodes */
+void
+stp_list_set_sortfunc(stp_list_t *list, stp_node_sortfunc sortfunc)
+{
+ check_list(list);
+ list->sortfunc = sortfunc;
+}
+
+stp_node_sortfunc
+stp_list_get_sortfunc(const stp_list_t *list)
+{
+ check_list(list);
+ return list->sortfunc;
+}
+
+
+/* list item functions */
+
+/* these functions operate on individual nodes in a list */
+
+/*
+ * create a new node in list, before next (may be null e.g. if sorting
+ * next is calculated automatically, else defaults to end). Must be
+ * initialised with data (null nodes are disallowed). The
+ * stp_list_item_t type can not exist unless it is associated with an
+ * stp_list_t list head.
+ */
+int
+stp_list_item_create(stp_list_t *list,
+ stp_list_item_t *next,
+ const void *data)
+{
+ stp_list_item_t *ln; /* list node to add */
+ stp_list_item_t *lnn; /* list node next */
+
+ check_list(list);
+
+ clear_cache(list);
+
+ ln = stp_malloc(sizeof(stp_list_item_t));
+ ln->prev = ln->next = NULL;
+
+ if (data)
+ ln->data = (void *) data;
+ else
+ {
+ stp_free(ln);
+ return 1;
+ }
+
+ if (list->sortfunc)
+ {
+ /* set np to the previous node (before the insertion */
+ lnn = list->end;
+ while (lnn)
+ {
+ if (list->sortfunc(lnn->data, ln->data) <= 0)
+ break;
+ lnn = lnn->prev;
+ }
+ }
+#if 0
+ /*
+ * This code #ifdef'ed out by Robert Krawitz on April 3, 2004.
+ * Setting a debug variable should not result in taking a materially
+ * different code path.
+ */
+ else if (stpi_get_debug_level() & STPI_DBG_LIST)
+ {
+ if (next)
+ {
+ lnn = list->start;
+ while (lnn)
+ {
+ if (lnn == next)
+ break;
+ lnn = lnn->prev;
+ }
+ }
+ else
+ lnn = NULL;
+ }
+#endif
+ else
+ lnn = next;
+
+ /* got lnp; now insert the new ln */
+
+ /* set next */
+ ln->next = lnn;
+
+ if (!ln->prev) /* insert at start of list */
+ {
+ if (list->start) /* list not empty */
+ ln->prev = list->end;
+ else
+ list->start = ln;
+ list->end = ln;
+ }
+
+ /* set prev (already set if at start of list) */
+
+ if (!ln->prev && ln->next) /* insert at end of list */
+ ln->prev = ln->next->prev;
+
+ if (list->start == ln->next) /* prev was old end */
+ {
+ list->start = ln;
+ }
+
+ /* set next->prev */
+ if (ln->next)
+ ln->next->prev = ln;
+
+ /* set prev->next */
+ if (ln->prev)
+ ln->prev->next = ln;
+
+ /* increment reference count */
+ list->length++;
+
+ stp_deprintf(STP_DBG_LIST, "stp_list_node constructor\n");
+ return 0;
+}
+
+/* remove a node from list */
+int
+stp_list_item_destroy(stp_list_t *list, stp_list_item_t *item)
+{
+ check_list(list);
+
+ clear_cache(list);
+ /* decrement reference count */
+ list->length--;
+
+ if (list->freefunc)
+ list->freefunc((void *) item->data);
+ if (item->prev)
+ item->prev->next = item->next;
+ else
+ list->start = item->next;
+ if (item->next)
+ item->next->prev = item->prev;
+ else
+ list->end = item->prev;
+ stp_free(item);
+
+ stp_deprintf(STP_DBG_LIST, "stp_list_node destructor\n");
+ return 0;
+}
+
+/* get previous node */
+stp_list_item_t *
+stp_list_item_prev(const stp_list_item_t *item)
+{
+ return item->prev;
+}
+
+/* get next node */
+stp_list_item_t *
+stp_list_item_next(const stp_list_item_t *item)
+{
+ return item->next;
+}
+
+/* get data for node */
+void *
+stp_list_item_get_data(const stp_list_item_t *item)
+{
+ return item->data;
+}
+
+/* set data for node */
+int
+stp_list_item_set_data(stp_list_item_t *item, void *data)
+{
+ if (data)
+ {
+ item->data = data;
+ return 0;
+ }
+ return 1; /* return error if data was NULL */
+}
diff --git a/src/main/print-olympus.c b/src/main/print-olympus.c
new file mode 100644
index 0000000..f879fba
--- /dev/null
+++ b/src/main/print-olympus.c
@@ -0,0 +1,2099 @@
+/*
+ * "$Id: print-olympus.c,v 1.55 2005/07/01 09:56:12 m0m Exp $"
+ *
+ * Print plug-in Olympus driver for the GIMP.
+ *
+ * Copyright 2003 Michael Mraka (Michael.Mraka@linux.cz)
+ *
+ * The plug-in is based on the code of the RAW plugin for the GIMP of
+ * Michael Sweet (mike@easysw.com) and Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * This file must include only standard C header files. The core code must
+ * compile on generic platforms that don't support glib, gimp, gtk, etc.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <string.h>
+#include <stdio.h>
+
+#ifdef __GNUC__
+#define inline __inline__
+#endif
+
+#define OLYMPUS_INTERLACE_NONE 0
+#define OLYMPUS_INTERLACE_LINE 1
+#define OLYMPUS_INTERLACE_PLANE 2
+
+#define OLYMPUS_FEATURE_NONE 0x00000000
+#define OLYMPUS_FEATURE_FULL_WIDTH 0x00000001
+#define OLYMPUS_FEATURE_FULL_HEIGHT 0x00000002
+#define OLYMPUS_FEATURE_BLOCK_ALIGN 0x00000004
+#define OLYMPUS_FEATURE_BORDERLESS 0x00000008
+#define OLYMPUS_FEATURE_WHITE_BORDER 0x00000010
+
+#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+#define MAX(a,b) (((a) > (b)) ? (a) : (b))
+
+static const char *zero = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
+
+typedef struct
+{
+ const char *output_type;
+ int output_channels;
+ const char *name;
+ const char *channel_order;
+} ink_t;
+
+typedef struct {
+ const ink_t *item;
+ size_t n_items;
+} ink_list_t;
+
+typedef struct {
+ const char* name;
+ int xdpi;
+ int ydpi;
+} olymp_resolution_t;
+
+typedef struct {
+ const olymp_resolution_t *item;
+ size_t n_items;
+} olymp_resolution_list_t;
+
+typedef struct {
+ const char* name;
+ const char* text;
+ int width_pt;
+ int height_pt;
+ int border_pt_left;
+ int border_pt_right;
+ int border_pt_top;
+ int border_pt_bottom;
+} olymp_pagesize_t;
+
+typedef struct {
+ const olymp_pagesize_t *item;
+ size_t n_items;
+} olymp_pagesize_list_t;
+
+typedef struct {
+ const char* res_name;
+ const char* pagesize_name;
+ int width_px;
+ int height_px;
+} olymp_printsize_t;
+
+typedef struct {
+ const olymp_printsize_t *item;
+ size_t n_items;
+} olymp_printsize_list_t;
+
+
+typedef struct {
+ const char *name;
+ const char *text;
+ const stp_raw_t seq;
+} laminate_t;
+
+typedef struct {
+ const laminate_t *item;
+ size_t n_items;
+} laminate_list_t;
+
+typedef struct
+{
+ int xdpi, ydpi;
+ int xsize, ysize;
+ char plane;
+ int block_min_x, block_min_y;
+ int block_max_x, block_max_y;
+ const char* pagesize;
+ const laminate_t* laminate;
+} olympus_privdata_t;
+
+static olympus_privdata_t privdata;
+
+typedef struct /* printer specific parameters */
+{
+ int model; /* printer model number from printers.xml*/
+ const ink_list_t *inks;
+ const olymp_resolution_list_t *resolution;
+ const olymp_pagesize_list_t *pages;
+ const olymp_printsize_list_t *printsize;
+ int interlacing; /* color interlacing scheme */
+ int block_size;
+ int features;
+ void (*printer_init_func)(stp_vars_t *);
+ void (*printer_end_func)(stp_vars_t *);
+ void (*plane_init_func)(stp_vars_t *);
+ void (*plane_end_func)(stp_vars_t *);
+ void (*block_init_func)(stp_vars_t *);
+ void (*block_end_func)(stp_vars_t *);
+ const char *adj_cyan; /* default color adjustment */
+ const char *adj_magenta;
+ const char *adj_yellow;
+ const laminate_list_t *laminate;
+} olympus_cap_t;
+
+
+static const olympus_cap_t* olympus_get_model_capabilities(int model);
+static const laminate_t* olympus_get_laminate_pattern(stp_vars_t *v);
+
+
+static const ink_t cmy_inks[] =
+{
+ { "CMY", 3, "CMY", "\1\2\3" },
+};
+
+static const ink_list_t cmy_ink_list =
+{
+ cmy_inks, sizeof(cmy_inks) / sizeof(ink_t)
+};
+
+static const ink_t ymc_inks[] =
+{
+ { "CMY", 3, "CMY", "\3\2\1" },
+};
+
+static const ink_list_t ymc_ink_list =
+{
+ ymc_inks, sizeof(ymc_inks) / sizeof(ink_t)
+};
+
+static const ink_t rgb_inks[] =
+{
+ { "RGB", 3, "RGB", "\1\2\3" },
+};
+
+static const ink_list_t rgb_ink_list =
+{
+ rgb_inks, sizeof(rgb_inks) / sizeof(ink_t)
+};
+
+static const ink_t bgr_inks[] =
+{
+ { "RGB", 3, "RGB", "\3\2\1" },
+};
+
+static const ink_list_t bgr_ink_list =
+{
+ bgr_inks, sizeof(bgr_inks) / sizeof(ink_t)
+};
+
+
+/* Olympus P-10 */
+static const olymp_resolution_t res_320dpi[] =
+{
+ { "320x320", 320, 320},
+};
+
+static const olymp_resolution_list_t res_320dpi_list =
+{
+ res_320dpi, sizeof(res_320dpi) / sizeof(olymp_resolution_t)
+};
+
+static const olymp_pagesize_t p10_page[] =
+{
+ { "w288h432", "4 x 6", -1, -1, 0, 0, 16, 0}, /* 4x6" */
+ { "B7", "3.5 x 5", -1, -1, 0, 0, 4, 0}, /* 3.5x5" */
+ { "Custom", NULL, -1, -1, 28, 28, 48, 48},
+};
+
+static const olymp_pagesize_list_t p10_page_list =
+{
+ p10_page, sizeof(p10_page) / sizeof(olymp_pagesize_t)
+};
+
+static const olymp_printsize_t p10_printsize[] =
+{
+ { "320x320", "w288h432", 1280, 1848},
+ { "320x320", "B7", 1144, 1591},
+ { "320x320", "Custom", 1280, 1848},
+};
+
+static const olymp_printsize_list_t p10_printsize_list =
+{
+ p10_printsize, sizeof(p10_printsize) / sizeof(olymp_printsize_t)
+};
+
+static void p10_printer_init_func(stp_vars_t *v)
+{
+ stp_zfwrite("\033R\033M\033S\2\033N\1\033D\1\033Y", 1, 15, v);
+ stp_zfwrite((privdata.laminate->seq).data, 1,
+ (privdata.laminate->seq).bytes, v); /* laminate */
+ stp_zfwrite("\033Z\0", 1, 3, v);
+}
+
+static void p10_printer_end_func(stp_vars_t *v)
+{
+ stp_zfwrite("\033P", 1, 2, v);
+}
+
+static void p10_block_init_func(stp_vars_t *v)
+{
+ stp_zprintf(v, "\033T%c", privdata.plane);
+ stp_put16_le(privdata.block_min_x, v);
+ stp_put16_le(privdata.block_min_y, v);
+ stp_put16_le(privdata.block_max_x + 1, v);
+ stp_put16_le(privdata.block_max_y + 1, v);
+}
+
+static const laminate_t p10_laminate[] =
+{
+ {"Coated", N_("Coated"), {1, "\x00"}},
+ {"None", N_("None"), {1, "\x02"}},
+};
+
+static const laminate_list_t p10_laminate_list =
+{
+ p10_laminate, sizeof(p10_laminate) / sizeof(laminate_t)
+};
+
+
+/* Olympus P-200 series */
+static const olymp_pagesize_t p200_page[] =
+{
+ { "ISOB7", "80x125mm", -1, -1, 16, 17, 33, 33},
+ { "Custom", NULL, -1, -1, 16, 17, 33, 33},
+};
+
+static const olymp_pagesize_list_t p200_page_list =
+{
+ p200_page, sizeof(p200_page) / sizeof(olymp_pagesize_t)
+};
+
+static const olymp_printsize_t p200_printsize[] =
+{
+ { "320x320", "ISOB7", 960, 1280},
+ { "320x320", "Custom", 960, 1280},
+};
+
+static const olymp_printsize_list_t p200_printsize_list =
+{
+ p200_printsize, sizeof(p200_printsize) / sizeof(olymp_printsize_t)
+};
+
+static void p200_printer_init_func(stp_vars_t *v)
+{
+ stp_zfwrite("S000001\0S010001\1", 1, 16, v);
+}
+
+static void p200_plane_init_func(stp_vars_t *v)
+{
+ stp_zprintf(v, "P0%d9999", 3 - privdata.plane+1 );
+ stp_put32_be(privdata.xsize * privdata.ysize, v);
+}
+
+static void p200_printer_end_func(stp_vars_t *v)
+{
+ stp_zprintf(v, "P000001\1");
+}
+
+static const char p200_adj_any[] =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"nowrap\" type=\"spline\" gamma=\"0\">\n"
+ "<sequence count=\"33\" lower-bound=\"0\" upper-bound=\"1\">\n"
+ "0.000000 0.039216 0.078431 0.117647 0.152941 0.192157 0.231373 0.266667\n"
+ "0.301961 0.341176 0.376471 0.411765 0.447059 0.482353 0.513725 0.549020\n"
+ "0.580392 0.615686 0.647059 0.678431 0.709804 0.741176 0.768627 0.796078\n"
+ "0.827451 0.854902 0.878431 0.905882 0.929412 0.949020 0.972549 0.988235\n"
+ "1.000000\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n";
+
+
+/* Olympus P-300 series */
+static const olymp_resolution_t p300_res[] =
+{
+ { "306x306", 306, 306},
+ { "153x153", 153, 153},
+};
+
+static const olymp_resolution_list_t p300_res_list =
+{
+ p300_res, sizeof(p300_res) / sizeof(olymp_resolution_t)
+};
+
+static const olymp_pagesize_t p300_page[] =
+{
+ { "A6", NULL, -1, -1, 28, 28, 48, 48},
+ { "Custom", NULL, -1, -1, 28, 28, 48, 48},
+};
+
+static const olymp_pagesize_list_t p300_page_list =
+{
+ p300_page, sizeof(p300_page) / sizeof(olymp_pagesize_t)
+};
+
+static const olymp_printsize_t p300_printsize[] =
+{
+ { "306x306", "A6", 1024, 1376},
+ { "153x153", "A6", 512, 688},
+ { "306x306", "Custom", 1024, 1376},
+ { "153x153", "Custom", 1024, 1376},
+};
+
+static const olymp_printsize_list_t p300_printsize_list =
+{
+ p300_printsize, sizeof(p300_printsize) / sizeof(olymp_printsize_t)
+};
+
+static void p300_printer_init_func(stp_vars_t *v)
+{
+ stp_zfwrite("\033\033\033C\033N\1\033F\0\1\033MS\xff\xff\xff"
+ "\033Z", 1, 19, v);
+ stp_put16_be(privdata.xdpi, v);
+ stp_put16_be(privdata.ydpi, v);
+}
+
+static void p300_plane_end_func(stp_vars_t *v)
+{
+ const char *c = "CMY";
+ stp_zprintf(v, "\033\033\033P%cS", c[privdata.plane-1]);
+ stp_deprintf(STP_DBG_OLYMPUS, "olympus: p300_plane_end_func: %c\n",
+ c[privdata.plane-1]);
+}
+
+static void p300_block_init_func(stp_vars_t *v)
+{
+ const char *c = "CMY";
+ stp_zprintf(v, "\033\033\033W%c", c[privdata.plane-1]);
+ stp_put16_be(privdata.block_min_y, v);
+ stp_put16_be(privdata.block_min_x, v);
+ stp_put16_be(privdata.block_max_y, v);
+ stp_put16_be(privdata.block_max_x, v);
+
+ stp_deprintf(STP_DBG_OLYMPUS, "olympus: p300_block_init_func: %d-%dx%d-%d\n",
+ privdata.block_min_x, privdata.block_max_x,
+ privdata.block_min_y, privdata.block_max_y);
+}
+
+static const char p300_adj_cyan[] =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"nowrap\" type=\"spline\" gamma=\"0\">\n"
+ "<sequence count=\"32\" lower-bound=\"0\" upper-bound=\"1\">\n"
+ "0.078431 0.211765 0.250980 0.282353 0.309804 0.333333 0.352941 0.368627\n"
+ "0.388235 0.403922 0.427451 0.443137 0.458824 0.478431 0.498039 0.513725\n"
+ "0.529412 0.545098 0.556863 0.576471 0.592157 0.611765 0.627451 0.647059\n"
+ "0.666667 0.682353 0.701961 0.713725 0.725490 0.729412 0.733333 0.737255\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n";
+
+static const char p300_adj_magenta[] =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"nowrap\" type=\"spline\" gamma=\"0\">\n"
+ "<sequence count=\"32\" lower-bound=\"0\" upper-bound=\"1\">\n"
+ "0.047059 0.211765 0.250980 0.278431 0.305882 0.333333 0.349020 0.364706\n"
+ "0.380392 0.396078 0.415686 0.435294 0.450980 0.466667 0.482353 0.498039\n"
+ "0.513725 0.525490 0.541176 0.556863 0.572549 0.592157 0.611765 0.631373\n"
+ "0.650980 0.670588 0.694118 0.705882 0.721569 0.741176 0.745098 0.756863\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n";
+
+static const char p300_adj_yellow[] =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"nowrap\" type=\"spline\" gamma=\"0\">\n"
+ "<sequence count=\"32\" lower-bound=\"0\" upper-bound=\"1\">\n"
+ "0.047059 0.117647 0.203922 0.250980 0.274510 0.301961 0.321569 0.337255\n"
+ "0.352941 0.364706 0.380392 0.396078 0.407843 0.423529 0.439216 0.450980\n"
+ "0.466667 0.482353 0.498039 0.513725 0.533333 0.552941 0.572549 0.596078\n"
+ "0.615686 0.635294 0.650980 0.666667 0.682353 0.690196 0.701961 0.713725\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n";
+
+
+/* Olympus P-400 series */
+static const olymp_resolution_t res_314dpi[] =
+{
+ { "314x314", 314, 314},
+};
+
+static const olymp_resolution_list_t res_314dpi_list =
+{
+ res_314dpi, sizeof(res_314dpi) / sizeof(olymp_resolution_t)
+};
+
+static const olymp_pagesize_t p400_page[] =
+{
+ { "A4", NULL, -1, -1, 22, 22, 54, 54},
+ { "c8x10", "A5 wide", -1, -1, 58, 59, 84, 85},
+ { "C6", "2 Postcards (A4)", -1, -1, 9, 9, 9, 9},
+ { "Custom", NULL, -1, -1, 22, 22, 54, 54},
+};
+
+static const olymp_pagesize_list_t p400_page_list =
+{
+ p400_page, sizeof(p400_page) / sizeof(olymp_pagesize_t)
+};
+
+static const olymp_printsize_t p400_printsize[] =
+{
+ { "314x314", "A4", 2400, 3200},
+ { "314x314", "c8x10", 2000, 2400},
+ { "314x314", "C6", 1328, 1920},
+ { "314x314", "Custom", 2400, 3200},
+};
+
+static const olymp_printsize_list_t p400_printsize_list =
+{
+ p400_printsize, sizeof(p400_printsize) / sizeof(olymp_printsize_t)
+};
+
+static void p400_printer_init_func(stp_vars_t *v)
+{
+ int wide = (strcmp(privdata.pagesize, "c8x10") == 0
+ || strcmp(privdata.pagesize, "C6") == 0);
+
+ stp_zprintf(v, "\033ZQ"); stp_zfwrite(zero, 1, 61, v);
+ stp_zprintf(v, "\033FP"); stp_zfwrite(zero, 1, 61, v);
+ stp_zprintf(v, "\033ZF");
+ stp_putc((wide ? '\x40' : '\x00'), v); stp_zfwrite(zero, 1, 60, v);
+ stp_zprintf(v, "\033ZS");
+ if (wide)
+ {
+ stp_put16_be(privdata.ysize, v);
+ stp_put16_be(privdata.xsize, v);
+ }
+ else
+ {
+ stp_put16_be(privdata.xsize, v);
+ stp_put16_be(privdata.ysize, v);
+ }
+ stp_zfwrite(zero, 1, 57, v);
+ stp_zprintf(v, "\033ZP"); stp_zfwrite(zero, 1, 61, v);
+}
+
+static void p400_plane_init_func(stp_vars_t *v)
+{
+ stp_zprintf(v, "\033ZC"); stp_zfwrite(zero, 1, 61, v);
+}
+
+static void p400_plane_end_func(stp_vars_t *v)
+{
+ stp_zprintf(v, "\033P"); stp_zfwrite(zero, 1, 62, v);
+}
+
+static void p400_block_init_func(stp_vars_t *v)
+{
+ int wide = (strcmp(privdata.pagesize, "c8x10") == 0
+ || strcmp(privdata.pagesize, "C6") == 0);
+
+ stp_zprintf(v, "\033Z%c", '3' - privdata.plane + 1);
+ if (wide)
+ {
+ stp_put16_be(privdata.ysize - privdata.block_max_y - 1, v);
+ stp_put16_be(privdata.xsize - privdata.block_max_x - 1, v);
+ stp_put16_be(privdata.block_max_y - privdata.block_min_y + 1, v);
+ stp_put16_be(privdata.block_max_x - privdata.block_min_x + 1, v);
+ }
+ else
+ {
+ stp_put16_be(privdata.block_min_x, v);
+ stp_put16_be(privdata.block_min_y, v);
+ stp_put16_be(privdata.block_max_x - privdata.block_min_x + 1, v);
+ stp_put16_be(privdata.block_max_y - privdata.block_min_y + 1, v);
+ }
+ stp_zfwrite(zero, 1, 53, v);
+}
+
+static const char p400_adj_cyan[] =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"nowrap\" type=\"spline\" gamma=\"0\">\n"
+ "<sequence count=\"32\" lower-bound=\"0\" upper-bound=\"1\">\n"
+ "0.003922 0.031373 0.058824 0.090196 0.125490 0.156863 0.184314 0.219608\n"
+ "0.250980 0.278431 0.309804 0.341176 0.376471 0.403922 0.439216 0.470588\n"
+ "0.498039 0.517647 0.533333 0.545098 0.564706 0.576471 0.596078 0.615686\n"
+ "0.627451 0.647059 0.658824 0.678431 0.690196 0.705882 0.721569 0.737255\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n";
+
+static const char p400_adj_magenta[] =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"nowrap\" type=\"spline\" gamma=\"0\">\n"
+ "<sequence count=\"32\" lower-bound=\"0\" upper-bound=\"1\">\n"
+ "0.003922 0.031373 0.062745 0.098039 0.125490 0.156863 0.188235 0.215686\n"
+ "0.250980 0.282353 0.309804 0.345098 0.376471 0.407843 0.439216 0.470588\n"
+ "0.501961 0.521569 0.549020 0.572549 0.592157 0.619608 0.643137 0.662745\n"
+ "0.682353 0.713725 0.737255 0.756863 0.784314 0.807843 0.827451 0.850980\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n";
+
+static const char p400_adj_yellow[] =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"nowrap\" type=\"spline\" gamma=\"0\">\n"
+ "<sequence count=\"32\" lower-bound=\"0\" upper-bound=\"1\">\n"
+ "0.003922 0.027451 0.054902 0.090196 0.121569 0.156863 0.184314 0.215686\n"
+ "0.250980 0.282353 0.309804 0.345098 0.372549 0.400000 0.435294 0.466667\n"
+ "0.498039 0.525490 0.552941 0.580392 0.607843 0.631373 0.658824 0.678431\n"
+ "0.698039 0.725490 0.760784 0.784314 0.811765 0.839216 0.866667 0.890196\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n";
+
+
+/* Olympus P-440 series */
+static const olymp_pagesize_t p440_page[] =
+{
+ { "A4", NULL, -1, -1, 10, 9, 54, 54},
+ { "c8x10", "A5 wide", -1, -1, 58, 59, 72, 72},
+ { "C6", "2 Postcards (A4)", -1, -1, 9, 9, 9, 9},
+ { "w255h581", "A6 wide", -1, -1, 25, 25, 25, 24},
+ { "Custom", NULL, -1, -1, 22, 22, 54, 54},
+};
+
+static const olymp_pagesize_list_t p440_page_list =
+{
+ p440_page, sizeof(p440_page) / sizeof(olymp_pagesize_t)
+};
+
+static const olymp_printsize_t p440_printsize[] =
+{
+ { "314x314", "A4", 2508, 3200},
+ { "314x314", "c8x10", 2000, 2508},
+ { "314x314", "C6", 1328, 1920},
+ { "314x314", "w255h581", 892, 2320},
+ { "314x314", "Custom", 2508, 3200},
+};
+
+static const olymp_printsize_list_t p440_printsize_list =
+{
+ p440_printsize, sizeof(p440_printsize) / sizeof(olymp_printsize_t)
+};
+
+static void p440_printer_init_func(stp_vars_t *v)
+{
+ int wide = ! (strcmp(privdata.pagesize, "A4") == 0
+ || strcmp(privdata.pagesize, "Custom") == 0);
+
+ stp_zprintf(v, "\033FP"); stp_zfwrite(zero, 1, 61, v);
+ stp_zprintf(v, "\033Y");
+ stp_zfwrite((privdata.laminate->seq).data, 1,
+ (privdata.laminate->seq).bytes, v); /* laminate */
+ stp_zfwrite(zero, 1, 61, v);
+ stp_zprintf(v, "\033FC"); stp_zfwrite(zero, 1, 61, v);
+ stp_zprintf(v, "\033ZF");
+ stp_putc((wide ? '\x40' : '\x00'), v); stp_zfwrite(zero, 1, 60, v);
+ stp_zprintf(v, "\033N\1"); stp_zfwrite(zero, 1, 61, v);
+ stp_zprintf(v, "\033ZS");
+ if (wide)
+ {
+ stp_put16_be(privdata.ysize, v);
+ stp_put16_be(privdata.xsize, v);
+ }
+ else
+ {
+ stp_put16_be(privdata.xsize, v);
+ stp_put16_be(privdata.ysize, v);
+ }
+ stp_zfwrite(zero, 1, 57, v);
+ if (strcmp(privdata.pagesize, "C6") == 0)
+ {
+ stp_zprintf(v, "\033ZC"); stp_zfwrite(zero, 1, 61, v);
+ }
+}
+
+static void p440_printer_end_func(stp_vars_t *v)
+{
+ stp_zprintf(v, "\033P"); stp_zfwrite(zero, 1, 62, v);
+}
+
+static void p440_block_init_func(stp_vars_t *v)
+{
+ int wide = ! (strcmp(privdata.pagesize, "A4") == 0
+ || strcmp(privdata.pagesize, "Custom") == 0);
+
+ stp_zprintf(v, "\033ZT");
+ if (wide)
+ {
+ stp_put16_be(privdata.ysize - privdata.block_max_y - 1, v);
+ stp_put16_be(privdata.xsize - privdata.block_max_x - 1, v);
+ stp_put16_be(privdata.block_max_y - privdata.block_min_y + 1, v);
+ stp_put16_be(privdata.block_max_x - privdata.block_min_x + 1, v);
+ }
+ else
+ {
+ stp_put16_be(privdata.block_min_x, v);
+ stp_put16_be(privdata.block_min_y, v);
+ stp_put16_be(privdata.block_max_x - privdata.block_min_x + 1, v);
+ stp_put16_be(privdata.block_max_y - privdata.block_min_y + 1, v);
+ }
+ stp_zfwrite(zero, 1, 53, v);
+}
+
+static void p440_block_end_func(stp_vars_t *v)
+{
+ int pad = (64 - (((privdata.block_max_x - privdata.block_min_x + 1)
+ * (privdata.block_max_y - privdata.block_min_y + 1) * 3) % 64)) % 64;
+ stp_deprintf(STP_DBG_OLYMPUS,
+ "olympus: max_x %d min_x %d max_y %d min_y %d\n",
+ privdata.block_max_x, privdata.block_min_x,
+ privdata.block_max_y, privdata.block_min_y);
+ stp_deprintf(STP_DBG_OLYMPUS, "olympus: olympus-p440 padding=%d\n", pad);
+ stp_zfwrite(zero, 1, pad, v);
+}
+
+
+/* Canon CP-100 series */
+static const olymp_pagesize_t cpx00_page[] =
+{
+ { "Postcard", "Postcard 148x100mm", -1, -1, 13, 13, 16, 18},
+ { "w253h337", "CP_L 89x119mm", -1, -1, 13, 13, 15, 15},
+ { "w244h155", "Card 54x86mm", -1, -1, 15, 15, 13, 13},
+ { "Custom", NULL, -1, -1, 13, 13, 16, 18},
+};
+
+static const olymp_pagesize_list_t cpx00_page_list =
+{
+ cpx00_page, sizeof(cpx00_page) / sizeof(olymp_pagesize_t)
+};
+
+static const olymp_printsize_t cpx00_printsize[] =
+{
+ { "314x314", "Postcard", 1232, 1808},
+ { "314x314", "w253h337", 1100, 1456},
+ { "314x314", "w244h155", 1040, 672},
+ { "314x314", "Custom", 1232, 1808},
+};
+
+static const olymp_printsize_list_t cpx00_printsize_list =
+{
+ cpx00_printsize, sizeof(cpx00_printsize) / sizeof(olymp_printsize_t)
+};
+
+static void cpx00_printer_init_func(stp_vars_t *v)
+{
+ char pg = (strcmp(privdata.pagesize, "Postcard") == 0 ? '\1' :
+ (strcmp(privdata.pagesize, "w253h337") == 0 ? '\2' :
+ (strcmp(privdata.pagesize, "w244h155") == 0 ? '\3' :
+ (strcmp(privdata.pagesize, "w283h566") == 0 ? '\4' :
+ '\1' ))));
+
+ stp_put16_be(0x4000, v);
+ stp_putc('\0', v);
+ stp_putc(pg, v);
+ stp_zfwrite(zero, 1, 8, v);
+}
+
+static void cpx00_plane_init_func(stp_vars_t *v)
+{
+ stp_put16_be(0x4001, v);
+ stp_put16_le(3 - privdata.plane, v);
+ stp_put32_le(privdata.xsize * privdata.ysize, v);
+ stp_zfwrite(zero, 1, 4, v);
+}
+
+static const char cpx00_adj_cyan[] =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"nowrap\" type=\"spline\" gamma=\"0\">\n"
+ "<sequence count=\"32\" lower-bound=\"0\" upper-bound=\"1\">\n"
+ "0.000000 0.035294 0.070588 0.101961 0.117647 0.168627 0.180392 0.227451\n"
+ "0.258824 0.286275 0.317647 0.341176 0.376471 0.411765 0.427451 0.478431\n"
+ "0.505882 0.541176 0.576471 0.611765 0.654902 0.678431 0.705882 0.737255\n"
+ "0.764706 0.792157 0.811765 0.839216 0.862745 0.894118 0.909804 0.925490\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n";
+
+static const char cpx00_adj_magenta[] =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"nowrap\" type=\"spline\" gamma=\"0\">\n"
+ "<sequence count=\"32\" lower-bound=\"0\" upper-bound=\"1\">\n"
+ "0.011765 0.019608 0.035294 0.047059 0.054902 0.101961 0.133333 0.156863\n"
+ "0.192157 0.235294 0.274510 0.321569 0.360784 0.403922 0.443137 0.482353\n"
+ "0.521569 0.549020 0.584314 0.619608 0.658824 0.705882 0.749020 0.792157\n"
+ "0.831373 0.890196 0.933333 0.964706 0.988235 0.992157 0.992157 0.996078\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n";
+
+static const char cpx00_adj_yellow[] =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"nowrap\" type=\"spline\" gamma=\"0\">\n"
+ "<sequence count=\"32\" lower-bound=\"0\" upper-bound=\"1\">\n"
+ "0.003922 0.015686 0.015686 0.023529 0.027451 0.054902 0.094118 0.129412\n"
+ "0.180392 0.219608 0.250980 0.286275 0.317647 0.341176 0.388235 0.427451\n"
+ "0.470588 0.509804 0.552941 0.596078 0.627451 0.682353 0.768627 0.796078\n"
+ "0.890196 0.921569 0.949020 0.968627 0.984314 0.992157 0.992157 1.000000\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n";
+
+
+/* Canon CP-220 series */
+static const olymp_pagesize_t cp220_page[] =
+{
+ { "Postcard", "Postcard 148x100mm", -1, -1, 13, 13, 16, 18},
+ { "w253h337", "CP_L 89x119mm", -1, -1, 13, 13, 15, 15},
+ { "w244h155", "Card 54x86mm", -1, -1, 15, 15, 13, 13},
+ { "w283h566", "Wide 200x100mm", -1, -1, 13, 13, 20, 20},
+ { "Custom", NULL, -1, -1, 13, 13, 16, 18},
+};
+
+static const olymp_pagesize_list_t cp220_page_list =
+{
+ cp220_page, sizeof(cp220_page) / sizeof(olymp_pagesize_t)
+};
+
+static const olymp_printsize_t cp220_printsize[] =
+{
+ { "314x314", "Postcard", 1232, 1808},
+ { "314x314", "w253h337", 1100, 1456},
+ { "314x314", "w244h155", 1040, 672},
+ { "314x314", "w283h566", 1232, 2416},
+ { "314x314", "Custom", 1232, 1808},
+};
+
+static const olymp_printsize_list_t cp220_printsize_list =
+{
+ cp220_printsize, sizeof(cp220_printsize) / sizeof(olymp_printsize_t)
+};
+
+
+/* Sony UP-DP10 */
+static const olymp_resolution_t updp10_res[] =
+{
+ { "300x300", 300, 300},
+};
+
+static const olymp_resolution_list_t updp10_res_list =
+{
+ updp10_res, sizeof(updp10_res) / sizeof(olymp_resolution_t)
+};
+
+static const olymp_pagesize_t updp10_page[] =
+{
+ { "w288h432", "UPC-10P23 (2:3)", -1, -1, 12, 12, 18, 18},
+ { "w288h387", "UPC-10P34 (3:4)", -1, -1, 12, 12, 16, 16},
+ { "w288h432", "UPC-10S01 (Sticker)", -1, -1, 12, 12, 18, 18},
+ { "Custom", NULL, -1, -1, 12, 12, 0, 0},
+};
+
+static const olymp_pagesize_list_t updp10_page_list =
+{
+ updp10_page, sizeof(updp10_page) / sizeof(olymp_pagesize_t)
+};
+
+static const olymp_printsize_t updp10_printsize[] =
+{
+ { "300x300", "w288h432", 1200, 1800},
+ { "300x300", "w288h387", 1200, 1600},
+ { "300x300", "Custom", 1200, 1800},
+};
+
+static const olymp_printsize_list_t updp10_printsize_list =
+{
+ updp10_printsize, sizeof(updp10_printsize) / sizeof(olymp_printsize_t)
+};
+
+static void updp10_printer_init_func(stp_vars_t *v)
+{
+ stp_zfwrite("\x98\xff\xff\xff\xff\xff\xff\xff"
+ "\x14\x00\x00\x00\x1b\x15\x00\x00"
+ "\x00\x0d\x00\x00\x00\x00\x00\xc7"
+ "\x00\x00\x00\x00", 1, 28, v);
+ stp_put16_be(privdata.xsize, v);
+ stp_put16_be(privdata.ysize, v);
+ stp_put32_le(privdata.xsize*privdata.ysize*3+11, v);
+ stp_zfwrite("\x1b\xea\x00\x00\x00\x00", 1, 6, v);
+ stp_put32_be(privdata.xsize*privdata.ysize*3, v);
+ stp_zfwrite("\x00", 1, 1, v);
+}
+
+static void updp10_printer_end_func(stp_vars_t *v)
+{
+ stp_zfwrite("\x12\x00\x00\x00\x1b\xe1\x00\x00"
+ "\x00\xb0\x00\x00\04", 1, 13, v);
+ stp_zfwrite((privdata.laminate->seq).data, 1,
+ (privdata.laminate->seq).bytes, v); /*laminate pattern*/
+ stp_zfwrite("\x00\x00\x00\x00" , 1, 4, v);
+ stp_put16_be(privdata.ysize, v);
+ stp_put16_be(privdata.xsize, v);
+ stp_zfwrite("\xff\xff\xff\xff\x09\x00\x00\x00"
+ "\x1b\xee\x00\x00\x00\x02\x00\x00"
+ "\x01\x07\x00\x00\x00\x1b\x0a\x00"
+ "\x00\x00\x00\x00\xfd\xff\xff\xff"
+ "\xff\xff\xff\xff\xf8\xff\xff\xff"
+ , 1, 40, v);
+}
+
+static const laminate_t updp10_laminate[] =
+{
+ {"Glossy", N_("Glossy"), {1, "\x00"}},
+ {"Texture", N_("Texture"), {1, "\x08"}},
+ {"Matte", N_("Matte"), {1, "\x0c"}},
+};
+
+static const laminate_list_t updp10_laminate_list =
+{
+ updp10_laminate, sizeof(updp10_laminate) / sizeof(laminate_t)
+};
+
+static const char updp10_adj_cyan[] =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"nowrap\" type=\"spline\" gamma=\"0\">\n"
+ "<sequence count=\"33\" lower-bound=\"0\" upper-bound=\"1\">\n"
+ "0.113725 0.188235 0.247059 0.286275 0.317647 0.345098 0.368627 0.384314\n"
+ "0.400000 0.407843 0.423529 0.439216 0.450980 0.466667 0.482353 0.498039\n"
+ "0.509804 0.525490 0.545098 0.560784 0.580392 0.596078 0.619608 0.643137\n"
+ "0.662745 0.686275 0.709804 0.729412 0.756863 0.780392 0.811765 0.843137\n"
+ "1.000000\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n";
+
+static const char updp10_adj_magenta[] =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"nowrap\" type=\"spline\" gamma=\"0\">\n"
+ "<sequence count=\"33\" lower-bound=\"0\" upper-bound=\"1\">\n"
+ "0.105882 0.211765 0.286275 0.333333 0.364706 0.388235 0.403922 0.415686\n"
+ "0.427451 0.439216 0.450980 0.462745 0.478431 0.494118 0.505882 0.521569\n"
+ "0.537255 0.552941 0.568627 0.584314 0.600000 0.619608 0.643137 0.662745\n"
+ "0.682353 0.709804 0.733333 0.760784 0.792157 0.823529 0.858824 0.890196\n"
+ "1.000000\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n";
+
+static const char updp10_adj_yellow[] =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<gutenprint>\n"
+ "<curve wrap=\"nowrap\" type=\"spline\" gamma=\"0\">\n"
+ "<sequence count=\"33\" lower-bound=\"0\" upper-bound=\"1\">\n"
+ "0.101961 0.160784 0.196078 0.227451 0.243137 0.254902 0.266667 0.286275\n"
+ "0.309804 0.337255 0.368627 0.396078 0.423529 0.443137 0.462745 0.478431\n"
+ "0.501961 0.517647 0.537255 0.556863 0.576471 0.596078 0.619608 0.643137\n"
+ "0.666667 0.690196 0.709804 0.737255 0.760784 0.780392 0.796078 0.803922\n"
+ "1.000000\n"
+ "</sequence>\n"
+ "</curve>\n"
+ "</gutenprint>\n";
+
+
+/* Fujifilm CX-400 */
+static const olymp_resolution_t cx400_res[] =
+{
+ { "317x316", 317, 316},
+};
+
+static const olymp_resolution_list_t cx400_res_list =
+{
+ cx400_res, sizeof(cx400_res) / sizeof(olymp_resolution_t)
+};
+
+static const olymp_pagesize_t cx400_page[] =
+{
+ { "w288h432", NULL, -1, -1, 23, 23, 28, 28},
+ { "w288h387", "4x5 3/8 (Digital Camera 3:4)", -1, -1, 23, 23, 27, 26},
+ { "w288h504", NULL, -1, -1, 23, 23, 23, 22},
+ { "Custom", NULL, -1, -1, 0, 0, 0, 0},
+};
+
+static const olymp_pagesize_list_t cx400_page_list =
+{
+ cx400_page, sizeof(cx400_page) / sizeof(olymp_pagesize_t)
+};
+
+static const olymp_printsize_t cx400_printsize[] =
+{
+ { "317x316", "w288h387", 1268, 1658},
+ { "317x316", "w288h432", 1268, 1842},
+ { "317x316", "w288h504", 1268, 2208},
+ { "317x316", "Custom", 1268, 1842},
+};
+
+static const olymp_printsize_list_t cx400_printsize_list =
+{
+ cx400_printsize, sizeof(cx400_printsize) / sizeof(olymp_printsize_t)
+};
+
+static void cx400_printer_init_func(stp_vars_t *v)
+{
+ char pg = '\0';
+ const char *pname = "XXXXXX";
+
+ stp_deprintf(STP_DBG_OLYMPUS,
+ "olympus: fuji driver %s\n", stp_get_driver(v));
+ if (strcmp(stp_get_driver(v),"fujifilm-cx400") == 0)
+ pname = "NX1000";
+ else if (strcmp(stp_get_driver(v),"fujifilm-cx550") == 0)
+ pname = "QX200\0";
+
+ stp_zfwrite("FUJIFILM", 1, 8, v);
+ stp_zfwrite(pname, 1, 6, v);
+ stp_putc('\0', v);
+ stp_put16_le(privdata.xsize, v);
+ stp_put16_le(privdata.ysize, v);
+ if (strcmp(privdata.pagesize,"w288h504") == 0)
+ pg = '\x0d';
+ else if (strcmp(privdata.pagesize,"w288h432") == 0)
+ pg = '\x0c';
+ else if (strcmp(privdata.pagesize,"w288h387") == 0)
+ pg = '\x0b';
+ stp_putc(pg, v);
+ stp_zfwrite("\x00\x00\x00\x00\x00\x01\x00\x01\x00\x00\x00\x00"
+ "\x00\x00\x2d\x00\x00\x00\x00", 1, 19, v);
+ stp_zfwrite("FUJIFILM", 1, 8, v);
+ stp_zfwrite(pname, 1, 6, v);
+ stp_putc('\1', v);
+}
+
+static const olymp_resolution_t all_resolutions[] =
+{
+ { "306x306", 306, 306},
+ { "153x153", 153, 153},
+ { "314x314", 314, 314},
+ { "300x300", 300, 300},
+ { "317x316", 317, 316},
+ { "320x320", 320, 320},
+};
+
+static const olymp_resolution_list_t all_res_list =
+{
+ all_resolutions, sizeof(all_resolutions) / sizeof(olymp_resolution_t)
+};
+
+static const olympus_cap_t olympus_model_capabilities[] =
+{
+ { /* Olympus P-10 */
+ 2,
+ &rgb_ink_list,
+ &res_320dpi_list,
+ &p10_page_list,
+ &p10_printsize_list,
+ OLYMPUS_INTERLACE_PLANE,
+ 1848,
+ OLYMPUS_FEATURE_FULL_WIDTH | OLYMPUS_FEATURE_FULL_HEIGHT,
+ &p10_printer_init_func, &p10_printer_end_func,
+ NULL, NULL,
+ &p10_block_init_func, NULL,
+ NULL, NULL, NULL, /* color profile/adjustment is built into printer */
+ &p10_laminate_list,
+ },
+ { /* Olympus P-200 */
+ 4,
+ &ymc_ink_list,
+ &res_320dpi_list,
+ &p200_page_list,
+ &p200_printsize_list,
+ OLYMPUS_INTERLACE_PLANE,
+ 1280,
+ OLYMPUS_FEATURE_FULL_WIDTH | OLYMPUS_FEATURE_BLOCK_ALIGN,
+ &p200_printer_init_func, &p200_printer_end_func,
+ &p200_plane_init_func, NULL,
+ NULL, NULL,
+ p200_adj_any, p200_adj_any, p200_adj_any,
+ NULL,
+ },
+ { /* Olympus P-300 */
+ 0,
+ &ymc_ink_list,
+ &p300_res_list,
+ &p300_page_list,
+ &p300_printsize_list,
+ OLYMPUS_INTERLACE_PLANE,
+ 16,
+ OLYMPUS_FEATURE_FULL_WIDTH | OLYMPUS_FEATURE_BLOCK_ALIGN,
+ &p300_printer_init_func, NULL,
+ NULL, &p300_plane_end_func,
+ &p300_block_init_func, NULL,
+ p300_adj_cyan, p300_adj_magenta, p300_adj_yellow,
+ NULL,
+ },
+ { /* Olympus P-400 */
+ 1,
+ &ymc_ink_list,
+ &res_314dpi_list,
+ &p400_page_list,
+ &p400_printsize_list,
+ OLYMPUS_INTERLACE_PLANE,
+ 180,
+ OLYMPUS_FEATURE_FULL_WIDTH | OLYMPUS_FEATURE_FULL_HEIGHT,
+ &p400_printer_init_func, NULL,
+ &p400_plane_init_func, &p400_plane_end_func,
+ &p400_block_init_func, NULL,
+ p400_adj_cyan, p400_adj_magenta, p400_adj_yellow,
+ NULL,
+ },
+ { /* Olympus P-440 */
+ 3,
+ &bgr_ink_list,
+ &res_314dpi_list,
+ &p440_page_list,
+ &p440_printsize_list,
+ OLYMPUS_INTERLACE_NONE,
+ 128,
+ OLYMPUS_FEATURE_FULL_WIDTH | OLYMPUS_FEATURE_FULL_HEIGHT,
+ &p440_printer_init_func, &p440_printer_end_func,
+ NULL, NULL,
+ &p440_block_init_func, &p440_block_end_func,
+ NULL, NULL, NULL, /* color profile/adjustment is built into printer */
+ &p10_laminate_list,
+ },
+ { /* Canon CP-100, CP-200, CP-300 */
+ 1000,
+ &ymc_ink_list,
+ &res_314dpi_list,
+ &cpx00_page_list,
+ &cpx00_printsize_list,
+ OLYMPUS_INTERLACE_PLANE,
+ 1808,
+ OLYMPUS_FEATURE_FULL_WIDTH | OLYMPUS_FEATURE_FULL_HEIGHT
+ | OLYMPUS_FEATURE_BORDERLESS | OLYMPUS_FEATURE_WHITE_BORDER,
+ &cpx00_printer_init_func, NULL,
+ &cpx00_plane_init_func, NULL,
+ NULL, NULL,
+ cpx00_adj_cyan, cpx00_adj_magenta, cpx00_adj_yellow,
+ NULL,
+ },
+ { /* Canon CP-220, CP-330, SELPHY CP-400, SELPHY CP-500, SELPHY CP-600 */
+ 1001,
+ &ymc_ink_list,
+ &res_314dpi_list,
+ &cp220_page_list,
+ &cp220_printsize_list,
+ OLYMPUS_INTERLACE_PLANE,
+ 1808,
+ OLYMPUS_FEATURE_FULL_WIDTH | OLYMPUS_FEATURE_FULL_HEIGHT
+ | OLYMPUS_FEATURE_BORDERLESS | OLYMPUS_FEATURE_WHITE_BORDER,
+ &cpx00_printer_init_func, NULL,
+ &cpx00_plane_init_func, NULL,
+ NULL, NULL,
+ cpx00_adj_cyan, cpx00_adj_magenta, cpx00_adj_yellow,
+ NULL,
+ },
+ { /* Sony UP-DP10 */
+ 2000,
+ &cmy_ink_list,
+ &updp10_res_list,
+ &updp10_page_list,
+ &updp10_printsize_list,
+ OLYMPUS_INTERLACE_NONE,
+ 1800,
+ OLYMPUS_FEATURE_FULL_WIDTH | OLYMPUS_FEATURE_FULL_HEIGHT
+ | OLYMPUS_FEATURE_BORDERLESS,
+ &updp10_printer_init_func, &updp10_printer_end_func,
+ NULL, NULL,
+ NULL, NULL,
+ updp10_adj_cyan, updp10_adj_magenta, updp10_adj_yellow,
+ &updp10_laminate_list,
+ },
+ { /* Fujifilm Printpix CX-400 */
+ 3000,
+ &rgb_ink_list,
+ &cx400_res_list,
+ &cx400_page_list,
+ &cx400_printsize_list,
+ OLYMPUS_INTERLACE_NONE,
+ 2208,
+ OLYMPUS_FEATURE_FULL_WIDTH | OLYMPUS_FEATURE_FULL_HEIGHT
+ | OLYMPUS_FEATURE_BORDERLESS,
+ &cx400_printer_init_func, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL, NULL, /* color profile/adjustment is built into printer */
+ NULL,
+ },
+ { /* Fujifilm Printpix CX-550 */
+ 3001,
+ &rgb_ink_list,
+ &cx400_res_list,
+ &cx400_page_list,
+ &cx400_printsize_list,
+ OLYMPUS_INTERLACE_NONE,
+ 2208,
+ OLYMPUS_FEATURE_FULL_WIDTH | OLYMPUS_FEATURE_FULL_HEIGHT
+ | OLYMPUS_FEATURE_BORDERLESS,
+ &cx400_printer_init_func, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL, NULL, /* color profile/adjustment is built into printer */
+ NULL,
+ },
+};
+
+static const stp_parameter_t the_parameters[] =
+{
+ {
+ "PageSize", N_("Page Size"), N_("Basic Printer Setup"),
+ N_("Size of the paper being printed to"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "MediaType", N_("Media Type"), N_("Basic Printer Setup"),
+ N_("Type of media (plain paper, photo paper, etc.)"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "InputSlot", N_("Media Source"), N_("Basic Printer Setup"),
+ N_("Source (input slot) of the media"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "Resolution", N_("Resolution"), N_("Basic Printer Setup"),
+ N_("Resolution and quality of the print"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "InkType", N_("Ink Type"), N_("Advanced Printer Setup"),
+ N_("Type of ink in the printer"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "Laminate", N_("Laminate Pattern"), N_("Advanced Printer Setup"),
+ N_("Laminate Pattern"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 0, -1, 1, 0
+ },
+ {
+ "Borderless", N_("Borderless"), N_("Advanced Printer Setup"),
+ N_("Print without borders"),
+ STP_PARAMETER_TYPE_BOOLEAN, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 0, -1, 1, 0
+ },
+ {
+ "PrintingMode", N_("Printing Mode"), N_("Core Parameter"),
+ N_("Printing Output Mode"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+};
+
+static int the_parameter_count =
+sizeof(the_parameters) / sizeof(const stp_parameter_t);
+
+typedef struct
+{
+ const stp_parameter_t param;
+ double min;
+ double max;
+ double defval;
+ int color_only;
+} float_param_t;
+
+static const float_param_t float_parameters[] =
+{
+ {
+ {
+ "CyanDensity", N_("Cyan Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the cyan balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 1, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "MagentaDensity", N_("Magenta Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the magenta balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 2, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "YellowDensity", N_("Yellow Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the yellow balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 3, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "BlackDensity", N_("Black Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the black balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 0, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+};
+
+static const int float_parameter_count =
+sizeof(float_parameters) / sizeof(const float_param_t);
+
+static const olympus_cap_t* olympus_get_model_capabilities(int model)
+{
+ int i;
+ int models = sizeof(olympus_model_capabilities) / sizeof(olympus_cap_t);
+
+ for (i=0; i<models; i++)
+ {
+ if (olympus_model_capabilities[i].model == model)
+ return &(olympus_model_capabilities[i]);
+ }
+ stp_deprintf(STP_DBG_OLYMPUS,
+ "olympus: model %d not found in capabilities list.\n", model);
+ return &(olympus_model_capabilities[0]);
+}
+
+static const laminate_t* olympus_get_laminate_pattern(stp_vars_t *v)
+{
+ const char *lpar = stp_get_string_parameter(v, "Laminate");
+ const olympus_cap_t *caps = olympus_get_model_capabilities(
+ stp_get_model_id(v));
+ const laminate_list_t *llist = caps->laminate;
+ const laminate_t *l = NULL;
+ int i;
+
+ for (i = 0; i < llist->n_items; i++)
+ {
+ l = &(llist->item[i]);
+ if (strcmp(l->name, lpar) == 0)
+ break;
+ }
+ return l;
+}
+
+static void
+olympus_printsize(const stp_vars_t *v,
+ int *width,
+ int *height)
+{
+ int i;
+ const char *page = stp_get_string_parameter(v, "PageSize");
+ const char *resolution = stp_get_string_parameter(v, "Resolution");
+ const olympus_cap_t *caps = olympus_get_model_capabilities(
+ stp_get_model_id(v));
+ const olymp_printsize_list_t *p = caps->printsize;
+
+ for (i = 0; i < p->n_items; i++)
+ {
+ if (strcmp(p->item[i].res_name,resolution) == 0 &&
+ strcmp(p->item[i].pagesize_name,page) == 0)
+ {
+ *width = p->item[i].width_px;
+ *height = p->item[i].height_px;
+ return;
+ }
+ }
+ stp_erprintf("olympus_printsize: printsize not found (%s, %s)\n",
+ page, resolution);
+}
+
+static int
+olympus_feature(const olympus_cap_t *caps, int feature)
+{
+ return ((caps->features & feature) == feature);
+}
+
+static stp_parameter_list_t
+olympus_list_parameters(const stp_vars_t *v)
+{
+ stp_parameter_list_t *ret = stp_parameter_list_create();
+ int i;
+
+ for (i = 0; i < the_parameter_count; i++)
+ stp_parameter_list_add_param(ret, &(the_parameters[i]));
+ for (i = 0; i < float_parameter_count; i++)
+ stp_parameter_list_add_param(ret, &(float_parameters[i].param));
+ return ret;
+}
+
+static void
+olympus_parameters(const stp_vars_t *v, const char *name,
+ stp_parameter_t *description)
+{
+ int i;
+ const olympus_cap_t *caps = olympus_get_model_capabilities(
+ stp_get_model_id(v));
+
+ description->p_type = STP_PARAMETER_TYPE_INVALID;
+ if (name == NULL)
+ return;
+
+ description->deflt.str = NULL;
+ for (i = 0; i < float_parameter_count; i++)
+ if (strcmp(name, float_parameters[i].param.name) == 0)
+ {
+ stp_fill_parameter_settings(description,
+ &(float_parameters[i].param));
+ description->deflt.dbl = float_parameters[i].defval;
+ description->bounds.dbl.upper = float_parameters[i].max;
+ description->bounds.dbl.lower = float_parameters[i].min;
+ }
+
+ for (i = 0; i < the_parameter_count; i++)
+ if (strcmp(name, the_parameters[i].name) == 0)
+ {
+ stp_fill_parameter_settings(description, &(the_parameters[i]));
+ break;
+ }
+ if (strcmp(name, "PageSize") == 0)
+ {
+ int default_specified = 0;
+ const olymp_pagesize_list_t *p = caps->pages;
+ const char* text;
+
+ description->bounds.str = stp_string_list_create();
+ for (i = 0; i < p->n_items; i++)
+ {
+ const stp_papersize_t *pt = stp_get_papersize_by_name(
+ p->item[i].name);
+
+ text = (p->item[i].text ? p->item[i].text : pt->text);
+ stp_string_list_add_string(description->bounds.str,
+ p->item[i].name, text);
+ if (! default_specified && pt && pt->width > 0 && pt->height > 0)
+ {
+ description->deflt.str = p->item[i].name;
+ default_specified = 1;
+ }
+ }
+ if (!default_specified)
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ else if (strcmp(name, "MediaType") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ description->is_active = 0;
+ }
+ else if (strcmp(name, "InputSlot") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ description->is_active = 0;
+ }
+ else if (strcmp(name, "Resolution") == 0)
+ {
+ char res_text[24];
+ const olymp_resolution_list_t *r = caps->resolution;
+
+ description->bounds.str = stp_string_list_create();
+ for (i = 0; i < r->n_items; i++)
+ {
+ sprintf(res_text, "%s DPI", r->item[i].name);
+ stp_string_list_add_string(description->bounds.str,
+ r->item[i].name, _(res_text));
+ }
+ if (r->n_items < 1)
+ description->is_active = 0;
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ else if (strcmp(name, "InkType") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ for (i = 0; i < caps->inks->n_items; i++)
+ stp_string_list_add_string(description->bounds.str,
+ caps->inks->item[i].name, caps->inks->item[i].name);
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ if (caps->inks->n_items < 2)
+ description->is_active = 0;
+ }
+ else if (strcmp(name, "Laminate") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ if (caps->laminate)
+ {
+ const laminate_list_t *llist = caps->laminate;
+
+ for (i = 0; i < llist->n_items; i++)
+ {
+ const laminate_t *l = &(llist->item[i]);
+ stp_string_list_add_string(description->bounds.str,
+ l->name, l->text);
+ }
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ description->is_active = 1;
+ }
+ }
+ else if (strcmp(name, "Borderless") == 0)
+ {
+ if (olympus_feature(caps, OLYMPUS_FEATURE_BORDERLESS))
+ description->is_active = 1;
+ }
+ else if (strcmp(name, "PrintingMode") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ stp_string_list_add_string
+ (description->bounds.str, "Color", _("Color"));
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ else
+ description->is_active = 0;
+}
+
+
+static void
+olympus_imageable_area(const stp_vars_t *v,
+ int *left,
+ int *right,
+ int *bottom,
+ int *top)
+{
+ int width, height;
+ int i;
+ const char *page = stp_get_string_parameter(v, "PageSize");
+ const stp_papersize_t *pt = stp_get_papersize_by_name(page);
+ const olympus_cap_t *caps = olympus_get_model_capabilities(
+ stp_get_model_id(v));
+ const olymp_pagesize_list_t *p = caps->pages;
+
+ for (i = 0; i < p->n_items; i++)
+ {
+ if (strcmp(p->item[i].name,pt->name) == 0)
+ {
+/*
+ if (p->item[i].width_pt >= 0)
+ stp_set_page_width(v, p->item[i].width_pt);
+ if (p->item[i].height_pt >= 0)
+ stp_set_page_height(v, p->item[i].height_pt);
+*/
+
+ stp_default_media_size(v, &width, &height);
+
+
+ if (olympus_feature(caps, OLYMPUS_FEATURE_BORDERLESS)
+ && stp_get_boolean_parameter(v, "Borderless"))
+ {
+ *left = 0;
+ *top = 0;
+ *right = width;
+ *bottom = height;
+ }
+ else
+ {
+ *left = p->item[i].border_pt_left;
+ *top = p->item[i].border_pt_top;
+ *right = width - p->item[i].border_pt_right;
+ *bottom = height - p->item[i].border_pt_bottom;
+ }
+ break;
+ }
+ }
+}
+
+static void
+olympus_limit(const stp_vars_t *v, /* I */
+ int *width, int *height,
+ int *min_width, int *min_height)
+{
+ *width = 65535;
+ *height = 65535;
+ *min_width = 1;
+ *min_height = 1;
+}
+
+static void
+olympus_describe_resolution(const stp_vars_t *v, int *x, int *y)
+{
+ const char *resolution = stp_get_string_parameter(v, "Resolution");
+ int i;
+
+ *x = -1;
+ *y = -1;
+ if (resolution)
+ {
+ for (i = 0; i < all_res_list.n_items; i++)
+ {
+ if (strcmp(resolution, all_res_list.item[i].name) == 0)
+ {
+ *x = all_res_list.item[i].xdpi;
+ *y = all_res_list.item[i].ydpi;
+ }
+ }
+ }
+ return;
+}
+
+static const char *
+olympus_describe_output(const stp_vars_t *v)
+{
+ return "CMY";
+}
+
+static unsigned short *
+olympus_get_cached_output(stp_vars_t *v,
+ stp_image_t *image,
+ unsigned short **cache,
+ int line, int size)
+{
+ unsigned zero_mask;
+
+ stp_deprintf(STP_DBG_OLYMPUS, "olympus: get row %d", line);
+ if (cache[line] == NULL)
+ {
+ stp_deprintf(STP_DBG_OLYMPUS, " (calling stp_color_get_row())\n");
+ if (!stp_color_get_row(v, image, line, &zero_mask))
+ {
+ cache[line] = stp_malloc(size);
+ memcpy(cache[line], stp_channel_get_output(v), size);
+ }
+ }
+ else
+ {
+ stp_deprintf(STP_DBG_OLYMPUS, " (cached)\n");
+ }
+ return cache[line];
+}
+
+/*
+ * olympus_print()
+ */
+static int
+olympus_do_print(stp_vars_t *v, stp_image_t *image)
+{
+ int i, j;
+ int y, min_y, max_y; /* Looping vars */
+ int min_x, max_x;
+ int out_channels, out_bytes;
+ unsigned short *final_out = NULL;
+ unsigned char *char_out = NULL;
+ unsigned short *real_out = NULL;
+ unsigned short *err_out = NULL;
+ unsigned short **rows = NULL; /* "cache" of rows read from image */
+ int char_out_width;
+ int status = 1;
+ int ink_channels = 1;
+ const char *ink_order = NULL;
+ stp_curve_t *adjustment = NULL;
+
+ int r_errdiv, r_errmod;
+ int r_errval = 0;
+ int r_errlast = -1;
+ int r_errline = 0;
+ int c_errdiv, c_errmod;
+ int c_errval = 0;
+ int c_errlast = -1;
+ int c_errcol = 0;
+
+ const int model = stp_get_model_id(v);
+ const char *ink_type = stp_get_string_parameter(v, "InkType");
+ const olympus_cap_t *caps = olympus_get_model_capabilities(model);
+ int max_print_px_width, max_print_px_height;
+ int xdpi, ydpi; /* Resolution */
+
+ /* image in pixels */
+ int image_px_width;
+ int image_px_height;
+
+ /* output in 1/72" */
+ int out_pt_width = stp_get_width(v);
+ int out_pt_height = stp_get_height(v);
+ int out_pt_left = stp_get_left(v);
+ int out_pt_top = stp_get_top(v);
+
+ /* output in pixels */
+ int out_px_width, out_px_height;
+ int out_px_left, out_px_right, out_px_top, out_px_bottom;
+
+ /* page in 1/72" */
+ int page_pt_width = stp_get_page_width(v);
+ int page_pt_height = stp_get_page_height(v);
+ int page_pt_left = 0;
+ int page_pt_right = 0;
+ int page_pt_top = 0;
+ int page_pt_bottom = 0;
+
+ /* page w/out borders in pixels (according to selected dpi) */
+ int print_px_width;
+ int print_px_height;
+
+ int pl;
+ unsigned char *zeros = NULL;
+
+ if (!stp_verify(v))
+ {
+ stp_eprintf(v, _("Print options not verified; cannot print.\n"));
+ return 0;
+ }
+
+ stp_image_init(image);
+ image_px_width = stp_image_width(image);
+ image_px_height = stp_image_height(image);
+
+ stp_describe_resolution(v, &xdpi, &ydpi);
+ olympus_printsize(v, &max_print_px_width, &max_print_px_height);
+
+ privdata.pagesize = stp_get_string_parameter(v, "PageSize");
+ if (caps->laminate)
+ privdata.laminate = olympus_get_laminate_pattern(v);
+
+ if (olympus_feature(caps, OLYMPUS_FEATURE_WHITE_BORDER))
+ stp_default_media_size(v, &page_pt_right, &page_pt_bottom);
+ else
+ olympus_imageable_area(v, &page_pt_left, &page_pt_right,
+ &page_pt_bottom, &page_pt_top);
+
+ print_px_width = MIN(max_print_px_width,
+ (page_pt_right - page_pt_left) * xdpi / 72);
+ print_px_height = MIN(max_print_px_height,
+ (page_pt_bottom - page_pt_top) * ydpi / 72);
+ out_px_width = out_pt_width * xdpi / 72;
+ out_px_height = out_pt_height * ydpi / 72;
+
+
+ /* if image size is close enough to output size send out original size */
+ if (out_px_width - image_px_width > -5
+ && out_px_width - image_px_width < 5
+ && out_px_height - image_px_height > -5
+ && out_px_height - image_px_height < 5)
+ {
+ out_px_width = image_px_width;
+ out_px_height = image_px_height;
+ }
+
+ out_px_width = MIN(out_px_width, print_px_width);
+ out_px_height = MIN(out_px_height, print_px_height);
+ out_px_left = MIN(((out_pt_left - page_pt_left) * xdpi / 72),
+ print_px_width - out_px_width);
+ out_px_top = MIN(((out_pt_top - page_pt_top) * ydpi / 72),
+ print_px_height - out_px_height);
+ out_px_right = out_px_left + out_px_width;
+ out_px_bottom = out_px_top + out_px_height;
+
+
+ stp_deprintf(STP_DBG_OLYMPUS,
+ "paper (pt) %d x %d\n"
+ "image (px) %d x %d\n"
+ "image (pt) %d x %d\n"
+ "* out (pt) %d x %d\n"
+ "* out (px) %d x %d\n"
+ "* left x top (pt) %d x %d\n"
+ "* left x top (px) %d x %d\n"
+ "border (pt) (%d - %d) = %d x (%d - %d) = %d\n"
+ "printable pixels (px) %d x %d\n"
+ "res (dpi) %d x %d\n",
+ page_pt_width, page_pt_height,
+ image_px_width, image_px_height,
+ image_px_width * 72 / xdpi, image_px_height * 72 / ydpi,
+ out_pt_width, out_pt_height,
+ out_px_width, out_px_height,
+ out_pt_left, out_pt_top,
+ out_px_left, out_px_top,
+ page_pt_right, page_pt_left, page_pt_right - page_pt_left,
+ page_pt_bottom, page_pt_top, page_pt_bottom - page_pt_top,
+ print_px_width, print_px_height,
+ xdpi, ydpi
+ );
+
+ privdata.xdpi = xdpi;
+ privdata.ydpi = ydpi;
+ privdata.xsize = print_px_width;
+ privdata.ysize = print_px_height;
+
+ stp_set_string_parameter(v, "STPIOutputType", "CMY");
+
+ if (caps->adj_cyan &&
+ !stp_check_curve_parameter(v, "CyanCurve", STP_PARAMETER_ACTIVE))
+ {
+ adjustment = stp_curve_create_from_string(caps->adj_cyan);
+ stp_set_curve_parameter(v, "CyanCurve", adjustment);
+ stp_set_curve_parameter_active(v, "CyanCurve", STP_PARAMETER_ACTIVE);
+ stp_curve_destroy(adjustment);
+ }
+ if (caps->adj_magenta &&
+ !stp_check_curve_parameter(v, "MagentaCurve", STP_PARAMETER_ACTIVE))
+ {
+ adjustment = stp_curve_create_from_string(caps->adj_magenta);
+ stp_set_curve_parameter(v, "MagentaCurve", adjustment);
+ stp_set_curve_parameter_active(v, "MagentaCurve", STP_PARAMETER_ACTIVE);
+ stp_curve_destroy(adjustment);
+ }
+ if (caps->adj_yellow &&
+ !stp_check_curve_parameter(v, "YellowCurve", STP_PARAMETER_ACTIVE))
+ {
+ adjustment = stp_curve_create_from_string(caps->adj_yellow);
+ stp_set_curve_parameter(v, "YellowCurve", adjustment);
+ stp_set_curve_parameter_active(v, "YellowCurve", STP_PARAMETER_ACTIVE);
+ stp_curve_destroy(adjustment);
+ }
+
+ if (ink_type)
+ {
+ for (i = 0; i < caps->inks->n_items; i++)
+ if (strcmp(ink_type, caps->inks->item[i].name) == 0)
+ {
+ stp_set_string_parameter(v, "STPIOutputType",
+ caps->inks->item[i].output_type);
+ ink_channels = caps->inks->item[i].output_channels;
+ ink_order = caps->inks->item[i].channel_order;
+ break;
+ }
+ }
+
+ stp_channel_reset(v);
+ for (i = 0; i < ink_channels; i++)
+ stp_channel_add(v, i, 0, 1.0);
+
+ out_channels = stp_color_init(v, image, 65536);
+
+#if 0
+ if (out_channels != ink_channels && out_channels != 1 && ink_channels != 1)
+ {
+ stp_eprintf(v, "Internal error! Output channels or input channels must be 1\n");
+ return 0;
+ }
+#endif
+
+ rows = stp_zalloc(image_px_height * sizeof(unsigned short *));
+ err_out = stp_malloc(print_px_width * ink_channels * 2);
+ if (out_channels != ink_channels)
+ final_out = stp_malloc(print_px_width * ink_channels * 2);
+
+ stp_set_float_parameter(v, "Density", 1.0);
+
+ if (ink_type &&
+ (strcmp(ink_type, "RGB") == 0 || strcmp(ink_type, "BGR") == 0))
+ {
+ zeros = stp_malloc(ink_channels * print_px_width + 1);
+ (void) memset(zeros, '\xff', ink_channels * print_px_width + 1);
+ }
+ else
+ zeros = stp_zalloc(ink_channels * print_px_width + 1);
+
+ out_bytes = (caps->interlacing == OLYMPUS_INTERLACE_PLANE ? 1 : ink_channels);
+
+ /* printer init */
+ if (caps->printer_init_func)
+ {
+ stp_deprintf(STP_DBG_OLYMPUS, "olympus: caps->printer_init\n");
+ (*(caps->printer_init_func))(v);
+ }
+
+ if (olympus_feature(caps, OLYMPUS_FEATURE_FULL_HEIGHT))
+ {
+ min_y = 0;
+ max_y = print_px_height - 1;
+ }
+ else if (olympus_feature(caps, OLYMPUS_FEATURE_BLOCK_ALIGN))
+ {
+ min_y = out_px_top - (out_px_top % caps->block_size);
+ /* floor to multiple of block_size */
+ max_y = (out_px_bottom - 1) + (caps->block_size - 1)
+ - ((out_px_bottom - 1) % caps->block_size);
+ /* ceil to multiple of block_size */
+ }
+ else
+ {
+ min_y = out_px_top;
+ max_y = out_px_bottom - 1;
+ }
+
+ if (olympus_feature(caps, OLYMPUS_FEATURE_FULL_WIDTH))
+ {
+ min_x = 0;
+ max_x = print_px_width - 1;
+ }
+ else
+ {
+ min_x = out_px_left;
+ max_x = out_px_right;
+ }
+
+ r_errdiv = image_px_height / out_px_height;
+ r_errmod = image_px_height % out_px_height;
+ c_errdiv = image_px_width / out_px_width;
+ c_errmod = image_px_width % out_px_width;
+
+ for (pl = 0; pl < (caps->interlacing == OLYMPUS_INTERLACE_PLANE
+ ? ink_channels : 1); pl++)
+ {
+ r_errval = 0;
+ r_errlast = -1;
+ r_errline = 0;
+
+ privdata.plane = ink_order[pl];
+ stp_deprintf(STP_DBG_OLYMPUS, "olympus: plane %d\n", privdata.plane);
+
+ /* plane init */
+ if (caps->plane_init_func)
+ {
+ stp_deprintf(STP_DBG_OLYMPUS, "olympus: caps->plane_init\n");
+ (*(caps->plane_init_func))(v);
+ }
+
+ for (y = min_y; y <= max_y; y++)
+ {
+ unsigned short *out;
+ int duplicate_line = 1;
+/* unsigned zero_mask; */
+
+ if (((y - min_y) % caps->block_size) == 0)
+ {
+ /* block init */
+ privdata.block_min_y = y;
+ privdata.block_min_x = min_x;
+ privdata.block_max_y = MIN(y + caps->block_size - 1, max_y);
+ privdata.block_max_x = max_x;
+
+ if (caps->block_init_func)
+ {
+ stp_deprintf(STP_DBG_OLYMPUS,
+ "olympus: caps->block_init\n");
+ (*(caps->block_init_func))(v);
+ }
+ }
+
+ if (y < out_px_top || y >= out_px_bottom)
+ stp_zfwrite((char *) zeros, out_bytes, print_px_width, v);
+ else
+ {
+ if (olympus_feature(caps, OLYMPUS_FEATURE_FULL_WIDTH)
+ && out_px_left > 0)
+ {
+ stp_zfwrite((char *) zeros, out_bytes, out_px_left, v);
+ /* stp_erprintf("left %d ", out_px_left); */
+ }
+
+#if 0
+ if (r_errline != r_errlast)
+ {
+ r_errlast = r_errline;
+ duplicate_line = 0;
+
+ /* stp_erprintf("r_errline %d, ", r_errline); */
+ if (stp_color_get_row(v, image, r_errline, &zero_mask))
+ {
+ status = 2;
+ break;
+ }
+ }
+
+ out = stp_channel_get_output(v);
+#endif
+ if (r_errline != r_errlast)
+ {
+ r_errlast = r_errline;
+ duplicate_line = 0;
+ }
+
+ out = olympus_get_cached_output(v, image, rows, r_errline,
+ image_px_width * ink_channels * 2);
+ if (out == NULL)
+ {
+ status = 2;
+ break;
+ }
+
+ c_errval = 0;
+ c_errlast = -1;
+ c_errcol = 0;
+ for (i = 0; i < out_px_width; i++)
+ {
+ if (c_errcol != c_errlast)
+ c_errlast = c_errcol;
+ for (j = 0; j < ink_channels; j++)
+ err_out[i * ink_channels + j] =
+ out[c_errcol * ink_channels + ink_order[j]-1];
+
+ c_errval += c_errmod;
+ c_errcol += c_errdiv;
+ if (c_errval >= out_px_width)
+ {
+ c_errval -= out_px_width;
+ c_errcol ++;
+ }
+ }
+
+ real_out = err_out;
+ if (out_channels != ink_channels)
+ {
+ real_out = final_out;
+ if (out_channels < ink_channels)
+ {
+ for (i = 0; i < out_px_width; i++)
+ {
+ for (j = 0; j < ink_channels; j++)
+ final_out[i * ink_channels + j] = err_out[i];
+ }
+ }
+ else
+ {
+ for (i = 0; i < out_px_width; i++)
+ {
+ int avg = 0;
+ for (j = 0; j < out_channels; j++)
+ avg += err_out[i * out_channels + j];
+ final_out[i] = avg / out_channels;
+ }
+ }
+ }
+ char_out = (unsigned char *) real_out;
+ char_out_width = (caps->interlacing == OLYMPUS_INTERLACE_PLANE ?
+ out_px_width : out_px_width * out_channels);
+ for (i = 0; i < char_out_width; i++)
+ {
+ if (caps->interlacing == OLYMPUS_INTERLACE_PLANE)
+ j = i * ink_channels + pl;
+ else if (caps->interlacing == OLYMPUS_INTERLACE_LINE)
+ j = (i % out_px_width) + (i / out_px_width);
+ else /* OLYMPUS_INTERLACE_NONE */
+ j = i;
+
+ char_out[i] = real_out[j] / 257;
+ }
+
+ stp_zfwrite((char *) real_out, 1, char_out_width, v);
+ /* stp_erprintf("data %d ", out_px_width); */
+ if (olympus_feature(caps, OLYMPUS_FEATURE_FULL_WIDTH)
+ && out_px_right < print_px_width)
+ {
+ stp_zfwrite((char *) zeros, out_bytes,
+ print_px_width - out_px_right, v);
+ /* stp_erprintf("right %d ", print_px_width-out_px_right); */
+ }
+ /* stp_erprintf("\n"); */
+
+ r_errval += r_errmod;
+ r_errline += r_errdiv;
+ if (r_errval >= out_px_height)
+ {
+ r_errval -= out_px_height;
+ r_errline ++;
+ }
+ }
+
+ if (y == privdata.block_max_y)
+ {
+ /* block end */
+ if (caps->block_end_func)
+ {
+ stp_deprintf(STP_DBG_OLYMPUS, "olympus: caps->block_end\n");
+ (*(caps->block_end_func))(v);
+ }
+ }
+ }
+
+ /* plane end */
+ if (caps->plane_end_func) {
+ stp_deprintf(STP_DBG_OLYMPUS, "olympus: caps->plane_end\n");
+ (*(caps->plane_end_func))(v);
+ }
+ }
+
+ /* printer end */
+ if (caps->printer_end_func)
+ {
+ stp_deprintf(STP_DBG_OLYMPUS, "olympus: caps->printer_end\n");
+ (*(caps->printer_end_func))(v);
+ }
+ stp_image_conclude(image);
+ if (final_out)
+ stp_free(final_out);
+ if (err_out)
+ stp_free(err_out);
+ if (zeros)
+ stp_free(zeros);
+ if (rows)
+ {
+ for (i = 0; i <image_px_height; i++)
+ stp_free(rows[i]);
+ stp_free(rows);
+ }
+ return status;
+}
+
+static int
+olympus_print(const stp_vars_t *v, stp_image_t *image)
+{
+ int status;
+ stp_vars_t *nv = stp_vars_create_copy(v);
+ stp_prune_inactive_options(nv);
+ status = olympus_do_print(nv, image);
+ stp_vars_destroy(nv);
+ return status;
+}
+
+static const stp_printfuncs_t print_olympus_printfuncs =
+{
+ olympus_list_parameters,
+ olympus_parameters,
+ stp_default_media_size,
+ olympus_imageable_area,
+ olympus_limit,
+ olympus_print,
+ olympus_describe_resolution,
+ olympus_describe_output,
+ stp_verify_printer_params,
+ NULL,
+ NULL
+};
+
+
+
+
+static stp_family_t print_olympus_module_data =
+ {
+ &print_olympus_printfuncs,
+ NULL
+ };
+
+
+static int
+print_olympus_module_init(void)
+{
+ return stp_family_register(print_olympus_module_data.printer_list);
+}
+
+
+static int
+print_olympus_module_exit(void)
+{
+ return stp_family_unregister(print_olympus_module_data.printer_list);
+}
+
+
+/* Module header */
+#define stp_module_version print_olympus_LTX_stp_module_version
+#define stp_module_data print_olympus_LTX_stp_module_data
+
+stp_module_version_t stp_module_version = {0, 0};
+
+stp_module_t stp_module_data =
+ {
+ "olympus",
+ VERSION,
+ "Olympus family driver",
+ STP_MODULE_CLASS_FAMILY,
+ NULL,
+ print_olympus_module_init,
+ print_olympus_module_exit,
+ (void *) &print_olympus_module_data
+ };
+
diff --git a/src/main/print-papers.c b/src/main/print-papers.c
new file mode 100644
index 0000000..1164c27
--- /dev/null
+++ b/src/main/print-papers.c
@@ -0,0 +1,422 @@
+/*
+ * "$Id: print-papers.c,v 1.35 2004/09/17 18:38:25 rleigh Exp $"
+ *
+ * Print plug-in driver utility functions for the GIMP.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * This file must include only standard C header files. The core code must
+ * compile on generic platforms that don't support glib, gimp, gtk, etc.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <math.h>
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#include <string.h>
+#include <stdlib.h>
+
+static stp_list_t *paper_list = NULL;
+
+static void
+stpi_paper_freefunc(void *item)
+{
+ stp_papersize_t *paper = (stp_papersize_t *) (item);
+ STP_SAFE_FREE(paper->name);
+ STP_SAFE_FREE(paper->text);
+ STP_SAFE_FREE(paper->comment);
+ STP_SAFE_FREE(paper);
+}
+
+static const char *
+stpi_paper_namefunc(const void *item)
+{
+ const stp_papersize_t *paper = (const stp_papersize_t *) (item);
+ return paper->name;
+}
+
+static const char *
+stpi_paper_long_namefunc(const void *item)
+{
+ const stp_papersize_t *paper = (const stp_papersize_t *) (item);
+ return paper->text;
+}
+
+static int
+stpi_paper_list_init(void)
+{
+ if (paper_list)
+ stp_list_destroy(paper_list);
+ paper_list = stp_list_create();
+ stp_list_set_freefunc(paper_list, stpi_paper_freefunc);
+ stp_list_set_namefunc(paper_list, stpi_paper_namefunc);
+ stp_list_set_long_namefunc(paper_list, stpi_paper_long_namefunc);
+ /* stp_list_set_sortfunc(stpi_paper_sortfunc); */
+
+ return 0;
+}
+
+static inline void
+check_paperlist(void)
+{
+ if (paper_list == NULL)
+ {
+ stp_xml_parse_file_named("papers.xml");
+ if (paper_list == NULL)
+ {
+ stp_erprintf("No papers found: is STP_MODULE_PATH correct?\n");
+ stpi_paper_list_init();
+ }
+ }
+}
+
+static int
+stpi_paper_create(stp_papersize_t *p)
+{
+ stp_list_item_t *paper_item;
+
+ if (paper_list == NULL)
+ {
+ stpi_paper_list_init();
+ stp_deprintf(STP_DBG_PAPER,
+ "stpi_paper_create(): initialising paper_list...\n");
+ }
+
+ /* Check the paper does not already exist */
+ paper_item = stp_list_get_start(paper_list);
+ while (paper_item)
+ {
+ const stp_papersize_t *ep =
+ (const stp_papersize_t *) stp_list_item_get_data(paper_item);
+ if (ep && !strcmp(p->name, ep->name))
+ {
+ stpi_paper_freefunc(p);
+ return 1;
+ }
+ paper_item = stp_list_item_next(paper_item);
+ }
+
+ /* Add paper to list */
+ stp_list_item_create(paper_list, NULL, (void *) p);
+
+ return 0;
+}
+
+static int
+stpi_paper_destroy(stp_papersize_t *p)
+{
+ stp_list_item_t *paper_item;
+ check_paperlist();
+
+ /* Check if paper exists */
+ paper_item = stp_list_get_start(paper_list);
+ while (paper_item)
+ {
+ const stp_papersize_t *ep = (const stp_papersize_t *)
+ stp_list_item_get_data(paper_item);
+ if (ep && !strcmp(p->name, ep->name))
+ {
+ stp_list_item_destroy (paper_list, paper_item);
+ return 0;
+ }
+ paper_item = stp_list_item_next(paper_item);
+ }
+ /* Paper did not exist */
+ return 1;
+}
+
+
+int
+stp_known_papersizes(void)
+{
+ check_paperlist();
+ return stp_list_get_length(paper_list);
+}
+
+const stp_papersize_t *
+stp_get_papersize_by_name(const char *name)
+{
+ stp_list_item_t *paper;
+
+ check_paperlist();
+ paper = stp_list_get_item_by_name(paper_list, name);
+ if (!paper)
+ return NULL;
+ else
+ return (const stp_papersize_t *) stp_list_item_get_data(paper);
+}
+
+const stp_papersize_t *
+stp_get_papersize_by_index(int idx)
+{
+ stp_list_item_t *paper;
+
+ check_paperlist();
+ paper = stp_list_get_item_by_index(paper_list, idx);
+ if (!paper)
+ return NULL;
+ else
+ return (const stp_papersize_t *) stp_list_item_get_data(paper);
+}
+
+static int
+paper_size_mismatch(int l, int w, const stp_papersize_t *val)
+{
+ int hdiff = abs(l - (int) val->height);
+ int vdiff = abs(w - (int) val->width);
+ return hdiff + vdiff;
+}
+
+const stp_papersize_t *
+stp_get_papersize_by_size(int l, int w)
+{
+ int score = INT_MAX;
+ const stp_papersize_t *ref = NULL;
+ const stp_papersize_t *val = NULL;
+ int i;
+ int sizes = stp_known_papersizes();
+ for (i = 0; i < sizes; i++)
+ {
+ val = stp_get_papersize_by_index(i);
+
+ if (val->width == w && val->height == l)
+ return val;
+ else
+ {
+ int myscore = paper_size_mismatch(l, w, val);
+ if (myscore < score && myscore < 20)
+ {
+ ref = val;
+ score = myscore;
+ }
+ }
+ }
+ return ref;
+}
+
+void
+stp_default_media_size(const stp_vars_t *v, /* I */
+ int *width, /* O - Width in points */
+ int *height) /* O - Height in points */
+{
+ if (stp_get_page_width(v) > 0 && stp_get_page_height(v) > 0)
+ {
+ *width = stp_get_page_width(v);
+ *height = stp_get_page_height(v);
+ }
+ else
+ {
+ const char *page_size = stp_get_string_parameter(v, "PageSize");
+ const stp_papersize_t *papersize = NULL;
+ if (page_size)
+ papersize = stp_get_papersize_by_name(page_size);
+ if (!papersize)
+ {
+ *width = 1;
+ *height = 1;
+ }
+ else
+ {
+ *width = papersize->width;
+ *height = papersize->height;
+ }
+ if (*width == 0)
+ *width = 612;
+ if (*height == 0)
+ *height = 792;
+ }
+}
+
+/*
+ * Process the <paper> node.
+ */
+static stp_papersize_t *
+stp_xml_process_paper(stp_mxml_node_t *paper) /* The paper node */
+{
+ stp_mxml_node_t *prop; /* Temporary node pointer */
+ const char *stmp; /* Temporary string */
+ /* props[] (unused) is the correct tag sequence */
+ /* const char *props[] =
+ {
+ "name",
+ "description",
+ "width",
+ "height",
+ "left",
+ "right",
+ "bottom",
+ "top",
+ "unit",
+ NULL
+ };*/
+ stp_papersize_t *outpaper; /* Generated paper */
+ int
+ id = 0, /* Check id is present */
+ name = 0, /* Check name is present */
+ height = 0, /* Check height is present */
+ width = 0, /* Check width is present */
+ left = 0, /* Check left is present */
+ right = 0, /* Check right is present */
+ bottom = 0, /* Check bottom is present */
+ top = 0, /* Check top is present */
+ unit = 0; /* Check unit is present */
+
+ if (stp_get_debug_level() & STP_DBG_XML)
+ {
+ stmp = stp_mxmlElementGetAttr(paper, (const char*) "name");
+ stp_erprintf("stp_xml_process_paper: name: %s\n", stmp);
+ }
+
+ outpaper = stp_zalloc(sizeof(stp_papersize_t));
+ if (!outpaper)
+ return NULL;
+
+ outpaper->name = stp_strdup(stp_mxmlElementGetAttr(paper, "name"));
+
+ outpaper->top = 0;
+ outpaper->left = 0;
+ outpaper->bottom = 0;
+ outpaper->right = 0;
+ if (outpaper->name)
+ id = 1;
+
+ prop = paper->child;
+ while(prop)
+ {
+ if (prop->type == STP_MXML_ELEMENT)
+ {
+ const char *prop_name = prop->value.element.name;
+
+ if (!strcmp(prop_name, "description"))
+ {
+ outpaper->text = stp_strdup(stp_mxmlElementGetAttr(prop, "value"));
+ name = 1;
+ }
+ if (!strcmp(prop_name, "comment"))
+ outpaper->comment = stp_strdup(stp_mxmlElementGetAttr(prop, "value"));
+ if (!strcmp(prop_name, "width"))
+ {
+ stmp = stp_mxmlElementGetAttr(prop, "value");
+ if (stmp)
+ {
+ outpaper->width = stp_xmlstrtoul(stmp);
+ width = 1;
+ }
+ }
+ if (!strcmp(prop_name, "height"))
+ {
+ stmp = stp_mxmlElementGetAttr(prop, "value");
+ if (stmp)
+ {
+ outpaper->height = stp_xmlstrtoul(stmp);
+ height = 1;
+ }
+ }
+ if (!strcmp(prop_name, "left"))
+ {
+ stmp = stp_mxmlElementGetAttr(prop, "value");
+ outpaper->left = stp_xmlstrtoul(stmp);
+ left = 1;
+ }
+ if (!strcmp(prop_name, "right"))
+ {
+ stmp = stp_mxmlElementGetAttr(prop, "value");
+ outpaper->right = stp_xmlstrtoul(stmp);
+ right = 1;
+ }
+ if (!strcmp(prop_name, "bottom"))
+ {
+ stmp = stp_mxmlElementGetAttr(prop, "value");
+ outpaper->bottom = stp_xmlstrtoul(stmp);
+ bottom = 1;
+ }
+ if (!strcmp(prop_name, "top"))
+ {
+ stmp = stp_mxmlElementGetAttr(prop, "value");
+ outpaper->top = stp_xmlstrtoul(stmp);
+ top = 1;
+ }
+ if (!strcmp(prop_name, "unit"))
+ {
+ stmp = stp_mxmlElementGetAttr(prop, "value");
+ if (stmp)
+ {
+ if (!strcmp(stmp, "english"))
+ outpaper->paper_unit = PAPERSIZE_ENGLISH_STANDARD;
+ else if (!strcmp(stmp, "english-extended"))
+ outpaper->paper_unit = PAPERSIZE_ENGLISH_EXTENDED;
+ else if (!strcmp(stmp, "metric"))
+ outpaper->paper_unit = PAPERSIZE_METRIC_STANDARD;
+ else if (!strcmp(stmp, "metric-extended"))
+ outpaper->paper_unit = PAPERSIZE_METRIC_EXTENDED;
+ /* Default unit */
+ else
+ outpaper->paper_unit = PAPERSIZE_METRIC_EXTENDED;
+ unit = 1;
+ }
+ }
+ }
+ prop = prop->next;
+ }
+ if (id && name && width && height && unit) /* Margins are optional */
+ return outpaper;
+ stp_free(outpaper);
+ outpaper = NULL;
+ return NULL;
+}
+
+/*
+ * Parse the <paperdef> node.
+ */
+static int
+stp_xml_process_paperdef(stp_mxml_node_t *paperdef, const char *file) /* The paperdef node */
+{
+ stp_mxml_node_t *paper; /* paper node pointer */
+ stp_papersize_t *outpaper; /* Generated paper */
+
+ paper = paperdef->child;
+ while (paper)
+ {
+ if (paper->type == STP_MXML_ELEMENT)
+ {
+ const char *paper_name = paper->value.element.name;
+ if (!strcmp(paper_name, "paper"))
+ {
+ outpaper = stp_xml_process_paper(paper);
+ if (outpaper)
+ stpi_paper_create(outpaper);
+ }
+ }
+ paper = paper->next;
+ }
+ return 1;
+}
+
+void
+stpi_init_paper(void)
+{
+ stp_register_xml_parser("paperdef", stp_xml_process_paperdef);
+}
diff --git a/src/main/print-pcl.c b/src/main/print-pcl.c
index 5d3751f..4f558b8 100644
--- a/src/main/print-pcl.c
+++ b/src/main/print-pcl.c
@@ -1,5 +1,5 @@
/*
- * "$Id: print-pcl.c,v 1.47.4.13 2004/06/09 10:29:58 davehill Exp $"
+ * "$Id: print-pcl.c,v 1.138 2005/05/08 03:10:39 rlk Exp $"
*
* Print plug-in HP PCL driver for the GIMP.
*
@@ -30,9 +30,9 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#include <gimp-print/gimp-print.h>
-#include "gimp-print-internal.h"
-#include <gimp-print/gimp-print-intl-internal.h>
+#include <gutenprint/gutenprint.h>
+#include <gutenprint/gutenprint-intl-internal.h>
+#include "gutenprint-internal.h"
#include <stdio.h>
#include <string.h>
@@ -43,10 +43,24 @@
/*
* Local functions...
*/
-static void pcl_mode0(const stp_vars_t, unsigned char *, unsigned char *,
- int, int);
-static void pcl_mode2(const stp_vars_t, unsigned char *, unsigned char *,
- int, int);
+static void pcl_mode0(stp_vars_t *, unsigned char *, int, int);
+static void pcl_mode2(stp_vars_t *, unsigned char *, int, int);
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+
+typedef struct
+{
+ int do_blank;
+ int blank_lines;
+ unsigned char *comp_buf;
+ void (*writefunc)(stp_vars_t *, unsigned char *, int, int); /* PCL output function */
+ int do_cret;
+ int do_cretb;
+ int do_6color;
+ int height;
+ int duplex;
+ int tumble;
+ int use_crd;
+} pcl_privdata_t;
/*
* Generic define for a name/value set
@@ -61,6 +75,17 @@ typedef struct
int p1;
} pcl_t;
+static const stp_dotsize_t single_dotsize[] =
+{
+ { 0x1, 1.0 }
+};
+
+static const stp_shade_t photo_dither_shades[] =
+{
+ { 1.0000, 1, single_dotsize },
+ { 0.3333, 1, single_dotsize },
+};
+
/*
* Media size to PCL media size code table
*
@@ -236,17 +261,20 @@ static const pcl_t pcl_resolutions[] =
#define NUM_RESOLUTIONS (sizeof(pcl_resolutions) / sizeof (pcl_t))
static void
-pcl_describe_resolution(const stp_printer_t printer,
- const char *resolution, int *x, int *y)
+pcl_describe_resolution(const stp_vars_t *v, int *x, int *y)
{
int i;
- for (i = 0; i < NUM_RESOLUTIONS; i++)
+ const char *resolution = stp_get_string_parameter(v, "Resolution");
+ if (resolution)
{
- if (!strcmp(resolution, pcl_resolutions[i].pcl_name))
+ for (i = 0; i < NUM_RESOLUTIONS; i++)
{
- *x = pcl_resolutions[i].p0;
- *y = pcl_resolutions[i].p1;
- return;
+ if (!strcmp(resolution, pcl_resolutions[i].pcl_name))
+ {
+ *x = pcl_resolutions[i].p0;
+ *y = pcl_resolutions[i].p1;
+ return;
+ }
}
}
*x = -1;
@@ -276,12 +304,9 @@ typedef struct {
int color_type; /* 2 print head or one, 2 level or 4 */
int stp_printer_type; /* Deskjet/Laserjet and quirks */
/* The paper size, paper type and paper source codes cannot be combined */
- const int paper_sizes[NUM_PRINTER_PAPER_SIZES + 1];
- /* Paper sizes */
- const int paper_types[NUM_PRINTER_PAPER_TYPES + 1];
- /* Paper types */
- const int paper_sources[NUM_PRINTER_PAPER_SOURCES + 1];
- /* Paper sources */
+ const short *paper_sizes; /* Paper sizes */
+ const short *paper_types; /* Paper types */
+ const short *paper_sources; /* Paper sources */
} pcl_cap_t;
#define PCL_COLOR_NONE 0
@@ -299,6 +324,7 @@ typedef struct {
#define PCL_PRINTER_MEDIATYPE 16 /* Use media type & print quality */
#define PCL_PRINTER_CUSTOM_SIZE 32 /* Custom sizes supported */
#define PCL_PRINTER_BLANKLINE 64 /* Blank line removal supported */
+#define PCL_PRINTER_DUPLEX 128 /* Printer can have duplexer */
/*
* FIXME - the 520 shouldn't be lumped in with the 500 as it supports
@@ -312,6 +338,317 @@ typedef struct {
* PCL reference guide 2.0, Nov 1999".
*/
+static const short emptylist[] =
+{
+ -1
+};
+
+static const short standard_papersizes[] =
+{
+ PCL_PAPERSIZE_EXECUTIVE,
+ PCL_PAPERSIZE_STATEMENT,
+ PCL_PAPERSIZE_LETTER,
+ PCL_PAPERSIZE_LEGAL,
+ PCL_PAPERSIZE_A4,
+ -1,
+};
+
+static const short letter_only_papersizes[] =
+{
+ PCL_PAPERSIZE_LETTER,
+ -1
+};
+
+static const short letter_a4_papersizes[] =
+{
+ PCL_PAPERSIZE_A4,
+ PCL_PAPERSIZE_LETTER,
+ -1
+};
+
+static const short dj340_papersizes[] =
+{
+ PCL_PAPERSIZE_EXECUTIVE,
+ PCL_PAPERSIZE_LETTER,
+ PCL_PAPERSIZE_LEGAL,
+ PCL_PAPERSIZE_A4,
+ -1,
+};
+
+static const short dj400_papersizes[] =
+{
+ PCL_PAPERSIZE_EXECUTIVE,
+ PCL_PAPERSIZE_LETTER,
+ PCL_PAPERSIZE_LEGAL,
+ PCL_PAPERSIZE_A4,
+ PCL_PAPERSIZE_JIS_B5,
+ -1,
+};
+
+static const short dj500_papersizes[] =
+{
+/* PCL_PAPERSIZE_EXECUTIVE, The 500 doesn't support this, the 520 does */
+ PCL_PAPERSIZE_LETTER,
+ PCL_PAPERSIZE_LEGAL,
+ PCL_PAPERSIZE_A4,
+ PCL_PAPERSIZE_COMMERCIAL10_ENV,
+/* PCL_PAPERSIZE_DL_ENV, The 500 doesn't support this, the 520 does */
+ -1,
+};
+
+static const short dj540_papersizes[] =
+{
+ PCL_PAPERSIZE_EXECUTIVE,
+ PCL_PAPERSIZE_LETTER,
+ PCL_PAPERSIZE_LEGAL,
+ PCL_PAPERSIZE_A4,
+ PCL_PAPERSIZE_A5,
+ PCL_PAPERSIZE_JIS_B5,
+ PCL_PAPERSIZE_HAGAKI_CARD,
+ PCL_PAPERSIZE_A6_CARD,
+ PCL_PAPERSIZE_4x6,
+ PCL_PAPERSIZE_5x8,
+ PCL_PAPERSIZE_COMMERCIAL10_ENV,
+ PCL_PAPERSIZE_DL_ENV,
+ PCL_PAPERSIZE_C6_ENV,
+ -1,
+};
+
+static const short dj600_papersizes[] =
+{
+ PCL_PAPERSIZE_EXECUTIVE,
+ PCL_PAPERSIZE_LETTER,
+ PCL_PAPERSIZE_LEGAL,
+ PCL_PAPERSIZE_A4,
+ PCL_PAPERSIZE_A5,
+ PCL_PAPERSIZE_HAGAKI_CARD,
+ PCL_PAPERSIZE_A6_CARD,
+ PCL_PAPERSIZE_4x6,
+ PCL_PAPERSIZE_5x8,
+ PCL_PAPERSIZE_COMMERCIAL10_ENV,
+ PCL_PAPERSIZE_DL_ENV,
+ PCL_PAPERSIZE_C6_ENV,
+ PCL_PAPERSIZE_INVITATION_ENV,
+ -1,
+};
+
+static const short dj1220_papersizes[] =
+{
+ PCL_PAPERSIZE_EXECUTIVE,
+ PCL_PAPERSIZE_LETTER,
+ PCL_PAPERSIZE_LEGAL,
+ PCL_PAPERSIZE_TABLOID,
+ PCL_PAPERSIZE_STATEMENT,
+ PCL_PAPERSIZE_SUPER_B,
+ PCL_PAPERSIZE_A5,
+ PCL_PAPERSIZE_A4,
+ PCL_PAPERSIZE_A3,
+ PCL_PAPERSIZE_JIS_B5,
+ PCL_PAPERSIZE_JIS_B4,
+ PCL_PAPERSIZE_HAGAKI_CARD,
+ PCL_PAPERSIZE_OUFUKU_CARD,
+ PCL_PAPERSIZE_A6_CARD,
+ PCL_PAPERSIZE_4x6,
+ PCL_PAPERSIZE_5x8,
+ PCL_PAPERSIZE_3x5,
+ PCL_PAPERSIZE_HP_CARD,
+ PCL_PAPERSIZE_MONARCH_ENV,
+ PCL_PAPERSIZE_COMMERCIAL10_ENV,
+ PCL_PAPERSIZE_DL_ENV,
+ PCL_PAPERSIZE_C5_ENV,
+ PCL_PAPERSIZE_C6_ENV,
+ PCL_PAPERSIZE_INVITATION_ENV,
+ PCL_PAPERSIZE_JAPANESE_3_ENV,
+ PCL_PAPERSIZE_JAPANESE_4_ENV,
+ PCL_PAPERSIZE_KAKU_ENV,
+ -1,
+};
+
+static const short dj1100_papersizes[] =
+{
+ PCL_PAPERSIZE_EXECUTIVE,
+ PCL_PAPERSIZE_LETTER,
+ PCL_PAPERSIZE_LEGAL,
+ PCL_PAPERSIZE_TABLOID,
+ PCL_PAPERSIZE_STATEMENT,
+ PCL_PAPERSIZE_SUPER_B,
+ PCL_PAPERSIZE_A5,
+ PCL_PAPERSIZE_A4,
+ PCL_PAPERSIZE_A3,
+ PCL_PAPERSIZE_JIS_B5,
+ PCL_PAPERSIZE_JIS_B4,
+ PCL_PAPERSIZE_HAGAKI_CARD,
+ PCL_PAPERSIZE_A6_CARD,
+ PCL_PAPERSIZE_4x6,
+ PCL_PAPERSIZE_5x8,
+ PCL_PAPERSIZE_COMMERCIAL10_ENV,
+ PCL_PAPERSIZE_DL_ENV,
+ PCL_PAPERSIZE_C6_ENV,
+ PCL_PAPERSIZE_INVITATION_ENV,
+ PCL_PAPERSIZE_JAPANESE_3_ENV,
+ PCL_PAPERSIZE_JAPANESE_4_ENV,
+ PCL_PAPERSIZE_KAKU_ENV,
+ -1,
+};
+
+static const short dj1200_papersizes[] =
+{
+ /* This printer is not mentioned in the Comparison tables,
+ so I'll just pick some likely sizes... */
+ PCL_PAPERSIZE_EXECUTIVE,
+ PCL_PAPERSIZE_LETTER,
+ PCL_PAPERSIZE_LEGAL,
+ PCL_PAPERSIZE_A5,
+ PCL_PAPERSIZE_A4,
+ PCL_PAPERSIZE_4x6,
+ PCL_PAPERSIZE_5x8,
+ -1,
+};
+
+static const short dj2000_papersizes[] =
+{
+ PCL_PAPERSIZE_EXECUTIVE,
+ PCL_PAPERSIZE_LETTER,
+ PCL_PAPERSIZE_LEGAL,
+ PCL_PAPERSIZE_A5,
+ PCL_PAPERSIZE_A4,
+ PCL_PAPERSIZE_HAGAKI_CARD,
+ PCL_PAPERSIZE_A6_CARD,
+ PCL_PAPERSIZE_4x6,
+ PCL_PAPERSIZE_5x8,
+ PCL_PAPERSIZE_3x5,
+ PCL_PAPERSIZE_COMMERCIAL10_ENV,
+ PCL_PAPERSIZE_DL_ENV,
+ PCL_PAPERSIZE_C6_ENV,
+ PCL_PAPERSIZE_INVITATION_ENV,
+ -1,
+};
+
+static const short dj2500_papersizes[] =
+{
+ PCL_PAPERSIZE_EXECUTIVE,
+ PCL_PAPERSIZE_LETTER,
+ PCL_PAPERSIZE_LEGAL,
+ PCL_PAPERSIZE_TABLOID,
+ PCL_PAPERSIZE_STATEMENT,
+ PCL_PAPERSIZE_A5,
+ PCL_PAPERSIZE_A4,
+ PCL_PAPERSIZE_A3,
+ PCL_PAPERSIZE_JIS_B5,
+ PCL_PAPERSIZE_JIS_B4,
+ PCL_PAPERSIZE_HAGAKI_CARD,
+ PCL_PAPERSIZE_A6_CARD,
+ PCL_PAPERSIZE_4x6,
+ PCL_PAPERSIZE_5x8,
+ PCL_PAPERSIZE_COMMERCIAL10_ENV,
+ PCL_PAPERSIZE_DL_ENV,
+ -1,
+};
+
+static const short ljsmall_papersizes[] =
+{
+ PCL_PAPERSIZE_EXECUTIVE,
+ PCL_PAPERSIZE_STATEMENT,
+ PCL_PAPERSIZE_LETTER,
+ PCL_PAPERSIZE_LEGAL,
+ PCL_PAPERSIZE_A4,
+ PCL_PAPERSIZE_MONARCH_ENV,
+ PCL_PAPERSIZE_COMMERCIAL10_ENV,
+ PCL_PAPERSIZE_DL_ENV,
+ PCL_PAPERSIZE_C5_ENV,
+ PCL_PAPERSIZE_C6_ENV,
+ -1,
+};
+
+static const short ljbig_papersizes[] =
+{
+ PCL_PAPERSIZE_EXECUTIVE,
+ PCL_PAPERSIZE_STATEMENT,
+ PCL_PAPERSIZE_LETTER,
+ PCL_PAPERSIZE_LEGAL,
+ PCL_PAPERSIZE_TABLOID,
+ PCL_PAPERSIZE_A5,
+ PCL_PAPERSIZE_A4,
+ PCL_PAPERSIZE_A3,
+ PCL_PAPERSIZE_JIS_B5,
+ PCL_PAPERSIZE_JIS_B4, /* Guess */
+ PCL_PAPERSIZE_4x6,
+ PCL_PAPERSIZE_5x8,
+ PCL_PAPERSIZE_MONARCH_ENV,
+ PCL_PAPERSIZE_COMMERCIAL10_ENV,
+ PCL_PAPERSIZE_DL_ENV,
+ PCL_PAPERSIZE_C5_ENV,
+ PCL_PAPERSIZE_C6_ENV,
+ -1,
+};
+
+static const short basic_papertypes[] =
+{
+ PCL_PAPERTYPE_PLAIN,
+ PCL_PAPERTYPE_BOND,
+ PCL_PAPERTYPE_PREMIUM,
+ PCL_PAPERTYPE_GLOSSY,
+ PCL_PAPERTYPE_TRANS,
+ -1,
+};
+
+static const short new_papertypes[] =
+{
+ PCL_PAPERTYPE_PLAIN,
+ PCL_PAPERTYPE_BOND,
+ PCL_PAPERTYPE_PREMIUM,
+ PCL_PAPERTYPE_GLOSSY,
+ PCL_PAPERTYPE_TRANS,
+ PCL_PAPERTYPE_QPHOTO,
+ PCL_PAPERTYPE_QTRANS,
+ -1,
+};
+
+static const short laserjet_papersources[] =
+{
+ PCL_PAPERSOURCE_STANDARD,
+ PCL_PAPERSOURCE_MANUAL,
+ PCL_PAPERSOURCE_LJ_TRAY1,
+ PCL_PAPERSOURCE_LJ_TRAY2,
+ PCL_PAPERSOURCE_LJ_TRAY3,
+ PCL_PAPERSOURCE_LJ_TRAY4,
+ -1,
+};
+
+static const short dj340_papersources[] =
+{
+ PCL_PAPERSOURCE_STANDARD,
+ PCL_PAPERSOURCE_MANUAL,
+ PCL_PAPERSOURCE_340_PCSF,
+ PCL_PAPERSOURCE_340_DCSF,
+ -1,
+};
+
+static const short dj_papersources[] =
+{
+ PCL_PAPERSOURCE_STANDARD,
+ PCL_PAPERSOURCE_MANUAL,
+ PCL_PAPERSOURCE_DJ_TRAY,
+ -1,
+};
+
+static const short dj2500_papersources[] =
+{
+ PCL_PAPERSOURCE_STANDARD,
+ PCL_PAPERSOURCE_MANUAL,
+ PCL_PAPERSOURCE_DJ_AUTO,
+ PCL_PAPERSOURCE_DJ_TRAY,
+ PCL_PAPERSOURCE_DJ_TRAY2,
+ PCL_PAPERSOURCE_DJ_OPTIONAL,
+ -1,
+};
+
+static const short standard_papersources[] =
+{
+ PCL_PAPERSOURCE_STANDARD,
+ -1
+};
+
static const pcl_cap_t pcl_model_capabilities[] =
{
/* Default/unknown printer - assume laserjet */
@@ -323,175 +660,88 @@ static const pcl_cap_t pcl_model_capabilities[] =
{12, 12, 10, 10}, /* A4 Margins */
PCL_COLOR_NONE,
PCL_PRINTER_LJ,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_STATEMENT,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A4,
- 0,
- },
- { -1, /* No selectable paper types */
- },
- { -1, /* No selectable paper sources */
- },
+ standard_papersizes,
+ emptylist,
+ emptylist,
},
/* DesignJet 230/430 (monochrome ) */
{ 10230,
36 * 72, 150 * 12 * 72, /* 150ft in roll mode, 64" in sheet */
- 830 * 72 / 100, 583 * 72 / 100, /* 8.3" wide min in sheet mode */
+ 826 * 72 / 100, 583 * 72 / 100, /* 8.3" wide min in sheet mode */
PCL_RES_300_300 | PCL_RES_600_600,
{49, 49, 15, 15},
{49, 49, 15, 15},
PCL_COLOR_NONE,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE | PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_NEW_ERG,
- {
- PCL_PAPERSIZE_LETTER,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- -1,
- },
+ letter_a4_papersizes,
+ basic_papertypes,
+ standard_papersources,
},
/* DesignJet 250C/450C/455CA/488CA */
/* The "CA" versions have a "software RIP" but are the same hardware */
{ 10250,
36 * 72, 150 * 12 * 72, /* 150ft in roll mode, 64" in sheet */
- 830 * 72 / 100, 583 * 72 / 100, /* 8.3" wide min in sheet mode */
+ 826 * 72 / 100, 583 * 72 / 100, /* 8.3" wide min in sheet mode */
PCL_RES_300_300 | PCL_RES_600_600_MONO,
{49, 49, 15, 15},
{49, 49, 15, 15},
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE | PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_NEW_ERG,
- {
- PCL_PAPERSIZE_LETTER,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- -1,
- },
+ letter_a4_papersizes,
+ basic_papertypes,
+ standard_papersources,
},
/* DesignJet 700 (monochrome) */
{ 10700,
36 * 72, 150 * 12 * 72, /* 150ft in roll mode, 64" in sheet */
- 830 * 72 / 100, 583 * 72 / 100, /* 8.3" wide min in sheet mode */
+ 826 * 72 / 100, 583 * 72 / 100, /* 8.3" wide min in sheet mode */
PCL_RES_300_300 | PCL_RES_600_600,
{30, 30, 15, 15}, /* These margins are for sheet mode FIX */
{30, 30, 15, 15},
PCL_COLOR_NONE,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE | PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_NEW_ERG,
- {
- PCL_PAPERSIZE_LETTER,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- -1,
- },
+ letter_a4_papersizes,
+ basic_papertypes,
+ standard_papersources,
},
/* DesignJet 750C */
{ 10750,
36 * 72, 150 * 12 * 72, /* 150ft in roll mode, 64" in sheet */
- 830 * 72 / 100, 583 * 72 / 100, /* 8.3" wide min in sheet mode */
+ 826 * 72 / 100, 583 * 72 / 100, /* 8.3" wide min in sheet mode */
PCL_RES_300_300 | PCL_RES_600_600_MONO,
{30, 30, 15, 15}, /* These margins are for roll mode FIX */
{30, 30, 15, 15},
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE | PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_NEW_ERG,
- {
- PCL_PAPERSIZE_LETTER,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- -1,
- },
+ letter_a4_papersizes,
+ basic_papertypes,
+ standard_papersources,
},
/* DesignJet 2000C/2500C (36" wide) */
{ 12500, /* Deskjet 2500 already has "2500" */
36 * 72, 150 * 12 * 72, /* 150ft in roll mode, 64" in sheet */
- 830 * 72 / 100, 583 * 72 / 100, /* 8.3" wide min in sheet mode */
+ 826 * 72 / 100, 583 * 72 / 100, /* 8.3" wide min in sheet mode */
PCL_RES_300_300 | PCL_RES_600_600_MONO,
{49, 49, 15, 15}, /* Check/Fix */
{49, 49, 15, 15},
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE | PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_NEW_ERG,
- {
- PCL_PAPERSIZE_LETTER,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- -1,
- },
+ letter_a4_papersizes,
+ basic_papertypes,
+ standard_papersources,
},
/* DesignJet 3000C/3500C (54" wide) */
{ 13500, /* Deskjet 2500 already has "2500" */
54 * 72, 150 * 12 * 72, /* 150ft in roll mode, 64" in sheet */
- 830 * 72 / 100, 583 * 72 / 100, /* 8.3" wide min in sheet mode */
+ 826 * 72 / 100, 583 * 72 / 100, /* 8.3" wide min in sheet mode */
PCL_RES_300_300 | PCL_RES_600_600_MONO,
{49, 49, 15, 15}, /* Check/Fix */
{49, 49, 15, 15},
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE | PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_NEW_ERG,
- {
- PCL_PAPERSIZE_LETTER,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- -1,
- },
+ letter_a4_papersizes,
+ basic_papertypes,
+ standard_papersources,
},
/* Deskjet 340 */
{ 340,
@@ -502,28 +752,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
{6, 48, 10, 11}, /* from bpd07933.pdf */
PCL_COLOR_CMY,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A4,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_340_PCSF,
- PCL_PAPERSOURCE_340_DCSF,
- -1,
- },
+ dj340_papersizes,
+ basic_papertypes,
+ dj340_papersources,
},
/* Deskjet 400 */
{ 400,
@@ -534,24 +765,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
{7, 41, 10, 10}, /* Check/Fix */
PCL_COLOR_CMY,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_JIS_B5,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- { -1, /* No selectable paper sources */
- },
+ dj400_papersizes,
+ basic_papertypes,
+ emptylist,
},
/* Deskjet 500, 520. Lexmark 4076 */
{ 500,
@@ -562,29 +778,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
{7, 41, 10, 10}, /* Check/Fix */
PCL_COLOR_NONE,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
- {
-/* PCL_PAPERSIZE_EXECUTIVE, The 500 doesn't support this, the 520 does */
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
-/* PCL_PAPERSIZE_DL_ENV, The 500 doesn't support this, the 520 does */
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_DJ_TRAY,
- -1,
- },
+ dj500_papersizes,
+ basic_papertypes,
+ dj_papersources,
},
/* Deskjet 500C */
{ 501,
@@ -595,27 +791,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
{7, 33, 10, 10}, /* Check/Fix */
PCL_COLOR_CMY,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_DJ_TRAY,
- -1,
- },
+ dj500_papersizes,
+ basic_papertypes,
+ dj_papersources,
},
/* Deskjet 540C */
{ 540,
@@ -627,36 +805,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
PCL_COLOR_CMY,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_A5,
- PCL_PAPERSIZE_JIS_B5,
- PCL_PAPERSIZE_HAGAKI_CARD,
- PCL_PAPERSIZE_A6_CARD,
- PCL_PAPERSIZE_4x6,
- PCL_PAPERSIZE_5x8,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C6_ENV,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_DJ_TRAY,
- -1,
- },
+ dj540_papersizes,
+ basic_papertypes,
+ dj_papersources,
},
/* Deskjet 550C, 560C */
{ 550,
@@ -667,29 +818,11 @@ static const pcl_cap_t pcl_model_capabilities[] =
{5, 33, 10, 10},
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A4,
/* The 550/560 support COM10 and DL envelope, but the control codes
are negative, indicating landscape mode. This needs thinking about! */
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_DJ_TRAY,
- -1,
- },
+ dj340_papersizes,
+ basic_papertypes,
+ dj_papersources,
},
/* Deskjet 600/600C */
{ 600,
@@ -701,32 +834,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
PCL_COLOR_CMY,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A5,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_HAGAKI_CARD,
- PCL_PAPERSIZE_A6_CARD,
- PCL_PAPERSIZE_4x6,
- PCL_PAPERSIZE_5x8,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C6_ENV,
- PCL_PAPERSIZE_INVITATION_ENV,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- { -1, /* No selectable paper sources */
- },
+ dj600_papersizes,
+ basic_papertypes,
+ emptylist,
},
/* Deskjet 6xx series */
{ 601,
@@ -738,33 +848,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A5,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_HAGAKI_CARD,
- PCL_PAPERSIZE_A6_CARD,
- PCL_PAPERSIZE_4x6,
- PCL_PAPERSIZE_5x8,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C6_ENV,
- PCL_PAPERSIZE_INVITATION_ENV,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- -1,
- },
+ dj600_papersizes,
+ basic_papertypes,
+ emptylist,
},
/* Deskjet 69x series (Photo Capable) */
{ 690,
@@ -776,33 +862,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
PCL_COLOR_CMYK | PCL_COLOR_CMYKcm,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A5,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_HAGAKI_CARD,
- PCL_PAPERSIZE_A6_CARD,
- PCL_PAPERSIZE_4x6,
- PCL_PAPERSIZE_5x8,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C6_ENV,
- PCL_PAPERSIZE_INVITATION_ENV,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- -1,
- },
+ dj600_papersizes,
+ basic_papertypes,
+ emptylist,
},
/* Deskjet 850/855/870/890 (C-RET) */
{ 800,
@@ -814,33 +876,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
PCL_COLOR_CMYK | PCL_COLOR_CMYK4,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A5,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_HAGAKI_CARD,
- PCL_PAPERSIZE_A6_CARD,
- PCL_PAPERSIZE_4x6,
- PCL_PAPERSIZE_5x8,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C6_ENV,
- PCL_PAPERSIZE_INVITATION_ENV,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- -1,
- },
+ dj600_papersizes,
+ basic_papertypes,
+ emptylist,
},
/* Deskjet 810C, 812C, 840C, 842C, 845C, 895C (C-RET) */
{ 840,
@@ -852,33 +890,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
PCL_COLOR_CMYK | PCL_COLOR_CMYK4b,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A5,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_HAGAKI_CARD,
- PCL_PAPERSIZE_A6_CARD,
- PCL_PAPERSIZE_4x6,
- PCL_PAPERSIZE_5x8,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C6_ENV,
- PCL_PAPERSIZE_INVITATION_ENV,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- -1,
- },
+ dj600_papersizes,
+ basic_papertypes,
+ emptylist,
},
/* Deskjet 900 series, 1220C, PhotoSmart P1000/P1100 */
{ 900,
@@ -889,33 +903,10 @@ static const pcl_cap_t pcl_model_capabilities[] =
{5, 33, 10, 10}, /* Oliver Vecernik */
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
- PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A5,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_HAGAKI_CARD,
- PCL_PAPERSIZE_A6_CARD,
- PCL_PAPERSIZE_4x6,
- PCL_PAPERSIZE_5x8,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C6_ENV,
- PCL_PAPERSIZE_INVITATION_ENV,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- { -1, /* No selectable paper sources */
- },
+ PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE | PCL_PRINTER_DUPLEX,
+ dj600_papersizes,
+ basic_papertypes,
+ emptylist,
},
/* Deskjet 1220C (or other large format 900) */
{ 901,
@@ -927,46 +918,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_TABLOID,
- PCL_PAPERSIZE_STATEMENT,
- PCL_PAPERSIZE_SUPER_B,
- PCL_PAPERSIZE_A5,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_A3,
- PCL_PAPERSIZE_JIS_B5,
- PCL_PAPERSIZE_JIS_B4,
- PCL_PAPERSIZE_HAGAKI_CARD,
- PCL_PAPERSIZE_OUFUKU_CARD,
- PCL_PAPERSIZE_A6_CARD,
- PCL_PAPERSIZE_4x6,
- PCL_PAPERSIZE_5x8,
- PCL_PAPERSIZE_3x5,
- PCL_PAPERSIZE_HP_CARD,
- PCL_PAPERSIZE_MONARCH_ENV,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C5_ENV,
- PCL_PAPERSIZE_C6_ENV,
- PCL_PAPERSIZE_INVITATION_ENV,
- PCL_PAPERSIZE_JAPANESE_3_ENV,
- PCL_PAPERSIZE_JAPANESE_4_ENV,
- PCL_PAPERSIZE_KAKU_ENV,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- { -1, /* No selectable paper sources */
- },
+ dj1220_papersizes,
+ basic_papertypes,
+ emptylist,
},
/* Deskjet 1100C, 1120C */
{ 1100,
@@ -978,45 +932,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
PCL_COLOR_CMYK | PCL_COLOR_CMYK4,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_TABLOID,
- PCL_PAPERSIZE_STATEMENT,
- PCL_PAPERSIZE_SUPER_B,
- PCL_PAPERSIZE_A5,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_A3,
- PCL_PAPERSIZE_JIS_B5,
- PCL_PAPERSIZE_JIS_B4,
- PCL_PAPERSIZE_HAGAKI_CARD,
- PCL_PAPERSIZE_A6_CARD,
- PCL_PAPERSIZE_4x6,
- PCL_PAPERSIZE_5x8,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C6_ENV,
- PCL_PAPERSIZE_INVITATION_ENV,
- PCL_PAPERSIZE_JAPANESE_3_ENV,
- PCL_PAPERSIZE_JAPANESE_4_ENV,
- PCL_PAPERSIZE_KAKU_ENV,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_DJ_TRAY,
- -1,
- },
+ dj1100_papersizes,
+ basic_papertypes,
+ dj_papersources,
},
/* Deskjet 1200C */
{ 1200,
@@ -1028,32 +946,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
PCL_COLOR_CMY,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
- {
-/* This printer is not mentioned in the Comparison tables,
- so I'll just pick some likely sizes... */
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A5,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_4x6,
- PCL_PAPERSIZE_5x8,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_DJ_TRAY,
- -1,
- },
+ dj1200_papersizes,
+ basic_papertypes,
+ dj_papersources,
},
/* Deskjet 1600C */
{ 1600,
@@ -1065,32 +960,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
- {
-/* This printer is not mentioned in the Comparison tables,
- so I'll just pick some likely sizes... */
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A5,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_4x6,
- PCL_PAPERSIZE_5x8,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- -1,
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_DJ_TRAY,
- -1,
- },
+ dj1200_papersizes,
+ basic_papertypes,
+ dj_papersources,
},
/* Deskjet 2000 */
{ 2000,
@@ -1102,39 +974,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A5,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_HAGAKI_CARD,
- PCL_PAPERSIZE_A6_CARD,
- PCL_PAPERSIZE_4x6,
- PCL_PAPERSIZE_5x8,
- PCL_PAPERSIZE_3x5,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C6_ENV,
- PCL_PAPERSIZE_INVITATION_ENV,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- PCL_PAPERTYPE_QPHOTO,
- PCL_PAPERTYPE_QTRANS,
- -1,
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_DJ_TRAY,
- -1,
- },
+ dj2000_papersizes,
+ new_papertypes,
+ dj_papersources,
},
/* Deskjet 2500 */
{ 2500,
@@ -1146,44 +988,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_TABLOID,
- PCL_PAPERSIZE_STATEMENT,
- PCL_PAPERSIZE_A5,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_A3,
- PCL_PAPERSIZE_JIS_B5,
- PCL_PAPERSIZE_JIS_B4,
- PCL_PAPERSIZE_HAGAKI_CARD,
- PCL_PAPERSIZE_A6_CARD,
- PCL_PAPERSIZE_4x6,
- PCL_PAPERSIZE_5x8,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- -1,
- },
- {
- PCL_PAPERTYPE_PLAIN,
- PCL_PAPERTYPE_BOND,
- PCL_PAPERTYPE_PREMIUM,
- PCL_PAPERTYPE_GLOSSY,
- PCL_PAPERTYPE_TRANS,
- PCL_PAPERTYPE_QPHOTO,
- PCL_PAPERTYPE_QTRANS,
- -1,
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_DJ_AUTO,
- PCL_PAPERSOURCE_DJ_TRAY,
- PCL_PAPERSOURCE_DJ_TRAY2,
- PCL_PAPERSOURCE_DJ_OPTIONAL,
- -1,
- },
+ dj2500_papersizes,
+ new_papertypes,
+ dj2500_papersources,
},
/* LaserJet II series */
{ 2,
@@ -1194,30 +1001,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
{12, 12, 10, 10}, /* Check/Fix */
PCL_COLOR_NONE,
PCL_PRINTER_LJ,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_STATEMENT,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_MONARCH_ENV,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C5_ENV,
- PCL_PAPERSIZE_C6_ENV,
- -1,
- },
- { -1, /* No selectable paper types */
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_LJ_TRAY1,
- PCL_PAPERSOURCE_LJ_TRAY2,
- PCL_PAPERSOURCE_LJ_TRAY3,
- PCL_PAPERSOURCE_LJ_TRAY4,
- -1,
- },
+ ljsmall_papersizes,
+ emptylist,
+ laserjet_papersources,
},
/* LaserJet IIP (TIFF but no blankline) */
{ 21,
@@ -1228,30 +1014,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
{12, 12, 10, 10}, /* Check/Fix */
PCL_COLOR_NONE,
PCL_PRINTER_LJ | PCL_PRINTER_TIFF,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_STATEMENT,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_MONARCH_ENV,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C5_ENV,
- PCL_PAPERSIZE_C6_ENV,
- -1,
- },
- { -1, /* No selectable paper types */
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_LJ_TRAY1,
- PCL_PAPERSOURCE_LJ_TRAY2,
- PCL_PAPERSOURCE_LJ_TRAY3,
- PCL_PAPERSOURCE_LJ_TRAY4,
- -1,
- },
+ ljsmall_papersizes,
+ emptylist,
+ laserjet_papersources,
},
/* LaserJet III series */
{ 3,
@@ -1262,30 +1027,9 @@ static const pcl_cap_t pcl_model_capabilities[] =
{12, 12, 10, 10}, /* Check/Fix */
PCL_COLOR_NONE,
PCL_PRINTER_LJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_STATEMENT,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_MONARCH_ENV,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C5_ENV,
- PCL_PAPERSIZE_C6_ENV,
- -1,
- },
- { -1, /* No selectable paper types */
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_LJ_TRAY1,
- PCL_PAPERSOURCE_LJ_TRAY2,
- PCL_PAPERSOURCE_LJ_TRAY3,
- PCL_PAPERSOURCE_LJ_TRAY4,
- -1,
- },
+ ljsmall_papersizes,
+ emptylist,
+ laserjet_papersources,
},
/* LaserJet 4L */
{ 4,
@@ -1296,32 +1040,11 @@ static const pcl_cap_t pcl_model_capabilities[] =
{12, 12, 10, 10}, /* Check/Fix */
PCL_COLOR_NONE,
PCL_PRINTER_LJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_STATEMENT,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_MONARCH_ENV,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C5_ENV,
- PCL_PAPERSIZE_C6_ENV,
- -1,
- },
- { -1, /* No selectable paper types */
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_LJ_TRAY1,
- PCL_PAPERSOURCE_LJ_TRAY2,
- PCL_PAPERSOURCE_LJ_TRAY3,
- PCL_PAPERSOURCE_LJ_TRAY4,
- -1,
- },
+ ljsmall_papersizes,
+ emptylist,
+ laserjet_papersources,
},
- /* LaserJet 4V, 4Si */
+ /* LaserJet 4V */
{ 5,
13 * 72, 19 * 72,
1, 1, /* Min paper size */
@@ -1330,37 +1053,23 @@ static const pcl_cap_t pcl_model_capabilities[] =
{12, 12, 10, 10}, /* Check/Fix */
PCL_COLOR_NONE,
PCL_PRINTER_LJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_STATEMENT,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_TABLOID,
- PCL_PAPERSIZE_A5,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_A3,
- PCL_PAPERSIZE_JIS_B5,
- PCL_PAPERSIZE_JIS_B4, /* Guess */
- PCL_PAPERSIZE_4x6,
- PCL_PAPERSIZE_5x8,
- PCL_PAPERSIZE_MONARCH_ENV,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C5_ENV,
- PCL_PAPERSIZE_C6_ENV,
- -1,
- },
- { -1, /* No selectable paper types */
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_LJ_TRAY1,
- PCL_PAPERSOURCE_LJ_TRAY2,
- PCL_PAPERSOURCE_LJ_TRAY3,
- PCL_PAPERSOURCE_LJ_TRAY4,
- -1,
- },
+ ljbig_papersizes,
+ emptylist,
+ laserjet_papersources,
+ },
+ /* LaserJet 4Si */
+ { 51,
+ 13 * 72, 19 * 72,
+ 1, 1, /* Min paper size */
+ PCL_RES_150_150 | PCL_RES_300_300 | PCL_RES_600_600,
+ {12, 12, 18, 18},
+ {12, 12, 10, 10}, /* Check/Fix */
+ PCL_COLOR_NONE,
+ PCL_PRINTER_LJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE |
+ PCL_PRINTER_DUPLEX,
+ ljbig_papersizes,
+ emptylist,
+ laserjet_papersources,
},
/* LaserJet 4 series (except as above), 5 series, 6 series */
{ 6,
@@ -1370,31 +1079,11 @@ static const pcl_cap_t pcl_model_capabilities[] =
{12, 12, 18, 18},
{12, 12, 10, 10}, /* Check/Fix */
PCL_COLOR_NONE,
- PCL_PRINTER_LJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_STATEMENT,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_MONARCH_ENV,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C5_ENV,
- PCL_PAPERSIZE_C6_ENV,
- -1,
- },
- { -1, /* No selectable paper types */
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_LJ_TRAY1,
- PCL_PAPERSOURCE_LJ_TRAY2,
- PCL_PAPERSOURCE_LJ_TRAY3,
- PCL_PAPERSOURCE_LJ_TRAY4,
- -1,
- },
+ PCL_PRINTER_LJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE |
+ PCL_PRINTER_DUPLEX,
+ ljsmall_papersizes,
+ emptylist,
+ laserjet_papersources,
},
/* LaserJet 5Si */
{ 7,
@@ -1404,201 +1093,179 @@ static const pcl_cap_t pcl_model_capabilities[] =
{12, 12, 18, 18},
{12, 12, 10, 10}, /* Check/Fix */
PCL_COLOR_NONE,
- PCL_PRINTER_LJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
- {
- PCL_PAPERSIZE_EXECUTIVE,
- PCL_PAPERSIZE_STATEMENT,
- PCL_PAPERSIZE_LETTER,
- PCL_PAPERSIZE_LEGAL,
- PCL_PAPERSIZE_TABLOID,
- PCL_PAPERSIZE_A5,
- PCL_PAPERSIZE_A4,
- PCL_PAPERSIZE_A3,
- PCL_PAPERSIZE_JIS_B5,
- PCL_PAPERSIZE_JIS_B4, /* Guess */
- PCL_PAPERSIZE_4x6,
- PCL_PAPERSIZE_5x8,
- PCL_PAPERSIZE_MONARCH_ENV,
- PCL_PAPERSIZE_COMMERCIAL10_ENV,
- PCL_PAPERSIZE_DL_ENV,
- PCL_PAPERSIZE_C5_ENV,
- PCL_PAPERSIZE_C6_ENV,
- -1,
- },
- { -1, /* No selectable paper types */
- },
- {
- PCL_PAPERSOURCE_STANDARD,
- PCL_PAPERSOURCE_MANUAL,
- PCL_PAPERSOURCE_LJ_TRAY1,
- PCL_PAPERSOURCE_LJ_TRAY2,
- PCL_PAPERSOURCE_LJ_TRAY3,
- PCL_PAPERSOURCE_LJ_TRAY4,
- -1,
- },
+ PCL_PRINTER_LJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE |
+ PCL_PRINTER_DUPLEX,
+ ljbig_papersizes,
+ emptylist,
+ laserjet_papersources,
},
};
-static const double sat_adjustment[49] =
+static const char standard_sat_adjustment[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* B */
+/* B */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* M */
+/* M */ "1.00 0.95 0.90 0.90 0.90 0.90 0.90 0.90 " /* R */
+/* R */ "0.90 0.95 0.95 1.00 1.00 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* G */
+/* G */ "1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char standard_lum_adjustment[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"0\" upper-bound=\"4\">\n"
+/* C */ "0.65 0.67 0.70 0.72 0.77 0.80 0.82 0.85 " /* B */
+/* B */ "0.87 0.86 0.82 0.79 0.79 0.82 0.85 0.88 " /* M */
+/* M */ "0.92 0.95 0.96 0.97 0.97 0.97 0.96 0.96 " /* R */
+/* R */ "0.96 0.97 0.97 0.98 0.99 1.00 1.00 1.00 " /* Y */
+/* Y */ "1.00 0.97 0.95 0.94 0.93 0.92 0.90 0.86 " /* G */
+/* G */ "0.79 0.76 0.71 0.68 0.68 0.68 0.68 0.66 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const char standard_hue_adjustment[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<gutenprint>\n"
+"<curve wrap=\"wrap\" type=\"linear\" gamma=\"0\">\n"
+"<sequence count=\"48\" lower-bound=\"-6\" upper-bound=\"6\">\n"
+/* C */ "0.00 0.06 0.10 0.10 0.06 -.01 -.09 -.17 " /* B */
+/* B */ "-.25 -.33 -.38 -.38 -.36 -.34 -.34 -.34 " /* M */
+/* M */ "-.34 -.34 -.36 -.40 -.50 -.40 -.30 -.20 " /* R */
+/* R */ "-.12 -.07 -.04 -.02 0.00 0.00 0.00 0.00 " /* Y */
+/* Y */ "0.00 0.00 0.00 -.05 -.10 -.15 -.22 -.24 " /* G */
+/* G */ "-.26 -.30 -.33 -.28 -.25 -.20 -.13 -.06 " /* C */
+"</sequence>\n"
+"</curve>\n"
+"</gutenprint>\n";
+
+static const stp_parameter_t the_parameters[] =
{
- 1.0, /* C */
- 1.1,
- 1.2,
- 1.3,
- 1.4,
- 1.5,
- 1.6,
- 1.7,
- 1.8, /* B */
- 1.9,
- 1.9,
- 1.9,
- 1.7,
- 1.5,
- 1.3,
- 1.1,
- 1.0, /* M */
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0, /* R */
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0, /* Y */
- 1.0,
- 1.0,
- 1.1,
- 1.2,
- 1.3,
- 1.4,
- 1.5,
- 1.5, /* G */
- 1.4,
- 1.3,
- 1.2,
- 1.1,
- 1.0,
- 1.0,
- 1.0,
- 1.0 /* C */
+ {
+ "PageSize", N_("Page Size"), N_("Basic Printer Setup"),
+ N_("Size of the paper being printed to"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "MediaType", N_("Media Type"), N_("Basic Printer Setup"),
+ N_("Type of media (plain paper, photo paper, etc.)"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "InputSlot", N_("Media Source"), N_("Basic Printer Setup"),
+ N_("Source (input slot) of the media"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "Resolution", N_("Resolution"), N_("Basic Printer Setup"),
+ N_("Resolution and quality of the print"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "InkType", N_("Ink Type"), N_("Advanced Printer Setup"),
+ N_("Type of ink in the printer"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "InkChannels", N_("Ink Channels"), N_("Advanced Printer Functionality"),
+ N_("Ink Channels"),
+ STP_PARAMETER_TYPE_INT, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_INTERNAL, 0, 0, -1, 0, 0
+ },
+ {
+ "PrintingMode", N_("Printing Mode"), N_("Core Parameter"),
+ N_("Printing Output Mode"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "Duplex", N_("Double-Sided Printing"), N_("Basic Printer Setup"),
+ N_("Duplex/Tumble Setting"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
};
-static const double lum_adjustment[49] =
-{
- 0.50, /* C */
- 0.6,
- 0.7,
- 0.8,
- 0.9,
- 0.86,
- 0.82,
- 0.79,
- 0.78, /* B */
- 0.8,
- 0.83,
- 0.87,
- 0.9,
- 0.95,
- 1.05,
- 1.15,
- 1.3, /* M */
- 1.25,
- 1.2,
- 1.15,
- 1.12,
- 1.09,
- 1.06,
- 1.03,
- 1.0, /* R */
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0,
- 1.0, /* Y */
- 0.9,
- 0.8,
- 0.7,
- 0.65,
- 0.6,
- 0.55,
- 0.52,
- 0.48, /* G */
- 0.47,
- 0.47,
- 0.49,
- 0.49,
- 0.49,
- 0.52,
- 0.51,
- 0.50 /* C */
-};
+static const int the_parameter_count =
+sizeof(the_parameters) / sizeof(const stp_parameter_t);
-static const double hue_adjustment[49] =
+typedef struct
+{
+ const stp_parameter_t param;
+ double min;
+ double max;
+ double defval;
+ int color_only;
+} float_param_t;
+
+static const float_param_t float_parameters[] =
{
- 0.00, /* C */
- 0.05,
- 0.04,
- 0.01,
- -0.03,
- -0.10,
- -0.18,
- -0.26,
- -0.35, /* B */
- -0.43,
- -0.40,
- -0.32,
- -0.25,
- -0.18,
- -0.10,
- -0.07,
- 0.00, /* M */
- -0.04,
- -0.09,
- -0.13,
- -0.18,
- -0.23,
- -0.27,
- -0.31,
- -0.35, /* R */
- -0.38,
- -0.30,
- -0.23,
- -0.15,
- -0.08,
- 0.00,
- -0.02,
- 0.00, /* Y */
- 0.08,
- 0.10,
- 0.08,
- 0.05,
- 0.03,
- -0.03,
- -0.12,
- -0.20, /* G */
- -0.17,
- -0.20,
- -0.17,
- -0.15,
- -0.12,
- -0.10,
- -0.08,
- 0.00, /* C */
+ {
+ {
+ "CyanDensity", N_("Cyan Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the cyan balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 1, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "MagentaDensity", N_("Magenta Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the magenta balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 2, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "YellowDensity", N_("Yellow Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the yellow balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 3, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "BlackDensity", N_("Black Balance"), N_("Output Level Adjustment"),
+ N_("Adjust the black balance"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED, 0, 1, 0, 1, 0
+ }, 0.0, 2.0, 1.0, 1
+ },
+ {
+ {
+ "LightCyanTransition", N_("Light Cyan Transition"), N_("Advanced Ink Adjustment"),
+ N_("Light Cyan Transition"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, -1, 1, 0
+ }, 0.0, 5.0, 1.0, 1
+ },
+ {
+ {
+ "LightMagentaTransition", N_("Light Magenta Transition"), N_("Advanced Ink Adjustment"),
+ N_("Light Magenta Transition"),
+ STP_PARAMETER_TYPE_DOUBLE, STP_PARAMETER_CLASS_OUTPUT,
+ STP_PARAMETER_LEVEL_ADVANCED4, 0, 1, -1, 1, 0
+ }, 0.0, 5.0, 1.0, 1
+ },
};
+static const int float_parameter_count =
+sizeof(float_parameters) / sizeof(const float_param_t);
+
/*
* Convert a name into it's option value
*/
@@ -1680,14 +1347,19 @@ static const char * pcl_val_to_text(int code, /* I: Code */
}
static const double dot_sizes[] = { 0.5, 0.832, 1.0 };
-static const stp_simple_dither_range_t variable_dither_ranges[] =
+static const double dot_sizes_cret[] = { 1.0, 1.0, 1.0 };
+
+static const stp_dotsize_t variable_dotsizes[] =
+{
+ { 0x1, 0.5 },
+ { 0x2, 0.67 },
+ { 0x3, 1.0 }
+};
+
+static const stp_shade_t variable_shades[] =
{
- { 0.152, 0x1, 1 },
- { 0.255, 0x2, 1 },
- { 0.38, 0x3, 1 },
- { 0.5, 0x1, 0 },
- { 0.67, 0x2, 0 },
- { 1.0, 0x3, 0 }
+ { 0.38, 3, variable_dotsizes },
+ { 1.0, 3, variable_dotsizes }
};
/*
@@ -1708,14 +1380,6 @@ pcl_get_model_capabilities(int model) /* I: Model */
return &(pcl_model_capabilities[0]);
}
-static char *
-c_strdup(const char *s)
-{
- char *ret = stp_malloc(strlen(s) + 1);
- strcpy(ret, s);
- return ret;
-}
-
/*
* Convert Media size name into PCL media code for printer
*/
@@ -1733,7 +1397,7 @@ static int pcl_convert_media_size(const char *media_size, /* I: Media size strin
*/
media_code = pcl_string_to_val(media_size, pcl_media_sizes,
- sizeof(pcl_media_sizes) / sizeof(pcl_t));
+ NUM_PRINTER_PAPER_SIZES);
stp_deprintf(STP_DBG_PCL, "Media Size: %s, Code: %d\n", media_size, media_code);
@@ -1745,7 +1409,7 @@ static int pcl_convert_media_size(const char *media_size, /* I: Media size strin
caps = pcl_get_model_capabilities(model);
for (i=0; (i<NUM_PRINTER_PAPER_SIZES) && (caps->paper_sizes[i] != -1); i++) {
- if (media_code == caps->paper_sizes[i])
+ if (media_code == (int) caps->paper_sizes[i])
return(media_code); /* Is supported */
}
@@ -1758,19 +1422,32 @@ static int pcl_convert_media_size(const char *media_size, /* I: Media size strin
}
-static stp_param_t ink_types[] =
+static const stp_param_string_t ink_types[] =
{
{ "CMYK", N_ ("Color + Black Cartridges") },
{ "Photo", N_ ("Color + Photo Cartridges") }
};
+/*
+ * Duplex support - modes available
+ * Note that the internal names MUST match those in cups/genppd.c else the
+ * PPD files will not be generated correctly
+ */
+
+static const stp_param_string_t duplex_types[] =
+{
+ { "None", N_ ("Off") },
+ { "DuplexNoTumble", N_ ("Long Edge (Standard)") },
+ { "DuplexTumble", N_ ("Short Edge (Flip)") }
+};
+#define NUM_DUPLEX (sizeof (duplex_types) / sizeof (stp_param_string_t))
/*
* 'pcl_papersize_valid()' - Is the paper size valid for this printer.
*/
static const int
-pcl_papersize_valid(const stp_papersize_t pt,
+pcl_papersize_valid(const stp_papersize_t *pt,
int model)
{
@@ -1783,8 +1460,8 @@ pcl_papersize_valid(const stp_papersize_t pt,
== PCL_PRINTER_CUSTOM_SIZE);
#endif
- unsigned int pwidth = stp_papersize_get_width(pt);
- unsigned int pheight = stp_papersize_get_height(pt);
+ unsigned int pwidth = pt->width;
+ unsigned int pheight = pt->height;
/*
* This function decides whether a paper size is allowed for the
@@ -1799,14 +1476,14 @@ pcl_papersize_valid(const stp_papersize_t pt,
* Is it a valid name?
*/
- if (strlen(stp_papersize_get_name(pt)) <= 0)
+ if (strlen(pt->name) <= 0)
return(0);
/*
* Is it a recognised supported name?
*/
- if (pcl_convert_media_size(stp_papersize_get_name(pt), model) != -1)
+ if (pcl_convert_media_size(pt->name, model) != -1)
return(1);
/*
@@ -1834,24 +1511,29 @@ pcl_papersize_valid(const stp_papersize_t pt,
* 'pcl_parameters()' - Return the parameter values for the given parameter.
*/
-static stp_param_t * /* O - Parameter values */
-pcl_parameters(const stp_printer_t printer,/* I - Printer model */
- const char *ppd_file, /* I - PPD file (not used) */
- const char *name, /* I - Name of parameter */
- int *count) /* O - Number of values */
+static stp_parameter_list_t
+pcl_list_parameters(const stp_vars_t *v)
+{
+ stp_parameter_list_t *ret = stp_parameter_list_create();
+ int i;
+ for (i = 0; i < the_parameter_count; i++)
+ stp_parameter_list_add_param(ret, &(the_parameters[i]));
+ for (i = 0; i < float_parameter_count; i++)
+ stp_parameter_list_add_param(ret, &(float_parameters[i].param));
+ return ret;
+}
+
+static void
+pcl_parameters(const stp_vars_t *v, const char *name,
+ stp_parameter_t *description)
{
- int model = stp_printer_get_model(printer);
+ int model = stp_get_model_id(v);
int i;
- stp_param_t *valptrs;
const pcl_cap_t *caps;
-
- if (count == NULL)
- return (NULL);
-
- *count = 0;
+ description->p_type = STP_PARAMETER_TYPE_INVALID;
if (name == NULL)
- return (NULL);
+ return;
stp_deprintf(STP_DBG_PCL, "pcl_parameters(): Name = %s\n", name);
@@ -1869,370 +1551,502 @@ pcl_parameters(const stp_printer_t printer,/* I - Printer model */
stp_deprintf(STP_DBG_PCL, "Resolutions: %d\n", caps->resolutions);
stp_deprintf(STP_DBG_PCL, "ColorType = %d, PrinterType = %d\n", caps->color_type, caps->stp_printer_type);
+ for (i = 0; i < float_parameter_count; i++)
+ if (strcmp(name, float_parameters[i].param.name) == 0)
+ {
+ stp_fill_parameter_settings(description,
+ &(float_parameters[i].param));
+ description->deflt.dbl = float_parameters[i].defval;
+ description->bounds.dbl.upper = float_parameters[i].max;
+ description->bounds.dbl.lower = float_parameters[i].min;
+ }
+
+ for (i = 0; i < the_parameter_count; i++)
+ if (strcmp(name, the_parameters[i].name) == 0)
+ {
+ stp_fill_parameter_settings(description, &(the_parameters[i]));
+ break;
+ }
+ description->deflt.str = NULL;
+
if (strcmp(name, "PageSize") == 0)
{
int papersizes = stp_known_papersizes();
- valptrs = stp_malloc(sizeof(stp_param_t) * papersizes);
- *count = 0;
+ description->bounds.str = stp_string_list_create();
for (i = 0; i < papersizes; i++)
{
- const stp_papersize_t pt = stp_get_papersize_by_index(i);
- if (strlen(stp_papersize_get_name(pt)) > 0)
- {
- if (pcl_papersize_valid(pt, model))
- {
- valptrs[*count].name = c_strdup(stp_papersize_get_name(pt));
- valptrs[*count].text = c_strdup(stp_papersize_get_text(pt));
- (*count)++;
- }
- }
+ const stp_papersize_t *pt = stp_get_papersize_by_index(i);
+ if (strlen(pt->name) > 0 && pcl_papersize_valid(pt, model))
+ stp_string_list_add_string(description->bounds.str,
+ pt->name, pt->text);
}
- return (valptrs);
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
}
else if (strcmp(name, "MediaType") == 0)
{
- if (caps->paper_types[0] == -1)
- {
- *count = 0;
- return (NULL);
- }
- else
- {
- valptrs = stp_malloc(sizeof(stp_param_t) * NUM_PRINTER_PAPER_TYPES);
- *count = 0;
- for (i=0; (i < NUM_PRINTER_PAPER_TYPES) && (caps->paper_types[i] != -1); i++)
+ description->bounds.str = stp_string_list_create();
+ if (caps->paper_types[0] != -1)
{
- valptrs[i].name = c_strdup(pcl_val_to_string(caps->paper_types[i],
- pcl_media_types,
- NUM_PRINTER_PAPER_TYPES));
- valptrs[i].text = c_strdup(pcl_val_to_text(caps->paper_types[i],
- pcl_media_types,
- NUM_PRINTER_PAPER_TYPES));
- (*count)++;
+ for (i=0; (i < NUM_PRINTER_PAPER_TYPES) && (caps->paper_types[i] != -1); i++)
+ stp_string_list_add_string(description->bounds.str,
+ pcl_val_to_string(caps->paper_types[i],
+ pcl_media_types,
+ NUM_PRINTER_PAPER_TYPES),
+ pcl_val_to_text(caps->paper_types[i],
+ pcl_media_types,
+ NUM_PRINTER_PAPER_TYPES));
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
}
- return(valptrs);
- }
+ else
+ description->is_active = 0;
}
else if (strcmp(name, "InputSlot") == 0)
{
- if (caps->paper_sources[0] == -1)
- {
- *count = 0;
- return (NULL);
- }
- else
- {
- valptrs = stp_malloc(sizeof(stp_param_t) * NUM_PRINTER_PAPER_SOURCES);
- *count = 0;
- for (i=0; (i < NUM_PRINTER_PAPER_SOURCES) && (caps->paper_sources[i] != -1); i++)
+ description->bounds.str = stp_string_list_create();
+ if (caps->paper_sources[0] != -1)
{
- valptrs[i].name = c_strdup(pcl_val_to_string(caps->paper_sources[i],
- pcl_media_sources,
- NUM_PRINTER_PAPER_SOURCES));
- valptrs[i].text = c_strdup(pcl_val_to_text(caps->paper_sources[i],
- pcl_media_sources,
- NUM_PRINTER_PAPER_SOURCES));
- (*count)++;
+ for (i=0; (i < NUM_PRINTER_PAPER_SOURCES) && (caps->paper_sources[i] != -1); i++)
+ stp_string_list_add_string(description->bounds.str,
+ pcl_val_to_string(caps->paper_sources[i],
+ pcl_media_sources,
+ NUM_PRINTER_PAPER_SOURCES),
+ pcl_val_to_text(caps->paper_sources[i],
+ pcl_media_sources,
+ NUM_PRINTER_PAPER_SOURCES));
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
}
- return(valptrs);
- }
+ else
+ description->is_active = 0;
}
else if (strcmp(name, "Resolution") == 0)
{
- *count = 0;
- valptrs = stp_malloc(sizeof(stp_param_t) * NUM_RESOLUTIONS);
+ description->bounds.str = stp_string_list_create();
+ description->deflt.str = NULL;
for (i = 0; i < NUM_RESOLUTIONS; i++)
- {
if (caps->resolutions & pcl_resolutions[i].pcl_code)
- {
- valptrs[*count].name = c_strdup(pcl_val_to_string(pcl_resolutions[i].pcl_code,
- pcl_resolutions, NUM_RESOLUTIONS));
- valptrs[*count].text = c_strdup(pcl_val_to_text(pcl_resolutions[i].pcl_code,
- pcl_resolutions, NUM_RESOLUTIONS));
- (*count)++;
- }
- }
- return(valptrs);
+ {
+ if (pcl_resolutions[i].pcl_code >= PCL_RES_300_300 &&
+ description->deflt.str == NULL)
+ description->deflt.str =
+ pcl_val_to_string(pcl_resolutions[i].pcl_code,
+ pcl_resolutions, NUM_RESOLUTIONS);
+ stp_string_list_add_string
+ (description->bounds.str,
+ pcl_val_to_string(pcl_resolutions[i].pcl_code,
+ pcl_resolutions, NUM_RESOLUTIONS),
+ pcl_val_to_text(pcl_resolutions[i].pcl_code,
+ pcl_resolutions, NUM_RESOLUTIONS));
+ }
+ if (description->deflt.str == NULL)
+ stp_erprintf("No default resolution set!\n");
}
else if (strcmp(name, "InkType") == 0)
{
+ description->bounds.str = stp_string_list_create();
if (caps->color_type & PCL_COLOR_CMYKcm)
{
- valptrs = stp_malloc(sizeof(stp_param_t) * 2);
- valptrs[0].name = c_strdup(ink_types[0].name);
- valptrs[0].text = c_strdup(_(ink_types[0].text));
- valptrs[1].name = c_strdup(ink_types[1].name);
- valptrs[1].text = c_strdup(_(ink_types[1].text));
- *count = 2;
- return(valptrs);
+ description->deflt.str = ink_types[0].name;
+ stp_string_list_add_string(description->bounds.str,
+ ink_types[0].name,_(ink_types[0].text));
+ stp_string_list_add_string(description->bounds.str,
+ ink_types[1].name,_(ink_types[1].text));
}
else
- return(NULL);
+ description->is_active = 0;
}
- else
- return (NULL);
-}
-
-static const char *
-pcl_default_parameters(const stp_printer_t printer,
- const char *ppd_file,
- const char *name)
-{
- int model = stp_printer_get_model(printer);
- int i;
- const pcl_cap_t *caps;
-
- if (name == NULL)
- return (NULL);
+ else if (strcmp(name, "Duplex") == 0)
+ {
+ int offer_duplex=0;
- stp_deprintf(STP_DBG_PCL, "pcl_default_parameters(): Name = %s\n", name);
+ description->bounds.str = stp_string_list_create();
- caps = pcl_get_model_capabilities(model);
+/*
+ * Don't offer the Duplex/Tumble options if the JobMode parameter is
+ * set to "Page" Mode.
+ * "Page" mode is set by the Gimp Plugin, which only outputs one page at a
+ * time, so Duplex/Tumble is meaningless.
+ */
- stp_deprintf(STP_DBG_PCL, "Printer model = %d\n", model);
- stp_deprintf(STP_DBG_PCL, "PageWidth = %d, PageHeight = %d\n", caps->custom_max_width, caps->custom_max_height);
- stp_deprintf(STP_DBG_PCL, "MinPageWidth = %d, MinPageHeight = %d\n", caps->custom_min_width, caps->custom_min_height);
- stp_deprintf(STP_DBG_PCL, "Normal Margins: top = %d, bottom = %d, left = %d, right = %d\n",
- caps->normal_margins.top_margin, caps->normal_margins.bottom_margin,
- caps->normal_margins.left_margin, caps->normal_margins.right_margin);
- stp_deprintf(STP_DBG_PCL, "A4 Margins: top = %d, bottom = %d, left = %d, right = %d\n",
- caps->a4_margins.top_margin, caps->a4_margins.bottom_margin,
- caps->a4_margins.left_margin, caps->a4_margins.right_margin);
- stp_deprintf(STP_DBG_PCL, "Resolutions: %d\n", caps->resolutions);
- stp_deprintf(STP_DBG_PCL, "ColorType = %d, PrinterType = %d\n", caps->color_type, caps->stp_printer_type);
+ if (stp_get_string_parameter(v, "JobMode"))
+ offer_duplex = strcmp(stp_get_string_parameter(v, "JobMode"), "Page");
+ else
+ offer_duplex=1;
- if (strcmp(name, "PageSize") == 0)
- {
- int papersizes = stp_known_papersizes();
- for (i = 0; i < papersizes; i++)
- {
- const stp_papersize_t pt = stp_get_papersize_by_index(i);
- if (strlen(stp_papersize_get_name(pt)) > 0 &&
- pcl_papersize_valid(pt, model))
- {
- return (stp_papersize_get_name(pt));
- }
- }
- return NULL;
- }
- else if (strcmp(name, "MediaType") == 0)
+ if (offer_duplex)
{
- if (caps->paper_types[0] == -1)
- {
- return (NULL);
- }
+ if (caps->stp_printer_type & PCL_PRINTER_DUPLEX)
+ {
+ description->deflt.str = duplex_types[0].name;
+ for (i=0; i < NUM_DUPLEX; i++)
+ {
+ stp_string_list_add_string(description->bounds.str,
+ duplex_types[i].name,_(duplex_types[i].text));
+ }
+ }
else
- {
- return (pcl_val_to_string(caps->paper_types[0], pcl_media_types,
- NUM_PRINTER_PAPER_TYPES));
- }
+ description->is_active = 0; /* Not supported by printer */
}
- else if (strcmp(name, "InputSlot") == 0)
- {
- if (caps->paper_sources[0] == -1)
- {
- return (NULL);
- }
+ else
+ description->is_active = 0; /* Not in "Job" mode */
+ }
+ else if (strcmp(name, "CyanDensity") == 0 ||
+ strcmp(name, "MagentaDensity") == 0 ||
+ strcmp(name, "YellowDensity") == 0 ||
+ strcmp(name, "BlackDensity") == 0)
+ {
+ if (caps->color_type != PCL_COLOR_NONE &&
+ stp_check_string_parameter(v, "PrintingMode", STP_PARAMETER_DEFAULTED) &&
+ strcmp(stp_get_string_parameter(v, "PrintingMode"), "Color") == 0)
+ description->is_active = 1;
else
- {
- return (pcl_val_to_string(caps->paper_sources[0], pcl_media_sources,
- NUM_PRINTER_PAPER_SOURCES));
- }
+ description->is_active = 0;
}
- else if (strcmp(name, "Resolution") == 0)
+ else if (strcmp(name, "LightCyanTransition") == 0 ||
+ strcmp(name, "LightMagentaTransition") == 0)
{
- for (i = 0; i < NUM_RESOLUTIONS; i++)
- {
- if ((caps->resolutions & pcl_resolutions[i].pcl_code) &&
- (pcl_resolutions[i].pcl_code >= PCL_RES_300_300))
- {
- return (pcl_val_to_string(pcl_resolutions[i].pcl_code,
- pcl_resolutions, NUM_RESOLUTIONS));
- }
- }
- /* If printer can't handle at least 300x300, look for anything that */
- /* works */
- for (i = 0; i < NUM_RESOLUTIONS; i++)
- {
- if ((caps->resolutions & pcl_resolutions[i].pcl_code))
- {
- return (pcl_val_to_string(pcl_resolutions[i].pcl_code,
- pcl_resolutions, NUM_RESOLUTIONS));
- }
- }
- return NULL;
+ if (caps->color_type & PCL_COLOR_CMYKcm &&
+ stp_check_string_parameter(v, "PrintingMode", STP_PARAMETER_DEFAULTED) &&
+ strcmp(stp_get_string_parameter(v, "PrintingMode"), "Color") == 0)
+ description->is_active = 1;
+ else
+ description->is_active = 0;
}
- else if (strcmp(name, "InkType") == 0)
+ else if (strcmp(name, "InkChannels") == 0)
{
if (caps->color_type & PCL_COLOR_CMYKcm)
- {
- return (ink_types[0].name);
- }
+ description->deflt.integer = 6;
+ else if (caps->color_type == PCL_COLOR_NONE)
+ description->deflt.integer = 1;
else
- return(NULL);
+ description->deflt.integer = 4;
+ description->bounds.integer.lower = -1;
+ description->bounds.integer.upper = -1;
+ }
+ else if (strcmp(name, "PrintingMode") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ if (caps->color_type != PCL_COLOR_NONE)
+ stp_string_list_add_string
+ (description->bounds.str, "Color", _("Color"));
+ stp_string_list_add_string
+ (description->bounds.str, "BW", _("Black and White"));
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
}
- else
- return (NULL);
}
/*
* 'pcl_imageable_area()' - Return the imageable area of the page.
*/
-
static void
-pcl_imageable_area(const stp_printer_t printer, /* I - Printer model */
- const stp_vars_t v, /* I */
- int *left, /* O - Left position in points */
- int *right, /* O - Right position in points */
- int *bottom, /* O - Bottom position in points */
- int *top) /* O - Top position in points */
+internal_imageable_area(const stp_vars_t *v, /* I */
+ int use_paper_margins,
+ int *left, /* O - Left position in points */
+ int *right, /* O - Right position in points */
+ int *bottom, /* O - Bottom position in points */
+ int *top) /* O - Top position in points */
{
int width, height; /* Size of page */
const pcl_cap_t *caps; /* Printer caps */
int pcl_media_size; /* Converted media size */
- const char *media_size; /* Media size string */
- stp_papersize_t pp;
+ const char *media_size = stp_get_string_parameter(v, "PageSize");
+ const stp_papersize_t *pp = NULL;
+ int left_margin = 0;
+ int right_margin = 0;
+ int bottom_margin = 0;
+ int top_margin = 0;
- caps = pcl_get_model_capabilities(stp_printer_get_model(printer));
+ caps = pcl_get_model_capabilities(stp_get_model_id(v));
- stp_default_media_size(printer, v, &width, &height);
+ stp_default_media_size(v, &width, &height);
/* If we are using A4 paper, then the margins are different than any
* other paper size. This is because HP wanted to have the same printable
* width for A4 as for letter. Go figure.
*/
- if (strlen(stp_get_media_size(v)) > 0)
- media_size = stp_get_media_size(v);
- else if ((pp = stp_get_papersize_by_size(stp_get_page_height(v),
- stp_get_page_width(v))) != NULL)
- media_size = stp_papersize_get_name(pp);
- else
+ if (!media_size)
media_size = "";
+ if (strlen(media_size) == 0 &&
+ ((pp = stp_get_papersize_by_size(stp_get_page_height(v),
+ stp_get_page_width(v))) != NULL))
+ media_size = pp->name;
stp_deprintf(STP_DBG_PCL, "pcl_imageable_area(): media_size: '%s'\n",
- media_size);
+ media_size);
- pcl_media_size = pcl_convert_media_size(media_size,
- stp_printer_get_model(printer));
+ pcl_media_size = pcl_convert_media_size(media_size, stp_get_model_id(v));
+ if (media_size)
+ pp = stp_get_papersize_by_name(media_size);
+ if (pp && use_paper_margins)
+ {
+ left_margin = pp->left;
+ right_margin = pp->right;
+ bottom_margin = pp->bottom;
+ top_margin = pp->top;
+ }
if (pcl_media_size == PCL_PAPERSIZE_A4)
{
- *left = caps->a4_margins.left_margin;
- *right = width - caps->a4_margins.right_margin;
- *top = height - caps->a4_margins.top_margin;
- *bottom = caps->a4_margins.bottom_margin;
+ left_margin = MAX(left_margin, caps->a4_margins.left_margin);
+ right_margin = MAX(right_margin, caps->a4_margins.right_margin);
+ top_margin = MAX(top_margin, caps->a4_margins.top_margin);
+ bottom_margin = MAX(bottom_margin, caps->a4_margins.bottom_margin);
}
else
{
- *left = caps->normal_margins.left_margin;
- *right = width - caps->normal_margins.right_margin;
- *top = height - caps->normal_margins.top_margin;
- *bottom = caps->normal_margins.bottom_margin;
+ left_margin = MAX(left_margin, caps->normal_margins.left_margin);
+ right_margin = MAX(right_margin, caps->normal_margins.right_margin);
+ top_margin = MAX(top_margin, caps->normal_margins.top_margin);
+ bottom_margin = MAX(bottom_margin, caps->normal_margins.bottom_margin);
}
+ *left = left_margin;
+ *right = width - right_margin;
+ *top = top_margin;
+ *bottom = height - bottom_margin;
}
static void
-pcl_limit(const stp_printer_t printer, /* I - Printer model */
- const stp_vars_t v, /* I */
+pcl_imageable_area(const stp_vars_t *v, /* I */
+ int *left, /* O - Left position in points */
+ int *right, /* O - Right position in points */
+ int *bottom, /* O - Bottom position in points */
+ int *top) /* O - Top position in points */
+{
+ internal_imageable_area(v, 1, left, right, bottom, top);
+}
+
+static void
+pcl_limit(const stp_vars_t *v, /* I */
int *width,
int *height,
int *min_width,
int *min_height)
{
- const pcl_cap_t *caps= pcl_get_model_capabilities(stp_printer_get_model(printer));
+ const pcl_cap_t *caps= pcl_get_model_capabilities(stp_get_model_id(v));
*width = caps->custom_max_width;
*height = caps->custom_max_height;
*min_width = caps->custom_min_width;
*min_height = caps->custom_min_height;
}
+static const char *
+pcl_describe_output(const stp_vars_t *v)
+{
+ int printing_color = 0;
+ int model = stp_get_model_id(v);
+ const pcl_cap_t *caps = pcl_get_model_capabilities(model);
+ const char *print_mode = stp_get_string_parameter(v, "PrintingMode");
+ int xdpi, ydpi;
+
+ pcl_describe_resolution(v, &xdpi, &ydpi);
+ if (!print_mode || strcmp(print_mode, "Color") == 0)
+ printing_color = 1;
+ if (((caps->resolutions & PCL_RES_600_600_MONO) == PCL_RES_600_600_MONO) &&
+ printing_color && xdpi == 600 && ydpi == 600)
+ printing_color = 0;
+ if (printing_color)
+ {
+ if ((caps->color_type & PCL_COLOR_CMY) == PCL_COLOR_CMY)
+ return "CMY";
+ else
+ return "CMYK";
+ }
+ else
+ return "Grayscale";
+}
+
/*
* 'pcl_print()' - Print an image to an HP printer.
*/
static void
-pcl_print(const stp_printer_t printer, /* I - Model */
- stp_image_t *image, /* I - Image to print */
- const stp_vars_t v)
+pcl_printfunc(stp_vars_t *v)
+{
+ pcl_privdata_t *pd = (pcl_privdata_t *) stp_get_component_data(v, "Driver");
+ int do_blank = pd->do_blank;
+ unsigned char *black = stp_dither_get_channel(v, STP_ECOLOR_K, 0);
+ unsigned char *cyan = stp_dither_get_channel(v, STP_ECOLOR_C, 0);
+ unsigned char *lcyan = stp_dither_get_channel(v, STP_ECOLOR_C, 1);
+ unsigned char *magenta = stp_dither_get_channel(v, STP_ECOLOR_M, 0);
+ unsigned char *lmagenta = stp_dither_get_channel(v, STP_ECOLOR_M, 1);
+ unsigned char *yellow = stp_dither_get_channel(v, STP_ECOLOR_Y, 0);
+ int len_c = stp_dither_get_last_position(v, STP_ECOLOR_C, 0);
+ int len_lc = stp_dither_get_last_position(v, STP_ECOLOR_C, 1);
+ int len_m = stp_dither_get_last_position(v, STP_ECOLOR_M, 0);
+ int len_lm = stp_dither_get_last_position(v, STP_ECOLOR_M, 1);
+ int len_y = stp_dither_get_last_position(v, STP_ECOLOR_Y, 0);
+ int len_k = stp_dither_get_last_position(v, STP_ECOLOR_K, 0);
+ int is_blank = (do_blank && (len_c == -1) && (len_lc == -1) &&
+ (len_m == -1) && (len_lm == -1) && (len_y == -1) &&
+ (len_k == -1));
+ int height = pd->height;
+ const char *print_mode = stp_get_string_parameter(v, "PrintingMode");
+
+ if (is_blank && (pd->blank_lines != 0)) /* repeated blank line */
+ {
+ pd->blank_lines++;
+ }
+ else /* Not blank, or is first one */
+ {
+ if (! is_blank)
+ {
+ if (pd->blank_lines > 1) /* Output accumulated lines */
+ {
+ pd->blank_lines--; /* correct for one already output */
+ stp_deprintf(STP_DBG_PCL, "Blank Lines = %d\n", pd->blank_lines);
+ stp_zprintf(v, "\033*b%dY", pd->blank_lines);
+ pd->blank_lines=0;
+ }
+ else;
+ }
+ else
+ {
+ pd->blank_lines++;
+ }
+
+ if (pd->do_cret)
+ {
+ /*
+ * 4-level (CRet) dithers...
+ */
+ if (strcmp(print_mode, "BW") == 0)
+ {
+ (*(pd->writefunc))(v, black + height / 2, height / 2, 0);
+ (*(pd->writefunc))(v, black, height / 2, 1);
+ }
+ else
+ {
+ if(pd->do_cretb)
+ {
+ /* (*(pd->writefunc))(v, black + height / 2, 0, 0); */
+ (*(pd->writefunc))(v, black, height/2, 0);
+ }
+ else
+ {
+ (*(pd->writefunc))(v, black + height / 2, height / 2, 0);
+ (*(pd->writefunc))(v, black, height / 2, 0);
+ }
+ (*(pd->writefunc))(v, cyan + height / 2, height / 2, 0);
+ (*(pd->writefunc))(v, cyan, height / 2, 0);
+ (*(pd->writefunc))(v, magenta + height / 2, height / 2, 0);
+ (*(pd->writefunc))(v, magenta, height / 2, 0);
+ (*(pd->writefunc))(v, yellow + height / 2, height / 2, 0);
+ if (pd->do_6color)
+ {
+ (*(pd->writefunc))(v, yellow, height / 2, 0);
+ (*(pd->writefunc))(v, lcyan + height / 2, height / 2, 0);
+ (*(pd->writefunc))(v, lcyan, height / 2, 0);
+ (*(pd->writefunc))(v, lmagenta + height / 2, height / 2, 0);
+ (*(pd->writefunc))(v, lmagenta, height / 2, 1); /* Last plane set on light magenta */
+ }
+ else
+ (*(pd->writefunc))(v, yellow, height / 2, 1); /* Last plane set on yellow */
+ }
+ }
+ else
+ {
+ /*
+ * Standard 2-level dithers...
+ */
+
+ if (strcmp(print_mode, "BW") == 0)
+ {
+ (*(pd->writefunc))(v, black, height, 1);
+ }
+ else
+ {
+ if (black != NULL)
+ (*(pd->writefunc))(v, black, height, 0);
+ (*(pd->writefunc))(v, cyan, height, 0);
+ (*(pd->writefunc))(v, magenta, height, 0);
+ if (pd->do_6color)
+ {
+ (*(pd->writefunc))(v, yellow, height, 0);
+ (*(pd->writefunc))(v, lcyan, height, 0);
+ (*(pd->writefunc))(v, lmagenta, height, 1); /* Last plane set on light magenta */
+ }
+ else
+ (*(pd->writefunc))(v, yellow, height, 1); /* Last plane set on yellow */
+ }
+ }
+ }
+}
+
+static double
+get_double_param(stp_vars_t *v, const char *param)
+{
+ if (param && stp_check_float_parameter(v, param, STP_PARAMETER_ACTIVE))
+ return stp_get_float_parameter(v, param);
+ else
+ return 1.0;
+}
+
+static int
+pcl_do_print(stp_vars_t *v, stp_image_t *image)
{
int i;
- unsigned char *cmap = stp_get_cmap(v);
- int model = stp_printer_get_model(printer);
- const char *resolution = stp_get_resolution(v);
- const char *media_size;
- const char *media_type = stp_get_media_type(v);
- const char *media_source = stp_get_media_source(v);
- const char *ink_type = stp_get_ink_type(v);
- int output_type = stp_get_output_type(v);
- int orientation = stp_get_orientation(v);
- double scaling = stp_get_scaling(v);
+ pcl_privdata_t privdata;
+ int status = 1;
+ int model = stp_get_model_id(v);
+ const char *resolution = stp_get_string_parameter(v, "Resolution");
+ const char *media_size = stp_get_string_parameter(v, "PageSize");
+ const char *media_type = stp_get_string_parameter(v, "MediaType");
+ const char *media_source = stp_get_string_parameter(v, "InputSlot");
+ const char *ink_type = stp_get_string_parameter(v, "InkType");
+ const char *print_mode = stp_get_string_parameter(v, "PrintingMode");
+ const char *duplex_mode = stp_get_string_parameter(v, "Duplex");
+ int page_number = stp_get_int_parameter(v, "PageNumber");
+ int printing_color = 0;
int top = stp_get_top(v);
int left = stp_get_left(v);
int y; /* Looping vars */
int xdpi, ydpi; /* Resolution */
- unsigned short *out;
- unsigned char *in, /* Input pixels */
- *black, /* Black bitmap data */
+ unsigned char *black, /* Black bitmap data */
*cyan, /* Cyan bitmap data */
*magenta, /* Magenta bitmap data */
*yellow, /* Yellow bitmap data */
*lcyan, /* Light Cyan bitmap data */
*lmagenta; /* Light Magenta bitmap data */
- int page_left, /* Left margin of page */
- page_right, /* Right margin of page */
- page_top, /* Top of page */
- page_bottom, /* Bottom of page */
- page_width, /* Width of page */
+ int page_width, /* Width of page */
page_height, /* Height of page */
+ page_left,
+ page_top,
+ page_right,
+ page_bottom,
out_width, /* Width of image on page */
out_height, /* Height of image on page */
- out_bpp, /* Output bytes per pixel */
- height, /* Height of raster data */
+ out_channels, /* Output bytes per pixel */
errdiv, /* Error dividend */
errmod, /* Error modulus */
errval, /* Current error value */
errline, /* Current raster line */
errlast; /* Last raster line loaded */
- stp_convert_t colorfunc; /* Color conversion function... */
- int zero_mask;
- void (*writefunc)(const stp_vars_t, unsigned char *, unsigned char *,
- int, int); /* PCL output function */
+ unsigned zero_mask;
int image_height,
- image_width,
- image_bpp;
- void * dither;
+ image_width;
const pcl_cap_t *caps; /* Printer capabilities */
- int do_cret, /* 300 DPI CRet printing */
- do_cretb, /* 600 DPI CRet printing HP 840C*/
- do_6color, /* CMY + cmK printing */
- planes; /* # of output planes */
- int pcl_media_size, /* PCL media size code */
- pcl_media_type, /* PCL media type code */
- pcl_media_source; /* PCL media source code */
- const double *dot_sizes_use,dot_sizes_cret[]={1.0,1.0,1.0}; /* The dot size used */
- stp_vars_t nv = stp_allocate_copy(v);
- stp_papersize_t pp;
- int len_c, /* Active length of Cyan buffers */
- len_lc, /* Ditto Light Cyan */
- len_m, /* Ditto Magenta */
- len_lm, /* Ditto Light Magenta */
- len_y, /* Ditto Cyan */
- len_k; /* Ditto Black */
- int blank_lines, /* Accumulated blank lines */
- is_blank, /* Current line is blank */
- do_blank; /* Blank line removal required */
- stp_dither_data_t *dt;
- unsigned char *comp_buf; /* Scratch buffer for pcl_mode2 */
+ int planes = 3; /* # of output planes */
+ int pcl_media_size; /* PCL media size code */
+ const double *dot_sizes_use;
+ const stp_papersize_t *pp;
int the_top_margin, /* Corrected top margin */
the_left_margin; /* Corrected left margin */
+ stp_curve_t *lum_adjustment;
+ stp_curve_t *hue_adjustment;
+ double density;
- if (!stp_get_verified(nv))
+ if (!stp_verify(v))
{
- stp_eprintf(nv, "Print options not verified; cannot print.\n");
- return;
+ stp_eprintf(v, "Print options not verified; cannot print.\n");
+ return 0;
}
+ if (strcmp(print_mode, "Color") == 0)
+ printing_color = 1;
caps = pcl_get_model_capabilities(model);
@@ -2240,10 +2054,9 @@ pcl_print(const stp_printer_t printer, /* I - Model */
* Setup a read-only pixel region for the entire image...
*/
- image->init(image);
- image_height = image->height(image);
- image_width = image->width(image);
- image_bpp = image->bpp(image);
+ stp_image_init(image);
+ image_height = stp_image_height(image);
+ image_width = stp_image_width(image);
/*
* Figure out the output resolution...
@@ -2251,122 +2064,83 @@ pcl_print(const stp_printer_t printer, /* I - Model */
xdpi = 0;
ydpi = 0;
- for (i = 0; i < NUM_RESOLUTIONS; i++)
+ if (resolution)
{
- if (!strcmp(resolution, pcl_resolutions[i].pcl_name))
+ for (i = 0; i < NUM_RESOLUTIONS; i++)
{
- xdpi = pcl_resolutions[i].p0;
- ydpi = pcl_resolutions[i].p1;
- break;
+ if (!strcmp(resolution, pcl_resolutions[i].pcl_name))
+ {
+ xdpi = pcl_resolutions[i].p0;
+ ydpi = pcl_resolutions[i].p1;
+ break;
+ }
}
}
stp_deprintf(STP_DBG_PCL,"pcl: resolution=%dx%d\n",xdpi,ydpi);
if (xdpi == 0 || ydpi == 0)
- return;
+ return 0;
/*
* Choose the correct color conversion function...
*/
if (((caps->resolutions & PCL_RES_600_600_MONO) == PCL_RES_600_600_MONO) &&
- output_type != OUTPUT_GRAY && output_type != OUTPUT_MONOCHROME &&
- xdpi == 600 && ydpi == 600)
+ printing_color && xdpi == 600 && ydpi == 600)
{
stp_eprintf(v, "600x600 resolution only available in MONO\n");
- output_type = OUTPUT_GRAY;
- stp_set_output_type(nv, OUTPUT_GRAY);
- }
-
- if (caps->color_type == PCL_COLOR_NONE && output_type != OUTPUT_MONOCHROME)
- {
- output_type = OUTPUT_GRAY;
- stp_set_output_type(nv, OUTPUT_GRAY);
+ stp_set_string_parameter(v, "PrintingMode", "BW");
+ printing_color = 0;
}
- stp_set_output_color_model(nv, COLOR_MODEL_CMY);
-
- colorfunc = stp_choose_colorfunc(output_type, image_bpp, cmap, &out_bpp, nv);
- do_cret = (xdpi >= 300 &&
- ((caps->color_type & PCL_COLOR_CMYK4) == PCL_COLOR_CMYK4) &&
- output_type != OUTPUT_MONOCHROME);
- do_cretb = (xdpi >= 600 && ydpi >= 600 &&
+ privdata.do_cret = (xdpi >= 300 &&
+ ((caps->color_type & PCL_COLOR_CMYK4) == PCL_COLOR_CMYK4));
+ privdata.do_cretb = (xdpi >= 600 && ydpi >= 600 &&
((caps->color_type & PCL_COLOR_CMYK4b) == PCL_COLOR_CMYK4b) &&
- output_type != OUTPUT_MONOCHROME &&
- output_type != OUTPUT_GRAY);
- if (do_cretb){
- do_cret = 1;
+ printing_color);
+ if (privdata.do_cretb){
+ privdata.do_cret = 1;
dot_sizes_use=dot_sizes_cret;
}else{
dot_sizes_use=dot_sizes;
}
- stp_deprintf(STP_DBG_PCL, "do_cret = %d\n", do_cret);
- stp_deprintf(STP_DBG_PCL, "do_cretb = %d\n", do_cretb);
+ stp_deprintf(STP_DBG_PCL, "privdata.do_cret = %d\n", privdata.do_cret);
+ stp_deprintf(STP_DBG_PCL, "privdata.do_cretb = %d\n", privdata.do_cretb);
- do_6color = (strcmp(ink_type, "Photo") == 0);
- stp_deprintf(STP_DBG_PCL, "do_6color = %d\n", do_6color);
+ if (ink_type)
+ privdata.do_6color = (strcmp(ink_type, "Photo") == 0);
+ else
+ privdata.do_6color = 0;
+
+ stp_deprintf(STP_DBG_PCL, "privdata.do_6color = %d\n", privdata.do_6color);
/*
* Compute the output size...
*/
- pcl_imageable_area(printer, nv, &page_left, &page_right,
- &page_bottom, &page_top);
- stp_deprintf(STP_DBG_PCL,"Before stp_compute_page_parameters()\n");
- stp_deprintf(STP_DBG_PCL,"page_left = %d, page_right = %d, page_top = %d, page_bottom = %d\n",
- page_left, page_right, page_top, page_bottom);
- stp_deprintf(STP_DBG_PCL,"top = %d, left = %d\n", top, left);
- stp_deprintf(STP_DBG_PCL,"scaling = %f, image_width = %d, image_height = %d\n", scaling,
- image_width, image_height);
-
- stp_compute_page_parameters(page_right, page_left, page_top, page_bottom,
- scaling, image_width, image_height, image,
- &orientation, &page_width, &page_height,
- &out_width, &out_height, &left, &top);
-
- /*
- * Recompute the image height and width. If the image has been
- * rotated, these will change from previously.
- */
- image_height = image->height(image);
- image_width = image->width(image);
-
- stp_deprintf(STP_DBG_PCL,"After stp_compute_page_parameters()\n");
- stp_deprintf(STP_DBG_PCL,"page_width = %d, page_height = %d\n", page_width, page_height);
- stp_deprintf(STP_DBG_PCL,"out_width = %d, out_height = %d\n", out_width, out_height);
- stp_deprintf(STP_DBG_PCL,"top = %d, left = %d\n", top, left);
+ out_width = stp_get_width(v);
+ out_height = stp_get_height(v);
- /*
- * Let the user know what we're doing...
- */
+ internal_imageable_area(v, 0, &page_left, &page_right,
+ &page_bottom, &page_top);
+ left -= page_left;
+ top -= page_top;
+ page_width = page_right - page_left;
+ page_height = page_bottom - page_top;
- image->progress_init(image);
+ image_height = stp_image_height(image);
+ image_width = stp_image_width(image);
/*
- * Send PCL initialization commands...
+ * Set media size here because it is needed by the margin calculation code.
*/
- if (do_cretb)
- {
- stp_puts("\033*rbC", v); /* End raster graphics */
- }
- stp_puts("\033E", v); /* PCL reset */
- if (do_cretb)
- {
- stp_zprintf(v, "\033%%-12345X@PJL ENTER LANGUAGE=PCL3GUI\n");
- }
-
- /*
- * Set media size
- */
-
- if (strlen(stp_get_media_size(v)) > 0)
- media_size = stp_get_media_size(v);
- else if ((pp = stp_get_papersize_by_size(stp_get_page_height(v),
- stp_get_page_width(v))) != NULL)
- media_size = stp_papersize_get_name(pp);
- else
+ if (!media_size)
media_size = "";
+ if (strlen(media_size) == 0 &&
+ ((pp = stp_get_papersize_by_size(stp_get_page_height(v),
+ stp_get_page_width(v))) != NULL))
+ media_size = pp->name;
pcl_media_size = pcl_convert_media_size(media_size, model);
@@ -2385,48 +2159,90 @@ pcl_print(const stp_printer_t printer, /* I - Model */
pcl_media_size = PCL_PAPERSIZE_CUSTOM; /* Custom */
}
- stp_zprintf(v, "\033&l%dA", pcl_media_size);
+ stp_deprintf(STP_DBG_PCL, "Duplex: %s, Page_Number: %d\n", duplex_mode, page_number);
+ privdata.duplex=0;
+ privdata.tumble=0;
- stp_puts("\033&l0L", v); /* Turn off perforation skip */
- stp_puts("\033&l0E", v); /* Reset top margin to 0 */
+ /*
+ * Duplex
+ */
+
+ if (duplex_mode)
+ {
+ if (caps->stp_printer_type & PCL_PRINTER_DUPLEX)
+ {
+ if ((strcmp(duplex_mode, "DuplexTumble") == 0) || (strcmp(duplex_mode, "DuplexNoTumble") == 0))
+ privdata.duplex=1;
+ if ((strcmp(duplex_mode, "DuplexTumble") == 0))
+ privdata.tumble=1;
+ }
+ else
+ stp_erprintf("pcl: cannot duplex on this hardware.\n");
+ }
+
+ /*
+ * Send PCL initialization commands...
+ */
+
+ if ((privdata.duplex == 0) || ((page_number & 1) == 0))
+ {
+ int pcl_media_type, /* PCL media type code */
+ pcl_media_source; /* PCL media source code */
+
+ stp_deprintf(STP_DBG_PCL, "Normal init\n");
+
+ if (privdata.do_cretb)
+ stp_puts("\033*rbC", v); /* End raster graphics */
+ stp_puts("\033E", v); /* PCL reset */
+ if (privdata.do_cretb)
+ stp_zprintf(v, "\033%%-12345X@PJL ENTER LANGUAGE=PCL3GUI\n");
+
+ stp_puts("\033&l6D\033&k12H",v); /* 6 lines per inch, 10 chars per inch */
+ stp_puts("\033&l0O",v); /* Portrait */
+
+ stp_zprintf(v, "\033&l%dA", pcl_media_size); /* Set media size we calculated above */
+ stp_zprintf(v, "\033&l%dP", stp_get_page_height(v) / 12);
+ /* Length of "forms" in "lines" */
+ stp_puts("\033&l0L", v); /* Turn off perforation skip */
+ stp_puts("\033&l0E", v); /* Reset top margin to 0 */
/*
* Convert media source string to the code, if specified.
*/
- if (strlen(media_source) != 0) {
- pcl_media_source = pcl_string_to_val(media_source, pcl_media_sources,
- sizeof(pcl_media_sources) / sizeof(pcl_t));
+ if (media_source && strlen(media_source) != 0) {
+ pcl_media_source = pcl_string_to_val(media_source, pcl_media_sources,
+ sizeof(pcl_media_sources) / sizeof(pcl_t));
- stp_deprintf(STP_DBG_PCL,"pcl_media_source = %d, media_source = %s\n", pcl_media_source,
- media_source);
+ stp_deprintf(STP_DBG_PCL,"pcl_media_source = %d, media_source = %s\n", pcl_media_source,
+ media_source);
- if (pcl_media_source == -1)
- stp_deprintf(STP_DBG_PCL, "Unknown media source %s, ignored.\n", media_source);
- else if (pcl_media_source != PCL_PAPERSOURCE_STANDARD) {
+ if (pcl_media_source == -1)
+ stp_deprintf(STP_DBG_PCL, "Unknown media source %s, ignored.\n", media_source);
+ else if (pcl_media_source != PCL_PAPERSOURCE_STANDARD) {
/* Correct the value by taking the modulus */
- pcl_media_source = pcl_media_source % PAPERSOURCE_MOD;
- stp_zprintf(v, "\033&l%dH", pcl_media_source);
- }
- }
+ pcl_media_source = pcl_media_source % PAPERSOURCE_MOD;
+ stp_zprintf(v, "\033&l%dH", pcl_media_source);
+ }
+ }
/*
* Convert media type string to the code, if specified.
*/
- if (strlen(media_type) != 0) {
- pcl_media_type = pcl_string_to_val(media_type, pcl_media_types,
- sizeof(pcl_media_types) / sizeof(pcl_t));
+ if (media_type && strlen(media_type) != 0) {
+ pcl_media_type = pcl_string_to_val(media_type, pcl_media_types,
+ sizeof(pcl_media_types) / sizeof(pcl_t));
- stp_deprintf(STP_DBG_PCL,"pcl_media_type = %d, media_type = %s\n", pcl_media_type,
- media_type);
+ stp_deprintf(STP_DBG_PCL,"pcl_media_type = %d, media_type = %s\n", pcl_media_type,
+ media_type);
- if (pcl_media_type == -1) {
- stp_deprintf(STP_DBG_PCL, "Unknown media type %s, set to PLAIN.\n", media_type);
- pcl_media_type = PCL_PAPERTYPE_PLAIN;
- }
+ if (pcl_media_type == -1) {
+ stp_deprintf(STP_DBG_PCL, "Unknown media type %s, set to PLAIN.\n", media_type);
+ pcl_media_type = PCL_PAPERTYPE_PLAIN;
+ }
/*
* The HP812C doesn't like glossy paper being selected when using 600x600
@@ -2434,61 +2250,100 @@ pcl_print(const stp_printer_t printer, /* I - Model */
*
*/
- if (do_cretb && pcl_media_type == PCL_PAPERTYPE_GLOSSY) {
- stp_deprintf(STP_DBG_PCL, "Media type GLOSSY, set to PREMIUM for PhotoRET II.\n");
- pcl_media_type = PCL_PAPERTYPE_PREMIUM;
- }
- }
- else
- pcl_media_type = PCL_PAPERTYPE_PLAIN;
+ if (privdata.do_cretb && pcl_media_type == PCL_PAPERTYPE_GLOSSY) {
+ stp_deprintf(STP_DBG_PCL, "Media type GLOSSY, set to PREMIUM for PhotoRET II.\n");
+ pcl_media_type = PCL_PAPERTYPE_PREMIUM;
+ }
+ }
+ else
+ pcl_media_type = PCL_PAPERTYPE_PLAIN;
/*
* Set DJ print quality to "best" if resolution >= 300
*/
- if ((xdpi >= 300) && ((caps->stp_printer_type & PCL_PRINTER_DJ) == PCL_PRINTER_DJ))
- {
- if ((caps->stp_printer_type & PCL_PRINTER_MEDIATYPE) == PCL_PRINTER_MEDIATYPE)
- {
- stp_puts("\033*o1M", v); /* Quality = presentation */
- stp_zprintf(v, "\033&l%dM", pcl_media_type);
- }
- else
- {
- stp_puts("\033*r2Q", v); /* Quality (high) */
- stp_puts("\033*o2Q", v); /* Shingling (4 passes) */
+ if ((xdpi >= 300) && ((caps->stp_printer_type & PCL_PRINTER_DJ) == PCL_PRINTER_DJ))
+ {
+ if ((caps->stp_printer_type & PCL_PRINTER_MEDIATYPE) == PCL_PRINTER_MEDIATYPE)
+ {
+ stp_puts("\033*o1M", v); /* Quality = presentation */
+ stp_zprintf(v, "\033&l%dM", pcl_media_type);
+ }
+ else
+ {
+ stp_puts("\033*r2Q", v); /* Quality (high) */
+ stp_puts("\033*o2Q", v); /* Shingling (4 passes) */
/* Depletion depends on media type and cart type. */
- if ((pcl_media_type == PCL_PAPERTYPE_PLAIN)
- || (pcl_media_type == PCL_PAPERTYPE_BOND)) {
- if ((caps->color_type & PCL_COLOR_CMY) == PCL_COLOR_CMY)
- stp_puts("\033*o2D", v); /* Depletion 25% */
- else
- stp_puts("\033*o5D", v); /* Depletion 50% with gamma correction */
+ if ((pcl_media_type == PCL_PAPERTYPE_PLAIN)
+ || (pcl_media_type == PCL_PAPERTYPE_BOND)) {
+ if ((caps->color_type & PCL_COLOR_CMY) == PCL_COLOR_CMY)
+ stp_puts("\033*o2D", v); /* Depletion 25% */
+ else
+ stp_puts("\033*o5D", v); /* Depletion 50% with gamma correction */
+ }
+
+ else if ((pcl_media_type == PCL_PAPERTYPE_PREMIUM)
+ || (pcl_media_type == PCL_PAPERTYPE_GLOSSY)
+ || (pcl_media_type == PCL_PAPERTYPE_TRANS))
+ stp_puts("\033*o1D", v); /* Depletion none */
+ }
}
- else if ((pcl_media_type == PCL_PAPERTYPE_PREMIUM)
- || (pcl_media_type == PCL_PAPERTYPE_GLOSSY)
- || (pcl_media_type == PCL_PAPERTYPE_TRANS))
- stp_puts("\033*o1D", v); /* Depletion none */
+/*
+ * Duplex
+ */
+
+ if (privdata.duplex)
+ stp_zprintf(v,"\033&l%dS", privdata.duplex + privdata.tumble);
+ }
+ else
+ {
+ stp_deprintf(STP_DBG_PCL, "Back face init\n");
+ stp_puts("\033&a2G", v);
+ }
+
+/*
+ * See if we need to use the CRD (Configure Raster Data) command, because we're
+ * doing something interesting on a DeskJet.
+ * (I hate long complicated if statements, the compiler will sort it out!).
+ */
+
+ privdata.use_crd = 0;
+ if ((caps->stp_printer_type & PCL_PRINTER_DJ) == PCL_PRINTER_DJ)
+ {
+ if (xdpi != ydpi) /* Different X and Y Resolutions */
+ privdata.use_crd = 1;
+ if (privdata.do_cret) /* Resolution Enhancement */
+ privdata.use_crd = 1;
+ if (privdata.do_6color) /* Photo Ink printing */
+ privdata.use_crd = 1;
+ if (privdata.duplex) /* Duplexing */
+ privdata.use_crd = 1;
}
- }
- if ((xdpi != ydpi) || (do_cret) || (do_6color))
+ if (privdata.use_crd)
/* Set resolution using CRD */
{
+/*
+ * If duplexing on a CRD printer, we need to use the (re)load media command.
+ */
+
+ if (privdata.duplex)
+ stp_puts("\033&l-2H",v); /* Load media */
+
/*
* Send configure image data command with horizontal and
* vertical resolutions as well as a color count...
*/
- if (output_type != OUTPUT_GRAY && output_type != OUTPUT_MONOCHROME)
+ if (printing_color)
if ((caps->color_type & PCL_COLOR_CMY) == PCL_COLOR_CMY)
planes = 3;
else
- if (do_6color)
+ if (privdata.do_6color)
planes = 6;
else
planes = 4;
@@ -2499,62 +2354,25 @@ pcl_print(const stp_printer_t printer, /* I - Model */
stp_putc(2, v); /* Format 2 (Complex Direct Planar) */
stp_putc(planes, v); /* # output planes */
- if (planes != 3) {
- stp_putc(xdpi >> 8, v); /* Black resolution */
- stp_putc(xdpi, v);
- stp_putc(ydpi >> 8, v);
- stp_putc(ydpi, v);
- stp_putc(0, v);
- if (do_cretb){
- stp_putc(2, v);
- }else{
- stp_putc(do_cret ? 4 : 2, v);
- }
+ if (planes != 3) { /* Black resolution */
+ stp_send_command(v, "", "HHH", xdpi, ydpi, (privdata.do_cretb || !privdata.do_cret) ? 2 : 4);
}
- if (planes != 1) {
- stp_putc(xdpi >> 8, v); /* Cyan resolution */
- stp_putc(xdpi, v);
- stp_putc(ydpi >> 8, v);
- stp_putc(ydpi, v);
- stp_putc(0, v);
- stp_putc(do_cret ? 4 : 2, v);
-
- stp_putc(xdpi >> 8, v); /* Magenta resolution */
- stp_putc(xdpi, v);
- stp_putc(ydpi >> 8, v);
- stp_putc(ydpi, v);
- stp_putc(0, v);
- stp_putc(do_cret ? 4 : 2, v);
-
- stp_putc(xdpi >> 8, v); /* Yellow resolution */
- stp_putc(xdpi, v);
- stp_putc(ydpi >> 8, v);
- stp_putc(ydpi, v);
- stp_putc(0, v);
- stp_putc(do_cret ? 4 : 2, v);
+ if (planes != 1) { /* Cyan, magenta, yellow resolutions */
+ stp_send_command(v, "", "HHH", xdpi, ydpi, privdata.do_cret ? 4 : 2);
+ stp_send_command(v, "", "HHH", xdpi, ydpi, privdata.do_cret ? 4 : 2);
+ stp_send_command(v, "", "HHH", xdpi, ydpi, privdata.do_cret ? 4 : 2);
}
- if (planes == 6)
+ if (planes == 6) /* LC, LM resolutions */
{
- stp_putc(xdpi >> 8, v); /* Light Cyan resolution */
- stp_putc(xdpi, v);
- stp_putc(ydpi >> 8, v);
- stp_putc(ydpi, v);
- stp_putc(0, v);
- stp_putc(do_cret ? 4 : 2, v);
-
- stp_putc(xdpi >> 8, v); /* Light Magenta resolution */
- stp_putc(xdpi, v);
- stp_putc(ydpi >> 8, v);
- stp_putc(ydpi, v);
- stp_putc(0, v);
- stp_putc(do_cret ? 4 : 2, v);
+ stp_send_command(v, "", "HHH", xdpi, ydpi, privdata.do_cret ? 4 : 2);
+ stp_send_command(v, "", "HHH", xdpi, ydpi, privdata.do_cret ? 4 : 2);
}
}
else
{
stp_zprintf(v, "\033*t%dR", xdpi); /* Simple resolution */
- if (output_type != OUTPUT_GRAY && output_type != OUTPUT_MONOCHROME)
+ if (printing_color)
{
if ((caps->color_type & PCL_COLOR_CMY) == PCL_COLOR_CMY)
stp_puts("\033*r-3U", v); /* Simple CMY color */
@@ -2595,7 +2413,7 @@ pcl_print(const stp_printer_t printer, /* I - Model */
stp_deprintf(STP_DBG_PCL, "left %d margin %d top %d margin %d width %d height %d\n",
left, the_left_margin, top, the_top_margin, out_width, out_height);
- if (!do_cretb) {
+ if (!privdata.do_cretb) {
stp_zprintf(v, "\033&a%dH", 10 * left); /* Set left raster position */
stp_zprintf(v, "\033&a%dV", 10 * (top + the_top_margin));
/* Set top raster position */
@@ -2603,7 +2421,7 @@ pcl_print(const stp_printer_t printer, /* I - Model */
stp_zprintf(v, "\033*r%dS", out_width); /* Set raster width */
stp_zprintf(v, "\033*r%dT", out_height); /* Set raster height */
- if (do_cretb)
+ if (privdata.do_cretb)
{
/* Move to top left of printed area */
stp_zprintf(v, "\033*p%dY", (top + the_top_margin)*4); /* Measured in dots. */
@@ -2615,13 +2433,13 @@ pcl_print(const stp_printer_t printer, /* I - Model */
* Allocate memory for the raster data...
*/
- height = (out_width + 7) / 8;
- if (do_cret)
- height *= 2;
+ privdata.height = (out_width + 7) / 8;
+ if (privdata.do_cret)
+ privdata.height *= 2;
- if (output_type == OUTPUT_GRAY || output_type == OUTPUT_MONOCHROME)
+ if (!printing_color)
{
- black = stp_malloc(height);
+ black = stp_malloc(privdata.height);
cyan = NULL;
magenta = NULL;
yellow = NULL;
@@ -2630,18 +2448,18 @@ pcl_print(const stp_printer_t printer, /* I - Model */
}
else
{
- cyan = stp_malloc(height);
- magenta = stp_malloc(height);
- yellow = stp_malloc(height);
+ cyan = stp_malloc(privdata.height);
+ magenta = stp_malloc(privdata.height);
+ yellow = stp_malloc(privdata.height);
if ((caps->color_type & PCL_COLOR_CMY) == PCL_COLOR_CMY)
black = NULL;
else
- black = stp_malloc(height);
- if (do_6color)
+ black = stp_malloc(privdata.height);
+ if (privdata.do_6color)
{
- lcyan = stp_malloc(height);
- lmagenta = stp_malloc(height);
+ lcyan = stp_malloc(privdata.height);
+ lmagenta = stp_malloc(privdata.height);
}
else
{
@@ -2650,248 +2468,176 @@ pcl_print(const stp_printer_t printer, /* I - Model */
}
}
+ if (black)
+ {
+ if (cyan)
+ stp_set_string_parameter(v, "STPIOutputType", "KCMY");
+ else
+ stp_set_string_parameter(v, "STPIOutputType", "Grayscale");
+ }
+ else
+ stp_set_string_parameter(v, "STPIOutputType", "CMY");
+
/* Allocate buffer for pcl_mode2 tiff compression */
#ifndef PCL_DEBUG_DISABLE_COMPRESSION
if ((caps->stp_printer_type & PCL_PRINTER_TIFF) == PCL_PRINTER_TIFF)
{
- comp_buf = stp_malloc((height + 128 + 7) * 129 / 128);
- writefunc = pcl_mode2;
+ privdata.comp_buf = stp_malloc((privdata.height + 128 + 7) * 129 / 128);
+ privdata.writefunc = pcl_mode2;
}
else
#endif
{
- comp_buf = NULL;
- writefunc = pcl_mode0;
+ privdata.comp_buf = NULL;
+ privdata.writefunc = pcl_mode0;
}
- /*
- * Output the page, rotating as necessary...
- */
-
- stp_compute_lut(nv, 256);
-
- if (xdpi > ydpi)
- dither = stp_init_dither(image_width, out_width, 1, xdpi / ydpi, nv);
- else
- dither = stp_init_dither(image_width, out_width, ydpi / xdpi, 1, nv);
-
/* Set up dithering for special printers. */
#if 1 /* Leave alone for now */
- for (i = 0; i <= NCOLORS; i++)
- stp_dither_set_black_level(dither, i, 1.2);
- stp_dither_set_black_lower(dither, .3);
- stp_dither_set_black_upper(dither, .999);
+ if (!stp_check_float_parameter(v, "GCRLower", STP_PARAMETER_ACTIVE))
+ stp_set_default_float_parameter(v, "GCRLower", .3);
+ if (!stp_check_float_parameter(v, "GCRUpper", STP_PARAMETER_ACTIVE))
+ stp_set_default_float_parameter(v, "GCRUpper", .999);
#endif
+ stp_dither_init(v, image, out_width, xdpi, ydpi);
+
+ if (black)
+ {
+ stp_dither_add_channel(v, black, STP_ECOLOR_K, 0);
+ stp_channel_set_black_channel(v, STP_ECOLOR_K);
+ }
+ if (cyan)
+ stp_dither_add_channel(v, cyan, STP_ECOLOR_C, 0);
+ if (lcyan)
+ stp_dither_add_channel(v, lcyan, STP_ECOLOR_C, 1);
+ if (magenta)
+ stp_dither_add_channel(v, magenta, STP_ECOLOR_M, 0);
+ if (lmagenta)
+ stp_dither_add_channel(v, lmagenta, STP_ECOLOR_M, 1);
+ if (yellow)
+ stp_dither_add_channel(v, yellow, STP_ECOLOR_Y, 0);
/* Ensure that density does not exceed 1.0 */
- stp_deprintf(STP_DBG_PCL, "Density: %f\n", stp_get_density(nv));
- if (stp_get_density(nv) > 1.0)
- stp_set_density(nv, 1.0);
+ if (!stp_check_float_parameter(v, "Density", STP_PARAMETER_DEFAULTED))
+ {
+ stp_set_float_parameter_active(v, "Density", STP_PARAMETER_ACTIVE);
+ stp_set_float_parameter(v, "Density", 1.0);
+ }
- if (do_cret) /* 4-level printing for 800/1120 */
+ stp_deprintf(STP_DBG_PCL, "Density: %f\n", stp_get_float_parameter(v, "Density"));
+ if (stp_get_float_parameter(v, "Density") > 1.0)
+ stp_set_float_parameter(v, "Density", 1.0);
+ density = stp_get_float_parameter(v, "Density");
+
+ if (privdata.do_cret) /* 4-level printing for 800/1120 */
{
- stp_dither_set_ranges_simple(dither, ECOLOR_Y, 3, dot_sizes_use, stp_get_density(nv));
- if (!do_cretb)
- stp_dither_set_ranges_simple(dither, ECOLOR_K, 3, dot_sizes_use, stp_get_density(nv));
+ stp_dither_set_inks_simple(v, STP_ECOLOR_Y, 3, dot_sizes_use, 1.0, 0.08);
+ if (!privdata.do_cretb)
+ stp_dither_set_inks_simple(v, STP_ECOLOR_K, 3, dot_sizes_use, 1.0, 1.0);
-/* Note: no printer I know of does both CRet (4-level) and 6 colour, but
- what the heck. variable_dither_ranges copied from print-escp2.c */
+ /* Note: no printer I know of does both CRet (4-level) and 6 colour, but
+ what the heck. variable_dither_ranges copied from print-escp2.c */
- if (do_6color) /* Photo for 69x */
+ if (privdata.do_6color) /* Photo for 69x */
{
- stp_dither_set_ranges(dither, ECOLOR_C, 6, variable_dither_ranges,
- stp_get_density(nv));
- stp_dither_set_ranges(dither, ECOLOR_M, 6, variable_dither_ranges,
- stp_get_density(nv));
+ stp_dither_set_inks_full(v, STP_ECOLOR_C, 6, variable_shades, 1.0,
+ 0.31 / .5);
+ stp_dither_set_inks_full(v, STP_ECOLOR_M, 6, variable_shades, 1.0,
+ 0.61 / .97);
}
else
{
- stp_dither_set_ranges_simple(dither, ECOLOR_C, 3, dot_sizes_use, stp_get_density(nv));
- stp_dither_set_ranges_simple(dither, ECOLOR_M, 3, dot_sizes_use, stp_get_density(nv));
+ stp_dither_set_inks_simple(v, STP_ECOLOR_C, 3, dot_sizes_use, 1.0,
+ 0.31 / .5);
+ stp_dither_set_inks_simple(v, STP_ECOLOR_M, 3, dot_sizes_use, 1.0,
+ 0.61 / .7);
}
}
- else if (do_6color)
- {
-/* Set light inks for 6 colour printers. Numbers copied from print-escp2.c */
- stp_dither_set_light_ink(dither, ECOLOR_C, .25, stp_get_density(nv));
- stp_dither_set_light_ink(dither, ECOLOR_M, .25, stp_get_density(nv));
+ else if (privdata.do_6color)
+ {
+ /* Set light inks for 6 colour printers.
+ Numbers copied from print-escp2.c */
+ stp_dither_set_inks_full(v, STP_ECOLOR_C, 2, photo_dither_shades, 1.0,
+ 0.31 / .5);
+ stp_dither_set_inks_full(v, STP_ECOLOR_M, 2, photo_dither_shades, 1.0,
+ 0.61 / .7);
}
+ if (black)
+ stp_channel_set_density_adjustment(v, STP_ECOLOR_K, 0,
+ get_double_param(v, "BlackDensity") *
+ get_double_param(v, "Density"));
+ if (cyan)
+ stp_channel_set_density_adjustment(v, STP_ECOLOR_C, 0,
+ get_double_param(v, "CyanDensity") *
+ get_double_param(v, "Density"));
+ if (magenta)
+ stp_channel_set_density_adjustment(v, STP_ECOLOR_M, 0,
+ get_double_param(v, "MagentaDensity") *
+ get_double_param(v, "Density"));
+ if (yellow)
+ stp_channel_set_density_adjustment(v, STP_ECOLOR_Y, 0,
+ get_double_param(v, "YellowDensity") *
+ get_double_param(v, "Density"));
+ if (lcyan)
+ stp_channel_set_density_adjustment
+ (v, STP_ECOLOR_C, 1, (get_double_param(v, "CyanDensity") *
+ get_double_param(v, "LightCyanTransition") *
+ get_double_param(v, "Density")));
+ if (lmagenta)
+ stp_channel_set_density_adjustment
+ (v, STP_ECOLOR_M, 1, (get_double_param(v, "MagentaDensity") *
+ get_double_param(v, "LightMagentaTransition") *
+ get_double_param(v, "Density")));
+
- switch (stp_get_image_type(nv))
+ if (!stp_check_curve_parameter(v, "HueMap", STP_PARAMETER_ACTIVE))
{
- case IMAGE_LINE_ART:
- stp_dither_set_ink_spread(dither, 19);
- break;
- case IMAGE_SOLID_TONE:
- stp_dither_set_ink_spread(dither, 15);
- break;
- case IMAGE_CONTINUOUS:
- stp_dither_set_ink_spread(dither, 14);
- break;
+ hue_adjustment = stp_curve_create_from_string(standard_hue_adjustment);
+ stp_set_curve_parameter(v, "HueMap", hue_adjustment);
+ stp_curve_destroy(hue_adjustment);
+ }
+ if (!stp_check_curve_parameter(v, "LumMap", STP_PARAMETER_ACTIVE))
+ {
+ lum_adjustment = stp_curve_create_from_string(standard_lum_adjustment);
+ stp_curve_destroy(lum_adjustment);
}
- stp_dither_set_density(dither, stp_get_density(nv));
- in = stp_zalloc(image_width * image_bpp);
- out = stp_zalloc(image_width * out_bpp * 2);
+ out_channels = stp_color_init(v, image, 65536);
errdiv = image_height / out_height;
errmod = image_height % out_height;
errval = 0;
errlast = -1;
errline = 0;
- blank_lines = 0;
- is_blank = 0;
+ privdata.blank_lines = 0;
#ifndef PCL_DEBUG_DISABLE_BLANKLINE_REMOVAL
- do_blank = ((caps->stp_printer_type & PCL_PRINTER_BLANKLINE) ==
- PCL_PRINTER_BLANKLINE);
+ privdata.do_blank = ((caps->stp_printer_type & PCL_PRINTER_BLANKLINE) ==
+ PCL_PRINTER_BLANKLINE);
#else
- do_blank = 0;
+ privdata.do_blank = 0;
#endif
-
- dt = stp_create_dither_data();
- if (black)
- stp_add_channel(dt, black, ECOLOR_K, 0);
- if (cyan)
- stp_add_channel(dt, cyan, ECOLOR_C, 0);
- if (lcyan)
- stp_add_channel(dt, lcyan, ECOLOR_C, 1);
- if (magenta)
- stp_add_channel(dt, magenta, ECOLOR_M, 0);
- if (lmagenta)
- stp_add_channel(dt, lmagenta, ECOLOR_M, 1);
- if (yellow)
- stp_add_channel(dt, yellow, ECOLOR_Y, 0);
+ stp_allocate_component_data(v, "Driver", NULL, NULL, &privdata);
for (y = 0; y < out_height; y ++)
{
int duplicate_line = 1;
- stp_deprintf(STP_DBG_PCL,"pcl_print: y = %d, line = %d, val = %d, mod = %d, height = %d\n",
- y, errline, errval, errmod, out_height);
- if ((y & 63) == 0)
- image->note_progress(image, y, out_height);
-
if (errline != errlast)
{
errlast = errline;
duplicate_line = 0;
- if (image->get_row(image, in, errline) != STP_IMAGE_OK)
- break;
- (*colorfunc)(nv, in, out, &zero_mask, image_width, image_bpp, cmap,
- hue_adjustment, lum_adjustment, NULL);
- }
-
- stp_dither(out, y, dither, dt, duplicate_line, zero_mask);
-
- len_c = stp_dither_get_last_position(dither, ECOLOR_C, 0);
- len_lc = stp_dither_get_last_position(dither, ECOLOR_C, 1);
- len_m = stp_dither_get_last_position(dither, ECOLOR_M, 0);
- len_lm = stp_dither_get_last_position(dither, ECOLOR_M, 1);
- len_y = stp_dither_get_last_position(dither, ECOLOR_Y, 0);
- len_k = stp_dither_get_last_position(dither, ECOLOR_K, 0);
-
-/*
- * Blank line removal. If multiple lines are blank then they can be replaced
- * by "Relative Vertical Pixel Movement" command. However, since there are
- * apparently some faulty implementations, we always output the first line,
- * then suppress the rest. This ensures that the printers's buffers are really
- * empty. As suggested by Mike Sweet.
- */
-
- is_blank = (do_blank && (len_c == -1) && (len_lc == -1) && (len_m == -1)
- && (len_lm == -1) && (len_y == -1) && (len_k == -1));
-
- if (is_blank && (blank_lines != 0)) /* repeated blank line */
- {
- blank_lines++;
- }
- else /* Not blank, or is first one */
- {
- if (! is_blank)
- {
- if (blank_lines > 1) /* Output accumulated lines */
- {
- blank_lines--; /* correct for one already output */
- stp_deprintf(STP_DBG_PCL, "Blank Lines = %d\n", blank_lines);
- stp_zprintf(v, "\033*b%dY", blank_lines);
- blank_lines=0;
- }
- else;
- }
- else
- {
- blank_lines++;
- }
-
- if (do_cret)
- {
- /*
- * 4-level (CRet) dithers...
- */
- if (output_type == OUTPUT_GRAY || output_type == OUTPUT_MONOCHROME)
- {
- (*writefunc)(v, comp_buf, black + height / 2, height / 2, 0);
- (*writefunc)(v, comp_buf, black, height / 2, 1);
- }
- else
- {
- if(do_cretb)
- {
-/* (*writefunc)(v, comp_buf, black + height / 2, 0, 0); */
- (*writefunc)(v, comp_buf, black, height/2, 0);
- }
- else
- {
- (*writefunc)(v, comp_buf, black + height / 2, height / 2, 0);
- (*writefunc)(v, comp_buf, black, height / 2, 0);
- }
- (*writefunc)(v, comp_buf, cyan + height / 2, height / 2, 0);
- (*writefunc)(v, comp_buf, cyan, height / 2, 0);
- (*writefunc)(v, comp_buf, magenta + height / 2, height / 2, 0);
- (*writefunc)(v, comp_buf, magenta, height / 2, 0);
- (*writefunc)(v, comp_buf, yellow + height / 2, height / 2, 0);
- if (do_6color)
- {
- (*writefunc)(v, comp_buf, yellow, height / 2, 0);
- (*writefunc)(v, comp_buf, lcyan + height / 2, height / 2, 0);
- (*writefunc)(v, comp_buf, lcyan, height / 2, 0);
- (*writefunc)(v, comp_buf, lmagenta + height / 2, height / 2, 0);
- (*writefunc)(v, comp_buf, lmagenta, height / 2, 1); /* Last plane set on light magenta */
- }
- else
- (*writefunc)(v, comp_buf, yellow, height / 2, 1); /* Last plane set on yellow */
- }
- }
- else
- {
- /*
- * Standard 2-level dithers...
- */
-
- if (output_type == OUTPUT_GRAY || output_type == OUTPUT_MONOCHROME)
- {
- (*writefunc)(v, comp_buf, black, height, 1);
- }
- else
- {
- if (black != NULL)
- (*writefunc)(v, comp_buf, black, height, 0);
- (*writefunc)(v, comp_buf, cyan, height, 0);
- (*writefunc)(v, comp_buf, magenta, height, 0);
- if (do_6color)
- {
- (*writefunc)(v, comp_buf, yellow, height, 0);
- (*writefunc)(v, comp_buf, lcyan, height, 0);
- (*writefunc)(v, comp_buf, lmagenta, height, 1); /* Last plane set on light magenta */
- }
- else
- (*writefunc)(v, comp_buf, yellow, height, 1); /* Last plane set on yellow */
- }
- }
+ if (stp_color_get_row(v, image, errline, &zero_mask))
+ {
+ status = 2;
+ break;
+ }
}
-
+ stp_dither(v, y, duplicate_line, zero_mask, NULL);
+ pcl_printfunc(v);
+ stp_deprintf(STP_DBG_PCL,"pcl_print: y = %d, line = %d, val = %d, mod = %d, height = %d\n",
+ y, errline, errval, errmod, out_height);
errval += errmod;
errline += errdiv;
if (errval >= out_height)
@@ -2903,28 +2649,20 @@ pcl_print(const stp_printer_t printer, /* I - Model */
/* Output trailing blank lines (may not be required?) */
- if (blank_lines > 1)
+ if (privdata.blank_lines > 1)
{
- blank_lines--; /* correct for one already output */
- stp_deprintf(STP_DBG_PCL, "Blank Lines = %d\n", blank_lines);
- stp_zprintf(v, "\033*b%dY", blank_lines);
- blank_lines=0;
+ privdata.blank_lines--; /* correct for one already output */
+ stp_deprintf(STP_DBG_PCL, "Blank Lines = %d\n", privdata.blank_lines);
+ stp_zprintf(v, "\033*b%dY", privdata.blank_lines);
+ privdata.blank_lines=0;
}
- image->progress_conclude(image);
-
- stp_free_dither_data(dt);
- stp_free_dither(dither);
-
+ stp_image_conclude(image);
/*
* Cleanup...
*/
- stp_free_lut(nv);
- stp_free(in);
- stp_free(out);
-
if (black != NULL)
stp_free(black);
if (cyan != NULL)
@@ -2939,35 +2677,50 @@ pcl_print(const stp_printer_t printer, /* I - Model */
stp_free(lmagenta);
}
- if (comp_buf != NULL)
- stp_free(comp_buf);
+ if (privdata.comp_buf != NULL)
+ stp_free(privdata.comp_buf);
if ((caps->stp_printer_type & PCL_PRINTER_NEW_ERG) == PCL_PRINTER_NEW_ERG)
stp_puts("\033*rC", v);
else
stp_puts("\033*rB", v);
- stp_puts("\033&l0H", v); /* Eject page */
- if (do_cretb)
+ if ((privdata.duplex == 1) && ((page_number & 1) == 0))
+ stp_puts("\014", v); /* Form feed */
+ else
{
- stp_zprintf(v, "\033%%-12345X\n");
+ stp_puts("\033&l0H", v); /* Eject page */
+ if (privdata.do_cretb)
+ stp_zprintf(v, "\033%%-12345X\n");
+ stp_puts("\033E", v); /* PCL reset */
}
- stp_puts("\033E", v); /* PCL reset */
- stp_free_vars(nv);
+ return status;
}
-const stp_printfuncs_t stp_pcl_printfuncs =
+static int
+pcl_print(const stp_vars_t *v, stp_image_t *image)
{
+ int status;
+ stp_vars_t *nv = stp_vars_create_copy(v);
+ stp_prune_inactive_options(nv);
+ status = pcl_do_print(nv, image);
+ stp_vars_destroy(nv);
+ return status;
+}
+
+static const stp_printfuncs_t print_pcl_printfuncs =
+{
+ pcl_list_parameters,
pcl_parameters,
stp_default_media_size,
pcl_imageable_area,
pcl_limit,
pcl_print,
- pcl_default_parameters,
pcl_describe_resolution,
+ pcl_describe_output,
stp_verify_printer_params,
- stp_start_job,
- stp_end_job
+ NULL,
+ NULL
};
@@ -2976,8 +2729,7 @@ const stp_printfuncs_t stp_pcl_printfuncs =
*/
static void
-pcl_mode0(const stp_vars_t v, /* I - Print file or command */
- unsigned char *comp_buf, /* I - scratch buffer (not used) */
+pcl_mode0(stp_vars_t *v, /* I - Print file or command */
unsigned char *line, /* I - Output bitmap data */
int height, /* I - Height of bitmap data */
int last_plane) /* I - True if this is the last plane */
@@ -2992,15 +2744,17 @@ pcl_mode0(const stp_vars_t v, /* I - Print file or command */
*/
static void
-pcl_mode2(const stp_vars_t v, /* I - Print file or command */
- unsigned char *comp_buf, /* I - Scratch Buffer */
+pcl_mode2(stp_vars_t *v, /* I - Print file or command */
unsigned char *line, /* I - Output bitmap data */
int height, /* I - Height of bitmap data */
int last_plane) /* I - True if this is the last plane */
{
+ pcl_privdata_t *privdata =
+ (pcl_privdata_t *) stp_get_component_data(v, "Driver");
+ unsigned char *comp_buf = privdata->comp_buf;
unsigned char *comp_ptr; /* Current slot in buffer */
- stp_pack_tiff(line, height, comp_buf, &comp_ptr);
+ stp_pack_tiff(v, line, height, comp_buf, &comp_ptr, NULL, NULL);
/*
* Send a line of raster graphics...
@@ -3009,3 +2763,44 @@ pcl_mode2(const stp_vars_t v, /* I - Print file or command */
stp_zprintf(v, "\033*b%d%c", (int)(comp_ptr - comp_buf), last_plane ? 'W' : 'V');
stp_zfwrite((const char *)comp_buf, comp_ptr - comp_buf, 1, v);
}
+
+
+static stp_family_t print_pcl_module_data =
+ {
+ &print_pcl_printfuncs,
+ NULL
+ };
+
+
+static int
+print_pcl_module_init(void)
+{
+ return stp_family_register(print_pcl_module_data.printer_list);
+}
+
+
+static int
+print_pcl_module_exit(void)
+{
+ return stp_family_unregister(print_pcl_module_data.printer_list);
+}
+
+
+/* Module header */
+#define stp_module_version print_pcl_LTX_stp_module_version
+#define stp_module_data print_pcl_LTX_stp_module_data
+
+stp_module_version_t stp_module_version = {0, 0};
+
+stp_module_t stp_module_data =
+ {
+ "pcl",
+ VERSION,
+ "PCL family driver",
+ STP_MODULE_CLASS_FAMILY,
+ NULL,
+ print_pcl_module_init,
+ print_pcl_module_exit,
+ (void *) &print_pcl_module_data
+ };
+
diff --git a/src/main/print-ps.c b/src/main/print-ps.c
index 3f37cff..6157db2 100644
--- a/src/main/print-ps.c
+++ b/src/main/print-ps.c
@@ -1,5 +1,5 @@
/*
- * "$Id: print-ps.c,v 1.26.2.7 2004/06/13 14:33:55 rlk Exp $"
+ * "$Id: print-ps.c,v 1.79 2004/09/17 18:38:26 rleigh Exp $"
*
* Print plug-in Adobe PostScript driver for the GIMP.
*
@@ -29,17 +29,19 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#include <gimp-print/gimp-print.h>
-#include "gimp-print-internal.h"
-#include <gimp-print/gimp-print-intl-internal.h>
+#include <gutenprint/gutenprint.h>
+#include <gutenprint/gutenprint-intl-internal.h>
+#include "gutenprint-internal.h"
#include <time.h>
#include <string.h>
+#ifdef HAVE_LIMITS_H
#include <limits.h>
+#endif
#include <stdio.h>
#ifdef _MSC_VER
-#define strncasecmp(s,t,n) _strnicmp(s,t,n)
-#define strcasecmp(s,t) _stricmp(s,t)
+#define strncasecmp(s,t,n) _strnicmp(s,t,n)
+#define strcasecmp(s,t) _stricmp(s,t)
#endif
/*
@@ -54,46 +56,91 @@ static const char *ps_ppd_file = NULL;
* Local functions...
*/
-static void ps_hex(const stp_vars_t, unsigned short *, int);
-static void ps_ascii85(const stp_vars_t, unsigned short *, int, int);
+static void ps_hex(const stp_vars_t *, unsigned short *, int);
+static void ps_ascii85(const stp_vars_t *, unsigned short *, int, int);
static char *ppd_find(const char *, const char *, const char *, int *);
-
-static char *
-c_strdup(const char *s)
+static const stp_parameter_t the_parameters[] =
{
- char *ret = stp_malloc(strlen(s) + 1);
- strcpy(ret, s);
- return ret;
-}
+ {
+ "PageSize", N_("Page Size"), N_("Basic Printer Setup"),
+ N_("Size of the paper being printed to"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "MediaType", N_("Media Type"), N_("Basic Printer Setup"),
+ N_("Type of media (plain paper, photo paper, etc.)"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "InputSlot", N_("Media Source"), N_("Basic Printer Setup"),
+ N_("Source (input slot) of the media"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "Resolution", N_("Resolution"), N_("Basic Printer Setup"),
+ N_("Resolution and quality of the print"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "InkType", N_("Ink Type"), N_("Advanced Printer Setup"),
+ N_("Type of ink in the printer"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "PPDFile", N_("PPDFile"), N_("Basic Printer Setup"),
+ N_("PPD File"),
+ STP_PARAMETER_TYPE_FILE, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "PrintingMode", N_("Printing Mode"), N_("Core Parameter"),
+ N_("Printing Output Mode"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+};
+
+static const int the_parameter_count =
+sizeof(the_parameters) / sizeof(const stp_parameter_t);
/*
* 'ps_parameters()' - Return the parameter values for the given parameter.
*/
-static stp_param_t * /* O - Parameter values */
-ps_parameters_internal(const stp_printer_t printer, /* I - Printer model */
- const char *ppd_file, /* I - PPD file (not used) */
- const char *name, /* I - Name of parameter */
- int *count) /* O - Number of values */
+static stp_parameter_list_t
+ps_list_parameters(const stp_vars_t *v)
+{
+ stp_parameter_list_t *ret = stp_parameter_list_create();
+ int i;
+ for (i = 0; i < the_parameter_count; i++)
+ stp_parameter_list_add_param(ret, &(the_parameters[i]));
+ return ret;
+}
+
+static void
+ps_parameters_internal(const stp_vars_t *v, const char *name,
+ stp_parameter_t *description)
{
int i;
char line[1024],
lname[255],
loption[255],
*ltext;
- stp_param_t *valptrs;
-
-
- if (count == NULL)
- return (NULL);
+ const char *ppd_file = stp_get_file_parameter(v, "PPDFile");
+ description->p_type = STP_PARAMETER_TYPE_INVALID;
+ description->deflt.str = 0;
- *count = 0;
+ if (name == NULL)
+ return;
- if (ppd_file == NULL || name == NULL)
- return (NULL);
-
- if (ps_ppd_file == NULL || strcmp(ps_ppd_file, ppd_file) != 0)
+ if (ppd_file != NULL && strlen(ppd_file) > 0 &&
+ (ps_ppd_file == NULL || strcmp(ps_ppd_file, ppd_file) != 0))
{
if (ps_ppd != NULL)
fclose(ps_ppd);
@@ -106,34 +153,49 @@ ps_parameters_internal(const stp_printer_t printer, /* I - Printer model */
ps_ppd_file = ppd_file;
}
+ for (i = 0; i < the_parameter_count; i++)
+ if (strcmp(name, the_parameters[i].name) == 0)
+ {
+ stp_fill_parameter_settings(description, &(the_parameters[i]));
+ break;
+ }
+
+ if (strcmp(name, "PrintingMode") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ stp_string_list_add_string
+ (description->bounds.str, "Color", _("Color"));
+ stp_string_list_add_string
+ (description->bounds.str, "BW", _("Black and White"));
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ return;
+ }
+
if (ps_ppd == NULL)
{
if (strcmp(name, "PageSize") == 0)
{
int papersizes = stp_known_papersizes();
- valptrs = stp_zalloc(sizeof(stp_param_t) * papersizes);
- *count = 0;
+ description->bounds.str = stp_string_list_create();
for (i = 0; i < papersizes; i++)
{
- const stp_papersize_t pt = stp_get_papersize_by_index(i);
- if (strlen(stp_papersize_get_name(pt)) > 0)
- {
- valptrs[*count].name = c_strdup(stp_papersize_get_name(pt));
- valptrs[*count].text = c_strdup(stp_papersize_get_text(pt));
- (*count)++;
- }
+ const stp_papersize_t *pt = stp_get_papersize_by_index(i);
+ if (strlen(pt->name) > 0)
+ stp_string_list_add_string
+ (description->bounds.str, pt->name, pt->text);
}
- return (valptrs);
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ description->is_active = 1;
}
else
- return (NULL);
+ description->is_active = 0;
+ return;
}
rewind(ps_ppd);
- *count = 0;
-
- /* FIXME -- need to use realloc */
- valptrs = stp_zalloc(100 * sizeof(stp_param_t));
+ description->bounds.str = stp_string_list_create();
while (fgets(line, sizeof(line), ps_ppd) != NULL)
{
@@ -150,116 +212,25 @@ ps_parameters_internal(const stp_printer_t printer, /* I - Printer model */
else
ltext = loption;
- valptrs[(*count)].name = c_strdup(loption);
- valptrs[(*count)].text = c_strdup(ltext);
- (*count) ++;
+ stp_string_list_add_string(description->bounds.str, loption, ltext);
}
}
- if (*count == 0)
- {
- stp_free(valptrs);
- return (NULL);
- }
+ if (stp_string_list_count(description->bounds.str) > 0)
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
else
- return (valptrs);
-}
-
-static stp_param_t * /* O - Parameter values */
-ps_parameters(const stp_printer_t printer, /* I - Printer model */
- const char *ppd_file, /* I - PPD file (not used) */
- const char *name, /* I - Name of parameter */
- int *count) /* O - Number of values */
-{
- stp_param_t *answer;
- setlocale(LC_ALL, "C");
- answer = ps_parameters_internal(printer, ppd_file, name, count);
- setlocale(LC_ALL, "");
- return answer;
-}
-
-static const char *
-ps_default_parameters_internal(const stp_printer_t printer,
- const char *ppd_file,
- const char *name)
-{
- int i;
- char line[1024],
- lname[255],
- loption[255],
- defname[255];
-
- if (ppd_file == NULL || name == NULL)
- return (NULL);
-
- sprintf(defname, "Default%s", name);
-
- if (ps_ppd_file == NULL || strcmp(ps_ppd_file, ppd_file) != 0)
- {
- if (ps_ppd != NULL)
- fclose(ps_ppd);
-
- ps_ppd = fopen(ppd_file, "r");
-
- if (ps_ppd == NULL)
- ps_ppd_file = NULL;
- else
- ps_ppd_file = ppd_file;
- }
-
- if (ps_ppd == NULL)
- {
- if (strcmp(name, "PageSize") == 0)
- {
- int papersizes = stp_known_papersizes();
- for (i = 0; i < papersizes; i++)
- {
- const stp_papersize_t pt = stp_get_papersize_by_index(i);
- if (strlen(stp_papersize_get_name(pt)) > 0)
- {
- return stp_papersize_get_name(pt);
- }
- }
- return NULL;
- }
- else
- return (NULL);
- }
-
- rewind(ps_ppd);
-
- while (fgets(line, sizeof(line), ps_ppd) != NULL)
- {
- if (line[0] != '*')
- continue;
-
- if (sscanf(line, "*%[^:]:%s", lname, loption) != 2)
- continue;
-
- if (strcasecmp(lname, defname) == 0)
- {
- return c_strdup(loption);
- }
- }
-
- if (strcmp(name, "Resolution") == 0)
- {
- return "default";
- }
-
- return NULL;
+ description->is_active = 0;
+ return;
}
-static const char *
-ps_default_parameters(const stp_printer_t printer,
- const char *ppd_file,
- const char *name)
+static void
+ps_parameters(const stp_vars_t *v, const char *name,
+ stp_parameter_t *description)
{
- const char *answer;
setlocale(LC_ALL, "C");
- answer = ps_default_parameters_internal(printer, ppd_file, name);
+ ps_parameters_internal(v, name, description);
setlocale(LC_ALL, "");
- return answer;
}
/*
@@ -267,22 +238,23 @@ ps_default_parameters(const stp_printer_t printer,
*/
static void
-ps_media_size_internal(const stp_printer_t printer, /* I - Printer model */
- const stp_vars_t v, /* I */
+ps_media_size_internal(const stp_vars_t *v, /* I */
int *width, /* O - Width in points */
int *height) /* O - Height in points */
{
char *dimensions; /* Dimensions of media size */
+ const char *pagesize = stp_get_string_parameter(v, "PageSize");
+ const char *ppd_file_name = stp_get_file_parameter(v, "PPDFile");
float fwidth, fheight;
+ if (!pagesize)
+ pagesize = "";
stp_dprintf(STP_DBG_PS, v,
- "ps_media_size(%d, \'%s\', \'%s\', %08x, %08x)\n",
- stp_printer_get_model(printer), stp_get_ppd_file(v),
- stp_get_media_size(v),
- width, height);
+ "ps_media_size(%d, \'%s\', \'%s\', %p, %p)\n",
+ stp_get_model_id(v), ppd_file_name, pagesize,
+ (void *) width, (void *) height);
- if ((dimensions = ppd_find(stp_get_ppd_file(v), "PaperDimension",
- stp_get_media_size(v), NULL))
+ if ((dimensions = ppd_find(ppd_file_name, "PaperDimension", pagesize, NULL))
!= NULL)
{
sscanf(dimensions, "%f%f", &fwidth, &fheight);
@@ -292,17 +264,14 @@ ps_media_size_internal(const stp_printer_t printer, /* I - Printer model */
dimensions, fwidth, fheight, *width, *height);
}
else
- stp_default_media_size(printer, v, width, height);
+ stp_default_media_size(v, width, height);
}
static void
-ps_media_size(const stp_printer_t printer, /* I - Printer model */
- const stp_vars_t v, /* I */
- int *width, /* O - Width in points */
- int *height) /* O - Height in points */
+ps_media_size(const stp_vars_t *v, int *width, int *height)
{
setlocale(LC_ALL, "C");
- ps_media_size_internal(printer, v, width, height);
+ ps_media_size_internal(v, width, height);
setlocale(LC_ALL, "");
}
@@ -311,8 +280,7 @@ ps_media_size(const stp_printer_t printer, /* I - Printer model */
*/
static void
-ps_imageable_area_internal(const stp_printer_t printer, /* I - Printer model */
- const stp_vars_t v, /* I */
+ps_imageable_area_internal(const stp_vars_t *v, /* I */
int *left, /* O - Left position in points */
int *right, /* O - Right position in points */
int *bottom, /* O - Bottom position in points */
@@ -323,10 +291,14 @@ ps_imageable_area_internal(const stp_printer_t printer, /* I - Printer model */
fright,
fbottom,
ftop;
-
-
- if ((area = ppd_find(stp_get_ppd_file(v), "ImageableArea",
- stp_get_media_size(v), NULL))
+ int width, height;
+ const char *pagesize = stp_get_string_parameter(v, "PageSize");
+ if (!pagesize)
+ pagesize = "";
+ ps_media_size(v, &width, &height);
+
+ if ((area = ppd_find(stp_get_file_parameter(v, "PPDFile"),
+ "ImageableArea", pagesize, NULL))
!= NULL)
{
stp_dprintf(STP_DBG_PS, v, "area = \'%s\'\n", area);
@@ -334,42 +306,41 @@ ps_imageable_area_internal(const stp_printer_t printer, /* I - Printer model */
{
*left = (int)fleft;
*right = (int)fright;
- *bottom = (int)fbottom;
- *top = (int)ftop;
+ *bottom = height - (int)fbottom;
+ *top = height - (int)ftop;
}
else
*left = *right = *bottom = *top = 0;
+ stp_dprintf(STP_DBG_PS, v, "l %d r %d b %d t %d h %d w %d\n",
+ *left, *right, *bottom, *top, width, height);
}
else
{
- stp_default_media_size(printer, v, right, top);
*left = 18;
- *right -= 18;
- *top -= 36;
- *bottom = 36;
+ *right = width - 18;
+ *top = 36;
+ *bottom = height - 36;
}
}
static void
-ps_imageable_area(const stp_printer_t printer, /* I - Printer model */
- const stp_vars_t v, /* I */
+ps_imageable_area(const stp_vars_t *v, /* I */
int *left, /* O - Left position in points */
int *right, /* O - Right position in points */
int *bottom, /* O - Bottom position in points */
int *top) /* O - Top position in points */
{
setlocale(LC_ALL, "C");
- ps_imageable_area_internal(printer, v, left, right, bottom, top);
+ ps_imageable_area_internal(v, left, right, bottom, top);
setlocale(LC_ALL, "");
}
static void
-ps_limit(const stp_printer_t printer, /* I - Printer model */
- const stp_vars_t v, /* I */
- int *width,
- int *height,
- int *min_width,
- int *min_height)
+ps_limit(const stp_vars_t *v, /* I */
+ int *width,
+ int *height,
+ int *min_width,
+ int *min_height)
{
*width = INT_MAX;
*height = INT_MAX;
@@ -381,49 +352,54 @@ ps_limit(const stp_printer_t printer, /* I - Printer model */
* This is really bogus...
*/
static void
-ps_describe_resolution_internal(const stp_printer_t printer,
- const char *resolution, int *x, int *y)
+ps_describe_resolution_internal(const stp_vars_t *v, int *x, int *y)
{
+ const char *resolution = stp_get_string_parameter(v, "Resolution");
*x = -1;
*y = -1;
- sscanf(resolution, "%dx%d", x, y);
+ if (resolution)
+ sscanf(resolution, "%dx%d", x, y);
return;
}
static void
-ps_describe_resolution(const stp_printer_t printer,
- const char *resolution, int *x, int *y)
+ps_describe_resolution(const stp_vars_t *v, int *x, int *y)
{
setlocale(LC_ALL, "C");
- ps_describe_resolution_internal(printer, resolution, x, y);
+ ps_describe_resolution_internal(v, x, y);
setlocale(LC_ALL, "");
}
+static const char *
+ps_describe_output(const stp_vars_t *v)
+{
+ const char *print_mode = stp_get_string_parameter(v, "PrintingMode");
+ if (print_mode && strcmp(print_mode, "Color") == 0)
+ return "RGB";
+ else
+ return "Whitescale";
+}
+
/*
* 'ps_print()' - Print an image to a PostScript printer.
*/
-static void
-ps_print_internal(const stp_printer_t printer, /* I - Model (Level 1 or 2) */
- stp_image_t *image, /* I - Image to print */
- const stp_vars_t v)
+static int
+ps_print_internal(const stp_vars_t *v, stp_image_t *image)
{
- unsigned char *cmap = stp_get_cmap(v);
- int model = stp_printer_get_model(printer);
- const char *ppd_file = stp_get_ppd_file(v);
- const char *resolution = stp_get_resolution(v);
- const char *media_size = stp_get_media_size(v);
- const char *media_type = stp_get_media_type(v);
- const char *media_source = stp_get_media_source(v);
- int output_type = stp_get_output_type(v);
- int orientation = stp_get_orientation(v);
- double scaling = stp_get_scaling(v);
+ int status = 1;
+ int model = stp_get_model_id(v);
+ const char *ppd_file = stp_get_file_parameter(v, "PPDFile");
+ const char *resolution = stp_get_string_parameter(v, "Resolution");
+ const char *media_size = stp_get_string_parameter(v, "PageSize");
+ const char *media_type = stp_get_string_parameter(v, "MediaType");
+ const char *media_source = stp_get_string_parameter(v, "InputSlot");
+ const char *print_mode = stp_get_string_parameter(v, "PrintingMode");
+ unsigned short *out = NULL;
int top = stp_get_top(v);
int left = stp_get_left(v);
int i, j; /* Looping vars */
int y; /* Looping vars */
- unsigned char *in; /* Input pixels from image */
- unsigned short *out; /* Output pixels for printer */
int page_left, /* Left margin of page */
page_right, /* Right margin of page */
page_top, /* Top of page */
@@ -432,12 +408,11 @@ ps_print_internal(const stp_printer_t printer, /* I - Model (Level 1 or 2) */
page_height, /* Height of page */
out_width, /* Width of image on page */
out_height, /* Height of image on page */
- out_bpp, /* Output bytes per pixel */
+ out_channels, /* Output bytes per pixel */
out_ps_height, /* Output height (Level 2 output) */
out_offset; /* Output offset (Level 2 output) */
time_t curtime; /* Current time of day */
- stp_convert_t colorfunc; /* Color conversion function... */
- int zero_mask;
+ unsigned zero_mask;
char *command; /* PostScript command */
const char *temp; /* Temporary string pointer */
int order, /* Order of command */
@@ -449,54 +424,41 @@ ps_print_internal(const stp_printer_t printer, /* I - Model (Level 1 or 2) */
int order;
} commands[4];
int image_height,
- image_width,
- image_bpp;
- stp_vars_t nv = stp_allocate_copy(v);
-
- if (!stp_get_verified(nv))
+ image_width;
+ stp_vars_t *nv = stp_vars_create_copy(v);
+ if (!resolution)
+ resolution = "";
+ if (!media_size)
+ media_size = "";
+ if (!media_type)
+ media_type = "";
+ if (!media_source)
+ media_source = "";
+
+ stp_prune_inactive_options(nv);
+ if (!stp_verify(nv))
{
stp_eprintf(nv, "Print options not verified; cannot print.\n");
- return;
+ return 0;
}
- /*
- * Setup a read-only pixel region for the entire image...
- */
-
- image->init(image);
- image_height = image->height(image);
- image_width = image->width(image);
- image_bpp = image->bpp(image);
-
- /*
- * Choose the correct color conversion function...
- */
-
- colorfunc = stp_choose_colorfunc(output_type, image_bpp, cmap, &out_bpp, nv);
+ stp_image_init(image);
/*
* Compute the output size...
*/
- ps_imageable_area(printer, nv, &page_left, &page_right,
- &page_bottom, &page_top);
- stp_compute_page_parameters(page_right, page_left, page_top, page_bottom,
- scaling, image_width, image_height, image,
- &orientation, &page_width, &page_height,
- &out_width, &out_height, &left, &top);
+ out_width = stp_get_width(v);
+ out_height = stp_get_height(v);
- /*
- * Recompute the image height and width. If the image has been
- * rotated, these will change from previously.
- */
- image_height = image->height(image);
- image_width = image->width(image);
-
- /*
- * Let the user know what we're doing...
- */
+ ps_imageable_area(nv, &page_left, &page_right, &page_bottom, &page_top);
+ left -= page_left;
+ top -= page_top;
+ page_width = page_right - page_left;
+ page_height = page_bottom - page_top;
- image->progress_init(image);
+ image_height = stp_image_height(image);
+ image_width = stp_image_width(image);
/*
* Output a standard PostScript header with DSC comments...
@@ -504,15 +466,9 @@ ps_print_internal(const stp_printer_t printer, /* I - Model (Level 1 or 2) */
curtime = time(NULL);
- if (left < 0)
- left = (page_width - out_width) / 2 + page_left;
- else
- left += page_left;
+ left += page_left;
- if (top < 0)
- top = (page_height + out_height) / 2 + page_bottom;
- else
- top = page_height - top + page_bottom;
+ top = page_height - top;
stp_dprintf(STP_DBG_PS, v,
"out_width = %d, out_height = %d\n", out_width, out_height);
@@ -523,15 +479,15 @@ ps_print_internal(const stp_printer_t printer, /* I - Model (Level 1 or 2) */
stp_puts("%!PS-Adobe-3.0\n", v);
#ifdef HAVE_CONFIG_H
- stp_zprintf(v, "%%%%Creator: %s/Gimp-Print %s (%s)\n",
- image->get_appname(image), VERSION, RELEASE_DATE);
+ stp_zprintf(v, "%%%%Creator: %s/Gutenprint %s (%s)\n",
+ stp_image_get_appname(image), VERSION, RELEASE_DATE);
#else
- stp_zprintf(v, "%%%%Creator: %s/Gimp-Print\n", image->get_appname(image));
+ stp_zprintf(v, "%%%%Creator: %s/Gutenprint\n", stp_image_get_appname(image));
#endif
stp_zprintf(v, "%%%%CreationDate: %s", ctime(&curtime));
stp_puts("%Copyright: 1997-2002 by Michael Sweet (mike@easysw.com) and Robert Krawitz (rlk@alum.mit.edu)\n", v);
stp_zprintf(v, "%%%%BoundingBox: %d %d %d %d\n",
- left, top - out_height, left + out_width, top);
+ left, top - out_height, left + out_width, top);
stp_puts("%%DocumentData: Clean7Bit\n", v);
stp_zprintf(v, "%%%%LanguageLevel: %d\n", model + 1);
stp_puts("%%Pages: 1\n", v);
@@ -652,47 +608,54 @@ ps_print_internal(const stp_printer_t printer, /* I - Model (Level 1 or 2) */
setlocale(LC_ALL, "C");
stp_zprintf(v, "%.3f %.3f scale\n",
- (double)out_width / ((double)image_width),
- (double)out_height / ((double)image_height));
+ (double)out_width / ((double)image_width),
+ (double)out_height / ((double)image_height));
setlocale(LC_ALL, "");
- in = stp_zalloc(image_width * image_bpp);
- out = stp_zalloc((image_width * out_bpp + 3) * 2);
+ stp_channel_reset(nv);
+ stp_channel_add(nv, 0, 0, 1.0);
+ if (strcmp(print_mode, "Color") == 0)
+ {
+ stp_channel_add(nv, 1, 0, 1.0);
+ stp_channel_add(nv, 2, 0, 1.0);
+ stp_set_string_parameter(nv, "STPIOutputType", "RGB");
+ }
+ else
+ stp_set_string_parameter(nv, "STPIOutputType", "Whitescale");
- stp_compute_lut(nv, 256);
+ out_channels = stp_color_init(nv, image, 256);
if (model == 0)
{
- stp_zprintf(v, "/picture %d string def\n", image_width * out_bpp);
+ stp_zprintf(v, "/picture %d string def\n", image_width * out_channels);
stp_zprintf(v, "%d %d 8\n", image_width, image_height);
stp_puts("[ 1 0 0 -1 0 1 ]\n", v);
- if (output_type == OUTPUT_GRAY || output_type == OUTPUT_MONOCHROME)
- stp_puts("{currentfile picture readhexstring pop} image\n", v);
- else
+ if (strcmp(print_mode, "Color") == 0)
stp_puts("{currentfile picture readhexstring pop} false 3 colorimage\n", v);
+ else
+ stp_puts("{currentfile picture readhexstring pop} image\n", v);
for (y = 0; y < image_height; y ++)
{
- if ((y & 15) == 0)
- image->note_progress(image, y, image_height);
-
- if (image->get_row(image, in, y) != STP_IMAGE_OK)
- break;
- (*colorfunc)(nv, in, out, &zero_mask, image_width, image_bpp, cmap,
- NULL, NULL, NULL);
+ if (stp_color_get_row(nv, image, y, &zero_mask))
+ {
+ status = 2;
+ break;
+ }
- ps_hex(v, out, image_width * out_bpp);
+ out = stp_channel_get_input(nv);
+ ps_hex(v, out, image_width * out_channels);
}
}
else
{
- if (output_type == OUTPUT_GRAY || output_type == OUTPUT_MONOCHROME)
- stp_puts("/DeviceGray setcolorspace\n", v);
- else
+ if (strcmp(print_mode, "Color") == 0)
stp_puts("/DeviceRGB setcolorspace\n", v);
+ else
+ stp_puts("/DeviceGray setcolorspace\n", v);
stp_puts("<<\n", v);
stp_puts("\t/ImageType 1\n", v);
@@ -701,10 +664,10 @@ ps_print_internal(const stp_printer_t printer, /* I - Model (Level 1 or 2) */
stp_zprintf(v, "\t/Height %d\n", image_height);
stp_puts("\t/BitsPerComponent 8\n", v);
- if (output_type == OUTPUT_GRAY || output_type == OUTPUT_MONOCHROME)
- stp_puts("\t/Decode [ 0 1 ]\n", v);
- else
+ if (strcmp(print_mode, "Color") == 0)
stp_puts("\t/Decode [ 0 1 0 1 0 1 ]\n", v);
+ else
+ stp_puts("\t/Decode [ 0 1 ]\n", v);
stp_puts("\t/DataSource currentfile /ASCII85Decode filter\n", v);
@@ -718,15 +681,15 @@ ps_print_internal(const stp_printer_t printer, /* I - Model (Level 1 or 2) */
for (y = 0, out_offset = 0; y < image_height; y ++)
{
- if ((y & 15) == 0)
- image->note_progress(image, y, image_height);
-
- if (image->get_row(image, in, y) != STP_IMAGE_OK)
- break;
- (*colorfunc)(nv, in, out + out_offset, &zero_mask, image_width,
- image_bpp, cmap, NULL, NULL, NULL);
+ /* FIXME!!! */
+ if (stp_color_get_row(nv, image, y /*, out + out_offset */ , &zero_mask))
+ {
+ status = 2;
+ break;
+ }
+ out = stp_channel_get_input(nv);
- out_ps_height = out_offset + image_width * out_bpp;
+ out_ps_height = out_offset + image_width * out_channels;
if (y < (image_height - 1))
{
@@ -743,27 +706,24 @@ ps_print_internal(const stp_printer_t printer, /* I - Model (Level 1 or 2) */
memcpy(out, out + out_ps_height - out_offset, out_offset);
}
}
- image->progress_conclude(image);
-
- stp_free_lut(nv);
- stp_free(in);
- stp_free(out);
+ stp_image_conclude(image);
stp_puts("grestore\n", v);
stp_puts("showpage\n", v);
stp_puts("%%Trailer\n", v);
stp_puts("%%EOF\n", v);
- stp_free_vars(nv);
+ stp_vars_destroy(nv);
+ return status;
}
-static void
-ps_print(const stp_printer_t printer, /* I - Model (Level 1 or 2) */
- stp_image_t *image, /* I - Image to print */
- const stp_vars_t v)
+static int
+ps_print(const stp_vars_t *v, stp_image_t *image)
{
+ int status;
setlocale(LC_ALL, "C");
- ps_print_internal(printer, image, v);
+ status = ps_print_internal(v, image);
setlocale(LC_ALL, "");
+ return status;
}
@@ -772,7 +732,7 @@ ps_print(const stp_printer_t printer, /* I - Model (Level 1 or 2) */
*/
static void
-ps_hex(const stp_vars_t v, /* I - File to print to */
+ps_hex(const stp_vars_t *v, /* I - File to print to */
unsigned short *data, /* I - Data to print */
int length) /* I - Number of bytes to print */
{
@@ -813,7 +773,7 @@ ps_hex(const stp_vars_t v, /* I - File to print to */
*/
static void
-ps_ascii85(const stp_vars_t v, /* I - File to print to */
+ps_ascii85(const stp_vars_t *v, /* I - File to print to */
unsigned short *data, /* I - Data to print */
int length, /* I - Number of bytes to print */
int last_line) /* I - Last line of raster data? */
@@ -975,16 +935,58 @@ ppd_find(const char *ppd_file, /* I - Name of PPD file */
return (NULL);
}
-const stp_printfuncs_t stp_ps_printfuncs =
+static const stp_printfuncs_t print_ps_printfuncs =
{
+ ps_list_parameters,
ps_parameters,
ps_media_size,
ps_imageable_area,
ps_limit,
ps_print,
- ps_default_parameters,
ps_describe_resolution,
+ ps_describe_output,
stp_verify_printer_params,
- stp_start_job,
- stp_end_job
+ NULL,
+ NULL
};
+
+
+static stp_family_t print_ps_module_data =
+ {
+ &print_ps_printfuncs,
+ NULL
+ };
+
+
+static int
+print_ps_module_init(void)
+{
+ return stp_family_register(print_ps_module_data.printer_list);
+}
+
+
+static int
+print_ps_module_exit(void)
+{
+ return stp_family_unregister(print_ps_module_data.printer_list);
+}
+
+
+/* Module header */
+#define stp_module_version print_ps_LTX_stp_module_version
+#define stp_module_data print_ps_LTX_stp_module_data
+
+stp_module_version_t stp_module_version = {0, 0};
+
+stp_module_t stp_module_data =
+ {
+ "ps",
+ VERSION,
+ "Postscript family driver",
+ STP_MODULE_CLASS_FAMILY,
+ NULL,
+ print_ps_module_init,
+ print_ps_module_exit,
+ (void *) &print_ps_module_data
+ };
+
diff --git a/src/main/print-raw.c b/src/main/print-raw.c
new file mode 100644
index 0000000..f6353f3
--- /dev/null
+++ b/src/main/print-raw.c
@@ -0,0 +1,376 @@
+/*
+ * "$Id: print-raw.c,v 1.36 2004/09/17 18:38:26 rleigh Exp $"
+ *
+ * Print plug-in RAW driver for the GIMP.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * This file must include only standard C header files. The core code must
+ * compile on generic platforms that don't support glib, gimp, gtk, etc.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <string.h>
+#include <stdio.h>
+
+#ifdef __GNUC__
+#define inline __inline__
+#endif
+
+typedef struct
+{
+ const char *output_type;
+ int output_channels;
+ int rotate_channels;
+ const char *name;
+} ink_t;
+
+typedef struct raw_printer
+{
+ int output_bits;
+} raw_printer_t;
+
+static const raw_printer_t raw_model_capabilities[] =
+{
+ {
+ 16
+ },
+ {
+ 8
+ },
+};
+
+static const ink_t inks[] =
+{
+ { "RGB", 3, 0, "RGB" },
+ { "CMY", 3, 0, "CMY" },
+ { "KCMY", 4, 1, "CMYK" },
+ { "KCMY", 4, 0, "KCMY" },
+ { "Whitescale", 1, 0, "RGBGray" },
+ { "Grayscale", 1, 0, "CMYGray" },
+};
+
+static const int ink_count = sizeof(inks) / sizeof(ink_t);
+
+static const stp_parameter_t the_parameters[] =
+{
+ {
+ "InkType", N_("Ink Type"), N_("Advanced Printer Setup"),
+ N_("Type of ink in the printer"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+ {
+ "PrintingMode", N_("Printing Mode"), N_("Core Parameter"),
+ N_("Printing Output Mode"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_CORE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, -1, 1, 0
+ },
+};
+
+static const int the_parameter_count =
+sizeof(the_parameters) / sizeof(const stp_parameter_t);
+
+static stp_parameter_list_t
+raw_list_parameters(const stp_vars_t *v)
+{
+ stp_parameter_list_t *ret = stp_parameter_list_create();
+ int i;
+ for (i = 0; i < the_parameter_count; i++)
+ stp_parameter_list_add_param(ret, &(the_parameters[i]));
+ return ret;
+}
+
+static void
+raw_parameters(const stp_vars_t *v, const char *name,
+ stp_parameter_t *description)
+{
+ int i;
+ description->p_type = STP_PARAMETER_TYPE_INVALID;
+ if (name == NULL)
+ return;
+
+ description->deflt.str = NULL;
+ for (i = 0; i < the_parameter_count; i++)
+ if (strcmp(name, the_parameters[i].name) == 0)
+ {
+ stp_fill_parameter_settings(description, &(the_parameters[i]));
+ break;
+ }
+ if (strcmp(name, "InkType") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ for (i = 0; i < ink_count; i++)
+ stp_string_list_add_string(description->bounds.str,
+ inks[i].name, inks[i].name);
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ else if (strcmp(name, "PrintingMode") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+ stp_string_list_add_string
+ (description->bounds.str, "Color", _("Color"));
+ stp_string_list_add_string
+ (description->bounds.str, "BW", _("Black and White"));
+ description->deflt.str =
+ stp_string_list_param(description->bounds.str, 0)->name;
+ }
+ else
+ description->is_active = 0;
+}
+
+/*
+ * 'escp2_imageable_area()' - Return the imageable area of the page.
+ */
+
+static void
+raw_imageable_area(const stp_vars_t *v,
+ int *left,
+ int *right,
+ int *bottom,
+ int *top)
+{
+ *left = 0;
+ *top = 0;
+ *right = stp_get_page_width(v);
+ *bottom = stp_get_page_height(v);
+}
+
+static void
+raw_limit(const stp_vars_t *v, /* I */
+ int *width, int *height,
+ int *min_width, int *min_height)
+{
+ *width = 65535;
+ *height = 65535;
+ *min_width = 1;
+ *min_height = 1;
+}
+
+static void
+raw_describe_resolution(const stp_vars_t *v, int *x, int *y)
+{
+ *x = 72;
+ *y = 72;
+}
+
+static const char *
+raw_describe_output(const stp_vars_t *v)
+{
+ const char *ink_type = stp_get_string_parameter(v, "InkType");
+ if (ink_type)
+ {
+ int i;
+ for (i = 0; i < ink_count; i++)
+ if (strcmp(ink_type, inks[i].name) == 0)
+ return inks[i].output_type;
+ }
+ return "RGB";
+}
+
+/*
+ * 'escp2_print()' - Print an image to an EPSON printer.
+ */
+static int
+raw_print(const stp_vars_t *v, stp_image_t *image)
+{
+ int model = stp_get_model_id(v);
+ int width = stp_get_page_width(v);
+ int height = stp_get_page_height(v);
+ int i, j;
+ int y; /* Looping vars */
+ stp_vars_t *nv = stp_vars_create_copy(v);
+ int out_channels;
+ unsigned short *final_out = NULL;
+ int status = 1;
+ int bytes_per_channel = raw_model_capabilities[model].output_bits / 8;
+ int ink_channels = 1;
+ int rotate_output = 0;
+ const char *ink_type = stp_get_string_parameter(nv, "InkType");
+
+ stp_prune_inactive_options(nv);
+ if (!stp_verify(nv))
+ {
+ stp_eprintf(nv, _("Print options not verified; cannot print.\n"));
+ stp_vars_destroy(nv);
+ return 0;
+ }
+ if (width != stp_image_width(image) || height != stp_image_height(image))
+ {
+ stp_eprintf(nv, _("Image dimensions must match paper dimensions"));
+ stp_vars_destroy(nv);
+ return 0;
+ }
+ if (ink_type)
+ {
+ for (i = 0; i < ink_count; i++)
+ if (strcmp(ink_type, inks[i].name) == 0)
+ {
+ stp_set_string_parameter(nv, "STPIOutputType", inks[i].output_type);
+ ink_channels = inks[i].output_channels;
+ rotate_output = inks[i].rotate_channels;
+ break;
+ }
+ }
+
+ stp_set_float_parameter(nv, "Density", 1.0);
+ stp_channel_reset(nv);
+ for (i = 0; i < ink_channels; i++)
+ stp_channel_add(nv, i, 0, 1.0);
+
+ if (bytes_per_channel == 1)
+ out_channels = stp_color_init(nv, image, 256);
+ else
+ out_channels = stp_color_init(nv, image, 65536);
+
+ if (out_channels != ink_channels && out_channels != 1 && ink_channels != 1)
+ {
+ stp_eprintf(nv, "Internal error! Output channels or input channels must be 1\n");
+ stp_vars_destroy(nv);
+ return 0;
+ }
+
+ if (out_channels != ink_channels)
+ final_out = stp_malloc(width * ink_channels * 2);
+
+ for (y = 0; y < height; y++)
+ {
+ unsigned short *out;
+ unsigned short *real_out;
+ unsigned zero_mask;
+ if (stp_color_get_row(nv, image, y, &zero_mask))
+ {
+ status = 2;
+ break;
+ }
+ out = stp_channel_get_input(nv);
+ real_out = out;
+ if (rotate_output)
+ {
+ unsigned short *tmp_out = real_out;
+ for (i = 0; i < width; i++)
+ {
+ unsigned short tmp = tmp_out[0];
+ for (j = 0; j < ink_channels - 1; j++)
+ tmp_out[j] = tmp_out[j + 1];
+ tmp_out[ink_channels - 1] = tmp;
+ tmp_out += ink_channels;
+ }
+ }
+ if (out_channels != ink_channels)
+ {
+ real_out = final_out;
+ if (out_channels < ink_channels)
+ {
+ for (i = 0; i < width; i++)
+ {
+ for (j = 0; j < ink_channels; j++)
+ final_out[i * ink_channels + j] = out[i];
+ }
+ }
+ else
+ {
+ for (i = 0; i < width; i++)
+ {
+ int avg = 0;
+ for (j = 0; j < out_channels; j++)
+ avg += out[i * out_channels + j];
+ final_out[i] = avg / out_channels;
+ }
+ }
+ }
+ if (bytes_per_channel == 1)
+ {
+ unsigned char *char_out = (unsigned char *) real_out;
+ for (i = 0; i < width * ink_channels; i++)
+ char_out[i] = real_out[i] / 257;
+ }
+ stp_zfwrite((char *) real_out,
+ width * ink_channels * bytes_per_channel, 1, nv);
+ }
+ stp_image_conclude(image);
+ if (final_out)
+ stp_free(final_out);
+ stp_vars_destroy(nv);
+ return status;
+}
+
+static const stp_printfuncs_t print_raw_printfuncs =
+{
+ raw_list_parameters,
+ raw_parameters,
+ stp_default_media_size,
+ raw_imageable_area,
+ raw_limit,
+ raw_print,
+ raw_describe_resolution,
+ raw_describe_output,
+ stp_verify_printer_params,
+ NULL,
+ NULL
+};
+
+
+
+
+static stp_family_t print_raw_module_data =
+ {
+ &print_raw_printfuncs,
+ NULL
+ };
+
+
+static int
+print_raw_module_init(void)
+{
+ return stp_family_register(print_raw_module_data.printer_list);
+}
+
+
+static int
+print_raw_module_exit(void)
+{
+ return stp_family_unregister(print_raw_module_data.printer_list);
+}
+
+
+/* Module header */
+#define stp_module_version print_raw_LTX_stp_module_version
+#define stp_module_data print_raw_LTX_stp_module_data
+
+stp_module_version_t stp_module_version = {0, 0};
+
+stp_module_t stp_module_data =
+ {
+ "raw",
+ VERSION,
+ "RAW family driver",
+ STP_MODULE_CLASS_FAMILY,
+ NULL,
+ print_raw_module_init,
+ print_raw_module_exit,
+ (void *) &print_raw_module_data
+ };
diff --git a/src/main/print-util.c b/src/main/print-util.c
index 268b526..1138781 100644
--- a/src/main/print-util.c
+++ b/src/main/print-util.c
@@ -1,5 +1,5 @@
/*
- * "$Id: print-util.c,v 1.53.2.21 2004/02/16 21:08:33 rlk Exp $"
+ * "$Id: print-util.c,v 1.108 2004/09/17 18:38:26 rleigh Exp $"
*
* Print plug-in driver utility functions for the GIMP.
*
@@ -29,9 +29,9 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#include <gimp-print/gimp-print.h>
-#include "gimp-print-internal.h"
-#include <gimp-print/gimp-print-intl-internal.h>
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
#include <math.h>
#include <limits.h>
#if defined(HAVE_VARARGS_H) && !defined(HAVE_STDARG_H)
@@ -42,1535 +42,244 @@
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include "generic-options.h"
#define FMIN(a, b) ((a) < (b) ? (a) : (b))
-typedef struct stp_internal_option
-{
- char *name;
- size_t length;
- char *data;
- struct stp_internal_option *next;
- struct stp_internal_option *prev;
-} stp_internal_option_t;
-
-typedef struct /* Plug-in variables */
-{
- const char *output_to, /* Name of file or command to print to */
- *driver, /* Name of printer "driver" */
- *ppd_file, /* PPD file */
- *resolution, /* Resolution */
- *media_size, /* Media size */
- *media_type, /* Media type */
- *media_source, /* Media source */
- *ink_type, /* Ink or cartridge */
- *dither_algorithm; /* Dithering algorithm */
- int output_type; /* Color or grayscale output */
- float brightness; /* Output brightness */
- float scaling; /* Scaling, percent of printable area */
- int orientation, /* Orientation - 0 = port., 1 = land.,
- -1 = auto */
- left, /* Offset from lower-lefthand corner, points */
- top; /* ... */
- float gamma; /* Gamma */
- float contrast, /* Output Contrast */
- cyan, /* Output red level */
- magenta, /* Output green level */
- yellow; /* Output blue level */
- float saturation; /* Output saturation */
- float density; /* Maximum output density */
- int image_type; /* Image type (line art etc.) */
- int unit; /* Units for preview area 0=Inch 1=Metric */
- float app_gamma; /* Application gamma */
- int page_width; /* Width of page in points */
- int page_height; /* Height of page in points */
- int input_color_model; /* Color model for this device */
- int output_color_model; /* Color model for this device */
- int page_number;
- stp_job_mode_t job_mode;
- void *lut; /* Look-up table */
- void *driver_data; /* Private data of the driver */
- unsigned char *cmap; /* Color map */
- void (*outfunc)(void *data, const char *buffer, size_t bytes);
- void *outdata;
- void (*errfunc)(void *data, const char *buffer, size_t bytes);
- void *errdata;
- stp_internal_option_t *options;
- int verified; /* Ensure that params are OK! */
-} stp_internal_vars_t;
-
-typedef struct stp_internal_printer
-{
- const char *long_name, /* Long name for UI */
- *driver; /* Short name for printrc file */
- int model; /* Model number */
- const stp_printfuncs_t *printfuncs;
- stp_internal_vars_t printvars;
-} stp_internal_printer_t;
-
typedef struct
{
- const char *name;
- const char *text;
- unsigned width;
- unsigned height;
- unsigned top;
- unsigned left;
- unsigned bottom;
- unsigned right;
- stp_papersize_unit_t paper_unit;
-} stp_internal_papersize_t;
-
-static const stp_internal_vars_t default_vars =
-{
- "", /* Name of file or command to print to */
- N_ ("ps2"), /* Name of printer "driver" */
- "", /* Name of PPD file */
- "", /* Output resolution */
- "", /* Size of output media */
- "", /* Type of output media */
- "", /* Source of output media */
- "", /* Ink type */
- "", /* Dither algorithm */
- OUTPUT_COLOR, /* Color or grayscale output */
- 1.0, /* Output brightness */
- 100.0, /* Scaling (100% means entire printable area, */
- /* -XXX means scale by PPI) */
- -1, /* Orientation (-1 = automatic) */
- -1, /* X offset (-1 = center) */
- -1, /* Y offset (-1 = center) */
- 1.0, /* Screen gamma */
- 1.0, /* Contrast */
- 1.0, /* Cyan */
- 1.0, /* Magenta */
- 1.0, /* Yellow */
- 1.0, /* Output saturation */
- 1.0, /* Density */
- IMAGE_CONTINUOUS, /* Image type */
- 0, /* Unit 0=Inch */
- 1.0, /* Application gamma placeholder */
- 0, /* Page width */
- 0, /* Page height */
- COLOR_MODEL_RGB, /* Input color model */
- COLOR_MODEL_RGB, /* Output color model */
- 0, /* Page number */
- STP_JOB_MODE_PAGE /* Job mode */
-};
-
-static const stp_internal_vars_t min_vars =
-{
- "", /* Name of file or command to print to */
- N_ ("ps2"), /* Name of printer "driver" */
- "", /* Name of PPD file */
- "", /* Output resolution */
- "", /* Size of output media */
- "", /* Type of output media */
- "", /* Source of output media */
- "", /* Ink type */
- "", /* Dither algorithm */
- 0, /* Color or grayscale output */
- 0, /* Output brightness */
- 5.0, /* Scaling (100% means entire printable area, */
- /* -XXX means scale by PPI) */
- -1, /* Orientation (-1 = automatic) */
- -1, /* X offset (-1 = center) */
- -1, /* Y offset (-1 = center) */
- 0.1, /* Screen gamma */
- 0, /* Contrast */
- 0, /* Cyan */
- 0, /* Magenta */
- 0, /* Yellow */
- 0, /* Output saturation */
- .1, /* Density */
- 0, /* Image type */
- 0, /* Unit 0=Inch */
- 1.0, /* Application gamma placeholder */
- 0, /* Page width */
- 0, /* Page height */
- 0, /* Input color model */
- 0, /* Output color model */
- 0, /* Page number */
- STP_JOB_MODE_PAGE /* Job mode */
-};
-
-static const stp_internal_vars_t max_vars =
-{
- "", /* Name of file or command to print to */
- N_ ("ps2"), /* Name of printer "driver" */
- "", /* Name of PPD file */
- "", /* Output resolution */
- "", /* Size of output media */
- "", /* Type of output media */
- "", /* Source of output media */
- "", /* Ink type */
- "", /* Dither algorithm */
- OUTPUT_RAW_CMYK, /* Color or grayscale output */
- 2.0, /* Output brightness */
- 100.0, /* Scaling (100% means entire printable area, */
- /* -XXX means scale by PPI) */
- -1, /* Orientation (-1 = automatic) */
- -1, /* X offset (-1 = center) */
- -1, /* Y offset (-1 = center) */
- 4.0, /* Screen gamma */
- 4.0, /* Contrast */
- 4.0, /* Cyan */
- 4.0, /* Magenta */
- 4.0, /* Yellow */
- 9.0, /* Output saturation */
- 2.0, /* Density */
- NIMAGE_TYPES - 1, /* Image type */
- 1, /* Unit 0=Inch */
- 1.0, /* Application gamma placeholder */
- 0, /* Page width */
- 0, /* Page height */
- NCOLOR_MODELS - 1, /* Input color model */
- NCOLOR_MODELS - 1, /* Output color model */
- INT_MAX, /* Page number */
- STP_JOB_MODE_JOB /* Job mode */
-};
-
-stp_vars_t
-stp_allocate_vars(void)
-{
- void *retval = stp_zalloc(sizeof(stp_internal_vars_t));
- stp_copy_vars(retval, (stp_vars_t)&default_vars);
- return (retval);
-}
+ stp_outfunc_t ofunc;
+ void *odata;
+ char *data;
+ size_t bytes;
+} debug_msgbuf_t;
-#define SAFE_FREE(x) \
-do \
-{ \
- if ((x)) \
- stp_free((char *)(x)); \
- ((x)) = NULL; \
-} while (0)
+/*
+ * We cannot avoid use of the (non-ANSI) vsnprintf here; ANSI does
+ * not provide a safe, length-limited sprintf function.
+ */
-static char *
-c_strdup(const char *s)
-{
- char *ret;
- if (!s)
- {
- ret = stp_malloc(1);
- ret[0] = 0;
- return ret;
- }
- else
- {
- ret = stp_malloc(strlen(s) + 1);
- strcpy(ret, s);
- return ret;
- }
+#define STPI_VASPRINTF(result, bytes, format) \
+{ \
+ int current_allocation = 64; \
+ result = stp_malloc(current_allocation); \
+ while (1) \
+ { \
+ va_list args; \
+ va_start(args, format); \
+ bytes = vsnprintf(result, current_allocation, format, args); \
+ va_end(args); \
+ if (bytes >= 0 && bytes < current_allocation) \
+ break; \
+ else \
+ { \
+ stp_free (result); \
+ if (bytes < 0) \
+ current_allocation *= 2; \
+ else \
+ current_allocation = bytes + 1; \
+ result = stp_malloc(current_allocation); \
+ } \
+ } \
}
-static char *
-c_strndup(const char *s, int n)
+void
+stp_zprintf(const stp_vars_t *v, const char *format, ...)
{
- char *ret;
- if (!s || n < 0)
- {
- ret = stp_malloc(1);
- ret[0] = 0;
- return ret;
- }
- else
- {
- ret = stp_malloc(n + 1);
- strncpy(ret, s, n);
- ret[n] = 0;
- return ret;
- }
+ char *result;
+ int bytes;
+ STPI_VASPRINTF(result, bytes, format);
+ (stp_get_outfunc(v))((void *)(stp_get_outdata(v)), result, bytes);
+ stp_free(result);
}
void
-stp_free_vars(stp_vars_t vv)
+stp_asprintf(char **strp, const char *format, ...)
{
- stp_internal_vars_t *v = (stp_internal_vars_t *) vv;
- SAFE_FREE(v->output_to);
- SAFE_FREE(v->driver);
- SAFE_FREE(v->ppd_file);
- SAFE_FREE(v->resolution);
- SAFE_FREE(v->media_size);
- SAFE_FREE(v->media_type);
- SAFE_FREE(v->media_source);
- SAFE_FREE(v->ink_type);
- SAFE_FREE(v->dither_algorithm);
-}
-
-#define DEF_STRING_FUNCS(s) \
-void \
-stp_set_##s(stp_vars_t vv, const char *val) \
-{ \
- stp_internal_vars_t *v = (stp_internal_vars_t *) vv; \
- if (v->s == val) \
- return; \
- SAFE_FREE(v->s); \
- v->s = c_strdup(val); \
- v->verified = 0; \
-} \
- \
-void \
-stp_set_##s##_n(stp_vars_t vv, const char *val, int n) \
-{ \
- stp_internal_vars_t *v = (stp_internal_vars_t *) vv; \
- if (v->s == val) \
- return; \
- SAFE_FREE(v->s); \
- v->s = c_strndup(val, n); \
- v->verified = 0; \
-} \
- \
-const char * \
-stp_get_##s(const stp_vars_t vv) \
-{ \
- stp_internal_vars_t *v = (stp_internal_vars_t *) vv; \
- return v->s; \
-}
-
-#define DEF_FUNCS(s, t) \
-void \
-stp_set_##s(stp_vars_t vv, t val) \
-{ \
- stp_internal_vars_t *v = (stp_internal_vars_t *) vv; \
- v->verified = 0; \
- v->s = val; \
-} \
- \
-t \
-stp_get_##s(const stp_vars_t vv) \
-{ \
- stp_internal_vars_t *v = (stp_internal_vars_t *) vv; \
- return v->s; \
+ char *result;
+ int bytes;
+ STPI_VASPRINTF(result, bytes, format);
+ *strp = result;
}
-DEF_STRING_FUNCS(output_to)
-DEF_STRING_FUNCS(driver)
-DEF_STRING_FUNCS(ppd_file)
-DEF_STRING_FUNCS(resolution)
-DEF_STRING_FUNCS(media_size)
-DEF_STRING_FUNCS(media_type)
-DEF_STRING_FUNCS(media_source)
-DEF_STRING_FUNCS(ink_type)
-DEF_STRING_FUNCS(dither_algorithm)
-DEF_FUNCS(output_type, int)
-DEF_FUNCS(orientation, int)
-DEF_FUNCS(left, int)
-DEF_FUNCS(top, int)
-DEF_FUNCS(image_type, int)
-DEF_FUNCS(unit, int)
-DEF_FUNCS(page_width, int)
-DEF_FUNCS(page_height, int)
-DEF_FUNCS(input_color_model, int)
-DEF_FUNCS(output_color_model, int)
-DEF_FUNCS(brightness, float)
-DEF_FUNCS(scaling, float)
-DEF_FUNCS(gamma, float)
-DEF_FUNCS(contrast, float)
-DEF_FUNCS(cyan, float)
-DEF_FUNCS(magenta, float)
-DEF_FUNCS(yellow, float)
-DEF_FUNCS(saturation, float)
-DEF_FUNCS(density, float)
-DEF_FUNCS(app_gamma, float)
-DEF_FUNCS(page_number, int)
-DEF_FUNCS(job_mode, stp_job_mode_t)
-DEF_FUNCS(lut, void *)
-DEF_FUNCS(outdata, void *)
-DEF_FUNCS(errdata, void *)
-DEF_FUNCS(driver_data, void *)
-DEF_FUNCS(cmap, unsigned char *)
-DEF_FUNCS(outfunc, stp_outfunc_t)
-DEF_FUNCS(errfunc, stp_outfunc_t)
-
void
-stp_set_verified(stp_vars_t vv, int val)
+stp_catprintf(char **strp, const char *format, ...)
{
- stp_internal_vars_t *v = (stp_internal_vars_t *) vv;
- v->verified = val;
+ char *result1;
+ char *result2;
+ int bytes;
+ STPI_VASPRINTF(result1, bytes, format);
+ stp_asprintf(&result2, "%s%s", *strp, result1);
+ stp_free(result1);
+ *strp = result2;
}
-int
-stp_get_verified(const stp_vars_t vv)
-{
- stp_internal_vars_t *v = (stp_internal_vars_t *) vv;
- return v->verified;
-}
void
-stp_copy_options(stp_vars_t vd, const stp_vars_t vs)
+stp_zfwrite(const char *buf, size_t bytes, size_t nitems, const stp_vars_t *v)
{
- const stp_internal_vars_t *src = (const stp_internal_vars_t *)vs;
- stp_internal_vars_t *dest = (stp_internal_vars_t *)vd;
- stp_internal_option_t *opt = (stp_internal_option_t *) src->options;
- stp_internal_option_t *popt = NULL;
- if (opt)
- {
- stp_internal_option_t *nopt = stp_malloc(sizeof(stp_internal_option_t));
- stp_set_verified(vd, 0);
- dest->options = nopt;
- memcpy(nopt, opt, sizeof(stp_internal_option_t));
- nopt->name = stp_malloc(strlen(opt->name) + 1);
- strcpy(nopt->name, opt->name);
- nopt->data = stp_malloc(opt->length);
- memcpy(nopt->data, opt->data, opt->length);
- opt = opt->next;
- popt = nopt;
- while (opt)
- {
- nopt = stp_malloc(sizeof(stp_internal_option_t));
- memcpy(nopt, opt, sizeof(stp_internal_option_t));
- nopt->prev = popt;
- popt->next = nopt;
- nopt->name = stp_malloc(strlen(opt->name) + 1);
- strcpy(nopt->name, opt->name);
- nopt->data = stp_malloc(opt->length);
- memcpy(nopt->data, opt->data, opt->length);
- opt = opt->next;
- popt = nopt;
- }
- }
+ (stp_get_outfunc(v))((void *)(stp_get_outdata(v)), buf, bytes * nitems);
}
void
-stp_copy_vars(stp_vars_t vd, const stp_vars_t vs)
+stp_putc(int ch, const stp_vars_t *v)
{
- if (vs == vd)
- return;
- stp_set_output_to(vd, stp_get_output_to(vs));
- stp_set_driver(vd, stp_get_driver(vs));
- stp_set_driver_data(vd, stp_get_driver_data(vs));
- stp_set_ppd_file(vd, stp_get_ppd_file(vs));
- stp_set_resolution(vd, stp_get_resolution(vs));
- stp_set_media_size(vd, stp_get_media_size(vs));
- stp_set_media_type(vd, stp_get_media_type(vs));
- stp_set_media_source(vd, stp_get_media_source(vs));
- stp_set_ink_type(vd, stp_get_ink_type(vs));
- stp_set_dither_algorithm(vd, stp_get_dither_algorithm(vs));
- stp_set_output_type(vd, stp_get_output_type(vs));
- stp_set_orientation(vd, stp_get_orientation(vs));
- stp_set_left(vd, stp_get_left(vs));
- stp_set_top(vd, stp_get_top(vs));
- stp_set_image_type(vd, stp_get_image_type(vs));
- stp_set_unit(vd, stp_get_unit(vs));
- stp_set_page_width(vd, stp_get_page_width(vs));
- stp_set_page_height(vd, stp_get_page_height(vs));
- stp_set_brightness(vd, stp_get_brightness(vs));
- stp_set_scaling(vd, stp_get_scaling(vs));
- stp_set_gamma(vd, stp_get_gamma(vs));
- stp_set_contrast(vd, stp_get_contrast(vs));
- stp_set_cyan(vd, stp_get_cyan(vs));
- stp_set_magenta(vd, stp_get_magenta(vs));
- stp_set_yellow(vd, stp_get_yellow(vs));
- stp_set_saturation(vd, stp_get_saturation(vs));
- stp_set_density(vd, stp_get_density(vs));
- stp_set_app_gamma(vd, stp_get_app_gamma(vs));
- stp_set_input_color_model(vd, stp_get_input_color_model(vd));
- stp_set_output_color_model(vd, stp_get_output_color_model(vd));
- stp_set_lut(vd, stp_get_lut(vs));
- stp_set_outdata(vd, stp_get_outdata(vs));
- stp_set_errdata(vd, stp_get_errdata(vs));
- stp_set_cmap(vd, stp_get_cmap(vs));
- stp_set_outfunc(vd, stp_get_outfunc(vs));
- stp_set_errfunc(vd, stp_get_errfunc(vs));
- stp_copy_options(vd, vs);
- stp_set_verified(vd, stp_get_verified(vs));
+ unsigned char a = (unsigned char) ch;
+ (stp_get_outfunc(v))((void *)(stp_get_outdata(v)), (char *) &a, 1);
}
-stp_vars_t
-stp_allocate_copy(const stp_vars_t vs)
-{
- stp_vars_t vd = stp_allocate_vars();
- stp_copy_vars(vd, vs);
- return (vd);
-}
-
-#define ICLAMP(value) \
-do \
-{ \
- if (stp_get_##value(user) < stp_get_##value(min)) \
- stp_set_##value(user, stp_get_##value(min)); \
- else if (stp_get_##value(user) > stp_get_##value(max)) \
- stp_set_##value(user, stp_get_##value(max)); \
-} while (0)
+#define BYTE(expr, byteno) (((expr) >> (8 * byteno)) & 0xff)
void
-stp_merge_printvars(stp_vars_t user, const stp_vars_t print)
-{
- const stp_vars_t max = stp_maximum_settings();
- const stp_vars_t min = stp_minimum_settings();
- stp_set_cyan(user, stp_get_cyan(user) * stp_get_cyan(print));
- ICLAMP(cyan);
- stp_set_magenta(user, stp_get_magenta(user) * stp_get_magenta(print));
- ICLAMP(magenta);
- stp_set_yellow(user, stp_get_yellow(user) * stp_get_yellow(print));
- ICLAMP(yellow);
- stp_set_contrast(user, stp_get_contrast(user) * stp_get_contrast(print));
- ICLAMP(contrast);
- stp_set_brightness(user, stp_get_brightness(user)*stp_get_brightness(print));
- ICLAMP(brightness);
- stp_set_gamma(user, stp_get_gamma(user) / stp_get_gamma(print));
- ICLAMP(gamma);
- stp_set_saturation(user, stp_get_saturation(user)*stp_get_saturation(print));
- ICLAMP(saturation);
- stp_set_density(user, stp_get_density(user) * stp_get_density(print));
- ICLAMP(density);
- if (stp_get_output_type(print) == OUTPUT_GRAY &&
- stp_get_output_type(user) == OUTPUT_COLOR)
- stp_set_output_type(user, OUTPUT_GRAY);
-}
-
-/*
- * 'stp_default_media_size()' - Return the size of a default page size.
- */
-
-/*
- * Sizes are converted to 1/72in, then rounded down so that we don't
- * print off the edge of the paper.
- */
-static stp_internal_papersize_t paper_sizes[] =
-{
- /* Common imperial page sizes */
- { "Letter", N_ ("Letter"),
- 612, 792, 0, 0, 0, 0, PAPERSIZE_ENGLISH }, /* 8.5in x 11in */
- { "Legal", N_ ("Legal"),
- 612, 1008, 0, 0, 0, 0, PAPERSIZE_ENGLISH }, /* 8.5in x 14in */
- { "Tabloid", N_ ("Tabloid"),
- 792, 1224, 0, 0, 0, 0, PAPERSIZE_ENGLISH }, /* 11in x 17in */
- { "Executive", N_ ("Executive"),
- 522, 756, 0, 0, 0, 0, PAPERSIZE_ENGLISH }, /* 7.25 * 10.5in */
- { "Postcard", N_ ("Postcard"),
- 283, 416, 0, 0, 0, 0, PAPERSIZE_ENGLISH }, /* 100mm x 147mm */
- { "w216h360", N_ ("3x5"),
- 216, 360, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "w288h432", N_ ("4x6"),
- 288, 432, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "w324h495", N_ ("Epson 4x6 Photo Paper"),
- 324, 495, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "w360h504", N_ ("5x7"),
- 360, 504, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "w360h576", N_ ("5x8"),
- 360, 576, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "w432h576", N_ ("6x8"),
- 432, 576, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "8x10", N_ ("8x10"),
- 576, 720, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "Statement", N_ ("Manual"),
- 396, 612, 0, 0, 0, 0, PAPERSIZE_ENGLISH }, /* 5.5in x 8.5in */
- { "TabloidExtra", N_ ("12x18"),
- 864, 1296, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "SuperB", N_ ("Super B 13x19"),
- 936, 1368, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "EngineeringC", N_ ("Engineering C 17x22"),
- 1224, 1584, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
-
- /* Other common photographic paper sizes */
- { "w576h864", N_ ("8x12"),
- 576, 864, 0, 0, 0, 0, PAPERSIZE_ENGLISH }, /* Sometimes used for 35 mm */
- { "w792h1008", N_ ("11x14"),
- 792, 1008, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "w1152h1440", N_ ("16x20"),
- 1152, 1440, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "w1152h1728", N_ ("16x24"),
- 1152, 1728, 0, 0, 0, 0, PAPERSIZE_ENGLISH }, /* 20x24 for 35 mm */
- { "w1440h1728", N_ ("20x24"),
- 1440, 1728, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "w1440h2160", N_ ("20x30"),
- 1440, 2160, 0, 0, 0, 0, PAPERSIZE_ENGLISH }, /* 24x30 for 35 mm */
- { "w1584h2160", N_ ("22x30"),
- 1584, 2160, 0, 0, 0, 0, PAPERSIZE_ENGLISH }, /* Common watercolor paper */
- { "w1728h2160", N_ ("24x30"),
- 1728, 2160, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "w1728h2592", N_ ("24x36"),
- 1728, 2592, 0, 0, 0, 0, PAPERSIZE_ENGLISH }, /* Sometimes used for 35 mm */
- { "w2160h2880", N_ ("30x40"),
- 2160, 2880, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
-
- /* International Paper Sizes (mostly taken from BS4000:1968) */
-
- /*
- * "A" series: Paper and boards, trimmed sizes
- *
- * "A" sizes are in the ratio 1 : sqrt(2). A0 has a total area
- * of 1 square metre. Everything is rounded to the nearest
- * millimetre. Thus, A0 is 841mm x 1189mm. Every other A
- * size is obtained by doubling or halving another A size.
- */
- { "w4768h6749", N_ ("4A"),
- 4768, 6749, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 1682mm x 2378mm */
- { "w3370h4768", N_ ("2A"),
- 3370, 4768, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 1189mm x 1682mm */
- { "SuperA0", N_ ("Super A0"),
- 2590, 3662, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 914mm x 1292mm */
- { "A0", N_ ("A0"),
- 2384, 3370, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 841mm x 1189mm */
- { "A1", N_ ("A1"),
- 1684, 2384, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 594mm x 841mm */
- { "A2", N_ ("A2"),
- 1191, 1684, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 420mm x 594mm */
- { "A3", N_ ("A3"),
- 842, 1191, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 297mm x 420mm */
- { "A4", N_ ("A4"),
- 595, 842, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 210mm x 297mm */
- { "A5", N_ ("A5"),
- 420, 595, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 148mm x 210mm */
- { "A6", N_ ("A6"),
- 297, 420, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 105mm x 148mm */
- { "A7", N_ ("A7"),
- 210, 297, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 74mm x 105mm */
- { "A8", N_ ("A8"),
- 148, 210, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 52mm x 74mm */
- { "A9", N_ ("A9"),
- 105, 148, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 37mm x 52mm */
- { "A10", N_ ("A10"),
- 73, 105, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 26mm x 37mm */
-
- /*
- * Stock sizes for normal trims.
- * Allowance for trim is 3 millimetres.
- */
- { "w2437h3458", N_ ("RA0"),
- 2437, 3458, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 860mm x 1220mm */
- { "w1729h2437", N_ ("RA1"),
- 1729, 2437, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 610mm x 860mm */
- { "w1218h1729", N_ ("RA2"),
- 1218, 1729, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 430mm x 610mm */
- { "w864h1218", N_ ("RA3"),
- 864, 1218, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 305mm x 430mm */
- { "w609h864", N_ ("RA4"),
- 609, 864, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 215mm x 305mm */
-
- /*
- * Stock sizes for bled work or extra trims.
- */
- { "w2551h3628", N_ ("SRA0"),
- 2551, 3628, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 900mm x 1280mm */
- { "w1814h2551", N_ ("SRA1"),
- 1814, 2551, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 640mm x 900mm */
- { "w1275h1814", N_ ("SRA2"),
- 1275, 1814, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 450mm x 640mm */
- { "w907h1275", N_ ("SRA3"),
- 907, 1275, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 320mm x 450mm */
- { "w637h907", N_ ("SRA4"),
- 637, 907, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 225mm x 320mm */
-
- /*
- * "B" series: Posters, wall charts and similar items.
- */
- { "w5669h8016", N_ ("4B ISO"),
- 5669, 8016, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 2000mm x 2828mm */
- { "w4008h5669", N_ ("2B ISO"),
- 4008, 5669, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 1414mm x 2000mm */
- { "ISOB0", N_ ("B0 ISO"),
- 2834, 4008, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 1000mm x 1414mm */
- { "ISOB1", N_ ("B1 ISO"),
- 2004, 2834, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 707mm x 1000mm */
- { "ISOB2", N_ ("B2 ISO"),
- 1417, 2004, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 500mm x 707mm */
- { "ISOB3", N_ ("B3 ISO"),
- 1000, 1417, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 353mm x 500mm */
- { "ISOB4", N_ ("B4 ISO"),
- 708, 1000, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 250mm x 353mm */
- { "ISOB5", N_ ("B5 ISO"),
- 498, 708, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 176mm x 250mm */
- { "ISOB6", N_ ("B6 ISO"),
- 354, 498, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 125mm x 176mm */
- { "ISOB7", N_ ("B7 ISO"),
- 249, 354, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 88mm x 125mm */
- { "ISOB8", N_ ("B8 ISO"),
- 175, 249, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 62mm x 88mm */
- { "ISOB9", N_ ("B9 ISO"),
- 124, 175, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 44mm x 62mm */
- { "ISOB10", N_ ("B10 ISO"),
- 87, 124, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 31mm x 44mm */
-
- { "SuperB0", N_ ("Super B0 JIS"),
- 3167, 4478, 0, 0, 0, 0, PAPERSIZE_METRIC },
- { "B0", N_ ("B0 JIS"),
- 2919, 4127, 0, 0, 0, 0, PAPERSIZE_METRIC },
- { "B1", N_ ("B1 JIS"),
- 2063, 2919, 0, 0, 0, 0, PAPERSIZE_METRIC },
- { "B2", N_ ("B2 JIS"),
- 1459, 2063, 0, 0, 0, 0, PAPERSIZE_METRIC },
- { "B3", N_ ("B3 JIS"),
- 1029, 1459, 0, 0, 0, 0, PAPERSIZE_METRIC },
- { "B4", N_ ("B4 JIS"),
- 727, 1029, 0, 0, 0, 0, PAPERSIZE_METRIC },
- { "B5", N_ ("B5 JIS"),
- 518, 727, 0, 0, 0, 0, PAPERSIZE_METRIC },
- { "B6", N_ ("B6 JIS"),
- 362, 518, 0, 0, 0, 0, PAPERSIZE_METRIC },
- { "B7", N_ ("B7 JIS"),
- 257, 362, 0, 0, 0, 0, PAPERSIZE_METRIC },
- { "B8", N_ ("B8 JIS"),
- 180, 257, 0, 0, 0, 0, PAPERSIZE_METRIC },
- { "B9", N_ ("B9 JIS"),
- 127, 180, 0, 0, 0, 0, PAPERSIZE_METRIC },
- { "B10", N_ ("B10 JIS"),
- 90, 127, 0, 0, 0, 0, PAPERSIZE_METRIC },
-
- /*
- * "C" series: Envelopes or folders suitable for A size stationery.
- */
- { "C0", N_ ("C0"),
- 2599, 3676, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 917mm x 1297mm */
- { "C1", N_ ("C1"),
- 1836, 2599, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 648mm x 917mm */
- { "C2", N_ ("C2"),
- 1298, 1836, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 458mm x 648mm */
- { "C3", N_ ("C3"),
- 918, 1298, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 324mm x 458mm */
- { "C4", N_ ("C4"),
- 649, 918, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 229mm x 324mm */
- { "C5", N_ ("C5"),
- 459, 649, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 162mm x 229mm */
- { "w354h918", N_ ("B6-C4"),
- 354, 918, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 125mm x 324mm */
- { "C6", N_ ("C6"),
- 323, 459, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 114mm x 162mm */
- { "DL", N_ ("DL"),
- 311, 623, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 110mm x 220mm */
- { "w229h459", N_ ("C7-6"),
- 229, 459, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 81mm x 162mm */
- { "C7", N_ ("C7"),
- 229, 323, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 81mm x 114mm */
- { "C8", N_ ("C8"),
- 161, 229, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 57mm x 81mm */
- { "C9", N_ ("C9"),
- 113, 161, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 40mm x 57mm */
- { "C10", N_ ("C10"),
- 79, 113, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 28mm x 40mm */
-
- /*
- * US CAD standard paper sizes
- */
- { "ARCHA", N_ ("ArchA"),
- 648, 864, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "ARCHA_trans", N_ ("ArchA Transverse"),
- 864, 648, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "ARCHB", N_ ("ArchB"),
- 864, 1296, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "ARCHB_trans", N_ ("ArchB Transverse"),
- 1296, 864, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "ARCHC", N_ ("ArchC"),
- 1296, 1728, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "ARCHC_trans", N_ ("ArchC Transverse"),
- 1728, 1296, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "ARCHD", N_ ("ArchD"),
- 1728, 2592, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "ARCHD_trans", N_ ("ArchD Transverse"),
- 2592, 1728, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "ARCHE", N_ ("ArchE"),
- 2592, 3456, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "ARCHE_trans", N_ ("ArchE Transverse"),
- 3456, 2592, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
-
- /*
- * Foolscap
- */
- { "w612h936", N_ ("American foolscap"),
- 612, 936, 0, 0, 0, 0, PAPERSIZE_ENGLISH }, /* American foolscap */
- { "w648h936", N_ ("European foolscap"),
- 648, 936, 0, 0, 0, 0, PAPERSIZE_ENGLISH }, /* European foolscap */
-
- /*
- * Sizes for book production
- * The BPIF and the Publishers Association jointly recommend ten
- * standard metric sizes for case-bound titles as follows:
- */
- { "w535h697", N_ ("Crown Quarto"),
- 535, 697, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 189mm x 246mm */
- { "w569h731", N_ ("Large Crown Quarto"),
- 569, 731, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 201mm x 258mm */
- { "w620h782", N_ ("Demy Quarto"),
- 620, 782, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 219mm x 276mm */
- { "w671h884", N_ ("Royal Quarto"),
- 671, 884, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 237mm x 312mm */
- /*{ "ISO A4", 595,
- 841, PAPERSIZE_METRIC, 0, 0, 0, 0 }, 210mm x 297mm */
- { "w348h527", N_ ("Crown Octavo"),
- 348, 527, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 123mm x 186mm */
- { "w365h561", N_ ("Large Crown Octavo"),
- 365, 561, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 129mm x 198mm */
- { "w391h612", N_ ("Demy Octavo"),
- 391, 612, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 138mm x 216mm */
- { "w442h663", N_ ("Royal Octavo"),
- 442, 663, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 156mm x 234mm */
- /*{ N_ ("ISO A5"), 419,
- 595, 0, 0, 0, 0, PAPERSIZE_METRIC }, 148mm x 210mm */
-
- /* Paperback sizes in common usage */
- { "w314h504", N_ ("Small paperback"),
- 314, 504, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 111mm x 178mm */
- { "w314h513", N_ ("Penguin small paperback"),
- 314, 513, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 111mm x 181mm */
- { "w365h561", N_ ("Penguin large paperback"),
- 365, 561, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 129mm x 198mm */
-
- /* Miscellaneous sizes */
- { "w283h425", N_ ("10cm x 15cm"),
- 283, 425, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 100 x 150 mm */
- { "w283h420", N_ ("Hagaki Card"),
- 283, 420, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 100 x 148 mm */
- { "w420h567", N_ ("Oufuku Card"),
- 420, 567, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* 148 x 200 mm */
- { "w340h666", N_ ("Japanese long envelope #3"),
- 340, 666, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* Japanese long envelope #3 */
- { "w255h581", N_ ("Japanese long envelope #4"),
- 255, 581, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* Japanese long envelope #4 */
- { "w680h941", N_ ("Japanese Kaku envelope #4"),
- 680, 941, 0, 0, 0, 0, PAPERSIZE_METRIC }, /* Japanese Kaku envelope #4 */
- { "COM10", N_ ("Commercial 10"),
- 297, 684, 0, 0, 0, 0, PAPERSIZE_ENGLISH }, /* US Commercial 10 env */
- { "w315h414", N_ ("A2 Invitation"),
- 315, 414, 0, 0, 0, 0, PAPERSIZE_ENGLISH }, /* US A2 invitation */
- { "Monarch", N_ ("Monarch Envelope"),
- 279, 540, 0, 0, 0, 0, PAPERSIZE_ENGLISH }, /* Monarch envelope (3.875 * 7.5) */
- { "Custom", N_ ("Custom"),
- 0, 0, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
-
- { "w252", N_ ("89 mm Roll Paper"),
- 252, 0, 0, 0, 0, 0, PAPERSIZE_METRIC },
- { "w288", N_ ("4 Inch Roll Paper"),
- 288, 0, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "w360", N_ ("5 Inch Roll Paper"),
- 360, 0, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "w595", N_ ("210 mm Roll Paper"),
- 595, 0, 0, 0, 0, 0, PAPERSIZE_METRIC },
- { "w936", N_ ("13 Inch Roll Paper"),
- 936, 0, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "w1584", N_ ("22 Inch Roll Paper"),
- 1584, 0, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "w1728", N_ ("24 Inch Roll Paper"),
- 1728, 0, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "w2592", N_ ("36 Inch Roll Paper"),
- 2592, 0, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
- { "w3168", N_ ("44 Inch Roll Paper"),
- 3168, 0, 0, 0, 0, 0, PAPERSIZE_ENGLISH },
-
- { "", "", 0, 0, 0, 0, 0, PAPERSIZE_METRIC }
-};
-
-int
-stp_known_papersizes(void)
-{
- return sizeof(paper_sizes) / sizeof(stp_internal_papersize_t) - 1;
-}
-
-const char *
-stp_papersize_get_name(const stp_papersize_t pt)
+stp_put16_le(unsigned short sh, const stp_vars_t *v)
{
- const stp_internal_papersize_t *p = (const stp_internal_papersize_t *) pt;
- return p->name;
-}
-
-const char *
-stp_papersize_get_text(const stp_papersize_t pt)
-{
- const stp_internal_papersize_t *p = (const stp_internal_papersize_t *) pt;
- return _(p->text);
-}
-
-unsigned
-stp_papersize_get_width(const stp_papersize_t pt)
-{
- const stp_internal_papersize_t *p = (const stp_internal_papersize_t *) pt;
- return p->width;
-}
-
-unsigned
-stp_papersize_get_height(const stp_papersize_t pt)
-{
- const stp_internal_papersize_t *p = (const stp_internal_papersize_t *) pt;
- return p->height;
-}
-
-unsigned
-stp_papersize_get_top(const stp_papersize_t pt)
-{
- const stp_internal_papersize_t *p = (const stp_internal_papersize_t *) pt;
- return p->top;
-}
-
-unsigned
-stp_papersize_get_left(const stp_papersize_t pt)
-{
- const stp_internal_papersize_t *p = (const stp_internal_papersize_t *) pt;
- return p->left;
-}
-
-unsigned
-stp_papersize_get_bottom(const stp_papersize_t pt)
-{
- const stp_internal_papersize_t *p = (const stp_internal_papersize_t *) pt;
- return p->bottom;
-}
-
-unsigned
-stp_papersize_get_right(const stp_papersize_t pt)
-{
- const stp_internal_papersize_t *p = (const stp_internal_papersize_t *) pt;
- return p->right;
-}
-
-stp_papersize_unit_t
-stp_papersize_get_unit(const stp_papersize_t pt)
-{
- const stp_internal_papersize_t *p = (const stp_internal_papersize_t *) pt;
- return p->paper_unit;
-}
-
-#if 1
-/*
- * This is, of course, blatantly thread-unsafe. However, it certainly
- * speeds up genppd by a lot!
- */
-const stp_papersize_t
-stp_get_papersize_by_name(const char *name)
-{
- static int last_used_papersize = 0;
- int base = last_used_papersize;
- int sizes = stp_known_papersizes();
- int i;
- if (!name)
- return NULL;
- for (i = 0; i < sizes; i++)
- {
- int size_to_try = (i + base) % sizes;
- const stp_internal_papersize_t *val = &(paper_sizes[size_to_try]);
- if (!strcmp(val->name, name))
- {
- last_used_papersize = size_to_try;
- return (const stp_papersize_t) val;
- }
- }
- return NULL;
-}
-#else
-const stp_papersize_t
-stp_get_papersize_by_name(const char *name)
-{
- const stp_internal_papersize_t *val = &(paper_sizes[0]);
- if (!name)
- return NULL;
- while (strlen(val->name) > 0)
- {
- if (!strcmp(val->name, name))
- return (stp_papersize_t) val;
- val++;
- }
- return NULL;
-}
-#endif
-
-const stp_papersize_t
-stp_get_papersize_by_index(int index)
-{
- if (index < 0 || index >= stp_known_papersizes())
- return NULL;
- else
- return (stp_papersize_t) &(paper_sizes[index]);
-}
-
-static int
-paper_size_mismatch(int l, int w, const stp_internal_papersize_t *val)
-{
- int hdiff = abs(l - (int) val->height);
- int vdiff = abs(w - (int) val->width);
- return hdiff + vdiff;
-}
-
-const stp_papersize_t
-stp_get_papersize_by_size(int l, int w)
-{
- int score = INT_MAX;
- const stp_internal_papersize_t *ref = NULL;
- const stp_internal_papersize_t *val = &(paper_sizes[0]);
- int sizes = stp_known_papersizes();
- int i;
- for (i = 0; i < sizes; i++)
- {
- if (val->width == w && val->height == l)
- return (stp_papersize_t) val;
- else
- {
- int myscore = paper_size_mismatch(l, w, val);
- if (myscore < score && myscore < 20)
- {
- ref = val;
- score = myscore;
- }
- }
- val++;
- }
- return (stp_papersize_t) ref;
+ stp_putc(BYTE(sh, 0), v);
+ stp_putc(BYTE(sh, 1), v);
}
void
-stp_default_media_size(const stp_printer_t printer,
- /* I - Printer model (not used) */
- const stp_vars_t v, /* I */
- int *width, /* O - Width in points */
- int *height) /* O - Height in points */
-{
- if (stp_get_page_width(v) > 0 && stp_get_page_height(v) > 0)
- {
- *width = stp_get_page_width(v);
- *height = stp_get_page_height(v);
- }
- else
- {
- const stp_papersize_t papersize =
- stp_get_papersize_by_name(stp_get_media_size(v));
- if (!papersize)
- {
- *width = 1;
- *height = 1;
- }
- else
- {
- *width = stp_papersize_get_width(papersize);
- *height = stp_papersize_get_height(papersize);
- }
- if (*width == 0)
- *width = 612;
- if (*height == 0)
- *height = 792;
- }
-}
-
-/*
- * The list of printers has been moved to printers.c
- */
-#include "print-printers.c"
-
-int
-stp_known_printers(void)
-{
- return printer_count;
-}
-
-const stp_printer_t
-stp_get_printer_by_index(int idx)
-{
- if (idx < 0 || idx >= printer_count)
- return NULL;
- return (stp_printer_t) &(printers[idx]);
-}
-
-const stp_printer_t
-stp_get_printer_by_long_name(const char *long_name)
-{
- const stp_internal_printer_t *val = &(printers[0]);
- int i;
- if (!long_name)
- return NULL;
- for (i = 0; i < stp_known_printers(); i++)
- {
- if (!strcmp(val->long_name, long_name))
- return (stp_printer_t) val;
- val++;
- }
- return NULL;
-}
-
-const stp_printer_t
-stp_get_printer_by_driver(const char *driver)
-{
- const stp_internal_printer_t *val = &(printers[0]);
- int i;
- if (!driver)
- return NULL;
- for (i = 0; i < stp_known_printers(); i++)
- {
- if (!strcmp(val->driver, driver))
- return (stp_printer_t) val;
- val++;
- }
- return NULL;
-}
-
-int
-stp_get_printer_index_by_driver(const char *driver)
-{
- int idx = 0;
- const stp_internal_printer_t *val = &(printers[0]);
- if (!driver)
- return -1;
- for (idx = 0; idx < stp_known_printers(); idx++)
- {
- if (!strcmp(val->driver, driver))
- return idx;
- val++;
- }
- return -1;
-}
-
-const char *
-stp_printer_get_long_name(const stp_printer_t p)
-{
- const stp_internal_printer_t *val = (const stp_internal_printer_t *) p;
- return val->long_name;
-}
-
-const char *
-stp_printer_get_driver(const stp_printer_t p)
-{
- const stp_internal_printer_t *val = (const stp_internal_printer_t *) p;
- return val->driver;
-}
-
-int
-stp_printer_get_model(const stp_printer_t p)
-{
- const stp_internal_printer_t *val = (const stp_internal_printer_t *) p;
- return val->model;
-}
-
-const stp_printfuncs_t *
-stp_printer_get_printfuncs(const stp_printer_t p)
-{
- const stp_internal_printer_t *val = (const stp_internal_printer_t *) p;
- return val->printfuncs;
-}
-
-const stp_vars_t
-stp_printer_get_printvars(const stp_printer_t p)
-{
- const stp_internal_printer_t *val = (const stp_internal_printer_t *) p;
- return (stp_vars_t) &(val->printvars);
-}
-
-const char *
-stp_default_dither_algorithm(void)
+stp_put16_be(unsigned short sh, const stp_vars_t *v)
{
- return stp_dither_algorithm_name(0);
+ stp_putc(BYTE(sh, 1), v);
+ stp_putc(BYTE(sh, 0), v);
}
-int
-stp_start_job(const stp_printer_t printer,
- stp_image_t *image, const stp_vars_t v)
+void
+stp_put32_le(unsigned int in, const stp_vars_t *v)
{
- if (!stp_get_verified(v))
- return 0;
- if (stp_get_job_mode(v) == STP_JOB_MODE_JOB)
- return 1;
- else
- return 0;
+ stp_putc(BYTE(in, 0), v);
+ stp_putc(BYTE(in, 1), v);
+ stp_putc(BYTE(in, 2), v);
+ stp_putc(BYTE(in, 3), v);
}
-int
-stp_end_job(const stp_printer_t printer,
- stp_image_t *image, const stp_vars_t v)
+void
+stp_put32_be(unsigned int in, const stp_vars_t *v)
{
- if (!stp_get_verified(v))
- return 0;
- if (stp_get_job_mode(v) == STP_JOB_MODE_JOB)
- return 1;
- else
- return 0;
+ stp_putc(BYTE(in, 3), v);
+ stp_putc(BYTE(in, 2), v);
+ stp_putc(BYTE(in, 1), v);
+ stp_putc(BYTE(in, 0), v);
}
void
-stp_compute_page_parameters(int page_right, /* I */
- int page_left, /* I */
- int page_top, /* I */
- int page_bottom, /* I */
- double scaling, /* I */
- int image_width, /* I */
- int image_height, /* I */
- stp_image_t *image, /* IO */
- int *orientation, /* IO */
- int *page_width, /* O */
- int *page_height, /* O */
- int *out_width, /* O */
- int *out_height, /* O */
- int *left, /* O */
- int *top) /* O */
+stp_puts(const char *s, const stp_vars_t *v)
{
- *page_width = page_right - page_left;
- *page_height = page_top - page_bottom;
-
- /* In AUTO orientation, just orient the paper the same way as the image. */
-
- if (*orientation == ORIENT_AUTO)
- {
- if ((*page_width >= *page_height && image_width >= image_height)
- || (*page_height >= *page_width && image_height >= image_width))
- *orientation = ORIENT_PORTRAIT;
- else
- *orientation = ORIENT_LANDSCAPE;
- }
-
- if (*orientation == ORIENT_LANDSCAPE)
- image->rotate_ccw(image);
- else if (*orientation == ORIENT_UPSIDEDOWN)
- image->rotate_180(image);
- else if (*orientation == ORIENT_SEASCAPE)
- image->rotate_cw(image);
-
- image_width = image->width(image);
- image_height = image->height(image);
-
- /*
- * Calculate width/height...
- */
-
- if (scaling == 0.0)
- {
- *out_width = *page_width;
- *out_height = *page_height;
- }
- else if (scaling < 0.0)
- {
- /*
- * Scale to pixels per inch...
- */
-
- *out_width = image_width * -72.0 / scaling;
- *out_height = image_height * -72.0 / scaling;
- }
- else
- {
- /*
- * Scale by percent...
- */
-
- /*
- * Decide which orientation gives the proper fit
- * If we ask for 50%, we do not want to exceed that
- * in either dimension!
- */
-
- int twidth0 = *page_width * scaling / 100.0;
- int theight0 = twidth0 * image_height / image_width;
- int theight1 = *page_height * scaling / 100.0;
- int twidth1 = theight1 * image_width / image_height;
-
- *out_width = FMIN(twidth0, twidth1);
- *out_height = FMIN(theight0, theight1);
- }
-
- if (*out_width == 0)
- *out_width = 1;
- if (*out_height == 0)
- *out_height = 1;
-
- /*
- * Adjust offsets depending on the page orientation...
- */
-
- if (*orientation == ORIENT_LANDSCAPE || *orientation == ORIENT_SEASCAPE)
- {
- int x;
-
- x = *left;
- *left = *top;
- *top = x;
- }
-
- if ((*orientation == ORIENT_UPSIDEDOWN || *orientation == ORIENT_SEASCAPE)
- && *left >= 0)
- {
- *left = *page_width - *left - *out_width;
- if (*left < 0)
- *left = 0;
- }
-
- if ((*orientation == ORIENT_UPSIDEDOWN || *orientation == ORIENT_LANDSCAPE)
- && *top >= 0)
- {
- *top = *page_height - *top - *out_height;
- if (*top < 0)
- *top = 0;
- }
-
- if (*left < 0)
- *left = (*page_width - *out_width) / 2;
-
- if (*top < 0)
- *top = (*page_height - *out_height) / 2;
+ (stp_get_outfunc(v))((void *)(stp_get_outdata(v)), s, strlen(s));
}
void
-stp_set_printer_defaults(stp_vars_t v, const stp_printer_t p,
- const char *ppd_file)
+stp_send_command(const stp_vars_t *v, const char *command,
+ const char *format, ...)
{
- const stp_printfuncs_t *printfuncs = stp_printer_get_printfuncs(p);
- stp_set_resolution(v, ((printfuncs->default_parameters)
- (p, ppd_file, "Resolution")));
- stp_set_ink_type(v, ((printfuncs->default_parameters)
- (p, ppd_file, "InkType")));
- stp_set_media_type(v, ((printfuncs->default_parameters)
- (p, ppd_file, "MediaType")));
- stp_set_media_source(v, ((printfuncs->default_parameters)
- (p, ppd_file, "InputSlot")));
- stp_set_media_size(v, ((printfuncs->default_parameters)
- (p, ppd_file, "PageSize")));
- stp_set_dither_algorithm(v, stp_default_dither_algorithm());
- stp_set_driver(v, stp_printer_get_driver(p));
-}
+ int i = 0;
+ char fchar;
+ const char *out_str;
+ unsigned short byte_count = 0;
+ va_list args;
-static int
-verify_param(const char *checkval, stp_param_t *vptr,
- int count, const char *what, const stp_vars_t v)
-{
- int answer = 0;
- int i;
- if (count > 0)
+ if (strlen(format) > 0)
{
- for (i = 0; i < count; i++)
- if (!strcmp(checkval, vptr[i].name))
- {
- answer = 1;
- break;
- }
- if (!answer)
- stp_eprintf(v, _("%s is not a valid parameter of type %s\n"),
- checkval, what);
- for (i = 0; i < count; i++)
+ va_start(args, format);
+ for (i = 0; i < strlen(format); i++)
{
- stp_free((void *)vptr[i].name);
- stp_free((void *)vptr[i].text);
+ switch (format[i])
+ {
+ case 'a':
+ case 'b':
+ case 'B':
+ case 'd':
+ case 'D':
+ break;
+ case 'c':
+ (void) va_arg(args, unsigned int);
+ byte_count += 1;
+ break;
+ case 'h':
+ case 'H':
+ (void) va_arg(args, unsigned int);
+ byte_count += 2;
+ break;
+ case 'l':
+ case 'L':
+ (void) va_arg(args, unsigned int);
+ byte_count += 4;
+ break;
+ case 's':
+ out_str = va_arg(args, const char *);
+ byte_count += strlen(out_str);
+ break;
+ }
}
+ va_end(args);
}
- else
- stp_eprintf(v, _("%s is not a valid parameter of type %s\n"),
- checkval, what);
- if (vptr)
- free(vptr);
- return answer;
-}
-
-#define CHECK_FLOAT_RANGE(v, component) \
-do \
-{ \
- const stp_vars_t max = stp_maximum_settings(); \
- const stp_vars_t min = stp_minimum_settings(); \
- if (stp_get_##component((v)) < stp_get_##component(min) || \
- stp_get_##component((v)) > stp_get_##component(max)) \
- { \
- answer = 0; \
- stp_eprintf(v, _("%s out of range (value %f, min %f, max %f)\n"), \
- #component, stp_get_##component(v), \
- stp_get_##component(min), stp_get_##component(max)); \
- } \
-} while (0)
-#define CHECK_INT_RANGE(v, component) \
-do \
-{ \
- const stp_vars_t max = stp_maximum_settings(); \
- const stp_vars_t min = stp_minimum_settings(); \
- if (stp_get_##component((v)) < stp_get_##component(min) || \
- stp_get_##component((v)) > stp_get_##component(max)) \
- { \
- answer = 0; \
- stp_eprintf(v, _("%s out of range (value %d, min %d, max %d)\n"), \
- #component, stp_get_##component(v), \
- stp_get_##component(min), stp_get_##component(max)); \
- } \
-} while (0)
-
-int
-stp_verify_printer_params(const stp_printer_t p, const stp_vars_t v)
-{
- stp_param_t *vptr;
- int count;
- int i;
- int answer = 1;
- const stp_printfuncs_t *printfuncs = stp_printer_get_printfuncs(p);
- const stp_vars_t printvars = stp_printer_get_printvars(p);
- const char *ppd_file = stp_get_ppd_file(v);
+ stp_puts(command, v);
- /*
- * Note that in raw CMYK mode the user is responsible for not sending
- * color output to black & white printers!
- */
- if (stp_get_output_type(printvars) == OUTPUT_GRAY &&
- (stp_get_output_type(v) == OUTPUT_COLOR ||
- stp_get_output_type(v) == OUTPUT_RAW_CMYK))
- {
- answer = 0;
- stp_eprintf(v, _("Printer does not support color output\n"));
- }
- if (strlen(stp_get_media_size(v)) > 0)
- {
- const char *checkval = stp_get_media_size(v);
- vptr = (*printfuncs->parameters)(p, ppd_file, "PageSize", &count);
- answer &= verify_param(checkval, vptr, count, "page size", v);
- }
- else
+ va_start(args, format);
+ while ((fchar = format[0]) != '\0')
{
- int height, width;
- int min_height, min_width;
- (*printfuncs->limit)(p, v, &width, &height, &min_width, &min_height);
- if (stp_get_page_height(v) <= min_height ||
- stp_get_page_height(v) > height ||
- stp_get_page_width(v) <= min_width || stp_get_page_width(v) > width)
+ switch (fchar)
{
- answer = 0;
- stp_eprintf(v, _("Image size is not valid\n"));
+ case 'a':
+ stp_putc(byte_count, v);
+ break;
+ case 'b':
+ stp_put16_le(byte_count, v);
+ break;
+ case 'B':
+ stp_put16_be(byte_count, v);
+ break;
+ case 'd':
+ stp_put32_le(byte_count, v);
+ break;
+ case 'D':
+ stp_put32_be(byte_count, v);
+ break;
+ case 'c':
+ stp_putc(va_arg(args, unsigned int), v);
+ break;
+ case 'h':
+ stp_put16_le(va_arg(args, unsigned int), v);
+ break;
+ case 'H':
+ stp_put16_be(va_arg(args, unsigned int), v);
+ break;
+ case 'l':
+ stp_put32_le(va_arg(args, unsigned int), v);
+ break;
+ case 'L':
+ stp_put32_be(va_arg(args, unsigned int), v);
+ break;
+ case 's':
+ stp_puts(va_arg(args, const char *), v);
+ break;
}
+ format++;
}
-
- if (stp_get_top(v) < 0)
- {
- answer = 0;
- stp_eprintf(v, _("Top margin must not be less than zero\n"));
- }
-
- if (stp_get_left(v) < 0)
- {
- answer = 0;
- stp_eprintf(v, _("Left margin must not be less than zero\n"));
- }
-
- CHECK_FLOAT_RANGE(v, gamma);
- CHECK_FLOAT_RANGE(v, contrast);
- CHECK_FLOAT_RANGE(v, cyan);
- CHECK_FLOAT_RANGE(v, magenta);
- CHECK_FLOAT_RANGE(v, yellow);
- CHECK_FLOAT_RANGE(v, brightness);
- CHECK_FLOAT_RANGE(v, density);
- CHECK_FLOAT_RANGE(v, saturation);
- if (stp_get_scaling(v) > 0)
- {
- CHECK_FLOAT_RANGE(v, scaling);
- }
-
- CHECK_INT_RANGE(v, image_type);
- CHECK_INT_RANGE(v, unit);
- CHECK_INT_RANGE(v, output_type);
- CHECK_INT_RANGE(v, input_color_model);
- CHECK_INT_RANGE(v, output_color_model);
-
- if (strlen(stp_get_media_type(v)) > 0)
- {
- const char *checkval = stp_get_media_type(v);
- vptr = (*printfuncs->parameters)(p, ppd_file, "MediaType", &count);
- answer &= verify_param(checkval, vptr, count, "media type", v);
- }
-
- if (strlen(stp_get_media_source(v)) > 0)
- {
- const char *checkval = stp_get_media_source(v);
- vptr = (*printfuncs->parameters)(p, ppd_file, "InputSlot", &count);
- answer &= verify_param(checkval, vptr, count, "media source", v);
- }
-
- if (strlen(stp_get_resolution(v)) > 0)
- {
- const char *checkval = stp_get_resolution(v);
- vptr = (*printfuncs->parameters)(p, ppd_file, "Resolution", &count);
- answer &= verify_param(checkval, vptr, count, "resolution", v);
- }
-
- if (strlen(stp_get_ink_type(v)) > 0)
- {
- const char *checkval = stp_get_ink_type(v);
- vptr = (*printfuncs->parameters)(p, ppd_file, "InkType", &count);
- answer &= verify_param(checkval, vptr, count, "ink type", v);
- }
-
- for (i = 0; i < stp_dither_algorithm_count(); i++)
- if (!strcmp(stp_get_dither_algorithm(v), stp_dither_algorithm_name(i)))
- {
- stp_set_verified(v, answer);
- return answer;
- }
-
- stp_eprintf(v, _("%s is not a valid dither algorithm\n"),
- stp_get_dither_algorithm(v));
- stp_set_verified(v, 0);
- return 0;
-}
-
-const stp_vars_t
-stp_default_settings()
-{
- return (stp_vars_t) &default_vars;
-}
-
-const stp_vars_t
-stp_maximum_settings()
-{
- return (stp_vars_t) &max_vars;
-}
-
-const stp_vars_t
-stp_minimum_settings()
-{
- return (stp_vars_t) &min_vars;
-}
-
-/*
- * We cannot avoid use of the (non-ANSI) vsnprintf here; ANSI does
- * not provide a safe, length-limited sprintf function.
- */
-
-#define STP_VASPRINTF(result, bytes, format) \
-{ \
- int current_allocation = 64; \
- result = stp_malloc(current_allocation); \
- while (1) \
- { \
- va_list args; \
- va_start(args, format); \
- bytes = vsnprintf(result, current_allocation, format, args); \
- va_end(args); \
- if (bytes >= 0 && bytes < current_allocation) \
- break; \
- else \
- { \
- free (result); \
- if (bytes < 0) \
- current_allocation *= 2; \
- else \
- current_allocation = bytes + 1; \
- result = stp_malloc(current_allocation); \
- } \
- } \
-}
-
-void
-stp_zprintf(const stp_vars_t v, const char *format, ...)
-{
- char *result;
- int bytes;
- STP_VASPRINTF(result, bytes, format);
- (stp_get_outfunc(v))((void *)(stp_get_outdata(v)), result, bytes);
- free(result);
-}
-
-void
-stp_zfwrite(const char *buf, size_t bytes, size_t nitems, const stp_vars_t v)
-{
- (stp_get_outfunc(v))((void *)(stp_get_outdata(v)), buf, bytes * nitems);
-}
-
-void
-stp_putc(int ch, const stp_vars_t v)
-{
- char a = (char) ch;
- (stp_get_outfunc(v))((void *)(stp_get_outdata(v)), &a, 1);
-}
-
-void
-stp_puts(const char *s, const stp_vars_t v)
-{
- (stp_get_outfunc(v))((void *)(stp_get_outdata(v)), s, strlen(s));
+ va_end(args);
}
void
-stp_eprintf(const stp_vars_t v, const char *format, ...)
+stp_eprintf(const stp_vars_t *v, const char *format, ...)
{
int bytes;
if (stp_get_errfunc(v))
{
char *result;
- STP_VASPRINTF(result, bytes, format);
+ STPI_VASPRINTF(result, bytes, format);
(stp_get_errfunc(v))((void *)(stp_get_errdata(v)), result, bytes);
- free(result);
+ stp_free(result);
+ }
+ else
+ {
+ va_list args;
+ va_start(args, format);
+ vfprintf(stderr, format, args);
+ va_end(args);
}
}
@@ -1589,10 +298,10 @@ stp_erprintf(const char *format, ...)
va_end(args);
}
-unsigned long stp_debug_level = 0;
+static unsigned long stpi_debug_level = 0;
static void
-stp_init_debug(void)
+stpi_init_debug(void)
{
static int debug_initialized = 0;
if (!debug_initialized)
@@ -1601,23 +310,30 @@ stp_init_debug(void)
debug_initialized = 1;
if (dval)
{
- stp_debug_level = strtoul(dval, 0, 0);
- stp_erprintf("Gimp-Print %s %s\n", VERSION, RELEASE_DATE);
+ stpi_debug_level = strtoul(dval, 0, 0);
+ stp_erprintf("Gutenprint %s %s\n", VERSION, RELEASE_DATE);
}
}
}
+unsigned long
+stp_get_debug_level(void)
+{
+ stpi_init_debug();
+ return stpi_debug_level;
+}
+
void
-stp_dprintf(unsigned long level, const stp_vars_t v, const char *format, ...)
+stp_dprintf(unsigned long level, const stp_vars_t *v, const char *format, ...)
{
int bytes;
- stp_init_debug();
- if ((level & stp_debug_level) && stp_get_errfunc(v))
+ stpi_init_debug();
+ if ((level & stpi_debug_level) && stp_get_errfunc(v))
{
char *result;
- STP_VASPRINTF(result, bytes, format);
+ STPI_VASPRINTF(result, bytes, format);
(stp_get_errfunc(v))((void *)(stp_get_errdata(v)), result, bytes);
- free(result);
+ stp_free(result);
}
}
@@ -1626,21 +342,70 @@ stp_deprintf(unsigned long level, const char *format, ...)
{
va_list args;
va_start(args, format);
- stp_init_debug();
- if (level & stp_debug_level)
+ stpi_init_debug();
+ if (level & stpi_debug_level)
vfprintf(stderr, format, args);
va_end(args);
}
+static void
+fill_buffer_writefunc(void *priv, const char *buffer, size_t bytes)
+{
+ debug_msgbuf_t *msgbuf = (debug_msgbuf_t *) priv;
+ if (msgbuf->bytes == 0)
+ msgbuf->data = stp_malloc(bytes + 1);
+ else
+ msgbuf->data = stp_realloc(msgbuf->data, msgbuf->bytes + bytes + 1);
+ memcpy(msgbuf->data + msgbuf->bytes, buffer, bytes);
+ msgbuf->bytes += bytes;
+ msgbuf->data[msgbuf->bytes] = '\0';
+}
+
+void
+stp_init_debug_messages(stp_vars_t *v)
+{
+ int verified_flag = stp_get_verified(v);
+ debug_msgbuf_t *msgbuf = stp_malloc(sizeof(debug_msgbuf_t));
+ msgbuf->ofunc = stp_get_errfunc(v);
+ msgbuf->odata = stp_get_errdata(v);
+ msgbuf->data = NULL;
+ msgbuf->bytes = 0;
+ stp_set_errfunc((stp_vars_t *) v, fill_buffer_writefunc);
+ stp_set_errdata((stp_vars_t *) v, msgbuf);
+ stp_set_verified((stp_vars_t *) v, verified_flag);
+}
+
+void
+stp_flush_debug_messages(stp_vars_t *v)
+{
+ int verified_flag = stp_get_verified(v);
+ debug_msgbuf_t *msgbuf = (debug_msgbuf_t *)stp_get_errdata(v);
+ stp_set_errfunc((stp_vars_t *) v, msgbuf->ofunc);
+ stp_set_errdata((stp_vars_t *) v, msgbuf->odata);
+ stp_set_verified((stp_vars_t *) v, verified_flag);
+ if (msgbuf->bytes > 0)
+ {
+ stp_eprintf(v, "%s", msgbuf->data);
+ stp_free(msgbuf->data);
+ }
+ stp_free(msgbuf);
+}
+
+/* pointers to the allocation functions to use, which may be set by
+ client applications */
+void *(*stp_malloc_func)(size_t size) = malloc;
+void *(*stpi_realloc_func)(void *ptr, size_t size) = realloc;
+void (*stpi_free_func)(void *ptr) = free;
+
void *
stp_malloc (size_t size)
{
register void *memptr = NULL;
- if ((memptr = malloc (size)) == NULL)
+ if ((memptr = stp_malloc_func (size)) == NULL)
{
fputs("Virtual memory exhausted.\n", stderr);
- exit (EXIT_FAILURE);
+ stp_abort();
}
return (memptr);
}
@@ -1658,10 +423,10 @@ stp_realloc (void *ptr, size_t size)
{
register void *memptr = NULL;
- if (size > 0 && ((memptr = realloc (ptr, size)) == NULL))
+ if (size > 0 && ((memptr = stpi_realloc_func (ptr, size)) == NULL))
{
fputs("Virtual memory exhausted.\n", stderr);
- exit (EXIT_FAILURE);
+ stp_abort();
}
return (memptr);
}
@@ -1669,14 +434,14 @@ stp_realloc (void *ptr, size_t size)
void
stp_free(void *ptr)
{
- free(ptr);
+ stpi_free_func(ptr);
}
int
stp_init(void)
{
- static int stp_is_initialised = 0;
- if (!stp_is_initialised)
+ static int stpi_is_initialised = 0;
+ if (!stpi_is_initialised)
{
/* Things that are only initialised once */
/* Set up gettext */
@@ -1684,37 +449,182 @@ stp_init(void)
setlocale (LC_ALL, "");
bindtextdomain (PACKAGE, PACKAGE_LOCALE_DIR);
#endif
- stp_init_debug();
+ stpi_init_debug();
+ stp_xml_preinit();
+ stpi_init_printer();
+ stpi_init_paper();
+ stpi_init_dither();
+ /* Load modules */
+ if (stp_module_load())
+ return 1;
+ /* Load XML data */
+ if (stp_xml_init_defaults())
+ return 1;
+ /* Initialise modules */
+ if (stp_module_init())
+ return 1;
+ /* Set up defaults for core parameters */
+ stp_initialize_printer_defaults();
+ }
+
+ stpi_is_initialised = 1;
+ return 0;
+}
+
+size_t
+stp_strlen(const char *s)
+{
+ return strlen(s);
+}
+
+char *
+stp_strndup(const char *s, int n)
+{
+ char *ret;
+ if (!s || n < 0)
+ {
+ ret = stp_malloc(1);
+ ret[0] = 0;
+ return ret;
+ }
+ else
+ {
+ ret = stp_malloc(n + 1);
+ memcpy(ret, s, n);
+ ret[n] = 0;
+ return ret;
}
- stp_is_initialised = 1;
- return (0);
}
-#ifdef QUANTIFY
-unsigned quantify_counts[NUM_QUANTIFY_BUCKETS] = {0};
-struct timeval quantify_buckets[NUM_QUANTIFY_BUCKETS] = {{0,0}};
-int quantify_high_index = 0;
-int quantify_first_time = 1;
-struct timeval quantify_cur_time;
-struct timeval quantify_prev_time;
+char *
+stp_strdup(const char *s)
+{
+ char *ret;
+ if (!s)
+ {
+ ret = stp_malloc(1);
+ ret[0] = '\0';
+ return ret;
+ }
+ else
+ return stp_strndup(s, stp_strlen(s));
+}
-void print_timers(const stp_vars_t v)
+const char *
+stp_set_output_codeset(const char *codeset)
{
- int i;
+#ifdef ENABLE_NLS
+ return (const char *)(bind_textdomain_codeset(PACKAGE, codeset));
+#else
+ return "US-ASCII";
+#endif
+}
- stp_eprintf(v, "%s", "Quantify timers:\n");
- for (i = 0; i <= quantify_high_index; i++)
+stp_curve_t *
+stp_read_and_compose_curves(const char *s1, const char *s2,
+ stp_curve_compose_t comp,
+ size_t piecewise_point_count)
+{
+ stp_curve_t *ret = NULL;
+ stp_curve_t *t1 = NULL;
+ stp_curve_t *t2 = NULL;
+ if (s1)
+ t1 = stp_curve_create_from_string(s1);
+ if (s2)
+ t2 = stp_curve_create_from_string(s2);
+ if (t1 && t2)
{
- if (quantify_counts[i] > 0)
+ if (stp_curve_is_piecewise(t1) && stp_curve_is_piecewise(t2))
{
- stp_eprintf(v,
- "Bucket %d:\t%ld.%ld s\thit %u times\n", i,
- quantify_buckets[i].tv_sec, quantify_buckets[i].tv_usec,
- quantify_counts[i]);
- quantify_buckets[i].tv_sec = 0;
- quantify_buckets[i].tv_usec = 0;
- quantify_counts[i] = 0;
+ stp_curve_resample(t1, piecewise_point_count);
+ stp_curve_resample(t2, piecewise_point_count);
}
+ stp_curve_compose(&ret, t1, t2, comp, -1);
}
+ if (ret)
+ {
+ stp_curve_destroy(t1);
+ stp_curve_destroy(t2);
+ return ret;
+ }
+ else if (t1)
+ {
+ stp_curve_destroy(t2);
+ return t1;
+ }
+ else
+ return t2;
+}
+
+void
+stp_merge_printvars(stp_vars_t *user, const stp_vars_t *print)
+{
+ int i;
+ stp_parameter_list_t params = stp_get_parameter_list(print);
+ int count = stp_parameter_list_count(params);
+ for (i = 0; i < count; i++)
+ {
+ const stp_parameter_t *p = stp_parameter_list_param(params, i);
+ if (p->p_type == STP_PARAMETER_TYPE_DOUBLE &&
+ p->p_class == STP_PARAMETER_CLASS_OUTPUT &&
+ stp_check_float_parameter(print, p->name, STP_PARAMETER_DEFAULTED))
+ {
+ stp_parameter_t desc;
+ double prnval = stp_get_float_parameter(print, p->name);
+ double usrval;
+ stp_describe_parameter(print, p->name, &desc);
+ if (stp_check_float_parameter(user, p->name, STP_PARAMETER_ACTIVE))
+ usrval = stp_get_float_parameter(user, p->name);
+ else
+ usrval = desc.deflt.dbl;
+ if (strcmp(p->name, "Gamma") == 0)
+ usrval /= prnval;
+ else
+ usrval *= prnval;
+ if (usrval < desc.bounds.dbl.lower)
+ usrval = desc.bounds.dbl.lower;
+ else if (usrval > desc.bounds.dbl.upper)
+ usrval = desc.bounds.dbl.upper;
+ if (!stp_check_float_parameter(user, p->name, STP_PARAMETER_ACTIVE))
+ {
+ stp_clear_float_parameter(user, p->name);
+ stp_set_default_float_parameter(user, p->name, usrval);
+ }
+ else
+ stp_set_float_parameter(user, p->name, usrval);
+ stp_parameter_description_destroy(&desc);
+ }
+ }
+ stp_parameter_list_destroy(params);
+}
+
+stp_parameter_list_t
+stp_get_parameter_list(const stp_vars_t *v)
+{
+ stp_parameter_list_t ret = stp_parameter_list_create();
+ stp_parameter_list_t tmp_list;
+
+ tmp_list = stp_printer_list_parameters(v);
+ stp_parameter_list_append(ret, tmp_list);
+ stp_parameter_list_destroy(tmp_list);
+
+ tmp_list = stp_color_list_parameters(v);
+ stp_parameter_list_append(ret, tmp_list);
+ stp_parameter_list_destroy(tmp_list);
+
+ tmp_list = stp_dither_list_parameters(v);
+ stp_parameter_list_append(ret, tmp_list);
+ stp_parameter_list_destroy(tmp_list);
+
+ tmp_list = stp_list_generic_parameters(v);
+ stp_parameter_list_append(ret, tmp_list);
+ stp_parameter_list_destroy(tmp_list);
+
+ return ret;
+}
+
+void
+stp_abort(void)
+{
+ abort();
}
-#endif
diff --git a/src/main/print-vars.c b/src/main/print-vars.c
new file mode 100644
index 0000000..8b480de
--- /dev/null
+++ b/src/main/print-vars.c
@@ -0,0 +1,1481 @@
+/*
+ * "$Id: print-vars.c,v 1.73 2004/09/17 18:38:26 rleigh Exp $"
+ *
+ * Print plug-in driver utility functions for the GIMP.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * This file must include only standard C header files. The core code must
+ * compile on generic platforms that don't support glib, gimp, gtk, etc.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <math.h>
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#include <string.h>
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include "generic-options.h"
+
+typedef struct
+{
+ char *name;
+ stp_parameter_type_t typ;
+ stp_parameter_activity_t active;
+ union
+ {
+ int ival;
+ int bval;
+ double dval;
+ stp_curve_t *cval;
+ stp_array_t *aval;
+ stp_raw_t rval;
+ } value;
+} value_t;
+
+struct stp_compdata
+{
+ char *name;
+ stp_copy_data_func_t copyfunc;
+ stp_free_data_func_t freefunc;
+ void *data;
+};
+
+struct stp_vars /* Plug-in variables */
+{
+ char *driver; /* Name of printer "driver" */
+ char *color_conversion; /* Color module in use */
+ int left; /* Offset from left-upper corner, points */
+ int top; /* ... */
+ int width; /* Width of the image, points */
+ int height; /* ... */
+ int page_width; /* Width of page in points */
+ int page_height; /* Height of page in points */
+ stp_list_t *params[STP_PARAMETER_TYPE_INVALID];
+ stp_list_t *internal_data;
+ void (*outfunc)(void *data, const char *buffer, size_t bytes);
+ void *outdata;
+ void (*errfunc)(void *data, const char *buffer, size_t bytes);
+ void *errdata;
+ int verified; /* Ensure that params are OK! */
+};
+
+static int standard_vars_initialized = 0;
+
+static stp_vars_t default_vars;
+
+static void
+null_vars(void)
+{
+ stp_erprintf("Null stp_vars_t! Please report this bug.\n");
+ stp_abort();
+}
+
+static inline void
+check_vars(const stp_vars_t *v)
+{
+ if (v == NULL)
+ null_vars();
+}
+
+static const char *
+value_namefunc(const void *item)
+{
+ const value_t *v = (const value_t *) (item);
+ return v->name;
+}
+
+static void
+value_freefunc(void *item)
+{
+ value_t *v = (value_t *) (item);
+ switch (v->typ)
+ {
+ case STP_PARAMETER_TYPE_STRING_LIST:
+ case STP_PARAMETER_TYPE_FILE:
+ case STP_PARAMETER_TYPE_RAW:
+ stp_free((void *) v->value.rval.data);
+ break;
+ case STP_PARAMETER_TYPE_CURVE:
+ if (v->value.cval)
+ stp_curve_destroy(v->value.cval);
+ break;
+ case STP_PARAMETER_TYPE_ARRAY:
+ stp_array_destroy(v->value.aval);
+ break;
+ default:
+ break;
+ }
+ stp_free(v->name);
+ stp_free(v);
+}
+
+static stp_list_t *
+create_vars_list(void)
+{
+ stp_list_t *ret = stp_list_create();
+ stp_list_set_freefunc(ret, value_freefunc);
+ stp_list_set_namefunc(ret, value_namefunc);
+ return ret;
+}
+
+static void
+copy_to_raw(stp_raw_t *raw, const void *data, size_t bytes)
+{
+ char *ndata = stp_malloc(bytes + 1);
+ memcpy(ndata, data, bytes);
+ ndata[bytes] = '\0';
+ raw->data = (void *) ndata;
+ raw->bytes = bytes;
+}
+
+static value_t *
+value_copy(const void *item)
+{
+ value_t *ret = stp_malloc(sizeof(value_t));
+ const value_t *v = (const value_t *) (item);
+ ret->name = stp_strdup(v->name);
+ ret->typ = v->typ;
+ ret->active = v->active;
+ switch (v->typ)
+ {
+ case STP_PARAMETER_TYPE_CURVE:
+ ret->value.cval = stp_curve_create_copy(v->value.cval);
+ break;
+ case STP_PARAMETER_TYPE_ARRAY:
+ ret->value.aval = stp_array_create_copy(v->value.aval);
+ break;
+ case STP_PARAMETER_TYPE_STRING_LIST:
+ case STP_PARAMETER_TYPE_FILE:
+ case STP_PARAMETER_TYPE_RAW:
+ copy_to_raw(&(ret->value.rval), v->value.rval.data, v->value.rval.bytes);
+ break;
+ case STP_PARAMETER_TYPE_INT:
+ case STP_PARAMETER_TYPE_DIMENSION:
+ case STP_PARAMETER_TYPE_BOOLEAN:
+ ret->value.ival = v->value.ival;
+ break;
+ case STP_PARAMETER_TYPE_DOUBLE:
+ ret->value.dval = v->value.dval;
+ break;
+ default:
+ break;
+ }
+ return ret;
+}
+
+static stp_list_t *
+copy_value_list(const stp_list_t *src)
+{
+ stp_list_t *ret = create_vars_list();
+ const stp_list_item_t *item = stp_list_get_start((const stp_list_t *)src);
+ while (item)
+ {
+ stp_list_item_create(ret, NULL, value_copy(stp_list_item_get_data(item)));
+ item = stp_list_item_next(item);
+ }
+ return ret;
+}
+
+static const char *
+compdata_namefunc(const void *item)
+{
+ const compdata_t *cd = (const compdata_t *) (item);
+ return cd->name;
+}
+
+static void
+compdata_freefunc(void *item)
+{
+ compdata_t *cd = (compdata_t *) (item);
+ if (cd->freefunc)
+ (cd->freefunc)(cd->data);
+ stp_free(cd->name);
+ stp_free(cd);
+}
+
+static void *
+compdata_copyfunc(const void *item)
+{
+ const compdata_t *cd = (const compdata_t *) (item);
+ if (cd->copyfunc)
+ return (cd->copyfunc)(cd->data);
+ else
+ return cd->data;
+}
+
+void
+stp_allocate_component_data(stp_vars_t *v,
+ const char *name,
+ stp_copy_data_func_t copyfunc,
+ stp_free_data_func_t freefunc,
+ void *data)
+{
+ compdata_t *cd;
+ stp_list_item_t *item;
+ check_vars(v);
+ cd = stp_malloc(sizeof(compdata_t));
+ item = stp_list_get_item_by_name(v->internal_data, name);
+ if (item)
+ stp_list_item_destroy(v->internal_data, item);
+ cd->name = stp_strdup(name);
+ cd->copyfunc = copyfunc;
+ cd->freefunc = freefunc;
+ cd->data = data;
+ stp_list_item_create(v->internal_data, NULL, cd);
+}
+
+void
+stp_destroy_component_data(stp_vars_t *v, const char *name)
+{
+ stp_list_item_t *item;
+ check_vars(v);
+ item = stp_list_get_item_by_name(v->internal_data, name);
+ if (item)
+ stp_list_item_destroy(v->internal_data, item);
+}
+
+void *
+stp_get_component_data(const stp_vars_t *v, const char *name)
+{
+ stp_list_item_t *item;
+ check_vars(v);
+ item = stp_list_get_item_by_name(v->internal_data, name);
+ if (item)
+ return ((compdata_t *) stp_list_item_get_data(item))->data;
+ else
+ return NULL;
+}
+
+static stp_list_t *
+create_compdata_list(void)
+{
+ stp_list_t *ret = stp_list_create();
+ stp_list_set_freefunc(ret, compdata_freefunc);
+ stp_list_set_namefunc(ret, compdata_namefunc);
+ return ret;
+}
+
+static stp_list_t *
+copy_compdata_list(const stp_list_t *src)
+{
+ stp_list_t *ret = create_compdata_list();
+ const stp_list_item_t *item = stp_list_get_start(src);
+ while (item)
+ {
+ stp_list_item_create(ret, NULL, compdata_copyfunc(item));
+ item = stp_list_item_next(item);
+ }
+ return ret;
+}
+
+static void
+initialize_standard_vars(void)
+{
+ if (!standard_vars_initialized)
+ {
+ int i;
+ for (i = 0; i < STP_PARAMETER_TYPE_INVALID; i++)
+ default_vars.params[i] = create_vars_list();
+ default_vars.driver = stp_strdup("ps2");
+ default_vars.color_conversion = stp_strdup("traditional");
+ default_vars.internal_data = create_compdata_list();
+ standard_vars_initialized = 1;
+ }
+}
+
+const stp_vars_t *
+stp_default_settings(void)
+{
+ initialize_standard_vars();
+ return (stp_vars_t *) &default_vars;
+}
+
+stp_vars_t *
+stp_vars_create(void)
+{
+ int i;
+ stp_vars_t *retval = stp_zalloc(sizeof(stp_vars_t));
+ initialize_standard_vars();
+ for (i = 0; i < STP_PARAMETER_TYPE_INVALID; i++)
+ retval->params[i] = create_vars_list();
+ retval->internal_data = create_compdata_list();
+ stp_vars_copy(retval, (stp_vars_t *)&default_vars);
+ return (retval);
+}
+
+void
+stp_vars_destroy(stp_vars_t *v)
+{
+ int i;
+ check_vars(v);
+ for (i = 0; i < STP_PARAMETER_TYPE_INVALID; i++)
+ stp_list_destroy(v->params[i]);
+ stp_list_destroy(v->internal_data);
+ STP_SAFE_FREE(v->driver);
+ STP_SAFE_FREE(v->color_conversion);
+ stp_free(v);
+}
+
+#define DEF_STRING_FUNCS(s, pre) \
+void \
+pre##_set_##s(stp_vars_t *v, const char *val) \
+{ \
+ check_vars(v); \
+ if (val) \
+ stp_dprintf(STP_DBG_VARS, v, "set %s to %s\n", #s, val); \
+ else \
+ stp_dprintf(STP_DBG_VARS, v, "clear %s\n", #s); \
+ if (v->s == val) \
+ return; \
+ STP_SAFE_FREE(v->s); \
+ v->s = stp_strdup(val); \
+ v->verified = 0; \
+} \
+ \
+void \
+pre##_set_##s##_n(stp_vars_t *v, const char *val, int n) \
+{ \
+ check_vars(v); \
+ if (v->s == val) \
+ return; \
+ STP_SAFE_FREE(v->s); \
+ v->s = stp_strndup(val, n); \
+ v->verified = 0; \
+} \
+ \
+const char * \
+pre##_get_##s(const stp_vars_t *v) \
+{ \
+ check_vars(v); \
+ return v->s; \
+}
+
+#define DEF_FUNCS(s, t, pre) \
+void \
+pre##_set_##s(stp_vars_t *v, t val) \
+{ \
+ check_vars(v); \
+ v->verified = 0; \
+ v->s = val; \
+} \
+ \
+t \
+pre##_get_##s(const stp_vars_t *v) \
+{ \
+ check_vars(v); \
+ return v->s; \
+}
+
+DEF_STRING_FUNCS(driver, stp)
+DEF_STRING_FUNCS(color_conversion, stp)
+DEF_FUNCS(left, int, stp)
+DEF_FUNCS(top, int, stp)
+DEF_FUNCS(width, int, stp)
+DEF_FUNCS(height, int, stp)
+DEF_FUNCS(page_width, int, stp)
+DEF_FUNCS(page_height, int, stp)
+DEF_FUNCS(outdata, void *, stp)
+DEF_FUNCS(errdata, void *, stp)
+DEF_FUNCS(outfunc, stp_outfunc_t, stp)
+DEF_FUNCS(errfunc, stp_outfunc_t, stp)
+
+void
+stp_set_verified(stp_vars_t *v, int val)
+{
+ check_vars(v);
+ v->verified = val;
+}
+
+int
+stp_get_verified(const stp_vars_t *v)
+{
+ check_vars(v);
+ return v->verified;
+}
+
+static void
+set_default_raw_parameter(stp_list_t *list, const char *parameter,
+ const char *value, size_t bytes, int typ)
+{
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (value && !item)
+ {
+ value_t *val = stp_malloc(sizeof(value_t));
+ val->name = stp_strdup(parameter);
+ val->typ = typ;
+ val->active = STP_PARAMETER_DEFAULTED;
+ stp_list_item_create(list, NULL, val);
+ copy_to_raw(&(val->value.rval), value, bytes);
+ }
+}
+
+static void
+set_raw_parameter(stp_list_t *list, const char *parameter, const char *value,
+ size_t bytes, int typ)
+{
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (value)
+ {
+ value_t *val;
+ if (item)
+ {
+ val = (value_t *) stp_list_item_get_data(item);
+ if (val->active == STP_PARAMETER_DEFAULTED)
+ val->active = STP_PARAMETER_ACTIVE;
+ stp_free((void *) val->value.rval.data);
+ }
+ else
+ {
+ val = stp_malloc(sizeof(value_t));
+ val->name = stp_strdup(parameter);
+ val->typ = typ;
+ val->active = STP_PARAMETER_ACTIVE;
+ stp_list_item_create(list, NULL, val);
+ }
+ copy_to_raw(&(val->value.rval), value, bytes);
+ }
+ else if (item)
+ stp_list_item_destroy(list, item);
+}
+
+void
+stp_set_string_parameter_n(stp_vars_t *v, const char *parameter,
+ const char *value, size_t bytes)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_STRING_LIST];
+ if (value)
+ stp_dprintf(STP_DBG_VARS, v, "stp_set_string_parameter(%s, %s)\n",
+ parameter, value);
+ else
+ stp_dprintf(STP_DBG_VARS, v, "stp_set_string_parameter(%s)\n",
+ parameter);
+ set_raw_parameter(list, parameter, value, bytes,
+ STP_PARAMETER_TYPE_STRING_LIST);
+ stp_set_verified(v, 0);
+}
+
+void
+stp_set_string_parameter(stp_vars_t *v, const char *parameter,
+ const char *value)
+{
+ int byte_count = 0;
+ if (value)
+ {
+ byte_count = strlen(value);
+ stp_dprintf(STP_DBG_VARS, v, "stp_set_string_parameter(%s, %s)\n",
+ parameter, value);
+ }
+ else
+ stp_dprintf(STP_DBG_VARS, v, "stp_set_string_parameter(%s)\n",
+ parameter);
+ stp_set_string_parameter_n(v, parameter, value, byte_count);
+ stp_set_verified(v, 0);
+}
+
+void
+stp_set_default_string_parameter_n(stp_vars_t *v, const char *parameter,
+ const char *value, size_t bytes)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_STRING_LIST];
+ set_default_raw_parameter(list, parameter, value, bytes,
+ STP_PARAMETER_TYPE_STRING_LIST);
+ stp_set_verified(v, 0);
+}
+
+void
+stp_set_default_string_parameter(stp_vars_t *v, const char *parameter,
+ const char *value)
+{
+ int byte_count = 0;
+ if (value)
+ {
+ byte_count = strlen(value);
+ stp_dprintf(STP_DBG_VARS, v,
+ "stp_set_default_string_parameter(%s, %s)\n",
+ parameter, value);
+ }
+ else
+ stp_dprintf(STP_DBG_VARS, v, "stp_set_default_string_parameter(%s)\n",
+ parameter);
+ stp_set_default_string_parameter_n(v, parameter, value, byte_count);
+ stp_set_verified(v, 0);
+}
+
+void
+stp_clear_string_parameter(stp_vars_t *v, const char *parameter)
+{
+ stp_set_string_parameter(v, parameter, NULL);
+}
+
+const char *
+stp_get_string_parameter(const stp_vars_t *v, const char *parameter)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_STRING_LIST];
+ value_t *val;
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ {
+ val = (value_t *) stp_list_item_get_data(item);
+ return val->value.rval.data;
+ }
+ else
+ return NULL;
+}
+
+void
+stp_set_raw_parameter(stp_vars_t *v, const char *parameter,
+ const void *value, size_t bytes)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_RAW];
+ set_raw_parameter(list, parameter, value, bytes, STP_PARAMETER_TYPE_RAW);
+ stp_set_verified(v, 0);
+}
+
+void
+stp_set_default_raw_parameter(stp_vars_t *v, const char *parameter,
+ const void *value, size_t bytes)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_RAW];
+ set_default_raw_parameter(list, parameter, value, bytes,
+ STP_PARAMETER_TYPE_RAW);
+ stp_set_verified(v, 0);
+}
+
+void
+stp_clear_raw_parameter(stp_vars_t *v, const char *parameter)
+{
+ stp_set_raw_parameter(v, parameter, NULL, 0);
+}
+
+const stp_raw_t *
+stp_get_raw_parameter(const stp_vars_t *v, const char *parameter)
+{
+ const stp_list_t *list = v->params[STP_PARAMETER_TYPE_RAW];
+ const value_t *val;
+ const stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ {
+ val = (const value_t *) stp_list_item_get_data(item);
+ return &(val->value.rval);
+ }
+ else
+ return NULL;
+}
+
+void
+stp_set_file_parameter(stp_vars_t *v, const char *parameter,
+ const char *value)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_FILE];
+ size_t byte_count = 0;
+ if (value)
+ byte_count = strlen(value);
+ set_raw_parameter(list, parameter, value, byte_count,
+ STP_PARAMETER_TYPE_FILE);
+ stp_set_verified(v, 0);
+}
+
+void
+stp_set_file_parameter_n(stp_vars_t *v, const char *parameter,
+ const char *value, size_t byte_count)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_FILE];
+ set_raw_parameter(list, parameter, value, byte_count,
+ STP_PARAMETER_TYPE_FILE);
+ stp_set_verified(v, 0);
+}
+
+void
+stp_set_default_file_parameter(stp_vars_t *v, const char *parameter,
+ const char *value)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_FILE];
+ size_t byte_count = 0;
+ if (value)
+ byte_count = strlen(value);
+ set_default_raw_parameter(list, parameter, value, byte_count,
+ STP_PARAMETER_TYPE_FILE);
+ stp_set_verified(v, 0);
+}
+
+void
+stp_set_default_file_parameter_n(stp_vars_t *v, const char *parameter,
+ const char *value, size_t byte_count)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_FILE];
+ set_default_raw_parameter(list, parameter, value, byte_count,
+ STP_PARAMETER_TYPE_FILE);
+ stp_set_verified(v, 0);
+}
+
+void
+stp_clear_file_parameter(stp_vars_t *v, const char *parameter)
+{
+ stp_set_file_parameter(v, parameter, NULL);
+}
+
+const char *
+stp_get_file_parameter(const stp_vars_t *v, const char *parameter)
+{
+ const stp_list_t *list = v->params[STP_PARAMETER_TYPE_FILE];
+ const value_t *val;
+ const stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ {
+ val = (const value_t *) stp_list_item_get_data(item);
+ return val->value.rval.data;
+ }
+ else
+ return NULL;
+}
+
+void
+stp_set_curve_parameter(stp_vars_t *v, const char *parameter,
+ const stp_curve_t *curve)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_CURVE];
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (curve)
+ {
+ value_t *val;
+ if (item)
+ {
+ val = (value_t *) stp_list_item_get_data(item);
+ if (val->active == STP_PARAMETER_DEFAULTED)
+ val->active = STP_PARAMETER_ACTIVE;
+ if (val->value.cval)
+ stp_curve_destroy(val->value.cval);
+ }
+ else
+ {
+ val = stp_malloc(sizeof(value_t));
+ val->name = stp_strdup(parameter);
+ val->typ = STP_PARAMETER_TYPE_CURVE;
+ val->active = STP_PARAMETER_ACTIVE;
+ stp_list_item_create(list, NULL, val);
+ }
+ val->value.cval = stp_curve_create_copy(curve);
+ }
+ else if (item)
+ stp_list_item_destroy(list, item);
+ stp_set_verified(v, 0);
+}
+
+void
+stp_set_default_curve_parameter(stp_vars_t *v, const char *parameter,
+ const stp_curve_t *curve)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_CURVE];
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (!item)
+ {
+ if (curve)
+ {
+ value_t *val;
+ val = stp_malloc(sizeof(value_t));
+ val->name = stp_strdup(parameter);
+ val->typ = STP_PARAMETER_TYPE_CURVE;
+ val->active = STP_PARAMETER_DEFAULTED;
+ stp_list_item_create(list, NULL, val);
+ val->value.cval = stp_curve_create_copy(curve);
+ }
+ }
+ stp_set_verified(v, 0);
+}
+
+void
+stp_clear_curve_parameter(stp_vars_t *v, const char *parameter)
+{
+ stp_set_curve_parameter(v, parameter, NULL);
+}
+
+const stp_curve_t *
+stp_get_curve_parameter(const stp_vars_t *v, const char *parameter)
+{
+ const stp_list_t *list = v->params[STP_PARAMETER_TYPE_CURVE];
+ const value_t *val;
+ const stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ {
+ val = (value_t *) stp_list_item_get_data(item);
+ return val->value.cval;
+ }
+ else
+ return NULL;
+}
+
+void
+stp_set_array_parameter(stp_vars_t *v, const char *parameter,
+ const stp_array_t *array)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_ARRAY];
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (array)
+ {
+ value_t *val;
+ if (item)
+ {
+ val = (value_t *) stp_list_item_get_data(item);
+ if (val->active == STP_PARAMETER_DEFAULTED)
+ val->active = STP_PARAMETER_ACTIVE;
+ stp_array_destroy(val->value.aval);
+ }
+ else
+ {
+ val = stp_malloc(sizeof(value_t));
+ val->name = stp_strdup(parameter);
+ val->typ = STP_PARAMETER_TYPE_ARRAY;
+ val->active = STP_PARAMETER_ACTIVE;
+ stp_list_item_create(list, NULL, val);
+ }
+ val->value.aval = stp_array_create_copy(array);
+ }
+ else if (item)
+ stp_list_item_destroy(list, item);
+ stp_set_verified(v, 0);
+}
+
+void
+stp_set_default_array_parameter(stp_vars_t *v, const char *parameter,
+ const stp_array_t *array)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_ARRAY];
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (!item)
+ {
+ if (array)
+ {
+ value_t *val;
+ val = stp_malloc(sizeof(value_t));
+ val->name = stp_strdup(parameter);
+ val->typ = STP_PARAMETER_TYPE_ARRAY;
+ val->active = STP_PARAMETER_DEFAULTED;
+ stp_list_item_create(list, NULL, val);
+ val->value.aval = stp_array_create_copy(array);
+ }
+ }
+ stp_set_verified(v, 0);
+}
+
+void
+stp_clear_array_parameter(stp_vars_t *v, const char *parameter)
+{
+ stp_set_array_parameter(v, parameter, NULL);
+}
+
+const stp_array_t *
+stp_get_array_parameter(const stp_vars_t *v, const char *parameter)
+{
+ const stp_list_t *list = v->params[STP_PARAMETER_TYPE_ARRAY];
+ const value_t *val;
+ const stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ {
+ val = (const value_t *) stp_list_item_get_data(item);
+ return val->value.aval;
+ }
+ else
+ return NULL;
+}
+
+void
+stp_set_int_parameter(stp_vars_t *v, const char *parameter, int ival)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_INT];
+ value_t *val;
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ {
+ val = (value_t *) stp_list_item_get_data(item);
+ if (val->active == STP_PARAMETER_DEFAULTED)
+ val->active = STP_PARAMETER_ACTIVE;
+ }
+ else
+ {
+ val = stp_malloc(sizeof(value_t));
+ val->name = stp_strdup(parameter);
+ val->typ = STP_PARAMETER_TYPE_INT;
+ val->active = STP_PARAMETER_ACTIVE;
+ stp_list_item_create(list, NULL, val);
+ }
+ val->value.ival = ival;
+ stp_set_verified(v, 0);
+}
+
+void
+stp_set_default_int_parameter(stp_vars_t *v, const char *parameter, int ival)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_INT];
+ value_t *val;
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (!item)
+ {
+ val = stp_malloc(sizeof(value_t));
+ val->name = stp_strdup(parameter);
+ val->typ = STP_PARAMETER_TYPE_INT;
+ val->active = STP_PARAMETER_DEFAULTED;
+ stp_list_item_create(list, NULL, val);
+ val->value.ival = ival;
+ }
+ stp_set_verified(v, 0);
+}
+
+void
+stp_clear_int_parameter(stp_vars_t *v, const char *parameter)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_INT];
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ stp_list_item_destroy(list, item);
+ stp_set_verified(v, 0);
+}
+
+int
+stp_get_int_parameter(const stp_vars_t *v, const char *parameter)
+{
+ const stp_list_t *list = v->params[STP_PARAMETER_TYPE_INT];
+ const stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ {
+ const value_t *val = (const value_t *) stp_list_item_get_data(item);
+ return val->value.ival;
+ }
+ else
+ {
+ stp_parameter_t desc;
+ stp_describe_parameter(v, parameter, &desc);
+ if (desc.p_type == STP_PARAMETER_TYPE_INT)
+ {
+ int intval = desc.deflt.integer;
+ stp_parameter_description_destroy(&desc);
+ return intval;
+ }
+ else
+ {
+ stp_parameter_description_destroy(&desc);
+ stp_erprintf
+ ("Gutenprint: Attempt to retrieve unset integer parameter %s\n",
+ parameter);
+ return 0;
+ }
+ }
+}
+
+void
+stp_set_boolean_parameter(stp_vars_t *v, const char *parameter, int ival)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_BOOLEAN];
+ value_t *val;
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ {
+ val = (value_t *) stp_list_item_get_data(item);
+ if (val->active == STP_PARAMETER_DEFAULTED)
+ val->active = STP_PARAMETER_ACTIVE;
+ }
+ else
+ {
+ val = stp_malloc(sizeof(value_t));
+ val->name = stp_strdup(parameter);
+ val->typ = STP_PARAMETER_TYPE_BOOLEAN;
+ val->active = STP_PARAMETER_ACTIVE;
+ stp_list_item_create(list, NULL, val);
+ }
+ if (ival)
+ val->value.ival = 1;
+ else
+ val->value.ival = 0;
+ stp_set_verified(v, 0);
+}
+
+void
+stp_set_default_boolean_parameter(stp_vars_t *v, const char *parameter,
+ int ival)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_BOOLEAN];
+ value_t *val;
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (!item)
+ {
+ val = stp_malloc(sizeof(value_t));
+ val->name = stp_strdup(parameter);
+ val->typ = STP_PARAMETER_TYPE_BOOLEAN;
+ val->active = STP_PARAMETER_DEFAULTED;
+ stp_list_item_create(list, NULL, val);
+ if (ival)
+ val->value.ival = 1;
+ else
+ val->value.ival = 0;
+ }
+ stp_set_verified(v, 0);
+}
+
+void
+stp_clear_boolean_parameter(stp_vars_t *v, const char *parameter)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_BOOLEAN];
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ stp_list_item_destroy(list, item);
+ stp_set_verified(v, 0);
+}
+
+int
+stp_get_boolean_parameter(const stp_vars_t *v, const char *parameter)
+{
+ const stp_list_t *list = v->params[STP_PARAMETER_TYPE_BOOLEAN];
+ const stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ {
+ const value_t *val = (const value_t *) stp_list_item_get_data(item);
+ return val->value.ival;
+ }
+ else
+ {
+ stp_parameter_t desc;
+ stp_describe_parameter(v, parameter, &desc);
+ if (desc.p_type == STP_PARAMETER_TYPE_BOOLEAN)
+ {
+ int boolean = desc.deflt.boolean;
+ stp_parameter_description_destroy(&desc);
+ return boolean;
+ }
+ else
+ {
+ stp_parameter_description_destroy(&desc);
+ stp_erprintf
+ ("Gutenprint: Attempt to retrieve unset boolean parameter %s\n",
+ parameter);
+ return 0;
+ }
+ }
+}
+
+void
+stp_set_dimension_parameter(stp_vars_t *v, const char *parameter, int ival)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_DIMENSION];
+ value_t *val;
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ {
+ val = (value_t *) stp_list_item_get_data(item);
+ if (val->active == STP_PARAMETER_DEFAULTED)
+ val->active = STP_PARAMETER_ACTIVE;
+ }
+ else
+ {
+ val = stp_malloc(sizeof(value_t));
+ val->name = stp_strdup(parameter);
+ val->typ = STP_PARAMETER_TYPE_DIMENSION;
+ val->active = STP_PARAMETER_ACTIVE;
+ stp_list_item_create(list, NULL, val);
+ }
+ val->value.ival = ival;
+ stp_set_verified(v, 0);
+}
+
+void
+stp_set_default_dimension_parameter(stp_vars_t *v, const char *parameter, int ival)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_DIMENSION];
+ value_t *val;
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (!item)
+ {
+ val = stp_malloc(sizeof(value_t));
+ val->name = stp_strdup(parameter);
+ val->typ = STP_PARAMETER_TYPE_DIMENSION;
+ val->active = STP_PARAMETER_DEFAULTED;
+ stp_list_item_create(list, NULL, val);
+ val->value.ival = ival;
+ }
+ stp_set_verified(v, 0);
+}
+
+void
+stp_clear_dimension_parameter(stp_vars_t *v, const char *parameter)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_DIMENSION];
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ stp_list_item_destroy(list, item);
+ stp_set_verified(v, 0);
+}
+
+int
+stp_get_dimension_parameter(const stp_vars_t *v, const char *parameter)
+{
+ const stp_list_t *list = v->params[STP_PARAMETER_TYPE_DIMENSION];
+ const stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ {
+ const value_t *val = (const value_t *) stp_list_item_get_data(item);
+ return val->value.ival;
+ }
+ else
+ {
+ stp_parameter_t desc;
+ stp_describe_parameter(v, parameter, &desc);
+ if (desc.p_type == STP_PARAMETER_TYPE_DIMENSION)
+ {
+ int intval = desc.deflt.integer;
+ stp_parameter_description_destroy(&desc);
+ return intval;
+ }
+ else
+ {
+ stp_parameter_description_destroy(&desc);
+ stp_erprintf
+ ("Gutenprint: Attempt to retrieve unset dimension parameter %s\n",
+ parameter);
+ return 0;
+ }
+ }
+}
+
+void
+stp_set_float_parameter(stp_vars_t *v, const char *parameter, double dval)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_DOUBLE];
+ value_t *val;
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ {
+ val = (value_t *) stp_list_item_get_data(item);
+ if (val->active == STP_PARAMETER_DEFAULTED)
+ val->active = STP_PARAMETER_ACTIVE;
+ }
+ else
+ {
+ val = stp_malloc(sizeof(value_t));
+ val->name = stp_strdup(parameter);
+ val->typ = STP_PARAMETER_TYPE_DOUBLE;
+ val->active = STP_PARAMETER_ACTIVE;
+ stp_list_item_create(list, NULL, val);
+ }
+ val->value.dval = dval;
+ stp_set_verified(v, 0);
+}
+
+void
+stp_set_default_float_parameter(stp_vars_t *v, const char *parameter,
+ double dval)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_DOUBLE];
+ value_t *val;
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (!item)
+ {
+ val = stp_malloc(sizeof(value_t));
+ val->name = stp_strdup(parameter);
+ val->typ = STP_PARAMETER_TYPE_DOUBLE;
+ val->active = STP_PARAMETER_DEFAULTED;
+ stp_list_item_create(list, NULL, val);
+ val->value.dval = dval;
+ }
+ stp_set_verified(v, 0);
+}
+
+void
+stp_clear_float_parameter(stp_vars_t *v, const char *parameter)
+{
+ stp_list_t *list = v->params[STP_PARAMETER_TYPE_DOUBLE];
+ stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ stp_list_item_destroy(list, item);
+ stp_set_verified(v, 0);
+}
+
+double
+stp_get_float_parameter(const stp_vars_t *v, const char *parameter)
+{
+ const stp_list_t *list = v->params[STP_PARAMETER_TYPE_DOUBLE];
+ const stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ {
+ const value_t *val = (value_t *) stp_list_item_get_data(item);
+ return val->value.dval;
+ }
+ else
+ {
+ stp_parameter_t desc;
+ stp_describe_parameter(v, parameter, &desc);
+ if (desc.p_type == STP_PARAMETER_TYPE_DOUBLE)
+ {
+ double dbl = desc.deflt.dbl;
+ stp_parameter_description_destroy(&desc);
+ return dbl;
+ }
+ else
+ {
+ stp_parameter_description_destroy(&desc);
+ stp_erprintf
+ ("Gutenprint: Attempt to retrieve unset float parameter %s\n",
+ parameter);
+ return 1.0;
+ }
+ }
+}
+
+void
+stp_scale_float_parameter(stp_vars_t *v, const char *parameter,
+ double scale)
+{
+ double val;
+ if (stp_check_float_parameter(v, parameter, STP_PARAMETER_DEFAULTED))
+ val = stp_get_float_parameter(v, parameter);
+ else
+ {
+ stp_parameter_t desc;
+ stp_describe_parameter(v, parameter, &desc);
+ if (desc.p_type != STP_PARAMETER_TYPE_DOUBLE)
+ {
+ stp_parameter_description_destroy(&desc);
+ return;
+ }
+ val = desc.deflt.dbl;
+ stp_parameter_description_destroy(&desc);
+ }
+ stp_set_float_parameter(v, parameter, val * scale);
+}
+
+static int
+check_parameter_generic(const stp_vars_t *v, stp_parameter_type_t p_type,
+ const char *parameter, stp_parameter_activity_t active)
+{
+ const stp_list_t *list = v->params[p_type];
+ const stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item &&
+ active <= ((const value_t *) stp_list_item_get_data(item))->active)
+ return 1;
+ else
+ return 0;
+}
+
+#define CHECK_FUNCTION(type, index) \
+int \
+stp_check_##type##_parameter(const stp_vars_t *v, const char *parameter, \
+ stp_parameter_activity_t active) \
+{ \
+ return check_parameter_generic(v, index, parameter, active); \
+}
+
+CHECK_FUNCTION(string, STP_PARAMETER_TYPE_STRING_LIST)
+CHECK_FUNCTION(file, STP_PARAMETER_TYPE_FILE)
+CHECK_FUNCTION(float, STP_PARAMETER_TYPE_DOUBLE)
+CHECK_FUNCTION(int, STP_PARAMETER_TYPE_INT)
+CHECK_FUNCTION(dimension, STP_PARAMETER_TYPE_DIMENSION)
+CHECK_FUNCTION(boolean, STP_PARAMETER_TYPE_BOOLEAN)
+CHECK_FUNCTION(curve, STP_PARAMETER_TYPE_CURVE)
+CHECK_FUNCTION(array, STP_PARAMETER_TYPE_ARRAY)
+CHECK_FUNCTION(raw, STP_PARAMETER_TYPE_RAW)
+
+static stp_parameter_activity_t
+get_parameter_active_generic(const stp_vars_t *v, stp_parameter_type_t p_type,
+ const char *parameter)
+{
+ const stp_list_t *list = v->params[p_type];
+ const stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item)
+ return ((const value_t *) stp_list_item_get_data(item))->active;
+ else
+ return 0;
+}
+
+#define GET_PARAMETER_ACTIVE_FUNCTION(type, index) \
+stp_parameter_activity_t \
+stp_get_##type##_parameter_active(const stp_vars_t *v, const char *parameter) \
+{ \
+ return get_parameter_active_generic(v, index, parameter); \
+}
+
+GET_PARAMETER_ACTIVE_FUNCTION(string, STP_PARAMETER_TYPE_STRING_LIST)
+GET_PARAMETER_ACTIVE_FUNCTION(file, STP_PARAMETER_TYPE_FILE)
+GET_PARAMETER_ACTIVE_FUNCTION(float, STP_PARAMETER_TYPE_DOUBLE)
+GET_PARAMETER_ACTIVE_FUNCTION(int, STP_PARAMETER_TYPE_INT)
+GET_PARAMETER_ACTIVE_FUNCTION(dimension, STP_PARAMETER_TYPE_DIMENSION)
+GET_PARAMETER_ACTIVE_FUNCTION(boolean, STP_PARAMETER_TYPE_BOOLEAN)
+GET_PARAMETER_ACTIVE_FUNCTION(curve, STP_PARAMETER_TYPE_CURVE)
+GET_PARAMETER_ACTIVE_FUNCTION(array, STP_PARAMETER_TYPE_ARRAY)
+GET_PARAMETER_ACTIVE_FUNCTION(raw, STP_PARAMETER_TYPE_RAW)
+
+static void
+set_parameter_active_generic(const stp_vars_t *v, stp_parameter_type_t p_type,
+ const char *parameter,
+ stp_parameter_activity_t active)
+{
+ const stp_list_t *list = v->params[p_type];
+ const stp_list_item_t *item = stp_list_get_item_by_name(list, parameter);
+ if (item && (active == STP_PARAMETER_ACTIVE ||
+ active == STP_PARAMETER_INACTIVE))
+ ((value_t *) stp_list_item_get_data(item))->active = active;
+}
+
+#define SET_PARAMETER_ACTIVE_FUNCTION(type, index) \
+void \
+stp_set_##type##_parameter_active(const stp_vars_t *v, const char *parameter, \
+ stp_parameter_activity_t active) \
+{ \
+ set_parameter_active_generic(v, index, parameter, active); \
+}
+
+SET_PARAMETER_ACTIVE_FUNCTION(string, STP_PARAMETER_TYPE_STRING_LIST)
+SET_PARAMETER_ACTIVE_FUNCTION(file, STP_PARAMETER_TYPE_FILE)
+SET_PARAMETER_ACTIVE_FUNCTION(float, STP_PARAMETER_TYPE_DOUBLE)
+SET_PARAMETER_ACTIVE_FUNCTION(int, STP_PARAMETER_TYPE_INT)
+SET_PARAMETER_ACTIVE_FUNCTION(dimension, STP_PARAMETER_TYPE_DIMENSION)
+SET_PARAMETER_ACTIVE_FUNCTION(boolean, STP_PARAMETER_TYPE_BOOLEAN)
+SET_PARAMETER_ACTIVE_FUNCTION(curve, STP_PARAMETER_TYPE_CURVE)
+SET_PARAMETER_ACTIVE_FUNCTION(array, STP_PARAMETER_TYPE_ARRAY)
+SET_PARAMETER_ACTIVE_FUNCTION(raw, STP_PARAMETER_TYPE_RAW)
+
+void
+stp_fill_parameter_settings(stp_parameter_t *desc,
+ const stp_parameter_t *param)
+{
+ if (param)
+ {
+ desc->p_type = param->p_type;
+ desc->p_level = param->p_level;
+ desc->p_class = param->p_class;
+ desc->is_mandatory = param->is_mandatory;
+ desc->is_active = param->is_active;
+ desc->channel = param->channel;
+ desc->verify_this_parameter = param->verify_this_parameter;
+ desc->read_only = param->read_only;
+ desc->name = param->name;
+ desc->text = param->text;
+ desc->category = param->category;
+ desc->help = param->help;
+ return;
+ }
+}
+
+void
+stp_vars_copy(stp_vars_t *vd, const stp_vars_t *vs)
+{
+ int i;
+
+ if (vs == vd)
+ return;
+ stp_set_driver(vd, stp_get_driver(vs));
+ stp_set_color_conversion(vd, stp_get_color_conversion(vs));
+ stp_set_left(vd, stp_get_left(vs));
+ stp_set_top(vd, stp_get_top(vs));
+ stp_set_width(vd, stp_get_width(vs));
+ stp_set_height(vd, stp_get_height(vs));
+ stp_set_page_width(vd, stp_get_page_width(vs));
+ stp_set_page_height(vd, stp_get_page_height(vs));
+ stp_set_outdata(vd, stp_get_outdata(vs));
+ stp_set_errdata(vd, stp_get_errdata(vs));
+ stp_set_outfunc(vd, stp_get_outfunc(vs));
+ stp_set_errfunc(vd, stp_get_errfunc(vs));
+ for (i = 0; i < STP_PARAMETER_TYPE_INVALID; i++)
+ {
+ stp_list_destroy(vd->params[i]);
+ vd->params[i] = copy_value_list(vs->params[i]);
+ }
+ stp_list_destroy(vd->internal_data);
+ vd->internal_data = copy_compdata_list(vs->internal_data);
+ stp_set_verified(vd, stp_get_verified(vs));
+}
+
+void
+stp_prune_inactive_options(stp_vars_t *v)
+{
+ stp_parameter_list_t params = stp_get_parameter_list(v);
+ int i;
+ for (i = 0; i < STP_PARAMETER_TYPE_INVALID; i++)
+ {
+ stp_list_t *list = v->params[i];
+ stp_list_item_t *item = stp_list_get_start(list);
+ while (item)
+ {
+ stp_list_item_t *next = stp_list_item_next(item);
+ value_t *var = (value_t *)stp_list_item_get_data(item);
+ if (var->active < STP_PARAMETER_DEFAULTED ||
+ !(stp_parameter_find(params, var->name)))
+ stp_list_item_destroy(list, item);
+ item = next;
+ }
+ }
+ stp_parameter_list_destroy(params);
+}
+
+stp_vars_t *
+stp_vars_create_copy(const stp_vars_t *vs)
+{
+ stp_vars_t *vd = stp_vars_create();
+ stp_vars_copy(vd, vs);
+ return (vd);
+}
+
+static const char *
+param_namefunc(const void *item)
+{
+ const stp_parameter_t *param = (const stp_parameter_t *)(item);
+ return param->name;
+}
+
+static const char *
+param_longnamefunc(const void *item)
+{
+ const stp_parameter_t *param = (const stp_parameter_t *) (item);
+ return param->text;
+}
+
+stp_parameter_list_t
+stp_parameter_list_create(void)
+{
+ stp_list_t *ret = stp_list_create();
+ stp_list_set_namefunc(ret, param_namefunc);
+ stp_list_set_long_namefunc(ret, param_longnamefunc);
+ return (stp_parameter_list_t) ret;
+}
+
+void
+stp_parameter_list_add_param(stp_parameter_list_t list,
+ const stp_parameter_t *item)
+{
+ stp_list_t *ilist = (stp_list_t *) list;
+ stp_list_item_create(ilist, NULL, item);
+}
+
+void
+stp_describe_parameter(const stp_vars_t *v, const char *name,
+ stp_parameter_t *description)
+{
+ description->p_type = STP_PARAMETER_TYPE_INVALID;
+/* Set these to NULL in case stpi_*_describe_parameter() doesn't */
+ description->bounds.str = NULL;
+ description->deflt.str = NULL;
+ stp_printer_describe_parameter(v, name, description);
+ if (description->p_type != STP_PARAMETER_TYPE_INVALID)
+ return;
+ stp_color_describe_parameter(v, name, description);
+ if (description->p_type != STP_PARAMETER_TYPE_INVALID)
+ return;
+ stp_dither_describe_parameter(v, name, description);
+ if (description->p_type != STP_PARAMETER_TYPE_INVALID)
+ return;
+ stpi_describe_generic_parameter(v, name, description);
+}
+
+void
+stp_parameter_description_destroy(stp_parameter_t *desc)
+{
+ switch (desc->p_type)
+ {
+ case STP_PARAMETER_TYPE_CURVE:
+ if (desc->bounds.curve)
+ stp_curve_destroy(desc->bounds.curve);
+ desc->bounds.curve = NULL;
+ break;
+ case STP_PARAMETER_TYPE_ARRAY:
+ if (desc->bounds.array)
+ stp_array_destroy(desc->bounds.array);
+ desc->bounds.array = NULL;
+ break;
+ case STP_PARAMETER_TYPE_STRING_LIST:
+ if (desc->bounds.str)
+ stp_string_list_destroy(desc->bounds.str);
+ desc->bounds.str = NULL;
+ break;
+ default:
+ break;
+ }
+}
+
+const stp_parameter_t *
+stp_parameter_find_in_settings(const stp_vars_t *v, const char *name)
+{
+ stp_parameter_list_t param_list = stp_get_parameter_list(v);
+ const stp_parameter_t *param = stp_parameter_find(param_list, name);
+ stp_parameter_list_destroy(param_list);
+ return param;
+}
+
+size_t
+stp_parameter_list_count(stp_const_parameter_list_t list)
+{
+ const stp_list_t *ilist = (const stp_list_t *)list;
+ return stp_list_get_length(ilist);
+}
+
+const stp_parameter_t *
+stp_parameter_find(stp_const_parameter_list_t list, const char *name)
+{
+ const stp_list_t *ilist = (const stp_list_t *)list;
+ const stp_list_item_t *item = stp_list_get_item_by_name(ilist, name);
+ if (item)
+ return (const stp_parameter_t *) stp_list_item_get_data(item);
+ else
+ return NULL;
+}
+
+const stp_parameter_t *
+stp_parameter_list_param(stp_const_parameter_list_t list, size_t item)
+{
+ const stp_list_t *ilist = (const stp_list_t *)list;
+ if (item >= stp_list_get_length(ilist))
+ return NULL;
+ else
+ return (const stp_parameter_t *)
+ stp_list_item_get_data(stp_list_get_item_by_index(ilist, item));
+}
+
+void
+stp_parameter_list_destroy(stp_parameter_list_t list)
+{
+ stp_list_destroy((stp_list_t *)list);
+}
+
+stp_parameter_list_t
+stp_parameter_list_copy(stp_const_parameter_list_t list)
+{
+ stp_list_t *ret = stp_parameter_list_create();
+ int i;
+ size_t count = stp_parameter_list_count(list);
+ for (i = 0; i < count; i++)
+ stp_list_item_create(ret, NULL, stp_parameter_list_param(list, i));
+ return (stp_parameter_list_t) ret;
+}
+
+void
+stp_parameter_list_append(stp_parameter_list_t list,
+ stp_const_parameter_list_t append)
+{
+ int i;
+ stp_list_t *ilist = (stp_list_t *)list;
+ size_t count = stp_parameter_list_count(append);
+ for (i = 0; i < count; i++)
+ {
+ const stp_parameter_t *param = stp_parameter_list_param(append, i);
+ if (!stp_list_get_item_by_name(ilist, param->name))
+ stp_list_item_create(ilist, NULL, param);
+ }
+}
diff --git a/src/main/print-version.c b/src/main/print-version.c
index 22b80c5..1137d34 100644
--- a/src/main/print-version.c
+++ b/src/main/print-version.c
@@ -1,5 +1,5 @@
/*
- * "$Id: print-version.c,v 1.6 2001/09/08 17:13:48 rleigh Exp $"
+ * "$Id: print-version.c,v 1.8 2005/04/10 23:15:16 rlk Exp $"
*
* Print plug-in driver utility functions for the GIMP.
*
@@ -23,40 +23,54 @@
/*
* This file must include only standard C header files. The core code must
- * compile on generic platforms that don't support glib, gimp, gimpprint, etc.
+ * compile on generic platforms that don't support glib, gimp, etc.
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#include <gimp-print/gimp-print.h>
-#include "gimp-print-internal.h"
-#include <gimp-print/gimp-print-intl-internal.h>
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
-const unsigned int gimpprint_major_version = GIMPPRINT_MAJOR_VERSION;
-const unsigned int gimpprint_minor_version = GIMPPRINT_MINOR_VERSION;
-const unsigned int gimpprint_micro_version = GIMPPRINT_MICRO_VERSION;
-const unsigned int gimpprint_current_interface = GIMPPRINT_CURRENT_INTERFACE;
-const unsigned int gimpprint_binary_age = GIMPPRINT_BINARY_AGE;
-const unsigned int gimpprint_interface_age = GIMPPRINT_INTERFACE_AGE;
+const unsigned int stp_major_version = STP_MAJOR_VERSION;
+const unsigned int stp_minor_version = STP_MINOR_VERSION;
+const unsigned int stp_micro_version = STP_MICRO_VERSION;
+const unsigned int stp_current_interface = STP_CURRENT_INTERFACE;
+const unsigned int stp_binary_age = STP_BINARY_AGE;
+const unsigned int stp_interface_age = STP_INTERFACE_AGE;
const char *
stp_check_version (unsigned int required_major,
unsigned int required_minor, unsigned int required_micro)
{
- if (required_major > GIMPPRINT_MAJOR_VERSION)
- return "gimpprint version too old (major mismatch)";
- if (required_major < GIMPPRINT_MAJOR_VERSION)
- return "gimpprint version too new (major mismatch)";
- if (required_minor > GIMPPRINT_MINOR_VERSION)
- return "gimpprint version too old (minor mismatch)";
- if (required_minor < GIMPPRINT_MINOR_VERSION)
- return "gimpprint version too new (minor mismatch)";
- if (required_micro < GIMPPRINT_MICRO_VERSION - GIMPPRINT_BINARY_AGE)
- return "gimpprint version too new (micro mismatch)";
- if (required_micro > GIMPPRINT_MICRO_VERSION)
- return "gimpprint version too old (micro mismatch)";
+ if (required_major > STP_MAJOR_VERSION)
+ return "Gutenprint version too old (major mismatch)";
+ if (required_major < STP_MAJOR_VERSION)
+ return "Gutenprint version too new (major mismatch)";
+ if (required_minor > STP_MINOR_VERSION)
+ return "Gutenprint version too old (minor mismatch)";
+ if (required_minor < STP_MINOR_VERSION)
+ return "Gutenprint version too new (minor mismatch)";
+ if (required_micro < STP_MICRO_VERSION - STP_BINARY_AGE)
+ return "Gutenprint version too new (micro mismatch)";
+ if (required_micro > STP_MICRO_VERSION)
+ return "Gutenprint version too old (micro mismatch)";
return NULL;
}
+
+const char *
+stp_get_version(void)
+{
+ static const char *version_id = VERSION;
+ return version_id;
+}
+
+const char *
+stp_get_release_version(void)
+{
+ static const char *release_version_id = GUTENPRINT_RELEASE_VERSION;
+ return release_version_id;
+}
diff --git a/src/main/print-weave.c b/src/main/print-weave.c
index 8b0213f..498e839 100644
--- a/src/main/print-weave.c
+++ b/src/main/print-weave.c
@@ -1,7 +1,7 @@
/*
- * "$Id: print-weave.c,v 1.36.4.3 2003/12/02 01:51:00 rlk Exp $"
+ * "$Id: print-weave.c,v 1.63 2005/06/29 01:42:35 rlk Exp $"
*
- * Softweave calculator for gimp-print.
+ * Softweave calculator for Gutenprint.
*
* Copyright 2000 Charles Briscoe-Smith <cpbs@debian.org>
*
@@ -28,30 +28,18 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#include <stdio.h>
-#include <stdlib.h>
#include <string.h>
-#include <gimp-print/gimp-print.h>
-#include "gimp-print-internal.h"
-#include <gimp-print/gimp-print-intl-internal.h>
-
-#if 0
-#define TEST_RAW
-#endif
-#if 0
-#define TEST_COOKED
-#endif
-#if 0
-#define ACCUMULATE
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
#endif
+
#if 1
#define ASSERTIONS
#endif
-#if defined(TEST_RAW) || defined(TEST_COOKED)
-#define TEST
-#endif
-
#ifdef ASSERTIONS
#define assert(x,v) \
do \
@@ -60,17 +48,13 @@ do \
{ \
stp_eprintf(v, "Assertion %s failed! file %s, line %d.\n", \
#x, __FILE__, __LINE__); \
- exit(1); \
+ stp_abort(); \
} \
} while (0)
#else
#define assert(x,v) do {} while (0)
#endif
-#ifdef TEST
-#define MAXCOLLECT (1000)
-#endif
-
static int
gcd(int x, int y)
{
@@ -87,6 +71,57 @@ gcd(int x, int y)
return y;
}
+typedef struct stpi_softweave
+{
+ stp_linebufs_t *linebases; /* Base address of each row buffer */
+ stp_lineoff_t *lineoffsets; /* Offsets within each row buffer */
+ stp_lineactive_t *lineactive; /* Does this line have anything printed? */
+ stp_linecount_t *linecounts; /* How many rows we've printed this pass */
+ stp_linebounds_t *linebounds; /* Starting and ending print column */
+ stp_pass_t *passes; /* Circular list of pass numbers */
+ int last_pass_offset; /* Starting row (offset from the start of */
+ /* the page) of the most recently printed */
+ /* pass (so we can determine how far to */
+ /* advance the paper) */
+ int last_pass; /* Number of the most recently printed pass */
+
+ int jets; /* Number of jets per color */
+ int virtual_jets; /* Number of jets per color, taking into */
+ /* account the head offset */
+ int separation; /* Offset from one jet to the next in rows */
+ void *weaveparm; /* Weave calculation parameter block */
+
+ int horizontal_weave; /* Number of horizontal passes required */
+ /* This is > 1 for some of the ultra-high */
+ /* resolution modes */
+ int vertical_subpasses; /* Number of passes per line (for better */
+ /* quality) */
+ int vmod; /* Number of banks of passes */
+ int oversample; /* Excess precision per row */
+ int repeat_count; /* How many times a pass is repeated */
+ int ncolors; /* How many colors */
+ int linewidth; /* Line width in input pixels */
+ int vertical_height; /* Image height in output pixels */
+ int firstline; /* Actual first line (referenced to paper) */
+
+ int bitwidth; /* Bits per pixel */
+ int lineno;
+ int vertical_oversample; /* Vertical oversampling */
+ int current_vertical_subpass;
+ int horizontal_width; /* Horizontal width, in bits */
+ int *head_offset; /* offset of printheads */
+ unsigned char *s[STP_MAX_WEAVE];
+ unsigned char *fold_buf;
+ unsigned char *comp_buf;
+ stp_weave_t wcache;
+ int rcache;
+ int vcache;
+ stp_flushfunc *flushfunc;
+ stp_fillfunc *fillfunc;
+ stp_packfunc *pack;
+ stp_compute_linewidth_func *compute_linewidth;
+} stpi_softweave_t;
+
/* RAW WEAVE */
typedef struct raw {
@@ -96,43 +131,42 @@ typedef struct raw {
int advancebasis;
int subblocksperpassblock;
int passespersubblock;
- int strategy;
- stp_vars_t v;
+ stp_weave_strategy_t strategy;
+ stp_vars_t *v;
} raw_t;
/*
* Strategy types currently defined:
*
- * 0: printer firmware weave
- * 1: zig-zag type pass block filling
- * 2: ascending pass block filling
- * 3: descending pass block filling
- * 4: ascending fill with 2x expansion
+ * 0: zig-zag type pass block filling
+ * 1: ascending pass block filling
+ * 2: descending pass block filling
+ * 3: ascending fill with 2x expansion
+ * 4: staggered zig-zag neighbour-avoidance fill
* 5: ascending fill with 3x expansion
- * 6: staggered zig-zag neighbour-avoidance fill
*
- * In theory, strategy 1 should be optimal; in practice, it can lead
+ * In theory, strategy 0 should be optimal; in practice, it can lead
* to visible areas of banding. If it's necessary to avoid filling
- * neighbouring rows in neighbouring passes, strategy 6 should be optimal,
+ * neighbouring rows in neighbouring passes, strategy 4 should be optimal,
* at least for some weaves.
*/
static void
initialize_raw_weave(raw_t *w, /* I - weave struct to be filled in */
- int S, /* I - jet separation */
- int J, /* I - number of jets */
- int H, /* I - oversampling factor */
- int strat, /* I - weave pattern variation to use */
- stp_vars_t v)
+ int separation, /* I - jet separation */
+ int jets, /* I - number of jets */
+ int oversample, /* I - oversampling factor */
+ stp_weave_strategy_t strat, /* I - weave pattern variation to use */
+ stp_vars_t *v)
{
- w->separation = S;
- w->jets = J;
- w->oversampling = H;
- w->advancebasis = J / H;
+ w->separation = separation;
+ w->jets = jets;
+ w->oversampling = oversample;
+ w->advancebasis = jets / oversample;
if (w->advancebasis == 0)
w->advancebasis++;
- w->subblocksperpassblock = gcd(S, w->advancebasis);
- w->passespersubblock = S / w->subblocksperpassblock;
+ w->subblocksperpassblock = gcd(separation, w->advancebasis);
+ w->passespersubblock = separation / w->subblocksperpassblock;
w->strategy = strat;
w->v = v;
}
@@ -151,20 +185,20 @@ calculate_raw_pass_parameters(raw_t *w, /* I - weave parameters */
* w->subblocksperpassblock / w->separation;
switch (w->strategy) {
- case 1:
+ case STP_WEAVE_ZIGZAG:
if (subpassblock * 2 < w->subblocksperpassblock)
subpassoffset = 2 * subpassblock;
else
subpassoffset = 2 * (w->subblocksperpassblock
- subpassblock) - 1;
break;
- case 2:
+ case STP_WEAVE_ASCENDING:
subpassoffset = subpassblock;
break;
- case 3:
+ case STP_WEAVE_DESCENDING:
subpassoffset = w->subblocksperpassblock - 1 - subpassblock;
break;
- case 4:
+ case STP_WEAVE_ASCENDING_2X:
if (subpassblock * 2 < w->subblocksperpassblock)
subpassoffset = 2 * subpassblock;
else
@@ -172,7 +206,7 @@ calculate_raw_pass_parameters(raw_t *w, /* I - weave parameters */
- (w->subblocksperpassblock
+ 1) / 2);
break;
- case 5:
+ case STP_WEAVE_ASCENDING_3X:
if (subpassblock * 3 < w->subblocksperpassblock)
subpassoffset = 3 * subpassblock;
else if (3 * (subpassblock - (w->subblocksperpassblock + 2) / 3)
@@ -187,7 +221,7 @@ calculate_raw_pass_parameters(raw_t *w, /* I - weave parameters */
- w->subblocksperpassblock
/ 3);
break;
- case 6:
+ case STP_WEAVE_STAGGERED:
if (subpassblock * 2 < w->subblocksperpassblock)
subpassoffset = 2 * subpassblock;
else if (subpassblock * 2 < w->subblocksperpassblock + 2)
@@ -221,27 +255,27 @@ calculate_raw_row_parameters(raw_t *w, /* I - weave parameters */
subblockoffset = row % w->subblocksperpassblock;
switch (w->strategy) {
- case 1:
+ case STP_WEAVE_ZIGZAG:
if (subblockoffset % 2 == 0)
subpassblock = subblockoffset / 2;
else
subpassblock = w->subblocksperpassblock
- (subblockoffset + 1) / 2;
break;
- case 2:
+ case STP_WEAVE_ASCENDING:
subpassblock = subblockoffset;
break;
- case 3:
+ case STP_WEAVE_DESCENDING:
subpassblock = w->subblocksperpassblock - 1 - subblockoffset;
break;
- case 4:
+ case STP_WEAVE_ASCENDING_2X:
if (subblockoffset % 2 == 0)
subpassblock = subblockoffset / 2;
else
subpassblock = (subblockoffset - 1) / 2
+ (w->subblocksperpassblock + 1) / 2;
break;
- case 5:
+ case STP_WEAVE_ASCENDING_3X:
if (subblockoffset % 3 == 0)
subpassblock = subblockoffset / 3;
else if (subblockoffset % 3 == 1)
@@ -252,14 +286,15 @@ calculate_raw_row_parameters(raw_t *w, /* I - weave parameters */
+ (w->subblocksperpassblock + 2) / 3
+ (w->subblocksperpassblock + 1) / 3;
break;
- case 6:
+ case STP_WEAVE_STAGGERED:
if (subblockoffset % 2 == 0)
subpassblock = subblockoffset / 2;
else if (subblockoffset == 1)
- subpassblock = w->subblocksperpassblock / 2;
+ subpassblock = (w->subblocksperpassblock + 1) / 2;
else
subpassblock = w->subblocksperpassblock
- (subblockoffset - 1) / 2;
+ break;
default:
subpassblock = subblockoffset;
break;
@@ -454,7 +489,7 @@ make_passmap(raw_t *w, int **map, int **starts, int first_pass_number,
}
static void
-calculate_pass_map(stp_vars_t v,
+calculate_pass_map(stp_vars_t *v,
cooked_t *w, /* I - weave parameters */
int pageheight, /* I - number of rows on page */
int firstrow, /* I - first printed row */
@@ -528,7 +563,7 @@ calculate_pass_map(stp_vars_t v,
w->stagger_premap = 0;
}
- if (w->first_unused_pass > w->first_postmapped_pass) {
+ if (w->first_unused_pass >= w->first_postmapped_pass) {
int spread, separations_to_distribute, normal_passes_mapped;
separations_to_distribute = (pageheight - lastrow - 1)
/ w->rw.separation;
@@ -551,27 +586,27 @@ calculate_pass_map(stp_vars_t v,
}
static void * /* O - weave parameter block */
-initialize_weave_params(int S, /* I - jet separation */
- int J, /* I - number of jets */
- int H, /* I - oversampling factor */
+initialize_weave_params(int separation, /* I - jet separation */
+ int jets, /* I - number of jets */
+ int oversample, /* I - oversampling factor */
int firstrow, /* I - first row number to print */
int lastrow, /* I - last row number to print */
int pageheight, /* I - number of rows on the whole
page, without using any
expanded margin facilities */
- int strategy, /* I - weave pattern variant to use */
- stp_vars_t v)
+ stp_weave_strategy_t strategy, /* I - weave pattern variant to use */
+ stp_vars_t *v)
{
cooked_t *w = stp_malloc(sizeof(cooked_t));
if (w) {
- initialize_raw_weave(&w->rw, S, J, H, strategy, v);
+ initialize_raw_weave(&w->rw, separation, jets, oversample, strategy, v);
calculate_pass_map(v, w, pageheight, firstrow, lastrow);
}
return w;
}
-void
-stp_destroy_weave_params(void *vw)
+static void
+stpi_destroy_weave_params(void *vw)
{
cooked_t *w = (cooked_t *) vw;
@@ -583,14 +618,14 @@ stp_destroy_weave_params(void *vw)
}
static void
-stp_calculate_row_parameters(void *vw, /* I - weave parameters */
- int row, /* I - row number */
- int subpass, /* I - subpass */
- int *pass, /* O - pass containing row */
- int *jetnum, /* O - jet number of row */
- int *startingrow, /* O - phys start of pass */
- int *ophantomrows, /* O - missing rows at start */
- int *ojetsused) /* O - jets used by pass */
+stpi_calculate_row_parameters(void *vw, /* I - weave parameters */
+ int row, /* I - row number */
+ int subpass, /* I - subpass */
+ int *pass, /* O - pass containing row */
+ int *jetnum, /* O - jet number of row */
+ int *startingrow, /* O - phys start of pass */
+ int *ophantomrows, /* O - missing rows @ start */
+ int *ojetsused) /* O - jets used by pass */
{
cooked_t *w = (cooked_t *) vw;
int raw_pass, jet, startrow, phantomrows, jetsused;
@@ -647,865 +682,6 @@ stp_calculate_row_parameters(void *vw, /* I - weave parameters */
*ojetsused = jetsused;
}
-void
-stp_fold(const unsigned char *line,
- int single_length,
- unsigned char *outbuf)
-{
- int i;
- memset(outbuf, 0, single_length * 2);
- for (i = 0; i < single_length; i++)
- {
- unsigned char l0 = line[0];
- unsigned char l1 = line[single_length];
- if (l0 || l1)
- {
- outbuf[0] =
- ((l0 & (1 << 7)) >> 1) +
- ((l0 & (1 << 6)) >> 2) +
- ((l0 & (1 << 5)) >> 3) +
- ((l0 & (1 << 4)) >> 4) +
- ((l1 & (1 << 7)) >> 0) +
- ((l1 & (1 << 6)) >> 1) +
- ((l1 & (1 << 5)) >> 2) +
- ((l1 & (1 << 4)) >> 3);
- outbuf[1] =
- ((l0 & (1 << 3)) << 3) +
- ((l0 & (1 << 2)) << 2) +
- ((l0 & (1 << 1)) << 1) +
- ((l0 & (1 << 0)) << 0) +
- ((l1 & (1 << 3)) << 4) +
- ((l1 & (1 << 2)) << 3) +
- ((l1 & (1 << 1)) << 2) +
- ((l1 & (1 << 0)) << 1);
- }
- line++;
- outbuf += 2;
- }
-}
-
-static void
-stp_split_2_1(int length,
- const unsigned char *in,
- unsigned char *outhi,
- unsigned char *outlo)
-{
- unsigned char *outs[2];
- int i;
- int row = 0;
- int limit = length;
- outs[0] = outhi;
- outs[1] = outlo;
- memset(outs[1], 0, limit);
- for (i = 0; i < limit; i++)
- {
- unsigned char inbyte = in[i];
- outs[0][i] = 0;
- if (inbyte == 0)
- continue;
- /* For some reason gcc isn't unrolling this, even with -funroll-loops */
- if (inbyte & 1)
- {
- outs[row][i] |= 1 & inbyte;
- row = row ^ 1;
- }
- if (inbyte & (1 << 1))
- {
- outs[row][i] |= (1 << 1) & inbyte;
- row = row ^ 1;
- }
- if (inbyte & (1 << 2))
- {
- outs[row][i] |= (1 << 2) & inbyte;
- row = row ^ 1;
- }
- if (inbyte & (1 << 3))
- {
- outs[row][i] |= (1 << 3) & inbyte;
- row = row ^ 1;
- }
- if (inbyte & (1 << 4))
- {
- outs[row][i] |= (1 << 4) & inbyte;
- row = row ^ 1;
- }
- if (inbyte & (1 << 5))
- {
- outs[row][i] |= (1 << 5) & inbyte;
- row = row ^ 1;
- }
- if (inbyte & (1 << 6))
- {
- outs[row][i] |= (1 << 6) & inbyte;
- row = row ^ 1;
- }
- if (inbyte & (1 << 7))
- {
- outs[row][i] |= (1 << 7) & inbyte;
- row = row ^ 1;
- }
- }
-}
-
-static void
-stp_split_2_2(int length,
- const unsigned char *in,
- unsigned char *outhi,
- unsigned char *outlo)
-{
- unsigned char *outs[2];
- int i;
- unsigned row = 0;
- int limit = length * 2;
- outs[0] = outhi;
- outs[1] = outlo;
- memset(outs[1], 0, limit);
- for (i = 0; i < limit; i++)
- {
- unsigned char inbyte = in[i];
- outs[0][i] = 0;
- if (inbyte == 0)
- continue;
- /* For some reason gcc isn't unrolling this, even with -funroll-loops */
- if (inbyte & 3)
- {
- outs[row][i] |= (3 & inbyte);
- row = row ^ 1;
- }
- if (inbyte & (3 << 2))
- {
- outs[row][i] |= ((3 << 2) & inbyte);
- row = row ^ 1;
- }
- if (inbyte & (3 << 4))
- {
- outs[row][i] |= ((3 << 4) & inbyte);
- row = row ^ 1;
- }
- if (inbyte & (3 << 6))
- {
- outs[row][i] |= ((3 << 6) & inbyte);
- row = row ^ 1;
- }
- }
-}
-
-void
-stp_split_2(int length,
- int bits,
- const unsigned char *in,
- unsigned char *outhi,
- unsigned char *outlo)
-{
- if (bits == 2)
- stp_split_2_2(length, in, outhi, outlo);
- else
- stp_split_2_1(length, in, outhi, outlo);
-}
-
-static void
-stp_split_4_1(int length,
- const unsigned char *in,
- unsigned char *out0,
- unsigned char *out1,
- unsigned char *out2,
- unsigned char *out3)
-{
- unsigned char *outs[4];
- int i;
- int row = 0;
- int limit = length;
- outs[0] = out0;
- outs[1] = out1;
- outs[2] = out2;
- outs[3] = out3;
- memset(outs[1], 0, limit);
- memset(outs[2], 0, limit);
- memset(outs[3], 0, limit);
- for (i = 0; i < limit; i++)
- {
- unsigned char inbyte = in[i];
- outs[0][i] = 0;
- if (inbyte == 0)
- continue;
- /* For some reason gcc isn't unrolling this, even with -funroll-loops */
- if (inbyte & 1)
- {
- outs[row][i] |= 1 & inbyte;
- row = (row + 1) & 3;
- }
- if (inbyte & (1 << 1))
- {
- outs[row][i] |= (1 << 1) & inbyte;
- row = (row + 1) & 3;
- }
- if (inbyte & (1 << 2))
- {
- outs[row][i] |= (1 << 2) & inbyte;
- row = (row + 1) & 3;
- }
- if (inbyte & (1 << 3))
- {
- outs[row][i] |= (1 << 3) & inbyte;
- row = (row + 1) & 3;
- }
- if (inbyte & (1 << 4))
- {
- outs[row][i] |= (1 << 4) & inbyte;
- row = (row + 1) & 3;
- }
- if (inbyte & (1 << 5))
- {
- outs[row][i] |= (1 << 5) & inbyte;
- row = (row + 1) & 3;
- }
- if (inbyte & (1 << 6))
- {
- outs[row][i] |= (1 << 6) & inbyte;
- row = (row + 1) & 3;
- }
- if (inbyte & (1 << 7))
- {
- outs[row][i] |= (1 << 7) & inbyte;
- row = (row + 1) & 3;
- }
- }
-}
-
-static void
-stp_split_4_2(int length,
- const unsigned char *in,
- unsigned char *out0,
- unsigned char *out1,
- unsigned char *out2,
- unsigned char *out3)
-{
- unsigned char *outs[4];
- int i;
- int row = 0;
- int limit = length * 2;
- outs[0] = out0;
- outs[1] = out1;
- outs[2] = out2;
- outs[3] = out3;
- memset(outs[1], 0, limit);
- memset(outs[2], 0, limit);
- memset(outs[3], 0, limit);
- for (i = 0; i < limit; i++)
- {
- unsigned char inbyte = in[i];
- outs[0][i] = 0;
- if (inbyte == 0)
- continue;
- /* For some reason gcc isn't unrolling this, even with -funroll-loops */
- if (inbyte & 3)
- {
- outs[row][i] |= 3 & inbyte;
- row = (row + 1) & 3;
- }
- if (inbyte & (3 << 2))
- {
- outs[row][i] |= (3 << 2) & inbyte;
- row = (row + 1) & 3;
- }
- if (inbyte & (3 << 4))
- {
- outs[row][i] |= (3 << 4) & inbyte;
- row = (row + 1) & 3;
- }
- if (inbyte & (3 << 6))
- {
- outs[row][i] |= (3 << 6) & inbyte;
- row = (row + 1) & 3;
- }
- }
-}
-
-void
-stp_split_4(int length,
- int bits,
- const unsigned char *in,
- unsigned char *out0,
- unsigned char *out1,
- unsigned char *out2,
- unsigned char *out3)
-{
- if (bits == 2)
- stp_split_4_2(length, in, out0, out1, out2, out3);
- else
- stp_split_4_1(length, in, out0, out1, out2, out3);
-}
-
-
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-#define SH20 0
-#define SH21 8
-#else
-#define SH20 8
-#define SH21 0
-#endif
-
-static void
-stp_unpack_2_1(int length,
- const unsigned char *in,
- unsigned char *out0,
- unsigned char *out1)
-{
- unsigned char tempin, bit, temp0, temp1;
-
- if (length <= 0)
- return;
- for (bit = 128, temp0 = 0, temp1 = 0;
- length > 0;
- length --)
- {
- tempin = *in++;
-
- if (tempin & 128)
- temp0 |= bit;
- if (tempin & 64)
- temp1 |= bit;
- bit >>= 1;
- if (tempin & 32)
- temp0 |= bit;
- if (tempin & 16)
- temp1 |= bit;
- bit >>= 1;
- if (tempin & 8)
- temp0 |= bit;
- if (tempin & 4)
- temp1 |= bit;
- bit >>= 1;
- if (tempin & 2)
- temp0 |= bit;
- if (tempin & 1)
- temp1 |= bit;
-
- if (bit > 1)
- bit >>= 1;
- else
- {
- bit = 128;
- *out0++ = temp0;
- *out1++ = temp1;
-
- temp0 = 0;
- temp1 = 0;
- }
- }
-
- if (bit < 128)
- {
- *out0++ = temp0;
- *out1++ = temp1;
- }
-}
-
-static void
-stp_unpack_2_2(int length,
- const unsigned char *in,
- unsigned char *out0,
- unsigned char *out1)
-{
- if (length <= 0)
- return;
-
- for (;length;length --)
- {
- unsigned char ti0, ti1;
- ti0 = in[0];
- ti1 = in[1];
-
- *out0++ = (ti0 & 0xc0) << 0
- | (ti0 & 0x0c) << 2
- | (ti1 & 0xc0) >> 4
- | (ti1 & 0x0c) >> 2;
- *out1++ = (ti0 & 0x30) << 2
- | (ti0 & 0x03) << 4
- | (ti1 & 0x30) >> 2
- | (ti1 & 0x03) >> 0;
- in += 2;
- }
-}
-
-void
-stp_unpack_2(int length,
- int bits,
- const unsigned char *in,
- unsigned char *outlo,
- unsigned char *outhi)
-{
- if (bits == 1)
- stp_unpack_2_1(length, in, outlo, outhi);
- else
- stp_unpack_2_2(length, in, outlo, outhi);
-}
-
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-#define SH40 0
-#define SH41 8
-#define SH42 16
-#define SH43 24
-#else
-#define SH40 24
-#define SH41 16
-#define SH42 8
-#define SH43 0
-#endif
-
-static void
-stp_unpack_4_1(int length,
- const unsigned char *in,
- unsigned char *out0,
- unsigned char *out1,
- unsigned char *out2,
- unsigned char *out3)
-{
- unsigned char tempin, bit, temp0, temp1, temp2, temp3;
-
- if (length <= 0)
- return;
- for (bit = 128, temp0 = 0, temp1 = 0, temp2 = 0, temp3 = 0;
- length > 0;
- length --)
- {
- tempin = *in++;
-
- if (tempin & 128)
- temp0 |= bit;
- if (tempin & 64)
- temp1 |= bit;
- if (tempin & 32)
- temp2 |= bit;
- if (tempin & 16)
- temp3 |= bit;
- bit >>= 1;
- if (tempin & 8)
- temp0 |= bit;
- if (tempin & 4)
- temp1 |= bit;
- if (tempin & 2)
- temp2 |= bit;
- if (tempin & 1)
- temp3 |= bit;
-
- if (bit > 1)
- bit >>= 1;
- else
- {
- bit = 128;
- *out0++ = temp0;
- *out1++ = temp1;
- *out2++ = temp2;
- *out3++ = temp3;
-
- temp0 = 0;
- temp1 = 0;
- temp2 = 0;
- temp3 = 0;
- }
- }
-
- if (bit < 128)
- {
- *out0++ = temp0;
- *out1++ = temp1;
- *out2++ = temp2;
- *out3++ = temp3;
- }
-}
-
-static void
-stp_unpack_4_2(int length,
- const unsigned char *in,
- unsigned char *out0,
- unsigned char *out1,
- unsigned char *out2,
- unsigned char *out3)
-{
- unsigned char tempin,
- shift,
- temp0,
- temp1,
- temp2,
- temp3;
-
- length *= 2;
-
- for (shift = 0, temp0 = 0, temp1 = 0, temp2 = 0, temp3 = 0;
- length > 0;
- length --)
- {
- /*
- * Note - we can't use (tempin & N) >> (shift - M) since negative
- * right-shifts are not always implemented.
- */
-
- tempin = *in++;
-
- if (tempin & 192)
- temp0 |= (tempin & 192) >> shift;
- if (tempin & 48)
- temp1 |= ((tempin & 48) << 2) >> shift;
- if (tempin & 12)
- temp2 |= ((tempin & 12) << 4) >> shift;
- if (tempin & 3)
- temp3 |= ((tempin & 3) << 6) >> shift;
-
- if (shift < 6)
- shift += 2;
- else
- {
- shift = 0;
- *out0++ = temp0;
- *out1++ = temp1;
- *out2++ = temp2;
- *out3++ = temp3;
-
- temp0 = 0;
- temp1 = 0;
- temp2 = 0;
- temp3 = 0;
- }
- }
-
- if (shift)
- {
- *out0++ = temp0;
- *out1++ = temp1;
- *out2++ = temp2;
- *out3++ = temp3;
- }
-}
-
-void
-stp_unpack_4(int length,
- int bits,
- const unsigned char *in,
- unsigned char *out0,
- unsigned char *out1,
- unsigned char *out2,
- unsigned char *out3)
-{
- if (bits == 1)
- stp_unpack_4_1(length, in, out0, out1, out2, out3);
- else
- stp_unpack_4_2(length, in, out0, out1, out2, out3);
-}
-
-static void
-stp_unpack_8_1(int length,
- const unsigned char *in,
- unsigned char *out0,
- unsigned char *out1,
- unsigned char *out2,
- unsigned char *out3,
- unsigned char *out4,
- unsigned char *out5,
- unsigned char *out6,
- unsigned char *out7)
-{
- unsigned char tempin, bit, temp0, temp1, temp2, temp3, temp4, temp5, temp6,
- temp7;
-
- if (length <= 0)
- return;
-
- for (bit = 128, temp0 = 0, temp1 = 0, temp2 = 0,
- temp3 = 0, temp4 = 0, temp5 = 0, temp6 = 0, temp7 = 0;
- length > 0;
- length --)
- {
- tempin = *in++;
-
- if (tempin & 128)
- temp0 |= bit;
- if (tempin & 64)
- temp1 |= bit;
- if (tempin & 32)
- temp2 |= bit;
- if (tempin & 16)
- temp3 |= bit;
- if (tempin & 8)
- temp4 |= bit;
- if (tempin & 4)
- temp5 |= bit;
- if (tempin & 2)
- temp6 |= bit;
- if (tempin & 1)
- temp7 |= bit;
-
- if (bit > 1)
- bit >>= 1;
- else
- {
- bit = 128;
- *out0++ = temp0;
- *out1++ = temp1;
- *out2++ = temp2;
- *out3++ = temp3;
- *out4++ = temp4;
- *out5++ = temp5;
- *out6++ = temp6;
- *out7++ = temp7;
-
- temp0 = 0;
- temp1 = 0;
- temp2 = 0;
- temp3 = 0;
- temp4 = 0;
- temp5 = 0;
- temp6 = 0;
- temp7 = 0;
- }
- }
-
- if (bit < 128)
- {
- *out0++ = temp0;
- *out1++ = temp1;
- *out2++ = temp2;
- *out3++ = temp3;
- *out4++ = temp4;
- *out5++ = temp5;
- *out6++ = temp6;
- *out7++ = temp7;
- }
-}
-
-static void
-stp_unpack_8_2(int length,
- const unsigned char *in,
- unsigned char *out0,
- unsigned char *out1,
- unsigned char *out2,
- unsigned char *out3,
- unsigned char *out4,
- unsigned char *out5,
- unsigned char *out6,
- unsigned char *out7)
-{
- unsigned char tempin,
- shift,
- temp0,
- temp1,
- temp2,
- temp3,
- temp4,
- temp5,
- temp6,
- temp7;
-
-
- for (shift = 0, temp0 = 0, temp1 = 0,
- temp2 = 0, temp3 = 0, temp4 = 0, temp5 = 0, temp6 = 0, temp7 = 0;
- length > 0;
- length --)
- {
- /*
- * Note - we can't use (tempin & N) >> (shift - M) since negative
- * right-shifts are not always implemented.
- */
-
- tempin = *in++;
-
- if (tempin & 192)
- temp0 |= (tempin & 192) >> shift;
- if (tempin & 48)
- temp1 |= ((tempin & 48) << 2) >> shift;
- if (tempin & 12)
- temp2 |= ((tempin & 12) << 4) >> shift;
- if (tempin & 3)
- temp3 |= ((tempin & 3) << 6) >> shift;
-
- tempin = *in++;
-
- if (tempin & 192)
- temp4 |= (tempin & 192) >> shift;
- if (tempin & 48)
- temp5 |= ((tempin & 48) << 2) >> shift;
- if (tempin & 12)
- temp6 |= ((tempin & 12) << 4) >> shift;
- if (tempin & 3)
- temp7 |= ((tempin & 3) << 6) >> shift;
-
- if (shift < 6)
- shift += 2;
- else
- {
- shift = 0;
- *out0++ = temp0;
- *out1++ = temp1;
- *out2++ = temp2;
- *out3++ = temp3;
- *out4++ = temp4;
- *out5++ = temp5;
- *out6++ = temp6;
- *out7++ = temp7;
-
- temp0 = 0;
- temp1 = 0;
- temp2 = 0;
- temp3 = 0;
- temp4 = 0;
- temp5 = 0;
- temp6 = 0;
- temp7 = 0;
- }
- }
-
- if (shift)
- {
- *out0++ = temp0;
- *out1++ = temp1;
- *out2++ = temp2;
- *out3++ = temp3;
- *out4++ = temp4;
- *out5++ = temp5;
- *out6++ = temp6;
- *out7++ = temp7;
- }
-}
-
-void
-stp_unpack_8(int length,
- int bits,
- const unsigned char *in,
- unsigned char *out0,
- unsigned char *out1,
- unsigned char *out2,
- unsigned char *out3,
- unsigned char *out4,
- unsigned char *out5,
- unsigned char *out6,
- unsigned char *out7)
-{
- if (bits == 1)
- stp_unpack_8_1(length, in, out0, out1, out2, out3,
- out4, out5, out6, out7);
- else
- stp_unpack_8_2(length, in, out0, out1, out2, out3,
- out4, out5, out6, out7);
-}
-
-int
-stp_pack_uncompressed(const unsigned char *line,
- int length,
- unsigned char *comp_buf,
- unsigned char **comp_ptr)
-{
- int i;
- memcpy(comp_buf, line, length);
- *comp_ptr = comp_buf + length;
- for (i = 0; i < length; i++)
- if (line[i])
- return 1;
- return 0;
-}
-
-int
-stp_pack_tiff(const unsigned char *line,
- int length,
- unsigned char *comp_buf,
- unsigned char **comp_ptr)
-{
- const unsigned char *start; /* Start of compressed data */
- unsigned char repeat; /* Repeating char */
- int count; /* Count of compressed bytes */
- int tcount; /* Temporary count < 128 */
- int active = 0; /* Have we found data? */
- register const unsigned char *xline = line;
- register int xlength = length;
-
- /*
- * Compress using TIFF "packbits" run-length encoding...
- */
-
- (*comp_ptr) = comp_buf;
-
- while (xlength > 0)
- {
- /*
- * Get a run of non-repeated chars...
- */
-
- start = xline;
- xline += 2;
- xlength -= 2;
-
- while (xlength > 0 && (xline[-2] != xline[-1] || xline[-1] != xline[0]))
- {
- if (! active && (xline[-2] || xline[-1] || xline[0]))
- active = 1;
- xline ++;
- xlength --;
- }
-
- xline -= 2;
- xlength += 2;
-
- /*
- * Output the non-repeated sequences (max 128 at a time).
- */
-
- count = xline - start;
- while (count > 0)
- {
- tcount = count > 128 ? 128 : count;
-
- (*comp_ptr)[0] = tcount - 1;
- memcpy((*comp_ptr) + 1, start, tcount);
-
- (*comp_ptr) += tcount + 1;
- start += tcount;
- count -= tcount;
- }
-
- if (xlength <= 0)
- break;
-
- /*
- * Find the repeated sequences...
- */
-
- start = xline;
- repeat = xline[0];
- if (repeat)
- active = 1;
-
- xline ++;
- xlength --;
-
- if (xlength > 0)
- {
- int ylength = xlength;
- while (ylength && *xline == repeat)
- {
- xline ++;
- ylength --;
- }
- xlength = ylength;
- }
-
- /*
- * Output the repeated sequences (max 128 at a time).
- */
-
- count = xline - start;
- while (count > 0)
- {
- tcount = count > 128 ? 128 : count;
-
- (*comp_ptr)[0] = 1 - tcount;
- (*comp_ptr)[1] = repeat;
-
- (*comp_ptr) += 2;
- count -= tcount;
- }
- }
- return active;
-}
-
/*
* "Soft" weave
*
@@ -1750,6 +926,20 @@ allocate_linecount(int count, int ncolors)
return (retval);
}
+static stp_linebounds_t *
+allocate_linebounds(int count, int ncolors)
+{
+ int i;
+ stp_linebounds_t *retval = stp_malloc(count * sizeof(stp_linebounds_t));
+ for (i = 0; i < count; i++)
+ {
+ retval[i].ncolors = ncolors;
+ retval[i].start_pos = stp_zalloc(ncolors * sizeof(int));
+ retval[i].end_pos = stp_zalloc(ncolors * sizeof(int));
+ }
+ return (retval);
+}
+
static stp_linebufs_t *
allocate_linebuf(int count, int ncolors)
{
@@ -1775,39 +965,69 @@ allocate_linebuf(int count, int ncolors)
*
* 3) line_height < physlines
*
- * 4) phys_lines >= 2 * jets * sep
+ * 4) page_height >= 2 * jets * sep
*/
-void *
-stp_initialize_weave(int jets, /* Width of print head */
+
+static void
+stpi_destroy_weave(void *vsw)
+{
+ int i, j;
+ stpi_softweave_t *sw = (stpi_softweave_t *) vsw;
+ stp_free(sw->passes);
+ if (sw->fold_buf)
+ stp_free(sw->fold_buf);
+ if (sw->comp_buf)
+ stp_free(sw->comp_buf);
+ for (i = 0; i < STP_MAX_WEAVE; i++)
+ if (sw->s[i])
+ stp_free(sw->s[i]);
+ for (i = 0; i < sw->vmod; i++)
+ {
+ for (j = 0; j < sw->ncolors; j++)
+ {
+ if (sw->linebases[i].v[j])
+ stp_free(sw->linebases[i].v[j]);
+ }
+ stp_free(sw->linecounts[i].v);
+ stp_free(sw->linebases[i].v);
+ stp_free(sw->lineactive[i].v);
+ stp_free(sw->lineoffsets[i].v);
+ stp_free(sw->linebounds[i].start_pos);
+ stp_free(sw->linebounds[i].end_pos);
+ }
+ stp_free(sw->linecounts);
+ stp_free(sw->lineactive);
+ stp_free(sw->lineoffsets);
+ stp_free(sw->linebases);
+ stp_free(sw->linebounds);
+ stp_free(sw->head_offset);
+ stpi_destroy_weave_params(sw->weaveparm);
+ stp_free(vsw);
+}
+
+void
+stp_initialize_weave(stp_vars_t *v,
+ int jets, /* Width of print head */
int sep, /* Separation in rows between jets */
int osample, /* Horizontal oversample */
int v_subpasses, /* Vertical passes */
int v_subsample, /* Vertical oversampling */
int ncolors,
- int width, /* bits/pixel */
+ int bitwidth, /* bits/pixel */
int linewidth, /* Width of a line, in pixels */
- int lineheight, /* Number of lines that will be printed */
- int first_line, /* First line that will be printed on page */
- int phys_lines, /* Total height of the page in rows */
- int weave_strategy, /* Which weaving pattern to use */
- int *head_offset,
- stp_vars_t v,
- void (*flushfunc)(stp_softweave_t *sw, int passno,
- int model, int width, int hoffset,
- int ydpi, int xdpi, int physical_xdpi,
- int vertical_subpass),
- void (*fill_start)(stp_softweave_t *sw, int row,
- int subpass, int width,
- int missingstartrows,
- int vertical_subpass),
- int (*pack)(const unsigned char *in, int bytes,
- unsigned char *out, unsigned char **optr),
- int (*compute_linewidth)(const stp_softweave_t *sw,
- int n))
+ int line_count, /* Lines that will be printed */
+ int first_line, /* First line that will be printed */
+ int page_height, /* Total height of the page in rows */
+ const int *head_offset,
+ stp_weave_strategy_t weave_strategy,
+ stp_flushfunc flushfunc,
+ stp_fillfunc fillfunc,
+ stp_packfunc pack,
+ stp_compute_linewidth_func compute_linewidth)
{
int i;
int last_line, maxHeadOffset;
- stp_softweave_t *sw = stp_zalloc(sizeof (stp_softweave_t));
+ stpi_softweave_t *sw = stp_zalloc(sizeof (stpi_softweave_t));
if (jets < 1)
jets = 1;
@@ -1818,7 +1038,6 @@ stp_initialize_weave(int jets, /* Width of print head */
if (v_subsample < 1)
v_subsample = 1;
- sw->v = v;
sw->separation = sep;
sw->jets = jets;
sw->horizontal_weave = osample;
@@ -1841,7 +1060,7 @@ stp_initialize_weave(int jets, /* Width of print head */
stp_eprintf(v, "Weave error: oversample (%d) > jets (%d)\n",
sw->oversample, jets);
stp_free(sw);
- return 0;
+ return;
}
}
else
@@ -1859,7 +1078,7 @@ stp_initialize_weave(int jets, /* Width of print head */
stp_eprintf(v, "Weave error: oversample (%d) > jets (%d)\n",
sw->oversample, jets);
stp_free(sw);
- return 0;
+ return;
}
/*
@@ -1879,11 +1098,11 @@ stp_initialize_weave(int jets, /* Width of print head */
sw->virtual_jets = sw->jets;
if (maxHeadOffset > 0)
sw->virtual_jets += (maxHeadOffset + sw->separation - 1) / sw->separation;
- last_line = first_line + lineheight - 1 + maxHeadOffset;
+ last_line = first_line + line_count - 1 + maxHeadOffset;
sw->weaveparm = initialize_weave_params(sw->separation, sw->jets,
sw->oversample, first_line, last_line,
- phys_lines, weave_strategy, v);
+ page_height, weave_strategy, v);
/*
* The value of vmod limits how many passes may be unfinished at a time.
* If pass x is not yet printed, pass x+vmod cannot be started.
@@ -1895,25 +1114,26 @@ stp_initialize_weave(int jets, /* Width of print head */
if (sw->virtual_jets > sw->jets)
sw->vmod *= (sw->virtual_jets + sw->jets - 1) / sw->jets;
- sw->bitwidth = width;
+ sw->bitwidth = bitwidth;
sw->last_pass_offset = 0;
sw->last_pass = -1;
sw->current_vertical_subpass = 0;
sw->ncolors = ncolors;
sw->linewidth = linewidth;
- sw->vertical_height = lineheight;
+ sw->vertical_height = line_count;
sw->lineoffsets = allocate_lineoff(sw->vmod, ncolors);
sw->lineactive = allocate_lineactive(sw->vmod, ncolors);
sw->linebases = allocate_linebuf(sw->vmod, ncolors);
+ sw->linebounds = allocate_linebounds(sw->vmod, ncolors);
sw->passes = stp_zalloc(sw->vmod * sizeof(stp_pass_t));
sw->linecounts = allocate_linecount(sw->vmod, ncolors);
sw->rcache = -2;
sw->vcache = -2;
- sw->fill_start = fill_start;
+ sw->fillfunc = fillfunc;
sw->compute_linewidth = compute_linewidth;
sw->pack = pack;
sw->horizontal_width =
- (sw->compute_linewidth)(sw, ((sw->linewidth + sw->horizontal_weave - 1) /
+ (sw->compute_linewidth)(v, ((sw->linewidth + sw->horizontal_weave - 1) /
sw->horizontal_weave));
sw->horizontal_width = ((sw->horizontal_width + 7) / 8);
@@ -1926,46 +1146,13 @@ stp_initialize_weave(int jets, /* Width of print head */
sw->linebases[i].v[j] = NULL;
}
}
- return (void *) sw;
-}
-
-void
-stp_destroy_weave(void *vsw)
-{
- int i, j;
- stp_softweave_t *sw = (stp_softweave_t *) vsw;
- stp_free(sw->passes);
- if (sw->fold_buf)
- stp_free(sw->fold_buf);
- if (sw->comp_buf)
- stp_free(sw->comp_buf);
- for (i = 0; i < MAX_WEAVE; i++)
- if (sw->s[i])
- stp_free(sw->s[i]);
- for (i = 0; i < sw->vmod; i++)
- {
- for (j = 0; j < sw->ncolors; j++)
- {
- if (sw->linebases[i].v[j])
- stp_free(sw->linebases[i].v[j]);
- }
- stp_free(sw->linecounts[i].v);
- stp_free(sw->linebases[i].v);
- stp_free(sw->lineactive[i].v);
- stp_free(sw->lineoffsets[i].v);
- }
- stp_free(sw->linecounts);
- stp_free(sw->lineactive);
- stp_free(sw->lineoffsets);
- stp_free(sw->linebases);
- stp_free(sw->head_offset);
- stp_destroy_weave_params(sw->weaveparm);
- stp_free(vsw);
+ stp_allocate_component_data(v, "Weave", NULL, stpi_destroy_weave, sw);
+ return;
}
static void
-weave_parameters_by_row(const stp_softweave_t *sw, int row,
- int vertical_subpass, stp_weave_t *w)
+weave_parameters_by_row(const stp_vars_t *v, const stpi_softweave_t *sw,
+ int row, int vertical_subpass, stp_weave_t *w)
{
int jetsused;
int sub_repeat_count = vertical_subpass % sw->repeat_count;
@@ -1973,7 +1160,7 @@ weave_parameters_by_row(const stp_softweave_t *sw, int row,
* Conceptually, this does not modify the softweave state. We cache
* the results, but this cache is considered hidden.
*/
- stp_softweave_t *wsw = (stp_softweave_t *)sw;
+ stpi_softweave_t *wsw = (stpi_softweave_t *) sw;
vertical_subpass /= sw->repeat_count;
if (sw->rcache == row && sw->vcache == vertical_subpass)
@@ -1986,105 +1173,131 @@ weave_parameters_by_row(const stp_softweave_t *sw, int row,
wsw->vcache = vertical_subpass;
w->row = row;
- stp_calculate_row_parameters(sw->weaveparm, row, vertical_subpass,
- &w->pass, &w->jet, &w->logicalpassstart,
- &w->missingstartrows, &jetsused);
+ stpi_calculate_row_parameters(sw->weaveparm, row, vertical_subpass,
+ &w->pass, &w->jet, &w->logicalpassstart,
+ &w->missingstartrows, &jetsused);
w->physpassstart = w->logicalpassstart + sw->separation * w->missingstartrows;
w->physpassend = w->physpassstart + sw->separation * (jetsused - 1);
memcpy(&(wsw->wcache), w, sizeof(stp_weave_t));
w->pass = (w->pass * sw->repeat_count) + sub_repeat_count;
- stp_dprintf(STP_DBG_WEAVE_PARAMS, sw->v, "row %d, jet %d of pass %d "
+ stp_dprintf(STP_DBG_WEAVE_PARAMS, v, "row %d, jet %d of pass %d "
"(pos %d, start %d, end %d, missing rows %d)\n",
w->row, w->jet, w->pass, w->logicalpassstart, w->physpassstart,
w->physpassend, w->missingstartrows);
}
void
-stp_weave_parameters_by_row(const stp_softweave_t *sw, int row,
- int vertical_subpass, stp_weave_t *w)
+stp_weave_parameters_by_row(const stp_vars_t *v, int row,
+ int vertical_subpass, stp_weave_t *w)
{
- weave_parameters_by_row(sw, row, vertical_subpass, w);
+ const stpi_softweave_t *sw =
+ (stpi_softweave_t *) stp_get_component_data(v, "Weave");
+ weave_parameters_by_row(v, sw, row, vertical_subpass, w);
}
static stp_lineoff_t *
-stp_get_lineoffsets(const stp_softweave_t *sw, int row, int subpass, int offset)
+stpi_get_lineoffsets(const stp_vars_t *v, const stpi_softweave_t *sw,
+ int row, int subpass, int offset)
{
stp_weave_t w;
- weave_parameters_by_row(sw, row + offset, subpass, &w);
+ weave_parameters_by_row(v, sw, row + offset, subpass, &w);
return &(sw->lineoffsets[w.pass % sw->vmod]);
}
static stp_lineactive_t *
-stp_get_lineactive(const stp_softweave_t *sw, int row, int subpass, int offset)
+stpi_get_lineactive(const stp_vars_t *v, const stpi_softweave_t *sw,
+ int row, int subpass, int offset)
{
stp_weave_t w;
- weave_parameters_by_row(sw, row + offset, subpass, &w);
+ weave_parameters_by_row(v, sw, row + offset, subpass, &w);
return &(sw->lineactive[w.pass % sw->vmod]);
}
static stp_linecount_t *
-stp_get_linecount(const stp_softweave_t *sw, int row, int subpass, int offset)
+stpi_get_linecount(const stp_vars_t *v, const stpi_softweave_t *sw,
+ int row, int subpass, int offset)
{
stp_weave_t w;
- weave_parameters_by_row(sw, row + offset, subpass, &w);
+ weave_parameters_by_row(v, sw, row + offset, subpass, &w);
return &(sw->linecounts[w.pass % sw->vmod]);
}
-static const stp_linebufs_t *
-stp_get_linebases(const stp_softweave_t *sw, int row, int subpass, int offset)
+static stp_linebufs_t *
+stpi_get_linebases(const stp_vars_t *v, const stpi_softweave_t *sw,
+ int row, int subpass, int offset)
{
stp_weave_t w;
- weave_parameters_by_row(sw, row + offset, subpass, &w);
+ weave_parameters_by_row(v, sw, row + offset, subpass, &w);
return &(sw->linebases[w.pass % sw->vmod]);
}
+static stp_linebounds_t *
+stpi_get_linebounds(const stp_vars_t *v, const stpi_softweave_t *sw,
+ int row, int subpass, int offset)
+{
+ stp_weave_t w;
+ weave_parameters_by_row(v, sw, row + offset, subpass, &w);
+ return &(sw->linebounds[w.pass % sw->vmod]);
+}
+
static stp_pass_t *
-stp_get_pass_by_row(const stp_softweave_t *sw, int row, int subpass,int offset)
+stpi_get_pass_by_row(stp_vars_t *v, const stpi_softweave_t *sw,
+ int row, int subpass,int offset)
{
stp_weave_t w;
- weave_parameters_by_row(sw, row + offset, subpass, &w);
+ weave_parameters_by_row(v, sw, row + offset, subpass, &w);
return &(sw->passes[w.pass % sw->vmod]);
}
stp_lineoff_t *
-stp_get_lineoffsets_by_pass(const stp_softweave_t *sw, int pass)
+stp_get_lineoffsets_by_pass(const stp_vars_t *v, int pass)
{
+ const stpi_softweave_t *sw =
+ (stpi_softweave_t *) stp_get_component_data(v, "Weave");
return &(sw->lineoffsets[pass % sw->vmod]);
}
stp_lineactive_t *
-stp_get_lineactive_by_pass(const stp_softweave_t *sw, int pass)
+stp_get_lineactive_by_pass(const stp_vars_t *v, int pass)
{
+ const stpi_softweave_t *sw =
+ (stpi_softweave_t *) stp_get_component_data(v, "Weave");
return &(sw->lineactive[pass % sw->vmod]);
}
stp_linecount_t *
-stp_get_linecount_by_pass(const stp_softweave_t *sw, int pass)
+stp_get_linecount_by_pass(const stp_vars_t *v, int pass)
{
+ const stpi_softweave_t *sw =
+ (stpi_softweave_t *) stp_get_component_data(v, "Weave");
return &(sw->linecounts[pass % sw->vmod]);
}
const stp_linebufs_t *
-stp_get_linebases_by_pass(const stp_softweave_t *sw, int pass)
+stp_get_linebases_by_pass(const stp_vars_t *v, int pass)
{
+ const stpi_softweave_t *sw =
+ (stpi_softweave_t *) stp_get_component_data(v, "Weave");
return &(sw->linebases[pass % sw->vmod]);
}
stp_pass_t *
-stp_get_pass_by_pass(const stp_softweave_t *sw, int pass)
+stp_get_pass_by_pass(const stp_vars_t *v, int pass)
{
+ const stpi_softweave_t *sw =
+ (stpi_softweave_t *) stp_get_component_data(v, "Weave");
return &(sw->passes[pass % sw->vmod]);
}
static void
-check_linebases(stp_softweave_t *sw, int row, int cpass, int head_offset,
- int color)
+check_linebases(stp_vars_t *v, const stpi_softweave_t *sw,
+ int row, int cpass, int head_offset, int color)
{
stp_linebufs_t *bufs =
- (stp_linebufs_t *) stp_get_linebases(sw, row, cpass, head_offset);
+ (stp_linebufs_t *) stpi_get_linebases(v, sw, row, cpass, head_offset);
if (!(bufs[0].v[color]))
bufs[0].v[color] =
stp_zalloc (sw->virtual_jets * sw->bitwidth * sw->horizontal_width);
@@ -2101,9 +1314,11 @@ check_linebases(stp_softweave_t *sw, int row, int cpass, int head_offset,
*/
void
-stp_fill_tiff(stp_softweave_t *sw, int row, int subpass,
+stp_fill_tiff(stp_vars_t *v, int row, int subpass,
int width, int missingstartrows, int color)
{
+ stpi_softweave_t *sw =
+ (stpi_softweave_t *) stp_get_component_data(v, "Weave");
stp_lineoff_t *lineoffs;
stp_linecount_t *linecount;
const stp_linebufs_t *bufs;
@@ -2117,7 +1332,7 @@ stp_fill_tiff(stp_softweave_t *sw, int row, int subpass,
int full_blocks = bytes_to_fill / (128 * 8);
int leftover = (7 + (bytes_to_fill % (128 * 8))) / 8;
int l = 0;
- bufs = stp_get_linebases(sw, row, subpass, sw->head_offset[color]);
+ bufs = stpi_get_linebases(v, sw, row, subpass, sw->head_offset[color]);
while (l < full_blocks)
{
@@ -2140,23 +1355,25 @@ stp_fill_tiff(stp_softweave_t *sw, int row, int subpass,
}
}
- lineoffs = stp_get_lineoffsets(sw, row, subpass, sw->head_offset[color]);
- linecount = stp_get_linecount(sw, row, subpass, sw->head_offset[color]);
+ lineoffs = stpi_get_lineoffsets(v, sw, row, subpass, sw->head_offset[color]);
+ linecount = stpi_get_linecount(v, sw, row, subpass, sw->head_offset[color]);
lineoffs[0].v[color] = 2 * i;
linecount[0].v[color] = missingstartrows;
}
void
-stp_fill_uncompressed(stp_softweave_t *sw, int row, int subpass,
+stp_fill_uncompressed(stp_vars_t *v, int row, int subpass,
int width, int missingstartrows, int color)
{
+ stpi_softweave_t *sw =
+ (stpi_softweave_t *) stp_get_component_data(v, "Weave");
stp_lineoff_t *lineoffs;
stp_linecount_t *linecount;
const stp_linebufs_t *bufs;
- bufs = stp_get_linebases(sw, row, subpass, sw->head_offset[color]);
- lineoffs = stp_get_lineoffsets(sw, row, subpass, sw->head_offset[color]);
- linecount = stp_get_linecount(sw, row, subpass, sw->head_offset[color]);
+ bufs = stpi_get_linebases(v, sw, row, subpass, sw->head_offset[color]);
+ lineoffs = stpi_get_lineoffsets(v, sw, row, subpass, sw->head_offset[color]);
+ linecount = stpi_get_linecount(v, sw, row, subpass, sw->head_offset[color]);
width *= sw->bitwidth * missingstartrows;
memset(bufs[0].v[color], 0, width);
lineoffs[0].v[color] = width;
@@ -2164,7 +1381,7 @@ stp_fill_uncompressed(stp_softweave_t *sw, int row, int subpass,
}
int
-stp_compute_tiff_linewidth(const stp_softweave_t *sw, int n)
+stp_compute_tiff_linewidth(stp_vars_t *v, int n)
{
/*
* It's possible for the "compression" to actually expand the line by
@@ -2174,14 +1391,14 @@ stp_compute_tiff_linewidth(const stp_softweave_t *sw, int n)
}
int
-stp_compute_uncompressed_linewidth(const stp_softweave_t *sw, int n)
+stp_compute_uncompressed_linewidth(stp_vars_t *v, int n)
{
return (8 * ((n + 7) / 8));
}
static void
-initialize_row(stp_softweave_t *sw, int row, int width,
- unsigned char *const cols[])
+initialize_row(stp_vars_t *v, stpi_softweave_t *sw,
+ int row, int width, unsigned char *const cols[])
{
stp_weave_t w;
int i, j, jj;
@@ -2194,14 +1411,16 @@ initialize_row(stp_softweave_t *sw, int row, int width,
if (cols[j])
{
stp_lineoff_t *lineoffs =
- stp_get_lineoffsets(sw, row, i, sw->head_offset[j]);
+ stpi_get_lineoffsets(v, sw, row, i, sw->head_offset[j]);
stp_lineactive_t *lineactive =
- stp_get_lineactive(sw, row, i, sw->head_offset[j]);
+ stpi_get_lineactive(v, sw, row, i, sw->head_offset[j]);
stp_linecount_t *linecount =
- stp_get_linecount(sw, row, i, sw->head_offset[j]);
- check_linebases(sw, row, i, sw->head_offset[j], j);
- weave_parameters_by_row(sw, row+sw->head_offset[j], i, &w);
- pass = stp_get_pass_by_row(sw, row, i, sw->head_offset[j]);
+ stpi_get_linecount(v, sw, row, i, sw->head_offset[j]);
+ stp_linebounds_t *linebounds =
+ stpi_get_linebounds(v, sw, row, i, sw->head_offset[j]);
+ check_linebases(v, sw, row, i, sw->head_offset[j], j);
+ weave_parameters_by_row(v, sw, row+sw->head_offset[j], i, &w);
+ pass = stpi_get_pass_by_row(v, sw, row, i, sw->head_offset[j]);
/* initialize pass if not initialized yet */
if (pass->pass < 0)
@@ -2216,24 +1435,24 @@ initialize_row(stp_softweave_t *sw, int row, int width,
for(jj=0; jj<sw->ncolors; jj++)
{
if (lineoffs[0].v[jj] != 0)
- stp_eprintf(sw->v,
- "WARNING: pass %d subpass %d row %d: "
+ stp_eprintf(v, "WARNING: pass %d subpass %d row %d: "
"lineoffs %ld should be zero!\n",
w.pass, i, row, lineoffs[0].v[jj]);
lineoffs[0].v[jj] = 0;
lineactive[0].v[jj] = 0;
if (linecount[0].v[jj] != 0)
- stp_eprintf(sw->v,
- "WARNING: pass %d subpass %d row %d: "
+ stp_eprintf(v, "WARNING: pass %d subpass %d row %d: "
"linecount %d should be zero!\n",
w.pass, i, row, linecount[0].v[jj]);
linecount[0].v[jj] = 0;
+ linebounds[0].start_pos[jj] = INT_MAX;
+ linebounds[0].end_pos[jj] = -1;
}
}
if((linecount[0].v[j] == 0) && (w.jet > 0))
{
- (sw->fill_start)(sw, row, i, width, w.jet, j);
+ (sw->fillfunc)(v, row, i, width, w.jet, j);
}
}
}
@@ -2241,19 +1460,25 @@ initialize_row(stp_softweave_t *sw, int row, int width,
}
static void
-add_to_row(stp_softweave_t *sw, int row, unsigned char *buf, size_t nbytes,
- int color, int setactive, stp_lineoff_t *lineoffs,
- stp_lineactive_t *lineactive, stp_linecount_t *linecount,
- const stp_linebufs_t *bufs)
+add_to_row(stp_vars_t *v, stpi_softweave_t *sw, int row, unsigned char *buf,
+ size_t nbytes, int color, int setactive, int h_pass)
{
+ const stp_linebufs_t *bufs =
+ stpi_get_linebases(v, sw, sw->lineno, h_pass, sw->head_offset[color]);
+ stp_lineoff_t *lineoffs =
+ stpi_get_lineoffsets(v, sw, sw->lineno, h_pass, sw->head_offset[color]);
+ stp_lineactive_t *lineactive =
+ stpi_get_lineactive(v, sw, sw->lineno, h_pass, sw->head_offset[color]);
+ stp_linecount_t *linecount =
+ stpi_get_linecount(v, sw, sw->lineno, h_pass, sw->head_offset[color]);
size_t place = lineoffs[0].v[color];
size_t count = linecount[0].v[color];
if (place + nbytes > sw->virtual_jets * sw->bitwidth * sw->horizontal_width)
{
- stp_eprintf(sw->v, "Buffer overflow: limit %d, actual %d, count %d\n",
+ stp_eprintf(v, "Buffer overflow: limit %d, actual %d, count %d\n",
sw->virtual_jets * sw->bitwidth * sw->horizontal_width,
place + nbytes, count);
- exit(1);
+ stp_abort();
}
memcpy(bufs[0].v[color] + lineoffs[0].v[color], buf, nbytes);
lineoffs[0].v[color] += nbytes;
@@ -2262,49 +1487,38 @@ add_to_row(stp_softweave_t *sw, int row, unsigned char *buf, size_t nbytes,
}
static void
-stp_flush(void *vsw, int model, int width, int hoffset,
- int ydpi, int xdpi, int physical_xdpi)
+stpi_flush_passes(stp_vars_t *v, int flushall)
{
- stp_softweave_t *sw = (stp_softweave_t *) vsw;
+ stpi_softweave_t *sw =
+ (stpi_softweave_t *) stp_get_component_data(v, "Weave");
while (1)
{
- stp_pass_t *pass = stp_get_pass_by_pass(sw, sw->last_pass + 1);
+ stp_pass_t *pass = stp_get_pass_by_pass(v, sw->last_pass + 1);
/*
* This ought to be pass->physpassend > sw->lineno
* but that causes rubbish to be output for some reason.
*/
- if (pass->pass < 0 || pass->physpassend >= sw->lineno)
+ if (pass->pass < 0 || (!flushall && pass->physpassend >= sw->lineno))
return;
- (sw->flushfunc)(sw, pass->pass, model, width, hoffset, ydpi, xdpi,
- physical_xdpi, pass->subpass);
+ (sw->flushfunc)(v, pass->pass, pass->subpass);
+ sw->last_pass = pass->pass;
+ pass->pass = -1;
}
}
void
-stp_flush_all(void *vsw, int model, int width, int hoffset,
- int ydpi, int xdpi, int physical_xdpi)
+stp_flush_all(stp_vars_t *v)
{
- stp_softweave_t *sw = (stp_softweave_t *) vsw;
- while (1)
- {
- stp_pass_t *pass = stp_get_pass_by_pass(sw, sw->last_pass + 1);
- /*
- * This ought to be pass->physpassend > sw->lineno
- * but that causes rubbish to be output for some reason.
- */
- if (pass->pass < 0)
- return;
- (sw->flushfunc)(sw, pass->pass, model, width, hoffset, ydpi, xdpi,
- physical_xdpi, pass->subpass);
- }
+ stpi_flush_passes(v, 1);
}
static void
-finalize_row(stp_softweave_t *sw, int row, int model, int width,
- int hoffset, int ydpi, int xdpi, int physical_xdpi)
+finalize_row(stp_vars_t *v, int row)
{
+ stpi_softweave_t *sw =
+ (stpi_softweave_t *) stp_get_component_data(v, "Weave");
int i,j;
- stp_dprintf(STP_DBG_ROWS, sw->v, "Finalizing row %d...\n", row);
+ stp_dprintf(STP_DBG_ROWS, v, "Finalizing row %d...\n", row);
for (i = 0; i < sw->oversample; i++)
{
stp_weave_t w;
@@ -2312,37 +1526,32 @@ finalize_row(stp_softweave_t *sw, int row, int model, int width,
for(j=0; j<sw->ncolors; j++)
{
- lines = stp_get_linecount(sw, row, i, sw->head_offset[j]);
- lines[0].v[j]++;
+ lines = stpi_get_linecount(v, sw, row, i, sw->head_offset[j]);
+ lines[0].v[j]++;
}
- weave_parameters_by_row(sw, row, i, &w);
+ weave_parameters_by_row(v, sw, row, i, &w);
if (w.physpassend == row)
{
- stp_dprintf(STP_DBG_ROWS, sw->v,
- "Pass=%d, physpassend=%d, row=%d, lineno=%d, flush...\n",
+ stp_dprintf(STP_DBG_ROWS, v,
+ "Pass=%d, physpassend=%d, row=%d, lineno=%d, flush..\n",
w.pass, w.physpassend, row, sw->lineno);
- stp_flush(sw, model, width, hoffset, ydpi, xdpi, physical_xdpi);
- }
+ stpi_flush_passes(v, 0);
+ }
}
}
void
-stp_write_weave(void * vsw,
- int length, /* I - Length of bitmap data */
- int ydpi, /* I - Vertical resolution */
- int model, /* I - Printer model */
- int width, /* I - Printed width */
- int offset, /* I - Offset from left side of page */
- int xdpi,
- int physical_xdpi,
- unsigned char *const cols[])
+stp_write_weave(stp_vars_t *v, unsigned char *const cols[])
{
- stp_softweave_t *sw = (stp_softweave_t *) vsw;
- stp_lineoff_t *lineoffs[8];
- stp_lineactive_t *lineactives[8];
- stp_linecount_t *linecounts[8];
- const stp_linebufs_t *bufs[8];
+ stpi_softweave_t *sw =
+ (stpi_softweave_t *) stp_get_component_data(v, "Weave");
+ int length = (sw->linewidth + 7) / 8;
+ stp_lineoff_t *lineoffs[STP_MAX_WEAVE];
+ stp_lineactive_t *lineactives[STP_MAX_WEAVE];
+ stp_linecount_t *linecounts[STP_MAX_WEAVE];
+ stp_linebounds_t *linebounds[STP_MAX_WEAVE];
+ const stp_linebufs_t *bufs[STP_MAX_WEAVE];
int xlength = (length + sw->horizontal_weave - 1) / sw->horizontal_weave;
int ylength = xlength * sw->horizontal_weave;
unsigned char *comp_ptr;
@@ -2354,30 +1563,36 @@ stp_write_weave(void * vsw,
if (!sw->fold_buf)
sw->fold_buf = stp_zalloc(sw->bitwidth * ylength);
if (!sw->comp_buf)
- sw->comp_buf = stp_zalloc(sw->bitwidth *(sw->compute_linewidth)(sw,ylength));
+ sw->comp_buf = stp_zalloc(sw->bitwidth *
+ (sw->compute_linewidth)(v,ylength));
if (sw->current_vertical_subpass == 0)
- initialize_row(sw, sw->lineno, xlength, cols);
+ initialize_row(v, sw, sw->lineno, xlength, cols);
for (j = 0; j < sw->ncolors; j++)
{
if (cols[j])
{
- const unsigned char *in;
+ const unsigned char *in;
+ int idx;
- for (i = 0; i < h_passes; i++)
- {
- if (!sw->s[i])
- sw->s[i] = stp_zalloc(sw->bitwidth *
- (sw->compute_linewidth)(sw, ylength));
- lineoffs[i] = stp_get_lineoffsets(sw, sw->lineno, cpass + i,
- sw->head_offset[j]);
- linecounts[i] = stp_get_linecount(sw, sw->lineno, cpass + i,
- sw->head_offset[j]);
- lineactives[i] = stp_get_lineactive(sw, sw->lineno, cpass + i,
- sw->head_offset[j]);
- bufs[i] = stp_get_linebases(sw, sw->lineno, cpass + i,
- sw->head_offset[j]);
- }
+ for (i = 0; i < h_passes; i++)
+ {
+ int offset = sw->head_offset[j];
+ int pass = cpass + i;
+ if (!sw->s[i])
+ sw->s[i] = stp_zalloc(sw->bitwidth *
+ (sw->compute_linewidth)(v, ylength));
+ lineoffs[i] =
+ stpi_get_lineoffsets(v, sw, sw->lineno, pass, offset);
+ linecounts[i] =
+ stpi_get_linecount(v, sw, sw->lineno, pass, offset);
+ lineactives[i] =
+ stpi_get_lineactive(v, sw, sw->lineno, pass,offset);
+ linebounds[i] =
+ stpi_get_linebounds(v, sw, sw->lineno, pass, offset);
+ bufs[i] =
+ stpi_get_linebases(v, sw, sw->lineno, pass, offset);
+ }
if (sw->bitwidth == 2)
{
@@ -2386,89 +1601,89 @@ stp_write_weave(void * vsw,
}
else
in = cols[j];
- if (h_passes > 1)
+ switch (sw->horizontal_weave)
{
- switch (sw->horizontal_weave)
- {
- case 2:
- stp_unpack_2(length, sw->bitwidth, in, sw->s[0], sw->s[1]);
- break;
- case 4:
- stp_unpack_4(length, sw->bitwidth, in,
- sw->s[0], sw->s[1], sw->s[2], sw->s[3]);
- break;
- case 8:
- stp_unpack_8(length, sw->bitwidth, in,
- sw->s[0], sw->s[1], sw->s[2], sw->s[3],
- sw->s[4], sw->s[5], sw->s[6], sw->s[7]);
- break;
- }
- switch (sw->vertical_subpasses)
- {
- case 4:
- switch (sw->horizontal_weave)
- {
- case 1:
- stp_split_4(length, sw->bitwidth, in,
- sw->s[0], sw->s[1], sw->s[2], sw->s[3]);
- break;
- case 2:
- stp_split_4(length, sw->bitwidth, sw->s[0],
- sw->s[0], sw->s[2], sw->s[4], sw->s[6]);
- stp_split_4(length, sw->bitwidth, sw->s[1],
- sw->s[1], sw->s[3], sw->s[5], sw->s[7]);
- break;
- }
- break;
- case 2:
- switch (sw->horizontal_weave)
- {
- case 1:
- stp_split_2(xlength, sw->bitwidth, in, sw->s[0], sw->s[1]);
- break;
- case 2:
- stp_split_2(xlength, sw->bitwidth, sw->s[0], sw->s[0], sw->s[2]);
- stp_split_2(xlength, sw->bitwidth, sw->s[1], sw->s[1], sw->s[3]);
- break;
- case 4:
- stp_split_2(xlength, sw->bitwidth, sw->s[0], sw->s[0], sw->s[4]);
- stp_split_2(xlength, sw->bitwidth, sw->s[1], sw->s[1], sw->s[5]);
- stp_split_2(xlength, sw->bitwidth, sw->s[2], sw->s[2], sw->s[6]);
- stp_split_2(xlength, sw->bitwidth, sw->s[3], sw->s[3], sw->s[7]);
- break;
- }
- break;
- /* case 1 is taken care of because the various unpack */
- /* functions will do the trick themselves */
- }
- for (i = 0; i < h_passes; i++)
- {
- setactive = (sw->pack)(sw->s[i], sw->bitwidth * xlength,
- sw->comp_buf, &comp_ptr);
- add_to_row(sw, sw->lineno, sw->comp_buf,
- comp_ptr - sw->comp_buf, j, setactive,
- lineoffs[i], lineactives[i], linecounts[i], bufs[i]);
- }
+ case 1:
+ memcpy(sw->s[0], in, length * sw->bitwidth);
+ break;
+ case 2:
+ stp_unpack_2(length, sw->bitwidth, in, sw->s[0], sw->s[1]);
+ break;
+ case 4:
+ stp_unpack_4(length, sw->bitwidth, in,
+ sw->s[0], sw->s[1], sw->s[2], sw->s[3]);
+ break;
+ case 8:
+ stp_unpack_8(length, sw->bitwidth, in,
+ sw->s[0], sw->s[1], sw->s[2], sw->s[3],
+ sw->s[4], sw->s[5], sw->s[6], sw->s[7]);
+ break;
+ case 16:
+ stp_unpack_16(length, sw->bitwidth, in,
+ sw->s[0], sw->s[1], sw->s[2], sw->s[3],
+ sw->s[4], sw->s[5], sw->s[6], sw->s[7],
+ sw->s[8], sw->s[9], sw->s[10], sw->s[11],
+ sw->s[12], sw->s[13], sw->s[14], sw->s[15]);
+ break;
}
- else
+ switch (sw->vertical_subpasses)
+ {
+ case 4:
+ for (idx = 0; idx < sw->horizontal_weave; idx++)
+ stp_split_4(length, sw->bitwidth, sw->s[idx], sw->s[idx],
+ sw->s[idx + sw->horizontal_weave],
+ sw->s[idx + sw->horizontal_weave * 2],
+ sw->s[idx + sw->horizontal_weave * 3]);
+ break;
+ case 2:
+ for (idx = 0; idx < sw->horizontal_weave; idx++)
+ stp_split_2(length, sw->bitwidth, sw->s[idx], sw->s[idx],
+ sw->s[idx + sw->horizontal_weave]);
+ break;
+ /* case 1 is taken care of because the various unpack */
+ /* functions will do the trick themselves */
+ }
+ for (i = 0; i < h_passes; i++)
{
- setactive = (sw->pack)(in, length * sw->bitwidth,
- sw->comp_buf, &comp_ptr);
- add_to_row(sw, sw->lineno, sw->comp_buf, comp_ptr - sw->comp_buf,
- j, setactive, lineoffs[0], lineactives[0], linecounts[0], bufs[0]);
+ int first, last;
+ setactive = (sw->pack)(v, sw->s[i], sw->bitwidth * xlength,
+ sw->comp_buf, &comp_ptr, &first, &last);
+ if (first < linebounds[i]->start_pos[j])
+ linebounds[i]->start_pos[j] = first;
+ if (last > linebounds[i]->end_pos[j])
+ linebounds[i]->end_pos[j] = last;
+ add_to_row(v, sw, sw->lineno, sw->comp_buf,
+ comp_ptr - sw->comp_buf, j, setactive, cpass + i);
}
}
}
sw->current_vertical_subpass++;
if (sw->current_vertical_subpass >= sw->vertical_oversample)
{
- finalize_row(sw, sw->lineno, model, width, offset, ydpi, xdpi,
- physical_xdpi);
+ finalize_row(v, sw->lineno);
sw->lineno++;
sw->current_vertical_subpass = 0;
}
}
+#if 0
+#define TEST_RAW
+#endif
+#if 0
+#define TEST_COOKED
+#endif
+#if 0
+#define ACCUMULATE
+#endif
+
+#if defined(TEST_RAW) || defined(TEST_COOKED)
+#define TEST
+#endif
+
+#ifdef TEST
+#define MAXCOLLECT (1000)
+#endif
+
#ifdef TEST_COOKED
static void
calculate_pass_parameters(cooked_t *w, /* I - weave parameters */
@@ -2614,7 +1829,7 @@ main(int ac, char *av[])
int firstrow =ac>4 ? atoi(av[4]) : 1;
int lastrow =ac>5 ? atoi(av[5]) : 100;
int pageheight=ac>6 ? atoi(av[6]) : 1000;
- int strategy =ac>7 ? atoi(av[7]) : 1;
+ stp_weave_strategy_t strategy =ac>7 ? atoi(av[7]) : 1;
cooked_t *weave;
int passes;
diff --git a/src/main/printers.c b/src/main/printers.c
new file mode 100644
index 0000000..e2f0f2e
--- /dev/null
+++ b/src/main/printers.c
@@ -0,0 +1,1073 @@
+/*
+ * "$Id: printers.c,v 1.75 2005/04/16 03:02:08 rlk Exp $"
+ *
+ * Print plug-in driver utility functions for the GIMP.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * This file must include only standard C header files. The core code must
+ * compile on generic platforms that don't support glib, gimp, gtk, etc.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <math.h>
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#include <string.h>
+#include <stdlib.h>
+
+#define FMIN(a, b) ((a) < (b) ? (a) : (b))
+
+
+static void stpi_printer_freefunc(void *item);
+static const char* stpi_printer_namefunc(const void *item);
+static const char* stpi_printer_long_namefunc(const void *item);
+
+static stp_list_t *printer_list = NULL;
+
+struct stp_printer
+{
+ const char *driver;
+ char *long_name; /* Long name for UI */
+ char *family; /* Printer family */
+ char *manufacturer; /* Printer manufacturer */
+ int model; /* Model number */
+ const stp_printfuncs_t *printfuncs;
+ stp_vars_t *printvars;
+};
+
+static int
+stpi_init_printer_list(void)
+{
+ if(printer_list)
+ stp_list_destroy(printer_list);
+ printer_list = stp_list_create();
+ stp_list_set_freefunc(printer_list, stpi_printer_freefunc);
+ stp_list_set_namefunc(printer_list, stpi_printer_namefunc);
+ stp_list_set_long_namefunc(printer_list, stpi_printer_long_namefunc);
+ /* stp_list_set_sortfunc(printer_list, stpi_printer_sortfunc); */
+
+ return 0;
+}
+
+int
+stp_printer_model_count(void)
+{
+ if (printer_list == NULL)
+ {
+ stp_erprintf("No printer drivers found: "
+ "are STP_DATA_PATH and STP_MODULE_PATH correct?\n");
+ stpi_init_printer_list();
+ }
+ return stp_list_get_length(printer_list);
+}
+
+static void
+null_printer(void)
+{
+ stp_erprintf("Null stp_printer_t! Please report this bug.\n");
+ stp_abort();
+}
+
+static inline void
+check_printer(const stp_printer_t *p)
+{
+ if (p == NULL)
+ null_printer();
+}
+
+const stp_printer_t *
+stp_get_printer_by_index(int idx)
+{
+ stp_list_item_t *printer;
+ if (printer_list == NULL)
+ {
+ stp_erprintf("No printer drivers found: "
+ "are STP_DATA_PATH and STP_MODULE_PATH correct?\n");
+ stpi_init_printer_list();
+ }
+ printer = stp_list_get_item_by_index(printer_list, idx);
+ if (printer == NULL)
+ return NULL;
+ return (const stp_printer_t *) stp_list_item_get_data(printer);
+}
+
+static void
+stpi_printer_freefunc(void *item)
+{
+ stp_printer_t *printer = (stp_printer_t *) item;
+ stp_free(printer->long_name);
+ stp_free(printer->family);
+ stp_free(printer);
+}
+
+const char *
+stp_printer_get_driver(const stp_printer_t *printer)
+{
+ return printer->driver;
+}
+
+static const char *
+stpi_printer_namefunc(const void *item)
+{
+ const stp_printer_t *printer = (const stp_printer_t *) item;
+ return printer->driver;
+}
+
+const char *
+stp_printer_get_long_name(const stp_printer_t *printer)
+{
+ return printer->long_name;
+}
+
+static const char *
+stpi_printer_long_namefunc(const void *item)
+{
+ const stp_printer_t *printer = (const stp_printer_t *) item;
+ return printer->long_name;
+}
+
+const char *
+stp_printer_get_family(const stp_printer_t *printer)
+{
+ return printer->family;
+}
+
+const char *
+stp_printer_get_manufacturer(const stp_printer_t *printer)
+{
+ return printer->manufacturer;
+}
+
+int
+stp_printer_get_model(const stp_printer_t *printer)
+{
+ return printer->model;
+}
+
+static inline const stp_printfuncs_t *
+stpi_get_printfuncs(const stp_printer_t *printer)
+{
+ return printer->printfuncs;
+}
+
+const stp_vars_t *
+stp_printer_get_defaults(const stp_printer_t *printer)
+{
+ return printer->printvars;
+}
+
+
+const stp_printer_t *
+stp_get_printer_by_long_name(const char *long_name)
+{
+ stp_list_item_t *printer_item;
+ if (printer_list == NULL)
+ {
+ stp_erprintf("No printer drivers found: "
+ "are STP_DATA_PATH and STP_MODULE_PATH correct?\n");
+ stpi_init_printer_list();
+ }
+ printer_item = stp_list_get_item_by_long_name(printer_list, long_name);
+ if (!printer_item)
+ return NULL;
+ return (const stp_printer_t *) stp_list_item_get_data(printer_item);
+}
+
+const stp_printer_t *
+stp_get_printer_by_driver(const char *driver)
+{
+ stp_list_item_t *printer_item;
+ if (printer_list == NULL)
+ {
+ stp_erprintf("No printer drivers found: "
+ "are STP_DATA_PATH and STP_MODULE_PATH correct?\n");
+ stpi_init_printer_list();
+ }
+ printer_item = stp_list_get_item_by_name(printer_list, driver);
+ if (!printer_item)
+ return NULL;
+ return (const stp_printer_t *) stp_list_item_get_data(printer_item);
+}
+
+int
+stp_get_printer_index_by_driver(const char *driver)
+{
+ /* There should be no need to ever know the index! */
+ int idx = 0;
+ for (idx = 0; idx < stp_printer_model_count(); idx++)
+ {
+ const stp_printer_t *printer = stp_get_printer_by_index(idx);
+ if (!strcmp(stp_printer_get_driver(printer), driver))
+ return idx;
+ }
+ return -1;
+}
+
+const stp_printer_t *
+stp_get_printer(const stp_vars_t *v)
+{
+ return stp_get_printer_by_driver(stp_get_driver(v));
+}
+
+int
+stp_get_model_id(const stp_vars_t *v)
+{
+ const stp_printer_t *printer = stp_get_printer_by_driver(stp_get_driver(v));
+ return printer->model;
+}
+
+stp_parameter_list_t
+stp_printer_list_parameters(const stp_vars_t *v)
+{
+ const stp_printfuncs_t *printfuncs =
+ stpi_get_printfuncs(stp_get_printer(v));
+ return (printfuncs->list_parameters)(v);
+}
+
+void
+stp_printer_describe_parameter(const stp_vars_t *v, const char *name,
+ stp_parameter_t *description)
+{
+ const stp_printfuncs_t *printfuncs =
+ stpi_get_printfuncs(stp_get_printer(v));
+ (printfuncs->parameters)(v, name, description);
+}
+
+static void
+set_printer_defaults(stp_vars_t *v, int core_only)
+{
+ stp_parameter_list_t *params;
+ int count;
+ int i;
+ stp_parameter_t desc;
+ params = stp_get_parameter_list(v);
+ count = stp_parameter_list_count(params);
+ for (i = 0; i < count; i++)
+ {
+ const stp_parameter_t *p = stp_parameter_list_param(params, i);
+ if (p->is_mandatory &&
+ (!core_only || p->p_class == STP_PARAMETER_CLASS_CORE))
+ {
+ stp_describe_parameter(v, p->name, &desc);
+ switch (p->p_type)
+ {
+ case STP_PARAMETER_TYPE_STRING_LIST:
+ stp_set_string_parameter(v, p->name, desc.deflt.str);
+ stp_set_string_parameter_active(v, p->name, STP_PARAMETER_ACTIVE);
+ break;
+ case STP_PARAMETER_TYPE_DOUBLE:
+ stp_set_float_parameter(v, p->name, desc.deflt.dbl);
+ stp_set_float_parameter_active(v, p->name, STP_PARAMETER_ACTIVE);
+ break;
+ case STP_PARAMETER_TYPE_INT:
+ stp_set_int_parameter(v, p->name, desc.deflt.integer);
+ stp_set_int_parameter_active(v, p->name, STP_PARAMETER_ACTIVE);
+ break;
+ case STP_PARAMETER_TYPE_DIMENSION:
+ stp_set_dimension_parameter(v, p->name, desc.deflt.dimension);
+ stp_set_dimension_parameter_active(v, p->name, STP_PARAMETER_ACTIVE);
+ break;
+ case STP_PARAMETER_TYPE_BOOLEAN:
+ stp_set_boolean_parameter(v, p->name, desc.deflt.boolean);
+ stp_set_boolean_parameter_active(v, p->name, STP_PARAMETER_ACTIVE);
+ break;
+ case STP_PARAMETER_TYPE_CURVE:
+ stp_set_curve_parameter(v, p->name, desc.deflt.curve);
+ stp_set_curve_parameter_active(v, p->name, STP_PARAMETER_ACTIVE);
+ break;
+ case STP_PARAMETER_TYPE_ARRAY:
+ stp_set_array_parameter(v, p->name, desc.deflt.array);
+ stp_set_array_parameter_active(v, p->name, STP_PARAMETER_ACTIVE);
+ break;
+ default:
+ break;
+ }
+ stp_parameter_description_destroy(&desc);
+ }
+ }
+ stp_parameter_list_destroy(params);
+}
+
+void
+stp_set_printer_defaults(stp_vars_t *v, const stp_printer_t *printer)
+{
+ stp_set_driver(v, stp_printer_get_driver(printer));
+ set_printer_defaults(v, 0);
+}
+
+void
+stp_initialize_printer_defaults(void)
+{
+ stp_list_item_t *printer_item;
+ if (printer_list == NULL)
+ {
+ stpi_init_printer_list();
+ stp_deprintf
+ (STP_DBG_PRINTERS,
+ "stpi_family_register(): initialising printer_list...\n");
+ }
+ printer_item = stp_list_get_start(printer_list);
+ while (printer_item)
+ {
+ set_printer_defaults
+ (((stp_printer_t *)(stp_list_item_get_data(printer_item)))->printvars, 1);
+ printer_item = stp_list_item_next(printer_item);
+ }
+}
+
+void
+stp_get_media_size(const stp_vars_t *v, int *width, int *height)
+{
+ const stp_printfuncs_t *printfuncs =
+ stpi_get_printfuncs(stp_get_printer(v));
+ (printfuncs->media_size)(v, width, height);
+}
+
+void
+stp_get_imageable_area(const stp_vars_t *v,
+ int *left, int *right, int *bottom, int *top)
+{
+ const stp_printfuncs_t *printfuncs =
+ stpi_get_printfuncs(stp_get_printer(v));
+ (printfuncs->imageable_area)(v, left, right, bottom, top);
+}
+
+void
+stp_get_size_limit(const stp_vars_t *v, int *max_width, int *max_height,
+ int *min_width, int *min_height)
+{
+ const stp_printfuncs_t *printfuncs =
+ stpi_get_printfuncs(stp_get_printer(v));
+ (printfuncs->limit)(v, max_width, max_height, min_width,min_height);
+}
+
+void
+stp_describe_resolution(const stp_vars_t *v, int *x, int *y)
+{
+ const stp_printfuncs_t *printfuncs =
+ stpi_get_printfuncs(stp_get_printer(v));
+ (printfuncs->describe_resolution)(v, x, y);
+}
+
+const char *
+stp_describe_output(const stp_vars_t *v)
+{
+ const stp_printfuncs_t *printfuncs =
+ stpi_get_printfuncs(stp_get_printer(v));
+ return (printfuncs->describe_output)(v);
+}
+
+int
+stp_verify(stp_vars_t *v)
+{
+ const stp_printfuncs_t *printfuncs =
+ stpi_get_printfuncs(stp_get_printer(v));
+ stp_vars_t *nv = stp_vars_create_copy(v);
+ int status;
+ stp_prune_inactive_options(nv);
+ status = (printfuncs->verify)(nv);
+ stp_set_verified(v, stp_get_verified(nv));
+ stp_vars_destroy(nv);
+ return status;
+}
+
+int
+stp_print(const stp_vars_t *v, stp_image_t *image)
+{
+ const stp_printfuncs_t *printfuncs =
+ stpi_get_printfuncs(stp_get_printer(v));
+ return (printfuncs->print)(v, image);
+}
+
+int
+stp_start_job(const stp_vars_t *v, stp_image_t *image)
+{
+ const stp_printfuncs_t *printfuncs =
+ stpi_get_printfuncs(stp_get_printer(v));
+ if (!stp_get_string_parameter(v, "JobMode") ||
+ strcmp(stp_get_string_parameter(v, "JobMode"), "Page") == 0)
+ return 1;
+ if (printfuncs->start_job)
+ return (printfuncs->start_job)(v, image);
+ else
+ return 1;
+}
+
+int
+stp_end_job(const stp_vars_t *v, stp_image_t *image)
+{
+ const stp_printfuncs_t *printfuncs =
+ stpi_get_printfuncs(stp_get_printer(v));
+ if (!stp_get_string_parameter(v, "JobMode") ||
+ strcmp(stp_get_string_parameter(v, "JobMode"), "Page") == 0)
+ return 1;
+ if (printfuncs->end_job)
+ return (printfuncs->end_job)(v, image);
+ else
+ return 1;
+}
+
+static int
+verify_string_param(const stp_vars_t *v, const char *parameter,
+ stp_parameter_t *desc, int quiet)
+{
+ stp_parameter_verify_t answer = PARAMETER_OK;
+ stp_dprintf(STP_DBG_VARS, v, " Verifying string %s\n", parameter);
+ if (desc->is_mandatory ||
+ stp_check_string_parameter(v, parameter, STP_PARAMETER_ACTIVE))
+ {
+ const char *checkval = stp_get_string_parameter(v, parameter);
+ stp_string_list_t *vptr = desc->bounds.str;
+ size_t count = 0;
+ int i;
+ stp_dprintf(STP_DBG_VARS, v, " value %s\n",
+ checkval ? checkval : "(null)");
+ if (vptr)
+ count = stp_string_list_count(vptr);
+ answer = PARAMETER_BAD;
+ if (checkval == NULL)
+ {
+ if (count == 0)
+ answer = PARAMETER_OK;
+ else
+ {
+ if (!quiet)
+ stp_eprintf(v, _("Value must be set for %s\n"), parameter);
+ answer = PARAMETER_BAD;
+ }
+ }
+ else if (count > 0)
+ {
+ for (i = 0; i < count; i++)
+ if (!strcmp(checkval, stp_string_list_param(vptr, i)->name))
+ {
+ answer = PARAMETER_OK;
+ break;
+ }
+ if (!answer && !quiet)
+ stp_eprintf(v, _("`%s' is not a valid %s\n"), checkval, parameter);
+ }
+ else if (strlen(checkval) == 0)
+ answer = PARAMETER_OK;
+ else if (!quiet)
+ stp_eprintf(v, _("`%s' is not a valid %s\n"), checkval, parameter);
+ }
+ stp_parameter_description_destroy(desc);
+ return answer;
+}
+
+static int
+verify_double_param(const stp_vars_t *v, const char *parameter,
+ stp_parameter_t *desc, int quiet)
+{
+ stp_dprintf(STP_DBG_VARS, v, " Verifying double %s\n", parameter);
+ if (desc->is_mandatory ||
+ stp_check_float_parameter(v, parameter, STP_PARAMETER_ACTIVE))
+ {
+ double checkval = stp_get_float_parameter(v, parameter);
+ if (checkval < desc->bounds.dbl.lower ||
+ checkval > desc->bounds.dbl.upper)
+ {
+ if (!quiet)
+ stp_eprintf(v, _("%s must be between %f and %f (is %f)\n"),
+ parameter, desc->bounds.dbl.lower,
+ desc->bounds.dbl.upper, checkval);
+ return PARAMETER_BAD;
+ }
+ }
+ return PARAMETER_OK;
+}
+
+static int
+verify_int_param(const stp_vars_t *v, const char *parameter,
+ stp_parameter_t *desc, int quiet)
+{
+ stp_dprintf(STP_DBG_VARS, v, " Verifying int %s\n", parameter);
+ if (desc->is_mandatory ||
+ stp_check_int_parameter(v, parameter, STP_PARAMETER_ACTIVE))
+ {
+ int checkval = stp_get_int_parameter(v, parameter);
+ if (checkval < desc->bounds.integer.lower ||
+ checkval > desc->bounds.integer.upper)
+ {
+ if (!quiet)
+ stp_eprintf(v, _("%s must be between %d and %d (is %d)\n"),
+ parameter, desc->bounds.integer.lower,
+ desc->bounds.integer.upper, checkval);
+ stp_parameter_description_destroy(desc);
+ return PARAMETER_BAD;
+ }
+ }
+ stp_parameter_description_destroy(desc);
+ return PARAMETER_OK;
+}
+
+static int
+verify_dimension_param(const stp_vars_t *v, const char *parameter,
+ stp_parameter_t *desc, int quiet)
+{
+ stp_dprintf(STP_DBG_VARS, v, " Verifying dimension %s\n", parameter);
+ if (desc->is_mandatory ||
+ stp_check_dimension_parameter(v, parameter, STP_PARAMETER_ACTIVE))
+ {
+ int checkval = stp_get_dimension_parameter(v, parameter);
+ if (checkval < desc->bounds.dimension.lower ||
+ checkval > desc->bounds.dimension.upper)
+ {
+ if (!quiet)
+ stp_eprintf(v, _("%s must be between %d and %d (is %d)\n"),
+ parameter, desc->bounds.dimension.lower,
+ desc->bounds.dimension.upper, checkval);
+ stp_parameter_description_destroy(desc);
+ return PARAMETER_BAD;
+ }
+ }
+ stp_parameter_description_destroy(desc);
+ return PARAMETER_OK;
+}
+
+static int
+verify_curve_param(const stp_vars_t *v, const char *parameter,
+ stp_parameter_t *desc, int quiet)
+{
+ stp_parameter_verify_t answer = 1;
+ stp_dprintf(STP_DBG_VARS, v, " Verifying curve %s\n", parameter);
+ if (desc->bounds.curve &&
+ (desc->is_mandatory ||
+ stp_check_curve_parameter(v, parameter, STP_PARAMETER_ACTIVE)))
+ {
+ const stp_curve_t *checkval = stp_get_curve_parameter(v, parameter);
+ if (checkval)
+ {
+ double u0, l0;
+ double u1, l1;
+ stp_curve_get_bounds(checkval, &l0, &u0);
+ stp_curve_get_bounds(desc->bounds.curve, &l1, &u1);
+ if (u0 > u1 || l0 < l1)
+ {
+ if (!quiet)
+ stp_eprintf(v, _("%s bounds must be between %f and %f\n"),
+ parameter, l1, u1);
+ answer = PARAMETER_BAD;
+ }
+ if (stp_curve_get_wrap(checkval) !=
+ stp_curve_get_wrap(desc->bounds.curve))
+ {
+ if (!quiet)
+ stp_eprintf(v, _("%s wrap mode must be %s\n"),
+ parameter,
+ (stp_curve_get_wrap(desc->bounds.curve) ==
+ STP_CURVE_WRAP_NONE) ?
+ _("no wrap") : _("wrap around"));
+ answer = PARAMETER_BAD;
+ }
+ }
+ }
+ stp_parameter_description_destroy(desc);
+ return answer;
+}
+
+stp_parameter_verify_t
+stp_verify_parameter(const stp_vars_t *v, const char *parameter,
+ int quiet)
+{
+ stp_parameter_t desc;
+ quiet = 0;
+ stp_describe_parameter(v, parameter, &desc);
+ stp_dprintf(STP_DBG_VARS, v, " Verifying %s %d %d\n", parameter,
+ desc.is_active, desc.read_only);
+ if (!desc.is_active || desc.read_only)
+ {
+ stp_parameter_description_destroy(&desc);
+ return PARAMETER_INACTIVE;
+ }
+ switch (desc.p_type)
+ {
+ case STP_PARAMETER_TYPE_STRING_LIST:
+ return verify_string_param(v, parameter, &desc, quiet);
+ case STP_PARAMETER_TYPE_DOUBLE:
+ return verify_double_param(v, parameter, &desc, quiet);
+ case STP_PARAMETER_TYPE_INT:
+ return verify_int_param(v, parameter, &desc, quiet);
+ case STP_PARAMETER_TYPE_DIMENSION:
+ return verify_dimension_param(v, parameter, &desc, quiet);
+ case STP_PARAMETER_TYPE_CURVE:
+ return verify_curve_param(v, parameter, &desc, quiet);
+ case STP_PARAMETER_TYPE_RAW:
+ case STP_PARAMETER_TYPE_FILE:
+ stp_parameter_description_destroy(&desc);
+ return PARAMETER_OK; /* No way to verify this here */
+ case STP_PARAMETER_TYPE_BOOLEAN:
+ stp_parameter_description_destroy(&desc);
+ return PARAMETER_OK; /* Booleans always OK */
+ default:
+ if (!quiet)
+ stp_eprintf(v, _("Unknown type parameter %s (%d)\n"),
+ parameter, desc.p_type);
+ stp_parameter_description_destroy(&desc);
+ return 0;
+ }
+}
+
+#define CHECK_INT_RANGE(v, component, min, max) \
+do \
+{ \
+ if (stp_get_##component((v)) < (min) || stp_get_##component((v)) > (max)) \
+ { \
+ answer = 0; \
+ stp_eprintf(v, _("%s out of range (value %d, min %d, max %d)\n"), \
+ #component, stp_get_##component(v), min, max); \
+ } \
+} while (0)
+
+#define CHECK_INT_RANGE_INTERNAL(v, component, min, max) \
+do \
+{ \
+ if (stpi_get_##component((v)) < (min) || stpi_get_##component((v)) > (max)) \
+ { \
+ answer = 0; \
+ stp_eprintf(v, _("%s out of range (value %d, min %d, max %d)\n"), \
+ #component, stpi_get_##component(v), min, max); \
+ } \
+} while (0)
+
+typedef struct
+{
+ char *data;
+ size_t bytes;
+} errbuf_t;
+
+static void
+fill_buffer_writefunc(void *priv, const char *buffer, size_t bytes)
+{
+ errbuf_t *errbuf = (errbuf_t *) priv;
+ if (errbuf->bytes == 0)
+ errbuf->data = stp_malloc(bytes + 1);
+ else
+ errbuf->data = stp_realloc(errbuf->data, errbuf->bytes + bytes + 1);
+ memcpy(errbuf->data + errbuf->bytes, buffer, bytes);
+ errbuf->bytes += bytes;
+ errbuf->data[errbuf->bytes] = '\0';
+}
+
+int
+stp_verify_printer_params(stp_vars_t *v)
+{
+ errbuf_t errbuf;
+ stp_outfunc_t ofunc = stp_get_errfunc(v);
+ void *odata = stp_get_errdata(v);
+
+ stp_parameter_list_t params;
+ int nparams;
+ int i;
+ int answer = 1;
+ int left, top, bottom, right;
+ const char *pagesize = stp_get_string_parameter(v, "PageSize");
+
+ stp_set_errfunc((stp_vars_t *) v, fill_buffer_writefunc);
+ stp_set_errdata((stp_vars_t *) v, &errbuf);
+
+ errbuf.data = NULL;
+ errbuf.bytes = 0;
+
+ if (pagesize && strlen(pagesize) > 0)
+ {
+ if (stp_verify_parameter(v, "PageSize", 0) == 0)
+ answer = 0;
+ }
+ else
+ {
+ int width, height, min_height, min_width;
+ stp_get_size_limit(v, &width, &height, &min_width, &min_height);
+ if (stp_get_page_height(v) <= min_height ||
+ stp_get_page_height(v) > height ||
+ stp_get_page_width(v) <= min_width || stp_get_page_width(v) > width)
+ {
+ answer = 0;
+ stp_eprintf(v, _("Page size is not valid\n"));
+ }
+ stp_dprintf(STP_DBG_PAPER, v,
+ "page size max %d %d min %d %d actual %d %d\n",
+ width, height, min_width, min_height,
+ stp_get_page_width(v), stp_get_page_height(v));
+ }
+
+ stp_get_imageable_area(v, &left, &right, &bottom, &top);
+
+ stp_dprintf(STP_DBG_PAPER, v,
+ "page left %d top %d right %d bottom %d\n",
+ left, top, right, bottom);
+ stp_dprintf(STP_DBG_PAPER, v,
+ "requested left %d top %d width %d height %d\n",
+ stp_get_left(v), stp_get_top(v),
+ stp_get_width(v), stp_get_height(v));
+
+ if (stp_get_top(v) < top)
+ {
+ answer = 0;
+ stp_eprintf(v, _("Top margin must not be less than %d\n"), top);
+ }
+
+ if (stp_get_left(v) < left)
+ {
+ answer = 0;
+ stp_eprintf(v, _("Left margin must not be less than %d\n"), left);
+ }
+
+ if (stp_get_height(v) <= 0)
+ {
+ answer = 0;
+ stp_eprintf(v, _("Height must be greater than zero\n"));
+ }
+
+ if (stp_get_width(v) <= 0)
+ {
+ answer = 0;
+ stp_eprintf(v, _("Width must be greater than zero\n"));
+ }
+
+ if (stp_get_left(v) + stp_get_width(v) > right)
+ {
+ answer = 0;
+ stp_eprintf(v, _("Image is too wide for the page: left margin is %d, width %d, right edge is %d\n"),
+ stp_get_left(v), stp_get_width(v), right);
+ }
+
+ if (stp_get_top(v) + stp_get_height(v) > bottom)
+ {
+ answer = 0;
+ stp_eprintf(v, _("Image is too long for the page: top margin is %d, height %d, bottom edge is %d\n"),
+ stp_get_top(v), stp_get_height(v), bottom);
+ }
+
+ params = stp_get_parameter_list(v);
+ nparams = stp_parameter_list_count(params);
+ for (i = 0; i < nparams; i++)
+ {
+ const stp_parameter_t *param = stp_parameter_list_param(params, i);
+ stp_dprintf(STP_DBG_VARS, v, "Checking %s %d %d\n", param->name,
+ param->is_active, param->verify_this_parameter);
+
+ if (strcmp(param->name, "PageSize") != 0 &&
+ param->is_active && param->verify_this_parameter &&
+ stp_verify_parameter(v, param->name, 0) == 0)
+ answer = 0;
+ }
+ stp_parameter_list_destroy(params);
+ stp_set_errfunc((stp_vars_t *) v, ofunc);
+ stp_set_errdata((stp_vars_t *) v, odata);
+ stp_set_verified((stp_vars_t *) v, answer);
+ if (errbuf.bytes > 0)
+ {
+ stp_eprintf(v, "%s", errbuf.data);
+ stp_free(errbuf.data);
+ }
+ return answer;
+}
+
+int
+stp_family_register(stp_list_t *family)
+{
+ stp_list_item_t *printer_item;
+ const stp_printer_t *printer;
+
+ if (printer_list == NULL)
+ {
+ stpi_init_printer_list();
+ stp_deprintf
+ (STP_DBG_PRINTERS,
+ "stpi_family_register(): initialising printer_list...\n");
+ }
+
+ if (family)
+ {
+ printer_item = stp_list_get_start(family);
+
+ while(printer_item)
+ {
+ printer = (const stp_printer_t *) stp_list_item_get_data(printer_item);
+ if (!stp_list_get_item_by_name(printer_list,
+ stp_get_driver(printer->printvars)))
+ stp_list_item_create(printer_list, NULL, printer);
+ printer_item = stp_list_item_next(printer_item);
+ }
+ }
+
+ return 0;
+}
+
+int
+stp_family_unregister(stp_list_t *family)
+{
+ stp_list_item_t *printer_item;
+ stp_list_item_t *old_printer_item;
+ const stp_printer_t *printer;
+
+ if (printer_list == NULL)
+ {
+ stpi_init_printer_list();
+ stp_deprintf
+ (STP_DBG_PRINTERS,
+ "stpi_family_unregister(): initialising printer_list...\n");
+ }
+
+ if (family)
+ {
+ printer_item = stp_list_get_start(family);
+
+ while(printer_item)
+ {
+ printer = (const stp_printer_t *) stp_list_item_get_data(printer_item);
+ old_printer_item =
+ stp_list_get_item_by_name(printer_list,
+ stp_get_driver(printer->printvars));
+
+ if (old_printer_item)
+ stp_list_item_destroy(printer_list, old_printer_item);
+ printer_item = stp_list_item_next(printer_item);
+ }
+ }
+ return 0;
+}
+
+/*
+ * Parse the printer node, and return the generated printer. Returns
+ * NULL on failure.
+ */
+static stp_printer_t*
+stp_printer_create_from_xmltree(stp_mxml_node_t *printer, /* The printer node */
+ const char *family, /* Family name */
+ const stp_printfuncs_t *printfuncs)
+ /* Family printfuncs */
+{
+ stp_mxml_node_t *prop; /* Temporary node pointer */
+ const char *stmp; /* Temporary string */
+ stp_printer_t *outprinter; /* Generated printer */
+ int
+ driver = 0, /* Check driver */
+ long_name = 0;
+
+ outprinter = stp_zalloc(sizeof(stp_printer_t));
+ if (!outprinter)
+ return NULL;
+ outprinter->printvars = stp_vars_create();
+ if (outprinter->printvars == NULL)
+ {
+ stp_free(outprinter);
+ return NULL;
+ }
+
+ stmp = stp_mxmlElementGetAttr(printer, "driver");
+ stp_set_driver(outprinter->printvars, (const char *) stmp);
+
+ outprinter->long_name = stp_strdup(stp_mxmlElementGetAttr(printer, "name"));
+ outprinter->manufacturer = stp_strdup(stp_mxmlElementGetAttr(printer, "manufacturer"));
+ outprinter->model = stp_xmlstrtol(stp_mxmlElementGetAttr(printer, "model"));
+ outprinter->family = stp_strdup((const char *) family);
+
+ if (stp_get_driver(outprinter->printvars))
+ driver = 1;
+ if (outprinter->long_name)
+ long_name = 1;
+
+ outprinter->printfuncs = printfuncs;
+
+ prop = printer->child;
+ while (prop)
+ {
+ if (prop->type == STP_MXML_ELEMENT)
+ {
+ const char *prop_name = prop->value.element.name;
+ if (!strcmp(prop_name, "parameter"))
+ {
+ const char *p_type = stp_mxmlElementGetAttr(prop, "type");
+ const char *p_name = stp_mxmlElementGetAttr(prop, "name");
+ stp_mxml_node_t *child = prop->child;
+ if (!p_type || !p_name)
+ stp_erprintf("Bad property on driver %s\n", outprinter->driver);
+ else if (strcmp(p_type, "float") == 0)
+ {
+ if (child->type == STP_MXML_TEXT)
+ stp_set_float_parameter
+ (outprinter->printvars, p_name,
+ stp_xmlstrtod(child->value.text.string));
+ }
+ else if (strcmp(p_type, "integer") == 0)
+ {
+ if (child->type == STP_MXML_TEXT)
+ stp_set_int_parameter
+ (outprinter->printvars, p_name,
+ (int) stp_xmlstrtol(child->value.text.string));
+ }
+ else if (strcmp(p_type, "boolean") == 0)
+ {
+ if (child->type == STP_MXML_TEXT)
+ stp_set_boolean_parameter
+ (outprinter->printvars, p_name,
+ (int) stp_xmlstrtol(child->value.text.string));
+ }
+ else if (strcmp(p_type, "string") == 0)
+ {
+ if (child->type == STP_MXML_TEXT)
+ stp_set_string_parameter
+ (outprinter->printvars, p_name, child->value.text.string);
+ }
+ else if (strcmp(p_type, "curve") == 0)
+ {
+ stp_curve_t *curve = stp_curve_create_from_xmltree(child);
+ if (curve)
+ {
+ stp_set_curve_parameter(outprinter->printvars,
+ p_name, curve);
+ stp_curve_destroy(curve);
+ }
+ }
+ else if (strcmp(p_type, "array") == 0)
+ {
+ stp_array_t *array = stp_array_create_from_xmltree(child);
+ if (array)
+ {
+ stp_set_array_parameter(outprinter->printvars,
+ p_name, array);
+ stp_array_destroy(array);
+ }
+ }
+ else
+ {
+ stp_erprintf("Bad property %s type %s on driver %s\n",
+ p_name, p_type, outprinter->driver);
+ continue;
+ }
+ }
+ }
+ prop = prop->next;
+ }
+ if (driver && long_name && printfuncs)
+ {
+ if (stp_get_debug_level() & STP_DBG_XML)
+ {
+ stmp = stp_mxmlElementGetAttr(printer, "driver");
+ stp_erprintf("stp_printer_create_from_xmltree: printer: %s\n", stmp);
+ }
+ outprinter->driver = stp_get_driver(outprinter->printvars);
+ return outprinter;
+ }
+ stp_free(outprinter);
+ return NULL;
+}
+
+/*
+ * Parse the <family> node.
+ */
+static void
+stpi_xml_process_family(stp_mxml_node_t *family) /* The family node */
+{
+ stp_list_t *family_module_list = NULL; /* List of valid families */
+ stp_list_item_t *family_module_item; /* Current family */
+ const char *family_name; /* Name of family */
+ stp_mxml_node_t *printer; /* printer child node */
+ stp_module_t *family_module_data; /* Family module data */
+ stp_family_t *family_data = NULL; /* Family data */
+ int family_valid = 0; /* Is family valid? */
+ stp_printer_t *outprinter; /* Generated printer */
+
+ family_module_list = stp_module_get_class(STP_MODULE_CLASS_FAMILY);
+ if (!family_module_list)
+ return;
+
+ family_name = stp_mxmlElementGetAttr(family, "name");
+ family_module_item = stp_list_get_start(family_module_list);
+ while (family_module_item)
+ {
+ family_module_data = (stp_module_t *)
+ stp_list_item_get_data(family_module_item);
+ if (!strcmp(family_name, family_module_data->name))
+ {
+ stp_deprintf(STP_DBG_XML,
+ "stpi_xml_process_family: family module: %s\n",
+ family_module_data->name);
+ family_data = family_module_data->syms;
+ if (family_data->printer_list == NULL)
+ family_data->printer_list = stp_list_create();
+ family_valid = 1;
+ }
+ family_module_item = stp_list_item_next(family_module_item);
+ }
+
+ printer = family->child;
+ while (family_valid && printer)
+ {
+ if (printer->type == STP_MXML_ELEMENT)
+ {
+ const char *printer_name = printer->value.element.name;
+ if (!strcmp(printer_name, "printer"))
+ {
+ outprinter =
+ stp_printer_create_from_xmltree(printer, family_name,
+ family_data->printfuncs);
+ if (outprinter)
+ stp_list_item_create(family_data->printer_list, NULL,
+ outprinter);
+ }
+ }
+ printer = printer->next;
+ }
+
+ stp_list_destroy(family_module_list);
+ return;
+}
+
+/*
+ * Parse the <printdef> node.
+ */
+static int
+stpi_xml_process_printdef(stp_mxml_node_t *printdef, const char *file) /* The printdef node */
+{
+ stp_mxml_node_t *family; /* Family child node */
+
+ family = printdef->child;
+ while (family)
+ {
+ if (family->type == STP_MXML_ELEMENT)
+ {
+ const char *family_name = family->value.element.name;
+ if (!strcmp(family_name, "family"))
+ {
+ stpi_xml_process_family(family);
+ }
+ }
+ family = family->next;
+ }
+ return 1;
+}
+
+void
+stpi_init_printer(void)
+{
+ stp_register_xml_parser("printdef", stpi_xml_process_printdef);
+ stp_register_xml_preload("printers.xml");
+}
diff --git a/src/main/printers.xml b/src/main/printers.xml
index f71dba9..d80efd7 100644
--- a/src/main/printers.xml
+++ b/src/main/printers.xml
@@ -1,1991 +1,1230 @@
-# pseudo-XML description of printers known to the Print plugin
-# This file was originally generated. It should be edited by hand.
-
-# "$Id: printers.xml,v 1.42.2.26 2004/06/09 10:29:59 davehill Exp $"
-
-<printer name="PostScript Level 1" driver="ps">
-<color>
-<model value=0>
-<gamma value=1.000>
-<density value=1.000>
-<language value=ps>
-</printer>
-
-<printer name="PostScript Level 2" driver="ps2">
-<color>
-<model value=1>
-<gamma value=1.000>
-<density value=1.000>
-<language value=ps>
-</printer>
-
-<printer name="CANON BJC 30" driver="bjc-30">
-<color>
-<model value=30>
-<gamma value=2.000>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 50" driver="bjc-50">
-<color>
-<model value=4400>
-<gamma value=0.5>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 55" driver="bjc-55">
-<color>
-<model value=4400>
-<gamma value=0.5>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 80" driver="bjc-80">
-<color>
-<model value=4400>
-<gamma value=0.5>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 85" driver="bjc-85">
-<color>
-<model value=85>
-<gamma value=0.5>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 210" driver="bjc-210">
-<color>
-<model value=210>
-<gamma value=1.000>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 240" driver="bjc-240">
-<color>
-<model value=240>
-<gamma value=1.000>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 250" driver="bjc-250">
-<color>
-<model value=250>
-<gamma value=1.000>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 1000" driver="bjc-1000">
-<color>
-<model value=1000>
-<gamma value=1.000>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 2000" driver="bjc-2000">
-<color>
-<model value=2000>
-<gamma value=1.000>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 3000" driver="bjc-3000">
-<color>
-<model value=3000>
-<gamma value=1.000>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 4300" driver="bjc-4300">
-<color>
-<model value=4300>
-<gamma value=0.750>
-<density value=1.000>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 4400 photo" driver="bjc-4400">
-<color>
-<model value=4400>
-<gamma value=1.000>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 6000" driver="bjc-6000">
-<color>
-<model value=6000>
-<gamma value=0.750>
-<density value=1.000>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 6100" driver="bjc-6100">
-<color>
-<model value=6100>
-<gamma value=1.000>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 6200" driver="bjc-6200">
-<color>
-<model value=6200>
-<gamma value=0.750>
-<density value=1.000>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 6500" driver="bjc-6500">
-<color>
-<model value=6500>
-<gamma value=0.750>
-<density value=1.000>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 7000" driver="bjc-7000">
-<color>
-<model value=7000>
-<gamma value=0.600>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 7100" driver="bjc-7100">
-<color>
-<model value=7100>
-<gamma value=1.000>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON BJC 8200" driver="bjc-8200">
-<color>
-<model value=8200>
-<gamma value=1.000>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON S200" driver="bjc-s200">
-<color>
-# model number 4202 is the USB product ID of the Canon S200x
-<model value=4202>
-<language value=canon>
-</printer>
-
-<printer name="CANON S400" driver="bjc-s400">
-<color>
-<model value=3000>
-<gamma value=1.000>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON S450" driver="bjc-s450">
-<color>
-<model value=6200>
-<gamma value=0.750>
-<density value=1.000>
-<language value=canon>
-</printer>
-
-<printer name="CANON S800" driver="bjc-s800">
-<color>
-<model value=8200>
-<gamma value=1.000>
-<density value=0.800>
-<language value=canon>
-</printer>
-
-<printer name="CANON S4500" driver="bjc-s4500">
-<color>
-<model value=6500>
-<gamma value=0.750>
-<density value=1.000>
-<language value=canon>
-</printer>
-
-<printer name="EPSON Stylus C20SX" driver="escp2-c20sx">
-<color>
-<model value=42>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C20UX" driver="escp2-c20ux">
-<color>
-<model value=42>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C40SX" driver="escp2-c40sx">
-<color>
-<model value=43>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C40UX" driver="escp2-c40ux">
-<color>
-<model value=43>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C41SX" driver="escp2-c41sx">
-<color>
-<model value=43>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C41UX" driver="escp2-c41ux">
-<color>
-<model value=43>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C42SX" driver="escp2-c42sx">
-<color>
-<model value=43>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C42UX" driver="escp2-c42ux">
-<color>
-<model value=43>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C43SX" driver="escp2-c43sx">
-<color>
-<model value=43>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C43UX" driver="escp2-c43ux">
-<color>
-<model value=43>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C44SX" driver="escp2-c44sx">
-<color>
-<model value=43>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C44UX" driver="escp2-c44ux">
-<color>
-<model value=43>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C50" driver="escp2-c50">
-<color>
-<model value=56>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C60" driver="escp2-c60">
-<color>
-<model value=33>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C61" driver="escp2-c61">
-<color>
-<model value=52>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C62" driver="escp2-c62">
-<color>
-<model value=52>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C63" driver="escp2-c63">
-<color>
-<model value=61>
-<gamma value=0.688>
-<density value=1.0>
-<cyan value=0.96>
-<magenta value=1.02>
-<yellow value=1.02>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C64" driver="escp2-c64">
-<color>
-<model value=61>
-<gamma value=0.688>
-<density value=1.0>
-<cyan value=0.96>
-<magenta value=1.02>
-<yellow value=1.02>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C70" driver="escp2-c70">
-<color>
-<model value=44>
-<gamma value=0.688>
-<density value=1.0>
-<cyan value=0.96>
-<magenta value=1.02>
-<yellow value=1.02>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C80" driver="escp2-c80">
-<color>
-<model value=44>
-<gamma value=0.688>
-<density value=1.0>
-<cyan value=0.96>
-<magenta value=1.02>
-<yellow value=1.02>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C82" driver="escp2-c82">
-<color>
-<model value=55>
-<gamma value=0.688>
-<density value=1.0>
-<cyan value=0.96>
-<magenta value=1.02>
-<yellow value=1.02>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C83" driver="escp2-c83">
-<color>
-<model value=60>
-<gamma value=0.688>
-<density value=1.0>
-<cyan value=0.96>
-<magenta value=1.02>
-<yellow value=1.02>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus C84" driver="escp2-c84">
-<color>
-<model value=60>
-<gamma value=0.688>
-<density value=1.0>
-<cyan value=0.96>
-<magenta value=1.02>
-<yellow value=1.02>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color" driver="escp2">
-<color>
-<model value=0>
-<gamma value=0.597>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color Pro" driver="escp2-pro">
-<color>
-<model value=45>
-<gamma value=0.597>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color Pro XL" driver="escp2-pro-xl">
-<color>
-<model value=39>
-<gamma value=0.597>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 400" driver="escp2-400">
-<color>
-<model value=1>
-<gamma value=0.597>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 440" driver="escp2-440">
-<color>
-<model value=10>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 460" driver="escp2-460">
-<color>
-<model value=10>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 480" driver="escp2-480">
-<color>
-<model value=21>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 500" driver="escp2-500">
-<color>
-<model value=1>
-<gamma value=0.597>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 580" driver="escp2-580">
-<color>
-<model value=38>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 600" driver="escp2-600">
-<color>
-<model value=3>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 640" driver="escp2-640">
-<color>
-<model value=11>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 660" driver="escp2-660">
-<color>
-<model value=18>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 670" driver="escp2-670">
-<color>
-<model value=25>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 680" driver="escp2-680">
-<color>
-<model value=32>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 740" driver="escp2-740">
-<color>
-<model value=12>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 760" driver="escp2-760">
-<color>
-<model value=19>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 777" driver="escp2-777">
-<color>
-<model value=32>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 800" driver="escp2-800">
-<color>
-<model value=4>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 850" driver="escp2-850">
-<color>
-<model value=5>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 860" driver="escp2-860">
-<color>
-<model value=16>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 880" driver="escp2-880">
-<color>
-<model value=33>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 83" driver="escp2-83">
-<color>
-<model value=33>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 900" driver="escp2-900">
-<color>
-<model value=13>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 980" driver="escp2-980">
-<color>
-<model value=34>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 1160" driver="escp2-1160">
-<color>
-<model value=17>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 1500" driver="escp2-1500">
-<color>
-<model value=2>
-<gamma value=0.597>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 1520" driver="escp2-1520">
-<color>
-<model value=6>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Color 3000" driver="escp2-3000">
-<color>
-<model value=24>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo" driver="escp2-photo">
-<color>
-<model value=9>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 700" driver="escp2-700">
-<color>
-<model value=7>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo EX" driver="escp2-ex">
-<color>
-<model value=8>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo EX3" driver="escp2-ex3">
-<color>
-<model value=54>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 720" driver="escp2-720">
-<color>
-<model value=20>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 750" driver="escp2-750">
-<color>
-<model value=14>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 780" driver="escp2-780">
-<color>
-<model value=35>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-# Note that the 785EPX has a roll feed holder. It's more like the 890
-# than the 780, despite the name.
-<printer name="EPSON Stylus Photo 785EPX" driver="escp2-785">
-<color>
-<model value=36>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 790" driver="escp2-790">
-<color>
-<model value=35>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 810" driver="escp2-810">
-<color>
-<model value=35>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 820" driver="escp2-820">
-<color>
-<model value=35>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 825" driver="escp2-825">
-<color>
-<model value=50>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 830" driver="escp2-830">
-<color>
-<model value=50>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 870" driver="escp2-870">
-<color>
-<model value=22>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 875" driver="escp2-875">
-<color>
-<model value=22>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 890" driver="escp2-890">
-<color>
-<model value=36>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 895" driver="escp2-895">
-<color>
-<model value=36>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 900" driver="escp2-ph900">
-<color>
-<model value=62>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 915" driver="escp2-915">
-<color>
-<model value=36>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 925" driver="escp2-925">
-<color>
-<model value=51>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 935" driver="escp2-935">
-<color>
-<model value=51>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 950" driver="escp2-950">
-<color>
-<model value=46>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 960" driver="escp2-960">
-<color>
-<model value=46>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 1200" driver="escp2-1200">
-<color>
-<model value=15>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 1270" driver="escp2-1270">
-<color>
-<model value=23>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 1280" driver="escp2-1280">
-<color>
-<model value=37>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 1290" driver="escp2-1290">
-<color>
-<model value=37>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 2000P" driver="escp2-2000">
-<color>
-<model value=26>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 2100" driver="escp2-2100">
-<color>
-<model value=47>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo 2200" driver="escp2-2200">
-<color>
-<model value=47>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo R200" driver="escp2-r200">
-<color>
-<model value=63>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo R300" driver="escp2-r300">
-<color>
-<model value=63>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo RX500" driver="escp2-rx500">
-<color>
-<model value=63>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Photo RX600" driver="escp2-rx600">
-<color>
-<model value=63>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Pro 5000" driver="escp2-5000">
-<color>
-<model value=27>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Pro 5500" driver="escp2-5500">
-<color>
-<model value=40>
-<cyan value=0.8>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Pro 7000" driver="escp2-7000">
-<color>
-<model value=28>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Pro 7500" driver="escp2-7500">
-<color>
-<model value=29>
-<cyan value=0.8>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Pro 7600" driver="escp2-7600">
-<color>
-<model value=48>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Pro 9000" driver="escp2-9000">
-<color>
-<model value=30>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Pro 9500" driver="escp2-9500">
-<color>
-<model value=31>
-<cyan value=0.8>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Pro 9600" driver="escp2-9600">
-<color>
-<model value=49>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Pro 10000" driver="escp2-10000">
-<color>
-<model value=41>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Scan 2000" driver="escp2-scan2000">
-<color>
-<model value=12>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus Scan 2500" driver="escp2-scan2500">
-<color>
-<model value=12>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus CX-3100" driver="escp2-cx3100">
-<color>
-<model value=52>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus CX-3200" driver="escp2-cx3200">
-<color>
-<model value=52>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus CX-5100" driver="escp2-cx5100">
-<color>
-<model value=55>
-<gamma value=0.688>
-<density value=1.0>
-<cyan value=0.96>
-<magenta value=1.02>
-<yellow value=1.02>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus CX-5200" driver="escp2-cx5200">
-<color>
-<model value=55>
-<gamma value=0.688>
-<density value=1.0>
-<cyan value=0.96>
-<magenta value=1.02>
-<yellow value=1.02>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus CX-5300" driver="escp2-cx5300">
-<color>
-<model value=55>
-<gamma value=0.688>
-<density value=1.0>
-<cyan value=0.96>
-<magenta value=1.02>
-<yellow value=1.02>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus CX-5400" driver="escp2-cx5400">
-<color>
-<model value=55>
-<gamma value=0.688>
-<density value=1.0>
-<cyan value=0.96>
-<magenta value=1.02>
-<yellow value=1.02>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus CX-6300" driver="escp2-cx6300">
-<color>
-<model value=60>
-<gamma value=0.688>
-<density value=1.0>
-<cyan value=0.96>
-<magenta value=1.02>
-<yellow value=1.02>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus CX-6400" driver="escp2-cx6400">
-<color>
-<model value=60>
-<gamma value=0.688>
-<density value=1.0>
-<cyan value=0.96>
-<magenta value=1.02>
-<yellow value=1.02>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus CX-8300" driver="escp2-cx8300">
-<color>
-<model value=60>
-<gamma value=0.688>
-<density value=1.0>
-<cyan value=0.96>
-<magenta value=1.02>
-<yellow value=1.02>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON Stylus CX-8400" driver="escp2-cx8400">
-<color>
-<model value=60>
-<gamma value=0.688>
-<density value=1.0>
-<cyan value=0.96>
-<magenta value=1.02>
-<yellow value=1.02>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON CL-700" driver="escp2-cl700">
-<color>
-<model value=38>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON CL-750" driver="escp2-cl750">
-<color>
-<model value=43>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON CL-760" driver="escp2-cl760">
-<color>
-<model value=56>
-<gamma value=0.585>
-<density value=1.0>
-<magenta value=0.95>
-<yellow value=0.9>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON EM-900C" driver="escp2-em900c">
-<color>
-<model value=13>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON EM-930C" driver="escp2-em930c">
-<color>
-<model value=34>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON MC-2000" driver="escp2-mc2000">
-<color>
-<model value=26>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON MC-5000" driver="escp2-mc5000">
-<color>
-<model value=40>
-<cyan value=0.8>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON MC-7000" driver="escp2-mc7000">
-<color>
-<model value=29>
-<cyan value=0.8>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON MC-9000" driver="escp2-mc9000">
-<color>
-<model value=31>
-<cyan value=0.8>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON MC-10000" driver="escp2-mc10000">
-<color>
-<model value=41>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON MJ-930C" driver="escp2-mj930c">
-<color>
-<model value=4>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON MJ-5100C" driver="escp2-mj5100c">
-<color>
-<model value=39>
-<gamma value=0.597>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON MJ-6000C" driver="escp2-mj6000c">
-<color>
-<model value=6>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON MJ-8000C" driver="escp2-mj8000c">
-<color>
-<model value=24>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-700C" driver="escp2-pm700c">
-<color>
-<model value=9>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-730C" driver="escp2-pm730c">
-<color>
-<model value=35>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-740C" driver="escp2-pm740c">
-<color>
-<model value=35>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-750C" driver="escp2-pm750c">
-<color>
-<model value=7>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-760C" driver="escp2-pm760c">
-<color>
-<model value=20>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-770C" driver="escp2-pm770c">
-<color>
-<model value=14>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-780C" driver="escp2-pm780c">
-<color>
-<model value=35>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-790PT" driver="escp2-pm790pt">
-<color>
-<model value=36>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-800C" driver="escp2-pm800c">
-<color>
-<model value=22>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-850PT" driver="escp2-pm850pt">
-<color>
-<model value=51>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-870C" driver="escp2-pm870c">
-<color>
-<model value=36>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-880C" driver="escp2-pm880c">
-<color>
-<model value=36>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-930C" driver="escp2-pm930c">
-<color>
-<model value=58>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-950C" driver="escp2-pm950c">
-<color>
-<model value=53>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-970C" driver="escp2-pm970c">
-<color>
-<model value=57>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-2000C" driver="escp2-pm2000c">
-<color>
-<model value=8>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-2200C" driver="escp2-pm2200c">
-<color>
-<model value=54>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-3000C" driver="escp2-pm3000c">
-<color>
-<model value=15>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-3300C" driver="escp2-pm3300c">
-<color>
-<model value=23>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-3500C" driver="escp2-pm3500c">
-<color>
-<model value=37>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-3700C" driver="escp2-pm3700c">
-<color>
-<model value=37>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-4000PX" driver="escp2-pm4000px">
-<color>
-<model value=47>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-5000C" driver="escp2-pm5000c">
-<color>
-<model value=27>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-7000C" driver="escp2-pm7000c">
-<color>
-<model value=28>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-9000C" driver="escp2-pm9000c">
-<color>
-<model value=30>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-10000" driver="escp2-pm10000">
-<color>
-<model value=41>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-D750" driver="escp2-pmd750">
-<color>
-<model value=63>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PM-G700" driver="escp2-pmg700">
-<color>
-<model value=63>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PX-V500" driver="escp2-pxv500">
-<color>
-<model value=61>
-<gamma value=0.688>
-<density value=1.0>
-<cyan value=0.96>
-<magenta value=1.02>
-<yellow value=1.02>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PX-7000" driver="escp2-px7000">
-<color>
-<model value=48>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="EPSON PX-9000" driver="escp2-px9000">
-<color>
-<model value=49>
-<gamma value=0.585>
-<density value=1.0>
-<language value=escp2>
-</printer>
-
-<printer name="APPLE Color StyleWriter 4100" driver="pcl-apple-4100">
-<color>
-<model value=601> # Uses 600 series driver
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="APPLE Color StyleWriter 4500" driver="pcl-apple-4500">
-<color>
-<model value=690> # Uses 690 driver
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="APPLE Color StyleWriter 6500" driver="pcl-apple-6500">
-<color>
-<model value=800> # Uses 850 driver
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 340" driver="pcl-340">
-<color>
-<model value=340>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 400" driver="pcl-400">
-<color>
-<model value=400>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 500" driver="pcl-500">
-<nocolor>
-<model value=500>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DesignJet 230" driver="pcl-desnj-230">
-<nocolor>
-<model value=10230>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DesignJet 250C" driver="pcl-desnj-250">
-<color>
-<model value=10250>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DesignJet 700" driver="pcl-desnj-700">
-<nocolor>
-<model value=10700>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DesignJet 750C" driver="pcl-750">
-<color>
-<model value=10750>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DesignJet 2500C" driver="pcl-desnj-2500">
-<color>
-<model value=12500>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DesignJet 3500C" driver="pcl-desnj-3500">
-<color>
-<model value=13500>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DesignJet 430" driver="pcl-desnj-430">
-<nocolor>
-<model value=10230>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DesignJet 450C" driver="pcl-desnj-450">
-<color>
-<model value=10250>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DesignJet 455CA" driver="pcl-desnj-455">
-<color>
-<model value=10250>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DesignJet 488CA" driver="pcl-desnj-488">
-<color>
-<model value=10250>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 500C" driver="pcl-501">
-<color>
-<model value=501>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 520" driver="pcl-520">
-<nocolor>
-<model value=500>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 540C" driver="pcl-540">
-<color>
-<model value=540>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 550C" driver="pcl-550">
-<color>
-<model value=550>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 560C" driver="pcl-560">
-<color>
-<model value=550>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 600/600C" driver="pcl-600">
-<color>
-<model value=600>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 600 series" driver="pcl-601">
-<color>
-<model value=601>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 690 series" driver="pcl-690">
-<color>
-<model value=690>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 810C" driver="pcl-810">
-<color>
-<model value=840> # Uses 840 driver
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 812C" driver="pcl-812">
-<color>
-<model value=840> # Uses 840 driver
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 840C" driver="pcl-840">
-<color>
-<model value=840> # Uses 840 driver
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 842C" driver="pcl-842">
-<color>
-<model value=840> # Uses 840 driver
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 845C" driver="pcl-845">
-<color>
-<model value=840> # Uses 840 driver
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 850C" driver="pcl-850">
-<color>
-<model value=800>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 855C" driver="pcl-855">
-<color>
-<model value=800>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 870C" driver="pcl-870">
-<color>
-<model value=800>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 890C" driver="pcl-890">
-<color>
-<model value=800>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 895C" driver="pcl-895">
-<color>
-<model value=840> # Uses 840 driver
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 900 series" driver="pcl-900">
-<color>
-<model value=900>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 1100C" driver="pcl-1100">
-<color>
-<model value=1100>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 1120C" driver="pcl-1120">
-<color>
-<model value=1100>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 1200C" driver="pcl-1200">
-<color>
-<model value=1200>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 1220C" driver="pcl-1220">
-<color>
-<model value=901> # Uses 900 series driver (large)
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 1600C" driver="pcl-1600">
-<color>
-<model value=1600>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 2000 series" driver="pcl-2000">
-<color>
-<model value=2000>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP DeskJet 2500 series" driver="pcl-2500">
-<color>
-<model value=2500>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP PhotoSmart P1000" driver="pcl-P1000">
-<color>
-<model value=900> # Uses 900 series driver
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP PhotoSmart P1100" driver="pcl-P1100">
-<color>
-<model value=900> # Uses 900 series driver
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="HP LaserJet II series" driver="pcl-2">
-<nocolor>
-<model value=2>
-<gamma value=1.000>
-<density value=1.000>
-<language value=pcl>
-</printer>
-
-<printer name="HP LaserJet IIP series" driver="pcl-2p">
-<nocolor>
-<model value=21>
-<gamma value=1.000>
-<density value=1.000>
-<language value=pcl>
-</printer>
-
-<printer name="HP LaserJet III series" driver="pcl-3">
-<nocolor>
-<model value=3>
-<gamma value=1.000>
-<density value=1.000>
-<language value=pcl>
-</printer>
-
-<printer name="HP LaserJet 4 series" driver="pcl-4">
-<nocolor>
-<model value=6>
-<gamma value=1.000>
-<density value=1.000>
-<language value=pcl>
-</printer>
-
-<printer name="HP LaserJet 4L" driver="pcl-4l">
-<nocolor>
-<model value=4>
-<gamma value=1.000>
-<density value=1.000>
-<language value=pcl>
-</printer>
-
-<printer name="HP LaserJet 4V, 4Si" driver="pcl-4v">
-<nocolor>
-<model value=5>
-<gamma value=1.000>
-<density value=1.000>
-<language value=pcl>
-</printer>
-
-<printer name="HP LaserJet 5 series" driver="pcl-5">
-<nocolor>
-<model value=6>
-<gamma value=1.000>
-<density value=1.000>
-<language value=pcl>
-</printer>
-
-<printer name="HP LaserJet 5Si" driver="pcl-5si">
-<nocolor>
-<model value=7>
-<gamma value=1.000>
-<density value=1.000>
-<language value=pcl>
-</printer>
-
-<printer name="HP LaserJet 6 series" driver="pcl-6">
-<nocolor>
-<model value=6>
-<gamma value=1.000>
-<density value=1.000>
-<language value=pcl>
-</printer>
-
-<printer name="LEXMARK 4076" driver="lexmark-4076">
-<nocolor>
-<model value=500>
-<gamma value=0.818>
-<density value=0.786>
-<language value=pcl>
-</printer>
-
-<printer name="LEXMARK Z42" driver="lexmark-z42">
-<color>
-<model value=10042>
-<gamma value=0.5>
-<density value=2.0>
-<magenta value=0.95>
-<yellow value=1.0>
-<language value=lexmark>
-</printer>
-
-<printer name="LEXMARK Z43" driver="lexmark-z43">
-<color>
-<model value=10042>
-<gamma value=0.5>
-<density value=2.0>
-<magenta value=0.95>
-<yellow value=1.0>
-<language value=lexmark>
-</printer>
-
-<printer name="LEXMARK Z52" driver="lexmark-z52">
-<color>
-<model value=10052>
-<gamma value=0.5>
-<density value=2.0>
-<magenta value=0.95>
-<yellow value=1.0>
-<language value=lexmark>
-</printer>
-
-<printer name="LEXMARK Z53" driver="lexmark-z53">
-<color>
-<model value=10052>
-<gamma value=0.5>
-<density value=2.0>
-<magenta value=0.95>
-<yellow value=1.0>
-<language value=lexmark>
-</printer>
+<?xml version="1.0"?>
+
+<!--
+ XML description of printers known to libgutenprint
+ This file was originally generated. It should be edited by hand.
+
+ "$Id: printers.xml,v 1.122 2005/06/25 21:40:27 rlk Exp $"
+-->
+
+<gutenprint xmlns="http://gimp-print.sourceforge.net/xsd/gp.xsd-1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://gimp-print.sourceforge.net/xsd/gp.xsd-1.0 gutenprint.xsd">
+ <printdef>
+ <family name="ps">
+ <printer name="PostScript Level 1" driver="ps" manufacturer="Adobe" model="0">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ <printer name="PostScript Level 2" driver="ps2" manufacturer="Adobe" model="1">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ </family>
+ <family name="canon">
+ <printer name="Canon BJC 30" driver="bjc-30" manufacturer="Canon" model="30">
+ <parameter type="float" name="Gamma">2.000</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon BJC 50" driver="bjc-50" manufacturer="Canon" model="4400">
+ <parameter type="float" name="Gamma">0.5</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon BJC 55" driver="bjc-55" manufacturer="Canon" model="4400">
+ <parameter type="float" name="Gamma">0.5</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon BJC 80" driver="bjc-80" manufacturer="Canon" model="4400">
+ <parameter type="float" name="Gamma">0.5</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon BJC 85" driver="bjc-85" manufacturer="Canon" model="85">
+ <parameter type="float" name="Gamma">0.5</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon BJC 210" driver="bjc-210" manufacturer="Canon" model="210">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon BJC 240" driver="bjc-240" manufacturer="Canon" model="240">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon BJC 250" driver="bjc-250" manufacturer="Canon" model="250">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon BJC 1000" driver="bjc-1000" manufacturer="Canon" model="1000">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon BJC 2000" driver="bjc-2000" manufacturer="Canon" model="2000">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon BJC 3000" driver="bjc-3000" manufacturer="Canon" model="3000">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon BJC 4300" driver="bjc-4300" manufacturer="Canon" model="4300">
+ <parameter type="float" name="Gamma">0.750</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ <printer name="Canon BJC 4400 photo" driver="bjc-4400" manufacturer="Canon" model="4400">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon BJC 6000" driver="bjc-6000" manufacturer="Canon" model="6000">
+ <parameter type="float" name="Gamma">0.750</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ <printer name="Canon BJC 6100" driver="bjc-6100" manufacturer="Canon" model="6100">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon BJC 6200" driver="bjc-6200" manufacturer="Canon" model="6200">
+ <parameter type="float" name="Gamma">0.750</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ <printer name="Canon BJC 6500" driver="bjc-6500" manufacturer="Canon" model="6500">
+ <parameter type="float" name="Gamma">0.750</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ <printer name="Canon BJC 7000" driver="bjc-7000" manufacturer="Canon" model="7000">
+ <parameter type="float" name="Gamma">0.600</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon BJC 7100" driver="bjc-7100" manufacturer="Canon" model="7100">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon BJC 8200" driver="bjc-8200" manufacturer="Canon" model="8200">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon S400" driver="bjc-s400" manufacturer="Canon" model="3000">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon S450" driver="bjc-s450" manufacturer="Canon" model="6200">
+ <parameter type="float" name="Gamma">0.750</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ <printer name="Canon S800" driver="bjc-s800" manufacturer="Canon" model="8200">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">0.800</parameter>
+ </printer>
+ <printer name="Canon S4500" driver="bjc-s4500" manufacturer="Canon" model="6500">
+ <parameter type="float" name="Gamma">0.750</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ </family>
+ <family name="escp2">
+ <printer name="EPSON Stylus C20SX" driver="escp2-c20sx" manufacturer="Epson" model="42">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C20UX" driver="escp2-c20ux" manufacturer="Epson" model="42">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C40SX" driver="escp2-c40sx" manufacturer="Epson" model="43">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C40UX" driver="escp2-c40ux" manufacturer="Epson" model="43">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C41SX" driver="escp2-c41sx" manufacturer="Epson" model="43">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C41UX" driver="escp2-c41ux" manufacturer="Epson" model="43">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C42SX" driver="escp2-c42sx" manufacturer="Epson" model="43">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C42UX" driver="escp2-c42ux" manufacturer="Epson" model="43">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C43SX" driver="escp2-c43sx" manufacturer="Epson" model="43">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C43UX" driver="escp2-c43ux" manufacturer="Epson" model="43">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C44SX" driver="escp2-c44sx" manufacturer="Epson" model="43">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C44UX" driver="escp2-c44ux" manufacturer="Epson" model="43">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C45" driver="escp2-c45" manufacturer="Epson" model="43">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C46" driver="escp2-c46" manufacturer="Epson" model="43">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C50" driver="escp2-c50" manufacturer="Epson" model="56">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C60" driver="escp2-c60" manufacturer="Epson" model="33">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C61" driver="escp2-c61" manufacturer="Epson" model="52">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C62" driver="escp2-c62" manufacturer="Epson" model="52">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C63" driver="escp2-c63" manufacturer="Epson" model="61">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C64" driver="escp2-c64" manufacturer="Epson" model="61">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C65" driver="escp2-c65" manufacturer="Epson" model="66">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C66" driver="escp2-c66" manufacturer="Epson" model="66">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C70" driver="escp2-c70" manufacturer="Epson" model="44">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C80" driver="escp2-c80" manufacturer="Epson" model="44">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C82" driver="escp2-c82" manufacturer="Epson" model="55">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C83" driver="escp2-c83" manufacturer="Epson" model="60">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C84" driver="escp2-c84" manufacturer="Epson" model="60">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C85" driver="escp2-c85" manufacturer="Epson" model="69">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus C86" driver="escp2-c86" manufacturer="Epson" model="69">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color" driver="escp2" manufacturer="Epson" model="0">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color Pro" driver="escp2-pro" manufacturer="Epson" model="45">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color Pro XL" driver="escp2-pro-xl" manufacturer="Epson" model="39">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 400" driver="escp2-400" manufacturer="Epson" model="1">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 440" driver="escp2-440" manufacturer="Epson" model="10">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 460" driver="escp2-460" manufacturer="Epson" model="10">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 480" driver="escp2-480" manufacturer="Epson" model="21">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 500" driver="escp2-500" manufacturer="Epson" model="1">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 580" driver="escp2-580" manufacturer="Epson" model="38">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 600" driver="escp2-600" manufacturer="Epson" model="3">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 640" driver="escp2-640" manufacturer="Epson" model="11">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 660" driver="escp2-660" manufacturer="Epson" model="18">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 670" driver="escp2-670" manufacturer="Epson" model="25">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 680" driver="escp2-680" manufacturer="Epson" model="32">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 740" driver="escp2-740" manufacturer="Epson" model="12">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 760" driver="escp2-760" manufacturer="Epson" model="19">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 777" driver="escp2-777" manufacturer="Epson" model="32">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 800" driver="escp2-800" manufacturer="Epson" model="4">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 850" driver="escp2-850" manufacturer="Epson" model="5">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 860" driver="escp2-860" manufacturer="Epson" model="16">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 880" driver="escp2-880" manufacturer="Epson" model="33">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 83" driver="escp2-83" manufacturer="Epson" model="33">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 900" driver="escp2-900" manufacturer="Epson" model="13">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 980" driver="escp2-980" manufacturer="Epson" model="34">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 1160" driver="escp2-1160" manufacturer="Epson" model="17">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 1500" driver="escp2-1500" manufacturer="Epson" model="2">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 1520" driver="escp2-1520" manufacturer="Epson" model="6">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Color 3000" driver="escp2-3000" manufacturer="Epson" model="24">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo" driver="escp2-photo" manufacturer="Epson" model="9">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 700" driver="escp2-700" manufacturer="Epson" model="7">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo EX" driver="escp2-ex" manufacturer="Epson" model="8">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo EX3" driver="escp2-ex3" manufacturer="Epson" model="54">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 720" driver="escp2-720" manufacturer="Epson" model="20">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 750" driver="escp2-750" manufacturer="Epson" model="14">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 780" driver="escp2-780" manufacturer="Epson" model="35">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <!--
+ Note that the 785EPX has a roll feed holder. It's more like the 890
+ than the 780, despite the name.
+ -->
+ <printer name="EPSON Stylus Photo 785EPX" driver="escp2-785" manufacturer="Epson" model="36">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 790" driver="escp2-790" manufacturer="Epson" model="35">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 810" driver="escp2-810" manufacturer="Epson" model="35">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 820" driver="escp2-820" manufacturer="Epson" model="35">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 825" driver="escp2-825" manufacturer="Epson" model="50">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 830" driver="escp2-830" manufacturer="Epson" model="50">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 870" driver="escp2-870" manufacturer="Epson" model="22">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 875" driver="escp2-875" manufacturer="Epson" model="22">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 890" driver="escp2-890" manufacturer="Epson" model="36">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 895" driver="escp2-895" manufacturer="Epson" model="36">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 900" driver="escp2-ph900" manufacturer="Epson" model="62">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 915" driver="escp2-915" manufacturer="Epson" model="36">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 925" driver="escp2-925" manufacturer="Epson" model="51">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 935" driver="escp2-935" manufacturer="Epson" model="36">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 950" driver="escp2-950" manufacturer="Epson" model="46">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 960" driver="escp2-960" manufacturer="Epson" model="46">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 1200" driver="escp2-1200" manufacturer="Epson" model="15">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 1270" driver="escp2-1270" manufacturer="Epson" model="23">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 1280" driver="escp2-1280" manufacturer="Epson" model="37">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 1290" driver="escp2-1290" manufacturer="Epson" model="37">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 2000P" driver="escp2-2000" manufacturer="Epson" model="26">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 2100" driver="escp2-2100" manufacturer="Epson" model="47">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo 2200" driver="escp2-2200" manufacturer="Epson" model="47">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo R200" driver="escp2-r200" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo R210" driver="escp2-r210" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo R300" driver="escp2-r300" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo R310" driver="escp2-r310" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo RX400" driver="escp2-rx400" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo RX420" driver="escp2-rx420" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo RX425" driver="escp2-rx425" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo RX430" driver="escp2-rx430" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo RX500" driver="escp2-rx500" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo RX510" driver="escp2-rx510" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo RX600" driver="escp2-rx600" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo RX620" driver="escp2-rx620" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo RX630" driver="escp2-rx630" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo R800" driver="escp2-r800" manufacturer="Epson" model="64">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Photo R1800" driver="escp2-r1800" manufacturer="Epson" model="67">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Pro 5000" driver="escp2-5000" manufacturer="Epson" model="27">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Pro 5500" driver="escp2-5500" manufacturer="Epson" model="40">
+ <parameter type="float" name="CyanGamma">0.8</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Pro 7000" driver="escp2-7000" manufacturer="Epson" model="28">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Pro 7500" driver="escp2-7500" manufacturer="Epson" model="29">
+ <parameter type="float" name="CyanGamma">0.8</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Pro 7600" driver="escp2-7600" manufacturer="Epson" model="48">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Pro 9000" driver="escp2-9000" manufacturer="Epson" model="30">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Pro 9500" driver="escp2-9500" manufacturer="Epson" model="31">
+ <parameter type="float" name="CyanGamma">0.8</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Pro 9600" driver="escp2-9600" manufacturer="Epson" model="49">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Pro 10000" driver="escp2-10000" manufacturer="Epson" model="41">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Scan 2000" driver="escp2-scan2000" manufacturer="Epson" model="12">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus Scan 2500" driver="escp2-scan2500" manufacturer="Epson" model="12">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX1500" driver="escp2-cx1500" manufacturer="Epson" model="43">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX3100" driver="escp2-cx3100" manufacturer="Epson" model="52">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX3200" driver="escp2-cx3200" manufacturer="Epson" model="52">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX3500" driver="escp2-cx3500" manufacturer="Epson" model="65">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX3600" driver="escp2-cx3600" manufacturer="Epson" model="65">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX3650" driver="escp2-cx3650" manufacturer="Epson" model="65">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX4600" driver="escp2-cx4600" manufacturer="Epson" model="65">
+ <parameter type="float" name="CyanGamma">0.96</parameter>
+ <parameter type="float" name="MagentaGamma">1.02</parameter>
+ <parameter type="float" name="YellowGamma">1.02</parameter>
+ <parameter type="float" name="Gamma">0.459</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX5100" driver="escp2-cx5100" manufacturer="Epson" model="55">
+ <parameter type="float" name="CyanGamma">0.96</parameter>
+ <parameter type="float" name="MagentaGamma">1.02</parameter>
+ <parameter type="float" name="YellowGamma">1.02</parameter>
+ <parameter type="float" name="Gamma">0.459</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX5200" driver="escp2-cx5200" manufacturer="Epson" model="55">
+ <parameter type="float" name="CyanGamma">0.96</parameter>
+ <parameter type="float" name="MagentaGamma">1.02</parameter>
+ <parameter type="float" name="YellowGamma">1.02</parameter>
+ <parameter type="float" name="Gamma">0.459</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX5300" driver="escp2-cx5300" manufacturer="Epson" model="55">
+ <parameter type="float" name="CyanGamma">0.96</parameter>
+ <parameter type="float" name="MagentaGamma">1.02</parameter>
+ <parameter type="float" name="YellowGamma">1.02</parameter>
+ <parameter type="float" name="Gamma">0.459</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX5400" driver="escp2-cx5400" manufacturer="Epson" model="55">
+ <parameter type="float" name="CyanGamma">0.96</parameter>
+ <parameter type="float" name="MagentaGamma">1.02</parameter>
+ <parameter type="float" name="YellowGamma">1.02</parameter>
+ <parameter type="float" name="Gamma">0.459</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX6300" driver="escp2-cx6300" manufacturer="Epson" model="60">
+ <parameter type="float" name="CyanGamma">0.96</parameter>
+ <parameter type="float" name="MagentaGamma">1.02</parameter>
+ <parameter type="float" name="YellowGamma">1.02</parameter>
+ <parameter type="float" name="Gamma">0.459</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX6400" driver="escp2-cx6400" manufacturer="Epson" model="60">
+ <parameter type="float" name="CyanGamma">0.96</parameter>
+ <parameter type="float" name="MagentaGamma">1.02</parameter>
+ <parameter type="float" name="YellowGamma">1.02</parameter>
+ <parameter type="float" name="Gamma">0.459</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX6500" driver="escp2-cx6500" manufacturer="Epson" model="69">
+ <parameter type="float" name="CyanGamma">0.96</parameter>
+ <parameter type="float" name="MagentaGamma">1.02</parameter>
+ <parameter type="float" name="YellowGamma">1.02</parameter>
+ <parameter type="float" name="Gamma">0.459</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX6600" driver="escp2-cx6600" manufacturer="Epson" model="69">
+ <parameter type="float" name="CyanGamma">0.96</parameter>
+ <parameter type="float" name="MagentaGamma">1.02</parameter>
+ <parameter type="float" name="YellowGamma">1.02</parameter>
+ <parameter type="float" name="Gamma">0.459</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX8300" driver="escp2-cx8300" manufacturer="Epson" model="60">
+ <parameter type="float" name="CyanGamma">0.96</parameter>
+ <parameter type="float" name="MagentaGamma">1.02</parameter>
+ <parameter type="float" name="YellowGamma">1.02</parameter>
+ <parameter type="float" name="Gamma">0.459</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON Stylus CX8400" driver="escp2-cx8400" manufacturer="Epson" model="60">
+ <parameter type="float" name="CyanGamma">0.96</parameter>
+ <parameter type="float" name="MagentaGamma">1.02</parameter>
+ <parameter type="float" name="YellowGamma">1.02</parameter>
+ <parameter type="float" name="Gamma">0.459</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON CL-700" driver="escp2-cl700" manufacturer="Epson" model="38">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON CL-750" driver="escp2-cl750" manufacturer="Epson" model="43">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON CL-760" driver="escp2-cl760" manufacturer="Epson" model="56">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">0.9</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON EM-900C" driver="escp2-em900c" manufacturer="Epson" model="13">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON EM-930C" driver="escp2-em930c" manufacturer="Epson" model="34">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON MC-2000" driver="escp2-mc2000" manufacturer="Epson" model="26">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON MC-5000" driver="escp2-mc5000" manufacturer="Epson" model="40">
+ <parameter type="float" name="CyanGamma">0.8</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON MC-7000" driver="escp2-mc7000" manufacturer="Epson" model="29">
+ <parameter type="float" name="CyanGamma">0.8</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON MC-9000" driver="escp2-mc9000" manufacturer="Epson" model="31">
+ <parameter type="float" name="CyanGamma">0.8</parameter>
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON MC-10000" driver="escp2-mc10000" manufacturer="Epson" model="41">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON MJ-930C" driver="escp2-mj930c" manufacturer="Epson" model="4">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON MJ-5100C" driver="escp2-mj5100c" manufacturer="Epson" model="39">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON MJ-6000C" driver="escp2-mj6000c" manufacturer="Epson" model="6">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON MJ-8000C" driver="escp2-mj8000c" manufacturer="Epson" model="24">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-700C" driver="escp2-pm700c" manufacturer="Epson" model="9">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-730C" driver="escp2-pm730c" manufacturer="Epson" model="35">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-740C" driver="escp2-pm740c" manufacturer="Epson" model="35">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-750C" driver="escp2-pm750c" manufacturer="Epson" model="7">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-760C" driver="escp2-pm760c" manufacturer="Epson" model="20">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-770C" driver="escp2-pm770c" manufacturer="Epson" model="14">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-780C" driver="escp2-pm780c" manufacturer="Epson" model="35">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-790PT" driver="escp2-pm790pt" manufacturer="Epson" model="36">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-800C" driver="escp2-pm800c" manufacturer="Epson" model="22">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-850PT" driver="escp2-pm850pt" manufacturer="Epson" model="51">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-870C" driver="escp2-pm870c" manufacturer="Epson" model="36">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-880C" driver="escp2-pm880c" manufacturer="Epson" model="36">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-930C" driver="escp2-pm930c" manufacturer="Epson" model="58">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-940C" driver="escp2-pm940c" manufacturer="Epson" model="58">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-950C" driver="escp2-pm950c" manufacturer="Epson" model="53">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-970C" driver="escp2-pm970c" manufacturer="Epson" model="57">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-980C" driver="escp2-pm980c" manufacturer="Epson" model="57">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-2000C" driver="escp2-pm2000c" manufacturer="Epson" model="8">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-2200C" driver="escp2-pm2200c" manufacturer="Epson" model="54">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-3000C" driver="escp2-pm3000c" manufacturer="Epson" model="15">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-3300C" driver="escp2-pm3300c" manufacturer="Epson" model="23">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-3500C" driver="escp2-pm3500c" manufacturer="Epson" model="37">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-3700C" driver="escp2-pm3700c" manufacturer="Epson" model="37">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-4000PX" driver="escp2-pm4000px" manufacturer="Epson" model="47">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-5000C" driver="escp2-pm5000c" manufacturer="Epson" model="27">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-7000C" driver="escp2-pm7000c" manufacturer="Epson" model="28">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-9000C" driver="escp2-pm9000c" manufacturer="Epson" model="30">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-10000" driver="escp2-pm10000" manufacturer="Epson" model="41">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-D750" driver="escp2-pmd750" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-D770" driver="escp2-pmd770" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-D1000" driver="escp2-pmd1000" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-G700" driver="escp2-pmg700" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-G720" driver="escp2-pmg720" manufacturer="Epson" model="63">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-G800" driver="escp2-pmg800" manufacturer="Epson" model="68">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PM-G820" driver="escp2-pmg820" manufacturer="Epson" model="68">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PX-G900" driver="escp2-pxg900" manufacturer="Epson" model="64">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PX-G920" driver="escp2-pxg920" manufacturer="Epson" model="64">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PX-G5000" driver="escp2-pxg5000" manufacturer="Epson" model="67">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PX-V500" driver="escp2-pxv500" manufacturer="Epson" model="61">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PX-V600" driver="escp2-pxv600" manufacturer="Epson" model="69">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PX-7000" driver="escp2-px7000" manufacturer="Epson" model="48">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ <printer name="EPSON PX-9000" driver="escp2-px9000" manufacturer="Epson" model="49">
+ <parameter type="float" name="Gamma">0.425</parameter>
+ <parameter type="float" name="Density">1.0</parameter>
+ </printer>
+ </family>
+ <family name="pcl">
+ <printer name="Apple Color StyleWriter 4100" driver="pcl-apple-4100" manufacturer="Apple" model="601"> <!-- Uses 600 series driver -->
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="Apple Color StyleWriter 4500" driver="pcl-apple-4500" manufacturer="Apple" model="690"> <!-- Uses 690 driver -->
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="Apple Color StyleWriter 6500" driver="pcl-apple-6500" manufacturer="Apple" model="800"> <!-- Uses 850 driver -->
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 340" driver="pcl-340" manufacturer="HP" model="340">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 400" driver="pcl-400" manufacturer="HP" model="400">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 500" driver="pcl-500" manufacturer="HP" model="500">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DesignJet 230" driver="pcl-desnj-230" manufacturer="HP" model="10230">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DesignJet 250C" driver="pcl-desnj-250" manufacturer="HP" model="10250">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DesignJet 700" driver="pcl-desnj-700" manufacturer="HP" model="10700">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DesignJet 750C" driver="pcl-750" manufacturer="HP" model="10750">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DesignJet 2500C" driver="pcl-desnj-2500" manufacturer="HP" model="12500">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DesignJet 3500C" driver="pcl-desnj-3500" manufacturer="HP" model="13500">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DesignJet 430" driver="pcl-desnj-430" manufacturer="HP" model="10230">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DesignJet 450C" driver="pcl-desnj-450" manufacturer="HP" model="10250">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DesignJet 455CA" driver="pcl-desnj-455" manufacturer="HP" model="10250">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DesignJet 488CA" driver="pcl-desnj-488" manufacturer="HP" model="10250">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 500C" driver="pcl-501" manufacturer="HP" model="501">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 520" driver="pcl-520" manufacturer="HP" model="500">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 540C" driver="pcl-540" manufacturer="HP" model="540">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 550C" driver="pcl-550" manufacturer="HP" model="550">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 560C" driver="pcl-560" manufacturer="HP" model="550">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 600/600C" driver="pcl-600" manufacturer="HP" model="600">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 600 series" driver="pcl-601" manufacturer="HP" model="601">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 690 series" driver="pcl-690" manufacturer="HP" model="690">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 810C" driver="pcl-810" manufacturer="HP" model="840"> <!-- Uses 840 driver -->
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 812C" driver="pcl-812" manufacturer="HP" model="840"> <!-- Uses 840 driver -->
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 840C" driver="pcl-840" manufacturer="HP" model="840"> <!-- Uses 840 driver -->
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 842C" driver="pcl-842" manufacturer="HP" model="840"> <!-- Uses 840 driver -->
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 845C" driver="pcl-845" manufacturer="HP" model="840"> <!-- Uses 840 driver -->
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 850C" driver="pcl-850" manufacturer="HP" model="800">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 855C" driver="pcl-855" manufacturer="HP" model="800">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 870C" driver="pcl-870" manufacturer="HP" model="800">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 890C" driver="pcl-890" manufacturer="HP" model="800">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 895C" driver="pcl-895" manufacturer="HP" model="840"> <!-- Uses 840 driver -->
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 900 series" driver="pcl-900" manufacturer="HP" model="900">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 1100C" driver="pcl-1100" manufacturer="HP" model="1100">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 1120C" driver="pcl-1120" manufacturer="HP" model="1100">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 1200C" driver="pcl-1200" manufacturer="HP" model="1200">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 1220C" driver="pcl-1220" manufacturer="HP" model="901"> <!-- Uses 900 series driver (large) -->
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 1600C" driver="pcl-1600" manufacturer="HP" model="1600">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 2000 series" driver="pcl-2000" manufacturer="HP" model="2000">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP DeskJet 2500 series" driver="pcl-2500" manufacturer="HP" model="2500">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP PhotoSmart P1000" driver="pcl-P1000" manufacturer="HP" model="900"> <!-- Uses 900 series driver -->
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP PhotoSmart P1100" driver="pcl-P1100" manufacturer="HP" model="900"> <!-- Uses 900 series driver -->
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ <printer name="HP LaserJet II series" driver="pcl-2" manufacturer="HP" model="2">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ <printer name="HP LaserJet IIP series" driver="pcl-2p" manufacturer="HP" model="21">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ <printer name="HP LaserJet III series" driver="pcl-3" manufacturer="HP" model="3">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ <printer name="HP LaserJet 4 series" driver="pcl-4" manufacturer="HP" model="6">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ <printer name="HP LaserJet 4L" driver="pcl-4l" manufacturer="HP" model="4">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ <printer name="HP LaserJet 4V" driver="pcl-4v" manufacturer="HP" model="5">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ <printer name="HP LaserJet 4Si" driver="pcl-4si" manufacturer="HP" model="51">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ <printer name="HP LaserJet 5 series" driver="pcl-5" manufacturer="HP" model="6">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ <printer name="HP LaserJet 5Si" driver="pcl-5si" manufacturer="HP" model="7">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ <printer name="HP LaserJet 6 series" driver="pcl-6" manufacturer="HP" model="6">
+ <parameter type="float" name="Gamma">1.000</parameter>
+ <parameter type="float" name="Density">1.000</parameter>
+ </printer>
+ <printer name="Lexmark 4076" driver="lexmark-4076" manufacturer="Lexmark" model="500">
+ <parameter type="float" name="Gamma">0.818</parameter>
+ <parameter type="float" name="Density">0.786</parameter>
+ </printer>
+ </family>
+ <family name="lexmark">
+ <printer name="Lexmark Z42" driver="lexmark-z42" manufacturer="Lexmark" model="10042">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">1.0</parameter>
+ <parameter type="float" name="Gamma">0.5</parameter>
+ <parameter type="float" name="Density">2.0</parameter>
+ </printer>
+ <printer name="Lexmark Z43" driver="lexmark-z43" manufacturer="Lexmark" model="10042">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">1.0</parameter>
+ <parameter type="float" name="Gamma">0.5</parameter>
+ <parameter type="float" name="Density">2.0</parameter>
+ </printer>
+ <printer name="Lexmark Z52" driver="lexmark-z52" manufacturer="Lexmark" model="10052">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">1.0</parameter>
+ <parameter type="float" name="Gamma">0.5</parameter>
+ <parameter type="float" name="Density">2.0</parameter>
+ </printer>
+ <printer name="Lexmark Z53" driver="lexmark-z53" manufacturer="Lexmark" model="10052">
+ <parameter type="float" name="MagentaGamma">0.95</parameter>
+ <parameter type="float" name="YellowGamma">1.0</parameter>
+ <parameter type="float" name="Gamma">0.5</parameter>
+ <parameter type="float" name="Density">2.0</parameter>
+ </printer>
+ </family>
+ <family name="olympus">
+ <printer name="Olympus P10" driver="olympus-p10" manufacturer="Olympus" model="2">
+ </printer>
+ <printer name="Olympus P200" driver="olympus-p200" manufacturer="Olympus" model="4">
+ </printer>
+ <printer name="Olympus P300" driver="olympus-p300" manufacturer="Olympus" model="0">
+ </printer>
+ <printer name="Olympus P400" driver="olympus-p400" manufacturer="Olympus" model="1">
+ </printer>
+ <printer name="Olympus P440" driver="olympus-p440" manufacturer="Olympus" model="3">
+ </printer>
+ <printer name="Canon CP100" driver="canon-cp100" manufacturer="Canon" model="1000">
+ </printer>
+ <printer name="Canon CP220" driver="canon-cp220" manufacturer="Canon" model="1001">
+ </printer>
+ <printer name="Sony UP-DP10" driver="sony-updp10" manufacturer="Sony" model="2000">
+ </printer>
+ <printer name="Fujifilm Printpix CX-400" driver="fujifilm-cx400" manufacturer="Fujifilm" model="3000">
+ </printer>
+ <printer name="Fujifilm Printpix CX-550" driver="fujifilm-cx550" manufacturer="Fujifilm" model="3001">
+ </printer>
+ </family>
+ <family name="raw">
+ <printer name="RAW DATA 16 bit" driver="raw-data-16" manufacturer="" model="0">
+ </printer>
+ <printer name="RAW DATA 8 bit" driver="raw-data-8" manufacturer="" model="1">
+ </printer>
+ </family>
+ </printdef>
+</gutenprint>
diff --git a/src/main/quickmatrix257.h b/src/main/quickmatrix257.h
deleted file mode 100644
index 8c5f9e1..0000000
--- a/src/main/quickmatrix257.h
+++ /dev/null
@@ -1,6027 +0,0 @@
-/*
- * "$Id: quickmatrix257.h,v 1.2 2001/02/25 01:58:35 rlk Exp $"
- *
- * Square dither matrix file for the gimp-print plugin.
- *
- * Copyright 1997-2000 Thomas Tonino
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
- 0, 59688, 17885, 33107, 58234, 12934, 35793, 44835, 5911, 41622, 17122,
-47448, 37402, 13125, 45769, 3041, 64479, 7193, 26025, 48883, 23186, 8596,
-56304, 31276, 62070, 7419, 58111, 28763, 52231, 25607, 36689, 7878, 50438,
- 3304, 46570, 30413, 38153, 22895, 59386, 16833, 64897, 26973, 56862, 1751,
-30501, 43096, 19080, 38867, 48367, 16177, 41490, 6759, 62468, 3418, 24582,
-56043, 38990, 1968, 42531, 12594, 60774, 36919, 21207, 48066, 15449, 42959,
-61675, 23866, 6366, 32459, 57157, 7049, 26177, 49389, 19702, 57699, 40132,
- 3070, 43778, 10151, 47443, 20912, 41554, 27622, 46713, 1914, 43539, 28428,
- 4256, 50085, 14050, 53795, 38701, 9916, 52406, 371, 58245, 39850, 6794,
-64725, 38727, 16036, 45639, 27474, 35744, 61301, 15408, 43781, 19382, 45519,
-22661, 58538, 13444, 26893, 65363, 15584, 57641, 7346, 63655, 34350, 27108,
-60053, 1389, 25706, 51128, 33025, 2997, 62541, 8045, 56547, 39855, 17393,
-62119, 30279, 58117, 40176, 5416, 43034, 10397, 28137, 62708, 14977, 35842,
-51282, 13140, 57289, 4287, 62260, 34738, 3051, 26068, 51278, 22395, 41714,
-17957, 38847, 57449, 20831, 13094, 51140, 21733, 46148, 5516, 41878, 30210,
- 3106, 52391, 14896, 39655, 26731, 47194, 12836, 50717, 35728, 16843, 53564,
-33806, 18463, 43939, 20725, 50550, 39055, 511, 42169, 18626, 45294, 34266,
-15424, 49439, 23119, 39211, 28260, 59005, 8240, 55197, 26793, 57303, 14814,
-60469, 16583, 52634, 35308, 22649, 50030, 2194, 40629, 59032, 4777, 28774,
-52867, 32354, 59389, 9671, 33651, 49781, 24490, 11991, 37686, 29536, 51252,
-11424, 47104, 32362, 15651, 48712, 14413, 50922, 34165, 24144, 52891, 8573,
-38880, 32426, 17423, 31321, 37485, 27441, 52996, 10324, 58235, 21400, 60935,
-14706, 24516, 57051, 17947, 60150, 3907, 54271, 10399, 33568, 2617, 36464,
-20515, 63720, 28199, 53393, 46866, 34713, 27290, 45633, 15536, 51091, 990,
-30588, 59907, 14206, 55908, 24518, 8409, 58995, 18887, 52139, 17703, 34592,
-59412, 2080, 33216, 44331, 25929, 5345, 21718, 46279, 35160, 14224, 42479,
- 5630, 59093, 31948, 20683, 42456, 15998, 63251, 6859, 44930, 13925, 43763,
-34236, 8438, 38292, 25073, 51355, 10201, 61196, 8702, 25255, 63565, 23235,
-44508, 21547, 40315, 50916, 10802, 23093, 63703, 21537, 53748, 33443, 11201,
-64203, 5324, 57904, 26849, 2952, 34541, 48011, 20564, 38024, 29077, 64722,
-10611, 45690, 7410, 31413, 63227, 15386, 53171, 24772, 57435, 8038, 60438,
-22060, 54545, 17757, 57329, 34695, 24441, 59579, 2111, 26391, 44137, 19178,
-47156, 13224, 21027, 50738, 32897, 19690, 52822, 4886, 59097, 9156, 24192,
-54382, 3738, 57333, 9654, 50128, 16204, 37405, 52971, 3242, 45691, 22908,
-41296, 18130, 44699, 15375, 38344, 30433, 47682, 16262, 59312, 39285, 19523,
-43669, 25664, 127, 49234, 26592, 7314, 20090, 33929, 63214, 15704, 55482,
-39594, 19364, 52795, 7031, 26250, 47001, 32280, 43334, 13829, 23212, 59083,
-38851, 11986, 55288, 984, 61266, 10252, 24108, 49173, 34897, 7142, 56436,
-24990, 59880, 12950, 48564, 23567, 33595, 58419, 29, 62940, 20132, 42318,
-25801, 7112, 64962, 28922, 835, 60073, 10974, 55058, 31332, 14868, 52056,
-21473, 54782, 4374, 64030, 31663, 1077, 62112, 14118, 44038, 16360, 47813,
-21799, 41930, 10532, 38704, 25784, 47592, 9732, 64599, 7506, 28719, 46469,
-16996, 35926, 24263, 46087, 12616, 42615, 18468, 36842, 62005, 14275, 40798,
-61121, 7810, 55226, 1498, 64932, 26958, 5653, 57203, 24958, 61651, 7013,
-58957, 12785, 37080, 28569, 63670, 953, 57185, 44186, 14612, 64790, 18670,
-45030, 32339, 4163, 31022, 44240, 33187, 1609, 46783, 26424, 42586, 19606,
-37213, 58324, 22551, 55956, 5261, 37344, 9608, 31045, 21078, 8634, 55902,
- 4995, 61629, 31582, 48308, 16726, 35033, 49771, 4120, 33554, 51183, 29273,
-40625, 11186, 31077, 47313, 14634, 39474, 57369, 16543, 64039, 32600, 53687,
-26956, 1086, 65147, 23386, 48700, 16882, 37638, 64548, 9390, 48553, 23856,
-52293, 27637, 56418, 3001, 24182, 52674, 19844, 62998, 15793, 47555, 32418,
-53432, 35435, 4173, 52330, 12769, 57335, 14741, 28075, 60229, 37389, 9813,
-44919, 6074, 27682, 51324, 22773, 40833, 19394, 46250, 29454, 53750, 16611,
-62564, 2029, 46434, 18334, 41146, 23477, 60308, 17868, 37832, 28542, 36303,
- 4446, 37189, 29830, 39057, 5894, 33581, 45011, 8779, 47345, 12638, 37300,
-29576, 51664, 7692, 60612, 25660, 34245, 62289, 26323, 3632, 59743, 12054,
-41511, 21942, 46274, 34382, 13099, 49477, 26069, 36373, 28818, 62350, 6898,
-29927, 42332, 19455, 51366, 12980, 55289, 2756, 58043, 10669, 54287, 6696,
-43371, 9966, 29693, 48739, 12513, 37250, 59845, 11707, 44990, 31547, 53207,
- 2573, 27242, 48094, 23599, 555, 45803, 12684, 41077, 61927, 21023, 8624,
-27012, 49980, 36036, 8139, 29552, 43303, 18615, 46186, 28890, 50463, 32943,
- 1701, 62462, 27877, 39605, 10804, 33916, 51795, 18242, 63823, 11319, 40940,
-30797, 10608, 51505, 4521, 48372, 32952, 15190, 46996, 24235, 40722, 27676,
-37117, 3886, 59119, 32959, 46715, 11254, 38973, 17471, 47805, 35180, 26109,
-53362, 4884, 64314, 35374, 288, 61219, 33710, 53413, 4076, 40970, 32661,
-23608, 36273, 55804, 20224, 62722, 11573, 54687, 21099, 64257, 7104, 55754,
- 2715, 27090, 53054, 4879, 31648, 45488, 19370, 43470, 16524, 33517, 49976,
-37745, 52, 29183, 41641, 19516, 45651, 3105, 48713, 13514, 42077, 26678,
- 9467, 49993, 2385, 40416, 7630, 48942, 27410, 52650, 6921, 64321, 38475,
-13921, 55373, 7629, 63454, 30672, 6666, 50454, 14180, 33036, 56785, 23364,
-61934, 50897, 37592, 22449, 42695, 28178, 7409, 23622, 63923, 8872, 25951,
-42404, 62981, 21196, 1637, 56370, 35960, 61370, 4923, 51737, 28471, 9697,
-46565, 3141, 40384, 12993, 49074, 30606, 38353, 9029, 34010, 56717, 1978,
-26285, 53201, 34265, 829, 36886, 10402, 38976, 30813, 61060, 13438, 43330,
- 5698, 41151, 27248, 2793, 21679, 46142, 31598, 16991, 49692, 83, 33127,
-48193, 4471, 31148, 54908, 16915, 58423, 40168, 679, 44552, 14862, 52972,
-11525, 65437, 7948, 43232, 12188, 50303, 13919, 56757, 3500, 52309, 11616,
-50772, 1488, 56002, 13181, 62223, 15993, 55425, 19664, 64564, 25401, 15194,
-63306, 20585, 56080, 7037, 62477, 14537, 48587, 35111, 3940, 45198, 8697,
-48995, 37088, 22600, 44051, 17396, 51773, 170, 65163, 28216, 39719, 17109,
-60532, 1192, 38800, 25074, 56134, 10480, 61500, 5610, 38540, 30674, 47982,
-21869, 41041, 19817, 62961, 35273, 23536, 53478, 5312, 64545, 16845, 32219,
-52102, 21390, 63891, 13588, 35687, 57286, 8098, 36016, 61325, 31240, 56528,
-22553, 2668, 53238, 30938, 64469, 81, 54471, 21610, 63058, 5361, 57809,
-35841, 9176, 20341, 58716, 40964, 15934, 44624, 17377, 63391, 1154, 27674,
-44195, 5089, 53179, 17624, 56077, 35137, 24003, 61108, 17519, 53052, 36327,
- 9781, 57642, 7613, 62842, 19964, 45761, 25516, 7325, 28282, 61169, 24255,
-55717, 6929, 57913, 9456, 30089, 45348, 23986, 13520, 46444, 27737, 7285,
-21015, 62470, 19345, 58259, 710, 44751, 11086, 42459, 5550, 47470, 36447,
- 1188, 30504, 44622, 19819, 49233, 38857, 17570, 46805, 21439, 34566, 62774,
-10142, 39803, 60034, 12962, 21435, 35785, 52580, 16127, 56071, 26993, 60985,
-22842, 54057, 19299, 59141, 36738, 16703, 60323, 25206, 56861, 19628, 62734,
-16129, 46121, 11880, 29098, 50237, 22237, 39350, 17209, 47672, 28401, 38537,
-25649, 45445, 12868, 42510, 3672, 32088, 11867, 64681, 17101, 54776, 32501,
-52497, 14864, 39255, 57518, 19739, 9639, 32702, 49441, 23658, 7771, 25452,
-42513, 20380, 63206, 37465, 21396, 54868, 19684, 60852, 8312, 58537, 19040,
-54275, 28264, 13333, 47784, 41433, 14389, 28478, 57978, 21947, 62420, 18758,
-45525, 7036, 49371, 28520, 55422, 14185, 57681, 31093, 64103, 10526, 56295,
-37404, 21063, 38783, 65368, 12275, 44280, 17858, 33079, 38284, 8771, 24483,
-60460, 30578, 56541, 4257, 38330, 23035, 40387, 19673, 57476, 35895, 24536,
-34477, 44832, 19402, 38964, 25938, 42690, 21549, 47909, 23706, 44444, 2375,
-46254, 12417, 50883, 35496, 589, 39839, 30456, 45929, 19541, 41582, 30846,
-11788, 57172, 23470, 55282, 31737, 13972, 53840, 7550, 62698, 29539, 37578,
-10902, 51184, 6402, 47547, 11834, 51418, 17990, 43490, 14691, 46907, 35394,
-24786, 59400, 8448, 27581, 64765, 5049, 45171, 27546, 648, 57908, 13825,
-44284, 26834, 54837, 7889, 35398, 3694, 41487, 24708, 48797, 16642, 30694,
-44710, 20633, 5120, 27416, 49802, 37817, 15848, 43808, 17218, 41924, 12674,
-47414, 32678, 45120, 14024, 23121, 64253, 34639, 6574, 29312, 48436, 4267,
-50617, 23982, 36034, 58028, 10143, 37847, 24540, 47514, 3675, 44150, 13164,
-37978, 30078, 2301, 62389, 22471, 35353, 47963, 16221, 52537, 12251, 65235,
-31624, 50209, 2388, 40762, 15842, 42687, 21193, 38170, 51287, 10918, 32984,
-56792, 18703, 52156, 31015, 48278, 36070, 9161, 29344, 51428, 18679, 61365,
-30005, 51907, 14662, 25989, 57470, 40561, 13660, 60736, 33175, 8270, 63653,
-10650, 57800, 2564, 26375, 53261, 23333, 3943, 54407, 32293, 63284, 9945,
-43161, 4861, 40522, 11020, 38624, 6624, 46242, 3821, 30303, 47269, 21787,
-43148, 13746, 37163, 1085, 41391, 20168, 57594, 36290, 2950, 61490, 11556,
-53271, 858, 59486, 10702, 64165, 1869, 54841, 26935, 58643, 15149, 49032,
- 1467, 39992, 10276, 43754, 3395, 46910, 30312, 2129, 35770, 59645, 41152,
-15487, 64863, 31508, 53046, 13408, 44851, 143, 25285, 50154, 6313, 43125,
-24707, 41418, 15308, 43970, 4113, 40203, 60039, 22344, 6572, 61829, 39359,
-12800, 49896, 4976, 54405, 12377, 58637, 33921, 506, 36255, 46495, 7926,
-42394, 18522, 43699, 27171, 6995, 60679, 9695, 26491, 53098, 22343, 57570,
- 1604, 64580, 29568, 45529, 19810, 9318, 33322, 48623, 16919, 59444, 1113,
-52145, 30322, 4833, 61090, 8709, 30707, 63702, 5354, 58065, 10006, 65271,
- 6016, 40479, 17545, 53493, 27354, 39903, 4855, 59352, 27095, 52964, 5301,
-24367, 54647, 1381, 64504, 27431, 40338, 16747, 38162, 1048, 63796, 27039,
-48233, 24138, 14169, 57517, 31884, 19720, 58795, 21187, 40991, 30251, 56853,
- 4298, 63577, 31531, 305, 52399, 21189, 35995, 43408, 18827, 50006, 17497,
-52412, 32791, 18519, 49472, 30755, 2345, 39152, 22096, 58870, 46793, 11273,
-60923, 5716, 40462, 65289, 10856, 54909, 32422, 58859, 7636, 33535, 59488,
- 4516, 55323, 27856, 60827, 19594, 3367, 26633, 52567, 39250, 2457, 46871,
-23717, 52789, 14679, 60790, 35112, 11918, 53681, 16877, 31565, 61382, 13819,
-34195, 64824, 19298, 58707, 7299, 55682, 41368, 13633, 49520, 3591, 28456,
-42644, 1535, 40136, 16401, 44640, 18400, 58177, 22870, 53100, 12822, 64914,
- 1967, 22472, 61592, 38816, 3731, 41816, 11563, 65208, 2386, 25589, 56051,
-41501, 15019, 47943, 35003, 2797, 22327, 63202, 34418, 8645, 23517, 51000,
- 4373, 25004, 54191, 29702, 43764, 18388, 51807, 37316, 7175, 47481, 29920,
-44032, 7977, 25587, 48472, 20816, 64471, 22297, 55078, 17978, 62491, 35106,
-21076, 64194, 8023, 55352, 4613, 53503, 28185, 59333, 22742, 51658, 5369,
-25257, 44884, 20560, 43075, 23600, 41785, 21747, 43691, 17937, 47090, 35073,
-16299, 39398, 44762, 19137, 53181, 26652, 57794, 22001, 60777, 19194, 56172,
-27184, 50286, 22729, 5495, 46922, 10351, 41876, 3560, 60184, 17902, 55322,
-36383, 16166, 61698, 11756, 53004, 1785, 55499, 20719, 62519, 24972, 9629,
-35349, 54979, 32195, 3855, 44795, 20870, 42564, 22619, 41007, 27165, 17044,
-64480, 19082, 24631, 59919, 15174, 54695, 1436, 59025, 40691, 22725, 46376,
-34979, 5771, 39538, 14505, 50493, 13352, 48900, 4890, 52182, 27557, 63514,
-12764, 43718, 26416, 47137, 12008, 44367, 21247, 39941, 27338, 53928, 16878,
-45465, 22440, 36961, 27999, 52596, 11948, 61431, 34172, 10698, 57951, 31499,
-16339, 48179, 18533, 61936, 37068, 10789, 43153, 17554, 49680, 6100, 61426,
-10623, 44631, 18654, 42006, 2955, 38953, 53127, 5088, 46855, 35458, 2700,
-33209, 64144, 8391, 22063, 45560, 34302, 19753, 48506, 29218, 9793, 61982,
- 1696, 56044, 12015, 38173, 7467, 59590, 35946, 8423, 61575, 20226, 50985,
-32695, 14123, 29888, 38211, 19544, 50233, 26314, 1655, 46473, 22042, 42631,
-15394, 48375, 12365, 26662, 46194, 34893, 9774, 37043, 51750, 31118, 60262,
- 8741, 31972, 55732, 13237, 61723, 7905, 38923, 31909, 17856, 46487, 5735,
-41247, 49097, 1907, 45548, 27989, 9044, 50494, 25476, 45762, 16336, 31554,
-59315, 25718, 33925, 56859, 14568, 60515, 24035, 55491, 4686, 41541, 10676,
-37005, 5672, 43589, 26024, 47322, 34508, 7734, 26844, 59985, 21766, 44265,
-16955, 33085, 50266, 22052, 5744, 60109, 8189, 25059, 57058, 40055, 6137,
-49409, 29443, 59936, 16719, 35764, 47816, 20797, 314, 36106, 48902, 13305,
-28554, 56511, 20223, 61879, 15060, 33897, 59242, 2455, 37663, 11689, 46903,
- 1455, 42693, 31026, 10231, 53133, 28034, 44678, 15454, 38700, 12279, 42083,
- 8333, 43692, 12693, 37628, 60542, 9537, 55728, 6148, 62553, 12518, 54565,
- 5823, 57616, 30766, 8466, 62821, 4673, 24995, 61253, 10817, 43137, 6010,
-37218, 12181, 41451, 6788, 44939, 10924, 54660, 29519, 34103, 54083, 16293,
-48147, 27575, 38363, 32252, 7544, 47683, 29885, 39654, 17948, 36503, 27495,
-46990, 7746, 44736, 29933, 50076, 15029, 24216, 48420, 17362, 65229, 8612,
-52083, 2469, 47613, 36002, 9079, 50608, 35162, 3739, 49248, 25729, 36547,
-32268, 16301, 53609, 2515, 58601, 20638, 63077, 28490, 41337, 22677, 34023,
-62051, 21757, 41402, 2186, 50217, 30922, 7354, 32895, 63010, 28518, 58627,
-11088, 46304, 145, 41648, 12532, 50422, 3225, 43907, 19060, 46687, 29130,
- 6726, 43682, 14834, 50114, 37291, 7481, 43936, 13288, 33214, 58766, 21053,
-55777, 14844, 36395, 29087, 52433, 21216, 56716, 13458, 60029, 31275, 11284,
-43013, 16609, 62088, 26015, 53774, 15026, 35755, 52819, 24986, 7580, 58887,
-13499, 54636, 33101, 15889, 46062, 34965, 25711, 61274, 31011, 15718, 46277,
-24602, 38196, 31562, 6449, 60552, 43825, 1008, 51361, 32129, 8917, 58424,
-37925, 17660, 51354, 3389, 63111, 19511, 40325, 64003, 10808, 22000, 57995,
-23954, 6393, 42443, 16415, 47983, 19138, 40719, 28127, 36675, 26005, 58448,
- 306, 55381, 30776, 64383, 26572, 12653, 51615, 17212, 57791, 40145, 30727,
- 1290, 34090, 52534, 5275, 38969, 10683, 50969, 6426, 43889, 31959, 8332,
-32910, 47689, 22159, 61721, 27644, 57291, 19278, 55038, 16206, 58378, 29688,
-52916, 14346, 48800, 5100, 54197, 39289, 10258, 63414, 35660, 28204, 33927,
-45721, 10072, 27549, 55069, 13186, 42720, 1983, 31922, 64868, 9253, 41121,
-59265, 25653, 6375, 64317, 39430, 16691, 42598, 1141, 37691, 51993, 16941,
-31323, 50610, 23994, 34451, 58532, 15091, 51492, 25131, 41144, 574, 34132,
-58721, 25621, 63375, 19034, 54430, 26403, 64984, 15789, 32186, 50651, 27074,
-36499, 29089, 38442, 24931, 32707, 37305, 18919, 49198, 22069, 51944, 7733,
-31688, 47558, 21118, 63466, 25190, 53891, 17496, 65205, 20422, 39885, 14963,
-60879, 839, 23169, 62251, 35188, 5736, 57193, 12464, 65028, 26641, 3477,
-56310, 23825, 63781, 12406, 34473, 57331, 16035, 64250, 352, 38100, 60900,
-11428, 54014, 36240, 24015, 33435, 62739, 15498, 57501, 30656, 14899, 61564,
-28383, 38759, 10018, 51220, 6206, 62662, 12706, 44422, 27635, 51113, 8346,
-47586, 3507, 54270, 10002, 36936, 13710, 58839, 32019, 17851, 61385, 23636,
-54466, 20418, 2671, 35138, 52833, 17591, 62022, 20191, 59784, 26426, 56416,
-15133, 59183, 873, 36867, 56570, 23240, 64924, 1686, 25017, 60744, 31905,
-52039, 3245, 28327, 46336, 4628, 41175, 59323, 2641, 25145, 46298, 6554,
-51044, 34681, 16131, 61517, 28655, 54697, 10321, 44695, 5650, 29473, 48568,
- 2024, 60763, 37580, 17076, 43824, 4819, 39603, 57151, 24006, 11053, 47881,
- 2544, 39697, 55395, 3876, 65225, 13024, 57129, 40931, 11028, 25604, 64213,
-16011, 56333, 36565, 14975, 31418, 62323, 11569, 37458, 29922, 52623, 1121,
-23055, 54106, 33874, 1940, 36021, 65482, 21257, 56117, 759, 63574, 10540,
-54671, 3869, 51439, 15716, 44130, 27694, 10023, 20173, 39306, 59370, 23502,
-36990, 4744, 21249, 43562, 61988, 14115, 27504, 64497, 20378, 46471, 23237,
-63347, 19866, 53307, 28169, 63838, 10104, 51769, 134, 46503, 13412, 39157,
- 3331, 41848, 11387, 46692, 789, 40376, 24715, 58066, 30362, 19086, 46185,
-15389, 44254, 3540, 53326, 15763, 65338, 37397, 17711, 46430, 21376, 53016,
-38625, 15817, 54823, 28887, 11105, 34164, 50503, 23667, 3451, 58698, 12082,
-53529, 27514, 6804, 43471, 57137, 5374, 62180, 8774, 29171, 45285, 5152,
-59878, 18581, 47578, 23019, 9805, 49210, 2171, 46519, 32639, 3961, 31419,
-47536, 292, 38845, 13127, 48826, 2442, 52289, 9754, 61054, 3481, 53688,
-13439, 42413, 32764, 28665, 56192, 2762, 38749, 13087, 42180, 383, 46259,
-29775, 51345, 3093, 43409, 18912, 49152, 38932, 8659, 24591, 51422, 21876,
-44539, 17402, 50962, 38277, 10917, 43381, 5583, 50338, 28806, 2965, 42350,
-19809, 52951, 33145, 5420, 42754, 26865, 1332, 59343, 9840, 25894, 41999,
- 4832, 53283, 32602, 6560, 47604, 19648, 65005, 17664, 42091, 20035, 48195,
-34462, 14912, 32621, 37225, 23628, 61052, 32308, 25503, 55990, 33266, 6731,
-51451, 39883, 3828, 46340, 9960, 36245, 49272, 23409, 6988, 38238, 28459,
-49607, 7379, 37619, 10391, 40086, 27423, 51017, 21297, 13293, 45317, 18269,
-40862, 54110, 20752, 10263, 26496, 64110, 39590, 13669, 52764, 31064, 17981,
-33193, 65287, 15430, 40675, 29279, 4543, 49858, 36352, 1545, 23529, 49340,
-18823, 39222, 58093, 16607, 41195, 11318, 30058, 55712, 22857, 65045, 26238,
- 7211, 34123, 63843, 22070, 52059, 14586, 27011, 43956, 21011, 48090, 1548,
-27256, 55638, 36716, 19177, 42885, 4187, 26999, 55219, 6850, 41017, 26737,
-56943, 13168, 25425, 45475, 35868, 7174, 50380, 27413, 47092, 9361, 45107,
-14239, 37659, 29388, 46078, 17862, 42024, 20606, 48363, 9068, 62085, 33826,
-54150, 2859, 33087, 8669, 63151, 29334, 53947, 8050, 23674, 47346, 36129,
- 9660, 50074, 424, 40866, 11265, 37853, 3054, 45330, 18724, 37607, 26647,
-42147, 20721, 63195, 28748, 53645, 23787, 62346, 18483, 32283, 63965, 9852,
-36561, 8453, 60433, 1240, 54961, 20268, 58834, 23118, 42327, 102, 31980,
-60574, 4109, 58517, 10373, 26022, 44261, 5060, 48336, 21383, 60959, 16182,
-44755, 34693, 29259, 46025, 18001, 65476, 39483, 21742, 12573, 33384, 41254,
-26513, 49429, 20344, 39201, 29718, 9026, 61953, 36232, 55659, 19967, 39673,
-17334, 61075, 28697, 55224, 18237, 58971, 23135, 56579, 18857, 64612, 15049,
-46097, 20024, 44427, 25563, 65501, 544, 59124, 41853, 19765, 50519, 27235,
-55670, 22406, 60183, 26529, 8303, 34690, 62525, 22257, 56524, 12913, 28536,
-42990, 58272, 11417, 39873, 1530, 58852, 32045, 14893, 60475, 32774, 57961,
-14207, 38600, 53814, 22977, 47939, 12233, 27864, 47421, 18847, 50353, 34286,
-28908, 35601, 49288, 18041, 45406, 19993, 38130, 56893, 13763, 42582, 2678,
-55570, 29845, 51766, 4646, 23781, 61850, 1006, 56221, 11902, 39274, 7682,
-44865, 286, 48121, 29757, 14873, 34082, 53130, 15894, 31676, 58003, 13022,
-65088, 30541, 55642, 4342, 36350, 23999, 47677, 21989, 63158, 5654, 31933,
-61782, 38094, 3884, 49357, 30301, 6220, 35016, 51151, 41621, 8754, 22014,
-57405, 35720, 9107, 51266, 42524, 11589, 36154, 57750, 17412, 63507, 30566,
-19392, 47996, 34420, 7335, 64878, 31218, 12516, 32318, 63256, 26845, 47776,
- 3052, 41827, 12538, 49854, 29168, 53977, 4215, 43113, 9287, 60307, 36597,
- 7042, 53389, 15062, 42908, 52408, 21605, 4968, 47877, 13329, 59990, 39692,
-20563, 45862, 16912, 50016, 5284, 34707, 59642, 8915, 61805, 31306, 15628,
-61089, 17670, 53649, 25408, 33417, 50818, 6047, 25012, 56612, 8277, 65040,
-35381, 22780, 40908, 5050, 42973, 21641, 56742, 41902, 14952, 46144, 18077,
-38748, 56560, 3348, 53061, 22004, 35037, 57184, 18997, 59584, 23673, 55251,
-12967, 58979, 5179, 56395, 11123, 51013, 6225, 36755, 9996, 44845, 6689,
-38044, 51972, 15719, 31315, 49895, 22754, 32852, 40272, 26530, 37857, 12396,
-48850, 18810, 52383, 11819, 39186, 23766, 36663, 29797, 49732, 14564, 62523,
-30705, 39530, 2299, 53732, 11469, 62237, 7311, 24252, 49908, 4098, 25477,
-60302, 29798, 53630, 14186, 55887, 3377, 64695, 13531, 54005, 33829, 21933,
- 5826, 31033, 45024, 7249, 51797, 11481, 44379, 6410, 40973, 11173, 45792,
- 5162, 33410, 40368, 26235, 34789, 58104, 7966, 41042, 21430, 38814, 17477,
- 5498, 61751, 11242, 44178, 5108, 48101, 9868, 36012, 58914, 23772, 10509,
-47724, 6514, 33753, 64240, 2521, 31653, 20744, 49717, 28354, 36820, 6695,
-48401, 25724, 748, 22488, 46038, 25439, 10292, 60595, 6172, 35204, 59158,
-13905, 63596, 8198, 56189, 11968, 54727, 3255, 60161, 10700, 63944, 1062,
-26263, 52187, 21566, 46245, 25108, 8929, 36061, 59542, 43017, 11366, 48821,
-18510, 43878, 19941, 58265, 17470, 64841, 19363, 41341, 60642, 8497, 25873,
-64063, 40933, 5643, 45681, 16380, 44073, 19289, 46928, 15605, 64453, 1329,
-53481, 33729, 19338, 48541, 8257, 27933, 60202, 12587, 57637, 27299, 62976,
- 2522, 23701, 48834, 34544, 53, 23321, 63067, 26705, 5490, 48875, 25924,
- 729, 32080, 41690, 7970, 59045, 9819, 56595, 27693, 41306, 597, 51472,
-38436, 4645, 42891, 21042, 52557, 18516, 60210, 880, 45235, 16276, 40435,
-19878, 47284, 16971, 31850, 63370, 24527, 37256, 31136, 12207, 33480, 62808,
-22876, 51799, 32635, 10398, 53224, 378, 60640, 33854, 23960, 47080, 17890,
-42098, 14827, 48626, 38905, 5531, 43641, 30095, 3498, 62644, 12592, 58255,
-38473, 19791, 43245, 28548, 2669, 56133, 14835, 59797, 25732, 49500, 6231,
-30374, 54742, 660, 60374, 11400, 33619, 19622, 32181, 61451, 6949, 30288,
-42521, 5528, 44203, 16379, 40475, 21069, 43106, 17488, 39737, 25423, 48180,
-22538, 59108, 20411, 56958, 29415, 4455, 35247, 56303, 3002, 62955, 11667,
-52841, 7493, 64395, 31739, 4611, 62241, 24887, 47435, 16314, 56659, 9074,
-63440, 1017, 52494, 23804, 8083, 58030, 28457, 36724, 22556, 40487, 31111,
-57487, 14818, 33420, 48989, 8458, 45772, 407, 37695, 21279, 40430, 17854,
-44502, 1856, 40857, 56793, 28653, 65331, 16455, 58340, 24616, 37576, 21121,
-53170, 25289, 62414, 19495, 30442, 60072, 8782, 47992, 1378, 31128, 50796,
-14653, 47932, 12515, 52416, 45660, 16797, 38065, 20623, 64391, 15044, 31618,
-53084, 4309, 49693, 30646, 37390, 27596, 50452, 16643, 52401, 36325, 62847,
- 5080, 56119, 13526, 63529, 16105, 44883, 31319, 52263, 8064, 65413, 41442,
-18260, 31222, 54344, 3610, 41167, 23590, 39257, 22100, 43646, 20389, 38607,
-27849, 44077, 22122, 50340, 34135, 7427, 60906, 11030, 34915, 63434, 22620,
-14104, 31512, 40174, 26049, 64232, 5520, 53447, 30002, 36900, 10649, 52088,
- 4178, 23353, 54178, 35593, 747, 20915, 56351, 28953, 39214, 1793, 59626,
-10707, 52576, 32723, 25991, 41273, 9621, 54513, 24334, 34902, 46388, 17558,
-38929, 21474, 43513, 15419, 38015, 58346, 17050, 61241, 29659, 46711, 16410,
-37730, 54990, 14531, 60659, 37426, 55593, 13643, 47293, 26326, 39677, 15382,
-51995, 20473, 59402, 25713, 10559, 55218, 14011, 59181, 8040, 38802, 32917,
-22280, 36105, 62583, 10639, 58249, 29004, 51542, 238, 38926, 10173, 58571,
- 3282, 60823, 40274, 8733, 43783, 2494, 28110, 64969, 22046, 43584, 27654,
- 9712, 64311, 2285, 55813, 29472, 52070, 2880, 25921, 56646, 12192, 58615,
-35048, 22288, 41642, 31572, 1546, 60726, 13767, 52553, 34115, 24305, 50866,
-32500, 11592, 35807, 65186, 15791, 36974, 27087, 41030, 24740, 64159, 43051,
-13007, 38472, 25314, 48376, 13508, 52074, 28640, 62540, 1191, 54223, 31787,
-64754, 2612, 60069, 12345, 40580, 1420, 42634, 12030, 47661, 23947, 45684,
-14607, 43965, 29266, 47145, 19656, 42815, 17752, 50398, 36421, 13979, 41307,
- 6297, 50766, 28351, 45496, 19924, 43345, 17311, 33388, 47091, 15238, 43626,
- 9510, 50930, 739, 45210, 10468, 37278, 54425, 15705, 42124, 19434, 63733,
-24292, 58879, 11887, 52987, 32353, 60557, 19540, 10905, 45895, 2795, 40614,
-12041, 43478, 1220, 63593, 10095, 46649, 3083, 36840, 50988, 17169, 52738,
-22307, 63234, 18325, 35423, 57163, 3925, 62367, 27623, 31919, 58742, 1126,
-52768, 25674, 34722, 45510, 19375, 40331, 16275, 57216, 1331, 60379, 12044,
-44816, 25461, 9291, 18906, 45567, 23943, 41265, 27034, 54019, 9033, 61586,
-20634, 37483, 32224, 1601, 51520, 38107, 21199, 45628, 16323, 51816, 2287,
-61438, 6739, 57419, 12724, 52933, 5648, 40359, 11724, 58955, 28942, 37655,
-27179, 49868, 395, 32471, 55002, 3642, 57516, 9152, 28914, 46431, 23101,
- 3021, 49580, 25502, 38316, 28996, 46031, 10335, 43833, 29713, 48928, 23100,
- 9102, 61495, 24956, 36809, 27959, 39199, 7921, 51182, 17867, 58736, 30470,
- 2436, 63958, 11744, 53229, 443, 54850, 7191, 56169, 31271, 5239, 44942,
-11029, 53279, 8057, 56404, 2213, 30033, 43477, 21589, 10529, 22682, 50756,
-35020, 2554, 62905, 31911, 4074, 44613, 17147, 36841, 49998, 21932, 45498,
-19545, 31080, 48250, 13406, 57498, 8668, 30246, 46124, 22750, 5900, 35257,
-55752, 22216, 45382, 19441, 47183, 29930, 16458, 54672, 18321, 57787, 36087,
- 6125, 48258, 13982, 39029, 50787, 16228, 44070, 35789, 6521, 21703, 64652,
-36364, 20741, 41911, 16284, 49843, 6965, 53991, 14636, 48889, 26413, 44773,
- 5271, 63249, 10385, 37962, 1403, 47609, 19843, 31995, 50684, 10169, 58818,
- 7597, 51371, 4346, 28376, 55504, 1747, 58113, 18072, 65463, 33980, 9265,
-35505, 47240, 24894, 8170, 28716, 45695, 23258, 52715, 18986, 63556, 28021,
-54445, 21226, 64632, 8138, 59299, 25404, 6298, 33323, 59714, 2273, 56585,
- 9591, 30299, 57966, 21754, 60884, 35191, 2820, 34047, 54133, 7519, 39942,
-61474, 3533, 55859, 18749, 65132, 26448, 55063, 19885, 63473, 28925, 2095,
-61513, 26989, 50742, 10588, 43751, 5624, 42568, 28218, 7498, 24318, 47543,
-35197, 25644, 53475, 21661, 48311, 18797, 51290, 28667, 38949, 22712, 57049,
-32234, 10329, 42157, 4329, 44152, 12269, 54427, 6904, 29217, 42400, 32716,
- 9306, 49828, 18761, 42813, 30428, 8732, 56727, 2182, 62032, 12521, 44927,
-24688, 42689, 22011, 41801, 4751, 61079, 38318, 55459, 34668, 10220, 49321,
- 2714, 38549, 29111, 36345, 3988, 56797, 16557, 58565, 27671, 7008, 62165,
-10832, 58129, 30040, 46789, 18332, 41045, 26286, 46325, 21065, 61733, 24796,
-43192, 16343, 47062, 4044, 43823, 13541, 57916, 38124, 17985, 44182, 20306,
-37608, 52124, 14499, 40569, 61973, 16479, 55227, 6952, 63095, 16229, 57705,
-19619, 62152, 12315, 35897, 49970, 15391, 53221, 5484, 56034, 21223, 60723,
-14898, 45643, 5046, 39640, 49880, 19824, 42940, 25555, 41516, 18897, 46701,
-34590, 11541, 51827, 26380, 39816, 21401, 33473, 41099, 24288, 62033, 6960,
-53734, 34067, 64665, 5747, 23875, 54073, 18417, 37594, 57621, 12885, 63873,
- 6140, 32094, 61353, 1439, 34460, 63028, 5212, 53736, 35255, 24816, 50410,
- 2204, 41813, 64688, 25540, 11194, 49715, 6221, 56945, 35942, 7304, 50277,
-25670, 38517, 10730, 50580, 19787, 34404, 58567, 3975, 22573, 57446, 28278,
-12350, 59256, 43316, 28051, 8360, 54827, 254, 63459, 26981, 37168, 23846,
-59079, 33368, 7658, 36073, 49658, 18907, 42838, 26350, 61627, 13636, 53082,
- 3650, 39124, 21007, 43254, 32541, 22460, 34922, 45329, 17404, 41905, 12122,
-44691, 3207, 27051, 49789, 22445, 11749, 58526, 32581, 51386, 16849, 37451,
- 5774, 43406, 32263, 8859, 36428, 2173, 32108, 42017, 20104, 39231, 53387,
-15081, 36708, 23668, 39275, 27905, 45474, 1670, 43742, 11231, 26755, 64764,
-14841, 24829, 59423, 27364, 11996, 37152, 25381, 45748, 4948, 38718, 12418,
-41969, 5990, 46375, 22021, 39076, 6605, 34814, 57878, 18499, 54910, 15595,
-62694, 31436, 54463, 4225, 63089, 9328, 30339, 61476, 5326, 59460, 34270,
-14883, 49602, 6783, 40839, 16183, 61679, 21060, 58625, 34269, 28458, 39847,
-24233, 60474, 16483, 53496, 23180, 6541, 47014, 14167, 60604, 38961, 17786,
-41879, 21700, 50694, 5688, 64769, 18017, 55749, 15433, 53138, 30729, 22244,
- 492, 28343, 61839, 21388, 59473, 17283, 52798, 18860, 48118, 23693, 49514,
-12690, 33679, 44855, 20087, 43457, 26823, 7820, 34284, 54454, 14057, 64157,
- 119, 37078, 9555, 49026, 2211, 53763, 22934, 62379, 18977, 52770, 24346,
- 8131, 47760, 12981, 61478, 30049, 1651, 59298, 32619, 12353, 31751, 42134,
-22364, 32882, 39817, 2587, 50216, 6291, 33037, 57128, 2951, 40810, 29664,
-46275, 13473, 44565, 3306, 36272, 29398, 62602, 21576, 10693, 55396, 6386,
-59568, 9990, 62514, 29839, 16347, 65024, 35824, 14258, 59786, 3825, 64384,
-10371, 49818, 15856, 46023, 27841, 3454, 39967, 30467, 45362, 14218, 49551,
- 7090, 22188, 41147, 26940, 48613, 14751, 37439, 27651, 51197, 17955, 43894,
-29063, 3447, 61836, 14530, 56442, 32431, 13656, 39602, 59087, 18759, 40911,
-28643, 14796, 61972, 35155, 742, 63722, 32996, 23769, 61645, 9178, 30173,
-44566, 35430, 7411, 33764, 53671, 23506, 13762, 38233, 50691, 18731, 45603,
-29972, 11116, 48157, 2539, 38996, 11734, 62342, 16382, 30892, 57596, 6662,
-53613, 21191, 43794, 18363, 60231, 26348, 55828, 2402, 62914, 11023, 57426,
- 8454, 62266, 26359, 52379, 21182, 39118, 54865, 6563, 61007, 38668, 19209,
-44869, 4323, 61930, 13428, 57236, 15524, 55466, 25172, 60692, 28664, 52459,
-16640, 49144, 381, 28207, 62581, 10242, 55138, 5598, 61877, 15965, 54441,
-19062, 55830, 40843, 8610, 48765, 37944, 5262, 46189, 30583, 54664, 13047,
-34184, 58264, 21609, 60699, 24730, 56413, 30781, 52284, 13156, 48317, 29978,
- 3595, 37666, 26942, 50451, 904, 46303, 21020, 41458, 18837, 49226, 37425,
-17655, 42251, 26998, 8341, 56167, 23829, 65160, 29833, 53427, 794, 48458,
-25391, 9212, 50150, 2866, 46931, 10695, 44646, 1979, 64838, 37644, 21135,
-54524, 4600, 28159, 51859, 7794, 58442, 29532, 36860, 11113, 49136, 3281,
-32236, 37119, 7743, 49851, 32041, 46596, 6288, 37640, 12480, 44293, 5198,
-64606, 10714, 41701, 5962, 38871, 63276, 14179, 55959, 951, 35676, 64840,
-22745, 4650, 47978, 33868, 23721, 50919, 32327, 15069, 65492, 33632, 8583,
-29446, 45745, 4966, 40982, 64752, 33138, 53075, 7117, 49172, 25014, 36866,
- 6460, 44197, 56874, 1151, 59965, 13058, 52507, 28604, 37258, 25926, 46489,
-16554, 31337, 63844, 8199, 23865, 62299, 19849, 40831, 57427, 12466, 25137,
-46887, 34006, 28404, 37689, 23173, 49178, 36004, 4182, 50097, 28623, 1441,
-48502, 23178, 42900, 32095, 22273, 35549, 59132, 9787, 38199, 58394, 17666,
-55264, 8559, 61683, 27133, 43671, 33074, 56127, 2150, 30328, 55497, 9994,
-59847, 6720, 40977, 10855, 49069, 23028, 40362, 28069, 37333, 7772, 49039,
-30120, 4005, 33699, 63109, 1762, 53065, 31210, 19887, 44388, 15827, 45954,
- 3206, 39999, 26603, 52544, 15797, 62500, 25838, 46485, 845, 40584, 62896,
- 3795, 31946, 61485, 9702, 39531, 57669, 17924, 64772, 19635, 46659, 24710,
-51356, 580, 34601, 47115, 12640, 39969, 5425, 48783, 30633, 8746, 41535,
-24119, 35762, 48872, 19268, 50755, 15717, 47895, 5092, 60002, 9890, 23532,
-42851, 28309, 2486, 52575, 14945, 41839, 26547, 40262, 20187, 48447, 3778,
-46238, 11414, 43686, 5910, 61389, 13051, 57648, 37371, 19054, 45161, 25925,
-50973, 12219, 48601, 25473, 38574, 4802, 22313, 57738, 31761, 18816, 53055,
-16534, 64113, 1526, 48291, 28144, 9021, 50383, 2987, 47727, 17021, 9267,
-34360, 59890, 18989, 55627, 24818, 65058, 9378, 33039, 39345, 12811, 59062,
- 8015, 56410, 33543, 112, 50654, 14322, 47737, 30972, 38312, 2039, 36453,
-11011, 27176, 45102, 14954, 37790, 55669, 20237, 63848, 15724, 55007, 30452,
-40436, 26575, 51608, 32642, 10910, 35315, 62699, 19611, 47288, 26434, 14696,
-53702, 31328, 19969, 39736, 63138, 13146, 57784, 15715, 65308, 19531, 53262,
-22865, 56594, 24570, 40205, 26869, 45274, 21432, 51337, 26074, 2918, 50666,
-32855, 23626, 48880, 9920, 39775, 59465, 25630, 11571, 56768, 17040, 59779,
-27489, 40873, 17658, 56629, 39520, 15701, 59908, 30940, 21360, 2377, 26385,
-40751, 19361, 55910, 15828, 65319, 27208, 11206, 37303, 24734, 48388, 8073,
-64961, 15056, 55019, 11443, 59813, 38138, 18943, 47777, 33691, 341, 52260,
-26113, 7054, 34712, 51634, 1063, 65469, 12812, 56653, 2893, 32373, 21292,
-58937, 34038, 15078, 57466, 36683, 7475, 52337, 12107, 57063, 992, 29882,
-44297, 25224, 12575, 47479, 21946, 42711, 29710, 360, 58506, 10958, 19909,
-51414, 39623, 19260, 42587, 17316, 46055, 21080, 65531, 16538, 58055, 6398,
-54494, 20925, 61310, 18175, 52818, 23974, 45072, 12021, 32014, 42894, 9582,
-59208, 6717, 56557, 27736, 54873, 14394, 60188, 1425, 48627, 11215, 51714,
-19875, 58153, 27400, 10822, 48683, 14388, 35467, 53356, 22510, 4229, 44497,
-30609, 51876, 4582, 41720, 21606, 60470, 15521, 27998, 64617, 22622, 58510,
-17054, 36916, 63980, 14367, 52235, 5820, 30966, 40915, 1009, 38794, 23225,
-36993, 28850, 33858, 63648, 16170, 57120, 34755, 24523, 64412, 9462, 54378,
- 639, 59571, 28972, 37935, 22949, 51463, 18205, 40125, 21798, 44741, 29203,
- 9077, 50048, 3420, 40720, 21310, 42330, 30056, 7400, 63264, 28800, 51593,
-36228, 464, 60372, 13286, 41290, 22980, 42594, 20255, 53898, 37643, 18364,
-43228, 22939, 40656, 62760, 25956, 1255, 44078, 8034, 45816, 21465, 48612,
-16666, 60888, 30665, 17841, 45214, 28690, 13328, 64090, 29434, 57367, 3713,
-61229, 13327, 54600, 19522, 59693, 41309, 8080, 64260, 31631, 5613, 41916,
-26630, 38918, 22400, 7444, 58356, 12827, 3215, 63311, 27093, 48352, 13558,
-42606, 3773, 38584, 63548, 88, 42130, 59920, 7281, 26804, 43760, 20531,
-42575, 4361, 40682, 10906, 43280, 2098, 46253, 11726, 59912, 244, 57027,
-14743, 60738, 30445, 36980, 8620, 60020, 16836, 53105, 27870, 14746, 44729,
-35246, 7583, 39135, 3515, 47635, 6478, 50752, 32545, 1215, 51743, 36162,
-12179, 56121, 31801, 62851, 10186, 45156, 5024, 41824, 20699, 46176, 30326,
-50839, 14421, 34333, 44972, 21878, 41576, 1277, 43446, 28905, 5150, 54462,
-10784, 59120, 39051, 15241, 48986, 30595, 61242, 20464, 40064, 23770, 43736,
-17974, 40858, 52947, 13260, 44088, 8705, 53543, 32758, 17023, 63431, 25316,
-33856, 40788, 20442, 51670, 5392, 63987, 32778, 1648, 60549, 13375, 50926,
-34241, 23095, 36024, 62410, 24684, 8941, 64330, 3227, 56536, 30175, 52924,
- 87, 36731, 30637, 46644, 11668, 42278, 976, 44244, 8838, 60193, 15607,
-54819, 36996, 17564, 49914, 22376, 48808, 30340, 8572, 35054, 47149, 22990,
-41799, 21283, 39620, 5805, 42728, 17155, 36471, 52844, 20648, 45085, 25194,
- 6199, 34373, 50214, 23604, 8552, 34811, 55471, 12229, 48449, 8791, 35980,
-44374, 3026, 46073, 11452, 53946, 116, 29665, 45915, 18628, 59649, 12662,
-55327, 33740, 64882, 12325, 56766, 14351, 51267, 258, 47831, 11044, 49208,
- 7123, 30635, 47599, 22091, 44389, 34208, 10387, 65153, 6858, 34524, 62900,
-13697, 55679, 4016, 34666, 65504, 22789, 57081, 16290, 63691, 892, 58583,
-35163, 16973, 46122, 12798, 20238, 43351, 26718, 47342, 4290, 51803, 10208,
-62107, 5891, 30356, 63832, 13812, 57651, 4530, 20632, 53294, 38860, 17512,
-61713, 33982, 2526, 36241, 54169, 5076, 49567, 34660, 3005, 51651, 22845,
-40840, 11166, 24521, 44516, 20975, 42920, 25082, 46661, 4675, 21803, 51160,
-35708, 17586, 60737, 11851, 53121, 204, 62134, 35178, 23803, 45372, 55455,
-14947, 41332, 720, 57771, 24584, 56103, 12857, 33440, 48209, 23951, 13938,
-35484, 48692, 1932, 51847, 29271, 55860, 16695, 59241, 30754, 64000, 18517,
-53608, 20144, 36622, 29701, 43608, 9483, 47513, 17577, 45718, 25220, 41971,
- 3875, 37798, 56367, 1861, 62285, 28744, 52754, 23153, 35829, 58503, 13688,
-24640, 63295, 28528, 7374, 49567, 15159, 42324, 17808, 50344, 27358, 60653,
-13456, 54456, 3173, 58757, 5913, 62727, 27150, 3484, 56186, 12634, 60958,
-18047, 51320, 24470, 41841, 31816, 17137, 30112, 64779, 10229, 42069, 4542,
-44889, 9446, 52514, 5559, 60981, 30401, 7420, 64219, 31404, 24338, 42532,
- 4893, 30185, 41539, 3135, 53884, 9358, 61392, 23484, 48578, 16479, 53526,
-37156, 17145, 41264, 6512, 65243, 9692, 47972, 4478, 44268, 34762, 29251,
-50759, 24240, 8539, 38281, 25527, 49957, 14052, 26576, 63472, 19733, 56123,
-25840, 37701, 29213, 46493, 5669, 25805, 65083, 3598, 41551, 13271, 37979,
-64500, 20827, 5346, 55678, 12945, 63345, 27811, 56113, 11971, 65366, 4951,
-28465, 60666, 1886, 55602, 29204, 59739, 16189, 61843, 42927, 14190, 28123,
-63598, 19295, 30669, 57059, 17493, 54830, 25958, 33602, 41926, 20666, 57000,
- 7968, 37685, 28812, 47260, 20820, 7399, 26736, 43708, 3846, 45648, 19309,
-38497, 25953, 41447, 17845, 58898, 37324, 18610, 60681, 12900, 25019, 50113,
-19812, 53632, 24237, 1146, 46677, 33834, 23607, 51281, 10678, 41909, 6814,
-37938, 19831, 43475, 14931, 52610, 31314, 2500, 53965, 33108, 62653, 10582,
-29458, 58985, 19224, 31574, 38714, 24525, 49056, 169, 36323, 28752, 50015,
-35507, 8540, 27916, 51100, 12484, 25745, 57314, 27767, 13906, 44024, 11316,
-63645, 21833, 36060, 60339, 6274, 55463, 37394, 14711, 51632, 5472, 62756,
-12387, 39161, 57567, 28504, 2226, 49464, 22998, 42862, 19061, 46457, 14504,
-51306, 17364, 34140, 24904, 44143, 18544, 50844, 33896, 9943, 36486, 50096,
-22535, 8580, 57366, 32591, 54960, 11987, 60882, 34705, 8247, 25648, 49201,
-34478, 8713, 27702, 48686, 6684, 32333, 49826, 7603, 24612, 55051, 22193,
-64408, 4804, 54591, 13250, 62889, 31339, 18487, 46908, 21051, 44074, 13268,
-63769, 9172, 22175, 44282, 36520, 10010, 48136, 21883, 35370, 54603, 5850,
-58067, 35697, 598, 34317, 47710, 22230, 40188, 19751, 41789, 16623, 54205,
-38091, 17257, 46829, 30587, 36448, 9445, 64309, 2145, 56158, 44305, 6004,
-35232, 53617, 19270, 55794, 14602, 59768, 16341, 49024, 33915, 19972, 47681,
-37214, 663, 58290, 19636, 62219, 47420, 12681, 59411, 18755, 45366, 28931,
-13071, 33638, 41842, 8371, 29094, 57351, 20386, 52505, 25249, 38560, 15317,
-54417, 17781, 49230, 12215, 21724, 43398, 62197, 14854, 57173, 5740, 60551,
-38055, 3809, 49619, 29996, 10129, 64016, 2837, 22810, 57379, 39582, 16109,
-53864, 24321, 59879, 2046, 25883, 51853, 38504, 17345, 44336, 3842, 37562,
-15447, 45757, 21649, 51081, 37807, 18212, 42107, 15491, 46595, 9073, 38736,
- 1081, 25816, 54094, 36071, 2049, 33913, 51688, 4772, 42341, 31507, 6928,
-63031, 9926, 51645, 23115, 33147, 62125, 2120, 24961, 60641, 31754, 53317,
-17812, 61335, 32230, 55173, 10448, 62771, 4773, 53655, 28606, 1871, 45615,
- 6131, 39529, 56553, 2674, 44923, 9684, 41014, 57313, 26557, 7945, 60235,
-15847, 47064, 25415, 48940, 12631, 53618, 25280, 47510, 8944, 39910, 60178,
-35890, 7051, 22059, 49770, 35674, 8223, 34290, 56956, 14925, 59746, 17516,
-40062, 56148, 11735, 21812, 64783, 30582, 59276, 5139, 46987, 36749, 8966,
-35199, 62310, 18934, 38159, 25758, 53293, 8815, 20277, 47132, 33451, 1685,
-64831, 30007, 38067, 18239, 52810, 26650, 10091, 47055, 33937, 13134, 56845,
- 4860, 59305, 27664, 39723, 5866, 60177, 9497, 48706, 5069, 61272, 30869,
-20415, 65125, 27060, 6021, 59650, 29182, 40764, 4172, 22228, 46137, 24342,
-14747, 62476, 37459, 1155, 21263, 54800, 42008, 14611, 38886, 58057, 17610,
-63698, 39261, 1772, 42306, 12320, 39171, 20159, 46591, 35343, 8123, 55355,
-10952, 41428, 5796, 49295, 27143, 33748, 55656, 3080, 60964, 20179, 33297,
-58747, 1890, 29575, 46645, 23440, 11368, 51284, 29698, 9551, 63798, 7803,
-52351, 24223, 49077, 10542, 28454, 63558, 23561, 4260, 58120, 22335, 39501,
-33622, 12851, 22880, 58439, 25233, 1620, 47117, 27110, 37661, 22831, 41686,
-28023, 1949, 56986, 10148, 22906, 50765, 36125, 9683, 33444, 20999, 38731,
-28005, 49576, 6153, 36426, 55976, 2450, 62185, 26170, 46709, 4314, 45145,
-35105, 2899, 58070, 32740, 26464, 61023, 1167, 58927, 36066, 5411, 30909,
-42214, 20098, 44669, 33088, 12337, 45231, 16154, 36744, 51488, 19346, 42080,
-50584, 12746, 29812, 48021, 11176, 44105, 18433, 33064, 45661, 12080, 29206,
-59669, 24382, 54179, 18913, 59085, 2206, 40892, 32395, 7457, 57785, 10347,
-63822, 35132, 24198, 50767, 30918, 47560, 7270, 59186, 23202, 43884, 16008,
-62228, 14302, 58831, 23831, 38112, 28578, 39828, 4013, 45191, 13395, 49866,
-38485, 5223, 44827, 11757, 42428, 27688, 7783, 24445, 42822, 22240, 44229,
-20145, 36460, 62049, 15499, 51832, 17031, 31937, 37561, 27246, 60408, 31500,
-16546, 48142, 35547, 28236, 39144, 1584, 57833, 20409, 61267, 34425, 6184,
-29858, 64974, 22508, 10970, 24873, 57217, 40402, 3134, 64568, 25228, 48279,
- 1904, 44805, 8708, 52010, 29456, 7156, 33537, 47174, 2382, 43368, 15995,
-41704, 20016, 63942, 21921, 51699, 3931, 32285, 58052, 1414, 40542, 29390,
-58342, 25634, 12803, 45206, 26455, 9211, 58764, 32986, 486, 34858, 60070,
-19276, 63141, 25078, 38430, 29517, 36492, 8536, 49870, 32730, 28411, 36157,
-13817, 53699, 35836, 8074, 47163, 2710, 45325, 35618, 15208, 52760, 18795,
-64634, 35920, 6715, 56923, 32233, 44463, 12362, 58587, 40468, 24573, 3804,
-62801, 29101, 2505, 45518, 13828, 31370, 58885, 18850, 53727, 23217, 60954,
- 520, 27418, 43557, 22382, 51511, 19383, 61191, 34466, 788, 50371, 14791,
-46785, 26767, 51198, 5497, 41179, 25422, 64312, 16589, 37820, 62332, 17363,
-55424, 24493, 37930, 32603, 13980, 60383, 36, 34324, 50401, 7385, 39943,
-48759, 15659, 44891, 7210, 53310, 29530, 48421, 15844, 51088, 37101, 13301,
-62742, 3142, 54550, 8037, 63265, 35903, 17123, 34899, 61531, 13881, 25121,
-54977, 43119, 2060, 51096, 8508, 34258, 65373, 18190, 40221, 30874, 14642,
-52948, 17734, 63200, 11695, 27817, 50070, 12408, 45739, 7217, 39761, 31302,
-16790, 51878, 26111, 48074, 2487, 53637, 9600, 28087, 54286, 22392, 59335,
- 4944, 32097, 57859, 8248, 33154, 62110, 494, 34588, 61176, 4909, 38974,
-57014, 6526, 62587, 36415, 5, 41357, 10428, 48206, 34389, 25547, 61098,
-12796, 52314, 31649, 44599, 20333, 3690, 56207, 11562, 65228, 19021, 41087,
-13106, 51002, 8043, 47398, 29194, 39087, 9463, 48399, 1813, 58032, 14655,
-65379, 24360, 54667, 32030, 17150, 57609, 15588, 63229, 1358, 54207, 36358,
-59573, 2823, 56531, 11314, 51573, 8311, 32153, 40851, 25517, 63943, 7765,
-58037, 12386, 36465, 4750, 52539, 11706, 62287, 5375, 54560, 31952, 15274,
-45209, 2935, 28142, 56101, 40783, 3903, 50892, 31977, 48911, 14656, 28973,
-54593, 18423, 41611, 15730, 53418, 35581, 26202, 42475, 16163, 61568, 41366,
-18685, 52787, 22357, 54779, 13110, 49760, 335, 31260, 39956, 24478, 47302,
-14943, 44665, 16813, 50282, 4296, 35503, 53943, 19069, 56902, 39790, 15251,
-50650, 23299, 45514, 7417, 43456, 3983, 53600, 9791, 55353, 15148, 65380,
-21678, 56607, 1627, 63998, 43189, 26411, 11722, 58768, 16351, 54477, 17245,
-61712, 31388, 1703, 44837, 10390, 51272, 28033, 40241, 3472, 22995, 52349,
-28286, 13415, 60197, 35436, 15918, 50189, 25620, 35670, 52308, 5447, 34773,
-44559, 6381, 48034, 14559, 34012, 57892, 13988, 65269, 2973, 38605, 31497,
-16846, 59588, 23900, 40732, 32462, 10725, 35997, 60300, 15935, 49138, 11934,
-43302, 3704, 26882, 43887, 6354, 45580, 2100, 57080, 42860, 18196, 30979,
-43930, 19314, 58530, 33258, 10994, 52501, 27424, 61863, 19747, 41445, 3553,
-63372, 8895, 30911, 43200, 21553, 48050, 18294, 45375, 15010, 50156, 25862,
-53336, 3880, 32582, 45896, 5965, 27152, 60330, 22225, 56732, 25327, 267,
-46241, 9005, 59589, 34514, 6786, 40550, 24134, 54692, 43086, 16958, 61922,
-22879, 52937, 15770, 47584, 35251, 8291, 63643, 13396, 59534, 23210, 34994,
-64757, 1632, 41367, 13190, 47694, 17631, 40228, 30640, 14558, 38332, 51709,
-17024, 30951, 50411, 14006, 22351, 47631, 27517, 16373, 53125, 21252, 64886,
-30119, 8086, 53463, 20392, 46914, 22194, 542, 25967, 49798, 30100, 41624,
-21091, 36903, 2930, 49192, 27390, 34748, 64307, 24423, 921, 50495, 32228,
-18751, 53018, 22026, 49300, 34421, 10230, 40327, 6423, 51010, 22738, 39587,
-30561, 48750, 21039, 9823, 31524, 49812, 15342, 39782, 27832, 58211, 13342,
-55552, 3319, 28944, 46179, 21760, 43876, 20365, 64208, 23027, 39834, 21084,
-44194, 18636, 37044, 63858, 11494, 38984, 50284, 10057, 24396, 58751, 16890,
-44176, 1371, 61519, 37328, 6613, 43804, 9841, 60568, 31003, 13129, 65355,
- 2851, 53654, 31059, 4811, 60155, 11278, 38687, 5981, 58616, 25700, 34415,
-53843, 7360, 60063, 10112, 54715, 32741, 64651, 11898, 31242, 62597, 7717,
-49160, 3216, 28442, 43898, 5935, 63539, 13718, 55182, 27387, 39521, 18436,
-45339, 20803, 47444, 3100, 43618, 12240, 45990, 19943, 4030, 50471, 33701,
-28255, 39693, 25015, 43486, 9394, 46915, 33930, 25675, 60554, 16137, 43748,
-19670, 64097, 35827, 7512, 33628, 50604, 5814, 47879, 31525, 8148, 61889,
-10366, 23030, 60525, 26407, 11420, 57532, 32786, 26287, 50972, 7111, 48822,
-34928, 25751, 56999, 9313, 47570, 36050, 11715, 58025, 4435, 65051, 19596,
-31212, 38320, 7956, 56775, 19840, 59551, 33179, 14361, 61412, 31594, 48398,
-23154, 8681, 35801, 62526, 12437, 53788, 2484, 22822, 61326, 31492, 543,
-36777, 9866, 57110, 27825, 38397, 24106, 60621, 6668, 57385, 10993, 39317,
-30883, 58801, 5876, 44586, 12960, 39767, 57952, 15550, 64550, 37386, 11725,
-43971, 14365, 37226, 55249, 20477, 49977, 15390, 44825, 27238, 51334, 824,
-32104, 7535, 38506, 33793, 1864, 28839, 64893, 4864, 57418, 20772, 39565,
-28301, 37312, 7464, 50115, 16744, 46801, 26510, 62741, 23478, 55788, 1986,
-65332, 35758, 6215, 24586, 58332, 9293, 35702, 63893, 32503, 11012, 55495,
-38092, 8993, 44055, 5079, 46206, 27283, 37534, 4388, 28964, 62458, 33043,
-55034, 9895, 60837, 8171, 57334, 28221, 54393, 21905, 61018, 4080, 20985,
-40632, 56201, 16742, 60556, 36639, 11825, 43384, 5568, 27876, 59253, 19580,
-61554, 29362, 3000, 55917, 8718, 23637, 41113, 64083, 16507, 37359, 26387,
-65303, 940, 34856, 46985, 17525, 50421, 37970, 14339, 53325, 62, 49547,
-10603, 45223, 2378, 50939, 12295, 58388, 7579, 26129, 53011, 23429, 15942,
-62499, 37381, 13185, 41667, 21006, 51804, 27724, 12591, 47958, 22805, 50671,
-34570, 5446, 51389, 22405, 38183, 33063, 13425, 49624, 35213, 24690, 48807,
-28429, 37396, 15125, 61203, 19400, 46066, 21217, 42496, 26878, 5726, 21951,
-48032, 39588, 17623, 42414, 21680, 36608, 61980, 17510, 48162, 24777, 37418,
-32547, 15754, 50280, 33148, 983, 62293, 26570, 38820, 18677, 52876, 23762,
-39540, 61957, 21565, 54903, 1229, 63762, 7026, 29018, 57638, 19399, 53806,
- 5606, 34731, 47914, 822, 49830, 10710, 54167, 20717, 63228, 17945, 43546,
-21577, 57339, 37975, 19436, 54608, 41148, 14805, 46760, 30264, 38946, 3485,
-62621, 12096, 41462, 30614, 5250, 45497, 15379, 51205, 26924, 6339, 52153,
-17901, 48501, 14327, 53971, 208, 52914, 28155, 34405, 45834, 9052, 39553,
-49837, 27983, 9913, 20310, 64650, 29041, 49526, 4846, 45783, 27463, 35739,
-43154, 6285, 46392, 24691, 49651, 33324, 21224, 50609, 12274, 43724, 16224,
-46474, 34186, 24017, 65173, 114, 27908, 41392, 21359, 63765, 27306, 8176,
-49963, 31777, 16616, 53158, 4539, 62717, 30594, 9511, 41510, 24823, 56401,
- 3307, 60751, 20723, 35568, 64172, 22278, 58744, 14950, 55845, 40969, 12947,
-44843, 29453, 50506, 699, 46911, 14417, 58029, 24603, 39061, 9981, 52321,
- 7039, 38469, 11505, 46293, 16789, 50123, 28620, 44743, 20314, 46541, 25808,
- 1325, 52626, 42178, 4042, 31728, 58748, 24062, 55025, 16979, 61510, 14065,
-58300, 39028, 11335, 42675, 17309, 46382, 23200, 39661, 33264, 5728, 37894,
-10462, 39825, 30708, 54735, 8975, 27022, 45524, 6001, 26354, 61949, 20895,
-55632, 35796, 773, 46013, 14803, 43538, 34684, 25856, 35929, 58381, 4941,
-34091, 51066, 6738, 45986, 12557, 44526, 24092, 7490, 63144, 31410, 5169,
-61445, 23816, 39990, 30576, 55392, 16022, 59482, 34847, 23479, 41903, 30227,
-47466, 4960, 44138, 35059, 214, 29514, 54783, 5940, 64059, 9620, 34336,
-56332, 20319, 63592, 624, 24225, 46656, 29788, 7947, 56772, 19098, 63318,
-28686, 9792, 57796, 1740, 64299, 10419, 45157, 4183, 40965, 11480, 52532,
- 2243, 61588, 30628, 56296, 34217, 666, 52216, 13704, 59395, 25268, 11299,
-53186, 29558, 8819, 56678, 2433, 64322, 8173, 58892, 28685, 36490, 11373,
-59744, 32532, 7234, 58190, 15330, 10987, 40928, 17475, 45717, 14516, 35192,
-48080, 3701, 40563, 12709, 58307, 13991, 27363, 59216, 18115, 38579, 25247,
-45755, 2313, 41131, 11554, 51537, 644, 26894, 47252, 4232, 28252, 51123,
- 1278, 64894, 16561, 45734, 20105, 36495, 59215, 16167, 55511, 23527, 62977,
- 1717, 33657, 64066, 21908, 39094, 27739, 42540, 21695, 43605, 13400, 63398,
- 2873, 24634, 50994, 22279, 899, 56205, 37494, 51367, 3881, 41623, 13707,
-57544, 34151, 9035, 64464, 12996, 54882, 17310, 57881, 13638, 65383, 5103,
-34857, 59981, 963, 55560, 27443, 4082, 50489, 19900, 35348, 56390, 11624,
-52221, 2774, 48187, 29860, 36687, 1283, 46747, 25955, 41199, 19125, 48961,
-27570, 60204, 5242, 36418, 29047, 39165, 13580, 45965, 10766, 47807, 4656,
-42340, 30978, 18328, 51400, 23184, 10162, 34080, 61539, 19347, 53136, 30538,
- 3353, 61970, 32142, 19250, 44841, 20986, 53546, 29103, 41390, 9687, 60481,
- 3258, 54816, 7408, 59127, 39644, 23459, 14616, 61762, 17873, 40795, 15137,
-33351, 39382, 1212, 49261, 31914, 16685, 56020, 5945, 64100, 29584, 1722,
-52730, 18708, 62793, 23723, 56603, 19491, 49743, 15731, 37308, 58275, 14785,
-32762, 47762, 3180, 41549, 10868, 47217, 24219, 33906, 56588, 9108, 63821,
-13855, 46959, 17992, 45238, 14723, 29801, 60949, 19922, 54899, 18502, 59170,
-29403, 40301, 19366, 49174, 35459, 11274, 58774, 6539, 25746, 42432, 29662,
- 9175, 64672, 740, 55575, 13795, 61068, 17086, 56818, 25809, 48518, 17878,
-45313, 35966, 22055, 45881, 4075, 42168, 13641, 39421, 58568, 16608, 62344,
-40326, 11964, 43052, 866, 46221, 22714, 42362, 32302, 17097, 52258, 32665,
-56771, 16124, 65400, 29249, 38580, 13440, 50485, 8122, 19801, 60794, 30293,
-44170, 4606, 54455, 38003, 1289, 40399, 51042, 18714, 46531, 21640, 44031,
-14444, 51941, 17099, 54293, 4528, 48513, 27334, 34554, 47410, 55903, 6567,
-60658, 34161, 24098, 56814, 15752, 62395, 20573, 43050, 23552, 50323, 37746,
- 8667, 31735, 61494, 5477, 34517, 55940, 23146, 60778, 18916, 34323, 65139,
-17533, 39708, 61264, 13061, 37309, 24040, 53404, 7899, 55906, 23935, 1096,
-33056, 40334, 9709, 37336, 28573, 43287, 13882, 44801, 2541, 61699, 7207,
-56957, 25402, 47945, 18541, 40076, 55275, 13821, 65156, 41588, 23580, 13162,
-33697, 58850, 18875, 52198, 25443, 15878, 47840, 21040, 44700, 25673, 37257,
- 8254, 40459, 23270, 47860, 14565, 28556, 45347, 18747, 37856, 54317, 29418,
- 8486, 48947, 15836, 42741, 24501, 37635, 20099, 54389, 18572, 60877, 21588,
-57471, 13035, 55740, 2311, 39220, 16094, 53102, 18128, 64636, 7793, 57880,
-23631, 54209, 33167, 25817, 52057, 9836, 63000, 3417, 35689, 54754, 24750,
-11995, 42763, 5897, 40714, 48570, 17772, 36658, 56606, 322, 61084, 25026,
- 4661, 58071, 33601, 23043, 39989, 15909, 37245, 31908, 11807, 49432, 34422,
-28488, 51121, 2661, 63621, 9717, 51478, 24785, 41056, 7315, 50923, 24515,
-45455, 15111, 37647, 59348, 15829, 42643, 13644, 44950, 165, 42399, 6254,
-60157, 33561, 2310, 41745, 64857, 16088, 54519, 29697, 57741, 14155, 64426,
- 7116, 28673, 50249, 21357, 52908, 348, 60453, 27329, 55443, 2079, 39713,
-33385, 3801, 38890, 10359, 51382, 1660, 57067, 9338, 28644, 46655, 18023,
-36947, 63002, 3929, 54053, 27112, 39295, 33454, 21930, 41010, 28657, 46408,
- 9853, 42829, 7894, 59846, 30337, 2696, 58143, 26561, 60887, 17807, 55184,
-32700, 10353, 45337, 3435, 26396, 54804, 33623, 59095, 14250, 54055, 7669,
-38241, 47880, 26162, 8365, 23546, 44262, 26064, 6913, 57278, 33222, 23700,
-36225, 46652, 26351, 9431, 21222, 49600, 31831, 19601, 65242, 17033, 32193,
-58464, 9470, 38463, 30309, 48566, 6363, 41822, 23615, 42669, 15910, 64526,
- 565, 29086, 17993, 46670, 31259, 2938, 49853, 9811, 39266, 30774, 51465,
- 7909, 65450, 2569, 21969, 56674, 41717, 15608, 52929, 28681, 10058, 46498,
- 6193, 31057, 44241, 9667, 53964, 6919, 21696, 32232, 56265, 10909, 29557,
-43601, 18421, 49835, 29048, 62109, 20757, 53452, 19247, 59801, 7615, 57475,
-25317, 50877, 16763, 40791, 12491, 37350, 4970, 57751, 30400, 6967, 36696,
-31885, 6038, 60237, 36202, 7541, 26157, 44251, 1374, 32942, 59758, 4090,
-55772, 30187, 1699, 62962, 28308, 53117, 2620, 30023, 56315, 39367, 10666,
-64176, 6095, 20969, 61284, 36088, 25534, 62030, 6531, 57689, 10739, 62503,
- 5290, 42096, 11170, 39470, 6264, 47636, 34311, 23400, 63280, 32069, 11440,
-47045, 22613, 43251, 31640, 2750, 36753, 8968, 60493, 21417, 33582, 38910,
-27216, 60000, 6627, 38362, 56255, 21195, 64551, 27634, 11816, 59658, 6441,
-30900, 40559, 15691, 48364, 36254, 17963, 52018, 14938, 63220, 27950, 53372,
-19478, 64423, 4763, 56687, 8389, 37319, 25882, 42713, 30919, 18278, 55607,
-14847, 64569, 36596, 2452, 28704, 53769, 6945, 32549, 48735, 4297, 51745,
-27656, 61357, 16842, 47957, 12870, 23445, 52745, 29032, 7957, 38939, 33726,
- 6626, 25465, 44034, 20109, 48617, 38228, 3893, 41791, 12270, 40461, 32564,
- 7983, 31717, 46676, 17456, 52288, 27729, 62475, 32595, 23223, 33837, 41610,
-25655, 65071, 2800, 54451, 32579, 19155, 43604, 20777, 47026, 7141, 51748,
-10325, 59165, 3213, 33254, 65296, 22378, 52374, 34676, 12196, 50746, 32206,
- 8643, 33805, 50166, 5663, 25284, 53149, 35527, 29158, 47082, 20876, 6059,
-24562, 44424, 31067, 63013, 20807, 3099, 60628, 31194, 49255, 1138, 36884,
-51020, 16444, 44934, 3322, 64175, 14098, 55541, 32292, 63064, 35183, 7088,
-46953, 12485, 45389, 5393, 36367, 27827, 61404, 3466, 25126, 57935, 20069,
-60855, 12561, 51430, 35917, 22697, 43597, 62753, 35866, 14082, 58883, 36343,
-21141, 52661, 394, 27718, 45383, 15277, 33335, 46197, 28115, 3999, 48556,
-21251, 39331, 64579, 15013, 36950, 58023, 16173, 48468, 35642, 29109, 57678,
-41907, 3149, 49001, 39907, 4669, 63616, 11648, 46390, 8504, 42411, 3956,
-44085, 12918, 46617, 35716, 5328, 34361, 56018, 22851, 62703, 20126, 51224,
-10990, 44413, 26552, 58232, 20550, 48006, 17707, 45612, 29840, 53544, 11912,
-62164, 38590, 20498, 42559, 18330, 38246, 49971, 15180, 45566, 18769, 60410,
-41463, 7086, 22505, 52389, 23845, 48413, 32997, 10171, 46947, 2399, 30406,
-50730, 22590, 40785, 17081, 45267, 20784, 53511, 23979, 65104, 28242, 10008,
-45276, 7248, 50419, 37382, 1132, 52277, 16750, 55169, 28035, 62751, 19283,
-41203, 151, 56828, 8494, 47728, 14193, 44371, 28721, 2633, 46052, 10401,
-36968, 51215, 20327, 44357, 14811, 50783, 33243, 8075, 64262, 31197, 1073,
-47521, 8621, 42948, 2300, 47893, 13986, 44303, 20167, 46362, 16254, 60124,
- 6096, 57559, 37095, 3578, 47571, 30143, 17709, 33546, 60278, 19143, 44576,
-12445, 26153, 64981, 35324, 11008, 30650, 53316, 22341, 38721, 63321, 9630,
-48575, 24651, 51781, 17827, 62979, 40427, 2508, 52593, 10001, 24929, 54341,
-22667, 62281, 20405, 48137, 23966, 64645, 13371, 58840, 6373, 48653, 11983,
-53673, 5502, 61118, 13225, 51729, 15603, 31583, 41012, 8264, 51131, 12799,
-60839, 15285, 57484, 24086, 37526, 27033, 51317, 20292, 36514, 1993, 32284,
-15596, 62790, 36812, 16875, 47953, 19368, 38688, 29732, 62035, 19802, 8442,
-57576, 13876, 64477, 31548, 52687, 19869, 3856, 26974, 50458, 39739, 15537,
-53527, 19908, 62859, 18273, 31939, 59782, 11068, 49675, 20541, 42063, 5885,
-44787, 1841, 24560, 60021, 22083, 56321, 24497, 60629, 20079, 52558, 15023,
-50101, 34283, 10067, 47160, 1898, 39343, 31642, 7626, 53860, 9968, 24693,
- 4671, 54311, 26338, 8530, 64137, 25550, 34147, 60393, 18247, 38434, 56177,
-10216, 63032, 32761, 12830, 59614, 183, 24403, 50052, 27402, 3378, 52870,
-25333, 2042, 50322, 9396, 20201, 63045, 32921, 17012, 51744, 34134, 26716,
-35700, 56233, 15868, 61304, 25789, 54896, 31654, 18820, 49931, 29524, 8875,
-45289, 1422, 41933, 27149, 61283, 16162, 50226, 1801, 42208, 11200, 52058,
- 2650, 63676, 21524, 37262, 31340, 6529, 54709, 10722, 61145, 6973, 32110,
-56761, 5725, 37693, 11552, 24901, 62355, 36455, 3687, 42807, 16754, 53468,
-39779, 15492, 54803, 38168, 17544, 44222, 803, 51574, 30750, 59398, 3392,
-42982, 13843, 37248, 59155, 18794, 54787, 26746, 15312, 61756, 12795, 39881,
- 5920, 42536, 11865, 50445, 29761, 48841, 17612, 42681, 22490, 53233, 18994,
-61208, 34617, 25449, 57723, 21895, 1350, 54993, 26712, 63412, 4210, 58912,
-29567, 14176, 54181, 35260, 26316, 56934, 17432, 59735, 26732, 39230, 30511,
-62411, 730, 52854, 22306, 48391, 13502, 26477, 62000, 34827, 8665, 57159,
-41778, 5209, 49890, 22071, 58556, 36168, 8905, 22652, 57714, 39773, 7351,
-45270, 3449, 31673, 36815, 21291, 60968, 448, 45804, 11135, 32096, 59071,
-27666, 34326, 61077, 15047, 43810, 5722, 56440, 10616, 53199, 4639, 43389,
-24918, 37981, 20892, 42730, 22169, 47488, 18286, 46004, 6906, 38756, 56447,
-16870, 61772, 25095, 38294, 1814, 45492, 29620, 4324, 63441, 11350, 39699,
- 7422, 53706, 28158, 55844, 42104, 4743, 24926, 54918, 1029, 65112, 10882,
-48494, 2335, 40189, 51581, 23396, 41192, 1643, 48927, 12356, 61051, 32620,
-55205, 9337, 28265, 45025, 6244, 41947, 10849, 46859, 4677, 39056, 27328,
-34632, 58035, 11895, 53241, 17198, 57537, 40018, 10500, 42849, 2729, 39090,
-10893, 43337, 35, 39972, 21086, 64931, 29274, 36502, 26859, 62432, 16683,
-57695, 29837, 44999, 51801, 33253, 16807, 48056, 29375, 40842, 5331, 47605,
-10963, 54504, 6088, 25596, 42562, 17816, 50771, 36931, 19505, 54913, 33643,
- 7392, 61826, 40509, 14137, 42890, 63909, 23401, 34791, 46168, 26264, 13481,
-58552, 23730, 9858, 59959, 2325, 22778, 48943, 29956, 10476, 38471, 422,
-64729, 14606, 60567, 23694, 35259, 54490, 11708, 47249, 4068, 37915, 23655,
-62921, 15569, 55918, 35561, 24244, 39898, 5391, 49775, 16821, 46854, 22675,
-40365, 26231, 51316, 17747, 36338, 27016, 58765, 30532, 48430, 17625, 32162,
-57005, 12810, 63007, 1360, 26185, 59585, 23404, 8724, 64755, 12686, 56140,
-28266, 7805, 34354, 48492, 18183, 51974, 495, 31471, 41560, 4253, 34118,
-45921, 21585, 43915, 23843, 59730, 20450, 56147, 36054, 6914, 25254, 58598,
-12695, 65399, 1562, 40425, 10886, 50194, 5273, 30812, 47705, 29411, 39378,
- 9296, 34441, 45806, 18938, 39904, 49454, 6813, 43964, 12940, 38674, 29399,
-36289, 6317, 55238, 9580, 24437, 41846, 31957, 8901, 32664, 41638, 51661,
-10643, 21986, 46271, 25966, 11876, 63289, 13816, 39374, 975, 51358, 29234,
-44300, 2162, 25148, 63957, 18491, 55877, 13936, 58624, 5243, 40986, 31463,
-19228, 56721, 20839, 37653, 12605, 45094, 1595, 49196, 27201, 37406, 17552,
-44721, 26779, 39452, 19856, 55702, 14214, 63710, 519, 57310, 10060, 36802,
-30294, 59737, 24444, 876, 47583, 28757, 5721, 52587, 32013, 17332, 54355,
-42343, 19027, 49482, 22728, 61559, 16350, 47242, 6768, 21672, 57593, 39650,
-13846, 45763, 29198, 44281, 15673, 56575, 21971, 32303, 6463, 59374, 33268,
-25606, 39332, 6895, 46484, 16613, 36986, 57998, 13648, 61938, 32977, 56574,
-21601, 55211, 19420, 63285, 222, 31073, 40828, 25158, 37808, 29737, 15107,
-51917, 27194, 50497, 18645, 53379, 26482, 61776, 12675, 44334, 5203, 54767,
-11239, 52373, 6033, 48389, 34560, 2410, 20736, 12239, 65068, 38901, 1534,
-57503, 18976, 53740, 23549, 42347, 21660, 36747, 62006, 1318, 55209, 7761,
-26910, 45305, 11645, 41676, 47965, 17134, 31809, 59355, 9001, 32945, 11091,
-60085, 4927, 55000, 36153, 16, 35120, 45361, 20202, 50575, 39833, 6803,
-37035, 58329, 17654, 52835, 21492, 41896, 3609, 46779, 13557, 31456, 64542,
-22338, 33011, 54124, 8048, 34386, 45208, 28608, 8347, 60730, 15947, 54297,
-25279, 59133, 14081, 63381, 694, 43294, 12071, 64987, 2924, 52190, 10141,
-44079, 256, 54018, 9051, 44778, 21960, 36914, 29875, 47999, 5422, 33866,
-49696, 32155, 46451, 15264, 38836, 63615, 21958, 10319, 61676, 29062, 43729,
-14955, 63931, 23913, 56313, 8382, 58491, 3480, 50181, 10488, 45371, 1976,
-22783, 63338, 34873, 4460, 38172, 26957, 49047, 20734, 44953, 18062, 63914,
-37491, 7273, 62520, 18258, 56941, 25302, 11133, 55826, 2110, 24909, 61693,
-22439, 55437, 4454, 61359, 11595, 49950, 22640, 36671, 58477, 13132, 56025,
-27422, 65449, 1969, 23128, 39741, 59667, 385, 54863, 30905, 37017, 25104,
-48338, 31330, 16631, 61741, 19039, 55346, 34470, 10138, 49988, 28897, 41867,
-25627, 49402, 15600, 53067, 37051, 8103, 49836, 4423, 63608, 18736, 55012,
-30253, 8545, 51742, 32098, 1399, 62906, 11352, 50368, 2925, 45128, 34989,
-28879, 39407, 25272, 64225, 3478, 21670, 44648, 34880, 11065, 58566, 42052,
-14629, 64919, 36878, 6027, 31628, 56596, 1249, 45228, 13265, 43740, 23418,
-64254, 34394, 9384, 27720, 60179, 22263, 7696, 35300, 51117, 28426, 12537,
-62873, 36137, 17381, 52208, 15493, 55539, 33944, 23687, 65007, 489, 22355,
-49790, 25020, 2161, 27773, 40718, 7978, 43335, 14736, 46187, 17740, 62128,
- 3741, 54871, 7741, 64582, 33228, 5029, 35078, 63461, 7450, 41293, 21889,
-55403, 17587, 47946, 19085, 43111, 22265, 42128, 13577, 24093, 60263, 40830,
-45863, 6327, 31405, 50508, 15067, 44337, 12603, 63322, 3110, 52029, 11679,
-28540, 47440, 19212, 38226, 64265, 4468, 52524, 15395, 30102, 55689, 5337,
-36745, 21431, 56563, 42450, 15735, 39103, 12246, 47291, 28316, 64256, 5737,
-55371, 11050, 30717, 65194, 23812, 3342, 40876, 30394, 48218, 11129, 58105,
-27467, 51479, 5746, 39339, 14759, 59595, 19049, 49566, 26180, 4565, 58409,
-19940, 33875, 46113, 10503, 41565, 3261, 44590, 30432, 51914, 18889, 48076,
-23510, 45264, 21626, 40983, 19262, 63739, 14917, 39811, 26305, 59107, 7633,
-51994, 13597, 41091, 61043, 20496, 3038, 25823, 58417, 5026, 27153, 52756,
-41614, 24792, 5692, 58114, 33515, 9015, 49101, 20603, 40498, 28734, 36449,
-25933, 64839, 28629, 33555, 53342, 10293, 47207, 28635, 50865, 15992, 34282,
-59137, 7914, 53771, 33205, 15336, 49134, 13009, 44029, 2788, 50315, 38184,
-21838, 44908, 33098, 12033, 46612, 16615, 42358, 20295, 45390, 18474, 64811,
- 3442, 28934, 48103, 5398, 43906, 16796, 36709, 53343, 7608, 27958, 44123,
-14623, 50559, 3765, 56427, 8261, 59876, 34652, 5923, 47690, 14109, 51127,
-27386, 37329, 1312, 47472, 11716, 33053, 59804, 3592, 26991, 62362, 24057,
-46432, 22408, 42469, 13858, 39695, 65187, 19956, 58588, 36545, 18786, 41943,
-22918, 60800, 27196, 11580, 50614, 7640, 45665, 15913, 40440, 55664, 13624,
-63373, 31044, 17690, 33851, 48520, 9272, 26168, 60338, 12368, 38379, 27558,
-34358, 58688, 3802, 40641, 12768, 50942, 30171, 49246, 3580, 41057, 61725,
-23542, 4561, 58368, 42398, 19, 50851, 30486, 8959, 43151, 2740, 59815,
- 9848, 29507, 51753, 39515, 8689, 43619, 31199, 52500, 15956, 60894, 26672,
-54649, 9616, 51776, 22894, 47930, 15825, 30996, 43811, 17922, 59086, 12260,
-29317, 45809, 15744, 48972, 4239, 37105, 28767, 60087, 1068, 57070, 17321,
-63638, 35712, 8903, 27249, 19466, 59391, 21416, 35401, 61661, 6955, 37787,
-19766, 40218, 22502, 57629, 34028, 9198, 60631, 32207, 16096, 44190, 25557,
-62681, 1654, 37852, 20092, 51959, 34318, 887, 30091, 54422, 22916, 61940,
-19081, 51364, 16055, 31715, 37931, 25981, 46856, 15461, 49601, 28715, 62815,
- 6495, 25999, 53783, 35763, 16278, 33591, 58803, 25298, 48478, 719, 43032,
-10570, 64132, 35885, 30236, 50520, 333, 27766, 65472, 20444, 56356, 34548,
- 8704, 27647, 57496, 5291, 38737, 10904, 59475, 7573, 49275, 34671, 28074,
-50093, 2270, 37942, 31989, 18970, 58139, 28213, 9788, 51461, 30057, 43048,
-17982, 50219, 37076, 1681, 20106, 55117, 35378, 15937, 51304, 26635, 38122,
- 1589, 62386, 13962, 54638, 15115, 38709, 7290, 47823, 18016, 44101, 20002,
-55907, 7659, 62319, 3628, 29561, 43243, 25186, 434, 52166, 23975, 40874,
-19923, 60564, 31414, 6258, 65197, 14613, 57997, 37776, 3138, 63853, 27901,
-51483, 195, 41507, 12602, 52457, 38466, 20758, 61640, 23543, 55091, 12449,
-29127, 63498, 36370, 18292, 58813, 22945, 45478, 19294, 43440, 15188, 50195,
-24566, 40872, 32793, 4404, 61994, 13157, 56549, 22715, 65498, 7582, 38658,
-29815, 54033, 16598, 40567, 14285, 55931, 5320, 60165, 24535, 3217, 45424,
- 9297, 28339, 51082, 6517, 48407, 9509, 33881, 57901, 18633, 61939, 32552,
-51818, 8727, 28205, 50175, 5270, 36556, 55220, 3032, 22049, 57778, 40072,
-18480, 51621, 21567, 62631, 15530, 31114, 53141, 17113, 57201, 535, 43467,
-17458, 52912, 33390, 9749, 53524, 38396, 18664, 33608, 47603, 14681, 39679,
-63758, 17959, 47473, 22608, 36107, 44027, 14494, 33459, 58836, 20485, 63826,
- 5560, 47797, 32314, 3157, 36133, 30407, 36818, 6515, 32222, 58763, 39277,
- 916, 49952, 36082, 24090, 55041, 1960, 59306, 34610, 25780, 63297, 9221,
-32701, 37966, 25908, 48930, 4088, 52755, 29820, 55999, 41350, 11195, 49279,
- 4169, 27699, 52392, 24281, 59152, 13513, 44061, 4729, 45571, 21185, 40140,
- 2931, 49663, 31176, 8836, 35955, 22084, 57914, 30841, 8337, 62535, 25497,
-49348, 7725, 40744, 2751, 44125, 8211, 40091, 54130, 13696, 60832, 1506,
-56831, 9331, 42226, 13571, 34368, 44860, 20239, 8101, 63694, 2167, 41244,
- 9777, 30485, 52620, 23293, 39271, 17889, 47496, 13153, 22936, 55439, 35263,
- 7098, 50797, 11341, 23171, 60599, 36116, 12986, 33532, 61634, 25752, 35168,
-54381, 22105, 4735, 60266, 11929, 55096, 15548, 65048, 39448, 3476, 46154,
-23038, 36443, 57054, 8143, 62814, 11669, 30958, 60317, 38388, 9547, 46494,
-31224, 3721, 61114, 13292, 53151, 30073, 46697, 5359, 49291, 23155, 57255,
-13479, 60350, 3022, 39578, 14685, 33499, 41958, 23718, 55458, 13702, 59906,
-39355, 20455, 61604, 4570, 52630, 35797, 16304, 48546, 32241, 51125, 8362,
-27079, 49689, 35166, 9069, 30865, 60616, 21788, 47366, 33014, 10446, 45990,
-14730, 40386, 4153, 49193, 41889, 20495, 3163, 48377, 7069, 40598, 10798,
-65148, 27498, 37889, 2847, 63162, 9961, 56231, 21085, 43972, 24234, 40699,
-14477, 34998, 50997, 17354, 45265, 9786, 43339, 1102, 51174, 26680, 37056,
-11885, 34162, 49516, 15448, 37907, 56937, 14694, 60008, 35253, 21044, 46776,
- 4902, 43097, 24508, 1989, 21010, 59243, 37559, 18457, 45819, 11786, 40162,
-28747, 49749, 33162, 326, 46385, 8431, 41976, 4666, 47499, 9917, 35434,
-45876, 25008, 38525, 21887, 63519, 14338, 25940, 46748, 30127, 11415, 64720,
- 7077, 24398, 60529, 4293, 25603, 53040, 34387, 11599, 54315, 5034, 61561,
-26219, 3601, 47223, 13429, 39200, 12066, 57104, 23218, 65134, 15414, 59574,
-27912, 46638, 9274, 22498, 56798, 26498, 8646, 48390, 13562, 40099, 30324,
- 6773, 50028, 19777, 52118, 15228, 53787, 6636, 39959, 31542, 12856, 47501,
- 262, 23251, 54426, 17941, 33285, 46296, 9651, 42709, 864, 50231, 29484,
-64934, 14335, 58651, 23819, 53936, 12152, 60038, 20729, 54342, 42274, 12460,
-49625, 40299, 16385, 45486, 18046, 65518, 21881, 53519, 24254, 59088, 27759,
- 3792, 42355, 22061, 44545, 19339, 32176, 51885, 21172, 60076, 1209, 56728,
-38468, 23793, 45645, 21668, 54815, 37595, 12536, 60953, 6645, 53768, 2435,
-59685, 40395, 9429, 46825, 24761, 37697, 29803, 43931, 1900, 46820, 21270,
-49458, 15090, 53144, 1305, 29140, 44603, 33203, 18380, 43812, 20998, 46693,
- 6270, 29630, 54623, 15899, 63869, 387, 19365, 45244, 35802, 23330, 47967,
-14415, 26446, 64421, 18428, 55898, 39397, 19290, 45779, 34594, 11009, 22377,
-59047, 35703, 591, 41771, 34408, 24809, 32806, 64323, 25890, 57798, 12381,
-51445, 6028, 37223, 31872, 8849, 46234, 11625, 42543, 27764, 8650, 58447,
-26182, 653, 20740, 40694, 56463, 13434, 21024, 58345, 38222, 14332, 54795,
- 6951, 26668, 54128, 1448, 56551, 19527, 59854, 32864, 9124, 54387, 39238,
-26903, 62309, 21446, 52125, 30069, 6181, 53562, 32082, 16040, 46312, 29384,
-38773, 9249, 59562, 5603, 48577, 27846, 2022, 61454, 22994, 57034, 21572,
-64524, 30896, 8394, 58398, 28446, 53640, 20963, 61882, 26197, 4208, 44441,
-30387, 826, 64873, 28234, 54564, 15324, 52640, 30683, 47887, 33844, 4036,
-53815, 24087, 62021, 15682, 59577, 7575, 20269, 56215, 29770, 63656, 17814,
-55722, 23092, 60962, 26475, 6340, 62093, 10486, 47131, 5366, 37013, 59480,
- 1555, 55970, 22466, 40689, 29400, 54460, 16381, 33003, 44713, 7362, 27891,
-62544, 19391, 49013, 11162, 53644, 37892, 18696, 57554, 24112, 44515, 16776,
-42319, 8896, 45150, 1608, 53068, 19340, 63896, 37130, 14414, 41473, 62529,
-22223, 33794, 65509, 17314, 56837, 13903, 44065, 2933, 46081, 23399, 64738,
-16150, 59060, 37199, 18688, 63124, 43094, 5773, 39158, 56994, 15373, 64337,
-17425, 56109, 35498, 8607, 24898, 51055, 30430, 6848, 42027, 26749, 35156,
-46636, 5801, 29195, 64799, 2666, 28143, 53002, 4566, 42126, 11871, 37196,
- 6165, 43127, 12739, 36796, 62450, 17467, 55878, 7184, 35572, 61596, 4235,
-38824, 24756, 50171, 31918, 16725, 52360, 12897, 59867, 6306, 27298, 46114,
-20583, 42505, 22611, 44001, 18557, 32982, 61968, 14512, 58112, 3788, 62778,
-13671, 54475, 24480, 64236, 3949, 32588, 40777, 20176, 64601, 12776, 57233,
-38998, 8308, 62232, 35377, 24214, 47841, 10752, 43922, 34718, 30572, 49419,
-25227, 3861, 53701, 6205, 40696, 49330, 2683, 44226, 8279, 29250, 50100,
- 6664, 25830, 65507, 43458, 9677, 25323, 61995, 20266, 54893, 6164, 52199,
-10708, 49588, 1010, 30977, 40012, 22596, 64967, 16267, 54403, 29240, 56526,
-17464, 64455, 33791, 14858, 44236, 29679, 62600, 34268, 5087, 32748, 53366,
-24577, 6043, 43082, 23795, 35085, 63047, 20232, 37633, 27865, 43438, 11962,
-26384, 61300, 24180, 14200, 50982, 12753, 42542, 1281, 36825, 60672, 12161,
-40263, 57957, 23337, 284, 64735, 33788, 26832, 53707, 17639, 58777, 42567,
-12921, 37677, 5877, 46941, 10950, 38325, 48432, 15966, 43933, 40, 40565,
- 7624, 47567, 32799, 16180, 54870, 23940, 41580, 12434, 37679, 32262, 7150,
-60326, 10280, 25681, 65417, 12951, 41305, 1456, 47151, 26971, 36094, 50987,
-23688, 12916, 35781, 44952, 11670, 39946, 1706, 52456, 32797, 19005, 54122,
-23268, 57922, 11922, 31822, 39484, 13684, 49028, 3009, 45943, 10461, 37332,
-57177, 18556, 58982, 35847, 1078, 38799, 27264, 45315, 16769, 29227, 42678,
- 7689, 50341, 799, 53972, 29540, 51130, 23616, 40661, 12725, 43162, 2964,
-30868, 54579, 6224, 32881, 3811, 51375, 8041, 31776, 41803, 23852, 35784,
-60514, 29149, 12036, 34608, 50308, 7792, 26964, 44828, 14146, 32204, 61062,
-25079, 2087, 37303, 26288, 39987, 31191, 15733, 48863, 34027, 1857, 35786,
-56407, 13830, 63583, 691, 31718, 58482, 15780, 34260, 47582, 14372, 35682,
-59199, 20511, 55123, 27180, 60678, 20792, 56385, 32753, 10226, 45533, 34181,
-27019, 46308, 12138, 30777, 54265, 7588, 37067, 10310, 61453, 4704, 43675,
-19475, 36475, 65333, 3150, 56628, 9222, 62373, 11979, 54576, 5536, 26265,
-41843, 19332, 43131, 17383, 45790, 30631, 8331, 37767, 27263, 50728, 9860,
-47581, 23741, 51060, 3190, 24649, 48897, 27305, 905, 55834, 18335, 61401,
-25748, 6970, 59787, 11121, 54915, 34128, 28037, 58906, 12610, 21137, 57317,
-34649, 23548, 63082, 17144, 56510, 35919, 2434, 33295, 19107, 50781, 32528,
- 8796, 31208, 43332, 22142, 45826, 18230, 35783, 61413, 14445, 44955, 2282,
-47959, 35610, 3822, 25140, 49731, 1514, 38411, 53006, 6918, 47279, 11382,
-22798, 59441, 42112, 1610, 46594, 29816, 62143, 2553, 48878, 12982, 44573,
-15577, 64195, 6665, 52025, 34831, 868, 46939, 35399, 5011, 55933, 23959,
-57391, 17235, 26256, 49149, 22331, 6853, 51637, 41928, 19493, 49221, 3098,
-32278, 38119, 6976, 33468, 20800, 52716, 28170, 34252, 57801, 20060, 4059,
-61383, 32454, 56621, 17904, 54254, 19755, 64008, 38627, 10828, 50109, 16987,
-57094, 3336, 63238, 41546, 20029, 39504, 48980, 16804, 43444, 22261, 56890,
-33985, 10747, 64517, 4996, 33606, 58486, 3317, 27279, 50512, 19660, 43565,
-15101, 48305, 39299, 2679, 44505, 16569, 51702, 19694, 63086, 25256, 35555,
-61331, 17674, 52407, 29995, 1972, 50434, 10833, 46898, 23872, 55095, 6054,
-33398, 58315, 1833, 64533, 31723, 19563, 62696, 35927, 6772, 20706, 56174,
-17070, 61151, 26626, 51555, 11919, 44366, 20750, 60316, 42744, 16457, 38817,
-54025, 732, 62214, 8762, 21455, 40861, 56122, 1602, 25283, 40652, 58006,
- 3550, 55193, 9854, 20730, 49794, 29676, 60334, 7867, 54822, 3832, 62250,
-19218, 54328, 27695, 46472, 18161, 38836, 23089, 47998, 17779, 35952, 50977,
- 7295, 31486, 61434, 8743, 29909, 46183, 1899, 40476, 10814, 50254, 1032,
-26301, 52490, 23719, 2992, 63878, 16493, 57528, 40446, 17197, 64425, 21776,
-48128, 26212, 40786, 28167, 49534, 16116, 32016, 50386, 26149, 33132, 36764,
-27748, 38037, 30241, 48740, 1067, 52313, 29199, 56168, 5040, 40443, 58953,
-14795, 55537, 19022, 59717, 30179, 7226, 37205, 30995, 61092, 16390, 53198,
-32874, 13387, 42551, 4168, 37683, 52877, 22350, 40954, 20866, 65221, 15316,
-37290, 30744, 50974, 27520, 11153, 47929, 23, 42022, 14308, 44932, 23737,
-58357, 40772, 4799, 56171, 27269, 63411, 16089, 56838, 4375, 30172, 48452,
- 9711, 54888, 25263, 58226, 31220, 18290, 61140, 40103, 12360, 45097, 18098,
-30991, 60257, 18662, 54575, 41363, 10029, 26572, 65004, 19157, 52726, 15233,
-40266, 29070, 59342, 4831, 50659, 22630, 40956, 18958, 57876, 30712, 16429,
-63868, 31864, 17940, 47791, 8568, 33576, 44247, 2501, 59431, 37335, 28177,
-12542, 54452, 16489, 45010, 11576, 56817, 23654, 64182, 45606, 9031, 62661,
- 2627, 25474, 50204, 41294, 22123, 9498, 26522, 42624, 13255, 44984, 2459,
-27563, 59662, 6824, 40291, 25139, 49610, 21891, 11199, 56347, 181, 31238,
-58017, 6457, 52007, 9649, 25115, 44985, 18834, 41506, 48697, 15916, 32182,
-54876, 7228, 64319, 28136, 59246, 8682, 30408, 64832, 25726, 41120, 7581,
-45546, 3982, 50581, 8550, 27102, 43932, 5816, 64139, 25089, 38995, 32557,
-21136, 65479, 13187, 50718, 15776, 40553, 30761, 15212, 49235, 34776, 10432,
-26309, 58667, 39048, 4010, 46940, 35225, 5909, 33343, 61971, 24565, 39387,
- 9760, 26831, 58254, 22568, 11778, 48606, 26243, 34066, 57693, 5496, 36489,
-30045, 61251, 10348, 22309, 46262, 28434, 36647, 51848, 7062, 42269, 13661,
-48293, 23103, 45205, 13189, 43367, 6057, 62992, 10273, 59381, 4880, 53451,
-10879, 61622, 4063, 26072, 57189, 19190, 36844, 50561, 15035, 34656, 63423,
-18975, 44419, 23132, 37715, 64633, 8401, 48374, 36577, 19855, 49072, 579,
-25417, 49892, 13221, 44703, 2597, 57971, 10919, 62530, 135, 55951, 11242,
-38538, 14595, 52131, 1547, 56184, 7590, 64809, 16863, 57632, 34813, 8902,
-25913, 49154, 19938, 33331, 46278, 6550, 42059, 2662, 39159, 62533, 14400,
-46079, 5642, 42234, 9715, 38080, 64316, 21440, 57931, 28288, 10012, 48148,
- 2509, 44200, 8926, 47493, 1039, 61897, 7121, 38103, 59552, 17663, 53665,
-30079, 60456, 5790, 52341, 10439, 28466, 48496, 16808, 45059, 1847, 42392,
-12819, 38849, 62671, 19557, 44136, 34077, 6489, 38006, 10858, 46980, 8115,
-32941, 57858, 21974, 63147, 4726, 33505, 39071, 2467, 30266, 51268, 37453,
-16378, 44829, 7307, 32329, 57076, 8780, 25103, 42263, 11642, 58687, 2876,
-48438, 13501, 41413, 50103, 8025, 39150, 59236, 14511, 37500, 64251, 14927,
-54198, 32900, 16995, 61164, 35050, 7739, 62169, 20965, 50035, 15640, 43694,
- 596, 30794, 40093, 16735, 35902, 55354, 13321, 27884, 52615, 31535, 63126,
- 4845, 59324, 24973, 34076, 46320, 17832, 36374, 62576, 13300, 30604, 45555,
-28501, 35726, 50603, 14184, 34125, 45753, 20570, 39175, 62799, 2328, 55436,
-27701, 8168, 60527, 39465, 18486, 45598, 35075, 3737, 33286, 53591, 21485,
-36218, 12273, 54557, 33933, 27881, 56985, 22938, 33839, 58816, 20774, 40152,
-15781, 48951, 8644, 59563, 4698, 40613, 32249, 25610, 61821, 9371, 55618,
-37246, 4525, 60464, 28928, 48176, 15806, 32964, 64709, 28498, 11084, 57425,
-14221, 37025, 343, 56534, 29808, 52594, 2396, 35294, 59656, 29166, 13270,
-46480, 19398, 44623, 17243, 49190, 20325, 53368, 33361, 12479, 65286, 1131,
-31147, 61937, 18523, 53595, 34032, 10403, 36083, 57945, 22412, 39666, 21192,
-41414, 23905, 44146, 20256, 42200, 21976, 45395, 37275, 10013, 48710, 358,
-28706, 54071, 5470, 31027, 51514, 6754, 49170, 17027, 31438, 40816, 14727,
-59675, 32543, 11300, 35060, 54940, 5109, 36220, 29433, 53647, 19171, 38987,
-22121, 42419, 24897, 44533, 4973, 63263, 19697, 45770, 23142, 42143, 21560,
-44911, 12625, 23004, 63890, 39552, 11741, 61226, 74, 27971, 63501, 22465,
-54891, 12424, 26828, 53910, 20364, 56409, 22462, 59951, 28537, 6545, 45500,
-14726, 49865, 33430, 18967, 62524, 17682, 51410, 20014, 42792, 22413, 45994,
-24805, 4364, 40622, 33816, 9170, 26591, 47232, 20617, 37413, 64021, 13050,
-39533, 19564, 51611, 26105, 59557, 22475, 8461, 54006, 2867, 27753, 52750,
-21861, 63639, 23365, 54720, 27839, 5641, 50803, 13294, 48271, 15759, 56000,
-24391, 63521, 20033, 5433, 55064, 12400, 38659, 50424, 17540, 36853, 53308,
-18384, 47178, 30341, 37131, 25845, 62767, 4069, 22300, 55518, 25355, 2222,
-42981, 31146, 4816, 45815, 26926, 9538, 48379, 3725, 47039, 24555, 32953,
-41002, 5124, 60314, 25949, 53424, 14877, 58194, 24646, 44654, 7087, 32713,
-64958, 1777, 40347, 20459, 49483, 35039, 10545, 57337, 5970, 52255, 29912,
- 1720, 34825, 55555, 4708, 61109, 9499, 23497, 63723, 26405, 3186, 59030,
-13865, 32815, 48039, 14809, 37639, 52562, 21964, 1114, 62208, 10234, 24927,
-49755, 13675, 40296, 4937, 49497, 31000, 1208, 61845, 13030, 38902, 14937,
-48287, 441, 53988, 9605, 56204, 23087, 41906, 27977, 51357, 11812, 48380,
- 2638, 35202, 46588, 24026, 12817, 52600, 18317, 44102, 2656, 52109, 9453,
-22054, 54129, 41284, 21113, 46188, 19036, 47970, 16707, 45115, 14903, 32038,
-47056, 5764, 40946, 64419, 3214, 54853, 11052, 63916, 7416, 42379, 2830,
-39338, 48600, 23147, 43819, 15172, 35543, 46060, 2637, 24097, 59860, 29448,
- 66, 51261, 11444, 48220, 2779, 52307, 12087, 65369, 6991, 56216, 14823,
-60880, 23232, 34950, 63750, 17285, 37909, 57558, 16367, 34061, 61663, 13049,
-55376, 4114, 58224, 30009, 5883, 54017, 26985, 62897, 15215, 43750, 59319,
- 8795, 24662, 46200, 6873, 51450, 13144, 60750, 18540, 49025, 29419, 40273,
-11654, 60454, 14326, 52907, 4377, 40252, 49643, 2380, 32394, 53639, 18118,
-34487, 50406, 9399, 44406, 16765, 48634, 36320, 617, 43055, 11515, 40216,
- 2199, 47243, 34606, 25010, 54214, 1463, 40283, 53549, 7645, 36915, 27295,
-60876, 13084, 54164, 16364, 64741, 29336, 54976, 18599, 63652, 39125, 12443,
-59747, 1080, 32443, 53300, 4026, 60785, 31447, 7101, 32483, 49816, 37492,
-15895, 40304, 60007, 13786, 50020, 804, 42947, 14119, 44763, 35203, 24568,
-41114, 28532, 52012, 9785, 42366, 8202, 34991, 49040, 32666, 61212, 21296,
- 3659, 62907, 31651, 505, 65237, 27010, 7620, 52859, 10986, 34562, 53466,
-38194, 11322, 45888, 29072, 61029, 20519, 52296, 18853, 38512, 62569, 20853,
-42511, 15289, 55660, 1579, 51982, 28444, 36613, 10256, 40960, 33812, 4456,
-51481, 12291, 60045, 37378, 18441, 46452, 12547, 43765, 8187, 28346, 50474,
-22161, 41753, 12069, 58263, 26550, 48703, 18280, 44091, 21004, 53398, 38322,
- 7477, 46893, 35102, 28273, 53094, 8584, 29450, 61065, 4439, 24308, 36400,
-51532, 20850, 40668, 56048, 16809, 58198, 22860, 61256, 18193, 56593, 32813,
-17265, 47704, 6091, 65248, 30177, 40886, 18942, 45470, 30772, 3308, 63172,
-13818, 34733, 56784, 19215, 60048, 22602, 6652, 63482, 42121, 21962, 40538,
-14260, 59659, 25027, 35679, 48871, 1170, 26279, 63164, 4599, 55147, 25950,
-64155, 6600, 36991, 62806, 15714, 55305, 17739, 31154, 37575, 23540, 39924,
-28058, 51798, 18586, 62916, 26516, 8272, 59639, 32444, 57071, 8807, 21262,
-63772, 39899, 6496, 47112, 20424, 34770, 60196, 16099, 57219, 27318, 37788,
-33380, 26471, 39918, 31192, 2371, 50041, 13708, 30770, 47222, 7874, 23834,
-48211, 2902, 28353, 43466, 19890, 45818, 15713, 50954, 34665, 21280, 42516,
- 7489, 39361, 30044, 17701, 33644, 57311, 15476, 63543, 29692, 36077, 3829,
-53260, 24018, 7865, 58987, 33614, 2861, 47986, 25835, 61433, 15003, 33251,
-58529, 22268, 6861, 42187, 57149, 15045, 36894, 25854, 58389, 7919, 28575,
-52480, 21804, 63049, 25560, 55037, 19396, 58873, 11696, 32580, 63443, 12645,
-22785, 31949, 57568, 4801, 33306, 39667, 3276, 36847, 9969, 48554, 7965,
-45236, 2921, 30826, 43554, 22075, 49555, 16477, 26846, 42120, 10795, 47088,
-21379, 53482, 233, 28117, 63811, 24032, 9078, 45517, 18880, 38728, 21001,
-56991, 3044, 61816, 10425, 58905, 42, 36413, 20908, 57190, 27742, 59835,
-22154, 972, 26040, 45799, 29423, 39734, 14580, 45234, 16092, 39133, 60377,
-17636, 47692, 23835, 8996, 27861, 64679, 19266, 53762, 6713, 39995, 10506,
-58650, 669, 30747, 52685, 8990, 64478, 27831, 39204, 14076, 63718, 21481,
-54615, 18772, 60896, 31479, 19657, 46847, 26141, 5424, 54856, 23715, 58822,
-17461, 60955, 37918, 1004, 65459, 15811, 47523, 21321, 42545, 8014, 64704,
-11549, 40836, 2489, 29805, 57262, 14618, 61633, 5362, 38307, 24643, 44277,
-17803, 41430, 54521, 9219, 28874, 47266, 5483, 31215, 37617, 91, 47047,
-10997, 43197, 7366, 38139, 52589, 21233, 42646, 25798, 11713, 59971, 36385,
-12712, 58489, 37613, 20218, 47591, 695, 26198, 44472, 9198, 53489, 37997,
-29313, 129, 54416, 8328, 45777, 30479, 7164, 61800, 13717, 38611, 50841,
-16195, 31892, 38137, 8335, 29328, 50552, 23763, 8999, 39132, 24856, 50753,
-10370, 47818, 14646, 58759, 431, 31304, 45576, 15367, 53938, 37292, 17073,
- 3696, 38345, 29339, 47984, 26444, 14219, 55110, 27429, 64615, 7458, 25690,
-42949, 29947, 9516, 50719, 1364, 54858, 12855, 52780, 35633, 25652, 58335,
- 3839, 36058, 60234, 32282, 11294, 58950, 35117, 8647, 62980, 26546, 37306,
- 9357, 60611, 1991, 52093, 24358, 47906, 3463, 64983, 40554, 1317, 42875,
-26344, 5752, 55685, 41238, 14850, 46418, 35346, 15809, 50071, 27383, 38620,
- 9405, 34634, 50737, 24115, 10336, 36474, 48485, 25064, 4472, 32315, 62050,
- 3340, 38478, 30854, 64891, 15256, 38409, 7057, 48249, 10594, 43340, 4370,
-44725, 20404, 38675, 29081, 60129, 41280, 11854, 52253, 16896, 58633, 26059,
-55765, 32508, 22820, 61469, 33464, 25196, 50356, 7259, 57399, 9987, 34794,
-61786, 14757, 56479, 28230, 65167, 12060, 34444, 44958, 5521, 47786, 30203,
-34546, 62218, 7568, 51192, 26103, 40105, 18250, 46764, 34120, 22739, 64310,
-32015, 3383, 45938, 13088, 44060, 31182, 53800, 7924, 55953, 10592, 58518,
-24038, 51046, 4284, 32102, 41059, 1848, 61788, 32429, 49737, 70, 43927,
-13751, 31671, 48866, 24788, 33181, 50215, 15784, 39602, 25885, 36673, 6170,
-48945, 31827, 8547, 46335, 2365, 43423, 9392, 38208, 63243, 1243, 39750,
-50010, 15416, 41198, 3576, 47940, 30960, 19307, 53420, 25429, 40027, 4391,
-61270, 15012, 52883, 20185, 32164, 58925, 25058, 48691, 18520, 43598, 22048,
-49298, 12608, 65133, 570, 57702, 33247, 14133, 63918, 38896, 15466, 59410,
-11345, 65397, 32937, 26490, 55302, 19805, 63776, 24469, 9907, 60466, 2405,
-51692, 34865, 6546, 29017, 49504, 5009, 27197, 52895, 16820, 36040, 61096,
-16070, 40146, 32161, 17032, 57849, 25993, 34765, 62438, 17237, 55916, 37504,
-19380, 45304, 27872, 10679, 56884, 42853, 12789, 59164, 39893, 3448, 60024,
-30448, 56360, 1319, 33659, 61606, 4961, 52693, 33183, 21402, 60850, 9447,
-41225, 5356, 29611, 49400, 64475, 14468, 53784, 5125, 57763, 30973, 37001,
-10869, 40548, 30811, 54049, 4552, 63296, 35993, 23449, 60380, 19092, 47894,
- 6292, 64078, 10299, 33530, 54278, 12309, 21503, 49768, 40178, 15559, 46624,
-23818, 38985, 271, 48915, 21931, 40444, 31042, 16242, 61755, 14276, 53114,
-31369, 13640, 48654, 18831, 52474, 33271, 17297, 31520, 64861, 960, 56865,
-31733, 5957, 64285, 18592, 57384, 28025, 5608, 62910, 29393, 55361, 13871,
-65227, 29333, 52000, 17580, 49313, 13433, 45673, 4919, 43562, 24621, 58145,
-18627, 37353, 29843, 65432, 14171, 48865, 6063, 50817, 3065, 20913, 47263,
-29281, 41854, 10414, 46545, 14978, 44446, 1430, 38500, 14129, 58251, 17179,
-53937, 35740, 24783, 46255, 5269, 44291, 35729, 2598, 40167, 24044, 58652,
-20749, 55738, 16802, 59040, 3867, 27280, 42373, 15795, 65310, 6176, 55522,
-27488, 7189, 49169, 11216, 52985, 37833, 18256, 51541, 6826, 64584, 13553,
-41870, 21998, 46919, 35441, 6564, 34154, 57728, 19126, 55641, 29711, 14772,
-42662, 17912, 59024, 23379, 35749, 57143, 3295, 63384, 13114, 35812, 56679,
- 4237, 59898, 16818, 54335, 19651, 57889, 37837, 16309, 58917, 24137, 55630,
-13948, 28810, 53855, 17172, 30560, 62205, 11447, 55764, 34267, 6440, 45685,
-13555, 44356, 18021, 51246, 29107, 38223, 457, 35057, 48127, 5933, 52096,
- 9795, 36971, 1328, 54423, 16728, 41534, 20051, 46800, 30967, 6006, 44726,
-26589, 2548, 50180, 24300, 44202, 20529, 52246, 5943, 29720, 41855, 3136,
-46433, 35158, 28006, 48931, 16851, 55551, 23799, 63632, 15601, 39526, 61581,
- 7937, 31365, 54236, 6307, 29486, 50270, 4052, 46934, 10635, 43780, 5381,
-32215, 50521, 2122, 29395, 53140, 4985, 61048, 34296, 3088, 22213, 51830,
-33401, 18825, 48605, 21583, 43051, 14117, 46330, 18656, 36776, 26454, 40634,
- 7833, 49589, 25338, 33855, 56047, 21810, 58497, 11189, 20492, 42573, 22964,
-40794, 11863, 45605, 1676, 50169, 15637, 46529, 18345, 41329, 21176, 49377,
- 7812, 29122, 41530, 15926, 43038, 21036, 46585, 19547, 40676, 28885, 65101,
- 1560, 25531, 53252, 5267, 59791, 13346, 56257, 31891, 65298, 10631, 57118,
-35521, 5631, 33038, 38425, 8273, 51022, 23348, 61888, 11464, 39563, 58463,
- 9527, 37698, 30235, 16712, 51591, 37506, 13497, 43158, 472, 47338, 36142,
-19110, 42812, 1618, 39813, 20886, 45857, 11032, 41218, 23245, 59449, 20046,
-56159, 11915, 51618, 1743, 31820, 50428, 8515, 27084, 52302, 17535, 61161,
-25525, 35745, 56786, 24010, 568, 63290, 31696, 5403, 62262, 28324, 56636,
-20117, 45821, 4607, 41478, 29243, 2124, 64380, 17439, 55530, 25716, 18168,
-52287, 15314, 46030, 6589, 41354, 13124, 43229, 22837, 37399, 53684, 12348,
-48593, 19899, 45163, 14749, 37440, 54379, 19412, 42772, 24224, 9282, 62027,
-33340, 25393, 36194, 47703, 15841, 60480, 2156, 28788, 62518, 25770, 12410,
-44233, 6011, 37195, 52098, 6942, 46708, 28954, 5245, 50867, 11746, 45071,
-23097, 42826, 7231, 29445, 44355, 21888, 42993, 12920, 45121, 3428, 25459,
-50385, 29455, 5569, 35584, 49672, 7303, 42387, 33678, 7808, 35449, 51071,
-25422, 14135, 63536, 32400, 56601, 7391, 62385, 34215, 11001, 56235, 25896,
-59945, 16032, 31138, 38240, 22937, 64335, 27593, 33900, 60248, 6845, 56499,
-35690, 15243, 53604, 17449, 59926, 33612, 18415, 56782, 4199, 42202, 13316,
-38753, 60175, 16238, 54262, 13969, 57490, 8136, 31298, 43317, 13543, 45916,
- 1401, 53332, 33046, 17996, 42039, 48369, 13251, 40981, 63889, 14680, 56199,
-28615, 64942, 20264, 49016, 12189, 39370, 22678, 64318, 16394, 40994, 12012,
-49606, 29985, 65214, 26984, 1532, 44209, 11425, 52237, 7177, 64990, 28892,
-54347, 11956, 56946, 16431, 62457, 36074, 13452, 50948, 1783, 39154, 24386,
-46300, 55487, 620, 59359, 19401, 63183, 24231, 56015, 21470, 61747, 3297,
-55691, 12308, 58221, 15041, 34751, 47184, 3716, 62065, 29980, 55550, 968,
-52339, 6707, 45409, 14157, 37752, 57052, 18181, 40979, 29288, 50806, 20787,
- 6465, 27241, 45692, 18310, 51545, 27696, 59976, 20705, 56060, 28820, 5300,
-33869, 43948, 2245, 28841, 45802, 19629, 60251, 42289, 10423, 28056, 54610,
-20130, 55819, 21534, 59156, 9884, 53365, 32869, 59922, 7548, 35171, 60982,
- 1172, 53142, 8649, 36175, 26460, 46766, 16358, 40133, 60606, 14529, 57033,
-36725, 182, 42767, 30393, 9485, 48015, 7208, 38983, 49490, 17726, 37069,
-51399, 21710, 12268, 35685, 52542, 11544, 61031, 15570, 48008, 23250, 42906,
-31431, 11893, 47916, 33997, 8854, 60402, 27137, 54955, 17680, 64561, 1830,
-51297, 9983, 32089, 57740, 1275, 36406, 28860, 60788, 2247, 30675, 62728,
- 4254, 58507, 29645, 40278, 1738, 57781, 19217, 4447, 50874, 37253, 20694,
-53081, 10034, 35970, 54629, 22657, 61102, 19975, 31484, 63613, 15667, 56251,
-38561, 17251, 61650, 34495, 15544, 53443, 26519, 65370, 11212, 54884, 1064,
-63110, 28950, 34232, 61858, 9885, 40728, 65282, 15462, 30658, 57684, 14508,
-64381, 44013, 21355, 336, 36178, 46899, 22696, 2954, 28558, 42458, 23937,
- 2340, 49362, 17035, 44228, 10190, 40120, 62933, 13533, 54957, 5090, 50819,
-10876, 23995, 46008, 26613, 9037, 62556, 23528, 48538, 10512, 52092, 36684,
-12324, 46314, 17034, 63027, 33832, 10445, 45860, 34493, 27121, 40492, 22999,
-64353, 4320, 58169, 26825, 41790, 21945, 9482, 50040, 2739, 23647, 57698,
-33469, 1789, 31171, 37499, 7654, 23963, 51640, 15804, 59339, 28632, 48319,
- 8606, 44310, 21314, 58709, 15292, 45851, 7872, 37603, 60417, 16981, 57592,
-19618, 31899, 38703, 4484, 24347, 48803, 2190, 45153, 29881, 4204, 58142,
-19552, 30857, 62058, 6871, 28899, 16253, 45111, 13205, 51630, 4360, 37956,
-12678, 43399, 27840, 37435, 24387, 45338, 529, 31709, 60995, 20050, 51715,
-24861, 8671, 37161, 31869, 18142, 62296, 22266, 50952, 30281, 7505, 33820,
-64207, 2474, 23051, 44258, 33171, 49709, 3627, 42075, 9899, 44528, 779,
-43022, 16585, 36387, 59523, 15315, 56430, 24286, 63039, 7229, 49761, 3253,
-24459, 58001, 40616, 4133, 45672, 35395, 7067, 30263, 45932, 22152, 12223,
-23961, 50295, 16566, 26619, 43897, 19263, 39919, 61763, 2555, 29012, 64160,
-22690, 6212, 45589, 33536, 19065, 62150, 21994, 54080, 33949, 16063, 64663,
-13068, 30198, 54652, 11157, 25919, 40400, 58872, 6243, 31053, 39549, 25980,
-51610, 9352, 59425, 7653, 38741, 62445, 707, 57797, 29123, 37891, 3471,
-32683, 48898, 28099, 39788, 20048, 61199, 17966, 39221, 26099, 59408, 9289,
-38962, 24325, 47758, 16079, 41335, 14154, 51016, 17303, 54171, 23257, 35216,
-61496, 26318, 9046, 33232, 41074, 19693, 47852, 1123, 41587, 10825, 48152,
- 2689, 39680, 33626, 9193, 24414, 44234, 27186, 7822, 58314, 1981, 40737,
-19867, 49519, 33392, 27005, 38336, 7888, 50956, 17361, 46683, 21306, 33450,
-48668, 1901, 39327, 32829, 4129, 28208, 48890, 29396, 61465, 8589, 57463,
-36851, 54060, 11608, 58100, 37637, 21662, 64089, 4900, 54192, 27752, 3109,
-47116, 29038, 44686, 18866, 40426, 52913, 2716, 39395, 49797, 32865, 1780,
-31637, 42518, 6286, 28952, 62280, 22625, 50886, 27782, 1917, 52855, 23823,
- 6706, 62625, 757, 51227, 19566, 39698, 33777, 8832, 62082, 36311, 57230,
-28977, 65074, 35837, 8484, 20824, 44161, 54928, 17301, 58291, 39845, 1356,
-45183, 35195, 3944, 20640, 57680, 31839, 54785, 538, 38427, 23310, 50439,
-20103, 32612, 47386, 5609, 37515, 54947, 14867, 60759, 42645, 17389, 63747,
-33142, 18370, 46740, 10883, 40997, 48165, 15516, 50139, 37310, 62629, 26485,
-39783, 28330, 47465, 16853, 60680, 5279, 52946, 13410, 65145, 20667, 38551,
-53679, 5513, 42287, 15573, 39226, 57288, 16580, 59987, 38683, 10796, 43741,
- 4579, 59463, 26739, 51854, 11587, 32798, 47821, 9114, 61147, 15450, 54741,
-20038, 62720, 24838, 53881, 13054, 64009, 3096, 41845, 30643, 9191, 47019,
-16422, 43277, 22292, 53986, 35268, 8100, 22966, 63753, 15631, 26300, 61958,
-39979, 3744, 64678, 35620, 56160, 2979, 33803, 47835, 11644, 57884, 30316,
-14822, 33838, 53812, 8213, 33169, 55257, 26269, 3735, 47153, 10860, 41372,
- 4569, 58231, 27438, 43656, 20536, 59621, 4086, 42998, 64156, 1946, 33716,
-49096, 18471, 65312, 302, 36920, 32063, 19798, 52178, 15968, 27479, 44858,
-21090, 51213, 15816, 63041, 11224, 36789, 6911, 53323, 31475, 4770, 46235,
- 8246, 49244, 20978, 50731, 17014, 43840, 11530, 53480, 26706, 48200, 7674,
-43593, 28852, 6360, 49000, 12554, 44854, 30139, 63760, 3966, 56830, 30943,
-64773, 16021, 54032, 25445, 59263, 14243, 54708, 29910, 64936, 1475, 51635,
-30591, 37777, 21698, 48359, 5667, 37086, 9606, 56904, 19128, 59173, 23205,
-39358, 142, 51394, 8275, 26451, 60488, 20298, 54322, 23574, 59278, 10167,
-52536, 18478, 41877, 27169, 9408, 22047, 47376, 26966, 13067, 46450, 28332,
-41712, 19304, 36808, 57135, 21568, 12441, 35771, 62405, 7726, 31826, 61262,
-13364, 21690, 52616, 27300, 64184, 20665, 58681, 38032, 925, 41467, 7991,
-57204, 32514, 18127, 58591, 38033, 18812, 47718, 32075, 9645, 54864, 21256,
-51949, 18720, 5456, 33712, 11357, 19584, 45077, 28363, 60765, 24099, 6530,
-42275, 30478, 14986, 61388, 31435, 11283, 62823, 41562, 24025, 6223, 27660,
-43560, 19321, 60883, 4753, 55636, 9991, 25219, 63566, 28539, 98, 41278,
-32681, 8728, 30547, 38225, 11540, 55402, 25810, 65408, 32026, 6126, 57433,
-33213, 11484, 34095, 5681, 49066, 9772, 35545, 50850, 23117, 40451, 18691,
-42832, 6202, 50573, 10181, 26681, 45861, 11529, 64394, 2570, 26420, 44124,
- 5869, 27480, 56437, 23744, 39843, 17761, 45885, 14948, 36877, 58428, 16031,
-52468, 24415, 38213, 8134, 40112, 32857, 11947, 35104, 46500, 23802, 49763,
-18470, 54227, 34917, 26034, 52955, 12590, 39415, 14441, 62175, 32286, 52588,
- 9770, 34131, 52005, 12683, 23260, 48329, 28828, 8267, 38692, 28126, 63580,
- 6344, 54194, 35500, 3996, 51295, 42016, 17686, 37539, 49629, 15989, 38795,
-63660, 21068, 53132, 18138, 48608, 12336, 39543, 2240, 52003, 23731, 37753,
-32310, 16735, 46383, 14526, 30204, 55372, 10718, 47330, 16529, 54862, 41166,
- 3097, 36756, 53296, 13171, 40460, 5053, 43472, 25163, 50013, 21948, 61911,
-11794, 36431, 55287, 22337, 63118, 34426, 3564, 30164, 64821, 5145, 57549,
-35217, 753, 32906, 59458, 15186, 65426, 33300, 16484, 57097, 295, 52506,
-16937, 45750, 25612, 9301, 23359, 46289, 35309, 7877, 28809, 45485, 4469,
-42160, 16619, 46466, 20158, 60318, 12779, 55649, 31811, 61095, 23796, 51193,
-15061, 42156, 5015, 47890, 12702, 61269, 15771, 57117, 36822, 16556, 42672,
- 6271, 44636, 17472, 40490, 15572, 45184, 3904, 51952, 31459, 64567, 1136,
-33211, 60465, 6975, 55851, 14256, 52298, 11330, 25694, 43056, 59275, 798,
-29746, 54158, 17131, 37780, 29282, 59187, 5634, 41163, 11978, 47506, 13917,
-26740, 55557, 19738, 44744, 15140, 40320, 49512, 11604, 29691, 43180, 13158,
-61193, 22575, 36045, 2217, 31151, 46261, 27572, 51122, 39050, 54131, 3754,
-48817, 9874, 52042, 34850, 63070, 3625, 52637, 35862, 19485, 54155, 26588,
-13509, 52477, 32989, 47623, 9490, 51503, 13934, 44593, 17785, 42865, 35780,
-11182, 51696, 22452, 58847, 20015, 56554, 43872, 6387, 51327, 34769, 977,
-37403, 13771, 44159, 28691, 2438, 52894, 17098, 54752, 22651, 64965, 20417,
- 1037, 58012, 9235, 56242, 32349, 59259, 16258, 33615, 62559, 17766, 54763,
-28132, 34130, 53000, 11878, 48921, 33292, 2809, 51293, 9905, 63366, 629,
-55153, 27706, 5784, 42702, 30369, 1462, 63730, 27075, 55674, 2578, 59009,
-28553, 6374, 57668, 10972, 39832, 6776, 65428, 384, 31050, 60992, 4965,
-47656, 25500, 1370, 42962, 27910, 46861, 2170, 37470, 54391, 17066, 41260,
-58077, 18568, 52229, 15696, 41417, 28918, 12853, 62949, 31938, 5854, 59705,
-24472, 878, 58711, 9707, 29343, 44520, 6552, 59929, 34832, 25731, 60938,
-29127, 36375, 6676, 48717, 9685, 53031, 24213, 60268, 4971, 42174, 24703,
-33256, 62901, 6841, 29705, 61541, 25030, 6330, 65014, 17929, 59843, 20374,
-54641, 1125, 44870, 16831, 46790, 26356, 15131, 44169, 12825, 24945, 56130,
-40971, 14311, 45898, 31286, 18131, 63421, 19604, 38556, 30798, 2865, 51513,
-36901, 22185, 42706, 23498, 40106, 13196, 51372, 35818, 58140, 5347, 20901,
-63189, 38171, 15457, 57894, 23165, 52617, 11048, 39794, 4953, 44836, 28065,
- 7435, 18100, 42441, 2653, 62635, 27650, 53469, 17979, 42873, 24544, 45014,
-28567, 4549, 52545, 12567, 62052, 27308, 56397, 2676, 63960, 30782, 58305,
-19933, 45973, 14496, 40721, 50570, 18381, 39251, 20488, 43425, 1615, 60634,
-33501, 6436, 31279, 48294, 14669, 34479, 49383, 3941, 43391, 11174, 44849,
-19387, 53802, 3396, 32781, 45830, 8877, 50024, 25340, 61681, 5552, 30982,
-64572, 2915, 55938, 30847, 4932, 41977, 59393, 28149, 56212, 12833, 63332,
- 270, 22210, 31661, 58330, 16464, 40655, 32163, 13414, 22421, 47308, 28959,
- 9532, 43744, 5684, 48671, 35792, 1939, 59021, 12961, 64041, 25448, 39302,
-30357, 63042, 2020, 53660, 20708, 43503, 30923, 9669, 46891, 2760, 23473,
-59554, 26614, 15699, 60479, 22814, 54284, 19100, 63490, 25357, 38944, 61046,
-31329, 3068, 32645, 44259, 29357, 34968, 46365, 27099, 2329, 24955, 40021,
-49076, 1977, 31526, 37409, 7567, 47554, 14929, 60605, 21877, 64717, 36874,
-18927, 44909, 24903, 42924, 19603, 38487, 60531, 17374, 56074, 36746, 13239,
-47337, 21835, 45456, 17042, 50227, 37986, 19630, 44198, 22775, 46151, 19231,
-37821, 49155, 17590, 42697, 11193, 50589, 33287, 14976, 58296, 17806, 61202,
-27215, 8843, 60348, 805, 25987, 42854, 4999, 45392, 20843, 49614, 24629,
-38494, 16976, 47630, 10881, 45095, 30259, 40504, 23127, 51733, 15304, 38084,
-30793, 1219, 49872, 8013, 55065, 13916, 62670, 19859, 57795, 29216, 7294,
-35867, 53893, 17783, 51313, 3749, 39082, 21544, 49656, 10877, 45760, 34430,
-28407, 48843, 8537, 41552, 12633, 37645, 30685, 55631, 3164, 59543, 38854,
- 449, 50971, 35888, 8853, 23287, 52141, 36169, 8055, 49360, 12139, 52748,
- 5577, 56097, 42326, 25591, 7250, 63008, 11309, 55706, 5707, 59942, 32854,
- 3166, 39477, 29294, 51034, 33311, 686, 47199, 31560, 8599, 33001, 62505,
-22519, 54514, 17661, 63792, 32554, 49068, 22410, 47256, 30211, 8784, 33191,
-64795, 3678, 55269, 10016, 37980, 63324, 19291, 46313, 31478, 9273, 32672,
-50027, 24433, 9735, 38308, 6752, 34243, 59063, 24826, 10088, 54965, 3970,
-62106, 25083, 48909, 15117, 40483, 65345, 19758, 36224, 58397, 9382, 25125,
-64810, 15881, 55997, 28180, 61521, 14704, 39884, 57940, 16495, 64998, 33556,
- 3785, 35559, 48280, 14209, 36204, 46454, 17346, 39006, 52635, 20339, 10089,
-47897, 6064, 43700, 24345, 35416, 60172, 10564, 37964, 27045, 64598, 933,
-56005, 38134, 8219, 57133, 24819, 60533, 31976, 16315, 65430, 30180, 17976,
-42745, 29280, 3204, 56843, 8479, 27154, 45988, 32124, 61362, 5317, 39482,
-64763, 16932, 36572, 50199, 13290, 39646, 49345, 9292, 42243, 3900, 47212,
-10449, 51556, 8238, 14688, 43149, 26813, 52415, 7742, 61563, 11057, 21028,
-63898, 31245, 52486, 8495, 22719, 57146, 41871, 14491, 50441, 21035, 38127,
- 156, 42610, 13100, 31041, 57551, 5142, 54602, 10609, 61842, 3446, 23883,
-49550, 7679, 28609, 58053, 34896, 8827, 30439, 64756, 4737, 26873, 62238,
- 1721, 55583, 13848, 58654, 27041, 8979, 55097, 29016, 64351, 18389, 56613,
-39108, 6413, 44617, 20197, 49384, 33739, 14842, 34584, 51525, 10977, 62247,
-13536, 55852, 307, 58899, 7817, 54781, 26073, 65281, 18095, 56016, 13006,
-61906, 2856, 33507, 56523, 18713, 65108, 22926, 42893, 20949, 46404, 24663,
-44493, 827, 39557, 62040, 15063, 31060, 40888, 11728, 57976, 14356, 43610,
-23649, 58724, 20533, 55502, 2198, 36906, 22804, 56737, 27510, 63511, 13873,
-24144, 42348, 28475, 10896, 64166, 17944, 57906, 29482, 61628, 1895, 21341,
-59999, 33907, 27181, 36369, 46672, 21276, 10326, 59031, 40822, 18157, 44111,
-21151, 48265, 27672, 15189, 52788, 13853, 60718, 9856, 23889, 55987, 18324,
-61508, 27404, 48439, 2996, 43027, 10236, 38790, 364, 52888, 11602, 59526,
-14004, 37000, 51958, 19416, 38029, 31303, 20576, 50127, 17698, 30880, 40819,
- 961, 51834, 21493, 43731, 14148, 36888, 54728, 21692, 62704, 26666, 3346,
-48732, 37238, 22249, 44140, 32598, 9047, 31675, 56712, 23291, 10355, 50321,
- 4522, 26814, 51308, 40204, 18523, 46773, 33955, 237, 35283, 48662, 25052,
- 6469, 30796, 39123, 17907, 59349, 12227, 26996, 53896, 22873, 10677, 60748,
- 7591, 25106, 65201, 33924, 16817, 58828, 32512, 15451, 52988, 20767, 47927,
- 5907, 51438, 12025, 46232, 15206, 27791, 50160, 18418, 42071, 366, 37103,
-51536, 6690, 38954, 56042, 7625, 48326, 36017, 22316, 34205, 49990, 19048,
- 9169, 26188, 47769, 18170, 32380, 54038, 8192, 30151, 62334, 4691, 31765,
-56037, 17258, 58994, 30632, 40317, 23377, 45922, 56877, 7093, 59960, 13010,
-48460, 21941, 53868, 38951, 6651, 45135, 18158, 61316, 35049, 9531, 24749,
-63627, 4494, 58869, 25826, 55267, 20065, 51704, 8011, 41374, 32715, 22658,
-40899, 28965, 34434, 44532, 12298, 40396, 50794, 4230, 20692, 54374, 42502,
-14469, 36805, 52301, 15218, 48769, 25574, 40706, 4313, 50944, 34000, 22032,
- 2684, 35452, 46173, 4577, 29781, 62834, 11850, 40579, 3559, 53583, 28552,
-64122, 17894, 49020, 36184, 23880, 34198, 44095, 18894, 46357, 30274, 2088,
-34468, 43655, 4693, 45972, 34822, 24719, 46890, 8747, 43623, 12667, 40170,
-14980, 50831, 3147, 38247, 11797, 50183, 17357, 33475, 47775, 2357, 64069,
-27812, 37015, 25804, 54183, 1202, 36102, 9063, 38977, 18505, 59026, 33516,
- 4174, 51588, 7911, 34719, 60560, 6120, 52435, 34550, 25665, 48029, 5417,
-45321, 13427, 39647, 54642, 24399, 3271, 61125, 8833, 23612, 64076, 39244,
-14630, 31928, 54058, 2366, 61810, 9710, 34443, 64170, 22030, 44549, 19839,
-40848, 48704, 11395, 42627, 6248, 41176, 14116, 51195, 29609, 58595, 19310,
-43869, 20671, 41090, 4306, 44761, 25685, 1359, 58469, 12212, 60304, 34319,
- 2263, 55965, 8946, 59686, 24004, 35479, 65106, 4778, 55692, 28122, 704,
-44098, 11276, 39610, 56899, 29037, 7572, 65020, 13291, 54395, 28165, 45712,
- 5287, 37254, 55245, 18126, 43844, 63386, 22074, 2165, 57724, 8282, 25853,
-50174, 22699, 8571, 63104, 36267, 54943, 1593, 52111, 22226, 41795, 56555,
- 398, 33358, 49881, 28281, 34886, 45754, 1158, 44127, 26271, 39085, 11171,
-46756, 4380, 41308, 14241, 61516, 24891, 36942, 19760, 59788, 43176, 3220,
-61857, 14605, 54459, 11585, 25947, 45297, 19160, 33283, 52157, 15747, 62009,
-13486, 59640, 4339, 56023, 37151, 58573, 13361, 51115, 3670, 37648, 27462,
-45845, 19111, 44478, 21273, 34446, 46157, 7962, 20075, 53950, 194, 35396,
-31020, 46723, 19729, 40439, 16533, 42819, 3470, 33194, 51196, 12663, 41302,
- 4060, 48177, 29776, 46285, 15928, 42954, 17939, 41018, 11141, 46420, 29010,
-59114, 15869, 62488, 13693, 48095, 6166, 53419, 20221, 64952, 25719, 14631,
-61682, 39347, 24885, 55, 57003, 32049, 7468, 43376, 29354, 8609, 62937,
-33318, 12123, 60440, 40293, 57525, 14601, 28138, 55464, 16929, 35876, 51705,
-21349, 59341, 11233, 43940, 5890, 41000, 26695, 2771, 60096, 10277, 28083,
-63810, 15076, 39637, 57176, 22044, 11853, 52518, 27257, 7668, 54281, 14301,
-59034, 31711, 53653, 5227, 63083, 30256, 55955, 18619, 64531, 27064, 55668,
- 7703, 22747, 50935, 21259, 44110, 4810, 60872, 12440, 32836, 51926, 26599,
-62683, 31170, 9912, 48268, 19452, 40159, 28562, 50430, 18243, 47620, 21104,
-56474, 7556, 30493, 41695, 21890, 49753, 27677, 9673, 35093, 47697, 20340,
-53850, 34399, 1362, 27944, 49095, 5030, 36359, 28723, 37784, 25886, 47198,
- 1233, 42192, 7684, 49875, 2524, 32226, 65517, 24774, 54291, 19320, 60006,
-23840, 8062, 34981, 49431, 13740, 54831, 27131, 64336, 17124, 56561, 39333,
-21656, 42630, 7096, 46601, 26526, 36188, 48838, 20881, 53648, 7936, 30216,
-48093, 11823, 40039, 59905, 18378, 53838, 23280, 13706, 36282, 50992, 17481,
-42020, 105, 50067, 16855, 63167, 29629, 1892, 41727, 32835, 7241, 34469,
-45997, 20452, 38827, 55393, 13498, 59762, 42123, 21913, 11790, 26872, 44252,
-15347, 47888, 6958, 20525, 40097, 63569, 19230, 4011, 52146, 20938, 57047,
-13752, 62193, 3066, 55440, 27924, 64204, 18840, 43875, 30245, 2444, 56448,
-33795, 7159, 31006, 40202, 23958, 44873, 20568, 39570, 60026, 14278, 58206,
- 3817, 24668, 41666, 772, 46455, 23778, 41492, 30347, 21275, 1231, 41125,
-29139, 62636, 14318, 57443, 604, 55084, 11004, 64123, 2109, 27533, 61440,
-36957, 26143, 64673, 18391, 4583, 34060, 55781, 1625, 64252, 29058, 59134,
-14284, 26947, 62453, 19851, 55483, 13760, 59513, 1295, 53603, 28116, 56670,
- 6575, 62831, 24331, 3905, 38870, 33545, 1680, 51937, 26166, 59866, 11698,
-46353, 1178, 32757, 48106, 23054, 9964, 60050, 29223, 40186, 18176, 60701,
-21322, 56545, 35154, 16467, 47785, 29877, 20500, 7025, 31149, 49456, 8305,
-41923, 32289, 187, 25016, 43063, 15551, 47716, 23462, 56099, 14292, 57729,
-32662, 19303, 53257, 40774, 3521, 50084, 9508, 26797, 41227, 60677, 15636,
-38689, 64037, 19121, 42440, 27836, 2445, 22369, 48289, 35272, 8548, 26393,
-41940, 4670, 42840, 13253, 40232, 59329, 31815, 9922, 57181, 20131, 38650,
-28794, 64723, 13990, 47253, 4895, 50941, 35051, 24116, 64261, 10740, 57115,
- 1759, 38621, 12095, 42685, 16071, 33416, 62401, 17489, 55526, 4215, 64608,
-30745, 51551, 6667, 39368, 11178, 46117, 30544, 57320, 19068, 60859, 21824,
-55281, 6611, 58657, 12382, 54555, 30725, 62794, 27348, 57123, 21229, 36215,
- 4073, 31219, 43500, 1310, 39380, 64525, 26340, 5228, 62056, 30260, 6894,
-35973, 50017, 11183, 28080, 48035, 15230, 52706, 17030, 63637, 13651, 33548,
- 3818, 32173, 45477, 18530, 36237, 61220, 15153, 33231, 46970, 5246, 42035,
-60767, 1959, 27088, 55547, 23533, 61144, 21819, 40075, 12715, 47106, 24547,
-60015, 14932, 30660, 56971, 15507, 62517, 29931, 5906, 37566, 31309, 2781,
-51379, 32406, 57530, 9299, 63861, 28036, 34737, 60227, 29641, 8953, 35933,
-58184, 30199, 9395, 35517, 50083, 18954, 48404, 36287, 16095, 33827, 49937,
- 8737, 53405, 39142, 18031, 50625, 26295, 63705, 10313, 55388, 5336, 64434,
-29192, 2518, 46883, 35201, 29180, 63458, 19826, 54997, 35691, 11332, 51800,
- 7715, 64482, 34679, 53085, 9936, 25116, 46592, 21997, 38644, 25514, 41370,
-17829, 50768, 38862, 22281, 5095, 48742, 11861, 44470, 60779, 14934, 26744,
-50484, 36275, 10809, 22621, 54966, 36113, 301, 42585, 28318, 37548, 22388,
-33058, 38956, 10011, 34833, 50031, 16679, 43658, 54024, 18623, 48894, 27828,
-36924, 17104, 39070, 31825, 16134, 57701, 42065, 6925, 52527, 36918, 15655,
-46341, 5835, 48237, 11286, 38630, 3724, 50546, 31567, 1115, 53228, 38152,
-63611, 15672, 36052, 59792, 12948, 64897, 36975, 57096, 7459, 61848, 29284,
- 1786, 33509, 42242, 8395, 48378, 35752, 6566, 24622, 56752, 20300, 35275,
-62674, 5517, 31550, 49397, 510, 30730, 47740, 5914, 61551, 34806, 57319,
-10658, 23676, 43816, 59558, 15303, 54354, 22201, 61418, 34011, 5465, 46590,
-18611, 35267, 52271, 8260, 48672, 3233, 42493, 22504, 40825, 19920, 60230,
- 80, 29681, 46088, 22094, 44036, 20447, 65441, 3710, 58535, 37380, 1484,
-43644, 11514, 38395, 15890, 44727, 18052, 58931, 26461, 62624, 18528, 52334,
- 7786, 44875, 12597, 41643, 15597, 43069, 18768, 44868, 24695, 16149, 36863,
-12792, 38807, 8957, 51288, 28516, 58832, 15088, 55365, 33564, 16294, 52192,
-36300, 12507, 34505, 48354, 23392, 2894, 33976, 62749, 5462, 57207, 25024,
-40309, 5822, 43937, 56428, 27173, 61626, 10247, 57336, 2428, 23977, 52211,
- 7246, 27601, 63121, 32260, 16504, 48089, 40286, 6329, 38133, 10928, 45043,
- 6687, 58524, 21404, 53120, 8731, 35415, 47674, 11833, 40921, 4315, 51691,
-27255, 64523, 11045, 56488, 36473, 5233, 41518, 23855, 38129, 4550, 51154,
-13347, 48533, 23705, 45257, 14732, 41327, 53592, 24220, 7006, 41938, 30688,
-12481, 59564, 1497, 23239, 62400, 26729, 11509, 59176, 4838, 45771, 20979,
-37436, 19136, 42416, 13610, 36263, 53513, 23319, 10978, 50714, 7301, 44747,
- 9864, 26734, 60974, 18583, 31393, 44172, 14754, 22959, 57962, 39556, 6577,
-60951, 11630, 52934, 5732, 58405, 31445, 9871, 57356, 41600, 16353, 52633,
-24489, 10237, 47362, 34924, 8696, 24426, 48772, 34502, 6971, 47166, 24221,
-52103, 5918, 60829, 11410, 54675, 19008, 64549, 25617, 2215, 37373, 31450,
-12773, 65462, 7343, 55718, 9851, 63815, 3034, 56264, 36408, 26955, 12953,
-63517, 27945, 3354, 55525, 32613, 63271, 19676, 53491, 24475, 64535, 12842,
-40648, 59361, 22604, 5296, 32253, 51936, 1891, 28779, 44267, 22706, 10053,
-27311, 41043, 19551, 52004, 36260, 16525, 65526, 29269, 17262, 61378, 29990,
-45453, 8814, 31849, 53620, 18316, 47842, 21138, 35799, 59823, 16572, 36143,
-51460, 21083, 13357, 39067, 29305, 61174, 128, 32261, 36890, 9423, 49370,
- 1784, 20375, 55005, 29059, 63572, 482, 30443, 42012, 21541, 53531, 16692,
-58362, 7685, 43484, 12326, 54529, 38865, 7133, 62020, 14572, 53259, 23952,
-49080, 27781, 13668, 54252, 24583, 60439, 20828, 52396, 218, 40749, 11886,
-44025, 2768, 41400, 14866, 37759, 26369, 51294, 552, 65072, 31803, 51998,
- 3587, 39541, 59142, 4747, 53555, 23322, 62036, 18121, 44879, 7451, 47125,
-30447, 10393, 44662, 3236, 46290, 25143, 58086, 15952, 61207, 29762, 53101,
-18748, 44484, 29513, 534, 60691, 31561, 22243, 11665, 42881, 16889, 47076,
-29353, 34747, 44746, 17160, 49712, 38135, 20620, 9948, 56508, 30746, 15258,
-63607, 19205, 57445, 24974, 51975, 30913, 3491, 39040, 27130, 61932, 558,
-52740, 23839, 45300, 14395, 42476, 18164, 47181, 29599, 17112, 62133, 14420,
-54121, 16200, 58456, 25261, 44131, 2126, 54631, 6163, 61827, 23015, 2374,
-63413, 32932, 59840, 4746, 53945, 27030, 35938, 45457, 6444, 33136, 48189,
-22182, 41461, 13070, 49594, 1577, 52444, 26752, 57653, 22254, 8656, 61502,
-43028, 18188, 57079, 28097, 34540, 47061, 2692, 38793, 53892, 4986, 33017,
-48286, 2960, 31457, 50313, 18534, 42932, 21634, 48025, 35179, 14760, 46848,
-19210, 32875, 62968, 2618, 40670, 57113, 19285, 63334, 29924, 57708, 4236,
-52864, 30666, 15121, 65334, 17248, 39835, 25177, 45062, 4407, 47049, 7446,
-51838, 29534, 61417, 8421, 42448, 28948, 45836, 19577, 41470, 25369, 49635,
-22246, 6509, 51166, 38020, 18034, 41228, 49829, 21902, 9346, 26898, 41723,
- 1957, 43072, 20712, 46164, 25581, 9545, 35486, 56863, 18344, 39742, 24723,
-54659, 5733, 52952, 31953, 48938, 3908, 45053, 12059, 58400, 31086, 4764,
-50704, 37818, 1084, 52472, 13163, 64586, 38132, 1677, 42816, 13729, 57789,
-10490, 27163, 53446, 11151, 25101, 41812, 53935, 6927, 47626, 16188, 52603,
-21190, 57925, 27055, 38053, 30330, 45416, 23725, 8981, 42454, 24546, 56614,
-14343, 59755, 9628, 37183, 26117, 51390, 17630, 48799, 25849, 14101, 49735,
-30389, 36011, 5834, 45266, 10133, 32477, 50569, 19140, 40775, 4865, 46878,
-26707, 62939, 19951, 56475, 21972, 54836, 24609, 58214, 4049, 63364, 20462,
-46505, 27851, 8591, 23405, 61194, 28397, 10799, 48473, 15399, 43821, 185,
-41060, 13391, 63986, 35961, 18818, 56970, 22072, 60787, 20644, 53422, 861,
-39649, 11835, 44041, 7847, 41687, 10225, 51368, 33664, 12519, 49347, 36558,
-64597, 1517, 54691, 25093, 6144, 63818, 12762, 58475, 25866, 1382, 52861,
-35820, 43787, 4273, 51665, 28229, 46180, 2577, 41595, 14188, 37304, 64433,
-16453, 49820, 20544, 44004, 19257, 61180, 17161, 59067, 1366, 54259, 35040,
- 6831, 50835, 33280, 45606, 708, 31882, 42834, 9988, 32923, 60885, 27223,
-39494, 11781, 51063, 29159, 38432, 9933, 21293, 49265, 34595, 7676, 51570,
-16568, 57749, 38220, 627, 65318, 16115, 56903, 27726, 61233, 12444, 43873,
- 4077, 49197, 38390, 25684, 1055, 39348, 32935, 4720, 64865, 21517, 56327,
-16263, 24607, 61910, 40773, 12854, 63736, 15922, 35364, 55894, 2381, 65073,
- 9105, 27496, 61951, 1116, 54926, 8587, 28689, 49691, 22669, 6561, 43041,
- 727, 45170, 20791, 41471, 18413, 58745, 35652, 8958, 33146, 57341, 12841,
-30496, 62147, 23318, 40662, 20745, 44180, 14891, 32316, 58144, 818, 24084,
-61002, 4795, 44112, 10396, 40294, 62755, 23638, 2415, 59159, 10696, 34050,
-61063, 31152, 54162, 14453, 58851, 17320, 54956, 5519, 60865, 29829, 44912,
-13607, 49777, 7989, 61552, 21142, 47503, 16148, 59058, 14832, 63875, 24142,
-49786, 6903, 40581, 55278, 24741, 15202, 46558, 21944, 41963, 26794, 16192,
-59407, 23332, 52295, 3679, 32732, 46208, 4949, 33433, 64825, 1598, 31557,
-62224, 25822, 40249, 10019, 45713, 3579, 50626, 14320, 62554, 12512, 58320,
-38768, 15782, 47615, 6183, 43999, 34216, 27935, 63377, 1623, 30283, 61246,
- 4462, 37008, 59297, 23072, 2632, 57814, 40546, 18065, 61329, 38619, 6571,
-63900, 12750, 56891, 34240, 8489, 30123, 49478, 5184, 37259, 9354, 46810,
-17479, 42367, 16076, 39928, 9581, 57715, 36119, 49508, 13066, 45618, 33224,
-20312, 55810, 26735, 59630, 22156, 52563, 27679, 2180, 50298, 6543, 41557,
-32492, 8387, 31611, 43001, 22904, 55647, 19518, 58860, 31745, 64973, 15772,
-39479, 57956, 20434, 7443, 28424, 41407, 14259, 50305, 38000, 22239, 42995,
- 5006, 39770, 65290, 33707, 8229, 22106, 59799, 33066, 9360, 31958, 55071,
-20133, 60219, 8107, 28526, 42648, 5537, 57533, 11137, 38263, 6214, 36633,
-25358, 45934, 13772, 22660, 63480, 24364, 9757, 26276, 59611, 39219, 17900,
-65533, 20182, 36634, 15509, 53093, 31662, 16225, 47864, 17374, 55889, 40959,
-25568, 13228, 64883, 22591, 41524, 10179, 23714, 50855, 30425, 44777, 6793,
-38715, 17138, 40781, 21543, 62951, 28838, 11323, 53089, 30500, 62449, 15011,
-49936, 17163, 41817, 11782, 48991, 36795, 10731, 27494, 50842, 20071, 45624,
- 8019, 30396, 41001, 24718, 33833, 45563, 16901, 44020, 25367, 34920, 59406,
-16794, 38464, 52071, 25736, 54552, 16237, 62186, 12469, 44449, 2722, 48009,
-25897, 45614, 1852, 49848, 36734, 17914, 43400, 12391, 60122, 3586, 56246,
-39168, 18246, 52577, 35450, 11374, 53111, 16721, 58422, 30238, 14043, 42593,
-54651, 28861, 47865, 20595, 879, 45197, 7185, 47108, 30314, 36467, 11021,
-37450, 14994, 51584, 3168, 65261, 19815, 42856, 32488, 9428, 31446, 39519,
- 2221, 43911, 35782, 17206, 33495, 62308, 21550, 12612, 43635, 63133, 9330,
-58737, 4318, 51572, 34534, 7138, 46821, 17502, 39792, 63429, 14201, 41008,
-55654, 17640, 48603, 15554, 37284, 4400, 57036, 31788, 19946, 64972, 18427,
-41518, 6475, 47947, 33658, 2888, 53471, 26870, 61662, 19919, 3582, 50426,
-12899, 46991, 39766, 18707, 45092, 28307, 8764, 53558, 33688, 15404, 29134,
-54588, 625, 25626, 46504, 21797, 44183, 28400, 14312, 59512, 42704, 15527,
-32143, 65276, 22997, 33975, 61493, 8154, 55564, 24039, 53521, 32403, 4518,
-21538, 54773, 1533, 64367, 37920, 5193, 42371, 10510, 37706, 6046, 46526,
-34388, 25097, 62609, 14324, 56013, 27166, 65256, 10712, 50182, 4663, 40678,
-27461, 2084, 23926, 47227, 5204, 24831, 51756, 32074, 55739, 19284, 60080,
-33204, 10938, 52657, 19700, 55433, 28827, 10466, 23195, 58022, 41981, 14409,
-48666, 23632, 50981, 5865, 42985, 22529, 36310, 53460, 13691, 48448, 25309,
-33374, 54693, 28095, 52343, 12225, 30469, 55770, 40884, 2411, 48225, 31193,
-52936, 21043, 8740, 50585, 3510, 48959, 8039, 57269, 1002, 37903, 64702,
- 5339, 43745, 28190, 175, 57453, 43311, 30462, 3301, 60874, 29724, 56210,
-19442, 9023, 35161, 54283, 22816, 47667, 5932, 51162, 9658, 34281, 58516,
-16595, 48350, 6944, 41013, 25388, 55486, 6390, 59759, 28832, 252, 58894,
-42783, 5973, 56918, 26089, 60303, 16992, 54040, 12599, 59979, 4045, 56382,
-36032, 13780, 47882, 5512, 43688, 12898, 29386, 9370, 37042, 31862, 5978,
-51092, 32634, 60494, 16686, 55129, 20040, 63416, 28105, 8266, 52886, 557,
-54975, 19327, 48923, 24272, 5564, 44928, 13890, 48434, 31846, 20514, 46348,
-34839, 346, 53536, 31727, 19793, 5551, 35965, 57507, 32517, 17852, 64129,
-23983, 4680, 61803, 28420, 52701, 23230, 39176, 27820, 33935, 47270, 831,
-54010, 28249, 63369, 18960, 50776, 26885, 8850, 56813, 690, 25733, 47354,
-35447, 2379, 32873, 40424, 23826, 48761, 11461, 61067, 28534, 33845, 54468,
- 8232, 22599, 50649, 26337, 8855, 38997, 24282, 58352, 11829, 44888, 17132,
-49806, 36618, 7795, 44412, 24079, 54570, 27624, 17001, 65487, 32637, 10093,
-31539, 45634, 35996, 22864, 55407, 31762, 6899, 53796, 13488, 65086, 38855,
-16442, 42070, 62991, 8249, 43333, 35209, 58939, 11037, 55820, 2904, 38550,
-53596, 23414, 2413, 39731, 51236, 13360, 48414, 1047, 25860, 43696, 30497,
- 2103, 42863, 13857, 62264, 38743, 23933, 42755, 14690, 31300, 58154, 18858,
-54643, 25964, 61016, 16706, 57603, 9256, 30732, 47383, 3859, 44270, 20245,
-45911, 18174, 62938, 15352, 53919, 32628, 56254, 18336, 61710, 37803, 2748,
-43265, 9762, 46316, 4216, 27712, 62809, 232, 41403, 13373, 46540, 31253,
-47917, 3176, 27571, 62601, 509, 40784, 14940, 64843, 11811, 56105, 1196,
-23990, 62306, 30218, 2298, 63912, 10123, 41994, 3205, 65218, 38155, 7546,
-27809, 57745, 18531, 42265, 4433, 61664, 36829, 23041, 55937, 25157, 43476,
-20997, 45920, 11049, 30524, 53807, 14379, 60541, 36501, 20286, 9264, 54337,
-35235, 13883, 46207, 4214, 39525, 60140, 25805, 2728, 63302, 13935, 57200,
-35571, 24448, 46405, 3358, 44495, 22769, 33711, 59292, 1719, 29465, 42869,
-14406, 38090, 51412, 22598, 13924, 31734, 37475, 1419, 40180, 32244, 5218,
-49918, 22501, 42004, 28320, 7570, 62731, 23507, 54225, 20776, 65230, 40351,
-61064, 14542, 55698, 39137, 21952, 7935, 27258, 40589, 5253, 43004, 13770,
-39323, 58918, 15656, 48183, 31201, 37967, 10450, 35027, 63097, 30706, 59230,
- 3275, 38978, 64212, 7034, 26136, 61966, 36128, 7996, 43832, 65266, 23301,
-12644, 52652, 42457, 9816, 39216, 50904, 16313, 43327, 477, 63173, 10520,
-58558, 7269, 25524, 60526, 16625, 41249, 4157, 54953, 13677, 60914, 34071,
-28618, 36210, 54620, 7923, 60645, 30099, 16986, 56978, 13420, 29562, 42671,
-19679, 44840, 2871, 24464, 58519, 35297, 1014, 60240, 29948, 52256, 3384,
-34312, 51279, 22807, 63788, 2115, 28729, 53621, 13733, 60274, 913, 36685,
-50770, 7368, 44403, 21061, 49523, 13601, 64325, 8434, 36754, 20817, 62328,
-24378, 36571, 962, 29901, 49212, 5244, 31913, 51318, 12287, 20480, 31740,
-37786, 24083, 49052, 19468, 7825, 35746, 62102, 25138, 6191, 58011, 27896,
-35226, 53167, 12719, 59687, 37120, 18631, 47551, 28787, 11328, 59459, 17644,
-48084, 8151, 35271, 46134, 2746, 43281, 12503, 41856, 20948, 37442, 51871,
-19181, 40551, 14939, 52323, 1936, 37355, 30368, 46921, 9898, 42727, 6699,
-45290, 10824, 26946, 53455, 17999, 62315, 23946, 35597, 48119, 16588, 44639,
-24031, 59536, 5915, 61695, 16671, 54290, 37774, 13142, 31510, 57060, 25153,
-35638, 44688, 18698, 47527, 38764, 9019, 44992, 36035, 22469, 48990, 16050,
-50129, 32387, 19515, 60831, 34096, 10644, 50029, 15128, 46952, 33144, 12435,
-44500, 18524, 40250, 12718, 62701, 33081, 59012, 18154, 35242, 46710, 7908,
-24060, 63061, 37694, 15494, 47508, 26203, 33965, 51772, 27980, 10859, 48114,
-32839, 18775, 44269, 27979, 47, 55243, 20190, 65169, 29477, 8384, 51135,
-13774, 35252, 51866, 20663, 62787, 26071, 8777, 34706, 65532, 43493, 12297,
-55093, 14437, 63170, 37260, 19530, 46386, 15726, 50442, 30836, 39510, 1773,
-33755, 46131, 3400, 19623, 32397, 42530, 2144, 28436, 64787, 31489, 56334,
-14316, 61525, 29406, 54202, 3820, 23663, 44754, 26017, 6093, 65063, 27605,
-53329, 21073, 9060, 26841, 50556, 23106, 11914, 34001, 50131, 13238, 21489,
-51967, 33735, 15593, 49091, 39887, 4094, 26521, 56111, 33396, 12971, 57806,
-25498, 48083, 18038, 41515, 21426, 53421, 35240, 12647, 50046, 22115, 46833,
-25973, 42758, 5535, 47850, 10453, 44807, 15421, 42045, 19517, 53657, 34803,
- 5187, 36176, 65161, 4, 55235, 15335, 62391, 38571, 11831, 49158, 31523,
-17080, 47395, 14673, 62982, 28762, 7300, 42498, 13026, 32939, 60697, 22013,
-39641, 20693, 46511, 11900, 31257, 56067, 23395, 60458, 1324, 52979, 25659,
-33342, 57967, 2754, 42204, 10501, 51227, 26226, 56373, 21307, 60395, 18326,
-38321, 28857, 52662, 4490, 61777, 9103, 30942, 64900, 29437, 45019, 10197,
-47468, 29678, 38141, 10908, 60570, 19901, 49256, 5636, 27455, 64476, 7199,
-56298, 34029, 3405, 52382, 29613, 61894, 13703, 24847, 65123, 20107, 52888,
- 4402, 49075, 27542, 599, 63588, 10015, 57783, 34436, 28563, 60600, 6385,
-25021, 59528, 20454, 51994, 22566, 36478, 59125, 13564, 42031, 31158, 6838,
-58577, 12614, 56619, 20897, 51218, 15146, 37002, 26837, 40577, 10848, 21694,
-52176, 39568, 10074, 50302, 3763, 29898, 61252, 12876, 27985, 57804, 19199,
-59828, 7103, 29606, 57057, 24153, 9530, 47597, 4212, 51226, 22090, 35924,
-62959, 7873, 26955, 57893, 1628, 64050, 6387, 52493, 27415, 3930, 23385,
-51916, 2561, 25501, 51233, 41682, 4610, 29093, 56532, 2044, 61913, 8180,
-20680, 63955, 41086, 15777, 53157, 38115, 7973, 59710, 32759, 15405, 42700,
-12253, 39025, 57439, 18787, 31876, 63967, 12450, 47172, 3872, 54502, 30529,
-53380, 4358, 24306, 47123, 21450, 48524, 27457, 10215, 57754, 400, 64604,
-11038, 55333, 18979, 58911, 27991, 15484, 58165, 51504, 7406, 58678, 23869,
-49209, 10561, 42766, 883, 46831, 24694, 9818, 36544, 30941, 64071, 9475,
-37133, 55586, 16223, 42175, 1920, 47025, 32368, 43624, 15612, 60386, 29655,
-56191, 4213, 40016, 59358, 24352, 2875, 57973, 8426, 30098, 62142, 37221,
-22166, 2157, 48639, 30140, 7536, 34799, 56567, 4464, 45241, 14549, 43552,
-31291, 6454, 55536, 11758, 37476, 19795, 52824, 23045, 65033, 18276, 59547,
- 4039, 48971, 9675, 45396, 25434, 50830, 14874, 38641, 26023, 49467, 9449,
-27414, 43663, 19211, 64456, 37727, 5335, 42868, 20347, 39612, 59881, 19251,
-55846, 38745, 9800, 43957, 4789, 52767, 25447, 63135, 19395, 39136, 5235,
-40765, 28647, 37287, 5687, 48027, 14604, 51905, 28550, 59838, 20143, 47244,
-10995, 40793, 13841, 53958, 2085, 63561, 22203, 45192, 15821, 50853, 40766,
- 870, 49912, 21153, 57430, 16193, 52658, 19389, 45575, 4355, 42002, 14725,
-33040, 52519, 17166, 41161, 20273, 46082, 26800, 40219, 6233, 22834, 50734,
-34256, 7622, 38869, 29074, 62284, 15388, 58694, 32795, 20584, 43652, 25839,
- 7515, 54448, 16864, 49465, 34819, 25, 38089, 11945, 63488, 3634, 29827,
-45877, 903, 49634, 20388, 33689, 40429, 3302, 37861, 8132, 33042, 51953,
- 1858, 57529, 33926, 64229, 4593, 22764, 59387, 34355, 17796, 48832, 6069,
-32615, 49688, 3382, 51535, 13267, 35303, 44149, 894, 39020, 59366, 14961,
-44346, 25430, 58620, 0, 21342, 53694, 38457, 17373, 50915, 28189, 45512,
-16734, 48081, 31263, 43187, 15070, 39600, 64145, 12973, 21338, 52732, 40015,
-19520, 43006, 22531, 53472, 35724, 1110, 24167, 58802, 5415, 26412, 49938,
-19640, 39891, 61017, 6534, 54022, 26528, 2288, 49391, 40478, 6056, 44007,
-17964, 39558, 19579, 48057, 16392, 40707, 58213, 8513, 61749, 3209, 34085,
-52863, 23088, 40612, 20885, 38343, 5949, 43485, 12247, 50645, 35063, 10077,
-38733, 30965, 17563, 45625, 15283, 54063, 19762, 52310, 15902, 38164, 58207,
-20605, 51979, 18828, 49609, 28785, 12831, 51101, 22720, 60587, 16567, 57363,
- 6742, 54357, 1143, 41857, 14175, 47594, 27646, 9350, 49506, 29563, 38645,
-25539, 53849, 19246, 9130, 59478, 40627, 18896, 65080, 36643, 12174, 24126,
-50393, 29897, 57659, 2482, 62472, 38696, 24227, 64272, 1355, 58004, 11191,
-40013, 3050, 50538, 25112, 39379, 28302, 64015, 21424, 57861, 8520, 32589,
-60043, 6331, 36664, 30768, 55750, 4064, 53693, 7752, 27078, 57555, 12190,
-55188, 610, 27115, 46039, 5830, 25205, 51739, 18650, 59162, 11230, 42917,
- 3759, 49948, 13416, 58697, 15687, 54738, 18339, 60943, 22172, 41420, 31324,
- 9348, 38559, 4325, 36093, 63849, 3630, 43540, 19985, 47981, 34623, 7639,
-36437, 56807, 25380, 12624, 58392, 27975, 5469, 37236, 32211, 1713, 64268,
-14298, 55927, 24102, 62679, 38165, 10651, 45327, 111, 51590, 10119, 63850,
-16082, 57677, 35906, 950, 54160, 27027, 48636, 11342, 34222, 44767, 7019,
-39375, 54995, 4796, 59834, 38927, 22066, 42009, 12511, 64117, 26617, 55419,
-28656, 41774, 21796, 50895, 16801, 65410, 25714, 54838, 9325, 64270, 28184,
-54375, 25505, 63612, 19175, 45731, 23690, 8563, 43373, 28971, 45953, 7907,
-26970, 63303, 21841, 38237, 55225, 15054, 43267, 33809, 26842, 47872, 16662,
-62719, 33109, 20420, 53551, 34759, 8405, 38618, 31040, 45982, 29421, 5144,
-42977, 33559, 14651, 36200, 61234, 9888, 55729, 7224, 58161, 27211, 9025,
-34525, 59953, 26489, 6999, 59289, 12327, 49088, 16908, 44790, 29432, 49430,
-14837, 36706, 64739, 12965, 45108, 4572, 30879, 47114, 17358, 37216, 60123,
-24564, 11523, 55149, 30163, 61143, 9937, 56781, 2201, 43925, 29224, 15440,
-31692, 38797, 25124, 45080, 6346, 43548, 13098, 59674, 26674, 53381, 24491,
-64081, 4701, 47130, 25971, 13, 63688, 34533, 5429, 60120, 28975, 36768,
- 8385, 63038, 32534, 2839, 44295, 7334, 41384, 1258, 60901, 33272, 4181,
-46056, 10014, 29926, 40023, 24185, 34481, 48806, 20155, 44309, 18893, 64413,
-37045, 16536, 61399, 12329, 47802, 1301, 41724, 51146, 32522, 14144, 45570,
- 3695, 53290, 29165, 60167, 19661, 9939, 35905, 48716, 22826, 14121, 44106,
-18641, 42043, 27342, 46036, 20991, 43755, 30790, 8367, 55747, 11976, 37175,
- 1553, 40025, 28295, 47780, 18306, 52464, 21809, 63751, 16454, 46352, 21382,
-36306, 48787, 15722, 45164, 24959, 36312, 52975, 15087, 34911, 62818, 1509,
-48879, 27148, 36454, 15870, 56972, 33895, 27536, 35643, 46984, 7984, 42759,
-10889, 50197, 374, 63207, 23179, 56848, 33364, 14354, 30624, 45788, 23489,
-59153, 11843, 27381, 60016, 22984, 3086, 35427, 46827, 18217, 38633, 60983,
-13160, 54821, 41323, 22304, 39499, 21159, 51851, 2655, 26577, 57091, 21140,
-60752, 28365, 38007, 23368, 49893, 11056, 46619, 31578, 15641, 60355, 19586,
-56745, 1761, 26537, 51587, 23996, 12103, 46851, 28070, 10864, 50161, 3167,
-45353, 17504, 41083, 14486, 49017, 7168, 58103, 8967, 39290, 32731, 5797,
-42632, 32136, 21381, 46252, 11308, 43007, 4081, 42106, 13599, 50402, 32357,
-17839, 60388, 16220, 55529, 40380, 2093, 53247, 11101, 24709, 65490, 23327,
-10306, 60655, 4481, 52205, 27787, 8816, 45707, 2589, 27020, 61373, 16372,
-54566, 11259, 65053, 24080, 59224, 9277, 56642, 3028, 32433, 20945, 34812,
-47355, 17234, 44579, 30535, 47799, 1272, 45352, 33972, 15950, 37360, 4892,
-62870, 9932, 53954, 7538, 43108, 31126, 1909, 54724, 27879, 52502, 14778,
-35305, 63142, 8906, 21348, 47645, 28711, 36804, 582, 25490, 46486, 22137,
-36680, 64218, 7002, 36108, 52429, 17185, 57407, 14800, 63553, 28738, 49363,
- 3708, 42922, 11663, 37268, 20097, 40727, 21934, 57511, 42262, 14900, 53377,
-25537, 38206, 3277, 48523, 25482, 40711, 17176, 50846, 14794, 62618, 23587,
-45674, 16928, 39624, 57886, 19450, 35339, 52424, 4594, 64805, 9698, 27253,
-61607, 7530, 53917, 1809, 30459, 46236, 5168, 42872, 20110, 63852, 31030,
-21026, 4840, 62570, 25383, 49232, 15105, 42655, 1592, 39966, 64624, 25117,
- 8538, 34249, 49499, 4644, 52297, 12230, 61691, 6604, 57085, 13960, 62641,
-36452, 18774, 50063, 23061, 61752, 15783, 53376, 3339, 42320, 11594, 44345,
- 1434, 40346, 10590, 60853, 28579, 2172, 61701, 30463, 8623, 65396, 10415,
-31017, 47680, 17863, 41620, 29955, 8283, 63933, 45937, 24037, 8987, 62172,
- 2133, 24742, 64853, 32461, 55841, 19669, 44073, 16270, 46094, 6638, 52719,
-25152, 58228, 12482, 53145, 6281, 32803, 46544, 16549, 44609, 29321, 63993,
- 6506, 55435, 9882, 29102, 43905, 23624, 9521, 58965, 6878, 46703, 11955,
-36331, 48814, 6369, 43892, 30968, 8443, 53758, 2274, 30084, 42649, 18122,
-63308, 37927, 4145, 42482, 14533, 40763, 64205, 16959, 37228, 61540, 16172,
-36538, 64780, 15481, 56966, 31845, 54195, 5116, 60042, 23785, 32911, 37346,
-26944, 56769, 15513, 59695, 13805, 52134, 1700, 35509, 60952, 17909, 55423,
-27159, 62192, 5189, 56383, 35477, 1156, 49916, 32149, 14765, 44022, 18651,
-46696, 35766, 303, 34648, 54476, 18490, 42365, 12506, 37524, 56452, 17843,
-64417, 40034, 19621, 43657, 3832, 41757, 18169, 47602, 15269, 31169, 40116,
-25728, 43603, 59490, 488, 28341, 62516, 4352, 55044, 13585, 56936, 18277,
-64563, 28750, 55406, 26364, 33206, 38755, 23458, 60714, 18080, 56667, 24571,
-38564, 9422, 33544, 58399, 1302, 28753, 53131, 38999, 4220, 61979, 14308,
-56132, 40913, 5775, 58660, 10598, 20446, 31049, 60482, 910, 42119, 7835,
-46509, 33611, 17792, 36023, 56743, 16989, 62272, 1505, 55836, 12845, 49446,
-16764, 30039, 48064, 9215, 44663, 13462, 63937, 20877, 55004, 4608, 59234,
-30145, 39796, 21451, 54811, 12167, 52851, 25484, 8493, 30843, 63309, 14851,
-45273, 17888, 38462, 51768, 15917, 39384, 33273, 22989, 58328, 17824, 56901,
-15217, 54700, 35292, 11158, 58603, 43800, 36216, 10363, 30696, 61133, 20624,
-54942, 27028, 5889, 53017, 30466, 61309, 16884, 58348, 31048, 36500, 22739,
-38608, 28054, 47257, 402, 29814, 58415, 5018, 44333, 10614, 45999, 24486,
-57350, 20571, 61435, 17353, 51561, 22615, 42877, 18160, 51083, 38459, 17317,
-50036, 35439, 22584, 33698, 56276, 4152, 58867, 13920, 54408, 33445, 20636,
- 229, 35047, 43726, 18106, 49108, 39901, 21557, 3987, 27352, 39481, 12473,
-58492, 28751, 37672, 20899, 48540, 1453, 38989, 17004, 35794, 64736, 167,
-55055, 9278, 52418, 14288, 32851, 41978, 22635, 52076, 3660, 63117, 35088,
-27225, 50744, 18537, 43356, 29383, 16550, 64960, 18396, 40261, 58326, 18929,
-36806, 61402, 5099, 48992, 8655, 29689, 47375, 22016, 53122, 28593, 9319,
-45552, 3577, 31496, 53678, 1223, 23889, 42957, 28421, 10400, 22743, 47541,
-34779, 1573, 62460, 11347, 52602, 2932, 48146, 35854, 23231, 37136, 57645,
-24422, 7021, 49341, 32482, 11703, 38018, 30642, 15453, 48244, 25182, 38176,
- 6756, 62437, 27880, 58849, 7576, 56713, 28441, 44723, 6946, 48777, 25712,
-63748, 22118, 5013, 49406, 28675, 6112, 48188, 12317, 59863, 28245, 55088,
- 1206, 34859, 52160, 6062, 63789, 10969, 22772, 52992, 38400, 12314, 42663,
-21758, 37946, 23073, 41401, 3410, 43492, 10657, 48043, 17817, 57666, 3081,
-29983, 46020, 5873, 44122, 20316, 62357, 18495, 40890, 23313, 44290, 15923,
-32017, 50213, 20203, 42740, 18445, 32271, 52994, 27471, 34625, 51835, 44667,
-12902, 49598, 19827, 54288, 26225, 1998, 60834, 9122, 28030, 47719, 22155,
-42285, 27499, 44288, 6829, 61967, 3969, 27615, 60708, 21780, 51719, 30810,
-10357, 34742, 46634, 22704, 8890, 56248, 2271, 29489, 42500, 5699, 61794,
-36568, 49358, 108, 41979, 21880, 58175, 32853, 2686, 30700, 59679, 12777,
-52370, 8840, 40397, 27585, 37417, 6643, 23129, 52367, 33383, 8130, 22006,
-57095, 38671, 6157, 44237, 10768, 36445, 47642, 17596, 41545, 104, 45503,
-25631, 9283, 51459, 2591, 54790, 9832, 32607, 53025, 16081, 42554, 31935,
-19891, 54396, 29565, 7012, 32499, 37826, 5939, 39386, 29865, 58655, 4568,
-56291, 8177, 24303, 43575, 6132, 59254, 2897, 50668, 19674, 43782, 23437,
-46978, 6416, 40385, 56582, 29585, 61056, 11404, 55571, 28445, 12829, 52140,
-31342, 61745, 7478, 53578, 34756, 3058, 65258, 10027, 41409, 29000, 62555,
-26563, 50951, 15043, 30861, 38723, 24911, 40408, 20937, 50478, 1881, 62348,
-13958, 47781, 15359, 49734, 413, 34056, 63464, 5224, 56759, 37455, 13304,
-50716, 3743, 24597, 47004, 9579, 26134, 54404, 34332, 24979, 56208, 14015,
-59541, 5997, 33998, 58088, 21759, 51070, 18162, 40650, 29304, 51738, 7811,
-58942, 36201, 63139, 9192, 29666, 53273, 21047, 46998, 22562, 41564, 25450,
-10033, 62073, 4718, 19682, 48067, 29884, 39656, 655, 53108, 17203, 58236,
-41356, 7487, 64724, 13056, 52578, 30928, 4403, 32306, 42279, 16798, 50618,
-21157, 61773, 30383, 2023, 35730, 54038, 41837, 14032, 32971, 57257, 22484,
-51552, 30779, 13289, 38200, 26819, 61905, 11921, 42268, 19313, 47071, 35373,
- 8640, 24714, 51039, 17743, 61021, 5573, 48594, 11327, 51447, 23745, 61349,
- 376, 42139, 13637, 49766, 37845, 15734, 63560, 13180, 50487, 3526, 45716,
-10187, 51882, 5539, 64387, 12017, 34907, 57667, 6869, 64791, 11072, 37843,
-14848, 61448, 3393, 21350, 40126, 27123, 58513, 9978, 34395, 50370, 22479,
-53041, 34699, 5727, 54704, 14172, 59561, 18674, 52329, 35097, 57197, 39256,
- 7182, 42808, 1432, 41107, 56665, 27890, 14125, 65477, 35843, 26566, 33963,
-49840, 17528, 48370, 31916, 13490, 23968, 56938, 11636, 53045, 6334, 23207,
-62286, 41763, 5998, 45725, 35832, 24946, 62879, 221, 51623, 29992, 45399,
- 2759, 24528, 55472, 34972, 673, 26366, 52222, 22245, 63004, 28863, 12423,
-58875, 21753, 56372, 13500, 38778, 63120, 19666, 48670, 24065, 64721, 14981,
-37992, 61153, 7409, 36781, 59129, 2741, 40437, 64493, 14836, 48384, 27436,
-53948, 8679, 20331, 47038, 35127, 29264, 62911, 14810, 53395, 25799, 40920,
-13138, 62340, 7953, 38285, 16834, 64766, 24458, 12504, 51231, 21289, 45520,
- 4564, 37447, 59738, 6733, 45328, 15887, 47910, 26076, 17008, 49849, 21963,
-55083, 19043, 51805, 9437, 42377, 4978, 34472, 58094, 18222, 61305, 3834,
-56590, 35958, 24545, 32298, 37393, 25687, 39280, 29607, 57872, 13659, 28043,
-47824, 23378, 1388, 55280, 27214, 34545, 63074, 15280, 55853, 41728, 21418,
-12379, 50505, 2535, 44033, 35397, 24014, 48424, 13254, 39551, 7239, 57406,
- 9703, 62785, 20146, 46543, 21729, 2210, 42407, 26313, 44977, 16404, 43205,
- 5329, 61138, 17365, 55675, 34214, 29441, 51289, 33446, 9635, 58642, 14049,
-65031, 23496, 46720, 3074, 29236, 54166, 20905, 44554, 18910, 46347, 22151,
-51963, 10733, 64042, 3653, 41117, 13535, 39405, 58292, 20036, 9589, 24145,
-60113, 38056, 10654, 42683, 1817, 36527, 63242, 7738, 45079, 15662, 48978,
-23063, 55492, 4730, 57175, 29774, 65270, 2241, 40298, 29596, 53390, 16540,
-63343, 34948, 14740, 30028, 52691, 21358, 65388, 32542, 8721, 51843, 34990,
-27657, 32775, 56092, 26086, 61625, 29337, 48297, 25304, 53827, 2504, 27047,
-45282, 23841, 51041, 1647, 48402, 24588, 42882, 32927, 63059, 4678, 36794,
-29029, 65257, 6691, 40063, 16285, 44894, 24435, 32828, 40448, 3007, 37177,
-11024, 21077, 24858, 13791, 55279, 18711, 61687, 23390, 6083, 50533, 39215,
- 370, 52573, 11296, 57767, 7529, 64189, 35530, 3143, 55579, 40229, 17627,
-45894, 27653, 35908, 49774, 10574, 25191, 55827, 22147, 3568, 47303, 13595,
-44181, 16308, 58919, 18886, 64829, 39905, 14886, 50350, 29589, 59666, 13764,
-42048, 2988, 50847, 38231, 4997, 43570, 16249, 52584, 28576, 5745, 43138,
-29451, 7813, 44084, 33914, 3730, 24016, 50802, 13466, 26358, 49012, 17892,
-33646, 51712, 656, 62451, 14069, 34062, 64921, 26118, 11264, 48061, 337,
-45005, 34377, 9125, 47903, 28581, 36729, 22217, 58091, 32669, 2446, 35483,
-44458, 5188, 41570, 16531, 50122, 19675, 31944, 41629, 23970, 57234, 1863,
-43005, 60639, 7834, 44850, 31407, 5481, 36482, 20379, 60297, 23868, 49271,
- 7387, 47358, 11497, 43650, 27977, 8446, 58806, 10493, 54489, 4620, 60409,
- 8294, 22571, 53057, 39249, 9045, 61815, 30563, 40855, 9963, 49457, 6963,
-38673, 29488, 735, 65359, 39721, 20156, 61732, 27500, 10778, 64641, 266,
-31926, 60866, 23907, 35032, 46024, 32563, 4592, 30630, 49736, 35321, 13929,
-56548, 6136, 64849, 12221, 38570, 13485, 44853, 399, 49873, 7920, 21716,
-63403, 41070, 18343, 45271, 36402, 8984, 32876, 60619, 14658, 39601, 31336,
- 2523, 57790, 9894, 60061, 26139, 37636, 20262, 47320, 17934, 53563, 8181,
-27327, 45969, 31915, 50545, 614, 25944, 52830, 21437, 58370, 16058, 25218,
-49683, 20342, 57489, 2493, 37153, 13573, 45541, 16876, 43058, 15143, 32033,
-58589, 8893, 24160, 44670, 28998, 6634, 56270, 36926, 12823, 46681, 6053,
-23157, 57232, 25433, 731, 48630, 10921, 39714, 6830, 36394, 13403, 37579,
-16669, 40207, 29731, 49282, 13218, 40877, 19847, 59200, 30130, 8092, 53667,
-11229, 23464, 47600, 18265, 44341, 15398, 47099, 12510, 59892, 676, 64485,
- 8808, 56469, 25366, 63130, 30573, 49740, 65170, 34079, 28610, 50236, 9679,
-34008, 59625, 11822, 24984, 43976, 19106, 45627, 23480, 38705, 11973, 22924,
-46331, 29373, 7172, 59403, 33719, 2164, 63764, 14033, 33461, 48661, 14450,
-34905, 65433, 29518, 56391, 26179, 39017, 7824, 49856, 10037, 28272, 60421,
-11810, 44892, 7147, 47851, 18327, 57817, 24685, 14522, 61669, 31929, 48031,
- 3195, 36401, 59059, 17949, 53929, 35326, 16281, 57652, 28966, 46770, 18346,
-63630, 39033, 10897, 60153, 7942, 25961, 44764, 35284, 23894, 46093, 2470,
-39867, 54959, 22160, 59736, 31292, 19448, 64283, 16690, 54892, 1106, 49366,
- 9887, 52031, 27633, 59497, 19443, 54932, 25162, 64505, 13654, 56363, 1042,
-62487, 9588, 37175, 32297, 11360, 30574, 38565, 14557, 61925, 25470, 57690,
-32769, 2702, 54406, 13211, 37888, 30277, 53682, 15669, 65166, 32763, 18535,
-46136, 19882, 42848, 17280, 45715, 34892, 3148, 24451, 43611, 19459, 45998,
-15980, 61195, 22308, 32784, 59873, 11938, 51444, 31693, 6678, 46349, 9719,
-40889, 52361, 19245, 37709, 53369, 14659, 48963, 2610, 19418, 55170, 26857,
-61093, 11442, 53905, 31592, 18053, 51026, 21510, 31397, 58780, 27340, 35010,
-64044, 18806, 46412, 36053, 2490, 24419, 52642, 5127, 27015, 50072, 19158,
-36100, 51057, 9552, 61619, 35342, 25102, 33391, 40226, 1001, 49243, 32489,
- 8989, 59508, 24900, 34802, 51813, 4637, 61115, 16977, 34786, 64758, 9133,
-47413, 7205, 41197, 55975, 4338, 39722, 33279, 25959, 61395, 28541, 34141,
-60077, 7317, 54875, 37375, 19689, 47110, 35714, 1634, 57887, 25171, 40501,
- 4119, 60180, 27268, 35182, 45350, 16812, 41065, 58274, 18950, 61218, 21469,
-54267, 22741, 59388, 313, 56438, 9693, 59774, 21850, 62482, 3960, 44069,
-12723, 37164, 63825, 19013, 38458, 56118, 9558, 59445, 2747, 52129, 21619,
-42566, 20003, 48349, 29952, 37914, 21476, 46663, 9817, 43883, 1130, 12369,
-46840, 3770, 37714, 26032, 48574, 17679, 37073, 57098, 15444, 62204, 34663,
- 3683, 59980, 30364, 54051, 15946, 62428, 25962, 38149, 15071, 47647, 19152,
-40339, 56825, 751, 31502, 50555, 19833, 9872, 37006, 4726, 61823, 33302,
-26856, 35429, 48525, 3863, 40905, 20521, 64463, 30709, 39453, 8614, 34723,
-48999, 22900, 9662, 27393, 65193, 23780, 10976, 41830, 1000, 60471, 30767,
- 6234, 51292, 10250, 43076, 1271, 31712, 52672, 23284, 36227, 57612, 19472,
- 5231, 59529, 12666, 56482, 14546, 32889, 5428, 38481, 10717, 54331, 3850,
-39777, 26653, 61422, 30162, 45038, 13617, 41786, 7628, 47743, 10539, 38681,
- 2827, 36515, 26133, 39660, 22666, 52998, 17336, 64054, 41571, 18156, 54280,
-33652, 657, 47401, 10411, 45181, 27892, 40147, 21305, 62825, 1294, 23589,
-42296, 5126, 50749, 39727, 778, 63690, 30082, 55165, 10945, 65480, 31131,
-55676, 14869, 58528, 5779, 53327, 35478, 2441, 45671, 17079, 44188, 36429,
-14697, 53339, 24657, 56919, 32046, 4874, 45696, 26299, 8326, 41794, 28243,
-63913, 38979, 12522, 44745, 18936, 40284, 6679, 62010, 34146, 996, 35605,
-46111, 3676, 50747, 8786, 25075, 42264, 15034, 60192, 29167, 56519, 15346,
-34568, 62882, 13362, 56885, 5599, 26768, 45421, 20359, 53417, 5879, 55134,
-17442, 61941, 14479, 57090, 41945, 29367, 1476, 62501, 14527, 43749, 12199,
-31001, 46593, 15575, 44511, 26952, 62267, 32214, 17219, 31116, 64848, 6828,
-53525, 10737, 50272, 912, 23648, 48977, 27162, 3575, 51811, 12680, 62723,
-31437, 14393, 50465, 17916, 49299, 33859, 9838, 62162, 2594, 51250, 12197,
-30939, 38488, 7952, 46626, 2895, 41777, 17295, 43739, 20165, 46563, 34828,
- 7882, 31079, 52775, 22855, 56724, 5135, 27476, 46447, 132, 31840, 41137,
-25062, 37855, 28447, 57923, 4964, 55158, 26709, 10291, 50539, 4156, 34314,
-52896, 19208, 40002, 54624, 21737, 58581, 16451, 64276, 2350, 43482, 30808,
- 5130, 51199, 9380, 29082, 47405, 18652, 42951, 994, 41659, 10474, 50577,
- 5000, 60950, 31325, 54208, 7655, 26634, 38679, 61097, 6982, 40636, 53579,
-21750, 48696, 12970, 53383, 1513, 56090, 13426, 43661, 16579, 49513, 25337,
- 2337, 55401, 27973, 63935, 1091, 33202, 57023, 41333, 12751, 37411, 56112,
-19378, 44810, 12535, 47343, 35821, 22888, 62737, 28134, 56802, 20962, 43769,
- 3583, 48018, 9769, 32237, 50798, 36417, 28226, 41468, 22734, 63484, 42857,
-16027, 49795, 35761, 24463, 51663, 11119, 37412, 6245, 23919, 57459, 18500,
-63260, 34633, 22871, 58323, 28940, 52541, 8586, 47283, 14295, 33240, 49129,
- 3270, 24975, 59923, 5137, 50409, 21245, 35304, 55930, 13809, 64396, 8087,
-52318, 27066, 35587, 55924, 17730, 57704, 12577, 25377, 48823, 35806, 6601,
-25331, 49561, 18435, 41744, 7137, 47024, 26228, 38393, 12091, 24495, 57444,
-30998, 52276, 4505, 22572, 58622, 34483, 1836, 37872, 14333, 59194, 17448,
-62366, 30071, 56368, 5504, 22219, 31543, 59578, 491, 52613, 15871, 43320,
-20468, 45466, 28014, 59761, 17207, 56188, 20334, 32456, 57920, 4430, 53560,
-10552, 48757, 8641, 31588, 46153, 1774, 44083, 24754, 34380, 63975, 75,
-40265, 16590, 43617, 11499, 46843, 30013, 36856, 6141, 21978, 51378, 38813,
-18482, 48001, 21886, 37654, 57823, 5875, 56166, 35529, 3139, 38647, 11036,
-43885, 52517, 14644, 46640, 19865, 43528, 17584, 64303, 41300, 10068, 32872,
-61703, 22577, 41722, 6022, 46002, 34287, 8344, 58878, 29899, 16231, 55014,
-22480, 40150, 28018, 64053, 5061, 52777, 33534, 25001, 65144, 11419, 55141,
-32440, 63668, 4412, 19222, 55438, 38646, 15221, 45949, 17775, 33329, 51392,
-15885, 60060, 13470, 54551, 7466, 62381, 10838, 36380, 32057, 14588, 39298,
-62769, 18854, 58061, 28497, 7547, 60979, 23492, 4939, 41223, 10505, 45743,
-29490, 53720, 12748, 62829, 27309, 39190, 21777, 58273, 6877, 54717, 13801,
-65041, 20284, 56402, 22384, 42737, 27607, 9066, 23515, 43011, 59014, 10156,
-22757, 45172, 30327, 2021, 59471, 17355, 44649, 20872, 41819, 22325, 63470,
-19430, 54558, 9094, 36559, 50688, 15402, 43822, 19773, 37135, 51362, 6417,
-21965, 52049, 28825, 7080, 50325, 26386, 64048, 20240, 55792, 2250, 37585,
-11490, 39944, 6698, 33987, 65445, 15615, 41159, 60828, 21373, 10388, 53062,
- 3718, 50251, 9225, 24874, 58233, 29799, 6897, 60285, 15526, 47029, 19978,
-53959, 39571, 3545, 46819, 30472, 702, 48904, 13159, 45467, 17613, 63524,
-27798, 59080, 6189, 40194, 28648, 46815, 15193, 44046, 26543, 63329, 6549,
-24430, 42171, 17287, 45927, 34179, 12120, 44642, 7136, 46364, 28530, 35087,
-61376, 14661, 22322, 59240, 37910, 2018, 44740, 12780, 60626, 30353, 1020,
-64667, 29789, 48109, 20013, 9284, 27132, 64241, 35544, 8163, 26604, 63546,
-21628, 51680, 23501, 39704, 3309, 50144, 12292, 33952, 49280, 8602, 42291,
-24917, 34367, 65503, 3952, 57344, 10147, 51569, 7495, 41936, 10914, 37678,
-48154, 16126, 45335, 28336, 40337, 22710, 35219, 60825, 20186, 54991, 30060,
- 8381, 51771, 15126, 47838, 12407, 59102, 29244, 64527, 23699, 4221, 54419,
-27961, 65089, 11879, 32168, 55475, 7760, 63374, 2724, 23345, 42284, 29646,
-13922, 54731, 19454, 59442, 24353, 325, 37802, 28003, 58260, 4100, 38519,
-32076, 18624, 56658, 40066, 13954, 44857, 18406, 54681, 15833, 65003, 26121,
-41835, 986, 47911, 36314, 6961, 53746, 14448, 34871, 44771, 17705, 58956,
-13874, 29346, 42836, 26820, 7610, 22171, 40599, 50374, 25536, 1007, 65335,
- 8597, 40160, 62075, 11508, 30783, 41809, 22324, 34033, 48571, 17653, 51580,
-20685, 61149, 44201, 2465, 33242, 45698, 14364, 40738, 51144, 15489, 45385,
-60040, 18143, 56301, 36180, 7969, 24344, 47015, 16191, 44657, 1621, 49380,
-31091, 38158, 25848, 49822, 28313, 37590, 4025, 48667, 16850, 52705, 32709,
-64708, 3816, 21098, 37172, 55334, 16953, 63996, 25575, 38480, 31699, 5445,
-62596, 10829, 46876, 6769, 37720, 26827, 60770, 32079, 21165, 59340, 4876,
-54710, 10764, 26247, 42408, 60319, 1842, 40079, 59470, 31689, 3938, 36873,
- 8595, 32021, 49920, 21434, 59385, 23746, 54433, 12924, 26809, 54929, 28995,
- 1916, 34463, 47511, 18448, 61896, 27276, 34349, 47264, 1671, 45702, 20812,
-40660, 33547, 2268, 63732, 31810, 15089, 60725, 36543, 15502, 55315, 28078,
-61952, 5967, 31985, 41039, 3838, 35472, 50899, 13413, 53830, 8162, 56827,
-33161, 11753, 39694, 30352, 51965, 1815, 59078, 31278, 4289, 60965, 16670,
-58597, 33871, 2552, 50012, 7934, 32106, 53575, 12357, 28048, 62198, 24070,
-51515, 20362, 36484, 50389, 13907, 41872, 4033, 62442, 37457, 49126, 16048,
-45134, 30006, 48112, 13463, 42217, 6403, 47529, 11356, 43695, 20280, 37047,
-60524, 15528, 54839, 21369, 57992, 10513, 30881, 48141, 23981, 37370, 25952,
-64388, 19421, 53129, 25518, 1985, 60704, 34321, 12915, 65181, 847, 50620,
- 6511, 41922, 12772, 38526, 59581, 18767, 41232, 22526, 52377, 34122, 2961,
-21144, 39652, 49925, 15558, 42473, 16891, 46654, 5216, 36836, 25791, 41373,
-29153, 52065, 11492, 61960, 24642, 33522, 41031, 5534, 51274, 29407, 60963,
- 8483, 36269, 26541, 50934, 9179, 48133, 4655, 25650, 52261, 140, 59889,
-28016, 39324, 2984, 53311, 19911, 60632, 31198, 11791, 49092, 25202, 59327,
- 8251, 24232, 48565, 1383, 35598, 49356, 4827, 52017, 31616, 60286, 28319,
-13732, 58733, 30336, 35704, 51711, 24933, 2408, 35522, 54982, 6594, 64120,
- 3643, 27819, 43543, 1041, 42227, 8416, 27321, 57158, 23603, 6428, 61768,
-24862, 1855, 37531, 27355, 34616, 50763, 517, 22511, 60432, 35293, 5611,
-55646, 22972, 60602, 20083, 10344, 63554, 3020, 36209, 8022, 58907, 31760,
-12927, 60294, 1368, 46049, 13522, 40780, 52150, 28587, 2943, 51221, 10690,
-47687, 8109, 50390, 34851, 25099, 54755, 35850, 28181, 52915, 436, 40587,
- 6265, 46095, 12865, 41892, 16559, 39126, 62166, 17256, 32479, 48722, 20923,
- 9971, 46554, 23326, 53550, 28605, 58629, 16841, 45376, 4331, 42247, 16178,
-46227, 35438, 8295, 49381, 22550, 64151, 7215, 31440, 38095, 15020, 59056,
-17526, 54698, 23695, 65117, 9453, 56980, 25293, 41505, 8575, 52860, 28479,
- 7187, 32476, 40896, 9325, 21509, 38377, 53939, 15434, 48576, 12099, 24122,
-65061, 19732, 30821, 38909, 2397, 60871, 15663, 57292, 17895, 48348, 35831,
-19012, 50968, 22295, 41636, 26240, 14047, 64486, 18855, 40275, 47311, 3490,
-33288, 52312, 14266, 39963, 4787, 59539, 10346, 27065, 57088, 18452, 52569,
-33663, 21689, 342, 55100, 11742, 60127, 3090, 54554, 16718, 61244, 30571,
-57231, 15364, 65052, 25094, 1656, 40757, 33061, 5070, 36149, 50634, 18559,
-39146, 13840, 49424, 2753, 33822, 44465, 5635, 62685, 39511, 22991, 6734,
-54101, 17620, 38509, 26193, 57293, 16672, 62515, 4741, 26750, 46889, 3611,
-61361, 7438, 26331, 42636, 57245, 8316, 30828, 60277, 2193, 55969, 29066,
-60693, 21112, 54594, 13020, 59013, 17753, 45188, 1314, 50221, 8049, 64206,
-31601, 15319, 42791, 21117, 53239, 16899, 62585, 21659, 59221, 20222, 35834,
-63669, 11210, 38148, 33188, 7648, 48637, 22768, 34945, 9486, 37965, 21480,
-64536, 35552, 1803, 41035, 29212, 62611, 15666, 30596, 55991, 12023, 61775,
-14853, 47044, 2055, 48974, 34549, 6458, 43676, 10719, 20556, 57438, 28483,
-49844, 16935, 45526, 25528, 36238, 56680, 19588, 65022, 17061, 54770, 37452,
-16355, 47789, 35539, 10772, 53457, 29854, 64851, 8388, 12911, 28889, 44574,
-33089, 14460, 51968, 31608, 37061, 8518, 32437, 53033, 40750, 15138, 46126,
-20907, 51924, 18199, 47190, 34563, 26102, 39001, 18877, 57674, 25066, 11066,
-62730, 34018, 15252, 40128, 23436, 60753, 16007, 56892, 13679, 32370, 3474,
-61332, 14034, 47673, 18044, 53698, 22626, 62780, 24289, 56195, 28269, 3574,
-53219, 9177, 25173, 63530, 33294, 16210, 61398, 13215, 44273, 5781, 40566,
-14126, 62127, 31710, 56543, 269, 60566, 19105, 36208, 53605, 13389, 39925,
-57179, 917, 44567, 7543, 41410, 29119, 4859, 43341, 31545, 17735, 50208,
-14084, 48120, 35152, 17975, 43864, 65344, 17043, 56987, 43130, 24524, 1587,
-60980, 20363, 56608, 34171, 49, 36080, 58525, 18107, 52681, 21664, 46251,
- 4475, 41432, 28999, 6922, 63499, 10130, 47505, 361, 53887, 36199, 23923,
-54653, 9755, 23078, 55531, 41398, 7341, 46156, 18784, 43743, 22978, 37849,
-47563, 6284, 43723, 25023, 7800, 58008, 36147, 25865, 41586, 20308, 38569,
-22931, 46629, 34315, 1076, 27296, 44986, 5922, 46817, 29091, 52189, 18232,
-63683, 26656, 2432, 56816, 7929, 61796, 19870, 55116, 28342, 12734, 50143,
-29137, 9831, 49213, 30527, 41460, 24514, 52209, 11717, 29442, 42956, 22017,
-49724, 37049, 13951, 51180, 29649, 36132, 49459, 13206, 31861, 50953, 13985,
-34732, 45398, 24739, 11018, 43445, 197, 30254, 48664, 6342, 36397, 26753,
-55734, 20587, 43433, 18206, 37430, 54266, 10028, 48920, 2922, 45893, 10442,
-44097, 1533, 31209, 49455, 16311, 29515, 47339, 17379, 52638, 12288, 62011,
-44276, 27859, 56489, 4031, 32776, 13383, 57020, 18172, 43944, 4495, 54402,
-39457, 19235, 43719, 23535, 38866, 20959, 41119, 11557, 52385, 24029, 61073,
-29254, 48674, 4975, 44144, 9929, 61583, 34710, 13904, 50218, 5942, 38713,
- 9479, 49654, 31597, 4420, 63778, 12528, 56138, 31643, 18331, 48828, 16260,
-54078, 20951, 48150, 6870, 63528, 40051, 2881, 20748, 64588, 25616, 45709,
- 4436, 27537, 56300, 24178, 61473, 12177, 43514, 5749, 62890, 9638, 55140,
-32360, 6757, 35172, 47036, 18213, 44839, 27191, 58309, 4083, 29694, 43116,
- 965, 40871, 51413, 22597, 42339, 24572, 32650, 65315, 10368, 36742, 1941,
-45104, 8174, 47068, 34263, 14274, 36037, 44304, 4578, 39224, 49707, 556,
-41802, 24365, 64992, 21868, 46986, 27073, 8874, 20732, 50397, 25552, 42762,
- 5501, 29828, 45506, 26009, 16988, 49062, 21790, 52523, 11840, 61159, 34987,
-14523, 56278, 35677, 5792, 62015, 30623, 1400, 54135, 30080, 3325, 47387,
-33393, 4921, 60116, 34471, 26457, 44749, 6990, 43434, 26062, 47164, 9686,
-44820, 7376, 37687, 29571, 65390, 12707, 55157, 23339, 40158, 33511, 27579,
-62151, 11205, 48429, 6015, 42943, 33642, 63273, 10615, 21034, 57298, 29042,
-64315, 9309, 56256, 2860, 32887, 60715, 14756, 54086, 29461, 40297, 10196,
-62045, 5421, 53177, 10743, 62947, 7731, 25207, 55542, 37824, 17419, 51407,
-13546, 58990, 7373, 44861, 9815, 46465, 29469, 41007, 22843, 34703, 46226,
-11304, 40525, 59001, 17561, 36462, 57730, 14145, 55635, 3444, 61832, 7688,
-34522, 48125, 2614, 53705, 10101, 30641, 65339, 23575, 11311, 58363, 20177,
-63259, 745, 36057, 62343, 21975, 10031, 52866, 40335, 18365, 63687, 38520,
-16307, 40849, 65405, 10613, 30765, 48425, 12143, 58455, 2188, 27953, 63512,
-19202, 38142, 30121, 53743, 15739, 39688, 57165, 7109, 33510, 53923, 5526,
-61101, 26414, 37345, 21032, 5002, 50191, 13842, 41443, 52053, 23216, 36642,
-50824, 11144, 47702, 31411, 9374, 60089, 3355, 53711, 8432, 63323, 17764,
-58000, 16194, 41782, 3108, 38787, 22455, 60656, 18481, 41200, 30450, 1558,
-58404, 23294, 32644, 59800, 24617, 36615, 21460, 45983, 25559, 41360, 231,
-50415, 39138, 5718, 32198, 40360, 62243, 25793, 52797, 13451, 29736, 58438,
-41658, 12523, 49116, 18071, 61998, 36826, 8841, 42421, 282, 39419, 21532,
-51239, 23842, 44656, 16085, 50140, 27789, 61534, 469, 56673, 6287, 49660,
-12752, 36978, 53901, 18029, 64937, 30926, 8325, 58496, 11471, 51833, 4354,
-38879, 26154, 49648, 31844, 19743, 57437, 18562, 64220, 28833, 58704, 17751,
-54089, 14708, 30041, 52925, 18245, 48156, 11899, 53949, 1714, 51819, 33057,
-44752, 30946, 9941, 63146, 21845, 55414, 3155, 59672, 33006, 6109, 63335,
-25266, 39615, 20318, 48070, 29825, 118, 52434, 26204, 39217, 19949, 59126,
-36469, 14368, 58122, 26307, 12447, 51934, 18459, 49468, 11485, 29491, 62371,
-18953, 55101, 16387, 63023, 27185, 32647, 50631, 9362, 24736, 45443, 15472,
-49752, 3385, 56795, 13280, 35414, 43737, 19688, 60211, 26773, 1580, 38313,
-30029, 48648, 24569, 11, 35223, 48116, 16879, 51126, 19960, 30532, 39502,
- 1931, 63968, 16327, 51482, 21019, 42969, 24110, 44370, 18279, 40115, 50375,
-20950, 8964, 58281, 31039, 36636, 23229, 38636, 30697, 60101, 17060, 54630,
-13493, 58484, 1187, 30315, 63210, 4567, 23775, 45758, 157, 25267, 43870,
-20030, 47202, 15446, 31677, 58248, 17152, 63625, 35331, 20642, 45810, 1303,
-43677, 35290, 4359, 44578, 17164, 46377, 25100, 6643, 36638, 56605, 32386,
- 5593, 49055, 33337, 8470, 50476, 24371, 3404, 34578, 57486, 5096, 39426,
-21497, 46610, 34821, 7318, 32909, 57822, 6493, 24203, 65336, 28193, 12534,
-41798, 62086, 14910, 30580, 40912, 2081, 57571, 32684, 42774, 18114, 63091,
-25881, 9141, 59770, 5615, 21197, 63882, 34938, 17162, 50320, 36317, 22527,
-32898, 41673, 26057, 47757, 5410, 32091, 64348, 19492, 56337, 12580, 34764,
-48013, 6981, 51280, 21403, 41880, 11736, 47855, 14921, 53586, 2159, 60815,
-13800, 53266, 20928, 59671, 26213, 13628, 43961, 58691, 2584, 42462, 10857,
-37610, 23058, 46539, 6490, 27361, 56981, 856, 39052, 10805, 30739, 54546,
-19067, 59247, 15392, 55673, 30540, 2502, 35982, 64354, 4386, 41993, 14366,
-43886, 24156, 37917, 19188, 63349, 28086, 9855, 46309, 35211, 15183, 48480,
-36470, 21530, 35115, 55849, 14363, 57999, 7663, 61580, 37664, 12470, 43807,
- 205, 51064, 6959, 48042, 24242, 60706, 11391, 35314, 58101, 4768, 38438,
-28582, 36461, 13666, 63824, 4911, 58427, 18271, 34587, 47318, 12182, 41597,
-15823, 50699, 37313, 13004, 43679, 2565, 53770, 9081, 62944, 40393, 16333,
-46220, 11761, 50736, 7593, 23346, 49542, 8800, 35666, 45358, 22134, 40488,
- 6400, 53243, 38193, 14357, 47795, 4250, 33341, 38652, 1675, 56319, 16219,
-59624, 34816, 938, 61806, 26517, 44605, 20077, 51393, 5408, 25253, 52161,
-12828, 32449, 57534, 13839, 51925, 5487, 39081, 61107, 17876, 31106, 40489,
-10755, 63317, 8274, 50701, 34456, 23271, 45032, 3374, 48505, 12933, 59075,
- 1559, 56706, 31034, 4227, 64130, 41868, 27972, 3008, 63344, 10996, 54241,
- 762, 24680, 43487, 6195, 47267, 35680, 25087, 43934, 15792, 37863, 55445,
-14918, 64168, 39243, 8167, 59939, 26181, 35317, 45565, 5368, 40919, 27345,
- 8805, 58825, 25378, 56509, 16269, 54125, 25905, 32856, 55364, 9027, 57994,
-29069, 47192, 3199, 23130, 59302, 27040, 14787, 56951, 20227, 60132, 28974,
-51348, 13551, 43903, 23242, 62776, 14894, 56312, 25739, 45190, 17980, 40955,
-47402, 3924, 37093, 51363, 23534, 2682, 35518, 56190, 18921, 50875, 23383,
- 8717, 54204, 30829, 637, 46972, 35443, 27796, 33991, 46077, 25992, 82,
-57619, 25000, 6525, 64904, 12376, 57037, 774, 29283, 54435, 37137, 9640,
-46467, 31101, 50591, 460, 25935, 64593, 12892, 55680, 24841, 63485, 3932,
-40391, 28717, 46945, 19139, 39631, 5396, 42996, 10043, 36578, 64141, 22689,
-11629, 33726, 16511, 57388, 1707, 61271, 17390, 54902, 35139, 14914, 33073,
-58699, 23689, 48779, 3615, 44429, 29430, 47658, 6135, 40684, 58451, 28945,
-11923, 48082, 19686, 53160, 34579, 9518, 54878, 31878, 1650, 39202, 57322,
-24143, 4910, 59605, 28894, 2376, 63689, 9528, 30565, 43172, 20762, 41412,
-27100, 5282, 52659, 23441, 40253, 21984, 42752, 31774, 2512, 32571, 46037,
- 7562, 22368, 31641, 61738, 15982, 56040, 26233, 40151, 23233, 36146, 49652,
- 2316, 28440, 57696, 19768, 65213, 8909, 29730, 56693, 19042, 60036, 17180,
-45200, 21706, 31968, 57196, 3968, 63901, 28093, 33901, 61314, 16235, 31461,
-62795, 426, 56153, 15924, 64664, 33172, 2334, 57394, 35420, 23014, 60289,
-14930, 48956, 20199, 40054, 5664, 47812, 28379, 36858, 9750, 30802, 60702,
-15685, 32833, 64933, 3750, 40017, 49773, 18030, 44724, 19930, 58949, 33631,
-14110, 50086, 4175, 58246, 33815, 24194, 42653, 17712, 56959, 12319, 28484,
-60973, 30952, 38407, 26291, 36902, 33026, 16581, 48535, 33557, 12429, 51840,
-40256, 19649, 44216, 21526, 49142, 34298, 11738, 64574, 31962, 17619, 61129,
- 6957, 52138, 27648, 8636, 50920, 32296, 19296, 49817, 29409, 1464, 64710,
-11989, 52911, 15805, 49115, 31009, 39064, 5972, 34193, 50367, 7990, 61045,
-11959, 38428, 31246, 16397, 51966, 18966, 64143, 35231, 9143, 51030, 36258,
- 1849, 44692, 12349, 42074, 19800, 61462, 16880, 49997, 3758, 41026, 10748,
-49562, 970, 61868, 13943, 33497, 60187, 21397, 8860, 58056, 28804, 49180,
- 8094, 43779, 11423, 39188, 64340, 16632, 38017, 58433, 14424, 54768, 3178,
-61582, 12778, 53375, 32719, 13634, 45099, 35332, 27949, 51286, 21367, 35570,
-45075, 13974, 23972, 55271, 22038, 7381, 23630, 59123, 40214, 16476, 44804,
-29672, 7297, 37062, 27662, 50822, 11002, 34558, 57297, 11903, 63188, 18676,
-55250, 28822, 3522, 45308, 29586, 55467, 36872, 27741, 50623, 24767, 43963,
-11260, 49860, 21513, 51376, 7353, 42117, 20057, 65389, 26067, 9236, 34110,
-63962, 13165, 20628, 49082, 22835, 32975, 59741, 7699, 26962, 65238, 16906,
-41399, 51950, 21266, 7826, 50378, 33348, 17523, 54114, 26237, 40741, 23758,
-59943, 1221, 46812, 15301, 54312, 33629, 14872, 60200, 8642, 56740, 10437,
-65520, 27888, 55181, 16463, 63219, 37763, 50066, 9598, 43221, 3793, 49099,
-10890, 57029, 7917, 26748, 62222, 39962, 6482, 44933, 36064, 24267, 47646,
- 4053, 49822, 30539, 38077, 5003, 51694, 10417, 37112, 23836, 40879, 13568,
-45169, 2734, 40401, 52677, 17871, 48660, 25767, 41986, 9825, 23329, 45867,
-30043, 8058, 52113, 10065, 41489, 25315, 64341, 11681, 54095, 17451, 55628,
-18895, 57675, 41219, 7492, 37897, 48936, 18591, 45277, 27394, 8888, 62605,
- 3268, 41591, 29509, 7762, 55332, 27189, 42060, 21365, 53029, 895, 58797,
-32385, 4604, 36695, 49994, 21653, 9886, 55694, 5811, 65302, 11474, 53429,
- 7045, 24822, 59472, 22662, 10222, 55074, 5195, 62484, 14039, 56214, 27919,
-37859, 2872, 53340, 12494, 48885, 18908, 60086, 29793, 36792, 3898, 59217,
-13203, 38022, 51405, 18644, 43508, 21735, 60904, 463, 54981, 12877, 61463,
-15123, 30625, 42986, 17588, 48459, 1930, 64903, 40717, 4947, 42714, 15052,
-45224, 30519, 17427, 62908, 25965, 34885, 53794, 7497, 47307, 681, 37955,
-29975, 54746, 16128, 60663, 29424, 37279, 20910, 52450, 11329, 26569, 54609,
-39432, 18333, 45160, 14313, 63903, 32351, 58750, 27636, 3805, 48028, 10030,
-33234, 45446, 22656, 41339, 18770, 43195, 7673, 40422, 61221, 16186, 56287,
- 2364, 38315, 10320, 62539, 7047, 59793, 40134, 1821, 41693, 62291, 34044,
-14181, 31426, 52453, 3218, 39589, 60423, 15259, 54289, 20135, 62668, 4848,
-26098, 44867, 32583, 48748, 7740, 37811, 52439, 16982, 50051, 6139, 63360,
- 9344, 39026, 5530, 29719, 64786, 3251, 40165, 25754, 62706, 15975, 52592,
-12721, 35431, 50348, 16830, 27036, 50955, 34583, 7242, 57239, 1802, 38863,
-30273, 45268, 3146, 47231, 10782, 26216, 61236, 43969, 14675, 62359, 38493,
-10568, 49831, 7073, 45412, 13404, 50592, 28679, 64581, 3391, 48181, 24626,
-34384, 50210, 20597, 38351, 15609, 41873, 5678, 44799, 26631, 1469, 20416,
-54313, 23878, 60217, 18620, 45644, 19750, 32587, 54170, 13277, 22543, 51948,
-26200, 467, 54670, 20697, 42131, 25834, 8441, 64649, 32436, 19533, 59485,
-15654, 54360, 6562, 58874, 19464, 55079, 25070, 5882, 43395, 28906, 5160,
-58341, 30762, 55311, 13198, 63673, 20888, 43236, 27700, 53715, 5081, 30000,
-43978, 22534, 42271, 7038, 46046, 2643, 23751, 53396, 28875, 1246, 58823,
-14299, 55872, 37237, 21642, 52684, 11759, 64022, 22120, 43297, 12390, 65189,
- 7065, 38891, 30240, 14490, 51677, 25686, 64728, 7522, 35234, 46549, 17437,
-42684, 19120, 45531, 21999, 62126, 36099, 89, 34220, 46896, 26312, 38074,
-23570, 41633, 4299, 48400, 16100, 44813, 27053, 40556, 22187, 38557, 1636,
-47412, 17037, 44423, 21623, 46698, 6790, 31168, 56530, 4170, 37158, 25546,
-45249, 19009, 41883, 21507, 47480, 2770, 35985, 53034, 22079, 44227, 24790,
-12380, 58732, 20971, 54256, 1070, 60441, 40227, 7022, 46733, 15173, 31439,
-64331, 24753, 33418, 58895, 9050, 26759, 44177, 24055, 8412, 55258, 31355,
- 4818, 47994, 35575, 521, 30743, 62841, 5052, 41573, 25899, 1053, 20713,
-51491, 35743, 24528, 53465, 21392, 5862, 65444, 10788, 55605, 30097, 58336,
-23602, 4821, 49814, 32101, 22058, 48788, 33369, 24968, 50880, 30907, 15564,
-57348, 33182, 12108, 42701, 51094, 6190, 35556, 58048, 18249, 32822, 45793,
- 652, 42179, 14528, 38623, 54931, 21857, 1391, 26994, 61375, 23531, 9572,
-59506, 24085, 32765, 19170, 48328, 21663, 59072, 35454, 14240, 32667, 47810,
- 5294, 35981, 44959, 1552, 31681, 56414, 4624, 60146, 37768, 1083, 61624,
-27617, 35444, 52722, 15127, 60836, 18990, 54116, 23234, 59269, 34561, 4527,
-32458, 41068, 27, 29359, 44397, 18965, 62744, 30042, 55154, 23250, 6456,
-36059, 44167, 11936, 63063, 2082, 28853, 44117, 4143, 48812, 23909, 59622,
-18680, 35719, 57457, 31032, 36363, 7115, 32178, 42259, 854, 64814, 38971,
- 4448, 45333, 34501, 9618, 61255, 35210, 15279, 62663, 13745, 58242, 36581,
-17676, 49157, 41084, 1975, 31178, 43861, 26579, 34758, 47696, 9286, 37473,
-64230, 10998, 59715, 35492, 13924, 37854, 3503, 50318, 25493, 37110, 781,
-61356, 13540, 34624, 51222, 2869, 62582, 13119, 59803, 20874, 37362, 64209,
-14573, 44005, 22674, 39105, 33857, 6210, 30192, 43586, 16502, 46442, 25781,
-54030, 2101, 37079, 25168, 47778, 15429, 62279, 33233, 11290, 43746, 15896,
-30378, 54869, 618, 59924, 27141, 52122, 2744, 41272, 14230, 47845, 27842,
-56826, 7485, 61420, 12716, 53146, 18109, 59128, 24287, 62884, 10103, 57434,
- 5373, 65196, 11890, 54316, 24176, 63478, 11202, 55934, 24824, 62037, 15207,
-39459, 27333, 50099, 9137, 29428, 64279, 4982, 53863, 24732, 63453, 20882,
- 6461, 61637, 14321, 51473, 34210, 26509, 38140, 11203, 48222, 13478, 32190,
-55363, 22645, 58063, 4513, 39283, 10967, 50708, 20548, 35534, 64928, 5657,
-53911, 38455, 17531, 64080, 40467, 16660, 59041, 24406, 52090, 15383, 48361,
-17594, 50453, 31140, 43299, 10380, 61321, 6751, 29104, 59179, 39527, 17096,
-50779, 35844, 1897, 20890, 48063, 29007, 39160, 7995, 64091, 11465, 58269,
- 3790, 37660, 9438, 49041, 29261, 17699, 53005, 2772, 28855, 63257, 24559,
-10362, 48191, 8001, 26953, 59273, 22917, 56271, 28595, 9110, 49396, 31722,
-45917, 15914, 43896, 30404, 39861, 957, 45859, 60004, 3857, 41105, 12722,
-53008, 26334, 60310, 17063, 56135, 11875, 24832, 60931, 39281, 18398, 45550,
-25040, 10521, 46741, 17411, 43916, 8760, 24589, 46391, 5674, 40666, 12714,
-37624, 6584, 48944, 29819, 15794, 56141, 23203, 57865, 5645, 52225, 35031,
- 3194, 20440, 40156, 59268, 16682, 30927, 49804, 17575, 39073, 58364, 14457,
-61471, 19954, 52622, 12062, 50523, 8120, 39840, 12826, 64344, 28040, 56358,
-16927, 52968, 30412, 14852, 51299, 17592, 59623, 30536, 18133, 48647, 31858,
- 5305, 45732, 28637, 1189, 55793, 9803, 26670, 62407, 37841, 12643, 64954,
- 869, 31010, 57628, 15384, 29871, 39797, 16922, 52212, 22580, 61724, 27751,
-40316, 6778, 57816, 29184, 39260, 23874, 59276, 16751, 37901, 27943, 36480,
-25541, 50008, 11821, 33176, 49388, 10071, 54188, 8099, 63589, 24867, 58174,
- 592, 60826, 34329, 5153, 38250, 28849, 60419, 16630, 35533, 50467, 5824,
-40771, 60068, 2362, 56569, 39450, 18813, 42165, 31183, 8376, 32421, 60760,
-29181, 55923, 9540, 43512, 17211, 40073, 20481, 42896, 1882, 46161, 29842,
- 8124, 35034, 46904, 21443, 42492, 23553, 44238, 19620, 40242, 5777, 42228,
-33381, 2262, 32259, 46129, 7819, 63040, 12569, 57077, 38508, 17659, 48752,
-32913, 7781, 31707, 46244, 34556, 28531, 37522, 7413, 56803, 3549, 62248,
-28182, 34909, 52704, 21243, 3064, 43632, 12005, 48860, 18385, 57183, 28798,
- 2835, 48010, 19046, 41019, 33208, 2000, 46307, 10284, 27837, 51043, 12907,
-41616, 6896, 37764, 28077, 60673, 7818, 53779, 21950, 47678, 18007, 33745,
-49264, 1444, 27199, 44285, 8166, 25440, 59973, 36661, 12121, 62071, 16907,
-54532, 24405, 43921, 19264, 46936, 22334, 61172, 32266, 5083, 64971, 34934,
-22703, 45260, 15410, 37799, 53638, 19779, 65494, 34669, 10604, 50234, 6655,
-34488, 64637, 19626, 58227, 6936, 54563, 3091, 65371, 12850, 56024, 14410,
-34278, 51433, 16408, 44330, 76, 45568, 8516, 50528, 27984, 34385, 47206,
-22259, 6272, 51655, 13630, 41078, 57481, 21178, 54648, 13908, 63649, 38123,
-20234, 57836, 25691, 63136, 22136, 53507, 18314, 64547, 35964, 8701, 47936,
-14248, 41908, 12726, 24978, 60601, 48417, 11687, 33819, 51654, 7447, 35419,
-55548, 25456, 10932, 47043, 27164, 37391, 801, 40590, 28412, 62001, 22497,
-49503, 2887, 41555, 12141, 47698, 35808, 9359, 60490, 31925, 43523, 1790,
-52796, 39812, 7329, 54015, 40856, 11458, 52554, 39474, 20001, 42746, 52137,
-21475, 7143, 50054, 18671, 51812, 20911, 35904, 47118, 3234, 54308, 32322,
- 1307, 46778, 9059, 44925, 20470, 51728, 18263, 48346, 11405, 44712, 6642,
-31924, 56926, 9495, 51923, 215, 29580, 58083, 4946, 26764, 61944, 31890,
-47706, 16185, 50887, 19286, 48333, 28175, 11156, 49146, 14380, 44480, 8525,
-51857, 3165, 28551, 55874, 17601, 24776, 46863, 27725, 6483, 62645, 14294,
-52800, 23463, 48217, 20270, 6273, 35578, 51310, 22437, 64870, 4058, 54084,
-28464, 60329, 14790, 36433, 55569, 20491, 318, 51493, 13086, 55759, 3363,
-60448, 13968, 48643, 16571, 52503, 27359, 57491, 17426, 53344, 35164, 21333,
-32936, 3292, 43318, 14085, 56011, 26911, 59091, 10655, 54679, 255, 59757,
-23080, 43307, 32242, 14563, 46949, 5434, 24238, 65126, 33625, 16158, 61146,
-29964, 45364, 6630, 37737, 54111, 29695, 11516, 56338, 22077, 60397, 19705,
-51879, 35174, 3188, 32967, 64623, 22672, 56366, 2307, 36523, 32073, 12866,
-64957, 3399, 40367, 57882, 15425, 36999, 62502, 19698, 48676, 34086, 13999,
-50382, 32527, 3585, 47218, 33785, 1217, 29387, 53272, 6290, 42444, 16693,
-54034, 24465, 39730, 8578, 60247, 10039, 55316, 1194, 28372, 42477, 4591,
-46429, 21421, 39874, 18884, 47054, 3425, 43292, 13351, 36601, 28848, 48213,
-17292, 31923, 42677, 25144, 10124, 27628, 64267, 23175, 56806, 18964, 31566,
-39122, 2315, 63887, 7951, 57947, 33634, 27357, 63250, 2681, 31229, 39212,
- 4897, 48545, 28515, 2901, 51550, 10377, 43506, 785, 41315, 11596, 42970,
- 2453, 46366, 24780, 34292, 64040, 19422, 55462, 36091, 8076, 32516, 43306,
- 615, 28926, 61813, 22390, 4428, 44961, 32824, 6155, 54732, 12908, 63797,
-15129, 43516, 3668, 46212, 14216, 55027, 21487, 61183, 5974, 25645, 46481,
-22951, 6746, 25282, 47161, 12696, 24177, 64403, 16777, 26534, 59231, 23056,
-13023, 61838, 32337, 3698, 33918, 56361, 25088, 40230, 14055, 61470, 7838,
-32928, 60802, 11747, 49636, 24141, 34569, 56615, 15852, 63123, 12427, 36624,
- 4128, 64806, 19219, 54986, 40239, 14907, 46763, 18814, 63763, 39416, 16248,
-47347, 41153, 20503, 2982, 28147, 41028, 4378, 42664, 13796, 38948, 57232,
-20711, 62920, 18710, 56222, 34149, 23452, 46001, 9151, 38280, 52878, 12499,
-36783, 49085, 20988, 44893, 3681, 63755, 9632, 36640, 58382, 25011, 2246,
-41601, 15083, 48475, 35715, 9042, 33799, 49867, 4790, 44026, 32287, 61467,
-26504, 36444, 28886, 37497, 25704, 51069, 28326, 61295, 10383, 41149, 5178,
-43353, 23929, 1049, 59704, 42484, 23740, 58087, 31205, 1576, 46846, 19744,
-43614, 18067, 42102, 13692, 48644, 9232, 39686, 54793, 19449, 59117, 38591,
- 9343, 41102, 52106, 35811, 1482, 24479, 62059, 22766, 9809, 63187, 42561,
-32119, 8121, 30908, 44680, 6282, 61184, 25485, 53700, 8715, 45774, 13731,
-44468, 16824, 57309, 37505, 19667, 45833, 29657, 7414, 51980, 31992, 12493,
-54200, 4242, 63578, 30714, 7050, 55339, 26629, 41330, 14909, 60721, 40161,
-12009, 62740, 14195, 48020, 277, 43879, 13530, 52077, 30064, 46528, 17538,
-40047, 61720, 15957, 55807, 29582, 61142, 1996, 57747, 26879, 52064, 16403,
-39724, 62184, 12280, 22970, 56668, 37388, 4709, 49720, 55369, 37959, 6570,
-42529, 10412, 37111, 62509, 15560, 53873, 21169, 40870, 19071, 53408, 11003,
-34199, 43713, 15420, 62253, 36028, 18231, 55925, 33236, 16039, 47695, 31660,
-55677, 15381, 58846, 30365, 54998, 20815, 60071, 3959, 30617, 45187, 1750,
-47122, 29994, 13678, 63866, 24290, 46427, 14807, 40421, 57330, 19099, 64909,
-37982, 17331, 47657, 22827, 53168, 25458, 58183, 20149, 37951, 24935, 45411,
-16156, 33730, 58988, 3122, 55416, 33887, 63551, 16272, 56824, 36423, 3423,
-33978, 47348, 2108, 34876, 48595, 5902, 25446, 60345, 41694, 11019, 46501,
- 4641, 43394, 23433, 49048, 17418, 27204, 42232, 19595, 65253, 6931, 28344,
-43801, 2072, 32113, 58741, 23144, 32985, 50709, 1771, 24977, 61918, 5510,
-41672, 31769, 8233, 52905, 33743, 12236, 57295, 36620, 61019, 13367, 55023,
-32509, 65353, 6777, 32024, 51229, 1394, 40318, 31387, 13418, 59468, 20720,
-63078, 31965, 4873, 61403, 16774, 31868, 57826, 10971, 33408, 40290, 25797,
-53214, 13824, 33669, 61282, 18135, 57208, 10463, 25195, 63397, 16465, 26066,
-58618, 22941, 10841, 38943, 6289, 52862, 9850, 58865, 7839, 34392, 668,
-31066, 45215, 19253, 64970, 14592, 51724, 29750, 36234, 7166, 47904, 10131,
-37656, 60429, 12300, 39953, 4555, 64660, 24155, 55730, 26887, 63932, 20512,
- 2015, 42001, 10674, 30346, 49951, 25548, 7846, 20701, 53610, 41533, 15610,
-49283, 40245, 20966, 64, 59697, 27024, 53175, 17016, 41635, 20763, 46994,
-15900, 36883, 27485, 62210, 24133, 49470, 5448, 26848, 55789, 11267, 63037,
-25819, 38045, 2821, 45608, 21688, 40631, 17875, 53742, 34882, 20453, 64640,
- 8948, 52591, 32401, 17750, 49627, 26936, 37334, 28677, 63709, 19103, 49541,
-26875, 3558, 35805, 58575, 26165, 11298, 49475, 24892, 12601, 36318, 44774,
-31132, 9765, 32382, 59790, 25499, 406, 34753, 46967, 7542, 26675, 62628,
-21870, 1924, 31232, 59326, 20008, 52142, 28349, 5954, 46699, 24162, 43014,
-13937, 44587, 647, 48955, 19974, 56794, 29525, 8373, 24009, 45733, 11640,
-40254, 65128, 22731, 8104, 28071, 48610, 26465, 6920, 38936, 10278, 36382,
-50186, 11416, 33113, 56747, 16047, 58590, 36584, 20967, 54096, 10721, 52241,
-27278, 9643, 50900, 1326, 28789, 60412, 8439, 41094, 5104, 36780, 10599,
-50860, 6884, 63405, 63, 39523, 51873, 15039, 29959, 38832, 11709, 40998,
-31186, 8129, 49584, 27594, 60728, 14701, 31226, 63974, 17193, 36197, 53331,
- 9322, 23592, 58333, 19691, 63404, 12105, 56085, 2185, 34424, 50937, 5413,
-45638, 13103, 39066, 52628, 18585, 37641, 50018, 14788, 46258, 8863, 37400,
-28915, 45759, 17436, 30780, 55773, 20006, 58881, 24793, 1922, 50593, 25978,
- 9159, 22541, 43240, 27000, 10603, 24381, 46407, 18113, 36519, 27287, 47517,
- 5982, 49704, 35928, 459, 42650, 22267, 43977, 19797, 50205, 1486, 37999,
-22733, 51079, 16512, 47321, 1177, 30833, 45312, 7775, 46957, 34643, 30267,
-44512, 810, 50872, 40053, 12794, 41955, 54542, 19333, 63085, 17240, 45795,
-19957, 41644, 64438, 21003, 57869, 8561, 53895, 26717, 38287, 8158, 62269,
-13384, 55135, 20764, 65458, 17056, 28239, 51234, 21871, 45370, 31956, 8627,
-36701, 3958, 31364, 46294, 28878, 62639, 23039, 57318, 444, 56053, 31585,
-63799, 28297, 9517, 59467, 3874, 27689, 52243, 36814, 14456, 43024, 3496,
-62455, 10962, 57084, 1264, 32425, 59429, 4301, 39635, 9336, 34815, 60023,
-41761, 223, 39581, 18357, 53189, 15051, 60588, 26975, 57105, 10606, 43362,
- 438, 45805, 10052, 36446, 48864, 23277, 5772, 54272, 34609, 3004, 58710,
- 8318, 33151, 55662, 6872, 34600, 54326, 22431, 5586, 47766, 33852, 2636,
-35375, 50908, 7071, 22664, 64047, 20783, 45785, 5836, 42845, 30451, 52921,
-18410, 60389, 40005, 11354, 43098, 47753, 17213, 35134, 48269, 2977, 58162,
-32698, 12335, 61455, 4335, 57248, 30345, 64918, 14928, 40583, 4041, 52364,
-37680, 58058, 174, 59996, 25310, 5342, 52436, 33769, 62638, 4167, 34107,
-61792, 21903, 52802, 27453, 17340, 62191, 21519, 40571, 28943, 3732, 50092,
- 5994, 41053, 33269, 2910, 62878, 36039, 23713, 34250, 45952, 19781, 43991,
-26644, 57026, 21167, 60930, 27663, 43990, 17615, 49929, 30864, 9691, 32968,
-62877, 19915, 53523, 1025, 58612, 34447, 20972, 54799, 9155, 35742, 49876,
- 7479, 29626, 45310, 15882, 32718, 50925, 550, 38070, 30304, 45676, 16411,
-38460, 58549, 14882, 62492, 25217, 57100, 31503, 4387, 60553, 25210, 7564,
-55948, 27168, 60991, 13827, 58217, 7430, 54412, 36763, 3117, 48073, 14189,
-37321, 65021, 17606, 44363, 32116, 48791, 1133, 59821, 36985, 55858, 2773,
-61547, 9627, 57926, 14702, 64553, 10711, 26273, 51018, 29112, 11493, 58670,
-34035, 10049, 65121, 29298, 55254, 4699, 60461, 12411, 35823, 64371, 19232,
-54980, 23807, 3508, 52548, 20637, 57818, 31647, 6854, 65365, 33330, 3179,
-47522, 30350, 39915, 2066, 56155, 31784, 12745, 47077, 24172, 40183, 33034,
- 2736, 49306, 31828, 17988, 45844, 26145, 41292, 4102, 52872, 34364, 6358,
-61915, 14203, 48204, 28049, 51454, 18722, 58212, 9947, 52115, 6639, 37361,
-15753, 45441, 17067, 44052, 5226, 48481, 34842, 25859, 33790, 58187, 12589,
-24533, 49953, 18780, 47928, 34330, 24660, 38403, 28409, 49608, 12109, 54349,
-21186, 52036, 28796, 11743, 21793, 49839, 23020, 44848, 4950, 42386, 32435,
- 8735, 31185, 46888, 19189, 60244, 24683, 57382, 21687, 2531, 35663, 59576,
-25888, 10680, 46501, 22609, 44824, 18089, 38422, 24043, 62157, 14458, 37987,
-63884, 19323, 54829, 28749, 62928, 20025, 56758, 33225, 4351, 52785, 23884,
-55133, 15272, 63661, 8790, 44982, 2704, 31518, 53487, 19239, 10624, 63026,
- 7757, 25963, 41980, 14272, 50037, 37866, 20432, 49438, 27104, 11755, 36871,
-25811, 59580, 31940, 13191, 21288, 30415, 41895, 15632, 48251, 29510, 37428,
-16473, 40621, 20009, 46753, 9659, 44075, 1139, 58321, 34975, 6106, 51902,
- 9444, 65401, 34888, 23391, 60854, 17290, 56542, 31284, 14095, 44392, 6761,
-58929, 10342, 55861, 2803, 49979, 12586, 42788, 1854, 39858, 11763, 56258,
-36038, 18920, 54064, 41338, 5683, 44058, 14498, 48684, 22163, 43084, 4707,
-37878, 22485, 58013, 18136, 39807, 57237, 2691, 62871, 39632, 14683, 31670,
-54786, 7348, 24264, 50473, 26376, 8688, 32743, 39718, 260, 37022, 17794,
-47316, 10736, 45309, 29951, 39547, 523, 33585, 49445, 22691, 40019, 32485,
-11060, 62894, 23643, 42818, 6730, 27406, 53659, 4794, 62305, 19634, 52618,
-21711, 8397, 28732, 44431, 22767, 50310, 24146, 44021, 20211, 38117, 56734,
-16207, 63872, 32950, 3409, 53803, 25922, 42334, 13537, 20196, 44592, 34015,
-28052, 54021, 5566, 43501, 11501, 39341, 62276, 28603, 8315, 38005, 17318,
-46459, 28263, 15690, 60667, 23827, 10427, 50723, 25039, 36959, 5306, 53249,
-35504, 3786, 51471, 15915, 60608, 20352, 55617, 40119, 2151, 50491, 11846,
-44546, 15849, 48983, 25054, 35564, 53601, 2318, 60014, 11184, 32481, 42480,
-22383, 36487, 26332, 49452, 32312, 13315, 60281, 23821, 38323, 18218, 55321,
-13085, 47469, 7091, 39039, 54883, 4907, 63981, 27987, 9132, 55704, 5281,
-65211, 15007, 40562, 17840, 46492, 1691, 63809, 33572, 54718, 8451, 61486,
-13151, 55073, 17289, 48014, 24195, 65093, 4690, 51408, 35445, 6192, 28661,
-50026, 30025, 45041, 12788, 38369, 65285, 16377, 56279, 13126, 53059, 2181,
-47423, 9724, 43216, 31540, 12366, 42089, 7844, 44107, 13683, 41076, 16197,
-48240, 38086, 17473, 41118, 11439, 47614, 23456, 38030, 20589, 51940, 16832,
-35249, 57713, 44462, 21022, 33319, 55535, 18145, 65273, 26671, 1245, 45433,
- 8748, 40107, 54219, 6558, 45346, 9734, 49714, 36249, 64454, 6978, 54971,
-31888, 9201, 61148, 1953, 54736, 11197, 59345, 24850, 51312, 16252, 40639,
-14773, 47367, 31120, 19713, 44513, 15369, 48324, 9076, 29707, 44113, 11543,
-37864, 53232, 18401, 49258, 16086, 40003, 28079, 37210, 18376, 64622, 23833,
-52126, 22298, 46014, 28392, 8222, 65090, 2146, 26687, 56576, 22607, 61666,
-29238, 9480, 65360, 19003, 48197, 31748, 193, 53623, 11767, 26450, 51341,
-23220, 6315, 59401, 41657, 18429, 36711, 56751, 3455, 64111, 30608, 54930,
-21033, 53244, 11398, 61875, 26909, 55256, 15216, 64502, 19123, 53349, 11892,
-38417, 3711, 65514, 16087, 47022, 29210, 13041, 52552, 30976, 45438, 12648,
-41124, 33068, 7327, 30937, 46145, 32340, 50786, 16273, 39174, 6547, 41499,
- 2230, 53426, 31384, 4070, 41997, 8066, 47989, 38843, 14959, 47404, 6017,
-39354, 61704, 24600, 7527, 48130, 14464, 38486, 22954, 58935, 29709, 9903,
-35609, 60152, 22632, 55733, 2308, 51919, 35912, 8652, 34720, 57021, 18776,
-63836, 16944, 59565, 27468, 14521, 62471, 22947, 37140, 6889, 46924, 9596,
-30371, 59151, 19114, 56854, 21546, 62577, 585, 42699, 9320, 29895, 43980,
-21255, 38568, 56483, 863, 61729, 11582, 55391, 4350, 64451, 39112, 3394,
-50903, 10944, 62844, 2279, 44582, 19494, 65522, 31360, 17367, 43664, 11779,
-37503, 51778, 21629, 45482, 18649, 43642, 6536, 61338, 34437, 23641, 43396,
- 5799, 26083, 46172, 34119, 28300, 35319, 62275, 1171, 52903, 13826, 39914,
-29949, 15210, 63205, 39496, 10992, 61844, 17017, 56571, 855, 32160, 41741,
- 4715, 36645, 25513, 59777, 32347, 20810, 52281, 918, 56425, 18197, 60156,
-22868, 53118, 38, 60848, 9028, 27559, 57535, 1570, 61593, 28983, 4193,
-58977, 33409, 9653, 64995, 6014, 27362, 563, 37642, 51191, 4849, 44920,
- 9095, 35718, 52700, 28628, 60457, 17244, 32863, 62159, 18937, 56139, 23159,
- 2216, 33702, 46777, 19549, 38726, 50176, 18844, 42486, 21910, 45232, 34782,
- 2840, 36167, 65017, 23338, 54640, 4771, 61393, 32926, 421, 54269, 25198,
-36025, 52441, 1417, 64429, 25698, 4917, 61187, 32706, 25067, 62573, 5507,
-52430, 33009, 6619, 38227, 11155, 62263, 4573, 58509, 34093, 24697, 35456,
-47397, 16934, 39808, 3919, 45667, 35017, 26221, 52044, 12098, 62589, 40663,
-19928, 46553, 33902, 9889, 35070, 49179, 25692, 4144, 65489, 11520, 29436,
-44460, 13761, 46905, 5833, 42770, 15523, 44394, 32127, 2673, 33128, 41269,
- 4766, 42748, 22326, 61542, 18307, 43002, 24655, 51682, 1036, 60067, 38072,
- 4155, 61685, 15936, 59190, 21092, 55329, 28228, 64346, 14007, 56592, 4553,
-63389, 12886, 55652, 17774, 62203, 35340, 15281, 60646, 23623, 52201, 12863,
-27486, 56456, 21818, 59363, 30678, 236, 35094, 57524, 22398, 62903, 17942,
-52019, 1712, 44776, 25009, 51050, 4357, 45407, 12258, 40046, 18248, 58219,
-27219, 49056, 979, 43489, 7561, 46615, 10929, 38311, 48798, 29200, 9993,
-56586, 43224, 24431, 64056, 15470, 37325, 32657, 6673, 38631, 33379, 27771,
-58483, 22594, 55945, 14671, 63319, 6177, 19910, 40695, 29638, 47296, 17441,
-41825, 12254, 30759, 57722, 19792, 42679, 21858, 41259, 15302, 51189, 35998,
- 1182, 60660, 26568, 56721, 31984, 1905, 41481, 11213, 58377, 30200, 50745,
-27271, 12687, 55430, 15409, 38972, 59284, 20067, 2602, 51626, 7709, 25495,
-42992, 19708, 36483, 58817, 11281, 53374, 31991, 20964, 52421, 5163, 42914,
-24409, 47058, 19641, 52038, 28290, 63092, 10203, 40644, 6433, 58042, 24784,
-39493, 27577, 46960, 4040, 37953, 11631, 42751, 24440, 36299, 50643, 13075,
-43222, 20166, 37145, 54153, 14724, 49182, 23899, 40578, 30308, 49989, 61411,
-25223, 14816, 60083, 32491, 23211, 58647, 21368, 13450, 34170, 51523, 2001,
-24239, 42941, 5055, 41279, 60365, 25638, 10374, 62446, 3536, 26945, 56345,
-13516, 64149, 6527, 28279, 57455, 29508, 7357, 46160, 12747, 42743, 16792,
-38975, 59532, 28402, 7076, 60273, 21676, 41375, 19066, 47136, 28694, 41210,
- 253, 51138, 12881, 47557, 15616, 59984, 26127, 54844, 33732, 19830, 47869,
-18166, 43304, 13719, 52644, 7214, 60344, 11487, 54383, 13548, 57615, 2333,
-30066, 45148, 6966, 24323, 58868, 4977, 64877, 21715, 44812, 16261, 54248,
-29979, 43378, 22141, 60713, 17923, 41024, 22379, 59501, 18826, 63800, 7271,
-54261, 23684, 58967, 17146, 51889, 13319, 47991, 6127, 31721, 57326, 8500,
-28676, 44245, 16918, 32246, 41581, 23394, 49649, 479, 38779, 9745, 50087,
- 2476, 40197, 19302, 37688, 26922, 42522, 21847, 46956, 28453, 5538, 49372,
-21008, 44921, 18566, 58344, 36528, 2056, 43199, 12186, 49113, 27638, 46653,
-10235, 40815, 2942, 42736, 12879, 48855, 20233, 64745, 13454, 41966, 21685,
-62626, 24266, 44375, 5045, 42078, 14370, 53044, 26147, 38894, 30250, 51973,
-20838, 1344, 54097, 34818, 19473, 32538, 32, 35143, 52062, 5071, 63166,
-27085, 53490, 10573, 49640, 15260, 40428, 4852, 36879, 27746, 50683, 33518,
-52586, 7992, 25608, 59572, 22195, 54523, 18699, 35289, 47569, 7563, 53506,
-27554, 58961, 8935, 21616, 48966, 34982, 6435, 39434, 14042, 61801, 22447,
-53087, 34139, 408, 20323, 56833, 41051, 3974, 50515, 31127, 9637, 40906,
-64769, 22360, 37924, 57615, 12231, 48680, 28987, 3120, 33950, 41887, 1622,
-47446, 13093, 37814, 18678, 51187, 11847, 61036, 7501, 39497, 21830, 50412,
-15987, 48229, 34976, 12758, 65127, 8465, 30377, 57421, 25628, 64339, 20412,
-55582, 6253, 29268, 64884, 16773, 56021, 7397, 30935, 42094, 1216, 60710,
-13851, 56162, 20372, 11789, 46838, 29583, 38418, 12735, 46506, 3998, 40805,
-64013, 5545, 38804, 29893, 48048, 15929, 51897, 31373, 16902, 53981, 39799,
-16345, 51148, 36817, 7652, 46068, 35696, 23784, 53502, 10111, 49393, 22389,
-34276, 62969, 21037, 52648, 11783, 22285, 49211, 33706, 14942, 50693, 12619,
-55156, 7695, 59652, 21284, 56699, 33682, 23125, 38252, 30349, 9442, 48906,
- 682, 44491, 31248, 9157, 54492, 3237, 61432, 23263, 37464, 28306, 46606,
-21161, 42297, 19482, 37550, 61131, 17129, 36248, 51037, 15199, 36889, 29176,
-53223, 1451, 61759, 8414, 39373, 10251, 52683, 1074, 48981, 9433, 50179,
- 1843, 36973, 28786, 40588, 20534, 47712, 9810, 44757, 30891, 59933, 26881,
-34868, 50170, 14587, 35520, 53590, 21736, 56176, 6405, 57821, 10820, 30331,
-43920, 18859, 45892, 17186, 42930, 23523, 60311, 12106, 53805, 126, 60009,
- 8997, 33439, 43144, 11754, 54668, 1046, 37860, 7099, 30832, 62725, 19504,
-53514, 6700, 63503, 18898, 53058, 20643, 56057, 31854, 61099, 30142, 7212,
-34251, 48022, 16142, 49677, 6408, 53360, 15027, 64338, 21892, 59303, 34094,
-11660, 61909, 3971, 23494, 61035, 40729, 13578, 64751, 5845, 57700, 45001,
-28008, 12903, 47868, 16888, 42374, 19872, 60747, 3671, 31308, 64221, 25431,
-53234, 11920, 41964, 13399, 23109, 65305, 43290, 2155, 46369, 8353, 51208,
- 985, 24939, 60861, 30751, 4050, 37420, 29309, 57368, 24783, 12172, 50354,
-23307, 45856, 17087, 48373, 7375, 24876, 63244, 36278, 7890, 24678, 64436,
-35748, 17685, 57847, 32862, 14048, 46927, 16921, 32712, 51153, 6596, 63743,
-24766, 55304, 16141, 59769, 19337, 56019, 26241, 64284, 3254, 31555, 36893,
-26116, 56835, 1531, 34057, 60501, 26473, 3415, 49239, 16498, 54056, 37124,
-14663, 50253, 5123, 44450, 14003, 49009, 37668, 3197, 45632, 34337, 26533,
-50347, 16023, 47277, 25768, 37651, 4524, 43684, 54321, 7030, 63711, 2238,
-55113, 28932, 56647, 10913, 32427, 53716, 12256, 59314, 8091, 63516, 35276,
-12729, 49104, 5783, 30446, 58754, 24654, 12607, 59819, 31085, 545, 48395,
-15170, 41456, 17790, 60166, 1510, 30484, 41122, 3375, 57756, 35502, 5008,
-63491, 40288, 2743, 44954, 20718, 31536, 36677, 12150, 39021, 9209, 65184,
- 2258, 57755, 42146, 14173, 63685, 15958, 56341, 36726, 20805, 45708, 30554,
-10175, 49923, 512, 33065, 64513, 5251, 50619, 24689, 8648, 52848, 27763,
- 3031, 42282, 56544, 12867, 19458, 43732, 35951, 22681, 48282, 26774, 33492,
-38386, 24620, 58124, 34969, 26189, 52023, 12939, 57868, 3677, 30184, 62803,
-24965, 1279, 37421, 10546, 64094, 2537, 30514, 59456, 4652, 39311, 12402,
-45679, 20192, 36648, 64670, 7868, 56464, 26443, 61481, 10965, 47720, 6900,
-42177, 16673, 48645, 34692, 24013, 52695, 17093, 64997, 34542, 27801, 61341,
-24522, 51377, 15775, 38190, 24322, 41288, 13950, 37220, 5237, 45324, 27094,
- 8529, 21829, 41590, 56864, 27690, 428, 57607, 36148, 28206, 32738, 37665,
- 9576, 48202, 3473, 29071, 45450, 19650, 55075, 34985, 9091, 30740, 46003,
-21552, 42230, 26397, 9416, 61557, 42867, 23134, 54788, 1669, 47089, 14153,
-35774, 45132, 11026, 46628, 18058, 61410, 2841, 58785, 39106, 5341, 31645,
-36892, 16393, 63050, 28613, 33942, 44732, 15994, 40499, 62331, 13525, 45970,
- 5731, 33427, 55222, 19789, 63604, 4211, 58631, 27337, 35329, 44067, 16065,
-45719, 29142, 48775, 21494, 8983, 47361, 841, 26685, 54535, 6099, 59498,
- 3700, 28224, 42129, 13249, 46842, 7898, 39008, 25479, 45434, 6736, 43451,
-13867, 40172, 59121, 15282, 44994, 18261, 46512, 29095, 8137, 36316, 62271,
-21569, 43756, 33087, 2276, 46043, 19393, 39663, 27465, 61871, 23716, 17395,
-59682, 24679, 9876, 58645, 5207, 63084, 29547, 8633, 50711, 32174, 17522,
-22891, 41931, 19673, 49361, 34641, 14208, 24109, 50394, 16169, 27232, 46438,
-22051, 40748, 26010, 820, 57374, 33909, 21299, 45600, 1396, 43841, 29308,
-38640, 15757, 56249, 33008, 61320, 4476, 52465, 35627, 25710, 56082, 10482,
-43984, 18446, 47739, 31206, 17217, 29999, 57566, 15514, 63215, 43184, 3593,
-49907, 24384, 46664, 19002, 44248, 16760, 31288, 37176, 23524, 46799, 5791,
-25788, 62942, 13060, 38303, 55815, 18799, 59545, 14972, 38461, 30817, 15779,
-59239, 42821, 14196, 39505, 60503, 30424, 8097, 35026, 49679, 25679, 11134,
-57102, 3140, 63103, 12887, 59795, 7179, 32551, 11013, 61620, 6353, 45912,
-23376, 37871, 50637, 8081, 39851, 55017, 21171, 52736, 19488, 40164, 48604,
-15845, 43705, 19353, 63650, 25994, 54590, 3286, 24768, 47012, 29187, 3912,
-33478, 52112, 25749, 57487, 20753, 63921, 30225, 10223, 58460, 2940, 44426,
-25708, 7759, 47539, 14253, 42603, 10298, 45742, 4408, 60284, 21701, 54421,
-28315, 58756, 17046, 65505, 33097, 55160, 4127, 18318, 51335, 39701, 21038,
-11022, 59957, 1527, 56029, 26248, 39313, 20879, 54534, 7083, 48585, 15255,
-44250, 25786, 58349, 4477, 50560, 14226, 52880, 38010, 20236, 4222, 39911,
-12142, 59785, 33100, 25600, 52667, 17483, 57606, 1248, 39759, 26829, 48461,
-31107, 17009, 55213, 15014, 57990, 26693, 39086, 13852, 49296, 6503, 52327,
-10451, 26481, 49665, 18064, 64401, 40533, 2693, 43531, 13326, 41736, 30055,
- 9564, 56137, 3284, 59776, 10495, 52008, 2349, 40067, 60478, 28600, 53024,
-41645, 11704, 44365, 21707, 38597, 60907, 20198, 55871, 18152, 31685, 62692,
- 4095, 29302, 61232, 21643, 54413, 27826, 9452, 52943, 4398, 64737, 10781,
-52601, 20646, 44715, 14418, 51168, 5921, 24592, 61368, 22532, 59178, 11237,
-52317, 1781, 32622, 47722, 12201, 53652, 39170, 21479, 42622, 19554, 36717,
-56652, 13285, 64420, 39068, 57991, 16117, 45508, 30723, 8258, 59054, 41716,
- 338, 61689, 38059, 3475, 56434, 14349, 52451, 29642, 42029, 8820, 65483,
-23733, 55176, 10861, 63752, 4929, 47128, 26899, 8218, 22806, 43129, 28061,
-12178, 48145, 16024, 50151, 29460, 64680, 10989, 41613, 55701, 8411, 38456,
-32324, 6540, 26142, 53831, 17020, 61569, 5265, 55624, 32399, 53392, 4274,
-58833, 7927, 29099, 59864, 40882, 1565, 51038, 27738, 6119, 44498, 25437,
-49183, 7730, 53458, 40591, 1352, 32511, 64167, 6538, 21957, 53993, 20472,
-63633, 4336, 59171, 33961, 27709, 50838, 17420, 45451, 19376, 40935, 55767,
-22788, 42047, 31716, 17224, 65162, 12301, 22286, 56620, 28659, 12606, 42552,
- 5601, 45891, 24882, 9290, 62560, 26932, 50547, 1819, 41476, 15095, 39248,
-52452, 11937, 36242, 58039, 21052, 36660, 1613, 31898, 40594, 4186, 45968,
-27527, 35882, 49901, 13722, 40211, 57287, 19600, 53982, 3483, 64682, 27316,
-49676, 16335, 42830, 2566, 44059, 11305, 39981, 949, 50648, 19681, 35986,
-59756, 9411, 26329, 63984, 34993, 23451, 45944, 17294, 50563, 12818, 63253,
-35977, 22971, 33094, 65154, 2322, 52619, 12807, 39268, 28328, 59371, 2532,
-23808, 49815, 30148, 53191, 20858, 36536, 8455, 65066, 5478, 38547, 23588,
-32983, 49878, 7186, 36737, 9979, 50259, 24966, 45538, 9455, 48859, 3707,
-56750, 22396, 64872, 23620, 35207, 56381, 304, 38665, 31150, 16644, 59163,
-25707, 54392, 18924, 53388, 32714, 15350, 47732, 35911, 23040, 32220, 62326,
-18928, 33220, 10751, 20700, 33953, 63430, 15576, 53588, 26085, 10157, 45977,
- 587, 37461, 52136, 14672, 33746, 50342, 10471, 38895, 158, 34790, 48771,
-20368, 40804, 32735, 23696, 35727, 58809, 478, 55585, 28993, 35641, 46680,
-10330, 40847, 6926, 43507, 21756, 36778, 55018, 7693, 43996, 30894, 761,
-48408, 10692, 53076, 2796, 23583, 44322, 27466, 1657, 11041, 50945, 3764,
-61044, 27349, 36346, 17543, 48203, 33212, 18511, 44547, 20654, 42600, 7155,
-60671, 19273, 50972, 29090, 14307, 34872, 48896, 20545, 52220, 19226, 62724,
-31758, 54144, 17165, 64402, 38496, 6204, 58958, 26883, 5365, 33314, 52254,
- 1915, 28797, 46580, 18957, 51257, 36256, 58449, 13713, 39916, 21743, 42519,
-27795, 8345, 24731, 42859, 14946, 50632, 38454, 16628, 32811, 56973, 15209,
-41369, 63828, 35563, 4328, 29237, 62680, 12621, 33992, 55513, 17507, 25976,
-47389, 34183, 790, 41158, 24048, 44968, 14030, 47272, 6806, 37912, 31483,
- 5274, 53282, 28805, 2471, 48092, 13971, 53658, 39550, 641, 44988, 35262,
- 5141, 33863, 63506, 22483, 58734, 15109, 55800, 31617, 36389, 7124, 30914,
-55533, 18447, 60791, 8635, 30249, 62465, 16091, 41474, 9000, 63182, 28337,
-53231, 15166, 55230, 13109, 60997, 5859, 22330, 62543, 30592, 1776, 37387,
-28703, 33110, 39441, 12405, 34599, 55584, 10670, 64033, 18579, 51443, 23075,
-44742, 30629, 9814, 43428, 22476, 33957, 47239, 4642, 53960, 9039, 30001,
-62368, 5343, 41921, 31382, 192, 57703, 10050, 40222, 27941, 37077, 20169,
-63567, 8501, 36580, 31046, 62915, 10441, 58080, 7363, 31357, 49355, 22509,
-41852, 28367, 51507, 8828, 62817, 13664, 54722, 22896, 63742, 33282, 120,
-35617, 62034, 20854, 42465, 32023, 9826, 36590, 3162, 44018, 20289, 32930,
-60111, 8089, 51155, 10694, 37019, 6992, 42997, 768, 39765, 65060, 26368,
- 5617, 57564, 12562, 41455, 6737, 55573, 36097, 58684, 5200, 25179, 39871,
- 1795, 48135, 34559, 30551, 65475, 22132, 8876, 41177, 57008, 16947, 31293,
-57765, 23761, 63497, 7268, 30338, 58278, 13734, 55008, 5367, 30475, 42925,
-23344, 12057, 64217, 17605, 56564, 30380, 54509, 17880, 63486, 12878, 26079,
-60651, 35061, 14571, 63924, 32933, 59185, 16883, 38224, 60455, 6663, 54848,
-36360, 62063, 25311, 39975, 13072, 52172, 5767, 64333, 25911, 7769, 58271,
-10456, 64760, 32704, 47825, 13724, 38429, 3343, 40447, 58317, 6045, 30354,
-43070, 13303, 40544, 3664, 42229, 10704, 45984, 2153, 24726, 44779, 19373,
-39729, 53871, 13344, 37797, 24317, 62684, 12289, 59166, 721, 21079, 30778,
-47471, 1704, 52175, 10916, 64074, 36602, 56375, 20219, 63119, 33609, 2608,
-53721, 10685, 24284, 47954, 22787, 9443, 20084, 58318, 41058, 18101, 44811,
-23922, 9233, 35984, 51668, 11394, 58600, 27691, 51425, 9067, 29556, 55168,
-21789, 64609, 18657, 57506, 34974, 12250, 64249, 20476, 33533, 62592, 4872,
-29311, 57124, 19134, 60913, 24117, 43651, 2229, 50943, 8739, 32912, 39237,
- 93, 57752, 21200, 44452, 9959, 46814, 34797, 23425, 43753, 800, 49162,
-22869, 50314, 13996, 42464, 6168, 44471, 20247, 38882, 23021, 47369, 33024,
- 8601, 51095, 23703, 60437, 11147, 55273, 18301, 59144, 675, 31163, 37040,
-26110, 39042, 7503, 61992, 13655, 47892, 26723, 62758, 2179, 52901, 15561,
-42239, 19842, 49956, 37423, 15357, 32506, 52725, 17815, 43579, 24953, 49827,
-14337, 59703, 6629, 51396, 23347, 48201, 15219, 43295, 16492, 45280, 24748,
-35002, 63364, 3464, 55150, 13252, 58726, 16676, 31701, 42466, 21215, 38235,
- 4399, 41961, 19550, 59347, 28111, 5838, 52776, 13158, 60368, 29006, 54067,
-25954, 58773, 8759, 51983, 22366, 47081, 20061, 44570, 27848, 62676, 22468,
-57229, 23985, 8559, 44696, 33071, 19301, 52647, 23749, 50733, 26401, 3033,
-42068, 29918, 55183, 19553, 61538, 16819, 56637, 7118, 27547, 43941, 58659,
-24888, 2239, 35678, 47138, 5670, 49733, 16357, 33239, 44230, 1926, 46912,
-36261, 19718, 63288, 9250, 51997, 33022, 3810, 49982, 27419, 1021, 35190,
-47353, 4785, 40083, 50996, 3495, 22432, 54233, 27448, 8207, 24147, 45971,
-29857, 11942, 40535, 31668, 21128, 5318, 46416, 19101, 42975, 21013, 44974,
-14913, 53883, 35538, 19918, 46897, 24333, 1758, 27713, 53123, 23519, 62819,
-11697, 36281, 26934, 61579, 2416, 57505, 24596, 55412, 16226, 59309, 30024,
-34370, 57122, 14543, 62278, 96, 23530, 60977, 16905, 49738, 6865, 42087,
-22744, 40104, 64963, 8921, 34465, 60544, 22790, 45369, 15746, 30585, 1082,
-45981, 9759, 25271, 48469, 21535, 65473, 35608, 3572, 59070, 31430, 53112,
-33801, 10349, 56331, 2582, 61567, 29497, 57254, 3697, 40369, 18442, 46436,
-15295, 62067, 39080, 1963, 43242, 10688, 41596, 34, 46040, 26042, 36207,
-49525, 9705, 38163, 21442, 47598, 14432, 49521, 9061, 51583, 15988, 47053,
-34949, 27625, 60687, 17480, 43397, 12804, 51245, 23783, 59638, 31877, 4908,
-53675, 16957, 58730, 35619, 5665, 34231, 55812, 18949, 58288, 24828, 65422,
- 923, 54339, 16259, 57921, 38678, 15103, 45109, 16806, 42928, 4635, 47826,
-24078, 52041, 19589, 59962, 4896, 56552, 21155, 34343, 52627, 5546, 54544,
-14362, 40466, 28910, 61245, 7744, 56273, 27114, 2706, 43355, 57958, 8024,
-28769, 61446, 6154, 29554, 54247, 20861, 45040, 31705, 634, 32533, 53973,
- 6077, 56032, 28854, 1140, 47467, 13711, 43813, 27198, 39868, 367, 35066,
-55763, 3310, 60376, 27697, 56872, 16164, 52030, 12461, 32372, 44697, 22844,
-40808, 1429, 43591, 17460, 46746, 14641, 31738, 41496, 4535, 29699, 63314,
- 1725, 52556, 12436, 47540, 14329, 36425, 54917, 17372, 60271, 39205, 1104,
-43253, 11456, 38327, 64191, 13794, 46917, 8677, 43806, 13012, 42342, 21056,
-50551, 40179, 4504, 19386, 51579, 29161, 64496, 15694, 43143, 12374, 37749,
-56623, 17946, 62594, 26277, 9901, 50222, 28100, 40570, 16298, 59384, 38712,
-15242, 41847, 62848, 13914, 23488, 56820, 28893, 16705, 37368, 49058, 5748,
-44781, 31954, 51502, 4142, 65109, 26037, 52682, 13926, 43662, 56124, 12243,
-63217, 1127, 57686, 29113, 37983, 2648, 50727, 30101, 5132, 54663, 31575,
-61330, 5714, 41796, 20241, 54394, 18607, 51285, 16399, 41450, 32114, 9036,
-33069, 50163, 23288, 6908, 51398, 9807, 49568, 28580, 33700, 43633, 8056,
-45543, 27716, 56744, 17954, 54834, 13044, 33291, 52881, 25792, 11560, 41154,
- 4066, 51350, 35931, 60298, 18257, 39129, 55126, 12146, 43829, 6943, 50352,
-30076, 13608, 47356, 1153, 21239, 48515, 24907, 50848, 16165, 45791, 19848,
-43410, 23262, 63267, 5872, 37285, 32376, 17192, 59886, 31123, 54093, 20773,
-61386, 15652, 52011, 5706, 31214, 56498, 24541, 59261, 8358, 36897, 25889,
-40212, 27852, 58136, 9940, 18617, 49238, 4502, 53172, 22736, 65096, 35133,
- 3567, 39490, 14062, 64036, 28859, 46218, 10433, 25248, 64859, 27092, 2338,
-46538, 31506, 8357, 32659, 43698, 12367, 42286, 3527, 28480, 64202, 6607,
-53354, 25507, 63222, 13377, 40709, 7893, 45537, 14238, 50827, 27797, 46999,
- 3174, 31622, 38908, 22802, 33317, 49119, 12115, 24618, 45582, 18235, 39690,
-60411, 29169, 12244, 35930, 48516, 14974, 35107, 46517, 2938, 38924, 13587,
-62259, 27606, 57440, 21078, 46005, 19207, 38437, 60238, 18323, 56466, 35664,
- 9766, 61205, 24853, 48507, 15030, 30731, 43856, 11211, 34450, 46718, 7472,
-39982, 57166, 15621, 63446, 18015, 54996, 12001, 63888, 5562, 37416, 61381,
-17140, 54810, 38114, 18407, 42108, 21253, 39045, 4866, 61573, 29256, 2540,
-50601, 10243, 30590, 63115, 18219, 56374, 21066, 31213, 51697, 23486, 59913,
-28877, 52731, 3543, 62792, 11245, 23828, 60223, 32969, 9862, 42489, 7476,
-54253, 28568, 61523, 29851, 4014, 51104, 11437, 34967, 59911, 22716, 2667,
-57104, 33893, 6586, 25868, 48877, 8463, 25077, 51735, 33512, 9767, 42715,
-65414, 12428, 28210, 62233, 17847, 57327, 20629, 43344, 15639, 46586, 163,
-59600, 17530, 26029, 37634, 30626, 47399, 24149, 8880, 59822, 31573, 14036,
-62347, 39462, 15511, 43073, 17599, 49874, 12710, 47544, 247, 42240, 7287,
-46266, 21209, 64833, 26394, 44086, 978, 37241, 63368, 21075, 43350, 35198,
- 6501, 53305, 13820, 57968, 35667, 2939, 34328, 44629, 4623, 47711, 24034,
- 3262, 36092, 56252, 20007, 61787, 24262, 7578, 28223, 52469, 4869, 31521,
-60924, 26601, 40199, 17049, 61919, 37074, 25170, 34844, 64375, 28616, 7393,
-33550, 40389, 6309, 65231, 12929, 53353, 14737, 30969, 56376, 3994, 49214,
-23511, 6303, 27883, 47500, 8830, 40936, 23335, 60633, 16633, 40852, 1496,
-42395, 28525, 53495, 2798, 62273, 6025, 37769, 30167, 64449, 22023, 40633,
-14744, 45530, 6758, 29297, 47905, 19725, 49917, 35967, 7681, 21879, 56599,
-41858, 12976, 49015, 39207, 16274, 62098, 28310, 52372, 18753, 60592, 26390,
-52904, 36603, 20260, 42044, 31658, 9324, 32692, 44235, 21763, 62094, 33994,
-28777, 40095, 12574, 35402, 60769, 16701, 58138, 8241, 63713, 3799, 57056,
-38317, 1108, 65246, 9924, 21744, 51933, 24165, 64406, 1867, 30756, 56618,
-19388, 63934, 23957, 48840, 7754, 42799, 10672, 40985, 3605, 65382, 9208,
-30063, 44610, 5180, 22176, 50275, 20073, 45002, 7619, 64554, 37533, 18180,
-50682, 1764, 26028, 64817, 23917, 2972, 51068, 8203, 47913, 27871, 36403,
-20647, 51315, 27172, 2203, 43455, 25006, 6382, 56559, 13310, 60786, 25699,
-43881, 19502, 49395, 37632, 21398, 45585, 16456, 34874, 47960, 4305, 44980,
- 7886, 36813, 20, 39047, 6885, 36205, 27187, 37202, 30950, 49416, 14289,
-38446, 61885, 19942, 47973, 34855, 1335, 21320, 52694, 25237, 40902, 20893,
-45801, 6159, 38262, 48678, 12571, 45462, 29973, 62013, 20426, 57413, 32617,
- 3059, 41312, 58960, 22631, 355, 52547, 39363, 13741, 42315, 1961, 38602,
-11223, 58097, 35110, 22825, 32649, 49123, 3170, 54196, 9822, 19966, 55833,
-42029, 15840, 49057, 41220, 11482, 33640, 56110, 9321, 58921, 35923, 26357,
-34824, 60242, 21929, 57909, 11411, 52842, 5268, 48741, 13728, 60819, 28322,
-11111, 47454, 2806, 25677, 65324, 20263, 48616, 26642, 15160, 61935, 11622,
-31117, 63794, 16016, 57352, 29673, 49954, 6200, 42888, 14625, 48235, 31559,
-44440, 16043, 47245, 11727, 36774, 152, 58109, 32118, 5091, 54478, 8998,
-52196, 13003, 41046, 60676, 15113, 52999, 26564, 32845, 49664, 1787, 34642,
-44863, 16421, 42651, 12659, 52259, 36334, 62967, 14374, 32319, 56156, 3594,
-29341, 46682, 13214, 51653, 17760, 64732, 15191, 44400, 22774, 55286, 13421,
-50460, 1122, 44224, 10605, 61602, 34480, 26321, 56378, 11253, 61324, 1244,
-25573, 52173, 33744, 2968, 32301, 52949, 8005, 33244, 50807, 4382, 41792,
-10122, 37296, 5404, 44716, 17850, 9123, 56294, 365, 59724, 27703, 56703,
- 2358, 54185, 17965, 5995, 57214, 1578, 64930, 24434, 9207, 48819, 29414,
-42141, 15997, 36691, 32235, 13797, 51036, 29792, 35224, 46635, 4112, 44903,
-16500, 53631, 40008, 7258, 43120, 11346, 41187, 17689, 52377, 24877, 60908,
-16184, 48659, 34429, 25827, 52483, 14495, 33373, 63802, 31216, 2726, 32321,
-51365, 23564, 4758, 57775, 21955, 61328, 35497, 13978, 49626, 36022, 27025,
-32963, 38301, 4687, 57324, 32131, 9020, 39451, 56014, 11769, 65279, 35004,
-27160, 46583, 3411, 50301, 9716, 56052, 7614, 28277, 64578, 5136, 58182,
- 8916, 31907, 59631, 14710, 62047, 18666, 54744, 22393, 64880, 14058, 54229,
- 9504, 58166, 1079, 46751, 25982, 3337, 53696, 11874, 23568, 58074, 40411,
-10177, 48479, 7718, 60431, 28982, 55939, 14235, 32341, 65304, 18872, 53567,
- 1411, 44706, 13197, 37374, 60772, 20796, 8112, 34914, 46630, 25389, 7145,
-56031, 19807, 61214, 23166, 52332, 29686, 7496, 62434, 10309, 39846, 63992,
-28960, 50069, 35879, 4092, 33434, 65172, 6130, 23691, 52930, 919, 26850,
-44794, 22811, 2969, 64186, 9738, 29278, 45513, 15307, 37430, 27426, 39262,
-19445, 53880, 21674, 39909, 55725, 18296, 58444, 39312, 12081, 42388, 4124,
-38116, 50689, 22993, 46323, 20052, 35943, 43286, 9906, 45641, 14174, 63520,
-27620, 54644, 10254, 57871, 3012, 64856, 20814, 53190, 18612, 44993, 14721,
-48715, 36309, 18443, 42735, 19822, 46795, 4046, 36347, 31179, 297, 60055,
-10533, 37148, 27857, 54706, 7554, 60892, 25373, 57950, 31621, 21156, 2858,
-38740, 50359, 17305, 37261, 54498, 7707, 63247, 26466, 36504, 6565, 48737,
-31391, 9478, 32487, 42314, 19534, 59524, 29209, 54092, 21048, 2430, 50292,
-15876, 42233, 22198, 40415, 58466, 13579, 43521, 62984, 14729, 22454, 61452,
-24539, 12545, 56106, 19790, 59560, 24186, 54622, 22457, 62314, 33304, 21802,
-46632, 19179, 42488, 16051, 46246, 30128, 35514, 49968, 23172, 42523, 18393,
-49579, 40803, 21529, 59, 55266, 26246, 53442, 19605, 59510, 25847, 5785,
-55515, 17414, 59050, 10991, 38101, 31963, 18743, 60709, 25928, 54601, 5054,
-60092, 34714, 1791, 28976, 53589, 23137, 11438, 49891, 2097, 58947, 40323,
- 8231, 54306, 26520, 59587, 10318, 33781, 47150, 12136, 41754, 8444, 45299,
-30815, 6345, 55943, 12701, 60948, 22099, 50240, 18961, 41313, 62456, 15114,
-31108, 47937, 15927, 44193, 10836, 32825, 57929, 15310, 39676, 24063, 34024,
-46844, 18734, 42968, 26523, 53037, 19986, 37902, 28382, 34108, 47409, 10110,
-45464, 16366, 48283, 25002, 41425, 21719, 43095, 18013, 50025, 33936, 28312,
-36121, 50414, 14500, 27849, 65039, 18319, 32004, 37030, 685, 23406, 51687,
-24755, 3945, 43283, 11092, 39335, 16900, 52857, 6811, 27853, 50685, 30296,
-55484, 16230, 60264, 29822, 34225, 46895, 9534, 41395, 4912, 47601, 20214,
-36329, 51791, 15815, 34696, 6548, 21438, 61570, 31043, 16607, 37601, 28870,
-56939, 17057, 37269, 63450, 7631, 51855, 30616, 38420, 24309, 55766, 4125,
-31584, 63231, 1734, 59641, 31848, 7130, 45319, 3927, 32201, 36810, 9171,
-30342, 59927, 22221, 54488, 30284, 7687, 58367, 946, 53629, 7075, 27459,
-59938, 21764, 40619, 31813, 461, 34996, 21345, 39027, 26093, 33092, 38189,
- 7799, 62369, 29478, 51638, 9326, 26063, 56718, 2792, 62904, 23457, 54985,
-16990, 57788, 38734, 20934, 47433, 17602, 62463, 20403, 48236, 29358, 533,
-39725, 9464, 43992, 58941, 24625, 7056, 65292, 28425, 15438, 32159, 38735,
- 4079, 58261, 32150, 18573, 61179, 24482, 53053, 3866, 47032, 35095, 7482,
-24920, 48276, 30110, 36404, 63336, 4344, 51531, 9129, 31383, 37969, 6500,
-29255, 47968, 35291, 278, 36138, 45114, 22002, 44049, 1525, 47700, 10933,
-41239, 2709, 49027, 38392, 13583, 51822, 5058, 65119, 24875, 8329, 47817,
-11555, 62925, 15024, 55003, 6179, 30915, 60170, 38236, 11740, 42971, 6422,
-44320, 8942, 40340, 49302, 12414, 43648, 33847, 26222, 61753, 4559, 49011,
-12765, 37482, 21856, 44090, 27411, 13193, 36513, 44886, 6671, 39347, 62108,
-19568, 36803, 28739, 17327, 46518, 14829, 42506, 16171, 38450, 62504, 17078,
-53573, 28951, 55022, 16520, 59182, 33235, 19828, 43262, 2036, 45534, 10870,
-59754, 483, 26056, 52978, 7078, 34175, 59367, 1023, 49615, 17646, 36921,
-28535, 63659, 180, 59751, 12200, 51448, 13616, 39869, 1846, 46589, 9670,
-50324, 2882, 25154, 57624, 29704, 39945, 2050, 56183, 6238, 63300, 12249,
-55137, 6637, 64115, 10756, 59084, 5064, 32703, 45907, 3094, 38370, 55325,
-15036, 63983, 42372, 9083, 40813, 56443, 28712, 61216, 21849, 47721, 19741,
-64794, 38947, 12010, 44946, 4612, 38404, 10557, 48445, 3726, 26690, 54340,
-18155, 63591, 27330, 56821, 2341, 24762, 45428, 23066, 57263, 40469, 12617,
-42901, 53992, 1873, 45039, 10286, 48366, 32504, 19083, 41097, 13823, 57377,
- 6412, 48830, 13560, 33681, 51470, 17971, 44780, 15732, 36324, 57045, 14911,
-62092, 17452, 52423, 27113, 46475, 1393, 44722, 10331, 64116, 21129, 40410,
-32053, 18567, 61475, 38555, 2027, 51867, 8144, 59469, 19710, 43469, 62240,
- 6785, 55711, 13487, 59209, 25149, 40184, 5668, 23660, 64575, 39180, 15629,
-43910, 30077, 8157, 28370, 45425, 5757, 25382, 50145, 8488, 42974, 5057,
-41183, 11536, 36830, 64776, 17403, 55383, 33773, 11051, 46099, 30863, 40651,
- 939, 57769, 43338, 18915, 45735, 13862, 53606, 39872, 320, 46171, 17326,
-63093, 28720, 16508, 57502, 40532, 5639, 55043, 10153, 20394, 46146, 28947,
-56812, 17118, 60969, 24439, 54510, 9758, 59000, 27057, 54085, 7126, 64528,
-14249, 38616, 28020, 63576, 15456, 57222, 26253, 6367, 60801, 28699, 39120,
-12627, 34396, 50995, 19979, 38819, 3727, 45137, 34971, 26092, 51269, 13496,
-28112, 64287, 18973, 57410, 24277, 62486, 15541, 30823, 63449, 22028, 473,
-50091, 15841, 41863, 20860, 51986, 928, 58739, 11997, 56179, 30348, 64266,
-15326, 58446, 31534, 4442, 42364, 55726, 6832, 61655, 29758, 52133, 6023,
-48451, 29211, 1357, 40712, 33223, 3992, 25132, 49322, 605, 40497, 62213,
-15139, 53399, 20956, 42110, 16822, 36294, 48635, 21614, 45049, 16768, 28795,
-53547, 23709, 62060, 6886, 51717, 11324, 41874, 26011, 38415, 3520, 62478,
-23805, 55493, 22478, 65329, 18003, 59105, 42880, 21055, 5831, 60891, 32147,
-17568, 43868, 23432, 37481, 27768, 41061, 20604, 45048, 22189, 39228, 62382,
-13089, 56337, 24543, 6954, 49353, 32948, 16412, 53016, 33686, 20696, 7831,
-34960, 51253, 5158, 42625, 25851, 2139, 57984, 23283, 62627, 21467, 53470,
-23593, 64512, 37315, 14092, 45693, 34577, 8532, 40637, 30506, 60821, 9134,
-48707, 601, 25646, 51987, 8031, 27043, 59069, 21990, 62995, 27800, 4362,
-57927, 24054, 47304, 17051, 42611, 20174, 61876, 39687, 7959, 42375, 23083,
-53115, 10515, 28196, 49942, 23381, 41927, 5903, 63624, 16402, 55954, 18991,
-36955, 25197, 47907, 12660, 52533, 35116, 9583, 25396, 46749, 15567, 44306,
-24840, 54003, 12637, 30434, 41483, 23018, 45594, 1474, 49351, 19413, 57132,
-42293, 1933, 31231, 60434, 10021, 53498, 37520, 61482, 12133, 40195, 64061,
-18112, 54506, 26164, 58743, 22817, 52831, 19451, 32694, 48867, 4875, 22872,
-51683, 19748, 60449, 12397, 52962, 30213, 8995, 61327, 25039, 50009, 8012,
-29564, 57028, 12110, 33676, 39016, 10899, 51053, 31460, 14347, 62354, 22856,
-35453, 52758, 24504, 12264, 33403, 41437, 2053, 46133, 15741, 42944, 19539,
-41529, 16688, 47262, 34003, 25680, 57825, 7326, 30201, 45123, 18740, 51300,
-30636, 36510, 10753, 58494, 26867, 54797, 1161, 61136, 22579, 57625, 29480,
- 9541, 58915, 2813, 34603, 45852, 4786, 47236, 35279, 2012, 33290, 48161,
- 3429, 36332, 51649, 28741, 35089, 55909, 10255, 65091, 29638, 46684, 16739,
-40638, 3902, 50060, 8436, 51462, 34088, 18240, 49349, 24930, 13353, 32424,
-41073, 752, 23901, 64152, 20690, 58090, 25948, 55460, 14513, 59948, 36625,
-19335, 46159, 23748, 9435, 37789, 26754, 65150, 6674, 55413, 28094, 9634,
-64216, 3847, 56876, 37339, 6065, 40996, 21645, 43309, 19435, 31942, 54016,
-16938, 57359, 31757, 14944, 43352, 7310, 41866, 13880, 39606, 27037, 8424,
-35045, 51124, 19305, 37890, 58569, 10408, 52522, 2799, 61064, 13482, 57209,
- 382, 52325, 9247, 25843, 42535, 19344, 50721, 39970, 27439, 5349, 58171,
-29247, 2422, 63654, 44266, 15474, 31124, 59998, 14677, 54264, 36481, 17328,
-43388, 13992, 41351, 1617, 42825, 12759, 32047, 59098, 886, 24992, 55596,
-15249, 51307, 16924, 33470, 14446, 42195, 64483, 17547, 34620, 47886, 13956,
-43625, 6917, 38391, 51190, 12113, 43091, 2360, 65347, 27866, 54070, 1183,
-25221, 56247, 12027, 47814, 4853, 60519, 38185, 386, 43928, 12618, 48914,
-24604, 38326, 8690, 33470, 50457, 2355, 29020, 62439, 5210, 48597, 29832,
-54824, 19507, 65384, 34631, 4679, 35988, 49368, 2514, 52285, 9484, 29065,
-53717, 36166, 10452, 32751, 21740, 55451, 14473, 34849, 46248, 24913, 958,
-20707, 50700, 30872, 13736, 43668, 2092, 37893, 12119, 42250, 3222, 56597,
- 8299, 26421, 41758, 63487, 36086, 2183, 27539, 48818, 35067, 15006, 51163,
-35875, 2091, 33457, 60171, 16250, 42667, 25735, 49783, 5277, 58800, 36136,
- 1870, 44405, 32601, 8379, 60495, 440, 43670, 64150, 5793, 53278, 21237,
-34303, 65300, 3756, 55309, 6277, 60145, 28650, 3115, 51019, 12203, 34954,
-49605, 4904, 39399, 11547, 64398, 21208, 49510, 3318, 41833, 13888, 44014,
-16909, 40796, 12346, 46704, 20482, 41634, 23680, 61956, 20883, 54026, 10858,
-27273, 50630, 17846, 35910, 57737, 20518, 9481, 59891, 6712, 23370, 44783,
-26628, 8252, 35214, 62872, 23259, 45213, 21657, 41615, 25386, 265, 57038,
- 9594, 64685, 36379, 53668, 16659, 57386, 33414, 10576, 43835, 5112, 46108,
- 9315, 31322, 42707, 7848, 62864, 13542, 56641, 30577, 51613, 4465, 29772,
-46387, 17938, 50808, 38050, 19439, 42620, 26646, 11407, 61120, 13898, 47205,
- 2384, 55317, 36298, 4648, 44844, 9381, 36583, 54682, 19727, 61001, 28317,
-56783, 5023, 54001, 30738, 63717, 13332, 44437, 4625, 30866, 46706, 18725,
-42349, 22524, 38657, 24351, 43678, 18803, 37139, 54713, 2168, 60805, 9721,
-21704, 61630, 36165, 12296, 48946, 19362, 37295, 22912, 49883, 110, 33338,
-39949, 9013, 27483, 49054, 5652, 51689, 27401, 61040, 16552, 56485, 6262,
-39682, 30067, 48332, 20857, 42696, 4496, 38691, 58888, 53126, 32328, 5379,
-31433, 60403, 3561, 40943, 19745, 50193, 15525, 33959, 60131, 17906, 52676,
-34551, 9904, 37169, 30556, 47213, 17474, 64029, 26259, 39651, 31798, 19165,
-65006, 21287, 57963, 30188, 3486, 53407, 28359, 57664, 15363, 60360, 38724,
-17770, 44187, 15986, 59160, 3584, 39561, 8751, 29439, 58298, 18360, 31629,
-64274, 22227, 35864, 61315, 14228, 26608, 63701, 43481, 7222, 35962, 49592,
- 4538, 21540, 58916, 31646, 56284, 35531, 3537, 59602, 32445, 57015, 18785,
-62832, 26897, 49184, 16803, 39179, 58408, 21105, 10161, 18253, 57140, 41226,
-21980, 4401, 62394, 32059, 18032, 48266, 20329, 38031, 30956, 3460, 63777,
-14178, 53940, 29624, 15376, 65409, 18293, 49185, 26469, 42817, 29962, 16785,
-31808, 48767, 23475, 59750, 8625, 31104, 39240, 25041, 46646, 13834, 40088,
-56764, 19097, 31449, 61160, 17069, 54813, 23887, 44272, 1363, 42201, 14532,
-56131, 23249, 63681, 31297, 53853, 6796, 55761, 31055, 64552, 7283, 50159,
-12496, 43322, 16584, 40547, 61407, 14027, 56022, 8269, 29295, 46823, 39130,
-15151, 41256, 54152, 3082, 58220, 42710, 20194, 6211, 53969, 13983, 61168,
-17007, 47921, 35644, 29078, 46000, 21064, 3010, 26555, 44496, 12262, 50351,
-37233, 18715, 53250, 23133, 36046, 65481, 15681, 52108, 27518, 37138, 3073,
-42277, 20088, 57718, 38963, 11538, 61599, 2713, 30930, 47588, 14775, 50363,
-32850, 20369, 52264, 24557, 64792, 15740, 27569, 59143, 22399, 63988, 26677,
- 5905, 49560, 31385, 547, 33067, 44536, 16997, 42470, 1428, 48916, 28956,
-62230, 15108, 34310, 64596, 8793, 55977, 4938, 54037, 8523, 59700, 31626,
-16017, 46923, 26871, 34423, 45341, 1175, 47585, 21059, 34961, 59476, 5960,
-54491, 11731, 56720, 16436, 63157, 30144, 56154, 20123, 63819, 30974, 8685,
-34516, 47333, 22592, 43998, 19850, 62874, 7735, 57665, 12344, 65525, 26783,
- 7349, 36882, 18589, 55262, 39513, 15338, 50885, 11232, 61797, 26156, 55342,
- 46, 30552, 39320, 8317, 23375, 58481, 19403, 53464, 5832, 41807, 29654,
- 2223, 54231, 14423, 48423, 13302, 51136, 7814, 34535, 61240, 13847, 43577,
- 4899, 45220, 32363, 7274, 56666, 24461, 40683, 11406, 33226, 50247, 23126,
-45408, 13878, 47556, 6486, 38260, 11046, 48649, 5353, 34795, 47804, 3379,
-22861, 59820, 27765, 16904, 63304, 33423, 11386, 48657, 6802, 22668, 47011,
-26606, 9071, 23854, 46381, 6623, 44220, 9829, 61853, 34142, 1524, 46961,
-28843, 50108, 34002, 8676, 59511, 28638, 38986, 6672, 56039, 11618, 65001,
- 5786, 44344, 54556, 22910, 32518, 41101, 11739, 46870, 23998, 53341, 4159,
-58115, 12676, 38197, 59211, 10749, 39936, 14041, 35380, 50658, 17356, 49336,
-10063, 34605, 63279, 22911, 8939, 35849, 46419, 628, 41747, 20873, 60031,
-15167, 53176, 19055, 47278, 34341, 9756, 36027, 4288, 28064, 48277, 23850,
- 578, 37933, 27550, 32886, 56451, 1402, 58661, 31110, 5308, 32393, 43181,
-23309, 64595, 5485, 26218, 62095, 18414, 32078, 37441, 14269, 30344, 49428,
-34021, 28194, 37415, 2516, 54867, 10327, 63019, 7340, 23446, 59272, 31889,
-55010, 7595, 60810, 24803, 3221, 61969, 35038, 13131, 50117, 2321, 30320,
-41033, 5476, 48621, 25723, 63359, 8673, 32463, 22496, 43720, 33763, 24950,
-58372, 8017, 63131, 1596, 57473, 38833, 4984, 42376, 10322, 37320, 50134,
-13048, 42356, 1492, 51992, 37726, 11635, 43946, 23679, 53001, 12582, 61748,
-21855, 55745, 25637, 9054, 36536, 53624, 718, 26052, 44862, 19677, 47154,
-34694, 26374, 39732, 5871, 62987, 35770, 14010, 58458, 17983, 53813, 24337,
-62857, 8478, 29941, 43201, 21495, 41806, 24815, 45553, 7253, 46752, 3321,
-42437, 12204, 38406, 58545, 21100, 4278, 53799, 11882, 50309, 17125, 37010,
-29265, 46759, 18033, 45168, 29905, 11785, 50094, 24682, 8897, 57727, 28639,
-45749, 32636, 5901, 31698, 45255, 18998, 61506, 29553, 48173, 3419, 44581,
-12925, 60387, 15968, 51628, 35058, 22411, 59196, 5457, 32343, 37523, 26780,
-45658, 19360, 40938, 22353, 65122, 26290, 14070, 51836, 34448, 309, 53333,
-27757, 62642, 14764, 56898, 1263, 62974, 26941, 54522, 16752, 58959, 32576,
-24189, 57605, 15647, 33184, 50490, 12100, 53019, 40131, 8663, 54762, 41765,
-18971, 39372, 65050, 10443, 55485, 36833, 52306, 14971, 39823, 20267, 51005,
-30398, 14553, 54285, 33126, 60814, 5590, 23964, 45528, 17652, 44016, 20789,
-45081, 22784, 41990, 24096, 49139, 15532, 33911, 8447, 46102, 982, 61854,
-33633, 7162, 31636, 41540, 22027, 47829, 5039, 33760, 52397, 3371, 57253,
-26756, 894, 61657, 21714, 55884, 27603, 1683, 44738, 29338, 61978, 16334,
-52669, 10481, 47843, 3954, 36741, 27389, 62634, 5812, 26148, 59365, 43231,
-19528, 61814, 14199, 42504, 59918, 17227, 49110, 15613, 38634, 26852, 36733,
-20089, 52717, 39083, 796, 51249, 19214, 34910, 49491, 1746, 52727, 12639,
-63754, 24205, 55062, 1485, 60351, 9782, 47087, 32586, 26472, 43452, 19024,
-49122, 40117, 12984, 42211, 17958, 43252, 15712, 38907, 47714, 30155, 7044,
-58908, 16970, 33962, 57247, 17826, 60309, 11998, 52932, 21527, 35523, 48168,
- 929, 59597, 9166, 52422, 21498, 37229, 28329, 44658, 16046, 30735, 59972,
-19142, 48026, 30206, 7196, 56651, 20291, 48003, 16449, 28761, 58546, 19000,
-64278, 16138, 48561, 6473, 38489, 11209, 35012, 50312, 22819, 16535, 49315,
-35628, 13030, 59413, 28427, 12035, 65354, 18315, 50157, 29741, 3766, 52521,
- 7486, 32609, 38047, 4862, 41750, 25895, 55120, 13623, 58786, 4285, 62096,
-18577, 37227, 23934, 59583, 16653, 55192, 633, 25519, 45222, 35548, 28422,
-60369, 2499, 33692, 53313, 3462, 24257, 54676, 1276, 61322, 41553, 2816,
-62612, 29767, 37159, 1426, 22363, 56353, 20282, 64855, 10723, 49902, 4761,
-41860, 16698, 62931, 28333, 39003, 24987, 48474, 10259, 62329, 7549, 30710,
-41233, 56108, 2639, 63102, 11627, 52922, 766, 49344, 10004, 35956, 46576,
-22985, 12073, 64369, 17440, 45070, 5787, 37193, 24720, 41049, 33082, 10516,
-40148, 28164, 41814, 871, 53320, 9099, 39930, 61744, 17315, 44760, 396,
-32342, 47763, 24052, 2868, 59438, 14735, 30549, 44935, 20338, 4473, 28154,
-63737, 746, 57361, 34939, 4722, 45897, 25985, 8000, 20478, 39751, 64334,
-12894, 55619, 3013, 63904, 9986, 58858, 713, 52504, 10661, 39471, 59722,
-22024, 55577, 30555, 16592, 48677, 27035, 60093, 15677, 54512, 18008, 64761,
-14786, 25407, 42691, 19145, 47918, 37596, 12864, 42599, 5397, 37438, 53222,
-15874, 50212, 4506, 37286, 26054, 65220, 28254, 32754, 56656, 7950, 38876,
-29739, 50405, 21462, 8499, 52282, 29543, 37203, 7643, 33772, 53095, 4614,
-63072, 10531, 54320, 6576, 65446, 12160, 24969, 59634, 30161, 11510, 56377,
-20920, 40801, 27786, 47121, 4963, 43982, 11527, 40236, 21152, 53254, 18422,
-65011, 5886, 29866, 52820, 1927, 33332, 56702, 5554, 63233, 27525, 52048,
- 6173, 21093, 56660, 27427, 38747, 25319, 47215, 7380, 45082, 23797, 33252,
-39282, 5984, 58897, 15549, 53866, 18980, 30494, 39439, 4759, 48918, 12697,
-34943, 51404, 8974, 35600, 53494, 700, 62236, 25743, 38572, 31966, 11165,
-62980, 40664, 7939, 47344, 3814, 39293, 32450, 26649, 52234, 20433, 60547,
- 4093, 58380, 32555, 7704, 54309, 31065, 3641, 50663, 33186, 1566, 44264,
-10183, 56506, 24207, 38938, 27863, 64368, 11277, 57169, 16696, 49721, 1730,
-45914, 28683, 38578, 10249, 32991, 53941, 13073, 28508, 48422, 20698, 33514,
-49495, 9266, 65065, 14497, 38916, 25795, 43627, 15136, 61830, 39235, 10777,
-43177, 21123, 13076, 45948, 15812, 43912, 17633, 63568, 40734, 12338, 47255,
-36408, 23508, 34984, 56059, 13899, 52232, 34919, 11315, 50333, 622, 36984,
-21265, 42657, 25571, 47462, 11317, 23613, 44957, 21823, 39670, 17337, 56947,
-34176, 20754, 54596, 3102, 59773, 35588, 30272, 48590, 10656, 32090, 53915,
-11891, 51403, 20821, 56028, 3189, 61049, 13495, 49838, 19469, 44158, 30032,
- 5597, 37281, 24800, 65301, 21046, 13340, 52257, 35880, 26901, 51698, 1646,
-34775, 61771, 31228, 43081, 17629, 47537, 31659, 21366, 65009, 18456, 59287,
-32130, 53559, 30402, 227, 51058, 29404, 37974, 16433, 47966, 29068, 37605,
-18841, 62597, 28240, 2629, 43612, 10081, 38145, 58262, 3243, 43085, 10580,
-39041, 1416, 45604, 27740, 35495, 49585, 13358, 62843, 7987, 28375, 58041,
-23672, 64327, 18793, 31804, 57497, 11653, 32814, 58656, 7697, 39599, 13995,
-50105, 21844, 45167, 16271, 60401, 173, 33481, 47870, 25155, 2513, 57220,
-44970, 23444, 12740, 45767, 21175, 42216, 18687, 44410, 17266, 41135, 48615,
- 9753, 37994, 47801, 28813, 7913, 59015, 10097, 34736, 56805, 19051, 61014,
-25705, 44368, 4683, 41311, 13417, 55611, 38899, 21335, 61587, 10662, 25483,
-49928, 30381, 1103, 34582, 64950, 41004, 9942, 51684, 161, 63657, 11721,
-55808, 35122, 1277, 64614, 14038, 51099, 26281, 40829, 9867, 35165, 64416,
-17687, 56193, 24311, 61846, 6397, 23290, 64102, 26207, 15100, 43826, 21411,
-49309, 4202, 59673, 34930, 2690, 24538, 52729, 34213, 27540, 60295, 9952,
-57346, 2510, 40770, 29960, 44872, 14000, 40693, 63906, 18139, 39700, 61277,
-14143, 41136, 57610, 20283, 48046, 14482, 43479, 17542, 47216, 14840, 44998,
-30262, 39755, 10815, 65223, 33313, 17898, 53083, 26512, 48016, 1353, 64587,
-38776, 6799, 41550, 61923, 15203, 54818, 23611, 47666, 7033, 51201, 10282,
-48126, 32415, 16810, 56533, 26453, 58640, 51880, 20162, 54132, 7081, 49529,
-33531, 5177, 52692, 29605, 2519, 58866, 9366, 28811, 43834, 25034, 6293,
-56841, 20102, 64468, 30985, 55498, 4006, 57504, 16181, 64625, 36539, 9584,
-59505, 6143, 46302, 30382, 6835, 62773, 27906, 40276, 19717, 49650, 4474,
-25478, 61635, 39316, 16620, 60741, 4164, 44556, 17267, 47034, 20393, 37114,
-25038, 64654, 12813, 58555, 26654, 55703, 8079, 29348, 54232, 34494, 6498,
-62522, 9524, 31967, 47382, 23213, 7278, 53872, 11656, 58619, 35574, 11114,
-52784, 13695, 42032, 2766, 43449, 13341, 47830, 24993, 36566, 15273, 49741,
-27376, 36089, 6167, 50329, 32560, 7365, 34867, 51432, 23428, 64613, 18792,
-32782, 52197, 20034, 63394, 23052, 56387, 30639, 9111, 58665, 2472, 54250,
-30512, 34257, 52812, 3935, 44162, 10762, 47139, 6901, 40778, 24712, 44208,
-17348, 53856, 23256, 43369, 2025, 63393, 12454, 52850, 20294, 37311, 55960,
-13077, 65325, 34301, 11612, 19852, 63791, 29763, 35233, 55616, 3006, 59308,
-28002, 51675, 2607, 33070, 61667, 22107, 4136, 63174, 35950, 24417, 50636,
-15843, 30692, 39362, 6907, 50958, 12363, 48567, 22867, 50372, 33539, 11369,
-48256, 16289, 35448, 46373, 14668, 37887, 59073, 22282, 12847, 31553, 48602,
-19031, 42157, 21693, 43504, 29783, 14635, 53744, 18509, 46017, 30329, 2538,
-62620, 27528, 49710, 3565, 43186, 13593, 41173, 19597, 53643, 33327, 3040,
-45243, 32823, 8485, 54730, 12566, 41913, 18149, 45165, 29270, 57774, 21433,
-12248, 44530, 17809, 46966, 23864, 33262, 65190, 9533, 23373, 55899, 25622,
- 2267, 47861, 10522, 24245, 48749, 22940, 8884, 37274, 30775, 63602, 6816,
-60540, 264, 55315, 23474, 3456, 59719, 26889, 37072, 12439, 48873, 2983,
-60654, 14309, 41181, 31350, 10760, 57302, 29577, 4742, 31282, 38314, 2065,
-29937, 57933, 20100, 64154, 27458, 5738, 49911, 36296, 4207, 34682, 6439,
-39288, 28387, 59676, 13311, 24131, 56965, 35537, 16418, 51165, 37121, 22110,
-63929, 1554, 54840, 33238, 15356, 45817, 23897, 7904, 40455, 27379, 34438,
-49657, 1292, 28672, 50444, 24645, 52171, 19639, 60830, 25803, 38136, 12756,
-53163, 7713, 29053, 57986, 43849, 21106, 2141, 47351, 29893, 36585, 25979,
-63973, 7537, 33571, 56756, 4438, 29230, 46317, 1971, 42703, 14005, 49427,
-38583, 4837, 46225, 28106, 38401, 22317, 56954, 16211, 60049, 35699, 25347,
-49940, 3078, 24095, 44735, 5730, 48987, 21977, 55978, 19243, 61948, 7183,
-56527, 10523, 60674, 5075, 55145, 12339, 61660, 15645, 58095, 26016, 56182,
-11236, 41811, 4736, 50055, 8845, 28019, 41261, 5563, 43578, 12075, 50384,
-37671, 21612, 44223, 23911, 6032, 45426, 14398, 39555, 17015, 51806, 27473,
-59271, 13725, 62690, 2581, 46877, 29008, 5975, 57180, 35940, 17171, 41513,
- 5157, 45906, 30269, 7029, 39838, 16766, 44332, 54525, 32519, 1662, 50446,
- 8936, 25533, 47006, 34133, 8468, 35992, 57563, 23013, 7027, 53554, 41671,
-13494, 45694, 2900, 33521, 64866, 115, 54571, 36152, 20555, 63383, 16575,
-59430, 832, 25294, 62565, 4856, 31417, 59930, 3684, 55743, 23254, 8271,
-44313, 52986, 2647, 35129, 59765, 14856, 54967, 4749, 62057, 25850, 42924,
-31794, 7712, 54384, 38278, 19474, 45711, 14753, 57072, 32513, 51595, 51,
-46284, 10272, 39863, 56627, 18503, 59300, 37143, 17088, 65443, 27097, 53542,
-13441, 48607, 5380, 35937, 61947, 1237, 55994, 34903, 5720, 45400, 18090,
-49647, 37816, 6883, 46460, 34683, 28745, 52840, 33749, 5656, 62531, 28259,
-55500, 2572, 25487, 49703, 28980, 40827, 18274, 50881, 34956, 21377, 51956,
- 6615, 55614, 16145, 43974, 35322, 23443, 49671, 17727, 50946, 36186, 15875,
-53051, 43962, 19206, 50660, 35044, 11320, 40527, 201, 35567, 59830, 23559,
-13620, 64697, 30520, 24721, 63080, 439, 37147, 30933, 45623, 20538, 8048,
-60870, 32773, 5739, 43247, 13365, 47109, 17457, 40502, 59514, 3121, 38587,
-61039, 13097, 53921, 9010, 20610, 39820, 58185, 16532, 38424, 3372, 41820,
-10701, 44404, 1788, 48254, 23779, 63847, 41619, 18488, 9270, 35803, 50879,
-23969, 8942, 57620, 12677, 38445, 28571, 45118, 11397, 51303, 38205, 16505,
-52143, 22749, 62766, 32196, 19599, 60864, 18147, 56081, 14236, 45269, 3789,
-43273, 12245, 48899, 14103, 39927, 29545, 61429, 16246, 58076, 30528, 39492,
- 9242, 37414, 28232, 45418, 17953, 41710, 21347, 43537, 18214, 41237, 20608,
-43147, 3554, 41214, 21387, 45842, 17986, 60459, 25763, 35840, 57719, 15028,
-55049, 18244, 59848, 26120, 6359, 62080, 11441, 38606, 63860, 20148, 56346,
-22525, 61085, 32152, 17, 37874, 21811, 36217, 52170, 12975, 63963, 33400,
-11120, 26708, 51529, 24343, 61638, 11353, 57469, 23893, 51896, 30962, 5661,
-21773, 40654, 57938, 16400, 39018, 61571, 13650, 22232, 62782, 24605, 10185,
-37004, 46572, 18569, 32210, 55102, 22528, 60082, 17325, 40617, 28844, 14090,
-32064, 43169, 3230, 37792, 28381, 34442, 46115, 14229, 40537, 51970, 18125,
-44045, 11801, 50436, 40042, 26789, 16096, 58018, 24902, 7777, 46092, 29263,
-37815, 10892, 49219, 3640, 37703, 61071, 22655, 10773, 57930, 5181, 42316,
-23633, 8276, 28186, 58072, 22589, 60743, 27274, 11558, 50201, 5675, 29512,
-46138, 2003, 38221, 6616, 60198, 16318, 31495, 50833, 15147, 40914, 30889,
-15814, 63052, 12938, 55163, 211, 29131, 59955, 19174, 62789, 8110, 21380,
-58218, 38934, 14998, 42804, 16122, 51323, 39968, 21939, 12210, 56871, 31488,
- 8772, 61975, 13756, 41705, 31480, 19646, 62378, 28668, 9312, 56083, 6037,
-61549, 26205, 2556, 64024, 33813, 6472, 59228, 14158, 63352, 26470, 55009,
-21884, 53036, 9680, 33908, 46491, 19240, 44964, 52393, 21874, 48693, 11168,
-53206, 3720, 64282, 28733, 41875, 14906, 30873, 57548, 25844, 32618, 62008,
- 8882, 26904, 51921, 16651, 28743, 44274, 18329, 42097, 61835, 32794, 7255,
-47846, 13208, 62551, 28131, 55494, 17835, 58814, 34780, 14232, 32802, 1022,
-55382, 33333, 59527, 13309, 64556, 40953, 18379, 47833, 10, 52668, 15801,
-61891, 32524, 6912, 57358, 30887, 8883, 36793, 3279, 47364, 11378, 41608,
- 1210, 50462, 26003, 63011, 17915, 39162, 100, 64540, 21514, 53479, 8666,
-41508, 28026, 1201, 63168, 25342, 54847, 4217, 34155, 65465, 2330, 54249,
-29285, 62994, 1334, 56910, 27038, 53920, 13510, 63594, 1678, 53532, 34117,
-13021, 44174, 153, 46456, 24519, 38034, 2920, 33948, 53818, 20460, 47596,
-26595, 10275, 48738, 2132, 41387, 8430, 45871, 20530, 49758, 33818, 5221,
-30224, 42290, 18349, 49305, 36759, 59138, 4118, 42654, 19834, 39351, 15867,
-43145, 3211, 62508, 35351, 60513, 9255, 24661, 47617, 28057, 5986, 52224,
-36600, 285, 50152, 28896, 52699, 14638, 64226, 1198, 36728, 9089, 31274,
-49943, 6312, 46906, 61828, 8752, 58325, 25354, 53952, 7807, 57495, 20425,
-53556, 30062, 8616, 37557, 27914, 64308, 31999, 4415, 62409, 33899, 9418,
-36172, 62985, 23278, 13107, 50586, 32346, 19292, 57467, 24585, 13359, 48327,
-29307, 35469, 52185, 16012, 62160, 30867, 44847, 11006, 38346, 4334, 47384,
-30068, 37947, 25005, 61059, 19645, 52033, 22823, 44012, 25544, 39627, 64541,
- 8651, 29610, 49259, 7358, 51385, 35915, 27934, 39417, 21647, 50957, 13298,
-43473, 16001, 54547, 35723, 830, 29944, 52238, 4575, 60236, 31879, 7885,
-59189, 33551, 3985, 44601, 36124, 24936, 47564, 954, 53719, 39509, 4993,
-46758, 21429, 40355, 33460, 12031, 35175, 48382, 22846, 11577, 42254, 28688,
-45574, 3812, 42572, 8352, 31269, 43101, 20532, 51519, 1862, 57588, 8992,
-33462, 12720, 27592, 61414, 18726, 40419, 24957, 50053, 787, 53459, 39178,
-10165, 48633, 4643, 37528, 30361, 44880, 6864, 36355, 54702, 1826, 58671,
-31252, 4449, 26050, 52505, 22100, 43342, 20381, 37331, 5319, 49932, 27139,
- 8980, 51571, 43569, 26278, 39314, 22361, 6370, 38212, 32331, 4841, 54113,
-27452, 60233, 21005, 43132, 2758, 24124, 48261, 19761, 41048, 59148, 17819,
-53942, 24168, 58014, 22425, 64161, 32848, 8798, 31697, 54442, 22647, 52213,
-31533, 6930, 32744, 46162, 20229, 51962, 36351, 14779, 42666, 16867, 47187,
-12409, 23509, 50810, 35506, 11246, 22546, 49250, 31516, 9507, 32957, 46839,
-19404, 38376, 31012, 6881, 49137, 19016, 64286, 34116, 8133, 61204, 28821,
-48632, 14541, 41599, 672, 57663, 33724, 28488, 60404, 15553, 54077, 30902,
-65013, 9164, 55818, 25988, 61276, 8297, 54950, 784, 21114, 31352, 47590,
-13807, 53723, 1487, 59871, 26392, 49217, 20778, 13915, 46564, 29193, 53810,
- 4149, 58930, 33048, 17702, 46158, 30957, 16486, 60768, 4463, 30947, 39633,
-24737, 57792, 27590, 52204, 13744, 43450, 18383, 37376, 29765, 15445, 47670,
-17527, 42397, 10975, 44328, 2842, 63666, 26643, 57732, 504, 36652, 13811,
-47549, 17720, 54279, 28523, 51391, 3917, 39460, 56562, 1694, 60162, 36827,
- 6909, 50377, 40618, 418, 65055, 8932, 26801, 40600, 1838, 54604, 21134,
-65244, 16594, 53264, 14267, 63779, 1204, 52967, 9931, 40077, 8033, 62512,
-11468, 55236, 311, 21721, 37744, 54634, 18285, 59479, 24872, 3172, 57660,
-10106, 62090, 30392, 37179, 3440, 49003, 19775, 44398, 25764, 64818, 17462,
-47105, 35814, 19769, 44969, 17142, 38398, 64658, 16015, 54059, 6071, 34235,
-63704, 23642, 13259, 51627, 32878, 64912, 414, 58137, 22116, 43585, 16369,
-52149, 29435, 54222, 12626, 23761, 56226, 18454, 62167, 39096, 4954, 60749,
-26002, 38761, 16340, 41495, 3248, 58892, 43615, 6061, 32495, 47948, 9664,
-20989, 59909, 33356, 18822, 62552, 23024, 55587, 18297, 58119, 19499, 65198,
-24517, 11628, 47455, 34203, 15504, 49267, 36096, 11007, 64088, 137, 53240,
-15254, 45789, 19108, 38061, 60030, 21591, 5547, 62081, 11161, 54263, 29327,
-56522, 19254, 49882, 31243, 8420, 32676, 41215, 14160, 50437, 34898, 9897,
-63409, 698, 28510, 44859, 10296, 43167, 6305, 38108, 12731, 44383, 28496,
-46514, 6085, 42092, 10248, 44283, 28311, 55127, 3865, 63947, 9631, 26782,
-60094, 6468, 57243, 31587, 59464, 36392, 8873, 25902, 58426, 39007, 7600,
-45175, 24279, 61372, 4918, 29574, 55785, 14435, 59457, 24981, 52368, 10115,
-27792, 53334, 19709, 43900, 9425, 65199, 29749, 50073, 14054, 44627, 5313,
-35316, 46935, 23426, 3680, 27288, 43196, 15750, 41324, 19873, 43793, 23214,
-40044, 62158, 9279, 35101, 64802, 22391, 48500, 35944, 10440, 34454, 56461,
-38371, 728, 41380, 12891, 43204, 15713, 37905, 63989, 11128, 56962, 36196,
-12282, 35128, 58862, 10660, 49148, 15182, 44797, 3883, 62849, 25230, 56616,
- 2075, 55215, 34926, 5947, 65425, 29096, 60729, 18969, 38491, 22119, 42361,
-17508, 53842, 21639, 60405, 25682, 41281, 1447, 42782, 14443, 48365, 32934,
-18347, 43954, 25363, 13884, 63970, 31593, 17648, 55059, 24075, 33977, 60065,
-18461, 48746, 31902, 6197, 32844, 42979, 22234, 41675, 18191, 44987, 34686,
-23736, 48848, 32058, 18134, 49572, 20228, 41477, 57160, 32787, 3901, 44171,
-10664, 32631, 46826, 20607, 44457, 24552, 6251, 52067, 32434, 12211, 59111,
- 6670, 50019, 12600, 41377, 24128, 9648, 63269, 1306, 49286, 25390, 9412,
-48304, 22648, 57936, 20004, 10135, 36019, 60324, 26965, 8392, 19118, 45106,
-30638, 53292, 4562, 61020, 7943, 39634, 821, 61421, 34870, 9334, 49678,
-32154, 16980, 47292, 29989, 11702, 63641, 27954, 56210, 31318, 36286, 17581,
-39409, 55941, 14485, 58237, 43850, 25986, 8309, 45924, 2908, 44115, 12055,
-50450, 347, 46573, 14296, 40723, 60550, 27275, 6247, 63562, 19567, 55989,
-23340, 33185, 40647, 25454, 57626, 11497, 64902, 2461, 29290, 36655, 52724,
-17557, 44455, 19970, 42346, 1556, 45302, 13897, 63099, 23012, 54719, 5676,
-65078, 16733, 55957, 29027, 37132, 25436, 54984, 14855, 64846, 29372, 52953,
-20356, 55347, 4343, 60657, 20005, 58787, 18756, 56645, 15077, 61047, 17704,
-43447, 15664, 38384, 49334, 19149, 44519, 27513, 797, 20220, 49120, 29791,
-45669, 3815, 33754, 64192, 16530, 49915, 14703, 39787, 51054, 9204, 44643,
-35312, 3742, 38361, 30498, 47314, 4426, 40267, 15293, 51338, 23476, 7483,
-34787, 61379, 21236, 55576, 25246, 9550, 62481, 32402, 53500, 19161, 59727,
- 1792, 54282, 13515, 57604, 15298, 27995, 52535, 25598, 6322, 43383, 9529,
-28202, 63017, 22920, 7194, 27398, 58253, 19726, 64653, 23656, 55077, 2249,
-26131, 43665, 5201, 47746, 25212, 45602, 17675, 42633, 5449, 61290, 19961,
-32072, 36442, 7677, 41493, 31494, 14619, 50594, 24125, 39254, 1284, 33853,
-51206, 12656, 49571, 5121, 48105, 10076, 44453, 6779, 50884, 12117, 57107,
-20115, 65343, 26573, 10514, 61575, 6030, 52110, 28778, 41859, 11136, 47637,
-36095, 12688, 46409, 4035, 42809, 13045, 51240, 26527, 55597, 2275, 59002,
- 7789, 55971, 31796, 13233, 54480, 2802, 58454, 36485, 4844, 45035, 28491,
- 9304, 23316, 61384, 19561, 40371, 64916, 14430, 53553, 4631, 40891, 56572,
-15475, 64356, 23551, 40101, 32810, 27338, 57316, 3316, 55115, 33880, 27174,
-53049, 14666, 58468, 29170, 40454, 2048, 29868, 50432, 28251, 45961, 2735,
-42978, 31455, 50177, 25313, 10000, 20152, 47294, 36055, 24507, 57458, 31726,
-17215, 48755, 26341, 37330, 1466, 58149, 13445, 55270, 37243, 6852, 49553,
-13923, 54549, 7694, 65226, 29108, 2011, 37190, 32061, 4526, 38513, 64955,
-21409, 54548, 16635, 40319, 28296, 36674, 26150, 51566, 3661, 21504, 37282,
-53363, 13866, 44454, 2818, 46410, 9714, 60298, 6996, 30257, 41340, 22262,
-42495, 55719, 7940, 28275, 48773, 3803, 65267, 12572, 58135, 25852, 37586,
- 3030, 46691, 17438, 43712, 25150, 39577, 4676, 46011, 11564, 49706, 7158,
-40110, 33766, 2171, 25455, 42344, 16329, 49094, 13430, 37187, 2606, 39069,
-27098, 49586, 1765, 37587, 23151, 50729, 29541, 2437, 52782, 13872, 40687,
-53312, 33245, 5710, 62725, 13735, 52381, 17697, 30981, 41444, 451, 57846,
-32225, 20687, 65138, 26622, 16863, 61717, 21901, 57141, 17306, 62527, 24002,
-57442, 1964, 35822, 58776, 25662, 3530, 42734, 12011, 51049, 39337, 17859,
-42385, 6453, 47492, 12101, 37537, 30093, 45539, 4548, 49143, 37731, 2874,
-33321, 57890, 15141, 55490, 32965, 3851, 53212, 31635, 49847, 11418, 43949,
-32679, 7508, 31347, 49333, 39393, 14348, 53324, 21303, 65179, 1872, 56030,
-29408, 53285, 11771, 40806, 57218, 16998, 53885, 21708, 63801, 38360, 11473,
-58838, 20157, 55832, 26283, 7371, 57103, 16113, 61333, 34036, 24791, 35218,
-58225, 19141, 38352, 22795, 44856, 6592, 37928, 52873, 22786, 41270, 21108,
-56027, 2883, 58383, 29756, 5729, 51786, 19701, 56780, 21604, 63448, 7491,
-45564, 13596, 47568, 34397, 27862, 37621, 4574, 61761, 21139, 44215, 10885,
-27970, 56573, 13130, 62924, 36159, 49033, 14001, 46344, 28991, 1644, 37517,
-27360, 59760, 17569, 31620, 38338, 9119, 47170, 2019, 61668, 9976, 34744,
-45480, 13844, 48155, 7040, 40671, 31468, 5358, 52333, 15412, 61686, 35241,
- 6857, 59320, 15053, 57019, 20659, 55054, 4071, 59448, 32590, 63239, 27083,
-13052, 46090, 15380, 50646, 38544, 5143, 62988, 19293, 51241, 20968, 44015,
- 2896, 24558, 45084, 20313, 39954, 23697, 46292, 11858, 52663, 21558, 62226,
-16767, 55384, 14789, 34043, 47676, 9454, 31743, 60214, 5977, 63066, 10779,
-31019, 56631, 43616, 12530, 32085, 40560, 25597, 58962, 28883, 51736, 16649,
-34259, 49227, 3963, 52223, 10317, 20059, 40287, 60502, 15337, 37084, 27368,
-50435, 32691, 16437, 61257, 33758, 27994, 59235, 11838, 53612, 19381, 57918,
-22986, 61342, 18874, 32003, 60112, 17261, 47120, 57251, 7555, 62078, 27070,
-33589, 47396, 24764, 65402, 7954, 30152, 45225, 11961, 62342, 6029, 57709,
-34238, 24743, 64696, 10345, 21752, 60426, 39141, 18681, 42103, 22755, 59839,
- 6631, 56070, 27310, 36672, 8145, 48487, 2261, 33493, 50420, 11766, 45212,
- 1256, 41287, 12195, 46107, 17933, 31766, 45437, 15939, 39886, 54329, 18648,
-64687, 29405, 1145, 56078, 13175, 58467, 35896, 24837, 62830, 7869, 26918,
-64422, 11805, 21851, 60733, 42382, 18012, 46249, 19319, 50364, 38822, 14584,
-45028, 18551, 61789, 4664, 52826, 28192, 59696, 10295, 22884, 61117, 30507,
- 7912, 32530, 44255, 23755, 14211, 34647, 48052, 26906, 688, 45699, 10769,
-48275, 3445, 27302, 44887, 5283, 42729, 13063, 47452, 39822, 19610, 45021,
-28807, 11089, 64822, 2718, 28780, 49079, 5077, 61027, 16003, 55366, 28325,
- 654, 45736, 12322, 48910, 16398, 32005, 39184, 15313, 63248, 30805, 40303,
- 9586, 38097, 28791, 36614, 19341, 61319, 24825, 9310, 62965, 20320, 48443,
-24846, 42049, 16025, 64431, 37990, 19238, 50198, 24326, 2447, 33526, 55428,
- 6348, 58403, 21148, 48491, 8471, 34687, 47837, 969, 50518, 27704, 35639,
-54045, 22564, 49175, 16624, 29154, 59808, 22695, 56066, 18665, 62327, 35461,
-23936, 45593, 10584, 43331, 22983, 39346, 31865, 9526, 47415, 15773, 40752,
-18123, 48322, 1966, 34808, 55446, 3431, 64409, 8831, 27220, 43581, 12896,
-46203, 7521, 65364, 28114, 34356, 59394, 14538, 62017, 998, 57857, 16811,
-40990, 27964, 48514, 8531, 50326, 26711, 42776, 1665, 29214, 58539, 37686,
-17650, 43064, 22145, 54123, 39597, 8672, 28321, 57851, 842, 61371, 10044,
-36748, 5105, 38856, 26886, 56267, 15598, 61902, 25941, 33873, 63358, 24201,
- 433, 33275, 56076, 9674, 39401, 5214, 51837, 10168, 48720, 6762, 38355,
-31644, 1345, 47167, 12525, 43042, 2528, 38259, 52060, 4015, 30429, 36236,
-15093, 31423, 39475, 551, 58313, 9043, 51538, 21655, 34467, 59440, 19801,
-52989, 25779, 41009, 12692, 46736, 7649, 28851, 48381, 34838, 8301, 25061,
-49969, 1893, 47901, 10948, 38195, 16205, 53378, 21785, 60886, 18864, 37989,
-58508, 6505, 42389, 20081, 52893, 27710, 54440, 5027, 38269, 60054, 9650,
-48124, 5817, 31311, 37322, 8105, 48111, 22988, 35108, 45617, 27673, 2990,
-50064, 14114, 41751, 52028, 16999, 32914, 47097, 28884, 9977, 38823, 397,
-58938, 8415, 24908, 65044, 2143, 40809, 24590, 37831, 17151, 44705, 20567,
-36922, 50697, 3492, 42787, 27487, 50002, 11455, 39114, 62423, 3161, 21472,
-64734, 37748, 20702, 60296, 19187, 36730, 56887, 16854, 61556, 28195, 52491,
- 4209, 31331, 60005, 1708, 40624, 52814, 19982, 39054, 52151, 14254, 43862,
-30305, 40593, 9722, 34630, 59575, 19072, 64361, 4546, 34853, 61921, 8118,
-49273, 26035, 2207, 59814, 27106, 53597, 888, 58705, 31807, 3509, 41475,
-51578, 16296, 45540, 12132, 57761, 6352, 51230, 31657, 1051, 45872, 7656,
-40541, 59043, 11307, 30088, 38725, 12148, 52611, 31102, 63346, 13242, 26346,
-62325, 16321, 57900, 7219, 19047, 42093, 4881, 63744, 37197, 90, 43046,
-11334, 38340, 2833, 47519, 8369, 33995, 56433, 17748, 65431, 4326, 52165,
-34942, 26171, 64248, 7474, 54238, 12519, 31403, 44501, 18752, 43089, 21602,
-34137, 59657, 17641, 56639, 34691, 25018, 39730, 10389, 53161, 6259, 48397,
-26772, 35580, 5249, 30840, 59531, 3443, 24190, 43407, 30243, 6430, 61243,
-20184, 52270, 22726, 3870, 49440, 11426, 47336, 2344, 20681, 64177, 38106,
-16102, 45808, 23091, 51296, 17421, 65502, 12422, 45677, 1227, 43867, 35694,
-13768, 47103, 6318, 43866, 29744, 45668, 18201, 48161, 21408, 59780, 24994,
-44184, 19764, 55779, 13545, 63575, 36368, 27240, 62425, 20932, 54483, 28557,
-13350, 42614, 56484, 9339, 63150, 43435, 21274, 52511, 17485, 30726, 40790,
- 4103, 53738, 10575, 42036, 4630, 48158, 20849, 59870, 18659, 55629, 38110,
- 3315, 53786, 29310, 55876, 15650, 64889, 34800, 24893, 50531, 31997, 5622,
-45775, 15175, 44275, 29457, 12419, 54257, 15796, 63483, 30758, 8908, 32548,
-64004, 13635, 26854, 52346, 22893, 63191, 17549, 56481, 33328, 13889, 60191,
- 6818, 20755, 64052, 33981, 23285, 57284, 31951, 1027, 39143, 60079, 5709,
-56082, 20686, 63834, 32577, 27529, 35757, 47729, 17576, 54215, 15406, 57256,
-12332, 54669, 1236, 63538, 6710, 32068, 56540, 15179, 63003, 20095, 57989,
- 6060, 32902, 49642, 35717, 8348, 29856, 50964, 6507, 42436, 30806, 8070,
-46836, 34167, 15981, 35465, 64532, 14387, 35975, 54303, 23782, 6203, 46127,
-27101, 8244, 59364, 26234, 2030, 63782, 24641, 51105, 7722, 31264, 37564,
-24260, 54009, 20557, 44164, 19112, 52813, 37037, 15854, 45047, 14534, 43613,
-16440, 39929, 52636, 14843, 30929, 38839, 468, 53535, 17428, 30534, 39793,
-14715, 60483, 26638, 53289, 15660, 31247, 51562, 16288, 63674, 25893, 41243,
- 5527, 23448, 51553, 40373, 10537, 44312, 24460, 34348, 60986, 21702, 52698,
-27324, 10846, 53826, 21318, 64999, 26574, 53411, 21815, 60858, 27794, 515,
-47980, 25164, 44387, 18675, 60719, 1120, 29495, 43208, 22086, 39427, 57848,
- 9743, 60510, 6994, 30809, 53540, 1709, 45004, 28790, 4055, 60359, 15589,
-49958, 22442, 42331, 30004, 9636, 52089, 34485, 49700, 10754, 35354, 63895,
-13194, 56762, 35858, 23415, 46175, 7853, 33111, 63780, 19213, 56339, 26808,
-35433, 50675, 23791, 5238, 52959, 31464, 7910, 32704, 47624, 22495, 52671,
-21722, 61013, 30038, 8284, 58434, 27493, 54743, 13118, 58677, 8710, 62490,
- 2817, 36393, 10980, 40782, 603, 50126, 22451, 42468, 24860, 9055, 51784,
- 5394, 41569, 10607, 36328, 63926, 26747, 16674, 46089, 24996, 5202, 47693,
- 9935, 36964, 63531, 18498, 44604, 22849, 49203, 18177, 64228, 13614, 37570,
- 375, 42199, 31744, 17189, 62217, 13392, 45110, 4694, 43770, 31406, 12952,
-56566, 3116, 63697, 39360, 11615, 52688, 4262, 62657, 22290, 32682, 39269,
- 5430, 49684, 21686, 44185, 18719, 49063, 36859, 328, 41567, 11198, 43995,
- 2254, 50331, 25898, 43246, 29844, 48949, 9740, 52928, 5450, 35624, 21458,
-55534, 29653, 14620, 44418, 24383, 49999, 6866, 52119, 12191, 60926, 5001,
-42508, 27904, 46555, 6105, 42844, 21681, 40789, 18851, 45902, 16389, 35637,
-46754, 539, 40941, 13467, 52280, 25931, 9808, 54420, 24735, 59212, 15443,
-32227, 64142, 17777, 54369, 25872, 377, 50188, 9701, 25277, 49390, 22828,
- 9419, 34702, 56790, 14648, 62718, 32954, 17559, 47552, 35098, 15074, 46118,
-17539, 39745, 57650, 13790, 45281, 9341, 41512, 1057, 60932, 9009, 24542,
-55362, 6648, 64506, 23685, 56115, 8684, 26229, 64852, 5948, 59555, 33277,
-26487, 35357, 63609, 3736, 52703, 36439, 17110, 34526, 65135, 5236, 41699,
-33796, 645, 44155, 17047, 54505, 35819, 2712, 22181, 53373, 30252, 3622,
-48131, 11966, 44572, 14813, 32832, 46560, 17299, 41670, 6480, 43888, 12992,
-41388, 17201, 46356, 35096, 12383, 54000, 7190, 41262, 13031, 37810, 55672,
-14331, 60130, 5330, 20461, 50499, 25241, 35582, 47819, 20032, 40173, 11142,
-52336, 21234, 41823, 32269, 480, 57244, 17532, 64234, 36239, 22258, 62713,
-17834, 31931, 46647, 16111, 41371, 122, 51118, 10457, 28802, 53861, 40068,
-13148, 42716, 32083, 6732, 61711, 10382, 34007, 49106, 18473, 62853, 27561,
-56974, 2195, 40916, 6683, 37657, 17025, 47495, 20942, 40875, 2037, 34211,
-50111, 23228, 32523, 40832, 28118, 57042, 23084, 63812, 32067, 15879, 60499,
- 3939, 56688, 39534, 18395, 48728, 24354, 59487, 22448, 5959, 38751, 51554,
- 1443, 37059, 55199, 19532, 60033, 32240, 5754, 54318, 11241, 61999, 1087,
-39357, 33503, 23774, 54574, 28022, 63254, 5499, 45979, 22685, 41890, 19612,
-61206, 35528, 8603, 46291, 20823, 42390, 17486, 26777, 58191, 20208, 40137,
-25203, 49004, 609, 47379, 24997, 35865, 59556, 2815, 56380, 7604, 28898,
-61840, 19763, 54760, 29846, 59644, 21339, 39593, 3972, 61987, 15964, 41815,
-20063, 39772, 61670, 10211, 42726, 8119, 52879, 36079, 1913, 34614, 45542,
-21893, 43550, 22761, 54968, 31343, 8714, 32423, 64108, 28917, 59201, 10852,
-55313, 25265, 58784, 8891, 29148, 53735, 21738, 45252, 18119, 38367, 61736,
-16247, 44396, 4291, 48708, 39035, 1824, 43839, 10405, 39595, 63283, 21399,
-58413, 38622, 3326, 62339, 29533, 48182, 16694, 42897, 7, 37717, 55592,
- 6406, 58334, 31702, 4061, 53858, 27926, 2373, 49451, 27144, 56365, 16057,
-48113, 30234, 34410, 46605, 18506, 42417, 31354, 4498, 32958, 49443, 37474,
-18546, 43210, 21515, 55047, 7257, 49386, 11377, 42638, 24637, 9070, 56822,
- 2986, 23750, 46283, 19349, 53967, 22688, 60325, 30453, 9548, 57757, 29136,
-61230, 7861, 38399, 65523, 17343, 56776, 1449, 39110, 58172, 5860, 60381,
-31714, 54707, 19529, 59035, 3906, 55417, 11521, 63021, 31378, 19470, 58674,
-22174, 46627, 30897, 8920, 48762, 27715, 34166, 45119, 29637, 3, 65149,
-12040, 55801, 15155, 62640, 30455, 47744, 9072, 54351, 36811, 12176, 45928,
- 3614, 53664, 13033, 1376, 40624, 60452, 5705, 55021, 21045, 59210, 18595,
-33600, 62667, 4734, 23896, 55571, 955, 60028, 20261, 40503, 28662, 58453,
-14060, 39308, 3843, 42181, 15503, 44809, 25785, 63193, 13123, 57397, 4765,
-54345, 23635, 64684, 14774, 38021, 4491, 49237, 12217, 51534, 7618, 47400,
-13918, 53754, 37957, 11256, 43622, 16303, 31081, 54766, 9958, 43418, 263,
-40704, 57654, 23504, 11799, 60835, 32536, 13217, 29019, 42750, 15686, 48340,
-25806, 37456, 32843, 27117, 58044, 9239, 44411, 7001, 36457, 14999, 51823,
-11723, 58758, 1431, 51216, 30489, 14880, 52546, 29015, 61558, 7356, 51524,
-34999, 1574, 32924, 49718, 8581, 34963, 59827, 19351, 56723, 13001, 31639,
-40370, 23712, 33840, 53444, 13204, 48493, 25923, 7102, 36607, 10464, 57853,
-33694, 24581, 53888, 497, 59378, 11566, 26483, 51207, 17722, 65471, 31167,
-18796, 59202, 27111, 10757, 62380, 3406, 39830, 14019, 48466, 24130, 51243,
-20324, 3061, 35586, 49045, 29500, 3967, 32675, 51076, 13893, 34371, 60364,
- 4684, 56269, 30114, 1446, 40295, 23252, 52845, 12372, 26679, 55496, 22270,
-57937, 32575, 11994, 45096, 6789, 30736, 46508, 13626, 41660, 4654, 60576,
-31554, 50902, 24132, 11765, 44768, 21202, 37090, 62245, 13227, 41669, 63163,
-34564, 6557, 36262, 64976, 25134, 11567, 57150, 3751, 60473, 10485, 52326,
-27955, 59357, 20834, 1511, 53932, 12889, 47915, 15132, 44673, 23557, 59884,
-18006, 48306, 33645, 27580, 36063, 50854, 13658, 62392, 8744, 39659, 4748,
-49927, 36372, 15721, 45124, 17855, 46579, 14593, 32002, 41439, 25829, 50750,
-22068, 11513, 49587, 25290, 2294, 28390, 50544, 15785, 37395, 25413, 43040,
- 5701, 50075, 37886, 13952, 50622, 3655, 62562, 25167, 37055, 2351, 63626,
-13431, 56976, 38300, 16573, 42581, 3712, 46415, 34113, 5976, 24363, 63938,
-16622, 28024, 61288, 19814, 38305, 25602, 45502, 56995, 23160, 12085, 37611,
-29891, 45454, 8961, 38104, 48355, 16300, 36930, 50242, 16844, 45558, 29640,
-51434, 9002, 44490, 1501, 47742, 25585, 55394, 20189, 59549, 8576, 53852,
-19385, 41864, 22799, 43278, 32697, 9421, 31731, 51098, 19411, 60206, 21909,
-64389, 17459, 38775, 26802, 36635, 6491, 25909, 51355, 33090, 65424, 2326,
-35080, 60966, 17498, 52612, 27960, 14197, 49767, 29538, 41617, 7737, 65165,
-38357, 2064, 57939, 29883, 3169, 56640, 12922, 48856, 17068, 30785, 61380,
-26244, 57083, 22294, 38784, 32801, 26217, 40084, 33541, 6278, 58425, 36206,
- 54, 24022, 48705, 12000, 60315, 28347, 54527, 17157, 64516, 28163, 10269,
-43349, 6301, 50330, 20527, 65534, 11993, 45086, 16772, 42984, 3193, 40144,
-64457, 22073, 52002, 18338, 47650, 12169, 30884, 44731, 21996, 47035, 34680,
- 2393, 32987, 38177, 4930, 46618, 13248, 50672, 37725, 17082, 53385, 20466,
-58606, 997, 62598, 10455, 33860, 50155, 23384, 8314, 43522, 62261, 17105,
-36354, 64996, 7017, 31094, 43852, 11085, 47012, 27052, 58437, 7342, 29121,
-62215, 36868, 14112, 47747, 4807, 19719, 53416, 36126, 27564, 56476, 18373,
-59027, 22287, 53187, 28017, 9085, 20611, 64099, 40412, 18362, 52710, 10668,
-25934, 47848, 22576, 11146, 21496, 51890, 23112, 2807, 40417, 49728, 21669,
-38643, 26598, 41054, 20225, 47574, 12392, 44099, 62244, 28984, 36586, 4171,
-60921, 32592, 1782, 35860, 54072, 5402, 57946, 11894, 61527, 7946, 30681,
-36998, 26298, 48583, 32790, 14923, 64629, 32066, 6591, 51217, 28150, 58973,
- 5340, 55441, 9269, 29001, 63196, 37009, 15226, 39860, 64012, 35264, 8856,
-33159, 62146, 13747, 29226, 57948, 22686, 1692, 64082, 32831, 42796, 16160,
-53576, 18801, 52624, 23219, 49417, 7607, 27388, 51780, 22491, 59036, 28241,
-17181, 53338, 41271, 2652, 39058, 48169, 5788, 31812, 58511, 8767, 29035,
-16600, 51415, 28477, 49328, 2999, 26524, 64513, 24505, 2272, 57415, 29303,
- 8349, 65392, 33360, 13694, 25165, 57055, 22438, 64747, 19146, 42937, 11729,
-46421, 30086, 38626, 11282, 49151, 3111, 51734, 14352, 62187, 27239, 56857,
- 6003, 45195, 10086, 43495, 1149, 31532, 55509, 3612, 58854, 29765, 61783,
-19999, 8175, 27251, 46069, 19038, 30219, 48166, 8492, 64470, 35621, 3365,
-55944, 20845, 53204, 31501, 16537, 50642, 12375, 39940, 51161, 22129, 42114,
- 6182, 52283, 38693, 3413, 42370, 9909, 46689, 2527, 56102, 8775, 64410,
-16783, 47238, 25772, 17995, 56878, 38490, 16064, 43432, 19637, 41625, 12902,
-42921, 3989, 37432, 54047, 16368, 62227, 35386, 1408, 28198, 51945, 4479,
-60843, 24139, 57404, 32273, 14792, 45151, 1477, 41389, 7662, 65107, 37270,
-13715, 56730, 6196, 63510, 28225, 57820, 20018, 54102, 24027, 63081, 4180,
-28584, 42934, 9493, 46744, 29590, 44257, 16714, 39806, 55578, 13318, 59974,
-39172, 14678, 33662, 48040, 1958, 27421, 49379, 15857, 35769, 63462, 14560,
-51758, 17375, 35256, 46437, 20823, 3018, 59812, 25870, 42304, 60929, 24101,
- 2244, 50983, 10555, 40536, 1147, 43310, 11413, 39334, 51782, 35594, 5322,
-27046, 48960, 1369, 59862, 38762, 5196, 56173, 32334, 60637, 9891, 33637,
-54758, 28120, 5383, 62886, 12861, 53741, 202, 63721, 7710, 38959, 32389,
-22373, 9879, 50365, 27157, 39294, 19897, 49960, 27732, 15467, 44218, 22211,
-47325, 18963, 43237, 55200, 1835, 59415, 10834, 56422, 28682, 2260, 41464,
-57068, 23434, 345, 40026, 33570, 16432, 35692, 45393, 4458, 32383, 55963,
- 8239, 22284, 46100, 20613, 49304, 1232, 52815, 44457, 9407, 33580, 47186,
-27807, 8156, 29835, 47941, 6377, 39267, 11496, 43156, 20865, 36932, 61311,
- 5522, 41449, 10386, 38109, 61770, 13027, 27002, 50707, 22333, 13758, 55778,
-42066, 15710, 50641, 39789, 46926, 7627, 63420, 20484, 56229, 41257, 15465,
-49967, 39895, 14277, 44698, 25577, 38524, 3202, 49382, 35607, 5032, 38806,
-12214, 53245, 6156, 61578, 24302, 209, 64301, 33249, 26839, 60775, 29352,
-36623, 658, 48464, 20501, 40225, 29174, 55817, 26862, 34492, 48347, 19091,
-44978, 21272, 46497, 1853, 44141, 31451, 57412, 13413, 52121, 4394, 37879,
-31605, 15458, 47483, 26406, 38593, 10810, 43551, 4500, 44645, 28509, 60522,
-21070, 8242, 64742, 16038, 59154, 33479, 14652, 55233, 20058, 65252, 29024,
-49885, 17555, 45422, 24315, 53486, 12492, 62506, 42000, 7876, 33315, 65356,
- 3618, 55301, 7072, 61030, 21580, 55863, 17970, 31700, 41575, 9494, 29306,
-55476, 41201, 18140, 47203, 34894, 10154, 37961, 5964, 51349, 31367, 62333,
-20154, 52673, 28671, 4651, 50583, 23518, 40962, 16866, 45368, 7395, 42207,
-12124, 43842, 18050, 32918, 56789, 19256, 60170, 26699, 7612, 33395, 57086,
- 5523, 25275, 45091, 44, 28366, 53309, 5803, 22003, 55753, 40364, 20737,
-59390, 2576, 25135, 42148, 5863, 31310, 65377, 10901, 56630, 30395, 37779,
- 9801, 33116, 7842, 34860, 48153, 17247, 62922, 26452, 54611, 19185, 65263,
-25296, 2991, 60961, 30174, 56905, 15287, 41991, 31249, 16028, 50511, 35626,
- 334, 42794, 26664, 47002, 15299, 59232, 34817, 18789, 45652, 23503, 42790,
-16779, 31029, 56848, 2919, 42257, 57479, 16078, 63190, 7895, 55821, 12102,
-65415, 34261, 9873, 62658, 123, 38914, 32369, 17541, 41752, 21935, 43524,
-17928, 38511, 52631, 20887, 11033, 35125, 64096, 19374, 54203, 25068, 61942,
-14234, 51850, 18238, 41532, 27893, 57509, 4185, 59932, 24017, 40465, 31775,
-18150, 38324, 61303, 14953, 54210, 23493, 57657, 19981, 61807, 26775, 59434,
- 4588, 56494, 17208, 31454, 48542, 19011, 54469, 23916, 920, 34774, 56726,
- 9723, 59836, 36349, 24206, 1919, 64910, 32457, 4266, 24407, 33835, 38298,
-13900, 32570, 6659, 52900, 9704, 30953, 61535, 6158, 54221, 14739, 59377,
-11220, 62424, 21317, 51024, 27326, 36463, 32291, 17288, 51339, 36799, 14610,
-47193, 5853, 37733, 12294, 56400, 25420, 38830, 10519, 63055, 2599, 36861,
-12665, 57897, 6947, 61391, 11852, 40477, 15413, 54220, 22443, 49811, 6049,
-41138, 25387, 63062, 20309, 58295, 33970, 6350, 61901, 16897, 59281, 22215,
-36721, 62498, 6862, 24676, 45945, 34364, 27937, 47803, 1860, 24611, 45293,
- 8108, 47432, 35333, 12560, 23420, 60918, 35855, 4248, 32470, 39116, 2824,
-29809, 54224, 10807, 26254, 47241, 30255, 37758, 25593, 45442, 10703, 46892,
- 2414, 59220, 21406, 48580, 22409, 7944, 62941, 11257, 29598, 55768, 20526,
-60357, 24763, 9165, 27373, 44311, 15542, 36388, 58978, 18091, 43837, 11188,
-52266, 24650, 55775, 15859, 61520, 226, 54750, 40098, 7132, 47634, 1612,
-35221, 65245, 18028, 37318, 30107, 61281, 18302, 36546, 64603, 16074, 41212,
-60856, 24487, 7857, 52779, 12404, 32721, 48813, 19056, 60195, 38079, 213,
-44214, 21918, 50317, 15222, 55076, 43365, 21665, 64905, 13363, 44676, 31289,
- 8193, 32515, 45866, 6984, 34365, 47030, 17128, 43838, 9542, 36221, 54536,
-12130, 65116, 29634, 17071, 58585, 13941, 53070, 6002, 41365, 11849, 50343,
-31173, 6766, 61489, 10786, 55640, 36496, 19428, 48160, 29690, 6089, 37166,
-30853, 45940, 17351, 43036, 3266, 51894, 28722, 37012, 25651, 55993, 6644,
-60936, 11376, 47733, 5623, 63014, 9834, 33767, 61577, 29222, 48629, 13247,
-43525, 8579, 42188, 2176, 47524, 24103, 59517, 572, 48852, 16858, 43795,
-36158, 9923, 65200, 7858, 55731, 4668, 24865, 41663, 3231, 43918, 10438,
-40177, 723, 44571, 15185, 41899, 12711, 46660, 1844, 34835, 63225, 8182,
-49392, 31097, 45556, 18689, 43659, 28888, 7063, 49444, 30034, 37265, 14916,
-60239, 9824, 57454, 689, 42980, 60615, 22416, 35913, 59029, 17693, 34650,
-47883, 20553, 42843, 18561, 45959, 28141, 41231, 9469, 60875, 2848, 57299,
-41021, 7463, 28574, 55988, 20602, 59198, 22283, 44212, 7664, 46174, 15839,
-52144, 23788, 49702, 21555, 45942, 23315, 38382, 25738, 43112, 5629, 64711,
-35313, 9190, 36233, 62171, 21389, 45009, 12112, 42613, 1756, 53985, 22922,
-35114, 50910, 908, 48831, 9846, 20053, 35077, 55633, 147, 53585, 10253,
-37039, 30323, 63469, 17874, 57553, 29986, 670, 53931, 43150, 5887, 27509,
-57942, 11058, 52054, 23177, 45221, 15225, 39853, 57432, 20766, 9883, 50373,
- 936, 35250, 63143, 20142, 52749, 26137, 39678, 5148, 58411, 31741, 38453,
-25737, 50741, 875, 42292, 13783, 47964, 33221, 56832, 2717, 61247, 8766,
-26625, 48285, 1297, 60902, 35405, 3497, 30239, 49084, 20980, 36301, 29202,
-15372, 64035, 35957, 22043, 50168, 10212, 53708, 2829, 51639, 12224, 48628,
-27210, 11351, 50891, 26328, 9401, 34589, 44956, 18048, 38788, 57315, 10566,
-54949, 33721, 15037, 52531, 18002, 41006, 5186, 63724, 26980, 1005, 52723,
-29262, 40961, 4087, 55843, 21982, 61652, 14514, 30593, 57996, 12595, 53580,
-22919, 59437, 25907, 3663, 33618, 39996, 6801, 49319, 36594, 22927, 35025,
-61639, 20852, 44062, 1735, 54117, 37234, 19858, 46228, 26930, 5647, 59718,
-11251, 64342, 25444, 55185, 809, 24556, 60290, 22394, 40510, 20546, 59195,
- 5033, 49332, 14371, 45360, 29823, 52369, 26232, 54607, 30420, 49378, 24169,
- 4302, 44687, 7082, 51912, 27639, 60809, 15568, 56398, 29874, 7394, 37741,
-31772, 12089, 54851, 29677, 15638, 52413, 34538, 22463, 42694, 30419, 51384,
-12672, 56886, 31800, 64874, 15689, 54898, 22958, 52084, 29385, 64332, 25036,
-53726, 14083, 27001, 43951, 15620, 52973, 7398, 64707, 3835, 37840, 62361,
-16949, 55114, 6383, 52737, 29289, 49961, 18234, 47856, 25441, 11152, 44432,
- 3557, 29092, 45925, 1173, 31708, 58062, 4544, 55319, 33041, 508, 54798,
-31529, 18340, 46149, 26091, 12544, 52512, 39406, 4160, 42909, 13534, 50068,
-17919, 65012, 28267, 59665, 6658, 35838, 11126, 54911, 4218, 64049, 13652,
-52868, 16371, 49398, 30760, 18009, 59296, 26987, 769, 53674, 7470, 56350,
-17094, 49098, 13173, 45263, 8278, 30803, 41653, 24849, 56967, 32693, 49933,
-13154, 42197, 18489, 61318, 20398, 50516, 6618, 43638, 34452, 16528, 59620,
-31421, 15648, 33728, 50504, 20535, 44517, 16316, 60051, 5766, 63331, 31115,
- 2047, 34957, 61997, 22450, 58579, 27252, 7513, 33320, 37977, 11841, 64627,
-30558, 13474, 51248, 3351, 44292, 14449, 61632, 27645, 53548, 4162, 43274,
-16570, 41314, 21340, 38522, 55470, 14996, 39668, 31211, 12979, 58717, 38889,
- 8977, 41174, 58026, 10954, 52135, 30495, 12565, 56259, 25910, 45223, 21246,
-41452, 19944, 42833, 6559, 54362, 37630, 3350, 46233, 30620, 54052, 851,
-64360, 27067, 4445, 42846, 28725, 7665, 43390, 29529, 61529, 11913, 45230,
-16680, 39036, 49118, 18981, 7106, 58209, 20516, 33603, 49575, 2567, 35493,
-50337, 21315, 42555, 782, 39098, 7157, 49687, 29049, 61419, 20172, 55152,
-25815, 9187, 63492, 3288, 29378, 49181, 16985, 64197, 15590, 33152, 58354,
- 3381, 38582, 49631, 17417, 43261, 20842, 46669, 14350, 50893, 38151, 6820,
-47392, 12977, 44765, 16000, 42194, 19501, 64259, 23941, 2864, 36771, 12487,
-39164, 902, 19995, 58440, 39139, 18097, 60225, 36198, 3095, 34087, 46288,
-20614, 39784, 64740, 13754, 42590, 62593, 35259, 6275, 45729, 30676, 2491,
-57283, 10571, 63385, 19841, 47663, 21837, 6792, 25945, 46147, 32411, 9115,
-36540, 3129, 35892, 9953, 33939, 57944, 39239, 3387, 60993, 22859, 40049,
-29958, 49031, 25208, 12630, 45354, 23067, 43185, 19453, 39371, 32027, 62141,
- 7262, 54673, 33558, 65146, 23505, 55389, 15819, 63132, 12014, 40513, 26158,
-37034, 20124, 47664, 17013, 38071, 58178, 8413, 41989, 63640, 22874, 15184,
-62672, 32562, 55128, 1405, 40932, 32264, 3752, 37171, 22186, 58200, 40572,
-17252, 41988, 20350, 47073, 73, 59944, 34351, 3283, 50967, 12546, 33120,
-48054, 18608, 40113, 24579, 36617, 28846, 60508, 25671, 56114, 15736, 64263,
-13712, 39377, 3506, 26724, 63814, 23198, 48301, 4779, 41678, 12650, 55921,
-27294, 4012, 49301, 36579, 9163, 63830, 41139, 12170, 61692, 993, 37609,
-28869, 48908, 18287, 52645, 24297, 51374, 14784, 40348, 16825, 52207, 29496,
-57835, 4689, 49941, 19164, 43848, 35392, 23047, 54802, 17737, 46834, 35131,
- 9440, 32407, 63735, 23204, 51826, 10646, 48744, 30306, 4282, 33538, 64296,
-19352, 44842, 26304, 16597, 64871, 28403, 6302, 33594, 44035, 3241, 32364,
-42081, 5220, 34784, 61767, 8117, 57536, 22975, 63617, 16618, 29318, 58498,
-20509, 62958, 17126, 47146, 21769, 36302, 60665, 16139, 47990, 24335, 54115,
- 4126, 25494, 49546, 31730, 53412, 8626, 32710, 60066, 34781, 26163, 51181,
- 9227, 39091, 24806, 47754, 5455, 63226, 16217, 55194, 19695, 64466, 21466,
-45196, 8541, 42673, 2177, 46141, 30822, 40506, 20039, 57862, 7918, 38180,
-28842, 47572, 9098, 28011, 51824, 18374, 31627, 53962, 1640, 40292, 8286,
-58889, 33836, 15644, 53692, 27760, 63911, 8440, 56513, 30680, 51528, 7601,
-35065, 57376, 20835, 65010, 22923, 51594, 35511, 8969, 29723, 47809, 13750,
-22963, 57556, 24773, 10593, 53767, 4649, 27167, 52641, 23059, 3437, 25969,
-60487, 13069, 51028, 25080, 39100, 28191, 36919, 281, 29759, 60933, 33155,
-52445, 4933, 60428, 27522, 55783, 21860, 58542, 43464, 20406, 6150, 23506,
-47546, 28649, 11839, 58871, 13460, 21166, 57899, 39616, 239, 57224, 11489,
-63684, 2782, 12352, 36770, 27783, 40725, 20111, 9329, 41733, 5500, 49132,
-27723, 51999, 21374, 64347, 10638, 56399, 14023, 62892, 4021, 23928, 50104,
-29862, 1753, 34672, 47660, 27069, 9131, 24912, 45245, 11467, 51080, 20122,
-47808, 33677, 1624, 30581, 61122, 8324, 56178, 25046, 39991, 31682, 19754,
-57041, 24118, 40860, 57805, 9946, 31389, 64966, 4115, 58604, 9049, 38192,
- 2953, 40113, 32903, 5798, 51793, 18184, 58256, 43307, 7465, 38629, 15290,
-57762, 25590, 45020, 19129, 38940, 60559, 14304, 22296, 51874, 26728, 3015,
-47962, 17120, 31706, 56696, 12824, 25201, 42113, 11392, 43379, 6770, 46577,
- 4459, 48688, 12263, 44466, 17450, 40486, 14419, 55986, 203, 61130, 8818,
-29570, 64101, 6117, 24379, 49745, 16239, 37839, 6606, 29369, 62850, 18451,
-58277, 24526, 53867, 9460, 49187, 5191, 53270, 34431, 2112, 51681, 22359,
-60707, 17148, 38829, 62209, 17911, 58769, 15515, 31087, 47779, 13757, 39857,
- 2057, 33928, 45686, 12942, 42266, 4797, 39780, 11574, 56129, 8200, 29505,
-51721, 1659, 62566, 13685, 33945, 57777, 20321, 2460, 28156, 62800, 24150,
- 3645, 46373, 12531, 35845, 60509, 15415, 57581, 18587, 40482, 11025, 36834,
-28594, 46210, 11684, 41034, 16708, 52107, 14824, 59950, 17574, 55920, 12403,
-52344, 25512, 33587, 56558, 5028, 21590, 61072, 41204, 13803, 65204, 8693,
-34197, 62431, 22415, 44675, 29190, 4343, 62101, 32840, 2189, 36118, 48624,
-25118, 1299, 38013, 27266, 47394, 10205, 42345, 6843, 45098, 16416, 56219,
-26770, 63939, 1664, 54859, 33346, 7585, 37224, 63365, 17518, 35149, 44548,
- 8078, 48353, 31334, 53569, 18096, 47956, 20147, 62738, 5575, 53423, 18922,
-58945, 39827, 11941, 44864, 16319, 40697, 17714, 43080, 13602, 47195, 8377,
-27319, 52388, 31779, 65464, 17443, 55545, 34638, 1542, 50828, 35713, 7821,
-30695, 51558, 20788, 37602, 26478, 46650, 59192, 17621, 53064, 1974, 58351,
-32137, 51449, 24751, 38539, 8862, 35330, 2708, 32029, 42577, 5912, 44321,
-20826, 49090, 33325, 14297, 55528, 22095, 58479, 5452, 53415, 31672, 59805,
-17168, 61802, 30954, 57398, 8608, 63438, 26972, 51351, 19242, 44991, 29892,
-10281, 62866, 7545, 44494, 11432, 47512, 5017, 21814, 50307, 38296, 16080,
-46449, 14826, 51829, 18580, 63328, 20070, 53445, 28546, 34986, 46155, 10073,
-32279, 20523, 59882, 31602, 10866, 52331, 1269, 62960, 8927, 23918, 53020,
-32616, 6774, 38655, 54323, 22836, 39854, 50869, 8116, 33077, 55080, 3887,
-59661, 27228, 64034, 19989, 42571, 23343, 64953, 1818, 31599, 61697, 26726,
-34486, 45507, 15938, 48231, 37116, 19035, 39824, 59446, 1878, 55167, 20121,
-57312, 40087, 78, 45646, 8186, 42351, 20941, 37075, 27627, 59842, 11798,
-47526, 20715, 36081, 48805, 12323, 53846, 24769, 10507, 50821, 23350, 49342,
- 577, 36876, 28485, 52643, 25756, 59844, 7434, 55086, 18996, 51601, 23295,
-43343, 18477, 49558, 37314, 19521, 42046, 22067, 38166, 47235, 9544, 40859,
-55840, 36274, 11102, 35546, 54172, 22269, 64428, 455, 28513, 43959, 6356,
-31493, 53382, 26191, 59096, 4540, 34491, 55947, 1603, 58731, 30871, 38603,
-25085, 43983, 4660, 48115, 35705, 1168, 45089, 14127, 50936, 39894, 25031,
- 693, 48426, 20377, 44225, 27397, 12646, 50023, 16668, 52568, 23692, 42676,
-18320, 50281, 22981, 10706, 34728, 61758, 18658, 58125, 15247, 53619, 28305,
-58692, 13621, 40949, 3916, 46688, 21000, 43031, 17135, 45650, 27534, 49922,
- 760, 30546, 51468, 19427, 60972, 15309, 41255, 9347, 43207, 1052, 40109,
-12347, 44822, 14213, 43393, 8450, 25356, 54632, 2592, 63647, 31251, 53143,
- 1457, 63116, 24655, 35243, 62023, 392, 45125, 10665, 41742, 6553, 46879,
-31402, 17848, 62899, 26373, 47299, 10125, 61351, 5553, 53878, 21636, 4800,
-42647, 13690, 47027, 35953, 22164, 12959, 61961, 16711, 57304, 44693, 24388,
-52605, 13320, 60498, 30229, 38883, 8809, 64836, 35635, 6656, 40285, 12990,
-45562, 17706, 40040, 3361, 42196, 26319, 5625, 23789, 42026, 18462, 43789,
-11954, 39065, 3055, 53436, 34826, 26663, 51723, 17121, 62028, 20549, 37252,
-63897, 26333, 2559, 52969, 34099, 26317, 35410, 44652, 7181, 46787, 11331,
-59603, 1583, 24241, 62788, 36321, 51108, 2290, 45919, 35140, 22328, 40311,
-28776, 33825, 46140, 2395, 41435, 59094, 20926, 9837, 62827, 5174, 21800,
-64759, 40926, 17476, 47100, 35220, 15864, 32831, 53504, 9128, 54780, 14075,
-34571, 46351, 5765, 47715, 9980, 24011, 57296, 28589, 2624, 53759, 10508,
-32947, 43498, 12173, 47072, 32680, 14412, 53066, 25759, 32670, 61081, 2468,
-51203, 14012, 39458, 32905, 25042, 62563, 5673, 29696, 44464, 1097, 46767,
-34190, 4393, 40480, 13147, 55608, 17614, 62816, 4990, 48853, 21536, 40463,
-27213, 37323, 10288, 61984, 2906, 59039, 26658, 5426, 63899, 11027, 56393,
- 6938, 26959, 64689, 23113, 13345, 50304, 21146, 48440, 7665, 43364, 14603,
-40378, 54907, 17230, 62370, 38349, 1921, 43421, 15246, 51006, 25318, 17825,
-47949, 27116, 5581, 64002, 10517, 29796, 61166, 23468, 15066, 65529, 22516,
-59531, 31790, 11310, 49972, 35109, 26370, 58027, 4815, 55400, 37913, 3123,
-60114, 10261, 38729, 7165, 57280, 14140, 61239, 29511, 52976, 13461, 40925,
- 4414, 42739, 32568, 1999, 31785, 47175, 21907, 61113, 33811, 9730, 34918,
-61849, 12034, 58580, 20045, 42747, 59204, 9612, 38685, 1938, 54493, 18765,
-63658, 28274, 58791, 22085, 54142, 27552, 61396, 17246, 56202, 36235, 20669,
-42512, 27981, 7997, 22740, 42042, 29853, 5925, 49473, 13241, 41109, 16713,
-51521, 29733, 60538, 15831, 54922, 36297, 4371, 50178, 15196, 42159, 24574,
-43685, 15591, 41022, 55954, 19576, 63310, 26415, 5175, 59893, 35084, 319,
-42608, 30994, 6708, 61312, 17249, 45764, 25632, 1322, 54175, 29197, 16354,
-52127, 27600, 60976, 23096, 35897, 65434, 11855, 56998, 15471, 52350, 32558,
-48267, 14147, 52838, 4485, 58572, 21587, 65130, 16119, 47889, 4850, 37488,
-32255, 1690, 53350, 28646, 7958, 43590, 59535, 23514, 9559, 62440, 351,
-27511, 57375, 23412, 42212, 17286, 40755, 52743, 21561, 5479, 25625, 55349,
-16020, 64507, 6391, 56580, 13833, 54577, 17550, 64907, 12931, 29870, 46772,
-34058, 28103, 35265, 46106, 25900, 1652, 58944, 28067, 9400, 49705, 485,
-36743, 28868, 38121, 25828, 59286, 18399, 54091, 21866, 63387, 33163, 6729,
-40934, 60215, 21343, 49292, 27860, 17324, 65277, 26913, 3779, 59594, 35851,
-17183, 49955, 14782, 40838, 23853, 63392, 716, 57378, 7980, 36589, 55285,
-15679, 35387, 64515, 14383, 56520, 28246, 63353, 22459, 33528, 43857, 11097,
-38087, 32332, 10045, 65515, 1166, 58073, 28871, 34042, 45642, 14068, 32777,
-53731, 22700, 47686, 17782, 33051, 51023, 756, 34992, 59033, 5660, 41421,
-26659, 58664, 18883, 56389, 26605, 10727, 50664, 24375, 13231, 57210, 32605,
-63678, 8922, 38697, 61920, 13590, 33365, 46955, 22097, 36629, 51660, 8296,
-33316, 46869, 30945, 8985, 36525, 2694, 62622, 13512, 52769, 7671, 36134,
-46651, 17127, 31074, 43025, 24833, 32526, 64892, 26433, 34877, 45112, 3532,
-42037, 6357, 45963, 23729, 63255, 20540, 55350, 24140, 62249, 5809, 52155,
-11190, 28448, 54139, 25833, 3388, 50814, 35859, 5280, 33967, 21839, 32469,
-49038, 25601, 34352, 46958, 5073, 37696, 11453, 42546, 7122, 36735, 2884,
-47065, 28927, 5259, 51666, 10803, 56344, 32640, 59858, 15635, 55232, 33520,
-19486, 56286, 24076, 59019, 35023, 2568, 25543, 43645, 9217, 45737, 21452,
-33419, 58238, 2412, 55259, 10724, 65067, 30461, 25312, 46033, 8010, 39706,
-52348, 16077, 48467, 26211, 53980, 12425, 41230, 22777, 50288, 7577, 37182,
-58805, 18630, 41164, 47431, 2463, 43218, 10210, 50725, 722, 28570, 42960,
-20337, 46282, 8858, 63977, 294, 55780, 28299, 37266, 25914, 46478, 12787,
-42056, 23563, 59648, 18653, 55293, 40268, 14579, 46685, 33458, 19300, 11271,
-40530, 55136, 20795, 49159, 32625, 10381, 51409, 3860, 65511, 27942, 8722,
-47083, 30971, 44148, 9523, 29859, 42835, 24259, 34353, 47548, 4519, 44042,
-35404, 25109, 55172, 291, 59964, 14192, 57139, 10999, 53790, 36912, 14951,
-38757, 62550, 21394, 57270, 19059, 61250, 3287, 51486, 8293, 39852, 11073,
-43203, 3037, 38887, 52286, 22781, 11384, 44219, 4981, 57807, 34978, 7227,
-36276, 44475, 23123, 8910, 64669, 5059, 33889, 56491, 7053, 29740, 43066,
-22565, 46363, 18917, 32320, 50678, 9870, 30795, 41047, 20900, 37793, 9011,
-51817, 6102, 59484, 24659, 56731, 15813, 51955, 23870, 46327, 14700, 50000,
- 7114, 20955, 52696, 39309, 12453, 44017, 3433, 39177, 58303, 15031, 30526,
-46211, 16974, 31556, 62086, 1543, 38752, 31359, 5014, 49484, 33823, 3071,
-35475, 46458, 22683, 6097, 28012, 48325, 23573, 3524, 36976, 57627, 12278,
-54805, 560, 20615, 39689, 57451, 3706, 55623, 27661, 54324, 22098, 42455,
-33237, 22833, 63382, 15397, 29863, 60784, 10956, 57066, 14649, 45996, 362,
-48335, 9921, 27990, 54842, 19331, 59606, 16945, 51844, 11459, 44580, 8002,
-48313, 14268, 43893, 18538, 39349, 59294, 6462, 48888, 36752, 14633, 23915,
-44766, 64946, 11607, 57013, 5898, 62061, 10360, 27313, 57692, 20924, 55237,
-26669, 64271, 23170, 52251, 19838, 37544, 65105, 17961, 46105, 15046, 47902,
- 4219, 44529, 9666, 51264, 37091, 3569, 45850, 7727, 21622, 63571, 39467,
-14131, 56869, 30601, 64546, 8514, 38941, 31235, 19148, 50795, 36051, 1035,
-34374, 11383, 57138, 32056, 20302, 45051, 7337, 63584, 20884, 34045, 58252,
- 2051, 28585, 62572, 30820, 10878, 49808, 5307, 31353, 61690, 21422, 54757,
-25968, 33671, 48620, 6915, 53862, 29663, 37082, 23079, 33762, 39296, 10047,
-62282, 7188, 33455, 57130, 935, 50267, 10837, 43230, 8498, 27560, 56633,
- 5857, 60613, 36344, 52087, 29157, 4585, 43902, 12912, 61076, 37384, 21898,
-44271, 19223, 37973, 56661, 14597, 58523, 16758, 61447, 39232, 3299, 60301,
-10279, 26637, 61812, 22179, 7243, 48341, 11611, 43301, 16645, 50200, 3747,
-42378, 18852, 32025, 55566, 5508, 24301, 43263, 8009, 41995, 12394, 44145,
-20996, 48259, 27962, 60534, 17281, 56515, 26430, 13765, 64378, 35186, 25901,
-51085, 14752, 45597, 24700, 60497, 13323, 51435, 29684, 38502, 26371, 47335,
-18264, 32323, 52806, 17609, 54562, 12596, 61273, 2593, 26696, 59044, 6972,
-54769, 3113, 60535, 25471, 42311, 32384, 20522, 40471, 2649, 42721, 33984,
- 5602, 32892, 56458, 24652, 35335, 64214, 28200, 354, 59637, 24196, 61740,
-29494, 5240, 35623, 60722, 9925, 53071, 36800, 15240, 49216, 16603, 63542,
-37422, 13527, 59546, 28756, 65466, 9492, 55546, 31362, 52353, 16168, 41719,
-53568, 28793, 7517, 44948, 16448, 41948, 62337, 27780, 13043, 44317, 17883,
-41869, 14525, 48766, 8593, 57590, 3853, 32115, 47934, 1337, 39917, 34037,
- 6325, 52037, 18902, 55981, 20768, 62918, 39619, 11985, 47550, 30693, 36705,
- 619, 38532, 16292, 59967, 26866, 37757, 30141, 65362, 241, 24702, 44325,
-12754, 64181, 32216, 55968, 8723, 26488, 41434, 17232, 45430, 23131, 36122,
-43527, 14247, 47885, 3607, 45814, 14983, 42125, 12775, 59691, 7747, 31755,
-40434, 859, 62254, 26691, 37869, 19991, 64782, 26436, 14718, 60269, 18712,
-32416, 53662, 27649, 5695, 51090, 23120, 755, 27353, 52550, 17214, 60773,
-34654, 6948, 23304, 49405, 62330, 27931, 37571, 2928, 54635, 11896, 31612,
-39402, 4450, 52839, 14459, 32908, 43943, 15943, 46537, 22587, 33759, 59706,
-13503, 36831, 7338, 34937, 13949, 58904, 18682, 62105, 25127, 2630, 56412,
-13354, 60143, 16814, 51539, 22724, 49308, 15661, 38613, 31180, 19444, 63203,
-21768, 58123, 36530, 18056, 42418, 25178, 1044, 22045, 63527, 38085, 18869,
-50529, 6151, 28413, 59116, 13730, 54740, 5067, 32295, 36678, 503, 48928,
-32009, 19971, 46791, 18811, 38150, 50535, 16322, 40823, 58450, 28162, 62312,
-18983, 39720, 20684, 45186, 13567, 63927, 7293, 43776, 29855, 48253, 14556,
-51802, 26976, 56326, 15582, 63619, 32561, 838, 31703, 41422, 7302, 50135,
-32521, 1309, 47234, 8664, 30115, 62656, 636, 52473, 21212, 48262, 2826,
-58628, 15437, 54772, 11313, 61867, 39305, 10578, 44543, 4509, 41103, 21180,
-48555, 39340, 17789, 47191, 23754, 45105, 17188, 49061, 1748, 64915, 12533,
-53633, 27899, 58696, 17184, 62099, 12809, 39614, 2418, 44791, 9778, 48221,
-36518, 18450, 41698, 13199, 49105, 25463, 45058, 19794, 42607, 25176, 6649,
-56017, 29013, 43029, 10105, 24871, 46875, 21119, 42771, 18805, 40951, 19947,
-45417, 171, 61198, 10056, 21351, 64920, 40224, 19571, 59193, 32409, 7260,
-53180, 37046, 21775, 63286, 6300, 58602, 34988, 24393, 40201, 27686, 55736,
-18590, 54118, 20973, 64070, 27103, 33076, 41566, 9300, 37783, 5399, 22902,
-58636, 25055, 7751, 64694, 27277, 53903, 29391, 36191, 3223, 50792, 9506,
-23148, 49884, 32627, 17090, 53060, 22841, 1321, 39888, 29998, 51892, 2530,
-53128, 29917, 8393, 56525, 56, 65394, 25029, 38744, 20163, 57242, 1327,
-49314, 25120, 44598, 18892, 50576, 25107, 36628, 12446, 58412, 32012, 2117,
-47437, 39145, 9295, 50627, 40669, 11688, 46665, 35798, 16083, 59453, 32594,
-44294, 10942, 41972, 4925, 48079, 29330, 59375, 16657, 4104, 51901, 15455,
-64621, 21770, 36864, 60415, 17950, 46057, 23539, 38476, 65294, 10026, 55737,
- 3629, 53359, 14770, 39192, 26990, 56352, 24046, 63831, 39545, 5197, 42317,
-11238, 38161, 49289, 19390, 44438, 6052, 47171, 32410, 2297, 30545, 60720,
- 6246, 54380, 34869, 4307, 48967, 31792, 2913, 65330, 10567, 52766, 31732,
-49046, 8844, 26236, 57075, 14946, 34749, 47315, 1185, 39685, 21158, 49311,
-15479, 62137, 24159, 37728, 6860, 53518, 12781, 57618, 30912, 860, 56283,
- 9603, 32671, 3133, 34621, 51725, 6341, 61405, 26429, 52292, 28658, 39908,
-20927, 57928, 2557, 65152, 32742, 4356, 33867, 40231, 6993, 50913, 24389,
-55265, 19405, 61550, 20733, 37081, 55744, 17688, 59109, 38503, 16201, 41646,
-31607, 9652, 32531, 41299, 22420, 42907, 1203, 45993, 29160, 3305, 58069,
-25837, 65386, 15181, 56894, 33122, 11083, 63793, 35148, 13603, 32920, 58429,
-11478, 37272, 28636, 43427, 7169, 36688, 9665, 49251, 28443, 53409, 22276,
-60812, 18737, 55900, 25467, 11522, 57512, 6693, 55146, 20919, 63371, 8778,
-54449, 2730, 65233, 39225, 22113, 3937, 54598, 34685, 60920, 1061, 52927,
- 7859, 54415, 4206, 60169, 12958, 38339, 26995, 33877, 47323, 2327, 26476,
-50864, 4854, 25281, 47944, 23185, 1992, 50413, 11827, 45414, 28262, 97,
-64589, 10770, 46184, 7339, 41429, 14168, 42800, 12815, 48985, 2600, 59903,
-25755, 54235, 32366, 43270, 1929, 34667, 48862, 13963, 45415, 6039, 57932,
-12936, 63540, 20922, 56500, 35008, 12370, 55068, 36250, 7915, 34709, 58240,
-15267, 61441, 21500, 43722, 18621, 62865, 34729, 15585, 50949, 32398, 10636,
-59970, 33370, 11222, 37209, 16108, 54923, 3293, 57687, 9302, 60732, 21525,
-52742, 7105, 40703, 57126, 17744, 31380, 63005, 22760, 1181, 57301, 19913,
-61177, 31014, 7523, 48854, 18771, 61785, 24061, 51760, 19735, 43126, 12006,
-41352, 47639, 18640, 44381, 8560, 50007, 27170, 1588, 51577, 10420, 59362,
- 6380, 25451, 48702, 29622, 37943, 24624, 64462, 24, 51764, 10538, 48227,
- 3023, 28452, 47408, 22545, 51004, 31344, 9379, 59007, 26525, 40279, 15022,
-64210, 25584, 45440, 17931, 42967, 14282, 46962, 26545, 37446, 14839, 51210,
-26282, 47751, 19602, 61595, 14163, 33670, 46792, 2174, 30605, 64628, 16859,
-53963, 11553, 63213, 30090, 40968, 8456, 51271, 13374, 65023, 26031, 44524,
- 7901, 47979, 27829, 37201, 23646, 44792, 54843, 14563, 23064, 46367, 30613,
- 8991, 36366, 1137, 60288, 10429, 36139, 28059, 37829, 20366, 60098, 18000,
-54438, 30787, 13561, 42639, 5302, 43854, 14397, 48065, 10699, 27612, 42793,
-24429, 3984, 55111, 19808, 56964, 26360, 63221, 6723, 53809, 13739, 63950,
-34983, 16547, 50106, 36337, 17036, 33849, 42186, 6598, 24998, 53454, 417,
-27221, 52899, 4972, 39920, 26699, 57064, 14113, 55314, 21177, 61479, 26178,
-38350, 3911, 43519, 8577, 29535, 42166, 5802, 50774, 38253, 21633, 43043,
-32540, 1633, 31448, 40372, 18424, 47286, 30997, 14059, 58509, 41862, 22794,
- 7146, 28096, 44192, 15064, 38945, 16661, 48776, 34689, 25076, 51703, 6863,
-56935, 14261, 36619, 58167, 15085, 38935, 63585, 9748, 32994, 60442, 25098,
-38268, 19198, 49414, 32838, 17463, 51647, 20494, 61798, 26208, 59383, 5549,
-56320, 23417, 38413, 16414, 47332, 13128, 21428, 56881, 27824, 60937, 17733,
-55559, 21709, 40779, 23247, 46974, 16823, 43264, 5110, 45591, 31221, 3547,
-63029, 27568, 47884, 19460, 45473, 4868, 49778, 10874, 39196, 3980, 46532,
-28630, 37249, 18014, 49493, 6755, 51930, 27930, 62881, 32922, 22515, 39043,
-33371, 27982, 42883, 4653, 30021, 49131, 23659, 11519, 50990, 4812, 42768,
-35323, 49591, 14554, 38576, 3852, 47464, 34675, 13335, 55468, 3045, 38510,
-12517, 64196, 1816, 55811, 24269, 7526, 61057, 30476, 40257, 14817, 57803,
-37985, 22039, 42082, 19115, 50558, 36970, 21242, 7972, 57345, 9546, 30261,
-45527, 21894, 43164, 17626, 32846, 57834, 16496, 55683, 1235, 64435, 28352,
-36341, 3646, 50078, 31270, 8072, 52487, 10563, 57829, 27640, 64573, 7421,
-54969, 11750, 61933, 21294, 39455, 6516, 43370, 3729, 38958, 54592, 17445,
-60119, 40735, 8226, 43217, 20279, 42213, 25245, 2451, 53003, 21624, 42789,
-28460, 40602, 1988, 35306, 62743, 15008, 53351, 5685, 64125, 10949, 26484,
-37937, 65461, 2200, 40626, 57595, 21454, 53957, 23354, 48650, 15830, 50970,
- 8491, 46571, 11470, 42926, 1687, 36905, 58196, 18405, 65341, 30313, 51622,
- 3541, 38662, 62888, 6316, 48751, 33776, 12527, 46731, 4767, 44168, 12875,
-39446, 19770, 45012, 30125, 8527, 59214, 31268, 12860, 47827, 1658, 60249,
-29175, 49494, 16553, 44730, 36103, 10589, 62945, 14627, 51359, 4072, 36179,
-23704, 50132, 146, 47507, 14344, 64746, 23645, 35074, 52403, 15122, 62356,
-31348, 3232, 65111, 14252, 47771, 27769, 53505, 15460, 57285, 35384, 8220,
-49487, 33605, 12584, 51589, 36550, 56704, 18404, 63096, 23023, 57726, 28042,
- 8806, 64255, 21725, 44503, 18597, 48829, 29196, 10691, 49540, 33569, 17710,
-54745, 40255, 16236, 53829, 5708, 62076, 9502, 56839, 37700, 4958, 43536,
-32307, 2253, 31084, 45726, 34739, 8706, 61907, 31189, 4123, 65313, 33683,
- 7321, 46287, 11010, 38048, 2966, 43037, 11634, 52104, 1599, 39034, 26021,
-60740, 14440, 57519, 40413, 16527, 43105, 6142, 53577, 13078, 38040, 20141,
-59466, 25641, 54934, 12500, 60414, 5806, 56308, 26389, 44362, 16815, 41941,
- 4563, 48758, 8787, 63953, 13235, 55411, 17578, 38575, 64430, 16286, 43891,
-34627, 28997, 58649, 20257, 8638, 28285, 65236, 23576, 53851, 17801, 63835,
-26130, 36896, 28808, 53402, 22464, 34277, 46813, 15005, 39037, 52599, 26199,
- 590, 48711, 33593, 6169, 30422, 64046, 3955, 56170, 28173, 862, 60845,
-41715, 18010, 50811, 40314, 12652, 54304, 5734, 62246, 41123, 7828, 38515,
-12733, 43159, 15205, 46360, 21323, 61430, 18507, 57441, 37572, 19538, 41821,
-30992, 1569, 32745, 40910, 22536, 43488, 474, 45386, 12463, 59180, 23281,
-56089, 28449, 7009, 45344, 32566, 15798, 51908, 27734, 61503, 7244, 57266,
-34823, 27004, 60581, 4270, 55803, 18111, 59225, 13714, 29976, 40500, 21521,
-43275, 19853, 39709, 57977, 7736, 33540, 50873, 24976, 13104, 46811, 15320,
-44040, 4717, 63201, 18402, 58663, 25374, 53297, 22588, 62206, 25252, 8803,
-46334, 34628, 11901, 24922, 60267, 29481, 13263, 52940, 16837, 64815, 26758,
-36078, 61028, 18746, 52917, 27430, 60670, 4179, 56644, 25920, 38203, 5458,
-55070, 27229, 52498, 20903, 38919, 11970, 61611, 21594, 55870, 31109, 20561,
-47606, 18554, 41234, 59740, 8215, 29904, 42538, 19696, 51467, 34127, 10421,
-59167, 922, 48816, 36353, 16135, 43895, 28768, 52245, 9376, 61087, 11343,
-46086, 4353, 23005, 60335, 28270, 77, 64085, 31261, 20252, 3467, 40743,
- 9678, 47866, 1754, 43620, 30818, 39653, 2844, 35604, 62686, 4471, 41738,
-59994, 23776, 867, 46530, 27772, 4110, 48638, 13409, 41737, 26160, 43285,
-19936, 30270, 60569, 15197, 52720, 22903, 50138, 11472, 28284, 53139, 18750,
-49754, 35835, 15708, 51442, 41015, 18221, 52918, 24401, 64140, 26689, 58547,
-19463, 32171, 54933, 8303, 29188, 50440, 22319, 9106, 51609, 24129, 60593,
-32356, 26816, 63714, 33502, 7238, 48184, 22212, 40481, 20430, 42503, 12946,
-39756, 2158, 61480, 23317, 53876, 15334, 44936, 24073, 47796, 2002, 46015,
-26725, 10078, 54373, 155, 62615, 10460, 24462, 52015, 31058, 45787, 5161,
-43363, 11055, 39710, 1668, 44733, 10244, 49254, 7100, 58593, 9393, 30567,
-60260, 21228, 10160, 37146, 56038, 19153, 61819, 25222, 53438, 11694, 44597,
-14187, 32779, 46982, 16746, 33665, 63171, 2764, 25753, 60046, 19007, 37174,
-31005, 20181, 51512, 26355, 60467, 20889, 54970, 4992, 52268, 11127, 44979,
- 780, 33560, 63048, 5133, 55191, 23545, 52941, 15368, 60367, 18403, 56297,
-28292, 49748, 16874, 41888, 15457, 36488, 64178, 24704, 5154, 56565, 36377,
- 3158, 33941, 45905, 18496, 47533, 12003, 36969, 32648, 10200, 49195, 33504,
-23948, 54725, 3651, 58954, 12083, 51932, 1433, 31859, 43953, 12462, 19780,
-59659, 37773, 3516, 62413, 30474, 38663, 27270, 44685, 127, 40797, 6347,
-44009, 16098, 39456, 52304, 27365, 2256, 55935, 40324, 15892, 46607, 22756,
-34810, 43785, 2184, 54156, 9032, 29903, 42595, 1536, 37192, 15675, 42086,
-21987, 51087, 18618, 62046, 32126, 10328, 35839, 5971, 56203, 31996, 3626,
-43621, 6771, 46139, 34591, 1379, 61899, 30934, 16852, 33259, 64095, 13563,
-57578, 5999, 30405, 46110, 21617, 41005, 29084, 8918, 34081, 60209, 5062,
-24273, 44876, 35616, 26284, 34144, 62688, 43305, 10525, 50680, 24402, 43843,
- 8496, 59901, 32725, 54860, 27058, 33898, 61524, 14570, 55710, 18185, 58036,
-12235, 26077, 53205, 22616, 7871, 38261, 61497, 12302, 36719, 65062, 22713,
-44408, 21254, 58969, 3182, 54912, 12072, 40730, 33465, 8339, 64801, 16786,
-58085, 39486, 733, 45158, 10117, 57647, 29836, 1230, 31068, 62377, 5035,
-44407, 10487, 47233, 6647, 37283, 61900, 17849, 48588, 35886, 967, 34307,
-62161, 28836, 2354, 37235, 10265, 48536, 501, 53926, 31036, 15953, 64562,
- 1572, 54107, 24394, 63457, 21313, 53080, 31356, 9186, 32377, 60617, 28970,
- 6532, 35491, 60088, 15837, 51927, 33969, 23261, 47273, 18369, 44866, 36044,
- 2794, 60596, 13559, 55001, 19608, 60110, 27475, 54352, 22018, 62408, 18025,
-32111, 42236, 26538, 45142, 4560, 42474, 65407, 28473, 14237, 43191, 10729,
-45778, 21334, 49559, 18548, 39675, 59678, 11005, 54661, 5377, 23735, 48996,
-35636, 7560, 33352, 52598, 1682, 58480, 10792, 48809, 3888, 40336, 25330,
-37568, 16352, 40995, 29322, 53517, 13343, 25211, 48167, 16224, 42485, 9474,
-48559, 3962, 31837, 36723, 7837, 30603, 63725, 1956, 53267, 10134, 21361,
-48051, 35385, 12127, 23176, 58728, 26020, 9861, 54936, 4774, 63971, 19662,
-52419, 27698, 38125, 5316, 45838, 11486, 42256, 24576, 46311, 22218, 61182,
-17673, 56493, 29588, 48281, 6086, 27793, 53038, 22882, 11600, 50165, 6821,
-34510, 55782, 19162, 64467, 12816, 57328, 4603, 20722, 59344, 41378, 21807,
- 7941, 54621, 344, 58301, 8408, 30019, 49223, 35422, 22901, 57472, 17551,
-63610, 23413, 55599, 11457, 48318, 268, 42719, 14640, 44897, 22146, 63065,
-41509, 14263, 51103, 36786, 18817, 65164, 15239, 57828, 25384, 42420, 6229,
-54260, 38656, 3210, 46973, 35979, 25122, 60420, 17635, 55188, 6602, 63662,
-25359, 53184, 17264, 32432, 56634, 20205, 643, 50906, 7540, 20914, 30265,
-40710, 17585, 56917, 14707, 37658, 48273, 21940, 11115, 45381, 5170, 24428,
-46611, 5937, 42295, 22206, 45547, 33684, 9610, 35052, 50133, 16914, 26349,
-52273, 29873, 8949, 55166, 1523, 51984, 17149, 37160, 27774, 50541, 1109,
-48339, 27247, 35551, 44076, 6581, 22558, 63784, 25410, 42018, 20213, 40247,
-55186, 14152, 34611, 49921, 22303, 40028, 18790, 51485, 30771, 3889, 44625,
-10806, 64743, 25299, 46205, 15703, 39431, 55444, 18555, 57688, 22484, 41637,
-18236, 44327, 35212, 9849, 47214, 17270, 44128, 4824, 47987, 13966, 45960,
-26745, 43300, 553, 38563, 56897, 14647, 31031, 39926, 3878, 57959, 7994,
-36459, 59628, 6721, 48658, 21147, 33312, 41250, 26078, 36592, 6819, 46337,
-12305, 41594, 5278, 50837, 37711, 86, 63277, 13261, 54334, 22930, 2845,
-34618, 59051, 5171, 54972, 29674, 2342, 35853, 62398, 5950, 26612, 43542,
-22196, 45199, 32381, 9845, 56927, 27669, 62745, 16788, 46413, 24698, 41910,
-18968, 32100, 63230, 8678, 56280, 33675, 65251, 7768, 22342, 60013, 39062,
- 8628, 56638, 31979, 61466, 17342, 38922, 58749, 15084, 54048, 37794, 20840,
-44315, 25693, 38204, 54987, 172, 62324, 28680, 44931, 14709, 50692, 38016,
-22759, 42661, 14198, 44877, 1361, 59713, 16068, 64357, 20054, 57221, 16799,
-63595, 6429, 36549, 10213, 49222, 4803, 37104, 22208, 63376, 42850, 9709,
-33635, 57039, 20043, 60996, 24619, 9900, 49318, 27882, 38052, 30670, 48219,
-35881, 9614, 29982, 61991, 35425, 27307, 32973, 39156, 25160, 62181, 20037,
-11069, 50319, 5632, 47261, 12007, 43588, 6997, 40037, 20506, 65024, 29555,
-51747, 2989, 49150, 9040, 25128, 58722, 27543, 9726, 48982, 29938, 39425,
- 8773, 53545, 21684, 48973, 10986, 23419, 56234, 28588, 9245, 50588, 2040,
-39998, 12670, 44434, 18355, 42487, 1823, 38670, 49613, 8111, 40070, 63876,
-22419, 55234, 36766, 2134, 59266, 33402, 5338, 45662, 29326, 2266, 34363,
-64994, 18992, 57171, 38187, 17000, 52358, 12837, 61012, 1193, 55180, 28416,
-64703, 3029, 56779, 39856, 5436, 47717, 20593, 38639, 33919, 11100, 32760,
-64390, 15393, 34615, 62301, 13604, 55260, 3635, 24088, 49462, 33301, 11087,
-52191, 4703, 60270, 8407, 26703, 45878, 23892, 11859, 56318, 15, 59856,
-34757, 15422, 53431, 23882, 40356, 20974, 53752, 10099, 57048, 6395, 33308,
-44943, 4440, 50687, 11348, 61793, 3733, 58410, 26795, 32646, 57842, 11389,
-36564, 28864, 57050, 3840, 64661, 16014, 51657, 20601, 33714, 50928, 9424,
-61916, 21241, 41316, 30531, 15332, 31669, 54050, 25510, 56896, 9149, 62139,
- 613, 52675, 32145, 18387, 59177, 23617, 57387, 27227, 13860, 47988, 23669,
-40041, 16602, 49188, 20917, 46712, 12222, 41182, 15176, 39218, 57634, 24173,
-13279, 51489, 34805, 3154, 64988, 12213, 58222, 38771, 20537, 42839, 4595,
-39408, 11626, 64935, 6825, 56801, 36824, 14699, 43583, 27986, 2191, 23499,
-51277, 35334, 3459, 27894, 46604, 23034, 2757, 28257, 44538, 25130, 11015,
-47708, 26786, 5371, 56763, 11344, 61268, 7551, 31281, 41186, 19767, 51582,
- 6625, 65215, 29275, 744, 56175, 16717, 58355, 24452, 40731, 11169, 51169,
-30492, 39013, 30, 50480, 28423, 33121, 54273, 26053, 38543, 28166, 58753,
- 571, 34072, 19087, 55549, 40549, 1868, 42427, 14833, 46983, 30094, 36702,
- 2769, 51256, 10681, 23150, 63997, 19280, 48922, 3928, 51976, 17338, 64238,
-12202, 47069, 4319, 40573, 59282, 28826, 39263, 24446, 53990, 28133, 60035,
-16519, 52274, 25545, 8164, 33309, 59794, 23163, 34673, 46310, 846, 40520,
-60755, 24184, 2291, 50137, 27680, 37565, 13176, 34209, 62613, 40523, 15145,
-44635, 22518, 34547, 63180, 15949, 53824, 27965, 56882, 12129, 58792, 14016,
-23191, 59633, 27254, 12956, 44447, 17095, 47566, 31351, 15602, 52375, 26449,
-62972, 16499, 56285, 42976, 7275, 51301, 29572, 11662, 63804, 34299, 25297,
-35408, 47559, 14819, 41504, 16348, 46201, 32771, 14540, 59354, 23371, 62417,
-12840, 57600, 27284, 49803, 4537, 46631, 9158, 25595, 44826, 19075, 37782,
-61258, 15863, 56602, 36852, 15168, 43279, 17259, 36649, 63456, 3359, 58126,
-37684, 20921, 43257, 25262, 7875, 63651, 33196, 13182, 58926, 5372, 29950,
-42313, 19912, 47659, 13778, 28248, 65284, 24021, 40010, 20138, 46050, 14317,
-51501, 5441, 38785, 27444, 62029, 16462, 33673, 39315, 22824, 48489, 11372,
-59380, 5012, 25105, 46417, 28374, 53528, 12267, 63759, 44096, 1845, 39270,
-12514, 37593, 31047, 19001, 49474, 16759, 64138, 38304, 3212, 47668, 9127,
-34428, 53561, 19572, 56386, 5637, 58205, 35963, 62759, 26535, 53634, 19497,
-64365, 27080, 8821, 34104, 47793, 19685, 56691, 30838, 17820, 50362, 25096,
- 1157, 48170, 15300, 50976, 21608, 44063, 18200, 47057, 30989, 391, 51726,
-19644, 60925, 31603, 46281, 15990, 44319, 30597, 58110, 10819, 62836, 32827,
-54573, 5748, 64785, 35282, 1287, 62652, 41364, 19437, 46730, 17908, 43375,
-22514, 59958, 12969, 32338, 41779, 10926, 48526, 20679, 40927, 32120, 6389,
-50526, 20517, 46765, 25667, 7003, 48652, 27193, 37065, 13264, 47858, 2651,
-62461, 13632, 50477, 18159, 41023, 52075, 6935, 30360, 13646, 65043, 26445,
-55015, 4121, 58016, 13207, 61492, 21449, 56164, 34313, 743, 53683, 25183,
-45159, 13424, 43904, 5841, 53391, 18842, 56490, 31683, 21506, 906, 60644,
-10128, 36384, 2571, 32042, 44588, 4618, 36181, 57390, 13902, 38102, 5257,
-64693, 19471, 54479, 21699, 8060, 43289, 56829, 16648, 63870, 4316, 58820,
-26458, 692, 31541, 59899, 4791, 54747, 11475, 26400, 47847, 36182, 3603,
-34051, 45359, 21523, 46690, 35150, 2936, 51311, 33166, 4836, 58050, 11638,
-64560, 34863, 7796, 38952, 10041, 40615, 32084, 13965, 30671, 39938, 511,
-48210, 31595, 3722, 49913, 8427, 27433, 58998, 5565, 54390, 25239, 8670,
-44569, 31320, 2131, 32311, 42796, 6268, 45391, 16605, 54332, 20554, 58534,
-38917, 5899, 59238, 28222, 9448, 47491, 2707, 29734, 62791, 21808, 54437,
-29670, 13394, 50764, 31875, 7148, 61408, 9733, 54499, 29023, 41547, 2074,
-49312, 26327, 34185, 51774, 2828, 63223, 23361, 58796, 38530, 12497, 43629,
- 7095, 53348, 30222, 37848, 23837, 60681, 13575, 49852, 815, 45204, 10150,
-58821, 7594, 29332, 43871, 18513, 41838, 65497, 20000, 1065, 36285, 49476,
- 5789, 26895, 51787, 19931, 64939, 3652, 55688, 38842, 6294, 42731, 10728,
-28470, 55370, 19096, 31135, 64869, 4009, 43269, 11639, 45663, 30786, 8090,
-32537, 1098, 31719, 42895, 3782, 51333, 30134, 63054, 219, 42073, 8323,
-46894, 35976, 7074, 34189, 63716, 12906, 55868, 31429, 61009, 2426, 54517,
-35613, 15658, 59373, 12578, 47449, 6445, 53162, 10447, 62575, 5363, 52072,
-18204, 43443, 19934, 40988, 14722, 45865, 18268, 51114, 30893, 16256, 33713,
-52892, 2645, 32156, 57260, 4688, 33704, 52656, 3011, 59409, 21745, 34513,
-57743, 11584, 61804, 37191, 13230, 63125, 3373, 35042, 61231, 14078, 55897,
- 7661, 60362, 19053, 41691, 22639, 42953, 7281, 64683, 10774, 26215, 61285,
-36434, 51119, 32529, 9238, 31684, 40251, 22009, 43090, 17143, 41953, 7558,
-46028, 27492, 39778, 8511, 30757, 58940, 20274, 41063, 15211, 44852, 35345,
- 9567, 51600, 42757, 18455, 32317, 64443, 20751, 54784, 12730, 61728, 17074,
-41748, 27125, 53984, 31906, 36555, 9973, 30915, 50820, 38157, 14768, 29365,
-36006, 11603, 46822, 18312, 41205, 51815, 12880, 35647, 48223, 19771, 40514,
-55952, 7110, 22158, 61201, 24385, 6295, 64404, 9262, 55771, 31024, 15725,
-61437, 38444, 20676, 42151, 4101, 49480, 21973, 60643, 20204, 54569, 4283,
-62235, 43986, 17579, 60462, 35499, 21258, 53987, 17392, 62775, 37230, 21551,
-43271, 19545, 37830, 63396, 17446, 55426, 25701, 53110, 15619, 60375, 24328,
-39485, 8114, 36849, 31866, 21646, 51346, 17391, 49821, 31016, 38660, 24677,
-51056, 8003, 44684, 1732, 47247, 24438, 39728, 16898, 48802, 27775, 45522,
-14507, 50256, 16213, 57812, 36117, 8632, 61360, 13539, 45875, 31809, 8205,
-35338, 1214, 54814, 15214, 59288, 27956, 1885, 49404, 10966, 33566, 41088,
-20578, 55790, 19446, 51989, 24049, 35103, 62548, 2348, 55600, 32785, 7776,
-34339, 56441, 22953, 14427, 33477, 60817, 16636, 42983, 22885, 47573, 15818,
-28001, 51659, 22111, 47246, 34055, 8383, 35772, 45131, 17378, 39352, 21327,
-62199, 34092, 17696, 48509, 55556, 21447, 61307, 16515, 48232, 22062, 44683,
-17517, 54294, 21211, 61514, 15082, 59131, 27951, 53462, 18409, 44402, 28345,
- 7418, 25300, 41376, 29162, 5924, 49919, 21786, 39802, 26108, 41482, 21168,
-38354, 25654, 42111, 13459, 37884, 117, 48965, 7247, 60806, 24400, 38273,
-11905, 58297, 43134, 9790, 25588, 65069, 39024, 12501, 47459, 16757, 39889,
-24868, 36003, 50120, 5515, 31174, 47545, 2731, 29039, 54444, 34054, 28130,
-53437, 18558, 43009, 20992, 45404, 30399, 52485, 9223, 57717, 16159, 46268,
-20400, 32770, 46807, 21862, 2994, 20382, 45869, 23800, 52834, 14336, 63494,
- 5840, 54587, 31453, 59461, 14766, 62993, 18216, 57089, 37971, 2680, 50482,
-24747, 61213, 1619, 23086, 65453, 33817, 13913, 52461, 41140, 7797, 46569,
-29660, 38419, 24532, 50327, 1726, 46997, 10642, 18718, 56749, 28066, 61173,
- 4146, 32559, 62707, 5719, 54666, 41996, 22453, 53153, 7364, 28101, 64520,
-22897, 10144, 58512, 1282, 29351, 44981, 32606, 9857, 51825, 35631, 29040,
-43346, 17253, 48901, 35972, 8653, 28901, 54166, 15178, 55835, 25216, 41221,
- 896, 50553, 29088, 46739, 24658, 8745, 53185, 26367, 6597, 58714, 10637,
-44384, 29056, 2580, 53534, 11163, 60084, 321, 33708, 47390, 7160, 41731,
- 9911, 46178, 35301, 524, 63845, 28361, 56836, 2421, 63216, 11270, 40518,
- 283, 65158, 10596, 58312, 20351, 39707, 28437, 59636, 11269, 57235, 4858,
-64313, 35778, 2394, 32859, 62665, 4397, 37573, 31317, 18444, 47863, 22955,
-40313, 17100, 55929, 25942, 51228, 31054, 19543, 49708, 21570, 37194, 62975,
-16470, 55056, 3153, 65049, 30849, 7988, 42692, 31835, 3345, 50653, 13506,
-40344, 30886, 16975, 52158, 41040, 11079, 31853, 59017, 40606, 8900, 48935,
- 4724, 58128, 9962, 34593, 63395, 13039, 57526, 2534, 61700, 21456, 59596,
- 1291, 51981, 14385, 46806, 27946, 2105, 59787, 11138, 27721, 45957, 7154,
-39716, 11686, 60477, 6537, 40282, 10204, 36909, 26992, 40739, 2248, 46096,
-10619, 40715, 4051, 60243, 32574, 55216, 10079, 63976, 20357, 34708, 61746,
- 3995, 55911, 12004, 60151, 1489, 54925, 19500, 59064, 23989, 63854, 21885,
-53078, 30298, 2138, 56988, 33298, 6343, 23466, 49557, 35606, 8769, 20819,
-51175, 28592, 60650, 7922, 55567, 13612, 30118, 62880, 17236, 39836, 25133,
-48839, 21936, 7445, 45882, 9821, 38501, 2059, 65375, 24852, 3950, 33586,
-37560, 24667, 51078, 1716, 36644, 56087, 5164, 54533, 38306, 57521, 7706,
-59789, 1018, 44734, 32378, 50674, 20230, 2031, 28227, 41072, 5437, 51051,
-10434, 23000, 62591, 32624, 8142, 31301, 47368, 36189, 6875, 24294, 57658,
- 3608, 26362, 56856, 23017, 5842, 58127, 9188, 34658, 64045, 20848, 58877,
-41310, 2387, 44702, 13464, 48214, 17582, 44082, 31832, 20856, 1582, 61369,
-13955, 33964, 44995, 2981, 46483, 29850, 37929, 24191, 65320, 16297, 57964,
-39032, 14536, 47477, 261, 25722, 62196, 5770, 44786, 25599, 46623, 1392,
-42972, 29754, 9194, 58719, 27158, 37347, 12341, 21295, 57706, 36779, 15517,
-49653, 38449, 18925, 42034, 20206, 57403, 39639, 15497, 46707, 30008, 50574,
-13299, 27834, 57227, 19014, 65398, 30385, 17882, 48962, 14287, 41688, 15978,
-45088, 18542, 42961, 23296, 46527, 19514, 44263, 35196, 3879, 61672, 14303,
-32990, 37521, 18622, 42288, 30499, 15110, 58689, 18460, 39536, 24971, 55966,
- 6882, 64949, 28517, 416, 59396, 37165, 4760, 43068, 10925, 64243, 39155,
- 4598, 45387, 9964, 33217, 46406, 23187, 43530, 18087, 36509, 58092, 16320,
-64118, 28187, 37712, 21904, 52790, 9668, 60392, 4048, 24916, 63272, 43308,
- 2957, 23950, 55039, 19377, 31713, 36982, 25242, 43360, 1571, 44591, 24921,
-39674, 11832, 48701, 25863, 40610, 30302, 60824, 6081, 54905, 35383, 22606,
-40761, 4384, 34980, 57764, 24390, 52807, 18076, 31615, 58909, 25007, 52291,
- 5505, 49435, 31842, 18947, 62117, 24280, 52405, 19277, 47625, 15951, 50472,
-23734, 44442, 9199, 30682, 42806, 19288, 48721, 23357, 44900, 15614, 46578,
- 6004, 50606, 11601, 44071, 9257, 37538, 49934, 13014, 43899, 28161, 62084,
- 3882, 55109, 29902, 58472, 24397, 1099, 35411, 45978, 19692, 44253, 1568,
-36277, 53367, 8201, 64858, 12438, 38874, 60783, 19461, 58081, 23246, 50336,
-11303, 40000, 54753, 13025, 63787, 5525, 30375, 60793, 27897, 13976, 43272,
-25273, 10085, 29961, 40966, 18140, 49220, 27447, 10968, 24511, 46536, 32970,
-50065, 16287, 44817, 24781, 36185, 47484, 14077, 43259, 27928, 55919, 16222,
-59677, 30196, 45143, 17196, 37916, 48833, 15676, 40057, 49788, 18819, 45138,
-29025, 11436, 37460, 6365, 25486, 50079, 21378, 40526, 24066, 51423, 11930,
-37052, 58359, 29755, 38041, 24199, 57373, 17039, 55457, 20716, 61726, 5694,
-43250, 10839, 48504, 2492, 30268, 63415, 19724, 56487, 33131, 13554, 50514,
-21248, 65438, 12241, 57464, 18073, 61929, 33091, 14305, 48455, 6685, 64668,
-42013, 1880, 31880, 61750, 4714, 29817, 65183, 1407, 52565, 9804, 24072,
-64352, 34866, 7975, 22165, 61677, 40050, 3278, 48427, 35987, 4901, 59147,
-32819, 55634, 4247, 52653, 31063, 55011, 5325, 59983, 12593, 55996, 6797,
-26562, 50205, 22507, 46177, 5594, 49453, 26645, 51586, 10163, 53218, 26087,
-49565, 10907, 44821, 17282, 42820, 11857, 52475, 33156, 10195, 30376, 62376,
-20423, 46662, 16737, 33347, 60934, 17566, 56072, 26742, 6787, 59963, 12391,
-54099, 5963, 27285, 48149, 12067, 53386, 6823, 61364, 26826, 45345, 19163,
-37882, 48887, 8526, 21817, 53213, 38234, 14776, 41776, 61308, 7286, 56396,
-14202, 60052, 33542, 17092, 50513, 29118, 37301, 5509, 56949, 9796, 24408,
-42336, 13274, 49471, 8592, 52582, 65034, 20370, 10304, 43284, 1551, 49018,
-37448, 3273, 46269, 13096, 64674, 16151, 56589, 36760, 6394, 43422, 11953,
-38875, 526, 43033, 30852, 3324, 58002, 27009, 54141, 14244, 63491, 7055,
-36676, 9992, 64509, 27582, 36339, 29818, 39569, 26827, 54255, 15585, 28862,
-60062, 16943, 52481, 21184, 42583, 15697, 44487, 6162, 40753, 62495, 16409,
-29726, 64424, 10378, 56707, 15161, 28009, 45074, 21336, 52805, 458, 29504,
-42025, 4898, 43420, 16306, 56306, 27619, 17376, 43416, 21914, 48609, 40414,
-11124, 38706, 58499, 18972, 62651, 36085, 15468, 64077, 31203, 8729, 61774,
-36650, 56725, 7251, 64657, 11675, 55449, 20656, 60081, 1330, 29115, 54511,
- 5020, 51219, 10648, 39153, 4534, 49466, 11869, 63060, 28792, 9375, 61447,
- 500, 33486, 62763, 3768, 56342, 22982, 54646, 31227, 62322, 12092, 55453,
- 7282, 63634, 101, 56288, 25166, 7700, 49168, 10483, 50605, 5097, 43372,
-30686, 8994, 34596, 49759, 18532, 54187, 34476, 27322, 53456, 5511, 44364,
-10675, 38898, 54921, 29501, 2346, 33563, 39591, 24336, 50225, 5101, 47185,
-35325, 23512, 53793, 32265, 17344, 55094, 14480, 40449, 23303, 45006, 16120,
-47075, 26853, 33775, 51007, 4245, 25887, 58387, 35861, 6092, 22925, 54151,
-25274, 12991, 46849, 27449, 8507, 23279, 44160, 27018, 7711, 25229, 47407,
-35228, 27707, 34138, 51517, 32446, 12974, 55125, 17684, 64631, 12359, 55932,
- 566, 32018, 41544, 5297, 34346, 55294, 1174, 60647, 26048, 49165, 17791,
-41647, 55072, 15496, 33653, 52757, 2137, 57168, 8631, 24999, 42219, 186,
-49194, 36632, 21081, 41929, 22157, 50366, 37806, 1384, 42298, 15482, 43520,
-32472, 259, 31398, 50250, 13281, 33705, 56697, 32494, 12658, 30421, 64385,
- 453, 27621, 45656, 21385, 50998, 28740, 9363, 56058, 4587, 62820, 13799,
-50980, 16468, 36458, 54199, 17926, 63636, 26428, 38835, 23500, 42659, 32510,
-56009, 18782, 64027, 27243, 13832, 53820, 35030, 23152, 32940, 39669, 9120,
-29526, 51402, 22623, 57602, 20808, 65524, 14478, 55655, 38746, 13622, 41755,
- 1072, 47168, 25583, 33158, 57839, 28598, 38903, 3631, 56755, 8914, 59660,
- 3019, 34586, 65455, 5056, 35599, 46214, 581, 40059, 10853, 63679, 23116,
-53729, 14596, 32191, 50716, 4201, 32884, 51369, 25336, 34227, 59783, 3854,
-41679, 14815, 36662, 55707, 17369, 63418, 28469, 48100, 6087, 36570, 61644,
- 814, 56643, 8960, 25796, 53628, 22952, 7469, 51342, 250, 49005, 32060,
- 4243, 51730, 42246, 20695, 3224, 28512, 43404, 22386, 38333, 4002, 43000,
-12904, 37358, 65095, 19316, 40495, 21834, 63740, 26176, 52884, 20056, 41050,
- 2013, 46769, 34740, 23881, 53797, 13681, 27260, 41708, 15912, 43107, 1058,
-47281, 19094, 38821, 28992, 46678, 19560, 38722, 16638, 42460, 64358, 18745,
-40200, 28876, 62268, 13455, 39101, 52982, 27182, 14280, 60305, 25136, 7289,
-46022, 17106, 42154, 21781, 60638, 23181, 6780, 41713, 59966, 15478, 52432,
- 7149, 36870, 31273, 11793, 63803, 2963, 38394, 10300, 49850, 29412, 43357,
- 8016, 58130, 12111, 56357, 35366, 6840, 60857, 14328, 38848, 49266, 16209,
-45858, 29141, 44166, 9439, 33075, 61976, 19354, 54583, 31781, 62584, 15244,
-60232, 32451, 57436, 20011, 9024, 64126, 3240, 20670, 60597, 40649, 1365,
-36692, 24821, 44907, 16513, 39754, 59006, 17589, 65440, 14255, 22976, 47111,
-29914, 5715, 33946, 58287, 3226, 28990, 47094, 6236, 37945, 25820, 40672,
-29667, 51761, 18890, 63817, 29106, 10469, 56340, 2517, 63313, 9622, 30677,
-60863, 22957, 57174, 18584, 55130, 21058, 63871, 6209, 54677, 26578, 1480,
-40233, 58504, 5493, 44359, 34500, 52496, 11965, 39074, 3263, 46675, 35583,
-26616, 45379, 19643, 42670, 23025, 64585, 27556, 3364, 45262, 31013, 696,
-58793, 11506, 27304, 3017, 47430, 36712, 7534, 41274, 61119, 29155, 9744,
-59763, 819, 54503, 26567, 63559, 1837, 40405, 8657, 48550, 27428, 36958,
- 8237, 29150, 62443, 20710, 58844, 29604, 11570, 52980, 2359, 49281, 16481,
-51157, 20281, 47295, 17837, 45532, 20627, 31874, 48719, 10475, 30589, 61336,
-19168, 47498, 32658, 2361, 31143, 46816, 6987, 36575, 58009, 14231, 39892,
- 5992, 49335, 12045, 52024, 22636, 60385, 27183, 10673, 49507, 35648, 12632,
-34308, 59604, 13854, 29361, 50004, 18565, 32999, 62069, 2822, 47723, 34607,
-29021, 45076, 17139, 53904, 38078, 13781, 23215, 54904, 31932, 60521, 15480,
-53804, 17881, 62321, 27721, 57332, 22687, 6968, 48579, 11578, 45365, 1,
-43667, 12997, 58703, 22839, 54887, 13381, 59140, 6669, 37299, 30799, 51170,
-12158, 60598, 32931, 52566, 28418, 8950, 59474, 3412, 34378, 58038, 9244,
-54414, 33467, 3942, 31819, 59654, 2214, 22665, 47391, 24802, 380, 58989,
-44002, 3562, 35936, 51427, 21094, 61855, 12364, 52249, 3807, 35287, 58495,
-24636, 10232, 47912, 22801, 63108, 16861, 55359, 40837, 19050, 50844, 21650,
-61186, 24848, 3845, 63237, 33846, 27343, 48845, 3187, 30332, 43225, 22007,
-45491, 29315, 9153, 56007, 1955, 63046, 14141, 58082, 38505, 1273, 41426,
-10758, 43157, 2278, 39821, 10502, 42363, 1050, 38553, 53922, 22628, 44584,
-36072, 8280, 21746, 43792, 56989, 7108, 29502, 62345, 22735, 8742, 45975,
-36174, 29239, 57456, 12311, 39495, 63401, 10479, 38081, 24550, 63972, 11381,
-59997, 17384, 54568, 14120, 59530, 5689, 44929, 13787, 38873, 51326, 15893,
-44830, 34746, 25418, 46067, 17225, 40388, 5082, 47439, 8982, 39276, 23980,
-46513, 14849, 41303, 62474, 17084, 27903, 47523, 22192, 9655, 24797, 63152,
-18560, 54880, 14667, 65323, 6791, 34163, 58936, 298, 47828, 7441, 39147,
-60159, 12613, 37365, 50260, 19939, 46361, 61808, 35432, 12766, 29527, 57022,
-22539, 4226, 44594, 21967, 36466, 48055, 15065, 42501, 19950, 44612, 18051,
-61614, 34725, 4870, 59616, 24923, 49582, 5473, 45017, 8934, 35501, 43666,
-21074, 40209, 23001, 61993, 12703, 36033, 25657, 63274, 7641, 56151, 12458,
-36508, 58963, 16376, 34234, 53857, 7528, 56041, 27350, 60320, 17560, 55415,
-11433, 24107, 48255, 20436, 61536, 18931, 39259, 16895, 43366, 5638, 45744,
-32705, 3461, 23022, 57400, 1508, 24594, 52316, 41787, 10633, 37288, 47051,
-14920, 41772, 17571, 64845, 12343, 23857, 59982, 11226, 26266, 58968, 39768,
- 6207, 43987, 10189, 41189, 410, 48360, 30278, 9048, 34409, 51671, 41248,
-17553, 60941, 23421, 56791, 18909, 37702, 6237, 45886, 17572, 39726, 26112,
-51954, 17872, 65209, 5025, 45797, 25825, 7881, 20096, 63357, 35777, 24064,
-43088, 14734, 23006, 47485, 28214, 14134, 43534, 52639, 16029, 35055, 56094,
- 7221, 64938, 35476, 12257, 21720, 32081, 63022, 13212, 37445, 989, 40989,
-32309, 26345, 47458, 16305, 51383, 30477, 38541, 3979, 28760, 45899, 430,
-25821, 58338, 13813, 42847, 6216, 45724, 32998, 15162, 51518, 17716, 37338,
-25556, 63646, 10365, 55307, 817, 59753, 20504, 32867, 39935, 24111, 51089,
-31416, 20258, 56263, 24412, 52338, 17828, 48723, 20664, 51650, 21979, 62856,
-28597, 14136, 49597, 16591, 52939, 29778, 63071, 25688, 11774, 34958, 48482,
- 4205, 37650, 52890, 25740, 2916, 50966, 6593, 44054, 19431, 32465, 53281,
-14884, 51607, 18382, 44023, 23591, 45738, 7702, 47534, 22653, 36989, 31037,
-55461, 4085, 24012, 60313, 28088, 11375, 58617, 4340, 54946, 12869, 62732,
-35124, 25960, 58254, 11824, 35612, 60577, 22776, 10218, 37031, 55310, 13576,
-59851, 36283, 49186, 6116, 41081, 23267, 42785, 19089, 50142, 13232, 28340,
-41891, 18721, 53134, 14594, 29896, 46830, 22404, 9561, 55429, 6470, 17669,
-53328, 24058, 51075, 14401, 33219, 51706, 16885, 57924, 6837, 30117, 60716,
- 4957, 55716, 10984, 53557, 30718, 16395, 45481, 14985, 42248, 17556, 53255,
-34416, 24226, 52095, 5131, 65047, 10964, 44544, 6760, 41788, 55622, 911,
-29349, 42238, 23124, 50761, 1828, 26115, 49463, 4825, 25364, 43124, 20565,
-45820, 8502, 39433, 26702, 34796, 63224, 312, 41881, 27526, 46942, 2116,
-62784, 30876, 56230, 14159, 64237, 39038, 51133, 16795, 46929, 40511, 7153,
-22209, 64529, 27245, 5870, 58268, 29363, 50361, 4406, 43947, 33798, 6515,
-35542, 47143, 1470, 32866, 65195, 16629, 53251, 26818, 59260, 14819, 39102,
-52966, 21107, 2804, 32032, 53798, 4241, 36604, 10009, 33054, 61590, 28258,
-33996, 64158, 4008, 48522, 11666, 43509, 22197, 40642, 18342, 53453, 31188,
-49447, 4826, 44488, 11295, 52063, 32043, 65429, 2737, 40404, 59205, 23890,
-10025, 30999, 46750, 14897, 41965, 17632, 49369, 28834, 55741, 42357, 8410,
-30619, 55348, 23992, 57514, 15297, 64784, 9307, 37369, 1228, 62606, 20520,
-56851, 42014, 14705, 60798, 37219, 7816, 47759, 26983, 59101, 16829, 56275,
-37998, 207, 60147, 7412, 53406, 21154, 49532, 17903, 37813, 24531, 51506,
-12038, 49100, 7644, 36995, 4004, 45254, 11860, 47265, 5190, 64827, 28519,
-58150, 4482, 46499, 12895, 43206, 34053, 2078, 58685, 10228, 46901, 4590,
-42605, 28728, 61165, 15265, 54774, 31674, 10496, 60347, 34772, 23987, 62053,
-13838, 56480, 1799, 27996, 42445, 4905, 48675, 34944, 924, 29906, 65177,
-34640, 2944, 62265, 9633, 26174, 45935, 34271, 6424, 36396, 50927, 18739,
-37750, 26655, 49623, 30295, 14452, 44506, 3544, 48351, 28203, 2549, 44179,
-51275, 24910, 4300, 42467, 31153, 2119, 27521, 55697, 11017, 61127, 1129,
-54307, 23925, 38528, 56767, 10036, 61537, 34935, 24400, 51794, 5036, 62666,
-34357, 25917, 38385, 31843, 8195, 43814, 373, 38529, 63460, 12118, 48815,
-34959, 26095, 45950, 20631, 38548, 25110, 47230, 35734, 3487, 51225, 31678,
-56909, 1377, 64370, 31105, 15378, 61460, 18525, 48591, 25468, 53635, 18933,
-58533, 30827, 16920, 33117, 54439, 14949, 61546, 18132, 32877, 44003, 14676,
-64019, 39242, 11866, 59353, 15418, 31881, 64726, 3280, 47516, 13152, 31412,
-57073, 8338, 29987, 53909, 23164, 8734, 34626, 50293, 24296, 11476, 31586,
-62104, 9563, 26383, 60104, 33656, 2383, 42837, 52960, 24304, 9536, 36280,
-57240, 15311, 54756, 27685, 61424, 18082, 56064, 12194, 25033, 48104, 30850,
- 6763, 32638, 46035, 4728, 24724, 61337, 43725, 12361, 38023, 28616, 50034,
-26061, 44492, 3087, 50834, 9231, 25146, 42412, 15625, 60867, 1832, 55357,
-10558, 58371, 2449, 38686, 21654, 56683, 17844, 61293, 26560, 6718, 36048,
-53314, 21088, 7085, 50088, 36707, 63129, 6266, 54216, 26209, 57782, 9465,
-39005, 5252, 19884, 50932, 39974, 14865, 46468, 7791, 49268, 33523, 22397,
-49723, 28146, 40674, 7683, 32006, 10927, 49317, 33007, 19879, 53124, 30126,
- 1581, 34854, 51107, 8558, 25858, 44871, 20184, 42050, 12994, 44420, 4497,
-32139, 61617, 6477, 34761, 63922, 22104, 55480, 18282, 64484, 17182, 58815,
-21627, 31363, 36718, 8172, 38105, 32847, 26036, 56262, 5851, 61468, 26507,
-37513, 31961, 19172, 54314, 15907, 50202, 2306, 30516, 40787, 20898, 46524,
-19668, 43545, 15756, 33123, 48512, 26019, 35830, 59219, 20510, 61892, 13008,
-26938, 57656, 41797, 11655, 24835, 52188, 19587, 39672, 58385, 17492, 64537,
-20951, 55942, 703, 32938, 65306, 9174, 41721, 1728, 53924, 32768, 64473,
-15940, 55612, 33350, 20315, 7616, 65113, 32826, 53933, 16606, 62242, 37835,
-19581, 44650, 28586, 36988, 11502, 46965, 3862, 22260, 49564, 30816, 2663,
-57357, 10840, 40048, 17271, 51223, 2224, 58180, 40457, 62935, 15680, 58559,
-25301, 6124, 41974, 31487, 1962, 65275, 11674, 53144, 13944, 62805, 7265,
-23355, 60327, 28152, 10007, 22549, 47993, 35925, 10577, 46072, 2703, 41484,
-10172, 37569, 274, 46559, 34555, 4754, 61034, 39791, 9487, 43412, 4507,
-39191, 58247, 7178, 55042, 30215, 17913, 51678, 971, 37906, 50455, 18458,
-42429, 21505, 52718, 37934, 16614, 50635, 36535, 14609, 41348, 58997, 20660,
- 1260, 35611, 54428, 4885, 37690, 29145, 53801, 15452, 39241, 54656, 20128,
-11385, 35244, 62754, 19642, 31256, 47976, 2169, 42136, 13195, 44338, 22348,
-51530, 35237, 2967, 62812, 22109, 56152, 19438, 63885, 35269, 7780, 27440,
-56546, 18179, 59360, 7256, 63281, 14566, 55639, 16936, 35512, 54184, 19154,
-47009, 21016, 36506, 28499, 41914, 23082, 33246, 64326, 9280, 34834, 47126,
- 684, 41252, 57461, 21995, 10560, 33153, 61784, 27013, 884, 22150, 43913,
-29205, 3247, 36845, 23408, 63597, 29800, 59559, 33590, 2698, 64235, 35019,
-27344, 39376, 3349, 53837, 13202, 58984, 17793, 54794, 36414, 65016, 27059,
- 4959, 57164, 10188, 39394, 63533, 12442, 29499, 40403, 65352, 11445, 54586,
-31793, 62364, 19477, 39107, 54274, 13738, 48406, 28726, 2831, 43182, 11312,
-46462, 26439, 39194, 7405, 34581, 60609, 16577, 55155, 19122, 63489, 15970,
-35592, 47671, 15001, 44885, 7237, 65293, 38868, 12771, 59450, 23378, 35889,
-57736, 7686, 64005, 893, 52105, 8067, 49739, 3826, 39985, 9560, 50775,
- 7277, 45501, 16466, 39876, 49992, 9515, 21682, 56349, 40543, 13448, 48764,
-28408, 1521, 50524, 8813, 31394, 41202, 22858, 47730, 15130, 52272, 23334,
-59270, 20953, 8287, 27369, 42483, 5874, 40328, 59619, 29485, 38885, 20891,
- 8904, 49904, 33884, 12421, 58790, 4151, 52398, 21110, 59417, 26058, 63523,
-32981, 7931, 45033, 23002, 37129, 27192, 59405, 31298, 12046, 44428, 15227,
- 4629, 27497, 48825, 19191, 52117, 29492, 60245, 18283, 53983, 23199, 43827,
- 3057, 41759, 18668, 49985, 33552, 12277, 41793, 63355, 33756, 7571, 26379,
-53822, 21845, 56232, 27244, 60486, 22506, 57721, 28771, 11870, 50557, 13716,
-26757, 48625, 19116, 52595, 30936, 11503, 46166, 35328, 3501, 47378, 32379,
-61790, 27747, 5595, 57422, 10221, 59172, 6609, 25554, 60780, 2976, 24442,
-65327, 4739, 25877, 47748, 28718, 61352, 18549, 48263, 21732, 44689, 3714,
-49374, 8543, 30182, 61083, 28759, 49200, 638, 45609, 8146, 34841, 63930,
-20231, 52262, 3800, 40821, 9180, 46721, 19820, 36015, 45384, 12598, 42929,
-11306, 49834, 29993, 46757, 927, 42698, 14037, 46267, 23991, 32480, 40445,
-26960, 48811, 1088, 59874, 7967, 33012, 50290, 14091, 61878, 7195, 48631,
-15745, 43945, 28391, 14262, 54808, 33305, 13370, 50486, 36949, 48842, 12998,
-45436, 31690, 51762, 16526, 59956, 42442, 13376, 46399, 1435, 44301, 11524,
-25668, 52897, 22815, 6005, 58361, 14149, 60910, 24817, 44770, 4712, 42889,
-25689, 2590, 21545, 51895, 40868, 17860, 44607, 21290, 36315, 23876, 49006,
- 4228, 22356, 47133, 27898, 2295, 24500, 50813, 10894, 26880, 42040, 18907,
-57523, 38387, 16469, 59420, 30186, 39, 53403, 28055, 51332, 2562, 41677,
-11179, 43946, 649, 45607, 9690, 28031, 57261, 20677, 53641, 24042, 176,
-43114, 33577, 5776, 47210, 17973, 44945, 14471, 38717, 26769, 62735, 29766,
-55626, 16862, 64816, 22771, 38365, 25346, 53056, 2640, 32197, 63176, 33489,
- 3918, 30855, 61659, 7488, 43988, 33883, 15266, 35736, 49140, 13489, 61443,
- 7144, 31162, 39197, 5506, 35893, 48037, 31396, 52009, 19195, 57477, 23771,
-10612, 52300, 907, 58059, 41884, 24045, 6535, 48747, 25258, 39189, 13808,
-40893, 5679, 43100, 16136, 37341, 55643, 18104, 64060, 13120, 49204, 1015,
-41651, 65484, 24416, 54100, 47490, 34207, 8962, 36807, 3624, 39630, 10207,
-46637, 7750, 39488, 15483, 56916, 31630, 58634, 65, 40398, 55973, 21316,
- 2536, 51866, 38178, 59169, 4240, 42642, 12331, 38801, 6522, 43571, 14242,
-39301, 64134, 20119, 37200, 57340, 2583, 64635, 35382, 20918, 62155, 24845,
-17350, 51073, 28654, 8954, 21240, 45237, 34721, 23122, 49029, 28455, 34239,
-44525, 11112, 39622, 49007, 12208, 37954, 54804, 9835, 43576, 6856, 41319,
-12526, 65037, 17107, 56907, 33032, 21603, 47896, 4830, 40752, 22318, 56063,
-17984, 59418, 25564, 10176, 37796, 30480, 62031, 15743, 56501, 31623, 60226,
- 8366, 28233, 54657, 1775, 38648, 16781, 58638, 20047, 64590, 22969, 55035,
-34645, 2152, 58202, 6595, 64898, 11951, 31349, 37761, 27583, 63442, 5938,
-52984, 29925, 39284, 23790, 56274, 3127, 60216, 39810, 24001, 6036, 62957,
-31092, 1851, 24520, 56455, 5541, 64607, 10358, 38264, 8102, 30687, 61603,
-18642, 54650, 17003, 56722, 41649, 10149, 32739, 51713, 19784, 48072, 29716,
- 8988, 35558, 64006, 16026, 52763, 30904, 45499, 9112, 33850, 62176, 2775,
-54733, 6680, 57768, 16075, 60623, 33584, 9206, 56976, 32641, 59280, 5588,
-35123, 64876, 1611, 46598, 8825, 27265, 47651, 5848, 36838, 61487, 14888,
-42122, 18788, 45989, 23522, 51852, 20649, 59716, 23031, 53284, 33912, 2857,
-40185, 11258, 48163, 29368, 51969, 16873, 63363, 11498, 55928, 28076, 32904,
-58505, 17190, 36960, 13223, 23243, 46305, 34013, 144, 60505, 12037, 34829,
-58778, 22124, 6653, 42935, 53792, 17838, 34619, 54696, 16700, 61055, 23555,
-57349, 3436, 53642, 26347, 34895, 57898, 18120, 63068, 26119, 9595, 61237,
- 541, 45303, 13663, 49725, 36534, 17422, 45581, 27508, 14026, 63941, 40688,
-16132, 53021, 21919, 64762, 18946, 57428, 12051, 53666, 1673, 28091, 42221,
- 6008, 45823, 20299, 54894, 15977, 35630, 7068, 30664, 16736, 55742, 22763,
-64275, 28435, 56116, 22184, 34069, 62283, 19757, 51291, 24613, 9333, 27804,
-45747, 22323, 8042, 32894, 46239, 24024, 11408, 20661, 49252, 30228, 63892,
-18094, 47908, 20673, 52744, 3760, 24211, 45918, 7264, 23107, 45218, 27887,
- 8570, 51490, 419, 37351, 56920, 13055, 65175, 36698, 56261, 12166, 52910,
-14991, 39128, 1638, 64164, 20467, 52014, 27929, 17322, 56073, 29426, 13885,
-50047, 30684, 57633, 20293, 52006, 196, 30901, 40032, 13549, 63471, 35990,
-18773, 52621, 8756, 29510, 41563, 5004, 53152, 29164, 57589, 6068, 23601,
-45619, 26908, 714, 21425, 53691, 39955, 18527, 59764, 24243, 52022, 5492,
-37623, 10903, 41543, 7961, 27963, 51597, 20539, 47196, 22037, 39330, 56928,
-13080, 49329, 20066, 44135, 25635, 166, 59332, 11150, 34291, 50739, 22542,
- 8268, 48108, 29643, 38915, 16302, 60586, 43967, 17802, 40576, 23108, 33621,
-57134, 24420, 52564, 4551, 50167, 26929, 37567, 6421, 22349, 62595, 37089,
-12149, 43053, 22, 40092, 56695, 14769, 30404, 48383, 8435, 61458, 17022,
-58197, 24940, 13797, 46981, 18709, 42057, 26760, 43919, 13631, 52404, 39075,
-18408, 46270, 15435, 30166, 45233, 17089, 49841, 23610, 35076, 60970, 21652,
-54812, 20332, 32956, 49207, 4793, 54228, 12116, 62111, 6034, 39544, 12700,
-49556, 6635, 64297, 19415, 59968, 33599, 21599, 62188, 8582, 32630, 40141,
-26308, 36816, 3401, 49974, 9113, 54039, 2495, 42652, 59701, 5574, 28529,
-51254, 19906, 44756, 29942, 9116, 36156, 55239, 24293, 10812, 45377, 522,
-26686, 46916, 5407, 42433, 12061, 44523, 29717, 10145, 45449, 2175, 42786,
-13226, 53322, 34531, 16755, 39507, 24810, 60205, 3833, 30885, 63541, 8150,
-54711, 33303, 3156, 32071, 60287, 31, 42576, 8046, 47974, 30026, 45923,
-17399, 40029, 62353, 14493, 56362, 26501, 38214, 9252, 33086, 57543, 22370,
-61641, 39554, 1437, 45246, 13541, 43166, 14885, 49337, 947, 30482, 42723,
- 4466, 63928, 32868, 54614, 14637, 64862, 37724, 59518, 15229, 55212, 31043,
-61306, 34852, 8310, 28098, 51497, 1757, 62545, 25642, 35424, 55434, 17397,
-60353, 32585, 14390, 55875, 33095, 15417, 47942, 26997, 6702, 42939, 23306,
- 2251, 26352, 41783, 4165, 62712, 23938, 53515, 13665, 47078, 4994, 61924,
-33141, 834, 42272, 63557, 22821, 3114, 34518, 46397, 15068, 33411, 58420,
- 6585, 51540, 24863, 1666, 58829, 26559, 35189, 65274, 16517, 43853, 20794,
-46954, 17778, 50461, 33988, 8032, 64355, 32955, 44621, 24963, 5304, 48085,
-13356, 41912, 15075, 44976, 21691, 52525, 18661, 60108, 38558, 13682, 42338,
- 9773, 55274, 4784, 24854, 42887, 3329, 57844, 10102, 35352, 47768, 21201,
-45509, 26948, 9676, 35541, 64956, 17759, 55922, 4268, 51373, 33765, 11340,
-30557, 55312, 13810, 48343, 2099, 45229, 20171, 40887, 33424, 8812, 61155,
-29578, 49661, 1934, 26817, 55520, 23367, 61983, 20626, 33685, 50805, 1760,
-33112, 40343, 23323, 37616, 736, 49537, 29834, 34807, 59850, 10534, 51814,
- 1059, 37549, 25747, 3403, 63006, 7999, 35693, 55284, 11856, 58476, 33841,
-13200, 51731, 3633, 43775, 10854, 45240, 8036, 25807, 63712, 29523, 38063,
-25291, 33397, 57147, 27450, 36977, 22076, 41946, 30898, 8866, 50878, 3957,
-38251, 25335, 58902, 1649, 53400, 20118, 65036, 22358, 40724, 24356, 47179,
-30870, 11944, 35153, 48110, 10682, 55958, 4158, 64386, 26733, 49645, 14654,
-39111, 57838, 20180, 64768, 39618, 14821, 52366, 25760, 63665, 16434, 40074,
-62303, 19196, 55144, 21371, 48893, 3682, 43803, 28389, 50565, 11096, 37178,
-28081, 47474, 21771, 38405, 18978, 42182, 51722, 13081, 28046, 47098, 17776,
-54429, 35238, 2838, 26884, 59707, 23698, 8814, 50852, 33598, 3757, 60987,
-28160, 51417, 2877, 46219, 11285, 19952, 59065, 32946, 53303, 6661, 59781,
-35922, 26506, 50732, 11080, 47434, 14233, 39844, 5254, 49394, 30715, 3620,
-26618, 42686, 6121, 47815, 638, 19582, 55713, 39932, 15653, 42461, 30890,
-10315, 49910, 8881, 42095, 1226, 51676, 39468, 5350, 41711, 63502, 19598,
-39297, 60022, 16555, 54465, 31941, 60895, 19542, 48344, 31852, 8687, 33105,
-41282, 19117, 43660, 15092, 37542, 58158, 20954, 7605, 35907, 59499, 25526,
- 8911, 62311, 37963, 17799, 44094, 11909, 46724, 29612, 41240, 12782, 44898,
- 3092, 51067, 12144, 62999, 1211, 40611, 14051, 58611, 41626, 17431, 52526,
-11204, 61171, 30020, 34498, 65500, 3745, 57416, 29967, 61931, 2542, 43463,
-28969, 4443, 62953, 23871, 45180, 19052, 36703, 62189, 15520, 53318, 16627,
-31346, 64011, 17893, 53914, 5438, 62588, 30390, 52885, 1234, 40769, 21277,
-43234, 29067, 7331, 58308, 36409, 3616, 43282, 19064, 60862, 29431, 11325,
-65103, 21992, 48560, 15004, 42732, 18163, 58632, 39009, 5616, 46257, 11252,
-48997, 7218, 26536, 62542, 12839, 55244, 5435, 56309, 32175, 11550, 64445,
- 5780, 28145, 45941, 22513, 64038, 19823, 58045, 30562, 41342, 21774, 47985,
- 576, 43122, 27325, 5146, 62750, 29189, 40206, 19258, 65506, 17695, 56777,
-40082, 21920, 10467, 57635, 1516, 43319, 10206, 48433, 3534, 52275, 13997,
-55721, 43653, 23931, 56906, 14599, 49460, 17694, 43480, 12164, 42033, 6107,
-48098, 11090, 60261, 6682, 56604, 26343, 63856, 20837, 38186, 24188, 42641,
-15905, 46732, 1311, 62579, 29848, 4817, 50991, 30773, 8462, 60246, 36049,
- 1942, 33080, 53113, 5858, 24664, 46771, 8053, 37477, 24456, 57155, 14150,
-64896, 6748, 54939, 17787, 61977, 11981, 55862, 4633, 61491, 10061, 23003,
-57192, 36084, 9311, 62983, 31569, 19880, 61781, 33405, 6376, 49769, 29977,
-37719, 16689, 47619, 14987, 42773, 18757, 41222, 23520, 52889, 42963, 25611,
- 9699, 27515, 42150, 24030, 11980, 56738, 17629, 61347, 35229, 26382, 59277,
-20543, 36967, 11884, 35634, 52446, 13611, 62990, 25521, 35894, 45659, 24578,
- 4783, 59598, 19015, 55092, 34112, 27120, 61847, 29742, 48557, 25334, 11678,
-58903, 23832, 10116, 53766, 3915, 33779, 45515, 9368, 47377, 6104, 43863,
-14177, 55826, 27408, 58343, 6378, 60118, 26196, 55198, 9570, 23932, 46979,
-28565, 48545, 15872, 53276, 41740, 21966, 5258, 55338, 27147, 60492, 21278,
-54325, 5627, 61565, 19593, 55714, 34636, 28394, 37597, 24666, 60711, 31313,
- 3314, 29036, 49646, 4808, 39167, 16860, 53182, 10709, 27548, 50549, 23681,
- 9093, 35022, 47641, 12873, 53116, 36704, 16641, 53816, 536, 58910, 30548,
- 8600, 48151, 26587, 34376, 46398, 4657, 41207, 11946, 38043, 15522, 42415,
-17026, 44967, 13521, 59525, 9457, 63719, 25270, 39604, 16964, 62783, 28250,
-52226, 9070, 35248, 54806, 27925, 554, 35870, 53467, 4038, 45144, 13793,
-31112, 65280, 19414, 41160, 17671, 60141, 37704, 18735, 46345, 20085, 47691,
-15463, 41157, 52410, 19555, 37016, 53441, 3688, 40608, 11837, 45504, 7225,
-49533, 11167, 52707, 23939, 64198, 15960, 53765, 41267, 24502, 9317, 55842,
-31725, 952, 48642, 33905, 3060, 51132, 42380, 18251, 31579, 65141, 22707,
-32390, 60803, 25891, 38217, 1159, 35100, 9797, 31546, 45311, 5115, 55161,
-28047, 60971, 18693, 57468, 27231, 37795, 21762, 41973, 19326, 44906, 1693,
-52735, 7454, 60998, 11396, 54105, 35481, 23324, 42245, 12579, 33030, 37206,
-18368, 46333, 27868, 17029, 51147, 19736, 38598, 28923, 59427, 15441, 33345,
-64028, 11542, 29747, 46679, 19508, 38439, 25871, 45069, 2005, 42335, 15760,
-40745, 24879, 46584, 34322, 5979, 50294, 24886, 38615, 4903, 51273, 10793,
-53330, 36898, 12846, 57024, 575, 64570, 24905, 55124, 4987, 63337, 10459,
-59849, 6255, 14771, 64778, 31955, 54855, 2623, 63033, 33355, 5390, 44937,
-23671, 2299, 50273, 8970, 31969, 62178, 23439, 57639, 18281, 44775, 31462,
- 9771, 57101, 14111, 65224, 37007, 13337, 43526, 6923, 47416, 2752, 37646,
-10801, 20427, 65372, 36761, 16044, 46551, 34875, 29335, 50173, 14600, 30963,
-57954, 17260, 36521, 29811, 50911, 41, 40685, 12985, 43118, 30959, 2303,
-32267, 50534, 39503, 3667, 60346, 10734, 37716, 1797, 30189, 49549, 28967,
-42452, 2705, 36881, 9451, 38431, 32050, 15345, 48444, 25343, 10290, 49966,
- 5385, 46080, 9016, 36386, 55521, 13243, 31901, 63181, 20479, 49141, 1405,
-44211, 36042, 18944, 33885, 56107, 16656, 27044, 64231, 22886, 10287, 49498,
-29356, 39053, 14780, 50039, 27833, 37950, 1491, 60989, 12475, 57226, 25464,
-55378, 23183, 58975, 3934, 56977, 28364, 52242, 23886, 48572, 14434, 53538,
- 299, 50777, 34160, 6499, 38435, 25624, 49103, 5043, 40181, 58186, 15822,
-31296, 63361, 24896, 51991, 9426, 33960, 51336, 2832, 53704, 30859, 5093,
-57541, 9459, 36362, 27802, 59483, 7305, 24028, 44377, 12988, 25569, 61150,
-18984, 55589, 27717, 38239, 18024, 61760, 29267, 6239, 33134, 37858, 8476,
-21225, 57949, 37094, 15351, 50408, 39011, 25045, 12477, 59042, 32243, 6851,
-52354, 37364, 5412, 53869, 12355, 40942, 7849, 62433, 20793, 58452, 28128,
-64854, 16030, 41561, 33289, 8214, 31747, 45152, 13013, 52697, 476, 62852,
-13720, 49536, 16452, 41185, 14783, 44066, 18904, 41064, 29133, 6372, 56459,
-16741, 59825, 48102, 10543, 58293, 3658, 53476, 34233, 6888, 58578, 11659,
-48685, 84, 30990, 51040, 4769, 39077, 52458, 1267, 32166, 59647, 5213,
-30147, 57780, 22312, 51177, 19932, 53256, 1442, 60757, 31078, 15360, 58493,
-18614, 44133, 22705, 42100, 15618, 25379, 47177, 21095, 43312, 31920, 8250,
-33021, 45557, 30205, 36908, 26294, 47707, 50257, 4161, 39321, 19655, 43721,
-18469, 38884, 52772, 15432, 37530, 58146, 16738, 40885, 53669, 1045, 48724,
- 8429, 40123, 2045, 53291, 20449, 32834, 50285, 7646, 30431, 54165, 22800,
-63294, 21564, 58299, 22544, 53927, 42527, 4054, 27292, 53119, 2062, 60682,
- 8176, 24681, 62496, 1380, 39870, 26190, 63270, 11077, 23768, 64890, 21795,
-53661, 18153, 47792, 22020, 63865, 7230, 29044, 54243, 17842, 32128, 64699,
-20161, 57282, 12685, 63105, 15508, 53778, 23838, 64211, 16968, 57267, 41804,
- 7370, 32569, 60057, 21522, 57092, 18879, 51604, 15512, 39389, 23143, 45964,
-11982, 43474, 24534, 58374, 13928, 62513, 6650, 45420, 220, 49981, 37838,
- 5969, 40975, 57837, 25695, 7448, 60735, 32247, 6337, 65381, 17339, 52420,
-23495, 39583, 19480, 43380, 1965, 48618, 19722, 46329, 31823, 8976, 36605,
- 2596, 32199, 41466, 20770, 45022, 26548, 15349, 55864, 20346, 62225, 17167,
-44535, 18891, 33830, 47772, 10454, 39469, 6809, 35358, 57910, 26402, 15774,
-42602, 20958, 45740, 28041, 41885, 25438, 64888, 3200, 37038, 29784, 62926,
- 2102, 57411, 38708, 8615, 50695, 35086, 4584, 59494, 33519, 1834, 36173,
-56819, 19076, 60212, 29966, 51314, 2073, 32593, 61880, 6654, 22214, 60727,
-29464, 37801, 15706, 63122, 13484, 24593, 46521, 21269, 44902, 18228, 50657,
-29616, 45987, 11533, 42101, 2720, 51922, 20577, 61964, 22461, 51424, 3666,
-39957, 20490, 46272, 30858, 52021, 4366, 57671, 29225, 59592, 26923, 54655,
- 2863, 61864, 22139, 33797, 38535, 2265, 25790, 41598, 20847, 42910, 14340,
-64106, 25065, 32300, 42170, 22401, 56238, 41129, 18871, 60121, 26051, 16952,
-62427, 41062, 12838, 49644, 36727, 14281, 46032, 6296, 65412, 12673, 43435,
-17308, 45149, 35200, 2356, 49544, 10338, 55330, 1225, 65219, 39758, 4417,
-59206, 10108, 53995, 19904, 58740, 21717, 11621, 50832, 130, 29114, 20811,
-57065, 12615, 58812, 8473, 51397, 13002, 31361, 65137, 8059, 30569, 45926,
-23049, 13079, 33508, 38069, 26239, 64465, 22624, 36231, 60842, 3341, 39203,
-27524, 47018, 987, 38380, 12451, 41707, 14463, 44966, 7473, 33215, 56682,
-39424, 17116, 43772, 20360, 49102, 38358, 18054, 51619, 11928, 44899, 3390,
-49320, 39063, 15231, 46071, 5215, 62140, 10136, 52887, 35909, 19707, 45828,
-13115, 40375, 50262, 8006, 45064, 26787, 39414, 7131, 33529, 40679, 7763,
-29591, 50403, 493, 23764, 63629, 39442, 2196, 41585, 11234, 44217, 32660,
-64943, 7140, 59136, 2043, 54486, 33047, 7832, 31002, 41396, 20072, 53570,
-24799, 59046, 31770, 15477, 48548, 30510, 1742, 34504, 46534, 18311, 41650,
-54251, 20678, 45680, 11401, 43805, 5704, 51662, 13296, 64407, 14470, 38774,
- 7041, 62341, 21658, 55104, 27434, 61449, 6188, 57676, 12306, 64289, 41100,
-10214, 46439, 1507, 52875, 10785, 63851, 7537, 29323, 60622, 20675, 56470,
-23065, 1028, 36192, 59865, 8026, 63619, 10780, 54924, 527, 49905, 13625,
-45129, 17468, 48781, 15154, 50396, 32888, 16967, 47422, 30508, 14904, 44575,
-16264, 46616, 25037, 50328, 13388, 45697, 3259, 42354, 17302, 46756, 14360,
-43510, 28596, 54368, 9472, 44349, 4405, 47451, 19569, 40756, 55658, 9316,
-60044, 2026, 57758, 35389, 4392, 24705, 53165, 19166, 47013, 12431, 38928,
- 786, 47385, 26214, 63729, 15330, 55501, 25551, 10017, 38536, 27902, 36141,
- 9432, 36987, 5348, 31161, 47438, 16244, 44983, 8763, 65249, 28784, 54516,
- 7266, 62447, 30136, 49121, 9496, 44947, 2810, 60860, 10572, 35872, 7245,
-47607, 13475, 43483, 34966, 8924, 22717, 56472, 24181, 8480, 62669, 30763,
-39392, 28231, 36843, 26039, 56305, 7705, 64291, 28004, 32830, 61110, 26741,
-48030, 31427, 16956, 50211, 26324, 40609, 28935, 46339, 2166, 39140, 56774,
-18027, 62538, 37734, 45832, 16405, 41605, 21637, 46273, 27377, 60340, 487,
-41235, 27054, 54778, 3796, 61100, 29277, 56915, 17228, 45493, 12328, 49581,
- 6727, 25305, 45286, 16732, 61985, 11000, 58720, 25326, 53086, 4396, 56963,
-19479, 61069, 23657, 12668, 31528, 62838, 9535, 56144, 31978, 5454, 47086,
-27762, 60194, 19845, 55187, 33168, 7308, 58594, 27188, 37048, 25360, 39609,
-31666, 4277, 58779, 23858, 62923, 607, 23276, 56003, 35121, 4131, 51475,
-24395, 58584, 17795, 56095, 43214, 14093, 33488, 46116, 9739, 27395, 54540,
-22692, 62521, 28089, 71, 24410, 47282, 28924, 40433, 15921, 60820, 26868,
-54074, 3525, 47042, 35391, 8533, 38694, 12078, 60507, 21792, 55386, 20469,
-63807, 11676, 51708, 2749, 30351, 36130, 4279, 56104, 21325, 63075, 26306,
-36880, 32408, 27821, 50698, 33452, 25915, 47688, 12770, 42964, 17521, 46643,
-29110, 37041, 3066, 21791, 59855, 30800, 39072, 23450, 32901, 41027, 24952,
-51143, 2431, 45435, 12354, 48733, 29135, 43634, 14506, 47482, 24312, 39977,
-16049, 37122, 23209, 56810, 31130, 53355, 8336, 43459, 28360, 5156, 62003,
-35657, 133, 64644, 23362, 56323, 10174, 60545, 7748, 40243, 28549, 55473,
-12002, 63581, 26830, 54916, 4000, 40901, 15941, 49270, 20361, 53516, 27367,
-58284, 447, 31137, 36606, 27237, 40078, 31505, 16994, 64075, 33703, 7388,
-57274, 31156, 60135, 18019, 56206, 30906, 10198, 32455, 44057, 6476, 36626,
-58798, 17729, 65499, 20961, 53306, 22489, 63156, 39307, 10332, 57895, 29628,
-52278, 15033, 47298, 19315, 43431, 24152, 1033, 36532, 56834, 19151, 51674,
-34820, 27442, 65468, 24202, 33842, 57636, 2723, 55410, 29061, 46085, 3104,
-39814, 52923, 25761, 329, 53955, 10311, 48544, 4106, 30457, 50751, 13961,
-47135, 5607, 36599, 12140, 37984, 7510, 60137, 35001, 13544, 61904, 5378,
-23105, 63837, 29462, 6880, 41211, 32183, 8071, 29627, 54190, 1698, 63741,
-29991, 4982, 35409, 49784, 19252, 46992, 15999, 39480, 10759, 43439, 6998,
-50572, 4332, 58548, 28432, 34153, 57981, 8870, 52328, 23190, 44318, 15165,
-40582, 18694, 47778, 31023, 38719, 160, 35277, 49310, 5085, 41607, 26014,
-36656, 15253, 64400, 33349, 7815, 31667, 42210, 13256, 24674, 53209, 35099,
-11450, 48795, 1285, 51325, 13672, 44064, 33476, 9812, 30964, 46423, 36056,
-11647, 19010, 61791, 21122, 44661, 1128, 46884, 25946, 4589, 37708, 59670,
-17380, 56424, 36591, 16509, 48754, 6688, 52865, 31975, 57748, 20902, 9196,
-52362, 31458, 5711, 48405, 17210, 64458, 14845, 28261, 61409, 22144, 51718,
- 4084, 43609, 8885, 45521, 27382, 38282, 24246, 62845, 14455, 57993, 41036,
-16503, 46738, 29806, 8528, 59766, 3441, 56415, 10094, 60696, 588, 35751,
-65317, 4452, 51898, 23756, 8588, 55385, 31551, 51343, 27758, 5208, 58502,
-12070, 54983, 3806, 59632, 14061, 36563, 27341, 54217, 19987, 64490, 6208,
-55178, 34846, 3619, 58241, 33761, 61355, 10109, 39443, 5985, 25861, 60382,
-19221, 40127, 51436, 13927, 22679, 54028, 33201, 6556, 31377, 42223, 19905,
-31998, 65216, 14992, 23393, 47761, 31426, 7436, 35245, 21805, 64639, 31570,
- 1672, 62637, 34457, 8695, 35632, 50961, 17634, 64397, 14164, 49385, 8235,
-43979, 13528, 49064, 39566, 21848, 5756, 27687, 42405, 7782, 44717, 21705,
-58199, 19041, 61450, 28642, 2603, 47922, 7792, 46686, 1071, 44314, 12180,
-25028, 51395, 23537, 369, 40453, 31767, 5225, 59379, 13959, 55195, 33667,
-15411, 28847, 41112, 8802, 16978, 53925, 4191, 49117, 9682, 26811, 44989,
-19406, 49897, 15032, 58701, 32146, 16681, 46852, 34783, 22610, 59477, 15971,
-63236, 39829, 19182, 42619, 23410, 53103, 22153, 58972, 20785, 52147, 29355,
- 2545, 54541, 18439, 48416, 36411, 14404, 53074, 23724, 55367, 15377, 60661,
- 5543, 34272, 50043, 17465, 37554, 57342, 21925, 10038, 55574, 5931, 62510,
-20596, 52991, 24261, 63731, 19984, 31771, 38980, 15932, 47312, 18729, 42267,
-31753, 2363, 32687, 56046, 5626, 63766, 28583, 8567, 51746, 26310, 64215,
-17887, 54962, 13861, 59635, 783, 43348, 18945, 54065, 22670, 55985, 4805,
-61394, 36164, 1997, 30258, 61038, 19546, 57381, 16960, 64461, 21131, 54559,
-27335, 57560, 6319, 60818, 28737, 47267, 31564, 9237, 32722, 65451, 11363,
-35230, 61106, 22847, 6867, 49376, 32040, 4304, 45193, 12171, 40420, 18055,
-42902, 12520, 37574, 63771, 17857, 49855, 36009, 22680, 44482, 9514, 32880,
-50790, 2320, 42824, 17500, 40423, 19607, 61572, 35683, 3691, 57044, 9491,
-43890, 32138, 7236, 28938, 61795, 353, 38289, 48868, 18070, 42303, 22673,
-40673, 20760, 45536, 18026, 31207, 40635, 15423, 60027, 39980, 16283, 43163,
-13092, 45654, 19559, 35041, 46803, 16009, 48993, 22436, 43497, 57694, 8730,
-37735, 4249, 32031, 46520, 17642, 27589, 51474, 22441, 7084, 27988, 52230,
-21477, 63379, 36456, 1197, 47783, 10565, 25199, 57061, 42952, 9746, 49813,
-26444, 48495, 3813, 52394, 38027, 1135, 53237, 35669, 4931, 58842, 19654,
-56900, 38156, 10239, 45688, 35767, 13135, 25329, 59778, 23360, 11268, 45551,
- 4980, 54177, 20475, 61425, 23424, 55895, 308, 25864, 63236, 32371, 54398,
-14551, 64543, 26921, 53050, 1889, 41016, 11804, 42359, 54734, 20026, 40628,
-15017, 60724, 19216, 55448, 41178, 7048, 37454, 63436, 17665, 49727, 35413,
-25192, 45868, 7949, 40322, 58882, 5612, 63036, 29777, 46510, 22093, 42481,
-18353, 62039, 37484, 14369, 63600, 6459, 30910, 37555, 5750, 64638, 11164,
-56079, 7415, 29623, 44563, 23792, 9090, 57365, 754, 62087, 11321, 41894,
- 3296, 43268, 14503, 46463, 24291, 38965, 32885, 11784, 52085, 33956, 9398,
-44905, 3130, 48537, 23447, 58276, 25640, 10982, 44307, 7291, 24729, 48547,
-33903, 25765, 38378, 30522, 48185, 1445, 42105, 14073, 37276, 55503, 9607,
-62835, 316, 55067, 13174, 64626, 28705, 49995, 18022, 42668, 16196, 37181,
-60291, 15617, 42322, 11266, 46042, 28268, 38828, 23161, 51176, 12281, 49425,
- 2819, 44380, 13973, 46355, 17607, 50148, 22574, 43354, 8658, 44660, 27909,
-38128, 7900, 47023, 2622, 42023, 14481, 44239, 20841, 52515, 2135, 57112,
-26585, 52148, 15144, 30860, 48731, 16018, 51606, 29173, 39198, 14793, 64472,
-20114, 58365, 23976, 61709, 4682, 55699, 26876, 2974, 44080, 10350, 62375,
- 584, 29470, 57527, 39976, 18501, 56584, 27142, 65070, 11483, 53697, 30285,
-16424, 49297, 22797, 50907, 15925, 39988, 53263, 13868, 34809, 51112, 15355,
-33261, 53483, 10979, 47955, 5117, 52560, 11772, 57205, 7455, 54801, 33733,
- 1375, 29945, 62100, 5640, 57188, 30317, 64733, 7887, 27026, 61859, 35871,
- 7171, 32193, 19233, 33736, 61512, 24881, 56198, 9554, 38416, 62300, 12271,
-44207, 31720, 46597, 2319, 42779, 11293, 27830, 54694, 21149, 65411, 37277,
- 3538, 32221, 38452, 20287, 62673, 14286, 58470, 11748, 24082, 43325, 11016,
-45182, 21170, 33562, 50705, 249, 26267, 59264, 18337, 52808, 30111, 46864,
- 2891, 39715, 56922, 19799, 38666, 25613, 36972, 3335, 46516, 17651, 37379,
-52123, 9590, 42918, 3075, 46729, 36155, 5248, 34964, 48212, 17223, 53492,
-24392, 9729, 31855, 57121, 26803, 36821, 32272, 3819, 30825, 59008, 12808,
-25916, 53854, 11535, 61560, 3145, 29625, 64306, 18004, 31974, 49632, 21261,
-52711, 808, 60019, 12540, 52347, 28755, 1778, 51116, 23196, 42733, 60356,
-16010, 45351, 20786, 41967, 18594, 50616, 38049, 2497, 52843, 34527, 26833,
-37923, 18116, 48851, 19813, 54031, 26554, 63399, 9844, 57228, 6280, 62807,
-30839, 1107, 60838, 26620, 32890, 65176, 12193, 35536, 13709, 39115, 56388,
-20672, 61653, 40379, 2128, 64345, 14402, 58019, 11067, 26978, 59103, 22277,
-53780, 2962, 26977, 45056, 23356, 40333, 20993, 37599, 6269, 45626, 10597,
-59237, 24932, 54989, 1695, 27391, 44896, 6149, 54066, 34440, 2558, 57772,
- 8340, 28900, 61722, 30015, 39771, 26013, 63427, 29043, 38465, 9226, 65419,
-15866, 54705, 34509, 5758, 50388, 31333, 18426, 61225, 22473, 51211, 32112,
- 8399, 33241, 40702, 16423, 42609, 5482, 38552, 54703, 3402, 44119, 10040,
-62091, 1479, 52352, 30673, 38174, 2616, 49959, 15948, 47060, 21727, 45629,
-34156, 28621, 54820, 25151, 34455, 51173, 20765, 4952, 48646, 12629, 37614,
- 5582, 46380, 34039, 793, 59213, 32223, 5693, 33696, 58487, 1262, 29970,
-60352, 8938, 24633, 58876, 5980, 25937, 64796, 18870, 58536, 35379, 23727,
-41735, 30150, 13105, 50862, 25348, 47237, 18351, 49946, 24380, 771, 37028,
-53961, 42923, 2220, 24449, 42494, 65535, 184, 47844, 11491, 50999, 21613,
-43178, 31204, 1341, 48589, 15557, 64223, 19917, 55964, 18508, 58668, 44558,
-14310, 39002, 7587, 29708, 59816, 13336, 54948, 1980, 30230, 44509, 28612,
-35848, 62317, 17170, 56001, 25703, 63184, 9865, 40341, 30027, 47276, 8127,
-42520, 4621, 61111, 11960, 52051, 27234, 7359, 33496, 60922, 12238, 52919,
-33265, 10915, 58983, 31783, 15112, 48490, 19419, 60591, 24427, 16684, 50379,
-19997, 31522, 62528, 5614, 34507, 64187, 38925, 4523, 48952, 9275, 43021,
-64648, 14052, 45087, 33709, 42541, 6279, 44456, 22135, 38042, 53091, 10217,
-48470, 2506, 38334, 10842, 36399, 26715, 37939, 32133, 6694, 40592, 59250,
-31806, 10042, 34129, 915, 52035, 26925, 55020, 3518, 61649, 33661, 15000,
-49067, 21268, 60099, 12736, 54937, 32962, 8380, 64518, 33853, 7097, 30454,
-44614, 19749, 42255, 13169, 49418, 39878, 20328, 50542, 15898, 37670, 27454,
-46422, 62277, 29566, 3514, 45657, 9593, 30679, 50702, 18701, 42329, 3993,
-45463, 35672, 17991, 46786, 11967, 33870, 59729, 5989, 52792, 14251, 60102,
-25776, 51401, 23651, 38612, 3990, 46394, 13701, 33083, 52847, 20311, 59090,
-24686, 17010, 50858, 20250, 33751, 45093, 21130, 6844, 58373, 10953, 36441,
- 514, 51186, 27889, 33979, 46884, 3043, 23387, 63154, 17398, 56719, 35457,
-10416, 39923, 4499, 64985, 25570, 55408, 11099, 62655, 22336, 59428, 28188,
-18198, 63496, 20594, 40382, 23993, 47436, 21312, 8861, 55283, 26943, 33310,
-37115, 10943, 60207, 14454, 53192, 6080, 38272, 11897, 59489, 7004, 37627,
-63481, 24692, 44823, 22356, 58646, 26320, 13766, 48047, 36767, 14691, 64698,
-17885, 42905, 25321, 46943, 18416, 38921, 49574, 20242, 43596, 35569, 1635,
-44354, 28495, 9080, 63235, 2353, 59313, 36047, 20080, 63990, 8224, 38702,
-11103, 34316, 52604, 22540, 9997, 20207, 34041, 56289, 11988, 26798, 50416,
-20502, 41919, 28873, 3124, 59316, 17052, 55580, 24665, 36693, 4713, 49611,
- 9345, 40937, 31591, 5323, 32392, 57697, 23253, 52163, 17788, 46625, 21621,
-40555, 55797, 6849, 18492, 50690, 5460, 46515, 35018, 2659, 28819, 49530,
-16886, 61654, 20616, 53622, 24895, 39906, 21928, 43065, 18982, 65094, 29656,
-50261, 1458, 42491, 16791, 63642, 28171, 38852, 6044, 61778, 30321, 40118,
- 8931, 34159, 59233, 12234, 56626, 8464, 37941, 28244, 51557, 13401, 23349,
-59875, 21285, 54319, 16130, 28472, 51065, 22486, 2390, 61259, 31338, 16857,
-57546, 13317, 27502, 44028, 21671, 54212, 23639, 57259, 18905, 64712, 15518,
-55565, 44287, 20851, 13814, 48303, 26144, 54481, 40776, 30169, 9557, 32553,
-47629, 25022, 5587, 58835, 28902, 7829, 43296, 31223, 5086, 47360, 25633,
-39410, 15248, 51526, 38073, 245, 53225, 22581, 58168, 25643, 8951, 47197,
- 4489, 59258, 7749, 53676, 711, 19617, 47426, 23104, 36226, 53042, 15566,
-34941, 56061, 11881, 54495, 15157, 60583, 5620, 31099, 65357, 38699, 15611,
-43909, 20353, 41957, 3685, 43358, 12488, 53918, 20140, 62229, 22752, 36541,
-64798, 9663, 41025, 3590, 37518, 62973, 9229, 40237, 65059, 3489, 55581,
-37875, 23481, 52265, 21875, 59248, 12728, 56883, 6222, 24864, 59857, 40014,
-12187, 42580, 332, 45483, 21683, 56272, 31196, 15339, 42769, 18464, 47644,
- 3837, 44632, 12623, 49415, 35482, 8227, 33270, 58160, 12412, 28782, 57353,
-40280, 14031, 50882, 6392, 65260, 31262, 1112, 42109, 20513, 61139, 19350,
-48242, 21801, 43502, 27855, 10898, 52655, 1349, 54431, 9764, 39864, 62752,
-23302, 8306, 53048, 26720, 38803, 9965, 62316, 6497, 55189, 27464, 2644,
-63340, 11390, 54992, 30986, 15050, 49894, 34100, 27262, 50395, 22034, 47878,
- 4867, 41684, 21574, 56157, 27451, 63155, 14306, 36259, 60764, 28856, 51611,
-17638, 46021, 34644, 10472, 57277, 6523, 63245, 35474, 12835, 33406, 41983,
-10765, 58893, 29291, 37805, 25609, 62610, 15340, 36211, 48122, 2677, 45587,
-11752, 41071, 5743, 63305, 9477, 24457, 47486, 34381, 22996, 56685, 30502,
-14828, 59811, 39412, 7672, 54578, 4188, 37558, 13307, 64147, 15096, 56026,
- 6320, 48437, 13589, 41834, 15684, 56568, 31473, 47971, 4517, 43566, 13325,
-50263, 25141, 2323, 52771, 27303, 46199, 1247, 41558, 25629, 45800, 20947,
-44030, 61, 45189, 33722, 8765, 46359, 1564, 39325, 58096, 5102, 36493,
-54988, 18849, 39642, 50793, 1406, 46714, 34228, 6090, 62802, 12039, 41631,
- 4451, 44926, 8304, 42780, 3260, 25511, 57515, 37263, 4700, 65042, 11429,
-19782, 62761, 22722, 57885, 14614, 35092, 45675, 19671, 39046, 63786, 16586,
-40349, 61344, 14183, 56537, 1805, 58676, 32484, 19090, 60341, 15865, 45405,
- 4034, 37271, 64130, 18686, 42132, 22005, 44039, 17969, 41674, 55060, 6781,
-64908, 13933, 31750, 59969, 5855, 29144, 46920, 34106, 23547, 40736, 28168,
-49284, 21021, 7852, 54906, 29779, 63246, 11349, 56478, 17444, 61235, 1304,
-40812, 11175, 51145, 6614, 28356, 47920, 22474, 50003, 29002, 15152, 47067,
-25553, 12802, 48315, 32212, 10233, 43135, 4609, 47152, 16391, 44814, 19953,
-39253, 52079, 10554, 32729, 55112, 20056, 61886, 24813, 49218, 6020, 37527,
-54182, 1012, 59018, 29780, 37357, 17487, 53764, 138, 43532, 26847, 50597,
- 2481, 35295, 45117, 5580, 26224, 62846, 22065, 43093, 12935, 39795, 53944,
-23289, 49461, 13308, 40024, 2235, 56237, 14018, 60620, 36357, 17205, 41517,
-20068, 49171, 31254, 4457, 55231, 32841, 43709, 2443, 56815, 34101, 23044,
-44151, 14777, 45637, 34459, 16969, 46328, 21826, 39613, 62002, 6338, 55847,
-14138, 38897, 10791, 32464, 60575, 26639, 49511, 2926, 44890, 6580, 31145,
-47188, 3465, 44718, 8402, 62691, 4379, 59052, 21751, 36472, 51931, 16218,
-47424, 26126, 61189, 5755, 50306, 17611, 45460, 13789, 50840, 287, 29163,
-51808, 16665, 63774, 25813, 33173, 60999, 27384, 36531, 30752, 58932, 13570,
-63961, 626, 36257, 10498, 52746, 31834, 18521, 45768, 24236, 42942, 18102,
-44758, 2324, 46502, 29915, 38069, 25904, 58610, 5486, 44562, 24023, 8517,
-26660, 57640, 22305, 53998, 18386, 44568, 35825, 20703, 62963, 13166, 54112,
-15169, 64993, 4091, 57866, 15723, 61167, 16961, 56473, 26395, 35565, 62200,
-24077, 11845, 47633, 27297, 10046, 49303, 8217, 25428, 65099, 20322, 56228,
-24635, 35602, 46453, 16426, 59455, 28627, 54434, 19836, 61621, 34701, 7804,
-30052, 46424, 21482, 38474, 49502, 7129, 44910, 2067, 30748, 64247, 12077,
-56655, 1180, 33013, 51330, 3024, 26688, 43952, 20906, 46027, 28157, 6026,
-49986, 10937, 36163, 29560, 55229, 14838, 31987, 52488, 9944, 56617, 30464,
-60530, 10741, 34017, 27375, 35428, 49107, 1250, 40917, 26532, 62770, 20599,
- 190, 63535, 10413, 56875, 2424, 33260, 50283, 24947, 900, 32993, 48238,
-26824, 36378, 31062, 47643, 21615, 43083, 18588, 58152, 38131, 13219, 61609,
- 7930, 57099, 33197, 1117, 60378, 29728, 37184, 17962, 59941, 19680, 64571,
-25818, 40802, 3704, 62893, 31851, 18308, 45870, 26363, 5423, 49669, 29331,
- 9004, 33366, 59507, 11732, 23430, 43790, 26968, 12134, 63985, 33861, 24801,
-56960, 14462, 60168, 17156, 31265, 53088, 19734, 60841, 36653, 678, 46104,
-16939, 48903, 27417, 8675, 58928, 4096, 31076, 64748, 27315, 33668, 46533,
- 3424, 29644, 56952, 7569, 60265, 34837, 15306, 50760, 36335, 20727, 11931,
-50443, 17312, 47834, 3877, 30720, 64105, 7854, 56241, 31695, 4444, 57670,
- 8396, 24988, 45227, 21116, 43215, 3836, 51446, 16202, 37718, 12543, 35157,
-58414, 18808, 35826, 52026, 11605, 58693, 16787, 31425, 38209, 24372, 43377,
-30122, 2034, 31234, 39353, 8228, 53894, 20499, 38402, 27236, 65185, 3027,
-57241, 23366, 34727, 60185, 6617, 30862, 37507, 9014, 49083, 833, 54301,
-12755, 51380, 3085, 39611, 16756, 42118, 61197, 21025, 37540, 5697, 64926,
-14334, 57225, 12151, 60139, 30698, 51700, 21232, 10617, 63410, 764, 30831,
-52463, 18367, 62796, 32755, 49877, 10303, 40601, 991, 65351, 11617, 57167,
- 7345, 29919, 42668, 23062, 38479, 19029, 50933, 11291, 37033, 25306, 49147,
- 3407, 43323, 11148, 19322, 50311, 37383, 17319, 64064, 38632, 20746, 58853,
-36410, 14733, 42870, 11279, 50469, 217, 28010, 51298, 36621, 13653, 33932,
-48457, 10470, 51575, 23050, 60539, 14973, 52765, 2949, 32257, 56746, 23665,
-35668, 50391, 6640, 42899, 24251, 48663, 10610, 22183, 58390, 37109, 6467,
-52963, 10227, 35412, 62397, 23158, 41263, 65367, 7955, 27217, 46667, 1519,
-38586, 26710, 36270, 2721, 24606, 49612, 4616, 58672, 11700, 25481, 57597,
-18974, 48396, 8867, 43711, 36010, 25683, 46477, 18187, 39579, 62077, 10032,
-40864, 58789, 18700, 37870, 4988, 50448, 9100, 27917, 63631, 4814, 49527,
-31004, 595, 45413, 19937, 41692, 18298, 53510, 36524, 14319, 54388, 6404,
-52781, 1779, 48919, 30195, 8868, 50706, 27844, 36651, 8184, 56125, 1663,
-64119, 34052, 14355, 41446, 53474, 16702, 39922, 29178, 62467, 7332, 49307,
-33018, 5761, 48582, 9173, 30191, 45610, 5005, 38767, 64804, 8524, 42190,
-13469, 31990, 54473, 24906, 59509, 4434, 51865, 35754, 17762, 34264, 43989,
- 9877, 50571, 7787, 21282, 52073, 38760, 19113, 44286, 25800, 2879, 63680,
-28773, 6974, 61715, 41773, 31466, 59952, 13122, 55967, 37922, 20799, 41612,
-17886, 50785, 37612, 18742, 48159, 35036, 941, 58192, 17045, 65026, 22434,
-56496, 57, 53012, 29703, 9230, 32651, 61585, 15778, 41156, 24970, 35072,
-48913, 13074, 50859, 9356, 40603, 63946, 14686, 49622, 22310, 40978, 712,
-49023, 12478, 36251, 28398, 39223, 8637, 46542, 12917, 40574, 55762, 19144,
-59351, 22200, 39079, 20076, 42222, 25475, 45468, 22427, 50005, 29097, 8386,
-33362, 49285, 23572, 40528, 32747, 1251, 50162, 33574, 7128, 27291, 58216,
-36041, 23201, 34247, 46202, 11172, 40596, 2654, 45275, 20739, 59731, 16199,
-46881, 30917, 39461, 22056, 34490, 55026, 4788, 59977, 7651, 47494, 27574,
-33425, 53677, 6113, 39626, 27918, 63009, 33106, 55296, 5852, 25614, 52034,
- 642, 28735, 45678, 4599, 31904, 54061, 3674, 59824, 16107, 33789, 61170,
- 7367, 23139, 63747, 1630, 26586, 40903, 16346, 43544, 425, 45133, 29064,
-61856, 12910, 36498, 8913, 60610, 13582, 40984, 19026, 53839, 15930, 35899,
-46368, 29379, 12136, 64978, 33130, 24091, 53906, 16745, 47876, 2252, 21842,
-33750, 59135, 17768, 61719, 20137, 54792, 15344, 63211, 40820, 21573, 39148,
-17723, 43260, 53828, 8259, 38062, 16060, 52786, 21959, 50011, 6745, 29438,
-54043, 13989, 23122, 45139, 27895, 7449, 52322, 13378, 64982, 15800, 56126,
-38243, 16565, 54302, 34925, 15296, 60451, 25842, 52180, 3160, 44053, 10625,
-26931, 49496, 22671, 42312, 20804, 44068, 15102, 37127, 55838, 17216, 60758,
-14755, 49260, 21071, 42393, 17738, 38642, 58485, 3780, 28410, 63827, 2314,
-46969, 13687, 52649, 18084, 57854, 39411, 15540, 60636, 40900, 18634, 51667,
-11842, 24466, 46299, 18018, 49630, 7432, 38993, 10491, 36927, 30722, 14967,
-63367, 25766, 54963, 16054, 57739, 23666, 36823, 62695, 25983, 5769, 65316,
-10343, 53978, 30037, 42805, 16827, 45336, 33573, 21882, 6114, 26459, 45023,
-23859, 10435, 52228, 650, 59655, 9415, 27222, 61263, 15594, 53713, 26447,
-33872, 46490, 12052, 40081, 25081, 45579, 18059, 64437, 23956, 48292, 1711,
-29476, 55405, 6217, 64850, 1094, 56924, 19778, 60898, 18045, 32213, 54890,
- 4695, 58316, 28710, 62746, 23578, 55326, 7439, 53346, 16541, 61716, 20756,
-53968, 32632, 11548, 45013, 4488, 53287, 10941, 58283, 6409, 65077, 11359,
-57062, 5263, 54174, 25957, 58608, 2237, 53571, 10146, 48194, 27435, 37489,
-19786, 62898, 40354, 3581, 49667, 9285, 57053, 16396, 61981, 21459, 55757,
-29429, 6633, 35810, 51420, 28335, 9383, 58713, 3184, 47787, 14087, 44806,
-18224, 51789, 31341, 2130, 42810, 21993, 63795, 14225, 51863, 7403, 20728,
-41992, 29245, 60804, 14621, 33044, 56355, 15727, 61943, 11916, 37502, 28614,
-39984, 26124, 47365, 18431, 44415, 33442, 11817, 35932, 56462, 5140, 64364,
-32497, 53966, 20569, 8216, 42589, 26161, 49002, 31576, 17341, 51872, 25213,
-61008, 3767, 31202, 63025, 4798, 55715, 20027, 40217, 14687, 45287, 3636,
-39607, 12995, 54450, 36875, 50669, 4745, 43249, 11768, 47950, 6019, 45822,
-28294, 8639, 53156, 31817, 64018, 2309, 33494, 22199, 61914, 31144, 3181,
-58148, 15333, 60189, 41954, 4685, 37032, 55693, 3513, 61082, 36722, 22367,
-43815, 23487, 42270, 25250, 2810, 44196, 29425, 7755, 49065, 36031, 8919,
-30194, 58544, 21954, 62632, 38521, 4099, 63806, 11228, 57420, 29126, 62115,
- 5255, 31467, 38601, 942, 41542, 26730, 59599, 11808, 52678, 7306, 31190,
-48239, 15059, 35513, 50715, 19457, 38792, 23867, 42218, 1866, 26437, 52162,
-23275, 3056, 63198, 27976, 34048, 56220, 1631, 59897, 27719, 55806, 18397,
-64031, 19731, 56686, 38451, 1948, 47139, 6484, 45203, 35280, 280, 48091,
-10622, 34065, 45631, 23369, 40031, 14988, 48071, 8510, 31650, 58350, 107,
-54500, 30233, 64922, 1874, 33438, 61103, 25615, 48403, 19929, 33062, 46700,
- 2834, 41328, 10535, 62702, 7261, 29156, 54639, 5063, 60960, 10090, 41469,
- 5837, 42858, 13863, 57478, 38610, 21356, 45904, 19200, 37551, 29246, 43859,
- 3334, 48581, 7716, 37895, 27681, 36171, 10587, 43738, 15104, 30961, 42931,
-19565, 44615, 4057, 42135, 26771, 1684, 64444, 25469, 41331, 23069, 47033,
-27927, 44831, 21304, 37940, 18479, 43730, 15135, 41762, 16175, 45296, 19006,
-59521, 21311, 61950, 4979, 52356, 11435, 24222, 55506, 18798, 41932, 25240,
-37543, 5821, 51033, 11862, 34521, 64026, 25184, 3794, 61346, 22792, 33436,
-52390, 25508, 63479, 28371, 39264, 9974, 62415, 20662, 58830, 12371, 30035,
-44308, 22629, 38290, 58285, 2052, 49408, 9525, 39364, 47074, 7632, 42449,
-21749, 49008, 18571, 55746, 6508, 62567, 9434, 54589, 3868, 58179, 27714,
-50081, 18730, 42708, 28350, 9294, 24530, 58384, 38075, 14547, 54180, 4269,
-59003, 38716, 139, 43324, 11380, 38064, 50045, 12843, 44153, 28331, 51862,
- 499, 59831, 27063, 56739, 19330, 61192, 26698, 9592, 19715, 56012, 24513,
-40153, 30944, 57539, 13901, 37584, 59492, 16771, 9513, 42161, 20164, 51605,
-40817, 5321, 46695, 34306, 11559, 37667, 31797, 18952, 64820, 32572, 12717,
-50780, 32250, 10641, 58020, 1906, 53976, 8106, 61831, 32596, 59491, 14467,
-57488, 31830, 17429, 65262, 37900, 13911, 46995, 7267, 30065, 45887, 19418,
-41011, 25812, 7532, 33404, 52120, 14008, 57725, 23595, 53615, 6122, 35205,
-47450, 23248, 61499, 19173, 33624, 56849, 7906, 29810, 60984, 4376, 55723,
-12448, 65207, 36533, 8020, 46446, 31051, 37765, 6874, 47862, 14222, 40980,
-31610, 5199, 33096, 43314, 2854, 44393, 9138, 32374, 42401, 22482, 59853,
-13552, 26544, 61648, 17370, 30505, 53109, 16384, 55905, 988, 59439, 19652,
-55510, 38805, 12529, 42413, 16480, 46938, 14982, 51846, 37352, 6735, 43057,
-11908, 36855, 65247, 14220, 52821, 21712, 44372, 19249, 49073, 38423, 21533,
-42446, 19903, 48948, 27535, 53953, 19367, 50098, 33143, 4647, 53288, 9902,
-31799, 51232, 7119, 26187, 54068, 21221, 45342, 15624, 52428, 19465, 60418,
- 5288, 37244, 57742, 1950, 63088, 30307, 54825, 14376, 57598, 38684, 15187,
-52384, 17836, 62912, 3252, 36787, 10340, 52633, 1490, 61766, 30379, 55666,
- 3719, 64508, 29826, 36983, 6187, 44551, 13802, 42158, 17514, 45207, 35007,
- 8662, 32966, 61286, 2041, 48824, 27873, 39031, 22840, 43847, 13931, 48551,
-39882, 15234, 46260, 7043, 40976, 10550, 36832, 502, 49596, 24272, 33715,
-50224, 8068, 35360, 55048, 945, 60500, 10484, 32034, 36637, 23382, 57046,
-31155, 16983, 63605, 26462, 53069, 1741, 41904, 13476, 48289, 22960, 38443,
-28872, 43047, 15055, 46280, 6242, 60142, 13895, 52425, 31563, 46658, 5467,
-33862, 63877, 21124, 44784, 18728, 29988, 65174, 20134, 55045, 26438, 17115,
-57735, 35365, 8925, 22727, 49114, 35126, 9314, 30634, 46845, 5418, 43747,
-31552, 45561, 29253, 10193, 64646, 2911, 26505, 44608, 23566, 359, 47788,
-56209, 24509, 60349, 10367, 29314, 56324, 14758, 64487, 25043, 54999, 1796,
-51869, 9185, 24136, 46135, 26721, 17077, 48483, 20458, 39993, 16255, 46865,
-35651, 21457, 6494, 34111, 40948, 2208, 46443, 24265, 5451, 55032, 33293,
-21150, 56050, 12064, 59436, 251, 54580, 43594, 17691, 35675, 46582, 9271,
-45067, 16006, 65151, 28545, 2958, 44056, 11261, 51048, 1190, 37867, 25368,
-44666, 10884, 42775, 20486, 45730, 16362, 28957, 53581, 20652, 58500, 17085,
-54689, 22659, 62274, 19070, 53689, 25251, 61289, 12559, 51331, 21516, 48531,
-16715, 62403, 9672, 30048, 40595, 54004, 8355, 33015, 58223, 3069, 42425,
-12814, 46989, 27374, 37126, 3948, 24187, 62239, 20508, 57006, 8829, 39445,
-31764, 18856, 53599, 22548, 58047, 30426, 5570, 39209, 28451, 59917, 4716,
-51754, 27722, 2058, 63518, 13569, 56736, 34864, 2579, 36405, 61869, 7617,
-26258, 63833, 15142, 39532, 57979, 15627, 63350, 33567, 13313, 59993, 24599,
-64986, 1478, 40182, 13875, 47611, 29467, 11957, 49785, 33527, 9030, 24477,
-47589, 7016, 33357, 48718, 5542, 43935, 13179, 51568, 19359, 60580, 25049,
-48337, 27541, 9195, 35386, 48784, 24467, 8698, 50947, 33227, 24081, 54885,
-30190, 58810, 537, 65299, 26417, 47577, 15838, 53072, 13627, 59991, 8028,
-57953, 113, 55105, 28669, 8869, 56006, 30158, 64474, 18639, 56880, 23388,
-60422, 16697, 56348, 3606, 38066, 25998, 46853, 15323, 42138, 18835, 48234,
-21328, 65376, 13222, 41325, 3300, 48497, 35873, 5466, 30471, 58366, 21309,
-64847, 35029, 2628, 57223, 10920, 34158, 62954, 21125, 41268, 23752, 38825,
- 2420, 62313, 16835, 51152, 27432, 1493, 40210, 10240, 56240, 7745, 34254,
-46902, 5988, 45343, 34244, 1944, 23997, 61576, 36476, 7015, 21126, 63917,
-40557, 15688, 51421, 21120, 62952, 850, 57998, 36020, 22730, 34237, 52411,
- 7719, 63544, 34097, 28707, 38531, 3649, 30410, 48870, 18043, 36013, 45179,
- 7401, 42478, 16482, 43672, 20714, 39841, 56773, 559, 62675, 38732, 5386,
-64073, 24229, 57187, 28564, 12944, 50993, 27968, 48260, 17935, 62429, 11652,
-51652, 28829, 41251, 1481, 50530, 25831, 40089, 23732, 48782, 30948, 10307,
-64280, 2454, 28384, 61613, 30075, 39163, 10096, 33831, 58079, 21556, 39763,
-24485, 64842, 20726, 59227, 15485, 54508, 30784, 62201, 7018, 38216, 59817,
-13017, 40235, 848, 44008, 10458, 37108, 3777, 42781, 9908, 47140, 20943,
-39629, 30208, 59184, 5782, 53611, 25421, 34734, 49577, 3775, 20952, 51021,
-41628, 18838, 49111, 20775, 61334, 34435, 11159, 64295, 29652, 52319, 6528,
-48774, 35131, 25984, 59325, 4341, 62578, 11059, 41397, 2227, 49776, 25166,
-56503, 8823, 36491, 32103, 12509, 58527, 37020, 18545, 50665, 6822, 30359,
-58788, 22812, 12483, 35576, 44714, 18684, 47770, 27501, 2808, 42966, 20216,
-47713, 37144, 5518, 41960, 11358, 44694, 22112, 55950, 20410, 64043, 24757,
-38654, 15501, 58561, 37208, 19861, 62016, 27503, 17065, 60840, 24349, 38019,
-28566, 40880, 5010, 42795, 12611, 39575, 57770, 22108, 14545, 38955, 55263,
-13121, 63463, 1894, 37486, 9430, 27083, 48975, 20419, 53594, 5295, 30882,
-36595, 22380, 41322, 33413, 24329, 45849, 17469, 37150, 49618, 21162, 1606,
-43104, 32028, 4989, 45572, 12923, 41655, 27466, 45909, 13572, 64706, 5138,
-57585, 29493, 52499, 3978, 44996, 6933, 53970, 18705, 61522, 24696, 12872,
-51466, 38266, 14979, 46044, 6953, 26939, 45083, 20285, 51695, 24174, 1093,
-53598, 12252, 55122, 19336, 45116, 22582, 40657, 11719, 59627, 30291, 52210,
-23331, 36330, 50244, 14378, 28903, 57030, 14902, 63672, 29615, 47924, 16251,
-54482, 30137, 52583, 25874, 1689, 58855, 36253, 8422, 34878, 48881, 16332,
-51810, 6578, 60776, 17178, 48665, 20547, 51259, 13276, 22315, 52828, 34932,
- 6879, 58933, 811, 30022, 51411, 28386, 60771, 10763, 58666, 33200, 14935,
-44339, 33674, 15599, 50042, 11623, 44616, 4244, 38054, 55228, 6, 64432,
-10155, 52957, 25619, 39645, 14905, 56359, 19874, 64058, 35281, 5167, 61884,
- 8313, 36365, 20600, 55431, 37118, 24503, 48768, 19311, 4223, 50600, 25322,
-48415, 16639, 52050, 6834, 45272, 10354, 41526, 4914, 49241, 26582, 470,
-34218, 49628, 24404, 3531, 47535, 18289, 64245, 24036, 57153, 27107, 52853,
-22010, 65100, 29729, 403, 57249, 9402, 23633, 42827, 28754, 1239, 57423,
-14330, 63881, 37705, 29221, 5468, 64611, 9139, 39681, 31372, 4926, 51172,
-17715, 44796, 14426, 41347, 30193, 2780, 50644, 15626, 46224, 21717, 44340,
-18078, 63563, 14589, 45722, 20465, 43673, 15291, 64349, 41775, 23068, 9088,
-43681, 33666, 23720, 45147, 15634, 46762, 29537, 59689, 632, 55621, 9003,
-35519, 62043, 11579, 55926, 409, 28871, 52823, 18598, 57409, 28555, 50232,
- 7960, 41609, 2929, 45848, 6411, 51599, 28104, 891, 43595, 12184, 50554,
-36553, 9261, 53449, 383, 59975, 16179, 55883, 21782, 64188, 33114, 5843,
-42471, 62494, 67, 27823, 42007, 19914, 46216, 18167, 56185, 39091, 13028,
-43636, 15200, 39826, 62452, 9646, 56200, 3923, 64789, 10035, 30814, 63057,
- 4727, 23955, 60756, 38383, 15693, 51893, 36424, 21012, 54626, 6362, 61209,
-21448, 51685, 17879, 31917, 39208, 8521, 24967, 61862, 16241, 38841, 28687,
-49950, 8907, 33783, 57860, 22974, 8051, 61088, 34320, 29381, 55206, 14428,
-60648, 7500, 48727, 35684, 29614, 44204, 4337, 60990, 11143, 53028, 6455,
-43168, 18254, 46933, 12333, 63128, 4920, 31307, 61439, 2462, 40474, 31075,
- 7319, 50836, 11208, 42658, 4231, 41730, 10731, 46091, 34206, 12399, 23898,
-57170, 26493, 13366, 41767, 21794, 43714, 27317, 41277, 12206, 37532, 5578,
-61298, 42426, 11868, 65519, 26075, 39865, 22867, 63035, 20019, 3841, 36436,
-49926, 23582, 4863, 49422, 29474, 7176, 54206, 21548, 41491, 18809, 59742,
-12042, 30644, 41836, 20558, 44335, 29179, 3910, 59100, 31780, 6332, 45256,
-10352, 28474, 48139, 18564, 31782, 58465, 4487, 33654, 12163, 53047, 7125,
-40191, 55962, 20688, 63169, 103, 40768, 13407, 62547, 28835, 55824, 14738,
-46045, 17805, 37141, 57545, 21484, 9706, 55343, 35466, 26593, 51617, 11106,
-41318, 5431, 38900, 11693, 44386, 6466, 36552, 52116, 15341, 37408, 64373,
-15729, 47734, 35974, 18863, 45653, 24100, 11500, 56471, 25308, 36904, 27838,
-53384, 15799, 43564, 25676, 57661, 1661, 36479, 60103, 18066, 63920, 11511,
-36616, 28775, 56253, 7714, 51603, 28709, 37343, 9647, 61459, 289, 47610,
-24851, 3523, 55087, 29080, 62144, 1056, 55699, 11287, 65416, 5194, 52387,
-20976, 32404, 40496, 24510, 50456, 17349, 32690, 40494, 24059, 59399, 8719,
-48499, 35645, 4196, 33770, 59709, 16328, 54686, 30017, 61313, 17536, 40456,
-64803, 21468, 56408, 2849, 28674, 46523, 22618, 42299, 20878, 46163, 11880,
-50479, 2464, 23189, 53197, 30108, 11730, 34059, 57417, 7553, 59749, 25782,
-50376, 6579, 31687, 60897, 3118, 57144, 32203, 18475, 46018, 25226, 50607,
-19192, 38169, 51242, 16417, 41079, 53280, 12620, 27437, 59503, 11219, 28692,
-48246, 16033, 38695, 12104, 42424, 1315, 36512, 54054, 19632, 59068, 35656,
-10715, 32608, 50890, 300, 37326, 27072, 44522, 2479, 41095, 52597, 24548,
- 775, 47317, 10268, 43258, 30367, 39879, 17053, 65239, 13483, 26503, 49722,
-30521, 37149, 25903, 64583, 21329, 55799, 3493, 37949, 26694, 48619, 17226,
-35918, 52832, 18186, 59988, 34970, 22173, 55855, 28237, 64750, 19513, 56260,
-17622, 62571, 29602, 52269, 4003, 32780, 64093, 3264, 55653, 10602, 58360,
- 1320, 54336, 24919, 44350, 19274, 1768, 48205, 16840, 43549, 13609, 50297,
- 8613, 35369, 54295, 25466, 7764, 34597, 63979, 18918, 57452, 25578, 35194,
-60689, 1537, 52164, 34126, 25918, 61350, 14273, 56698, 7440, 34413, 47084,
-18999, 36839, 60869, 16370, 38297, 57779, 12727, 37501, 49819, 15835, 42152,
-51487, 22148, 32520, 60618, 22737, 35485, 8096, 31981, 44348, 22422, 49962,
-35254, 3338, 33958, 52484, 22791, 60390, 11677, 28617, 51188, 40963, 14162,
-62986, 6646, 30105, 44659, 20020, 61543, 17897, 55374, 25147, 58306, 13278,
-27658, 48895, 31424, 3617, 52874, 8590, 61026, 32218, 6795, 54789, 41055,
- 872, 48053, 11952, 60370, 2123, 36497, 63299, 13442, 29076, 49964, 23320,
- 8088, 33482, 40585, 23895, 57907, 737, 38254, 27597, 36151, 3665, 54861,
-32750, 27096, 52380, 17952, 57142, 39804, 14489, 47144, 16114, 31061, 40264,
-25286, 37099, 28029, 39151, 8617, 51483, 12050, 61094, 3797, 30318, 49019,
- 5951, 47020, 21611, 39000, 31511, 16650, 62489, 12966, 27545, 45065, 35747,
-10257, 23675, 48096, 11130, 33028, 45620, 14924, 39831, 58662, 17495, 65486,
-13629, 56913, 6887, 38963, 27399, 34913, 49639, 17595, 60684, 26043, 48062,
-16868, 44443, 35208, 4330, 36244, 64386, 16911, 41902, 25353, 37003, 8196,
-49846, 1348, 42253, 14182, 44637, 27460, 2507, 56844, 25773, 7598, 34475,
-47158, 4020, 39776, 58488, 2219, 65254, 20235, 55523, 22987, 62716, 28060,
- 9656, 43179, 2585, 48534, 27042, 55880, 18192, 63886, 21865, 55089, 14665,
-59995, 31171, 11082, 39760, 56635, 19409, 63261, 23810, 3291, 58522, 32746,
- 5618, 36560, 57793, 21734, 10059, 48321, 608, 29100, 45955, 14270, 32151,
-53753, 15862, 35003, 58457, 8851, 25344, 44399, 11943, 46215, 683, 39012,
- 9409, 34557, 47285, 2625, 39169, 6425, 42490, 14377, 48196, 38573, 18304,
-44644, 25225, 37868, 19916, 45910, 15720, 62648, 13850, 56953, 38026, 28968,
-58078, 4154, 55295, 34289, 27516, 46993, 15858, 62444, 29804, 48129, 13436,
-41697, 3025, 45239, 10064, 27553, 46016, 23224, 9241, 48926, 5881, 45811,
-35655, 23422, 62044, 11117, 54699, 758, 26210, 51260, 23722, 3076, 52585,
-26335, 2044, 65493, 25047, 9140, 62764, 1238, 41685, 12871, 58683, 28253,
-54866, 10783, 60201, 6009, 24314, 58799, 27076, 8364, 42938, 2477, 39385,
-64591, 5596, 32789, 48690, 18824, 32365, 54277, 2660, 49807, 28378, 46668,
- 1398, 41998, 20243, 38210, 61873, 7634, 45176, 24575, 38796, 30611, 16356,
-51977, 38368, 13349, 30801, 61946, 17972, 42569, 21666, 49604, 24413, 7254,
-35081, 45323, 10850, 53286, 30657, 55879, 4809, 44690, 16388, 51150, 18600,
-62072, 20896, 58861, 16190, 48756, 6041, 38008, 33737, 7708, 26920, 53137,
- 6364, 35372, 60253, 10260, 53733, 3272, 57815, 14040, 62964, 26778, 42231,
-22429, 34875, 58379, 12749, 65255, 34345, 10121, 61406, 1911, 53220, 22830,
-38348, 52177, 92, 21973, 58863, 36573, 3755, 54268, 25063, 5185, 52572,
-29911, 8253, 37600, 4276, 48970, 35721, 28547, 62798, 14693, 59255, 8822,
-45140, 3873, 41627, 9875, 52489, 30789, 15633, 54104, 12389, 23526, 47504,
-10787, 51673, 21784, 63775, 27610, 55052, 20385, 62066, 6304, 58376, 36391,
-11451, 47977, 30132, 62664, 18411, 55335, 26558, 14025, 44510, 31945, 46702,
- 4261, 43649, 11185, 40094, 56529, 16910, 64180, 22583, 40312, 4732, 45577,
-11609, 41849, 5332, 47219, 34716, 20437, 64514, 17114, 32817, 44385, 5818,
-37014, 50598, 12079, 45569, 25409, 51008, 2009, 35144, 63402, 17932, 57031,
-38846, 8281, 58807, 40238, 7460, 61883, 974, 23634, 46609, 32861, 3946,
-56518, 22866, 62182, 23949, 57863, 14626, 27156, 59307, 23483, 53956, 20779,
-61824, 28764, 7322, 59612, 11581, 53626, 5256, 65085, 28039, 38758, 4303,
-49034, 27203, 51592, 7089, 33752, 46048, 24669, 9938, 61141, 2601, 41258,
-11042, 43436, 1149, 51765, 21111, 61472, 18268, 55823, 37747, 13149, 65447,
-39683, 19317, 53217, 30050, 2096, 48175, 16490, 42430, 21227, 49599, 40521,
- 8512, 63268, 33604, 17597, 60276, 39774, 14583, 46063, 34778, 29771, 47836,
-18939, 51340, 3599, 46237, 16147, 41900, 20017, 36911, 48709, 17501, 39711,
-63664, 19490, 55031, 25523, 16865, 44577, 23011, 1667, 60516, 43019, 17153,
-58021, 36065, 8955, 33768, 63570, 12307, 51149, 3327, 22878, 54120, 19512,
-62729, 11773, 57843, 41559, 2604, 25875, 59089, 19907, 35091, 51549, 6235,
-46223, 10202, 58900, 29872, 54662, 4275, 62677, 20586, 43968, 14875, 49437,
-29422, 60936, 10632, 42249, 5266, 46581, 12671, 43461, 22663, 54386, 11610,
-62858, 30129, 59317, 17603, 31896, 50333, 21087, 46006, 17284, 43054, 18472,
-47176, 35005, 2427, 57119, 8030, 53497, 16104, 42528, 26858, 14956, 49861,
-23596, 43212, 12209, 46574, 6333, 25416, 64690, 34124, 8406, 50656, 31768,
-18375, 59910, 38356, 16647, 63417, 23516, 55336, 32180, 21531, 9789, 54371,
- 1313, 41528, 25592, 37294, 15649, 56062, 19562, 65027, 35877, 2372, 60331,
-32188, 49824, 33695, 853, 59310, 30116, 5066, 38772, 12760, 33019, 39743,
-11064, 49412, 15328, 31375, 61123, 19862, 42565, 897, 43654, 9869, 37128,
-52983, 24870, 8947, 18764, 51244, 30232, 58164, 24248, 5944, 50461, 33104,
- 9150, 60258, 33787, 20524, 56990, 17241, 62136, 30370, 9768, 45459, 3947,
-51276, 9500, 26381, 49515, 13776, 27598, 54464, 20618, 61912, 15353, 31294,
-45000, 7198, 43413, 32708, 15737, 51029, 30921, 16740, 45034, 20248, 41419,
-55103, 14013, 64450, 37251, 15459, 43599, 17513, 51416, 5192, 48552, 32720,
- 8472, 45355, 11924, 43405, 50, 36281, 49617, 23269, 41143, 19032, 47650,
-34223, 9388, 50517, 29594, 36213, 10264, 22942, 63867, 12954, 21916, 59833,
-35857, 18088, 53147, 20801, 59161, 22578, 55478, 27293, 39121, 8245, 47003,
-30691, 5533, 53710, 32048, 2947, 58964, 36848, 15510, 63603, 25406, 53709,
- 4622, 58461, 31392, 15586, 44540, 14156, 47442, 41700, 8824, 27576, 56672,
- 4916, 53714, 11160, 27105, 59720, 15237, 37911, 24941, 64716, 2068, 53178,
-27932, 9377, 56733, 1351, 32010, 49801, 9065, 34620, 51942, 12549, 57246,
-38229, 25392, 7525, 40248, 11999, 23274, 59663, 16161, 27366, 47275, 18396,
-59544, 43643, 34411, 1752, 28641, 49833, 5621, 23057, 65393, 43123, 4806,
-47268, 9565, 31773, 57152, 26667, 39344, 14964, 47250, 20153, 42302, 17119,
-38809, 1176, 65516, 26275, 6985, 34763, 47997, 19888, 54029, 25432, 39127,
- 1427, 64114, 17075, 41592, 21520, 42913, 1910, 37732, 64619, 4140, 41523,
- 7836, 63432, 30749, 55131, 7028, 23971, 50141, 19297, 38738, 29544, 46550,
- 1395, 51935, 35800, 4441, 55171, 17091, 63590, 20044, 56912, 41217, 15426,
-46297, 29886, 14501, 63175, 41915, 11828, 33660, 48392, 1468, 43505, 10629,
-41283, 61091, 34537, 24752, 33016, 47476, 6147, 51388, 28858, 34022, 48861,
- 6956, 22627, 45003, 25550, 5983, 21579, 57832, 39548, 17478, 41424, 55450,
-16059, 58641, 4410, 52666, 28865, 37289, 23661, 44121, 5453, 50258, 14476,
-54159, 29413, 64258, 20689, 5700, 60333, 35130, 57191, 36430, 8160, 20653,
-49387, 29617, 37996, 19025, 47305, 16562, 51616, 31025, 2302, 49522, 36005,
-21502, 59414, 18930, 55620, 27952, 34622, 61706, 18262, 58981, 38270, 12,
-42497, 8292, 39149, 59748, 18829, 55538, 24733, 4486, 61265, 35709, 2304,
-65340, 25072, 51522, 12539, 32361, 50909, 7916, 28920, 49859, 6314, 37812,
-12661, 42617, 19803, 63186, 37525, 18836, 60603, 22907, 55201, 26609, 12852,
-56100, 2090, 61006, 31090, 17062, 56406, 21436, 60425, 18299, 57672, 43818,
-17453, 37125, 50989, 109, 43817, 30916, 8007, 47839, 32202, 6419, 36230,
-12310, 58474, 33650, 16325, 63407, 24421, 40667, 17006, 50536, 28803, 7753,
-32320, 42155, 8971, 36537, 28119, 38099, 6910, 61643, 27202, 55615, 5561,
-29300, 51939, 36846, 16634, 43026, 19683, 57569, 35916, 6741, 33045, 50077,
- 8852, 29229, 45046, 18371, 62302, 38347, 15074, 45812, 16475, 37026, 28232,
-62018, 3864, 47874, 33680, 15579, 52944, 28506, 65508, 33353, 51845, 3702,
-35028, 54994, 6018, 41066, 30491, 9602, 21859, 60107, 40758, 18129, 46198,
-33807, 14210, 32808, 55543, 16990, 63053, 22015, 36933, 3398, 64941, 31596,
- 368, 56889, 12029, 59421, 25362, 46428, 12342, 41096, 57395, 22973, 2317,
-64534, 30618, 8674, 59798, 33174, 27006, 48024, 4310, 50825, 15119, 46780,
-24745, 12556, 48097, 19290, 51255, 24890, 1515, 37775, 29714, 61354, 9641,
-32177, 64246, 5382, 24278, 60686, 19756, 57573, 28645, 32858, 39819, 3229,
-36865, 31947, 9473, 51137, 4983, 57731, 36018, 2228, 28840, 49889, 5927,
-25744, 57178, 31345, 51648, 18962, 2560, 49481, 13057, 52476, 17804, 63862,
-12168, 58540, 948, 24567, 40342, 57148, 10316, 62948, 30081, 47898, 8792,
-26377, 63307, 12043, 28663, 47756, 22228, 45031, 16485, 59859, 411, 65448,
-12957, 54714, 25111, 40431, 33426, 7200, 23817, 51441, 29935, 40332, 21441,
- 235, 26499, 63504, 34750, 2776, 60873, 12157, 53295, 734, 44351, 7801,
-63140, 39744, 26055, 8370, 48912, 1218, 43235, 35776, 8801, 47008, 1937,
-42030, 7788, 31571, 63949, 17273, 55995, 28696, 3771, 50264, 9522, 34073,
-48698, 23033, 11361, 49681, 29052, 6042, 34192, 60254, 3321, 21713, 39849,
-60915, 20265, 55377, 27815, 65485, 25802, 53210, 1387, 31164, 50400, 4738,
-40967, 10410, 50800, 37563, 21739, 46230, 34768, 8716, 44326, 602, 42015,
- 7841, 46461, 2885, 24787, 49410, 5893, 28406, 56609, 20253, 64376, 38299,
-14969, 56150, 23644, 65110, 31580, 3964, 52447, 29748, 405, 49595, 9642,
-60078, 35393, 14066, 44474, 57707, 17499, 55418, 14728, 65030, 20307, 51990,
-32134, 1839, 36440, 20635, 64491, 22064, 530, 62466, 24324, 49290, 3239,
-44469, 23920, 63908, 17304, 56842, 39423, 13209, 50613, 4117, 30599, 54654,
-22417, 60614, 5230, 46937, 13581, 41572, 29769, 6257, 59451, 10418, 49352,
- 212, 21419, 39438, 25161, 45903, 15116, 36631, 57599, 14487, 36190, 47923,
-29592, 8848, 56622, 12905, 51693, 36934, 8322, 29260, 40923, 1460, 44940,
-12928, 50112, 17204, 52956, 37377, 24357, 40767, 5129, 51985, 21407, 55203,
-32439, 16227, 50548, 39896, 15195, 37050, 50116, 14271, 45301, 7296, 35526,
-58653, 19150, 55837, 8206, 57691, 34182, 28651, 59745, 9833, 34520, 58599,
-20574, 52371, 14544, 39740, 47867, 17416, 51347, 37738, 10494, 41536, 6705,
-45216, 9625, 60126, 24836, 53751, 17573, 59330, 28978, 39939, 16548, 52871,
-23265, 55456, 15944, 61601, 44541, 20116, 6765, 26766, 58286, 35562, 22889,
-62252, 5442, 40142, 23472, 44664, 19033, 38966, 61188, 14399, 33377, 46841,
-16352, 42946, 14919, 52078, 36837, 3551, 53315, 34458, 2106, 64292, 9200,
-36322, 25778, 40646, 18697, 46948, 29147, 3053, 61765, 12185, 56128, 39095,
- 1954, 48837, 10436, 62097, 31829, 54348, 15495, 47854, 27339, 41106, 23312,
-32466, 58702, 26697, 36981, 13015, 22204, 54872, 34285, 15578, 57347, 31655,
-17708, 63509, 22723, 56975, 23888, 52043, 19037, 34074, 47919, 10627, 51741,
-21900, 37682, 27071, 62828, 14684, 39542, 59346, 19558, 40865, 56677, 10713,
-38742, 28622, 49125, 25912, 1590, 45862, 10431, 41729, 2909, 40056, 16232,
-46010, 14857, 35738, 57622, 18194, 64616, 28197, 5696, 62811, 11132, 25618,
-52555, 19895, 63425, 26580, 51913, 20474, 40390, 55398, 15057, 61600, 39752,
-11181, 45621, 4935, 26905, 43141, 2033, 45595, 14106, 51209, 41336, 14926,
-37581, 57917, 20383, 42717, 26186, 5047, 62997, 30668, 1011, 39952, 27195,
-46725, 2767, 43061, 13111, 48088, 24005, 59016, 32604, 9340, 48288, 30214,
-40854, 7701, 34064, 61461, 14161, 48592, 812, 43582, 30355, 5463, 61033,
-34929, 25996, 46734, 7000, 43244, 11910, 52856, 24121, 58151, 18673, 63859,
-24746, 35852, 45484, 18430, 41577, 56445, 10935, 60312, 7851, 64662, 29377,
- 749, 31960, 63145, 4470, 52184, 25320, 37739, 30610, 14, 61428, 24706,
-53685, 18846, 57649, 20354, 60091, 27875, 41135, 9427, 22008, 62194, 16013,
-48454, 31894, 8692, 36252, 3468, 62996, 10113, 27017, 47329, 5953, 28124,
-56931, 20136, 61742, 24980, 9644, 38617, 29172, 44089, 13879, 51720, 484,
-38191, 27151, 45060, 15790, 42224, 4706, 44473, 27082, 210, 56465, 11680,
-28358, 48295, 18081, 62195, 21041, 50464, 15969, 42828, 5651, 47417, 23978,
- 1199, 62318, 32820, 7574, 42621, 9617, 40658, 32597, 12738, 36098, 64576,
-39422, 13836, 46445, 9281, 38039, 27806, 56770, 3003, 30061, 49620, 8418,
-27138, 53364, 4023, 31142, 55252, 1629, 59010, 32448, 20139, 45930, 18465,
-43735, 23380, 37742, 28068, 52061, 6533, 56711, 32086, 8469, 58141, 35344,
-22809, 45829, 15983, 33993, 59607, 18241, 44256, 22311, 46479, 11963, 42300,
- 5592, 53823, 10376, 65025, 7011, 40033, 14797, 54293, 29542, 51061, 5019,
-65191, 27997, 38441, 12398, 50404, 5376, 39965, 12882, 46240, 14517, 57682,
- 4634, 25013, 44246, 30397, 64767, 11712, 46547, 1323, 53275, 28415, 4835,
-46372, 13835, 33429, 52516, 18141, 63493, 11495, 57540, 34406, 18637, 59004,
-22385, 54245, 11145, 59651, 24361, 56146, 7827, 30244, 42285, 3036, 33917,
-46797, 17765, 39444, 59207, 4882, 48641, 36438, 14223, 33974, 62132, 11775,
- 1372, 45027, 32949, 19102, 52181, 16612, 34121, 53832, 17159, 61705, 26007,
-38777, 8622, 24151, 62574, 6321, 33968, 47373, 15362, 54612, 39258, 18437,
-52183, 23016, 61104, 6261, 34678, 56587, 18738, 59723, 7589, 41548, 12198,
-53499, 38942, 17520, 59443, 15646, 56004, 11904, 29946, 40826, 20023, 53994,
-34246, 14712, 49531, 31619, 11409, 57325, 19203, 65337, 27915, 37674, 19860,
-39809, 717, 43109, 11262, 48530, 2985, 31558, 61042, 8700, 29546, 50243,
-19590, 32148, 42144, 17757, 56049, 40208, 19835, 44433, 16460, 64522, 6681,
-58673, 42578, 21825, 48611, 5315, 42912, 12232, 47648, 34923, 7402, 54418,
-32498, 45095, 6464, 43556, 19737, 60573, 28611, 56701, 24474, 38012, 30403,
-60001, 20407, 53268, 34340, 2878, 40289, 13667, 52100, 30311, 65143, 3072,
-26270, 61032, 22293, 43198, 16445, 62383, 5813, 55667, 12393, 65087, 17960,
-59197, 35336, 22481, 33947, 63106, 3570, 53930, 25520, 37649, 671, 56446,
-27146, 64379, 13032, 34248, 44329, 18843, 48586, 26836, 65307, 20977, 56675,
- 546, 30131, 51200, 21491, 3504, 54796, 29569, 59515, 20493, 48681, 14122,
-36670, 54234, 16871, 63197, 35883, 12694, 50110, 16848, 37547, 26792, 40215,
- 5443, 61890, 11071, 57586, 7350, 60472, 14204, 55784, 20150, 42852, 17643,
-50816, 37842, 14205, 48778, 7691, 30334, 63218, 4888, 26463, 50815, 6743,
-40878, 3689, 51792, 24915, 59802, 18603, 45251, 19994, 49633, 24369, 62349,
- 3107, 42916, 17529, 41618, 10911, 47445, 4195, 61366, 24615, 44583, 19965,
-53996, 2905, 38154, 28770, 35470, 61528, 20210, 2202, 35426, 49278, 18412,
-43233, 12732, 36765, 54832, 23586, 62483, 276, 24924, 46975, 5134, 44221,
-16257, 47899, 31549, 5591, 44564, 17368, 47340, 30517, 3849, 34788, 48410,
-17048, 51891, 22365, 58811, 9148, 55028, 31390, 14901, 41130, 30138, 9957,
-58229, 4556, 28601, 42756, 65272, 26372, 8534, 58554, 3144, 31258, 62895,
- 9126, 49093, 35553, 5666, 59567, 30146, 54226, 19615, 48687, 25385, 8898,
-64620, 2269, 29658, 43733, 8183, 46119, 12635, 50078, 24212, 10092, 39801,
-26302, 50357, 16338, 45655, 3458, 26684, 49944, 5753, 45136, 35596, 27128,
-52762, 5044, 62971, 26046, 7390, 59223, 36736, 20829, 44560, 388, 39877,
-12432, 50950, 2886, 61734, 14425, 55517, 28830, 53501, 22456, 57840, 16097,
-37372, 26084, 46400, 2417, 37021, 53875, 4934, 49448, 27332, 8194, 52993,
-12128, 41431, 21160, 47380, 19324, 33382, 10518, 32270, 63820, 27206, 55036,
- 3885, 23192, 63451, 25169, 2511, 59055, 36229, 12859, 50975, 1745, 44483,
-12094, 49130, 7504, 54343, 189, 43799, 9573, 63783, 21593, 55601, 31818,
- 807, 48356, 20641, 53650, 34883, 5461, 48760, 10934, 52708, 23565, 47608,
-28939, 36948, 26080, 48786, 9214, 50483, 6299, 45855, 15671, 43798, 34904,
-10821, 49253, 29548, 36308, 11551, 38495, 28304, 60447, 6941, 55802, 10497,
-38861, 3662, 50567, 24271, 35141, 60553, 8487, 33498, 49287, 25204, 7330,
-41448, 228, 31082, 64959, 26791, 10536, 42831, 4822, 46374, 22272, 35015,
-56823, 7657, 65361, 13894, 51077, 24744, 38414, 28652, 50268, 26251, 45706,
- 2980, 48884, 10267, 63695, 1718, 27512, 60868, 19487, 55454, 39862, 20384,
-47052, 32749, 13101, 64887, 16582, 58520, 30483, 13492, 33583, 37760, 1702,
-56223, 29241, 5395, 34674, 47906, 11745, 61112, 24443, 53430, 19282, 44142,
-21271, 52961, 11292, 60675, 34889, 27261, 65510, 10219, 54237, 6892, 40835,
-56611, 23702, 5895, 60203, 27756, 57877, 21250, 32809, 9689, 43715, 29787,
-58215, 15263, 36819, 29382, 55936, 8161, 64133, 35779, 27613, 61105, 7502,
-38780, 62118, 13896, 28334, 63573, 11531, 31665, 40450, 20438, 43923, 1092,
-33717, 64793, 19371, 53253, 21949, 35591, 54424, 16903, 21324, 50287, 35954,
-27665, 34891, 47297, 19742, 41285, 29468, 12790, 50861, 18068, 46143, 1465,
-44072, 13472, 55390, 30660, 37921, 22718, 49421, 16037, 56084, 28109, 37629,
-16892, 54854, 30733, 62623, 290, 29631, 64173, 22561, 55082, 35206, 10863,
-54012, 23965, 2187, 60797, 13606, 46009, 10356, 38426, 51928, 23686, 2998,
-63342, 16407, 54109, 24373, 59011, 21632, 42072, 23193, 44459, 32299, 9258,
-36899, 6846, 32614, 44279, 4627, 63500, 16881, 58682, 30503, 13550, 62561,
-11777, 34150, 61275, 25884, 48827, 1883, 54119, 34255, 4198, 44092, 57943,
-17921, 37512, 15286, 39440, 29984, 44347, 10645, 48656, 33771, 15539, 30388,
-64448, 25879, 37024, 17177, 61731, 22654, 42688, 19095, 41465, 15761, 49488,
-24298, 44672, 11984, 50510, 37740, 16687, 42547, 11651, 46064, 31327, 18741,
-64190, 34049, 3422, 39500, 10220, 50978, 2225, 32893, 40705, 25056, 60279,
-29466, 57323, 8256, 27733, 64642, 19423, 59037, 15040, 54927, 3042, 51533,
-14461, 49603, 35733, 22289, 58471, 28666, 37444, 11518, 46546, 17662, 41345,
-58771, 16144, 44395, 63001, 18553, 54507, 42310, 6660, 38770, 60181, 21644,
-55132, 30414, 58675, 507, 29647, 45100, 20771, 42439, 30124, 8557, 52574,
- 279, 40122, 13137, 32896, 62507, 28724, 39625, 24554, 34030, 46051, 5176,
-43448, 28291, 674, 54411, 10865, 57431, 37809, 23416, 44712, 20397, 38765,
-63773, 7480, 49183, 30993, 15853, 43347, 58331, 14074, 22762, 55162, 32656,
- 1575, 31200, 59904, 13372, 37054, 518, 41127, 31165, 6349, 49407, 16061,
-44461, 21206, 49987, 27886, 9794, 51032, 30848, 37479, 8128, 42051, 3035,
-64239, 39093, 16005, 51258, 7602, 43171, 60669, 2232, 25457, 41110, 13887,
-53246, 389, 33954, 50130, 12581, 26751, 52303, 41067, 795, 37904, 56868,
- 6583, 61671, 35468, 21600, 49411, 8234, 45278, 2284, 31088, 47418, 6747,
-39265, 46613, 3986, 55869, 10478, 60717, 7309, 54539, 926, 60128, 22813,
-32767, 57213, 10961, 36954, 28369, 60343, 3673, 43256, 11593, 53235, 6876,
-61887, 34767, 3289, 64777, 32335, 4467, 45284, 19723, 52759, 38653, 6079,
-42811, 13405, 60163, 31316, 18762, 65129, 38680, 17813, 42133, 21937, 58049,
-32396, 15967, 45401, 35193, 26683, 47403, 10640, 42616, 6451, 48086, 10051,
-56465, 5007, 64415, 20929, 54617, 27272, 62649, 14806, 53371, 20590, 43211,
- 6620, 52247, 25561, 38276, 23571, 46075, 3791, 38218, 15361, 60594, 13348,
-27743, 62430, 23879, 7213, 52926, 2331, 60485, 9842, 56610, 21179, 51899,
-17562, 40894, 57069, 4166, 39608, 9613, 56307, 32077, 4626, 53009, 11196,
-64980, 26815, 58157, 33084, 3897, 36101, 60712, 5760, 27378, 57867, 6989,
-62797, 15099, 56867, 36014, 7507, 25750, 56556, 19647, 58884, 23032, 61974,
-16140, 53173, 13016, 38516, 1794, 23149, 51961, 40853, 2546, 44971, 7197,
-46976, 19968, 43226, 21956, 42019, 29802, 2014, 47684, 13613, 45226, 17141,
-62700, 5494, 51947, 28431, 1876, 38534, 11932, 33190, 37217, 9930, 22765,
-49215, 25003, 1995, 50527, 18011, 9203, 39762, 18985, 61442, 11297, 53974,
- 2701, 60100, 33378, 19509, 64565, 22633, 55276, 5795, 36773, 11403, 59257,
- 6076, 57493, 13286, 53397, 15678, 64630, 36557, 17490, 42660, 28626, 2533,
-53566, 8630, 55651, 1095, 27683, 52679, 18137, 60106, 39971, 9097, 26492,
-52606, 38523, 7471, 44753, 26796, 48725, 6855, 32231, 64302, 25721, 57810,
-16965, 43255, 23585, 58592, 1034, 40155, 13170, 60940, 33027, 17335, 63715,
-15094, 55202, 18732, 52086, 26597, 6722, 59818, 35550, 20312, 32209, 12495,
-34890, 52686, 19959, 43142, 21820, 46181, 25181, 17864, 57306, 43929, 5955,
-21748, 53739, 26353, 15751, 47774, 25567, 9700, 58551, 24623, 56316, 16601,
-34474, 61291, 15820, 59274, 12013, 19578, 41766, 22838, 46061, 21915, 38452,
-24320, 42570, 11650, 46774, 3517, 39310, 25605, 64233, 16295, 34309, 51596,
-16658, 59122, 31973, 45061, 25488, 11362, 48446, 14045, 41020, 58289, 28619,
- 8425, 33848, 21330, 57623, 17055, 47871, 1253, 43573, 34536, 7891, 30607,
-48143, 4027, 51270, 27813, 1710, 64948, 11043, 55848, 7728, 29671, 60280,
-17936, 55061, 27351, 36203, 16596, 49780, 26001, 46735, 1987, 42053, 10005,
-47301, 30276, 38933, 11187, 48968, 17546, 43846, 1440, 59295, 16053, 53574,
-21499, 43710, 23081, 37498, 50299, 9397, 45939, 34879, 26399, 41828, 19429,
-47124, 33118, 612, 31290, 61631, 5919, 27425, 49399, 21597, 51686, 19248,
-47066, 37936, 18061, 46196, 29347, 6230, 37754, 12805, 62390, 26727, 14555,
-34212, 47502, 19130, 39781, 22031, 41939, 1653, 49906, 29743, 51437, 12791,
-44833, 35487, 6940, 42085, 31139, 4367, 64010, 20933, 54606, 33170, 12321,
-24307, 56194, 17424, 39336, 26514, 62936, 9934, 57888, 7774, 64131, 23921,
-34419, 61261, 6152, 53183, 29725, 40108, 14830, 63738, 23914, 55839, 31432,
- 4533, 56921, 29208, 61656, 12943, 55946, 34646, 27936, 35863, 64171, 24537,
-51636, 21926, 38375, 23110, 43555, 17657, 49403, 37085, 12330, 42422, 17136,
-44838, 20930, 50058, 18885, 48190, 23060, 38374, 26468, 41089, 8842, 24598,
-51707, 6218, 61555, 36371, 18940, 42878, 14908, 48174, 36420, 10775, 42539,
- 4512, 32578, 62909, 36030, 121, 30835, 64691, 20254, 59023, 16146, 38329,
-50196, 14624, 46213, 7971, 34020, 63161, 12076, 29954, 52345, 22255, 45250,
- 4130, 38888, 47731, 564, 45588, 25414, 40270, 10347, 34445, 49191, 28963,
- 2725, 40366, 64991, 21911, 47576, 9057, 62419, 4311, 57905, 11733, 63024,
-35471, 2675, 23236, 37348, 59915, 9972, 45727, 33059, 2496, 51672, 30053,
-39078, 3808, 37302, 28082, 48441, 10845, 43227, 27472, 50856, 57202, 13993,
-63745, 1737, 43248, 13491, 64700, 17501, 55663, 26556, 62113, 14097, 52721,
- 5172, 50172, 10075, 23753, 46054, 27822, 646, 20691, 55208, 41584, 19023,
-52455, 23300, 10831, 50540, 37509, 60994, 12433, 33031, 40193, 25405, 62875,
-14965, 49053, 26982, 54421, 21301, 59954, 18366, 37707, 49810, 20471, 41952,
-18804, 51111, 38720, 4255, 31814, 37434, 1502, 62862, 29376, 38364, 11658,
-34664, 60919, 17917, 57300, 24670, 1031, 55665, 28015, 33989, 64127, 12742,
-54537, 28494, 40496, 10241, 65278, 7389, 57250, 3244, 31704, 56098, 20738,
-64242, 13133, 51353, 32172, 6812, 65079, 26467, 45592, 14381, 38295, 53148,
-11301, 44047, 836, 62485, 8351, 29940, 60881, 2401, 34711, 54098, 21767,
-47254, 18467, 52324, 30159, 55190, 11108, 60358, 4032, 53194, 27372, 61297,
-16133, 41362, 17503, 60585, 964, 27808, 48330, 14063, 57520, 37185, 17401,
-44975, 9022, 41525, 61436, 36135, 9577, 32796, 59869, 4541, 36784, 32525,
-27609, 48428, 17269, 53718, 11243, 28013, 42403, 23358, 1022, 57896, 31841,
- 9034, 45549, 14028, 50889, 40792, 17780, 44037, 3637, 41155, 17191, 45259,
-11760, 47079, 3294, 42453, 8191, 44653, 4418, 63564, 10548, 57131, 5952,
-25538, 56091, 3746, 60927, 26140, 54201, 1019, 42276, 30834, 9332, 63127,
- 2404, 56796, 30702, 59175, 18663, 45807, 25562, 9725, 57841, 26398, 62479,
-32093, 21375, 61340, 24949, 56760, 23085, 14510, 50230, 20970, 46295, 10087,
-41128, 4731, 54148, 28287, 3323, 56054, 20271, 30615, 53817, 3621, 35640,
-42797, 8342, 62660, 17672, 57343, 24687, 16176, 58680, 29498, 5247, 56996,
-22796, 61317, 16439, 45765, 23297, 50470, 5888, 54597, 26486, 38893, 15500,
-50300, 27584, 40045, 6868, 51499, 30525, 64392, 14957, 28693, 49434, 18845,
-65178, 39947, 14447, 62436, 17891, 53730, 13284, 64174, 5488, 54932, 35947,
- 340, 34109, 6174, 38904, 26508, 49796, 16187, 51426, 5405, 48393, 34344,
- 7790, 35701, 45217, 18356, 42612, 20028, 40690, 63354, 7382, 39182, 62221,
-33738, 5589, 31175, 59872, 1338, 35488, 63179, 22140, 2475, 26967, 49269,
- 4234, 53154, 8720, 29340, 51770, 4725, 58843, 11613, 40623, 14608, 45045,
- 8327, 33099, 56486, 5370, 61294, 33412, 14989, 43559, 64098, 20212, 50146,
-12964, 43533, 3753, 59921, 19740, 31441, 50449, 7456, 34497, 51097, 13723,
-60158, 3421, 23074, 46648, 31519, 5649, 51106, 22560, 32428, 47359, 26418,
-49426, 14283, 40102, 980, 37385, 31052, 4857, 59244, 43382, 16198, 52625,
- 8460, 58393, 30689, 16522, 63727, 34145, 24842, 36112, 48800, 15261, 40004,
-25175, 58864, 10477, 50587, 1265, 40192, 7866, 43239, 2113, 38596, 23554,
-43831, 31157, 8899, 32305, 44527, 4601, 47891, 24481, 34511, 64775, 18632,
-51860, 26097, 7892, 51109, 32375, 58230, 19796, 4150, 50164, 27456, 48743,
-20818, 52538, 16234, 54230, 330, 39662, 33124, 5205, 35707, 52094, 15535,
-60208, 38182, 17989, 49747, 35846, 22241, 61156, 7732, 24563, 64328, 14731,
-53565, 32022, 59168, 6194, 62074, 23469, 56517, 15284, 60506, 16604, 49832,
-34484, 27392, 38968, 30530, 45367, 16563, 47411, 35388, 8691, 29079, 65075,
-15920, 56068, 36665, 15232, 47553, 21562, 45018, 3973, 40363, 13507, 49984,
-30804, 37107, 4238, 40381, 7897, 49793, 3438, 44634, 12641, 46951, 34752,
- 8021, 59500, 24656, 51716, 16894, 45813, 12664, 43541, 34366, 10524, 36246,
-48252, 15428, 28633, 50488, 18208, 48049, 25558, 37162, 11379, 52747, 41593,
- 8923, 36946, 50681, 13519, 44800, 1179, 53195, 9369, 58040, 13330, 32772,
-37057, 898, 49037, 29345, 36266, 16923, 55474, 31883, 14590, 43059, 8047,
-40169, 56008, 3566, 36862, 8544, 28430, 44904, 6186, 42517, 26047, 46930,
-22224, 43958, 25841, 17388, 63258, 23953, 30654, 60306, 11250, 33307, 59074,
-27177, 39576, 31504, 20094, 50431, 29969, 216, 59372, 29014, 57040, 2615,
-30824, 53934, 22170, 9727, 42557, 58131, 12318, 37819, 27470, 47580, 6544,
-34230, 56940, 41427, 14582, 63841, 22126, 35773, 45489, 18390, 38592, 16280,
-44278, 154, 64017, 29520, 53663, 13234, 23822, 46867, 25535, 1101, 58402,
-29177, 8757, 39648, 15764, 59318, 22770, 51644, 13605, 53775, 5360, 37673,
-28293, 64923, 19318, 40358, 21723, 44550, 35615, 7758, 61852, 19992, 35510,
-58826, 310, 36291, 11149, 30899, 61498, 21988, 54461, 11537, 57043, 40006,
-22862, 10132, 37297, 23407, 39842, 33879, 2070, 46276, 26624, 7023, 59350,
-13574, 31255, 57673, 6704, 45283, 18778, 43374, 22570, 57194, 24942, 59502,
-20448, 65350, 17202, 54036, 15431, 63475, 21486, 58188, 12220, 54920, 29146,
- 8029, 50655, 10489, 41406, 2846, 39329, 61684, 22914, 770, 26640, 47127,
-35090, 21518, 65442, 1274, 41169, 12698, 45298, 21625, 61754, 12020, 57392,
-27190, 63508, 2439, 48939, 9604, 26175, 43960, 6415, 53882, 2695, 28946,
-46169, 35170, 1222, 47561, 27692, 9571, 22492, 50724, 28765, 13382, 32728,
-38844, 26835, 54189, 31490, 12651, 59424, 1142, 54680, 9975, 63408, 29463,
-14643, 52811, 38083, 20440, 45846, 4252, 27845, 51971, 34280, 11098, 35560,
-62351, 20612, 55850, 1461, 64135, 16419, 55085, 20395, 53043, 17242, 39757,
-19627, 51875, 1887, 64023, 27566, 40330, 3798, 29712, 62568, 22522, 56799,
-18358, 63686, 27210, 60398, 1850, 33103, 59733, 5804, 56979, 29129, 2503,
-49685, 33731, 6138, 30490, 62038, 20113, 32135, 64885, 27032, 33102, 37083,
-25259, 39319, 28280, 61594, 16106, 56539, 12272, 60399, 6504, 46804, 2016,
-37822, 59157, 22080, 48192, 25702, 12373, 33630, 60321, 22881, 54409, 17254,
-55774, 11691, 60813, 1520, 40470, 12541, 59548, 32961, 9012, 52660, 43797,
-18425, 46872, 4381, 36907, 10003, 57630, 2332, 63153, 13143, 56335, 24722,
-38710, 9184, 36494, 26289, 46873, 13275, 37180, 50269, 24432, 16993, 51302,
-20981, 61714, 15086, 30791, 49030, 9162, 24377, 46448, 31184, 10199, 58614,
- 2755, 55901, 22329, 62298, 23556, 52753, 35828, 6111, 22387, 62123, 36507,
-10048, 35011, 49365, 18266, 53485, 23757, 57125, 33164, 5991, 45703, 16887,
-41142, 21528, 44589, 15832, 46324, 11371, 42999, 5807, 49659, 10426, 58401,
-25639, 33375, 52882, 9713, 18092, 42549, 63298, 20371, 52335, 6249, 45036,
-17200, 46674, 24937, 14107, 48979, 28907, 62220, 3604, 55524, 15439, 61078,
-19788, 54938, 35649, 23099, 50522, 3077, 33802, 52202, 12304, 64020, 4887,
-38669, 14245, 42280, 13150, 48442, 28462, 46371, 8361, 41381, 33, 46828,
-25932, 38335, 14878, 62616, 39466, 19227, 56329, 22354, 59698, 29031, 9784,
-44342, 31420, 63266, 13178, 56870, 8093, 31786, 44132, 18229, 60889, 6492,
-38810, 24418, 47324, 18057, 41746, 19663, 42903, 21415, 36782, 56502, 16062,
-64753, 25243, 34515, 55297, 10835, 59392, 31280, 15931, 57198, 35790, 43717,
- 701, 42127, 53077, 7565, 48689, 1800, 36854, 6599, 47201, 24067, 41702,
-21302, 48789, 36288, 1918, 58746, 32345, 4823, 50670, 12303, 40904, 60224,
- 7070, 23609, 54665, 27056, 7985, 46794, 27778, 43152, 22231, 47395, 12744,
-44139, 29722, 65470, 9387, 55796, 29370, 38412, 15692, 53166, 18275, 56432,
-34398, 8703, 38960, 914, 50661, 7059, 41703, 14014, 51319, 39514, 16931,
-43631, 15015, 38930, 65018, 13676, 59481, 26949, 53527, 14128, 48596, 3430,
-38181, 7884, 55888, 11421, 63378, 3717, 48476, 8555, 42333, 19699, 44298,
-23272, 53473, 21264, 65081, 26272, 9624, 54023, 1259, 61881, 29506, 50459,
-13953, 42803, 206, 46575, 29242, 36792, 18815, 52101, 20175, 45535, 3432,
-51495, 38372, 14692, 2127, 54361, 29392, 62697, 16652, 52417, 24068, 45784,
-16435, 41184, 6228, 47456, 15262, 65391, 21173, 55006, 5880, 60909, 27799,
- 1990, 64414, 39535, 4029, 43877, 8077, 40350, 54069, 16450, 37027, 60018,
- 837, 54852, 23726, 39564, 32391, 12334, 47208, 6839, 41275, 10334, 25025,
-57305, 38025, 2403, 48041, 27314, 64511, 12893, 44352, 6782, 42381, 2789,
-48017, 26636, 35490, 65180, 60, 58126, 26821, 61598, 2339, 56663, 24120,
-62374, 27776, 53757, 18291, 48345, 2738, 40818, 28816, 56181, 24295, 8378,
-34019, 40733, 25114, 32974, 63601, 3977, 34482, 60342, 1549, 51775, 20272,
-41769, 29483, 48849, 10601, 41537, 4363, 45015, 10912, 37063, 63149, 17447,
-26961, 41500, 20297, 49236, 28388, 62762, 3369, 54941, 35813, 5041, 34109,
-59048, 19357, 56093, 35299, 6072, 52482, 33891, 2004, 30416, 45723, 5094,
-42945, 13480, 36407, 55831, 14695, 52852, 7233, 30087, 39703, 25113, 53215,
-10671, 55107, 30418, 50381, 14096, 43385, 3762, 51509, 8482, 56811, 13785,
-61866, 28461, 3362, 48314, 30699, 9228, 44584, 16729, 41949, 20349, 52709,
-39010, 5119, 20806, 65232, 30649, 15738, 34275, 63043, 19030, 55735, 20868,
-64808, 17968, 52632, 15702, 62388, 7442, 22430, 31071, 40620, 17767, 61397,
-21924, 56984, 33035, 17683, 39559, 61818, 26, 49563, 32951, 15529, 58804,
-11864, 39365, 5327, 60635, 34372, 445, 23652, 46566, 26006, 6728, 60520,
-33133, 5532, 45037, 13700, 48272, 25238, 58473, 32000, 19864, 44606, 22053,
-57492, 23767, 9741, 62473, 31181, 54432, 7863, 32980, 45544, 19272, 43219,
- 1471, 39958, 23988, 58155, 17649, 49698, 19197, 43020, 22131, 41085, 18377,
-52549, 27478, 63954, 3356, 38782, 10070, 42145, 13831, 45824, 33484, 19988,
-44553, 16277, 41764, 4636, 56671, 30980, 63864, 24529, 5022, 58132, 32092,
- 9372, 62927, 28727, 48245, 15562, 29934, 57941, 25236, 37247, 12145, 22950,
-48932, 30384, 8035, 35934, 55148, 21906, 61116, 26623, 51938, 4308, 45554,
-15786, 41301, 17784, 52340, 33472, 15224, 30931, 55700, 18899, 57290, 25411,
- 2923, 65321, 32044, 20188, 42574, 15963, 44720, 6603, 64659, 26223, 34947,
-57577, 19372, 48435, 34005, 14180, 50615, 32567, 20376, 51406, 4571, 39749,
-21445, 52218, 28028, 62448, 12564, 56163, 8044, 29821, 46784, 34391, 9183,
-39933, 31910, 15331, 47453, 17511, 38232, 583, 41382, 13909, 64788, 21115,
-47749, 5042, 50147, 29595, 59937, 2163, 57389, 10473, 38545, 28235, 53975,
-19536, 42526, 30518, 9202, 57911, 6420, 21586, 54173, 27940, 65423, 17910,
-53572, 29316, 8857, 35285, 56888, 452, 53434, 32493, 8185, 31472, 44436,
-23863, 10659, 52702, 25867, 12708, 45649, 29191, 11532, 64594, 16770, 48164,
-21730, 53859, 11275, 63623, 25035, 53265, 5658, 27878, 46395, 17656, 35525,
-51500, 3313, 62116, 15587, 47679, 26230, 2682, 34294, 58195, 19186, 65115,
-26590, 36943, 30473, 45616, 7032, 50187, 33125, 12471, 39512, 57485, 22025,
-62170, 4349, 48528, 8400, 24436, 60075, 32505, 8707, 45380, 58015, 4200,
-29324, 41568, 14645, 44104, 25142, 37976, 3191, 43213, 13334, 33005, 57915,
-44417, 10394, 47007, 8052, 43802, 27008, 2147, 48736, 10180, 28522, 43697,
-18497, 65212, 37113, 3376, 45423, 23794, 51235, 28602, 10947, 59082, 35901,
-13967, 58060, 41652, 11877, 50799, 23678, 35735, 61996, 2281, 42950, 10823,
-36910, 54365, 13402, 48730, 4348, 35167, 46165, 26896, 178, 22711, 46868,
-24760, 3891, 55980, 10939, 63842, 18669, 46932, 11873, 41405, 29668, 60425,
- 5491, 55143, 13977, 59291, 31277, 6252, 32535, 49871, 18529, 61358, 31285,
-55857, 4067, 59796, 36798, 7377, 51045, 18601, 48669, 35307, 10946, 20982,
-39937, 48274, 14962, 49757, 39187, 24843, 5827, 35795, 64925, 7461, 42258,
-61562, 6427, 55591, 39964, 665, 42281, 64979, 26701, 4105, 43424, 11826,
-37472, 18207, 42011, 11337, 60283, 29887, 48431, 8433, 42038, 57746, 11104,
-34697, 45704, 12999, 49792, 29026, 38967, 5475, 51883, 10544, 62402, 27770,
-50791, 14108, 46117, 1616, 27405, 52047, 3871, 61137, 30176, 7206, 59771,
- 9414, 29824, 55756, 16056, 60512, 31986, 9763, 36785, 22347, 42876, 20401,
-52579, 10628, 23255, 49350, 18839, 53032, 36762, 4432, 55175, 12550, 60688,
-24844, 52454, 35921, 9144, 30819, 61163, 19093, 44448, 14598, 46909, 19616,
-50812, 15543, 44416, 7840, 48038, 13398, 64499, 34743, 26539, 36140, 47040,
-32330, 8188, 31121, 47669, 1333, 58541, 24928, 48226, 14781, 44913, 16576,
-61222, 22909, 55563, 16344, 60097, 33639, 17647, 63069, 40345, 2634, 49845,
-24019, 41098, 32972, 8549, 59311, 26851, 36690, 15546, 47031, 20441, 41209,
-64964, 2392, 32039, 60491, 18629, 42402, 23048, 38051, 6110, 41003, 63919,
-22641, 8933, 46326, 33931, 12963, 54467, 792, 25214, 53271, 17667, 41038,
-59883, 20862, 2, 51214, 13662, 37743, 18350, 63951, 42260, 12489, 49573,
-40271, 17899, 36790, 25232, 51831, 9135, 61215, 4936, 53537, 11705, 60847,
-22848, 56354, 38769, 4089, 19329, 64121, 24911, 52249, 14846, 37070, 62837,
-20195, 53761, 34637, 11597, 52898, 6442, 25332, 54877, 19614, 62978, 15979,
-38309, 54013, 17956, 50153, 30842, 3177, 32452, 43762, 21412, 57662, 9327,
-27491, 53777, 22180, 65131, 26423, 3089, 61444, 33000, 25930, 64602, 7372,
-55196, 32140, 58203, 10024, 61615, 37212, 22040, 42054, 27608, 51576, 4834,
-32467, 62934, 1831, 24775, 45967, 28904, 47565, 94, 44647, 24332, 58445,
-15327, 45429, 28417, 5808, 23809, 51455, 27407, 11935, 62765, 28911, 58302,
- 9342, 24007, 43419, 57401, 8350, 32475, 60548, 2575, 22078, 43015, 57032,
-16654, 31791, 52236, 21589, 28936, 46346, 15700, 33326, 58369, 19962, 10667,
-34226, 53026, 23286, 57450, 1594, 62422, 27731, 53772, 35759, 981, 22487,
-62786, 23711, 5334, 50507, 26583, 79, 63675, 21344, 43607, 13598, 58752,
-18903, 48412, 35898, 3426, 34519, 54619, 19057, 59267, 39185, 11355, 42391,
-16916, 46217, 36170, 25572, 34670, 45490, 18911, 41317, 498, 46354, 19877,
-50044, 33821, 1902, 61363, 25855, 36293, 54359, 3936, 63940, 8556, 29581,
-45211, 22595, 42172, 19156, 46722, 4780, 22521, 58133, 38840, 15555, 41706,
- 3734, 53690, 28507, 37098, 5572, 58163, 24166, 61707, 16472, 39522, 3137,
-53010, 12628, 62943, 125, 59721, 19462, 55795, 21089, 40065, 15742, 43174,
- 4529, 64671, 30221, 38244, 5619, 47709, 11177, 40516, 1026, 50676, 42753,
- 6836, 32344, 54633, 20591, 60443, 3774, 51477, 28215, 39092, 4295, 49690,
-32051, 429, 58946, 10022, 23813, 49242, 40071, 5926, 45880, 12468, 53789,
-20421, 59279, 28247, 10294, 35698, 55421, 27519, 5414, 48682, 21755, 59397,
-38594, 10951, 63134, 4969, 26790, 47289, 30282, 36562, 26315, 56765, 31742,
- 1639, 33592, 55053, 25666, 2801, 61548, 10687, 56290, 19811, 46716, 21581,
-40038, 28102, 41521, 16856, 46548, 6810, 26297, 54446, 42558, 35573, 573,
-33483, 58550, 6703, 30083, 44960, 4943, 59694, 22748, 38359, 30444, 47159,
-14519, 42041, 7437, 48290, 2742, 26805, 45008, 5878, 62148, 37577, 19325,
-64489, 828, 38872, 30437, 49042, 16872, 40972, 6448, 46322, 30165, 38628,
-11714, 52981, 20735, 39413, 19034, 41897, 15294, 50804, 33506, 13338, 54088,
- 6407, 59118, 14591, 36587, 50278, 15787, 37699, 53912, 21017, 9761, 35948,
-64647, 21337, 51904, 10735, 40418, 1540, 50748, 32239, 43202, 15954, 39247,
-47849, 21635, 3101, 38118, 30231, 63316, 1945, 26951, 50722, 18322, 37363,
-29635, 51309, 8794, 33878, 50032, 956, 39366, 10120, 41416, 20290, 64104,
- 5065, 24549, 51440, 28949, 60190, 15374, 46286, 19237, 40508, 12834, 43190,
- 6621, 24000, 58208, 33010, 13815, 52906, 38599, 16268, 60394, 40716, 29753,
- 6048, 52462, 23806, 33421, 40517, 7666, 22782, 49670, 24934, 8554, 37785,
-31682, 14984, 63699, 24163, 54367, 959, 65436, 12395, 56392, 3208, 62919,
-13946, 53834, 25187, 63734, 4839, 57499, 28467, 40052, 6132, 58767, 16312,
-32929, 40929, 23814, 58999, 14615, 62966, 6612, 56477, 11888, 34704, 45586,
-26722, 1162, 55687, 12016, 62646, 35278, 9539, 65210, 27127, 39753, 490,
-33983, 51167, 21821, 44189, 23070, 45956, 16291, 39747, 24859, 44750, 5260,
-42866, 11248, 60762, 30724, 51910, 23605, 9436, 50124, 27346, 36381, 24727,
-64819, 31805, 14670, 29939, 57631, 22477, 36542, 9587, 31485, 45055, 19871,
-62156, 15124, 54723, 18272, 61135, 39848, 16494, 37676, 55341, 13769, 21308,
-56426, 29287, 64440, 124, 48937, 13618, 51074, 30701, 44949, 1529, 39560,
-61022, 16610, 41886, 7766, 31970, 44010, 23328, 34331, 55893, 8660, 65385,
- 5934, 49224, 9915, 40394, 52244, 22899, 7272, 35176, 51510, 21372, 48562,
-30290, 1424, 35079, 58679, 13167, 55268, 150, 59092, 35185, 29831, 48529,
-20658, 9335, 28256, 50056, 18543, 38341, 26101, 49744, 15911, 42021, 13680,
-46222, 2595, 58084, 8837, 60849, 27659, 56187, 22995, 34253, 63883, 15396,
-41093, 22081, 48726, 8574, 29449, 54299, 20010, 60947, 5110, 44100, 12137,
-52016, 15348, 58943, 17692, 49316, 1386, 43442, 11094, 60662, 5633, 44011,
-27705, 2136, 49862, 25933, 38826, 21453, 44922, 29394, 8611, 56860, 31443,
- 6986, 40472, 57371, 15563, 33780, 7423, 31759, 43639, 19998, 62537, 13314,
-57542, 9389, 63667, 481, 32891, 55290, 42936, 14859, 52320, 19267, 47113,
-34552, 5406, 65418, 10191, 55984, 17505, 62145, 14056, 26474, 60400, 19312,
-56325, 3171, 52849, 13117, 34715, 44818, 8871, 47334, 2898, 38950, 7060,
-51602, 24778, 48117, 21009, 50246, 34573, 9298, 47478, 36123, 3192, 30220,
-46857, 8290, 22041, 54964, 35809, 10880, 61526, 1688, 55300, 28882, 60468,
-16425, 56648, 30154, 61820, 5211, 50082, 32916, 7802, 31395, 43855, 20031,
-47595, 21578, 38518, 24283, 43788, 32654, 9084, 31237, 42058, 14435, 45431,
-16954, 48794, 11664, 30509, 47773, 13422, 51003, 1286, 38096, 26810, 48858,
-32818, 28500, 61545, 8125, 53202, 32907, 20674, 49087, 26184, 16663, 50447,
-21598, 45291, 17758, 49109, 27858, 6040, 59435, 11247, 57364, 4956, 31897,
-56196, 9780, 34414, 62558, 22418, 52590, 34202, 7531, 20215, 39447, 56277,
-14044, 59293, 2790, 51027, 7647, 38637, 53712, 4369, 39428, 13019, 64068,
-28438, 57212, 13674, 37850, 1340, 42626, 22808, 46029, 10922, 24728, 56955,
-30564, 6764, 34338, 50245, 25727, 11114, 34242, 44425, 16963, 39326, 4617,
-62710, 14422, 58570, 24339, 9728, 52460, 28209, 64293, 20431, 52020, 2121,
-46496, 14403, 38433, 19818, 42911, 22424, 60912, 27385, 14429, 58159, 28989,
-63293, 11907, 44093, 6070, 38988, 64521, 24200, 7014, 44968, 18466, 48876,
-24210, 10746, 65512, 2296, 58337, 31873, 62234, 13984, 54146, 3657, 64899,
-10562, 55671, 24056, 63315, 27947, 51643, 18220, 41321, 32258, 944, 36574,
-12063, 53321, 9075, 32217, 57182, 12955, 28153, 52794, 36835, 12384, 42384,
-15606, 54919, 21596, 62772, 19665, 37134, 4776, 41574, 27089, 55603, 15985,
-47832, 26763, 53301, 17565, 64363, 39859, 16459, 62709, 11431, 55024, 454,
-65408, 22130, 41126, 17925, 59826, 33093, 2978, 42149, 55690, 26788, 60782,
- 4503, 54377, 27289, 38038, 22935, 45781, 19963, 49697, 24319, 8839, 33943,
-60690, 6401, 41075, 12968, 58718, 31538, 20408, 43727, 23442, 41578, 4322,
-45908, 33149, 8027, 47306, 30845, 25636, 37155, 27922, 54258, 16324, 61228,
-35554, 22381, 58890, 31838, 16743, 63855, 3654, 56431, 14578, 64492, 30924,
-17173, 54530, 27599, 65064, 19716, 56708, 32736, 12548, 46058, 25669, 42801,
-31590, 17617, 44467, 11620, 42115, 357, 44147, 12820, 41987, 18085, 55854,
-28148, 58690, 9927, 39875, 5702, 53039, 11590, 58976, 5114, 55241, 27779,
-59495, 17797, 54683, 7170, 64718, 24494, 35071, 62190, 3079, 55527, 34114,
-28405, 49751, 9893, 36668, 2069, 51322, 20909, 43924, 17387, 64258, 38093,
- 5219, 43830, 32812, 1727, 59188, 7378, 55351, 11911, 63969, 36992, 24675,
-42225, 18868, 36869, 48953, 17749, 51141, 27446, 12218, 46482, 3312, 26799,
-44585, 62041, 1825, 28038, 43757, 18392, 42323, 20559, 57025, 17111, 27412,
-62352, 21163, 51238, 706, 48060, 6311, 52342, 25586, 57824, 11906, 65496,
- 6452, 34748, 44421, 3644, 50754, 27209, 61893, 1755, 36416, 58644, 5298,
-24630, 61260, 26427, 47952, 21872, 37881, 18226, 46862, 31083, 36757, 2971,
-42919, 13177, 34951, 60627, 18647, 54046, 24488, 58896, 12767, 53013, 3290,
-44881, 34659, 4672, 46247, 16542, 40759, 22444, 59978, 26700, 11504, 52829,
-33934, 27481, 63805, 8661, 33784, 51759, 17869, 40515, 22414, 47463, 4662,
-40850, 21511, 44114, 17263, 41286, 32350, 1280, 36667, 9182, 31833, 44299,
-13942, 52714, 21133, 61895, 28393, 41768, 20742, 50417, 1586, 34598, 61211,
- 4692, 24496, 50316, 2862, 47169, 31096, 37828, 350, 33565, 56449, 24050,
-63327, 9657, 29849, 61926, 36183, 2945, 34760, 48640, 8178, 28880, 46332,
- 5074, 42814, 17277, 47327, 25200, 51035, 4111, 48958, 10626, 25769, 63101,
-23351, 12226, 51120, 17583, 47309, 35590, 8307, 48835, 2937, 35356, 56311,
-12937, 36342, 64290, 16521, 25824, 48299, 22314, 51690, 7809, 39866, 53107,
- 531, 47765, 15861, 51841, 18550, 58560, 38146, 14825, 62396, 48362, 11118,
-59337, 1404, 43690, 30844, 5846, 50107, 14079, 54585, 35368, 10732, 38197,
-25771, 44360, 2419, 39473, 59099, 6328, 43465, 10621, 44674, 2076, 38068,
-62614, 3613, 58121, 13912, 37508, 63534, 4597, 53951, 29528, 65202, 19893,
-52252, 22220, 48000, 2280, 44521, 16155, 49711, 23455, 61989, 27029, 45052,
-22375, 41850, 13090, 47101, 2192, 50901, 21607, 31606, 39004, 882, 50667,
-19613, 44965, 22127, 7864, 65478, 21220, 57643, 19857, 63433, 13322, 40531,
- 3357, 49762, 10364, 29559, 60090, 15009, 56705, 38060, 20064, 41438, 22446,
-43336, 28891, 9413, 54974, 1829, 61320, 27939, 8683, 64867, 2242, 36120,
-58951, 18878, 35791, 54363, 10209, 25231, 36928, 54748, 6932, 63351, 30598,
-48342, 11830, 45403, 35068, 9210, 46403, 16019, 40607, 23008, 43499, 19133,
-41180, 16917, 47142, 33828, 26408, 53196, 17608, 63192, 14518, 42409, 20012,
-46319, 12775, 40058, 30568, 54518, 7292, 41756, 10811, 57016, 3571, 53999,
- 6805, 62404, 14861, 56281, 23984, 57582, 5540, 29621, 41289, 6677, 43674,
- 1089, 40043, 19183, 47752, 11434, 62480, 21054, 36090, 55696, 466, 47755,
- 9798, 50033, 37495, 15766, 47248, 3913, 37407, 29120, 46041, 5182, 36740,
-56096, 12909, 27803, 55118, 11969, 61074, 27049, 56444, 7785, 60543, 26600,
-54595, 20650, 58856, 3844, 64676, 26061, 45410, 10369, 49331, 4520, 60032,
-35989, 23435, 45947, 17064, 40409, 58621, 18783, 63587, 27750, 9167, 51171,
-26245, 47460, 8343, 50239, 20984, 34402, 45469, 5309, 23342, 54625, 22271,
-14022, 32430, 58322, 19162, 53488, 23820, 60928, 35642, 12654, 34201, 61227,
-19945, 37106, 50773, 13970, 45843, 34785, 1970, 39769, 30543, 16667, 65309,
-14392, 58735, 29030, 6714, 30149, 51360, 4711, 32256, 53848, 1111, 44373,
-17413, 61769, 26280, 13759, 57972, 11657, 64350, 27966, 37064, 2370, 24183,
-44534, 5303, 18233, 41408, 21675, 49726, 36104, 13524, 63422, 28930, 43039,
- 423, 45448, 27708, 59888, 13192, 29503, 49133, 23298, 12472, 50762, 18453,
-39961, 23111, 50125, 26361, 16933, 48614, 20505, 53439, 7046, 30286, 47274,
-24230, 13368, 37102, 33575, 4389, 60917, 10931, 37991, 25857, 63240, 3669,
-42307, 10697, 37273, 1410, 51614, 16574, 64300, 20330, 39015, 10826, 34754,
-56317, 15488, 59887, 29603, 9718, 35737, 60241, 39658, 14072, 43773, 4203,
-46832, 25742, 43361, 16722, 59290, 35650, 23629, 47655, 19356, 51011, 7209,
-27755, 47935, 13737, 60695, 2785, 52466, 33778, 18211, 49765, 20944, 47119,
-30458, 38440, 24268, 50203, 7223, 30621, 64084, 15202, 42563, 59772, 20743,
-12205, 41165, 33782, 4792, 26188, 61457, 1550, 53073, 25442, 34046, 59609,
- 8359, 55865, 10923, 61718, 4681, 55179, 30435, 2805, 59829, 9661, 39030,
-28139, 47575, 8546, 57711, 17005, 63550, 21582, 43706, 15079, 49164, 19785,
-51920, 23482, 42396, 26262, 39997, 21300, 49436, 29745, 9154, 40061, 25814,
-51194, 16330, 62258, 32610, 55409, 14139, 63671, 30248, 38288, 24355, 50427,
-12293, 30903, 42164, 18956, 57579, 28283, 2529, 62714, 21002, 58116, 19358,
-54835, 15400, 61735, 26293, 7721, 34881, 45332, 18215, 43079, 32054, 2035,
-33453, 50589, 19132, 45427, 11031, 47419, 23194, 39388, 33157, 6145, 35878,
-57683, 17930, 39537, 30661, 6817, 64968, 11528, 55488, 29890, 8082, 44882,
-13465, 39562, 60133, 17713, 57874, 13932, 31527, 40240, 2520, 59504, 16544,
-51809, 33597, 9385, 60041, 35695, 49505, 1119, 37692, 12048, 40999, 3152,
-27567, 54213, 6171, 28814, 44655, 999, 28172, 54889, 7720, 61903, 25515,
-57985, 6438, 52827, 24716, 33525, 42955, 17406, 62174, 41726, 18830, 57753,
-38098, 13619, 59570, 27993, 37876, 3511, 48763, 36222, 24350, 32417, 39173,
- 6983, 56662, 30358, 63545, 16349, 51951, 57644, 7313, 65259, 10341, 22892,
-46837, 32486, 9386, 25424, 61986, 18867, 51964, 5548, 33487, 54218, 7426,
-63034, 33938, 26038, 61299, 4942, 55856, 13172, 59629, 34908, 8680, 33284,
-39342, 23090, 57279, 15803, 39059, 59022, 7452, 56143, 27469, 39381, 23550,
-57574, 13822, 30183, 52431, 22178, 55505, 19109, 60822, 28419, 38113, 7860,
-32584, 60590, 26542, 49325, 5286, 42898, 21049, 38082, 58257, 27565, 5576,
-29276, 53625, 17830, 41132, 12285, 52751, 6323, 54721, 27119, 8749, 62153,
- 168, 42509, 12914, 36517, 64641, 4605, 53908, 26107, 37558, 15097, 62861,
-39684, 10551, 42618, 5763, 53913, 13282, 56657, 17194, 33165, 48075, 909,
-39805, 32200, 4177, 46913, 28823, 52363, 16125, 58244, 38144, 18723, 44156,
-21726, 60816, 3427, 29301, 42884, 24551, 37529, 21062, 49359, 35062, 14812,
-50332, 36043, 23471, 49166, 1150, 33257, 52311, 24614, 38853, 7784, 51669,
- 2642, 59752, 29916, 36694, 1038, 63839, 18754, 57870, 11818, 45798, 446,
-41602, 54457, 20695, 63400, 11545, 47189, 27155, 9410, 23521, 49823, 27023,
- 7559, 57281, 2212, 33428, 58478, 5571, 65157, 33210, 7611, 35145, 53651,
-23363, 44205, 12774, 42760, 1504, 41082, 20871, 44087, 30622, 63100, 1054,
-59203, 8542, 52965, 20078, 47806, 23708, 5794, 30807, 64298, 28684, 6902,
-50782, 13161, 48563, 24069, 2367, 33649, 51431, 15018, 47736, 26632, 38711,
- 3600, 49492, 26100, 33578, 56035, 5724, 24376, 44302, 3909, 35288, 64146,
-15150, 54327, 24632, 43117, 12276, 65346, 26365, 39356, 5847, 24985, 63525,
-22803, 55368, 20439, 57852, 32711, 14483, 40069, 56429, 16123, 64124, 38981,
-18494, 41680, 21471, 49637, 14995, 32184, 41346, 765, 50279, 9104, 31401,
-36681, 1769, 47579, 11095, 26954, 46265, 34553, 8437, 50525, 31233, 15486,
-62839, 6108, 55303, 21922, 43035, 12763, 49413, 8952, 40100, 29785, 24701,
-45773, 34771, 30319, 56055, 2765, 57271, 20049, 53394, 33647, 10140, 31089,
-40742, 58031, 19728, 41353, 16073, 45700, 549, 35177, 46633, 19074, 41709,
- 6502, 52206, 28360, 64797, 724, 44815, 10308, 50826, 2586, 28624, 42933,
-18766, 46402, 14509, 51178, 5930, 35083, 46193, 11958, 39638, 6890, 48411,
-35118, 5916, 56714, 25576, 50274, 4137, 44878, 13870, 63287, 12053, 54193,
- 3528, 22612, 44391, 18862, 50207, 331, 56933, 32788, 60578, 19084, 37827,
-21779, 45951, 33923, 28701, 52179, 25549, 58762, 32001, 18575, 44557, 30047,
- 8889, 48984, 32842, 4246, 23908, 56394, 32187, 63513, 15643, 43223, 3728,
-40726, 57974, 14524, 28916, 53208, 16731, 57215, 22256, 64324, 248, 48714,
-24033, 8265, 54246, 13443, 41386, 15163, 38126, 54945, 16727, 64495, 2197,
-45439, 29420, 8943, 62869, 31934, 5993, 55914, 13505, 60221, 21673, 36646,
- 4347, 55174, 32167, 18526, 46742, 23910, 9458, 50206, 32205, 12655, 44206,
- 5111, 50481, 28271, 64927, 13411, 33386, 4147, 43955, 32194, 1744, 56180,
-31470, 44638, 3848, 37087, 53607, 17810, 48792, 15945, 39931, 28913, 15156,
-51142, 25532, 46150, 10549, 40493, 5908, 52227, 27814, 60463, 11800, 57252,
- 3434, 52186, 14386, 49010, 29900, 39463, 25427, 63948, 9802, 35603, 59520,
-41893, 2907, 38215, 56583, 18951, 62497, 17407, 55151, 28815, 63444, 8230,
-59433, 34936, 16539, 51009, 32192, 14474, 62887, 1254, 36997, 29296, 49900,
-14889, 30481, 53079, 6905, 48215, 29401, 7586, 35756, 49229, 631, 44129,
-19772, 56598, 41479, 10302, 43716, 7113, 45295, 9830, 41934, 61574, 25787,
-11093, 47085, 24047, 9737, 59447, 3556, 43997, 9234, 37463, 63282, 15955,
-55558, 19343, 61025, 44916, 12583, 50849, 21772, 40799, 60328, 3772, 22850,
-64875, 20101, 56492, 35440, 10847, 33463, 44611, 1450, 52970, 20939, 36419,
-27286, 60916, 21, 55142, 20244, 4001, 51202, 19135, 40244, 26860, 44914,
- 4871, 48753, 20904, 60957, 22517, 1298, 47300, 11737, 52858, 22253, 57355,
-28591, 9611, 64032, 27507, 47406, 16143, 42447, 18602, 49939, 25394, 61181,
-19384, 32959, 62779, 11460, 54817, 1342, 64320, 33999, 28538, 61566, 600,
-56992, 17323, 64844, 31400, 15973, 46476, 14698, 44390, 17628, 58051, 23352,
-36952, 28220, 46170, 18449, 40844, 55886, 8736, 62813, 30647, 45331, 24208,
- 7355, 27505, 48793, 1626, 64881, 11365, 57116, 5713, 37729, 10100, 40659,
- 2574, 50252, 11568, 39097, 62320, 17724, 56950, 29879, 50801, 20303, 640,
-27109, 48186, 21836, 60558, 25974, 7850, 35222, 61037, 6103, 49249, 29936,
- 8846, 39303, 33029, 12689, 35887, 50346, 32254, 65217, 6066, 51641, 27062,
- 7431, 48874, 12416, 52733, 17593, 58421, 24113, 42005, 15846, 46338, 18901,
-43087, 29228, 12090, 64577, 30875, 15709, 41116, 61544, 11448, 37988, 65241,
-17719, 55447, 37583, 16112, 60563, 34575, 16950, 37952, 23374, 59664, 37173,
-15824, 58102, 38812, 15016, 50652, 20445, 61377, 30895, 10297, 41485, 26432,
-60105, 8865, 54549, 35804, 3535, 60946, 20246, 55598, 18227, 61872, 35442,
-16716, 33207, 50612, 24492, 46788, 19712, 40846, 24340, 10827, 51631, 5352,
-38011, 28050, 53989, 21395, 12162, 52219, 15622, 33725, 44479, 651, 42010,
- 9736, 46301, 19854, 43707, 22732, 191, 56314, 9220, 58901, 40259, 22428,
-48320, 20429, 65291, 8481, 58418, 37926, 19281, 43441, 21414, 39279, 61004,
-17637, 31018, 57744, 15850, 52069, 12699, 27911, 50823, 18189, 60218, 29452,
-51352, 21420, 1607, 49163, 34792, 4532, 55340, 29549, 34375, 50500, 19467,
-54136, 27490, 4018, 47745, 29235, 39304, 5400, 23904, 56086, 16103, 64559,
- 7173, 24158, 54443, 39193, 10511, 42533, 2071, 45786, 26125, 58845, 17174,
-40519, 24889, 59934, 4132, 53760, 13798, 33229, 9863, 41935, 61696, 28937,
-11463, 59066, 8243, 32919, 64072, 24368, 38310, 7621, 50960, 35113, 27230,
-60272, 5166, 43321, 13669, 50984, 39429, 31724, 1544, 32502, 60624, 4280,
-55469, 12264, 43453, 5389, 36609, 48672, 17220, 40950, 22585, 44709, 25400,
- 7204, 49240, 20621, 43003, 25209, 45253, 34492, 2975, 52942, 29618, 63114,
- 224, 33339, 40491, 8445, 53169, 1679, 34401, 61456, 14375, 33129, 49059,
-36131, 11122, 20127, 63816, 31900, 52080, 15171, 42886, 18295, 40361, 22853,
-53695, 17866, 63677, 23453, 55645, 20414, 58108, 24313, 1003, 45388, 10895,
-41583, 8126, 59020, 36427, 51909, 6641, 38892, 10379, 45664, 29633, 50894,
-18086, 44619, 14071, 36720, 55809, 17187, 59145, 27573, 62207, 21143, 2525,
-28395, 48569, 20483, 58924, 36271, 19898, 43690, 25579, 40020, 6937, 50713,
- 293, 56689, 26861, 63682, 3201, 54599, 33892, 7058, 44006, 58266, 586,
-27788, 53200, 25892, 3933, 41134, 7024, 23801, 47328, 30325, 8811, 55867,
- 3452, 51877, 10266, 29371, 46557, 6980, 30537, 64503, 6160, 41668, 12576,
-45476, 22321, 64200, 5206, 31482, 43771, 18209, 45741, 31095, 13891, 43179,
- 806, 47542, 31267, 8892, 49167, 4723, 38410, 9303, 29632, 64666, 5671,
-57508, 35681, 22601, 60125, 14562, 43515, 273, 45689, 34180, 26714, 61507,
- 7963, 29003, 51544, 31236, 60115, 32717, 4037, 30584, 50119, 36187, 19526,
-45444, 25453, 6094, 53150, 11720, 41480, 16110, 45630, 31856, 1024, 62131,
-10940, 56787, 1984, 26549, 51305, 6084, 34572, 46411, 4413, 32995, 59191,
- 2209, 31614, 36956, 4259, 24204, 64714, 36682, 17415, 59931, 31903, 14291,
-45402, 7163, 26249, 64929, 13141, 40190, 58327, 24094, 10137, 59304, 32992,
-43600, 3198, 37896, 28543, 33876, 49524, 14088, 27744, 52128, 18536, 61132,
-16516, 51796, 4847, 31125, 63991, 8403, 29522, 44213, 19417, 47798, 39084,
-59734, 26292, 14881, 48573, 35999, 23490, 50784, 13779, 41080, 2283, 56268,
-31887, 14713, 64864, 17433, 37264, 31577, 16626, 62292, 4390, 21346, 58841,
-24648, 53781, 11646, 37433, 26812, 39195, 22236, 51251, 26676, 8750, 56550,
- 4756, 52154, 9549, 37198, 58490, 16042, 40383, 12420, 50679, 8221, 22943,
-60074, 24179, 9168, 37588, 27667, 54952, 15318, 65076, 19308, 48917, 24484,
- 6050, 51381, 25990, 2369, 23145, 53269, 39643, 4580, 42472, 10620, 61779,
-29807, 57873, 3894, 43693, 13477, 47147, 29786, 7729, 43392, 32573, 6950,
-47638, 28824, 34262, 60939, 18777, 47000, 29005, 11338, 31072, 61851, 22793,
-54520, 16090, 65283, 2889, 39292, 28380, 63044, 2089, 25351, 45991, 4640,
-43030, 7235, 47093, 31119, 44901, 9984, 42142, 567, 29258, 62532, 5048,
-56330, 13586, 63875, 36340, 20863, 37604, 8147, 31381, 41556, 18110, 50639,
-39449, 13283, 23053, 49809, 35725, 8298, 44737, 33449, 56403, 29034, 62183,
- 1645, 52570, 27003, 42244, 22168, 40564, 26657, 61647, 18303, 52427, 21031,
-35585, 48519, 16730, 59519, 257, 52378, 34931, 20428, 56217, 1308, 63445,
-10742, 56748, 37800, 22709, 64399, 34379, 14863, 57743, 25050, 63618, 18900,
-56343, 36659, 15880, 43010, 12682, 45177, 2400, 34187, 49354, 18763, 62114,
-13566, 57601, 4286, 41229, 25051, 58282, 20916, 7134, 21970, 52159, 26339,
-57372, 11154, 64087, 31368, 12806, 61780, 37681, 17515, 60844, 3479, 55164,
-35215, 18484, 51102, 22946, 41840, 17175, 49050, 37280, 11643, 61737, 14017,
-26018, 64001, 38328, 14561, 40269, 62121, 15401, 56120, 38982, 8598, 27259,
-53274, 11940, 38179, 62459, 19119, 56879, 37100, 324, 44772, 30436, 8212,
-35261, 46130, 22470, 14264, 63526, 27281, 53298, 9982, 58607, 148, 35557,
-63137, 5864, 48508, 25188, 38546, 11546, 34840, 47041, 13018, 50038, 38248,
-14585, 64774, 6276, 23071, 2038, 53099, 37865, 6481, 64510, 890, 35024,
-60154, 18476, 45853, 15565, 39748, 48331, 3740, 44044, 9892, 55443, 40811,
-22915, 36953, 48409, 8255, 42076, 14968, 45728, 21014, 63341, 2745, 57883,
-10686, 64199, 38389, 20443, 47331, 27135, 60734, 32099, 19624, 52728, 4197,
-63857, 18354, 58772, 39117, 14290, 41810, 57531, 13312, 43587, 6807, 47497,
-29650, 37836, 9365, 59613, 40139, 11619, 64539, 31376, 57903, 8065, 28385,
-54845, 20798, 47685, 34953, 6847, 26518, 51344, 19574, 61292, 1418, 35184,
-49805, 17233, 37546, 63112, 14577, 56136, 6133, 25794, 42904, 2970, 64393,
-21260, 44707, 16984, 42209, 1367, 47509, 23942, 32726, 58531, 9260, 23372,
-54007, 41326, 14750, 51496, 19806, 56243, 11990, 57712, 22372, 63199, 18012,
-55644, 38585, 11225, 41436, 22012, 46642, 27913, 9404, 31930, 60745, 24725,
-53155, 10716, 59148, 5567, 26422, 60890, 34461, 10194, 57108, 18932, 62736,
-21912, 12026, 42499, 15505, 45054, 18182, 58794, 12983, 63020, 8069, 48371,
- 843, 43511, 11221, 59222, 2890, 27652, 53886, 19425, 39528, 28801, 9145,
-48216, 36679, 22854, 33890, 49127, 21218, 5741, 50857, 9489, 27178, 45461,
- 2711, 41774, 13029, 43468, 30612, 427, 54497, 27086, 60978, 18514, 53304,
-26495, 8834, 54954, 28695, 38906, 23222, 50358, 17272, 46622, 12430, 39951,
-65404, 34506, 13269, 44382, 17645, 41361, 5072, 53808, 34489, 2077, 29852,
-45995, 21953, 42761, 29680, 6724, 60292, 12284, 47129, 4820, 64823, 32611,
-19983, 45794, 21852, 40154, 53063, 10705, 22593, 48007, 28866, 8008, 49713,
-32460, 18821, 58416, 41640, 5489, 44369, 23538, 2257, 48172, 32412, 17700,
-48934, 21981, 52664, 20390, 62721, 2389, 54677, 36945, 7870, 42215, 17482,
-47157, 20317, 31217, 46070, 19355, 41732, 30247, 3953, 55046, 28073, 61553,
-19825, 55519, 25757, 2732, 51204, 35941, 30363, 49199, 40958, 32144, 12413,
-45756, 21831, 43766, 26296, 7092, 52409, 29185, 62777, 8699, 27843, 57611,
-21203, 50564, 26611, 1935, 57002, 10813, 29869, 52471, 18079, 61962, 5825,
-49686, 15583, 41459, 19711, 46389, 31474, 1016, 58723, 34464, 12926, 41334,
- 2140, 43901, 13639, 46109, 26511, 37142, 1770, 30728, 49177, 5084, 33119,
-52203, 21501, 61254, 24869, 3469, 56942, 31129, 15106, 33610, 47489, 18042,
-44173, 16413, 33882, 47162, 13379, 59076, 2811, 23461, 55816, 39657, 9950,
-45687, 34279, 27523, 54338, 11040, 60424, 3249, 30737, 42680, 21961, 35658,
-50509, 16564, 48857, 24114, 52990, 4557, 55387, 12932, 57733, 35407, 11917,
-43993, 15329, 50190, 38447, 6716, 31824, 65008, 9566, 38111, 25349, 33296,
-39131, 4108, 35524, 49674, 13059, 26206, 52250, 16383, 60537, 1943, 33951,
-54436, 41304, 4190, 43602, 21405, 47628, 19996, 32837, 45279, 2485, 47518,
-20864, 40640, 32355, 2028, 35151, 51328, 4733, 57587, 24627, 37487, 6013,
-48892, 32871, 24170, 35760, 56690, 19821, 41527, 22642, 47050, 34528, 8604,
-32629, 49701, 15387, 60293, 30373, 13112, 53508, 8084, 27938, 40845, 59586,
-15581, 39019, 58993, 19184, 56010, 20936, 54140, 7052, 61990, 24089, 40171,
- 7974, 30016, 48199, 6711, 65234, 30878, 36791, 4891, 48123, 9109, 35310,
-63746, 1715, 54951, 29706, 4740, 41829, 56384, 1373, 60703, 20781, 48679,
-15506, 43580, 26673, 52233, 7328, 57111, 13930, 48558, 25741, 38604, 28845,
-34417, 53870, 27200, 8886, 55896, 3723, 58658, 28986, 1343, 36548, 56961,
- 6335, 52520, 24795, 41291, 230, 47063, 13136, 30575, 51625, 16838, 49888,
-28482, 41029, 6588, 61464, 10900, 57759, 4913, 37919, 26806, 50475, 12930,
-30488, 57362, 21352, 61636, 5264, 34798, 53530, 7557, 55982, 9601, 59249,
-33376, 13556, 44163, 725, 42423, 7202, 33150, 60562, 22547, 11235, 57360,
-20579, 62549, 16501, 57965, 18037, 53614, 9951, 49202, 30202, 37552, 4638,
-21575, 53230, 36769, 13244, 46182, 6078, 63278, 32978, 46727, 19176, 65530,
- 3049, 44840, 25397, 39902, 28746, 56850, 9017, 54082, 34580, 17732, 45101,
-29417, 7499, 64940, 17943, 55915, 22229, 57799, 34369, 9836, 53319, 27957,
-55892, 19204, 61678, 26114, 2555, 45683, 10098, 39880, 50917, 20217, 41818,
-53672, 664, 26919, 52646, 4883, 38877, 62363, 1242, 42153, 22133, 37722,
-50602, 13869, 33276, 64162, 24425, 5165, 59452, 18255, 41188, 23682, 52442,
-13113, 54712, 4429, 65387, 12237, 59569, 36193, 9896, 33344, 40505, 25880,
-38331, 30653, 17371, 62469, 5621, 55223, 33579, 20747, 49022, 18672, 36554,
-28867, 60299, 1090, 53845, 15354, 59885, 25090, 6446, 34325, 61610, 3699,
-48069, 35480, 24499, 49128, 19714, 12704, 57186, 15623, 62007, 1397, 35579,
-65035, 14890, 53907, 24424, 63333, 5272, 53541, 28084, 59601, 19489, 46007,
-30178, 9251, 63749, 28183, 39664, 2286, 53728, 9970, 28151, 50289, 5276,
-62603, 14102, 56969, 24982, 64835, 4851, 54366, 37401, 3228, 62822, 26135,
-35446, 61223, 2083, 24270, 44507, 28561, 4251, 50059, 9783, 38202, 27531,
-47662, 17255, 45746, 14719, 58515, 37449, 16699, 41725, 20580, 46614, 17278,
-63012, 22117, 52931, 26607, 14502, 33687, 38581, 18223, 49274, 11813, 30920,
-37536, 10527, 39621, 29342, 62682, 8687, 58210, 19990, 39617, 31160, 51565,
- 9956, 63756, 2688, 57396, 10224, 20780, 39516, 50235, 16709, 43128, 18914,
-41664, 62590, 16637, 31912, 42273, 20183, 64975, 11795, 55242, 26151, 63325,
- 3360, 35991, 57562, 8262, 64498, 20655, 53106, 25372, 40130, 15469, 33278,
-60164, 11430, 39478, 23244, 48208, 966, 45782, 12228, 30468, 59841, 18063,
-39252, 23465, 44626, 15996, 40277, 65222, 21896, 52752, 17823, 58435, 44682,
- 9353, 34777, 46243, 27632, 5751, 24468, 50248, 3311, 36979, 30949, 62138,
-16072, 57035, 17268, 59336, 40924, 25506, 179, 61591, 33588, 24711, 42623,
-20129, 6934, 40353, 28450, 49326, 30690, 9881, 58564, 275, 34031, 47562,
-25939, 6024, 62124, 11014, 54447, 25048, 38991, 31195, 10430, 47096, 6569,
-28505, 62387, 20336, 43768, 7336, 40680, 10583, 47259, 34955, 17239, 58381,
-32169, 13005, 62659, 6510, 23577, 63606, 35731, 10767, 60664, 14089, 25084,
-53785, 17455, 65155, 8605, 31763, 60160, 697, 21326, 52448, 38477, 14165,
-44445, 6388, 48002, 21145, 40377, 32478, 23098, 41385, 33448, 1512, 29293,
-55972, 15642, 59961, 9216, 63840, 3494, 52510, 31857, 46195, 26665, 516,
-61743, 11369, 57513, 3397, 51957, 22035, 42725, 18651, 46561, 10271, 51480,
-29573, 45613, 18706, 42369, 27205, 10083, 55204, 5432, 65328, 35169, 27380,
-46556, 11753, 29794, 51624, 7902, 28799, 37772, 9246, 29521, 48549, 13910,
-43494, 7670, 39994, 13369, 49641, 35043, 14799, 52174, 18613, 60781, 15305,
-33636, 65297, 16359, 37398, 27014, 45174, 1865, 41743, 13645, 44555, 29516,
-17347, 32348, 41784, 6355, 52046, 13591, 36895, 55248, 7606, 63016, 35361,
-23627, 32442, 65015, 1767, 34962, 59680, 4501, 52581, 31664, 2843, 61484,
-12058, 57127, 1195, 52052, 11637, 44050, 3159, 60517, 30651, 53745, 10818,
-59053, 33049, 62295, 16004, 47441, 27675, 53533, 2619, 24041, 46378, 35009,
-13145, 64731, 548, 27031, 41032, 21667, 43574, 23221, 41531, 61278, 72,
-33617, 63015, 13432, 51498, 8619, 24878, 50621, 13116, 60496, 2791, 36432,
-21863, 37958, 16279, 43078, 32245, 13947, 22962, 44917, 31749, 10361, 36284,
- 3267, 51452, 27641, 47372, 16748, 44414, 5896, 65456, 15270, 55159, 26651,
-35935, 44081, 2850, 48284, 11131, 61348, 1503, 53756, 26252, 6368, 36654,
-10062, 39539, 31007, 15042, 29475, 63252, 1169, 54561, 35508, 8505, 39234,
-26892, 60450, 5310, 24473, 43146, 1763, 47102, 33372, 9323, 49469, 30289,
-38750, 11081, 59593, 14067, 54356, 33864, 58391, 12821, 21938, 61086, 35532,
-17718, 50677, 23438, 13380, 59949, 43110, 21370, 48994, 15288, 43592, 3951,
-50965, 35462, 24779, 60436, 39764, 3246, 48224, 14035, 65374, 25234, 54035,
-15592, 63468, 28533, 36801, 1438, 46101, 16617, 37392, 49857, 17199, 45029,
-30212, 20301, 48869, 33299, 9254, 49590, 29138, 44329, 16282, 41514, 28521,
-46587, 8431, 29057, 56625, 20625, 65057, 33920, 379, 61134, 8569, 57018,
-14801, 51494, 25663, 45356, 6519, 46641, 23397, 50843, 18643, 48450, 27969,
-11074, 21867, 60445, 39574, 17276, 43774, 26435, 45373, 12901, 48694, 7932,
-63790, 28463, 39973, 21512, 64744, 1697, 54372, 14080, 59251, 32804, 15807,
-45326, 22190, 43155, 2670, 31927, 55822, 39210, 16869, 41246, 55139, 15604,
-58024, 39181, 20041, 60584, 22637, 54239, 26785, 64715, 177, 58193, 31312,
- 4385, 44324, 21813, 49442, 40473, 3344, 31893, 55540, 8263, 30600, 54881,
-20704, 58432, 35815, 10238, 45854, 57584, 15002, 49548, 19496, 45146, 17977,
-31921, 48296, 20456, 51612, 13240, 47059, 16545, 53335, 11974, 21873, 43784,
-36076, 19201, 48734, 24699, 39400, 22702, 43315, 26195, 38789, 18882, 49695,
-13062, 45901, 6075, 43288, 24008, 2784, 26152, 52513, 6582, 64488, 13686,
-33422, 55961, 21238, 4312, 50184, 23903, 35732, 57970, 5524, 52774, 12551,
-49346, 5961, 28289, 48023, 24713, 6542, 37207, 27136, 55099, 38609, 4702,
-46673, 26122, 51642, 29233, 58980, 5677, 53890, 9391, 56460, 37096, 60742,
- 857, 54716, 26917, 60406, 33747, 13139, 63915, 1339, 56512, 29876, 52169,
-25709, 40441, 32849, 6815, 64136, 14436, 51179, 20782, 41415, 27594, 37541,
-12131, 49666, 30734, 56423, 24770, 62643, 3639, 53879, 38690, 18552, 42198,
-15802, 46963, 65474, 15366, 44941, 18948, 50896, 38421, 13523, 53399, 11336,
-23811, 65168, 19456, 55686, 15976, 51457, 3366, 31103, 41206, 21462, 930,
-38566, 53636, 4775, 44043, 31836, 7976, 63905, 35983, 3488, 32405, 39983,
- 2231, 59522, 19348, 62733, 20983, 55380, 28, 32674, 13295, 51263, 17756,
-41975, 33267, 825, 32107, 42325, 4696, 50532, 12259, 55609, 24316, 59110,
-28625, 9519, 57565, 5662, 55604, 32448, 2993, 58781, 41502, 26336, 3597,
-57354, 36529, 5929, 53847, 14762, 62054, 34219, 2406, 50898, 10184, 26877,
-49071, 35945, 26012, 42189, 30292, 7361, 58574, 13272, 63301, 30018, 48,
-36739, 32123, 7998, 41172, 58147, 36068, 8457, 30036, 54145, 5355, 41454,
-21286, 62654, 16940, 31386, 37018, 3132, 49991, 8417, 32737, 37755, 23973,
-47457, 5810, 38483, 62747, 30648, 9053, 59894, 18873, 48300, 21630, 6198,
-58686, 30602, 3588, 46488, 31371, 931, 45635, 8928, 41538, 3119, 37468,
-17352, 42749, 20709, 47016, 34407, 12097, 57258, 7232, 25370, 58637, 42084,
-14650, 50918, 38265, 12401, 48503, 4043, 26096, 62079, 22646, 874, 39183,
-25295, 58118, 3784, 65427, 10375, 37669, 106, 33055, 61390, 5113, 41111,
-28468, 33648, 50265, 25339, 8320, 64224, 10873, 55299, 5241, 53841, 10591,
-59989, 5815, 57955, 27847, 39890, 23162, 59681, 16361, 55684, 31895, 45219,
-21198, 41770, 18635, 36850, 49779, 12175, 38057, 61515, 28783, 8149, 46944,
-14484, 45103, 19556, 59896, 17229, 55705, 37631, 11075, 53242, 29600, 57211,
- 2336, 33060, 19804, 58075, 34393, 8190, 39219, 10797, 41266, 27900, 34335,
-47665, 20875, 6073, 28062, 40281, 19236, 43092, 7333, 46414, 21132, 41359,
-31691, 22149, 9609, 36627, 3408, 60668, 13594, 52529, 23619, 39733, 29795,
-62678, 4419, 56669, 16510, 63477, 21478, 45068, 2480, 48368, 20082, 41683,
-32304, 6740, 59028, 10750, 56075, 29751, 34576, 52801, 390, 56454, 9064,
-27506, 63076, 29587, 35359, 45306, 3596, 41898, 7167, 43704, 22332, 37097,
-56684, 8503, 64452, 43462, 26864, 16121, 48045, 19672, 54553, 39628, 16761,
-52386, 29416, 14716, 54978, 26404, 35540, 46782, 11949, 40001, 15072, 42205,
-52543, 22554, 35142, 59338, 8799, 55272, 21816, 60228, 18716, 56468, 22818,
-43136, 19259, 40307, 3922, 47621, 34565, 26026, 43553, 15884, 50492, 37825,
-13034, 21103, 53015, 34567, 12743, 30074, 63194, 21741, 42241, 18923, 49787,
-24951, 39291, 30409, 58353, 19234, 11539, 52741, 2498, 62586, 38001, 18800,
-42802, 21267, 37877, 54076, 14761, 43313, 55040, 20668, 2178, 50611, 19776,
-44504, 22233, 64014, 15158, 52530, 2006, 34952, 58996, 17884, 54775, 24765,
-58106, 19703, 60739, 12056, 34793, 57087, 22676, 823, 49554, 26581, 36145,
-52081, 10530, 64092, 35135, 43415, 13213, 62617, 34995, 17534, 64377, 14567,
-55432, 18539, 61822, 23156, 52935, 12498, 55029, 8141, 61339, 23777, 37510,
-29864, 45992, 10333, 22238, 61917, 24580, 5956, 63275, 23739, 34188, 47229,
- 7494, 43359, 31134, 63956, 8449, 30031, 42798, 22088, 53347, 26027, 58596,
-17745, 38667, 25375, 57408, 8789, 62917, 3265, 57009, 34503, 27992, 45432,
-17967, 42237, 28493, 36714, 20990, 42765, 30983, 9619, 64800, 849, 29046,
-41606, 7798, 48847, 10055, 61126, 412, 57114, 24925, 5762, 59582, 31498,
-17231, 42588, 54474, 22275, 62546, 28999, 39023, 1822, 36422, 32170, 18593,
-64405, 21057, 45154, 17742, 40187, 65159, 9752, 43460, 22022, 62885, 17011,
-55516, 19379, 64244, 1788, 23815, 62257, 30988, 52837, 11422, 62930, 15695,
-54157, 24587, 58991, 8467, 55337, 37873, 62064, 18646, 45113, 22374, 47180,
-34400, 1820, 53836, 9420, 25730, 45472, 19881, 43414, 5107, 41968, 14465,
-60384, 35258, 11326, 57813, 21592, 43973, 26888, 49730, 22082, 4424, 14475,
-31452, 40895, 22863, 34342, 46552, 20562, 5928, 57912, 14520, 54485, 29272,
-58727, 18074, 63579, 13532, 26915, 47070, 23544, 12286, 60354, 34433, 10283,
-62855, 2008, 29913, 45831, 6260, 38484, 65152, 9364, 44671, 5427, 29923,
-56435, 6808, 61041, 28766, 9205, 64447, 5159, 26094, 46874, 31272, 45349,
-11393, 40121, 14664, 48584, 6399, 64677, 11701, 53833, 14323, 62062, 2010,
-33620, 60373, 7823, 23467, 63994, 39464, 6471, 61157, 23266, 44924, 11614,
-48539, 3769, 57550, 7903, 42987, 12609, 54154, 4148, 34653, 63474, 22537,
-46125, 17524, 31729, 54833, 3647, 57206, 9007, 26138, 61958, 5078, 27021,
-64555, 35013, 25032, 59301, 3831, 48846, 10407, 32122, 37519, 25846, 47357,
- 6551, 41696, 11710, 45202, 14742, 43914, 4762, 45933, 28373, 8810, 51453,
-41498, 17600, 57969, 4461, 24253, 42874, 27777, 69, 23581, 51156, 22523,
-10404, 49528, 36610, 27616, 34078, 47048, 10871, 43880, 6175, 38859, 25419,
-41503, 16461, 44997, 1252, 64109, 18993, 54458, 35403, 393, 48950, 29380,
-41970, 16052, 59115, 17103, 55979, 12657, 52804, 20275, 35460, 56411, 10936,
-47790, 5884, 41603, 11370, 46603, 7770, 49782, 21206, 45545, 15962, 40258,
-13886, 47531, 750, 30711, 62270, 13258, 56632, 2061, 63907, 14217, 55442,
-34539, 21822, 35688, 54401, 20355, 63390, 19019, 36885, 30149, 50905, 14552,
-46918, 29619, 41092, 1495, 55356, 11047, 33367, 3063, 36700, 9160, 56225,
-24948, 61959, 7396, 46401, 3347, 41298, 8302, 60250, 11632, 23094, 49262,
-30542, 593, 32062, 44430, 3827, 42778, 15322, 48655, 40329, 12786, 44048,
-20305, 42337, 4813, 47224, 30106, 2160, 35350, 45780, 19935, 6226, 28439,
-51656, 11889, 57199, 7384, 28933, 59617, 21461, 37123, 58319, 13095, 52909,
-23625, 55420, 18667, 52082, 8334, 25623, 46370, 28929, 8783, 63770, 2259,
-35900, 42597, 59832, 48498, 7383, 63925, 12135, 58375, 2855, 54729, 39245,
-22320, 47632, 26128, 12385, 34432, 50118, 1459, 39934, 52551, 5031, 32816,
-54726, 2903, 50789, 28730, 36913, 25307, 56457, 11815, 59229, 18093, 33513,
-50579, 17293, 48622, 15873, 34921, 50089, 18035, 47654, 24218, 38514, 29768,
-57294, 19483, 5778, 27678, 52761, 2657, 62216, 26986, 36751, 29152, 45242,
-21427, 41037, 20120, 46882, 14960, 39567, 29055, 48059, 99, 27854, 46026,
-15834, 49909, 1951, 56419, 27907, 37834, 26220, 33135, 63902, 22932, 43926,
-20935, 47425, 9288, 39665, 6185, 50335, 9775, 35006, 44651, 19548, 48134,
-40352, 16243, 48998, 37823, 10830, 45378, 7079, 34083, 53174, 19020, 38850,
-59732, 7623, 57109, 20112, 55477, 22177, 62129, 141, 38198, 29597, 56069,
-17870, 64273, 40223, 14657, 31847, 53164, 11633, 34143, 61003, 7723, 54041,
-31250, 60252, 7180, 32792, 56293, 24276, 6632, 52355, 3899, 25491, 58459,
-30449, 56664, 14941, 63437, 2825, 56250, 27735, 50185, 13892, 39586, 5644,
-47349, 31428, 13245, 57460, 9041, 51740, 1413, 37606, 29867, 45516, 28377,
- 2995, 50433, 15768, 39800, 26890, 60528, 21490, 54849, 24453, 59810, 30719,
- 1144, 34677, 54300, 23403, 51856, 20463, 58923, 37721, 6201, 46968, 19592,
-44296, 23389, 46229, 3776, 50334, 8209, 46761, 11062, 44630, 3555, 32277,
-57766, 5311, 27643, 42540, 9688, 63212, 21618, 50696, 16118, 39318, 59149,
-25435, 49086, 32352, 19058, 42629, 13649, 52132, 30237, 54134, 15547, 48462,
-31860, 50863, 33966, 5459, 59775, 25193, 54186, 18288, 61158, 21174, 52239,
- 7592, 33178, 58204, 2948, 55318, 14382, 58639, 18005, 39572, 65136, 12849,
-23743, 53582, 32290, 43938, 437, 42321, 19921, 38577, 49145, 12604, 44769,
- 5544, 32189, 40300, 635, 36361, 10289, 38319, 29219, 33824, 64592, 272,
-54305, 34801, 23847, 51164, 20074, 9488, 26257, 18020, 44485, 23664, 50566,
-26227, 37066, 32141, 16599, 64288, 840, 40374, 62304, 5604, 23683, 45936,
-28121, 17019, 61870, 38002, 15534, 44633, 21072, 59404, 7584, 48882, 15442,
-42167, 21595, 47381, 661, 30704, 58279, 24639, 63108, 1528, 30830, 40800,
- 3563, 55814, 11690, 44477, 1947, 51047, 37466, 64002, 20399, 47341, 30659,
- 9259, 53401, 415, 33981, 59895, 5155, 54613, 24247, 65311, 11280, 56600,
-16587, 36772, 55320, 10618, 58311, 25399, 39390, 33399, 16749, 61501, 13262,
-52665, 1118, 36891, 8768, 60025, 27670, 55247, 18605, 59245, 23930, 61688,
-26988, 13615, 64944, 28045, 2613, 53461, 32689, 18203, 52040, 22967, 61509,
-30021, 11625, 43045, 777, 23308, 45026, 30533, 3997, 32756, 46379, 15711,
-33407, 51100, 7252, 23773, 50399, 1494, 26322, 59538, 6518, 37239, 28238,
-46315, 17221, 40080, 20994, 43981, 15904, 47925, 40308, 2236, 42463, 59328,
-19077, 35971, 50845, 20957, 1522, 33990, 49930, 19948, 47811, 30627, 9512,
-34347, 56535, 25943, 60956, 17853, 53096, 34574, 22499, 32550, 39573, 27301,
-65102, 4998, 21620, 60789, 42435, 24411, 62435, 1538, 52440, 12459, 36963,
- 2466, 43563, 16331, 41497, 64427, 26743, 9471, 60746, 4962, 43567, 10178,
-26419, 52402, 22992, 40452, 7880, 53022, 15276, 37804, 25350, 58708, 29773,
-61965, 16523, 37862, 49935, 15670, 39436, 53897, 19829, 49543, 36069, 7883,
-34651, 65265, 23077, 7127, 52629, 11933, 64264, 4480, 51134, 26719, 39985,
-12068, 23640, 58992, 26497, 1288, 20507, 56420, 39022, 14021, 42353, 7216,
-46342, 10164, 37471, 26172, 60138, 11776, 24759, 50349, 35741, 27586, 34334,
-50924, 10800, 36451, 29360, 49863, 3748, 63241, 17409, 55904, 15490, 64618,
-27445, 3920, 61928, 17678, 55751, 15538, 65054, 26502, 60095, 28303, 57447,
- 3457, 49044, 15630, 41297, 18171, 46946, 13727, 29479, 61963, 31802, 55590,
-52215, 34148, 3830, 39454, 10424, 61400, 7756, 49112, 13053, 44361, 10553,
-36450, 30103, 53782, 11787, 58089, 34221, 8940, 24771, 49373, 6520, 40814,
-14411, 43062, 20391, 63628, 4141, 53979, 26104, 61680, 12455, 40198, 7566,
-33023, 52974, 14132, 63757, 36797, 20572, 49205, 18267, 61618, 33189, 23188,
- 7660, 43328, 13011, 38408, 58706, 19573, 50871, 25530, 10761, 48471, 31476,
- 7161, 32413, 44165, 4192, 51086, 32925, 18733, 43188, 29459, 7552, 64771,
-10092, 51946, 5464, 45611, 17279, 31680, 55983, 24285, 40645, 1733, 30051,
-45066, 14438, 41193, 865, 53035, 33910, 5839, 36177, 58934, 22751, 8629,
-60799, 1224, 41358, 15961, 55324, 26242, 64834, 35181, 54538, 13216, 60893,
-27226, 51679, 9147, 30411, 56855, 19279, 63435, 35817, 13856, 34102, 48599,
-21354, 54292, 15427, 64781, 1827, 55709, 12049, 62055, 4097, 56581, 29440,
-14391, 61518, 30570, 9623, 31652, 62336, 7514, 40085, 65467, 27532, 5471,
-43209, 11718, 37231, 62840, 22458, 3976, 46441, 11140, 40841, 7094, 64366,
- 3103, 59537, 14353, 47593, 19752, 53889, 34014, 9466, 36243, 6709, 31399,
-43761, 20566, 45316, 27785, 61674, 13040, 53509, 6697, 20567, 48804, 37071,
-18195, 41191, 22250, 64906, 34200, 12216, 57307, 16893, 60851, 27711, 33198,
-62826, 12691, 39746, 2347, 23873, 51527, 26565, 12086, 65114, 24830, 8566,
-58431, 2912, 24299, 48477, 28092, 3896, 47447, 29675, 42305, 21897, 40310,
-33354, 21188, 57547, 738, 63160, 36214, 5800, 43703, 63586, 35706, 7680,
-26442, 52395, 19591, 63894, 35341, 29011, 50136, 1105, 38588, 30003, 45776,
-19537, 9578, 63768, 37, 24074, 56045, 5600, 57845, 14831, 40863, 12147,
-47005, 26268, 36966, 9086, 50291, 35417, 24209, 41662, 28211, 49449, 8726,
-46964, 5867, 42328, 14879, 43759, 20867, 58156, 10556, 61178, 4602, 57011,
-38470, 6128, 43326, 1597, 13397, 28979, 62412, 17382, 44973, 19229, 42185,
-21231, 51900, 29022, 56577, 15321, 60504, 18432, 43950, 4024, 49949, 30441,
-56948, 19159, 64163, 26762, 56224, 1241, 51727, 27754, 39472, 32685, 8509,
-34657, 43683, 22721, 57106, 17800, 42176, 28090, 8419, 31422, 59837, 6396,
-42191, 29124, 9998, 36336, 56997, 17275, 60833, 4194, 24228, 42434, 13538,
-63505, 37941, 17763, 58107, 28323, 52528, 19244, 59403, 26907, 8912, 62557,
- 3368, 54062, 35665, 17987, 47280, 22643, 41646, 21109, 59077, 38649, 11883,
-46719, 15959, 64605, 37626, 5016, 57359, 20497, 49153, 11399, 45458, 24362,
-49750, 10127, 35035, 46440, 25542, 44109, 12679, 49879, 4483, 46628, 9006,
-19585, 32055, 42235, 8564, 40881, 21244, 65528, 42722, 4321, 47520, 12266,
-43140, 28000, 61511, 11367, 39166, 3761, 44019, 19524, 40869, 25044, 49433,
-19816, 39229, 33742, 8375, 50229, 35661, 16816, 54163, 40993, 17435, 44963,
-24789, 10581, 35516, 60371, 21846, 55829, 24450, 6610, 52571, 42560, 20542,
-58250, 23431, 43820, 19407, 45847, 25869, 50255, 7316, 41171, 16558, 46522,
-27122, 59653, 19265, 55787, 9747, 64600, 5333, 50788, 19193, 40540, 23227,
-36569, 55507, 3573, 29683, 50758, 14265, 44618, 2255, 49277, 31581, 3892,
-48241, 36000, 58, 49489, 6800, 51903, 22291, 56299, 34912, 6031, 57393,
-41355, 1585, 45247, 35363, 14860, 33734, 61908, 10586, 56495, 37429, 13565,
-60476, 1069, 55568, 10158, 60117, 7925, 43568, 33843, 16948, 49973, 31141,
-21828, 10118, 52997, 29782, 61764, 2631, 47370, 27081, 4425, 58886, 13453,
-54701, 14915, 65527, 4615, 56929, 39735, 21584, 44918, 33052, 16723, 47875,
-25328, 43386, 22274, 59935, 29231, 4710, 59262, 33485, 21050, 57879, 8356,
-52068, 2289, 38698, 31638, 19408, 54310, 22887, 62149, 7650, 52359, 27602,
-37367, 24644, 41882, 32367, 12074, 52958, 16926, 60649, 37591, 47182, 9779,
-51563, 28072, 59422, 1877, 55786, 25734, 6115, 33441, 48264, 2665, 39786,
-26303, 65002, 14345, 42438, 465, 38837, 11583, 46112, 17108, 31971, 37317,
- 9708, 56800, 19892, 60136, 16214, 52001, 4843, 33865, 51329, 3067, 58648,
-45288, 14717, 35227, 51701, 15901, 54764, 22019, 50418, 1100, 48510, 28487,
-34439, 54079, 7433, 46950, 32453, 3016, 45827, 11972, 42871, 1066, 40824,
-14628, 37516, 49327, 21331, 41734, 19863, 45185, 31469, 562, 59914, 10930,
-50271, 3131, 25496, 61954, 4659, 51633, 33078, 17798, 48323, 12154, 36292,
-30417, 60652, 16447, 56753, 15025, 30133, 62711, 4088, 54453, 19609, 58407,
-21067, 39978, 28708, 51864, 37478, 2917, 63356, 24960, 55912, 1600, 35362,
-12987, 38739, 26682, 58605, 2456, 53410, 6969, 46798, 17484, 62902, 29981,
-52013, 10862, 46835, 6775, 30788, 53646, 18625, 64951, 23906, 5217, 46608,
-26902, 659, 57380, 13188, 55562, 29636, 50466, 16925, 41349, 525, 49206,
-39088, 29752, 10066, 36939, 1724, 50769, 14142, 54127, 36144, 11517, 35064,
-56379, 13547, 61416, 611, 51881, 11388, 48976, 35473, 23765, 32673, 39517,
-13849, 56654, 4065, 62580, 10444, 28201, 39506, 63262, 7323, 57891, 28994,
-53522, 14632, 39913, 62511, 25566, 13804, 57802, 31187, 43572, 17454, 42173,
-11575, 48770, 31568, 15365, 29735, 55292, 17296, 60625, 28368, 52791, 20802,
-44798, 16782, 26081, 52240, 19275, 31756, 36788, 23525, 44595, 29889, 15164,
-54605, 28489, 8711, 57875, 42712, 33437, 17386, 45837, 14970, 40558, 11992,
-57308, 34034, 22114, 42061, 27403, 41196, 22968, 48334, 31789, 6977, 49339,
-13670, 59683, 37293, 10159, 62372, 1483, 51906, 8165, 37851, 52778, 13064,
-48463, 1165, 40586, 32496, 14617, 62950, 16847, 58635, 36588, 11950, 47530,
-16710, 31821, 36313, 2685, 48019, 8140, 51469, 19484, 64730, 20940, 41604,
-25658, 7220, 21840, 57156, 35959, 6418, 33786, 46568, 18144, 40305, 60003,
-17058, 37427, 23168, 50931, 9985, 35327, 46850, 20592, 61488, 25582, 54244,
- 4431, 36319, 62202, 21864, 44116, 14936, 46256, 2427, 40992, 26594, 62426,
-11289, 38482, 30300, 15545, 32686, 56369, 540, 28514, 45682, 4437, 65240,
-33655, 20769, 40713, 9461, 49903, 18259, 61799, 27626, 15991, 56088, 24671,
-61061, 22138, 55081, 23341, 64281, 6035, 28314, 58913, 13155, 55891, 6324,
-62853, 34496, 26914, 54645, 28837, 34196, 48077, 19476, 42550, 27212, 7642,
-53358, 22569, 42183, 64201, 7007, 26260, 42841, 1903, 40897, 51710, 17360,
-39798, 13246, 37781, 6219, 33431, 62399, 13773, 22467, 58068, 30753, 14660,
-49898, 16208, 31465, 59139, 24193, 53874, 16427, 33886, 45879, 19658, 40438,
-22299, 51093, 25783, 8475, 34900, 56982, 17927, 63552, 37589, 1205, 45314,
-13437, 37240, 58099, 15371, 63808, 34403, 23491, 47226, 3303, 43637, 6891,
-54765, 13647, 62135, 33033, 17567, 59712, 25717, 65046, 33342, 27642, 61811,
- 5401, 23830, 60256, 2142, 28631, 44358, 22638, 39950, 20598, 43291, 29974,
- 3449, 53747, 14804, 48357, 25725, 34741, 46103, 17359, 41831, 57613, 12155,
-22050, 45640, 24053, 11699, 35765, 58669, 20880, 8835, 35187, 46065, 22530,
- 9468, 26937, 60174, 4263, 64362, 19837, 39286, 61483, 8930, 34523, 47515,
- 4416, 43194, 7533, 41404, 136, 59684, 39134, 5051, 41519, 63406, 14170,
-49049, 2550, 39287, 62288, 4176, 47938, 36025, 20125, 2852, 61343, 38242,
- 5147, 50578, 22877, 44439, 16446, 48941, 8725, 60811, 3542, 56593, 9082,
-36307, 20833, 61865, 26627, 53773, 3965, 27967, 45946, 21410, 39119, 19045,
-45578, 16266, 31746, 42079, 23174, 60607, 15886, 55217, 27077, 34887, 46074,
- 4264, 26192, 63635, 1563, 39049, 56538, 19721, 64051, 22979, 55798, 29929,
- 1060, 34613, 47653, 4189, 50360, 63107, 34724, 606, 24954, 49869, 23292,
-11682, 65295, 4368, 31481, 53258, 8562, 63159, 16174, 57370, 29073, 7462,
-50740, 13699, 40708, 21393, 48068, 28678, 8155, 52315, 3686, 65403, 35514,
-24217, 55427, 13457, 29125, 46602, 19104, 64643, 43115, 5968, 40096, 24366,
-62290, 13792, 30487, 39986, 8197, 58543, 25906, 63185, 13877, 41661, 1739,
-37431, 49479, 9092, 42308, 4721, 38342, 8428, 43437, 12358, 46796, 34105,
- 1500, 38831, 29847, 47873, 15665, 43882, 14029, 37298, 7276, 65250, 9575,
-55481, 14539, 60484, 35147, 13726, 58738, 2312, 21444, 33553, 54567, 18060,
-59699, 33215, 7352, 31442, 56145, 23460, 63936, 27282, 52607, 1812, 35418,
-45559, 6701, 47618, 35775, 5646, 34237, 50735, 10392, 44708, 6098, 62358,
- 9820, 30104, 56521, 13447, 59916, 496, 42301, 58880, 23398, 2783, 41411,
-32696, 15120, 59038, 26855, 54658, 2959, 30837, 41956, 6443, 49682, 9910,
-30553, 63073, 21102, 39508, 22533, 46775, 27347, 8770, 53670, 3416, 42965,
-14808, 49485, 12153, 37898, 29921, 52217, 16438, 32688, 63880, 6379, 54487,
-12558, 63326, 5628, 57448, 22302, 36526, 59334, 356, 63537, 8956, 27591,
-49694, 1806, 25129, 51785, 35320, 528, 61190, 38274, 5691, 24811, 45479,
-29880, 55606, 4924, 65454, 32294, 53686, 20651, 38143, 16800, 46012, 667,
-33281, 49401, 22883, 14130, 54618, 23584, 64065, 18959, 51732, 29045, 11671,
-48673, 30579, 8474, 53159, 27134, 58386, 17394, 30856, 45320, 13065, 65395,
-32229, 51751, 12713, 25376, 58181, 17994, 64655, 1567, 55344, 28492, 39300,
-24471, 49673, 17222, 33250, 51237, 1888, 41800, 9859, 38028, 30769, 61280,
- 6675, 54397, 11672, 64382, 30054, 56709, 2547, 63515, 9918, 29531, 43728,
- 5068, 51159, 9441, 23036, 56239, 41052, 14105, 44343, 28817, 6336, 50387,
-12741, 42294, 16152, 38373, 58760, 27578, 11598, 56700, 23076, 16374, 48745,
-29601, 63708, 15657, 57850, 36223, 27048, 50501, 14416, 38838, 24989, 41944,
-32165, 1674, 49036, 23861, 34662, 58514, 5829, 55489, 12919, 60011, 38188,
-18604, 47258, 27129, 10844, 48598, 7035, 37622, 57855, 1134, 53370, 9476,
-26781, 60489, 20855, 53755, 8753, 36001, 53236, 19079, 46694, 31656, 3692,
-32544, 45796, 22586, 51567, 20622, 33792, 64977, 19018, 53724, 20552, 62168,
-26316, 56983, 17118, 53448, 24123, 63726, 9189, 25460, 57902, 4409, 52816,
-23114, 43133, 16966, 45050, 29389, 40060, 199, 50090, 26146, 39272, 29186,
-51861, 40260, 4383, 48207, 9505, 23860, 65457, 43121, 315, 47725, 10541,
-44962, 16775, 31159, 56650, 11249, 60523, 20151, 54901, 27588, 61608, 17951,
-40484, 20086, 49293, 35082, 25398, 43547, 4531, 48417, 27730, 37307, 32158,
-15257, 45583, 28772, 60444, 5364, 29790, 42544, 8788, 40369, 25395, 50940,
-19706, 43917, 21927, 60064, 37751, 14748, 45874, 12165, 59516, 4619, 34735,
-44435, 15767, 48012, 23167, 54400, 4915, 45394, 18576, 43411, 10384, 48651,
-37880, 18888, 42451, 27655, 37157, 24807, 41861, 16101, 50595, 9248, 28731,
-42764, 18570, 33415, 54472, 19653, 60148, 32727, 8319, 47393, 31028, 16778,
-52902, 29374, 63419, 1423, 50599, 12888, 43008, 15213, 47352, 1925, 44249,
-13642, 54935, 23305, 59376, 26167, 6657, 62932, 40458, 30096, 10465, 34295,
-46562, 14990, 36348, 62693, 17681, 56846, 22933, 38554, 5293, 35146, 50339,
- 9574, 36412, 53092, 23141, 6798, 40512, 29220, 47204, 10981, 43403, 26159,
-37535, 32677, 5605, 62464, 12452, 37222, 28212, 63148, 14767, 58501, 23742,
-52449, 15897, 44514, 18372, 41780, 22753, 46900, 26082, 6361, 41656, 33466,
-24672, 35595, 54350, 18695, 64813, 21571, 38614, 50102, 11125, 32546, 53216,
-20402, 59496, 36917, 17250, 44793, 4940, 60511, 9696, 22493, 51884, 39580,
-14958, 44401, 37060, 10959, 54496, 8208, 43173, 2934, 44596, 9218, 34927,
-62068, 68, 58725, 6964, 52200, 35768, 19678, 60809, 3183, 28176, 45752,
-18099, 42989, 2118, 31943, 57500, 9096, 34068, 52938, 19131, 63388, 32037,
-17998, 42383, 22252, 36516, 49825, 12114, 46123, 16045, 31491, 48309, 2787,
-60754, 11063, 55613, 23877, 54298, 6686, 60222, 11820, 57760, 5703, 28179,
-41242, 14358, 47525, 29382, 2483, 35406, 45471, 5285, 42742, 14257, 49772,
-37514, 17491, 45966, 12502, 61015, 1798, 56858, 24944, 5234, 54353, 31122,
-12505, 62883, 5579, 56161, 10504, 18935, 63362, 27091, 36195, 50979, 20367,
-13845, 36944, 28174, 59081, 4945, 34359, 48511, 19433, 42777, 15683, 39383,
- 435, 42220, 9520, 45351, 3333, 64079, 27920, 1013, 52920, 17300, 65182,
-34229, 10720, 62154, 5723, 53865, 10262, 49886, 21364, 36468, 51516, 12570,
-62493, 21205, 56804, 11402, 60761, 14100, 53014, 4372, 25345, 56914, 1912,
-52608, 35659, 23579, 64193, 19124, 57685, 28958, 8225, 32576, 60536, 25324,
-57012, 45, 62876, 26661, 4427, 52609, 9955, 58974, 2814, 55554, 10630,
-61024, 34449, 23264, 47627, 6587, 57934, 38498, 4719, 44175, 12737, 37771,
-65326, 15134, 56218, 33904, 8585, 44561, 15908, 41394, 19846, 61623, 28355,
-37011, 23824, 59106, 29083, 49887, 5222, 40945, 10689, 42534, 51849, 21362,
- 2017, 44154, 58623, 27323, 3330, 57510, 6431, 24943, 42635, 1952, 45487,
-12642, 64913, 14439, 25269, 60795, 22371, 1705, 34901, 56694, 14279, 60332,
- 243, 54846, 30072, 7896, 60047, 15972, 43942, 20178, 51484, 401, 47532,
- 7312, 44201, 29320, 5444, 35464, 64860, 943, 55060, 11035, 58576, 2892,
-36938, 60361, 13435, 50049, 7675, 45900, 3648, 41194, 11641, 45340, 85,
-28714, 59914, 24135, 3203, 48138, 8965, 23786, 61616, 25489, 53193, 21853,
-48307, 35494, 5892, 30226, 61238, 2488, 58064, 22087, 40234, 33140, 26088,
-53877, 19261, 47961, 20832, 30645, 45122, 15755, 46666, 21677, 63982, 9406,
-31625, 53520, 37437, 10647, 64837, 26194, 51052, 16215, 40907, 24804, 60975,
- 164, 30586, 39785, 5289, 51072, 12457, 61185, 4554, 32070, 57580, 2292,
-34997, 64055, 17506, 37766, 28414, 44210, 15436, 42140, 17668, 39328, 26494,
-44103, 18638, 32599, 54791, 741, 59986, 9351, 39912, 52376, 15325, 30156,
-61217, 18861, 55572, 28607, 2646, 61860, 30276, 38589, 18987, 46988, 20869,
-38527, 62294, 17329, 37036, 47221, 16069, 44376, 23710, 35489, 46886, 30280,
-11070, 43858, 3128, 57583, 29252, 55108, 12183, 38834, 25878, 53916, 7964,
-65120, 3589, 53616, 25361, 62913, 18616, 57462, 21923, 51419, 15021, 38811,
-59618, 22779, 47735, 8085, 24653, 45334, 18252, 44118, 19570, 64519, 35376,
- 8018, 55594, 19889, 33389, 44191, 4515, 28988, 45825, 1591, 39498, 27630,
-34305, 48801, 17717, 41141, 30932, 14151, 49135, 9403, 50710, 1124, 41805,
-63555, 17818, 39435, 10985, 35053, 46809, 13784, 40568, 58046, 23562, 47612,
-18069, 45042, 21761, 46358, 29051, 1908, 64770, 13468, 52214, 30012, 11107,
-62026, 24051, 56847, 6227, 29116, 41689, 4395, 48358, 21235, 35753, 54138,
-11255, 49247, 34178, 3196, 50986, 7678, 38754, 11039, 33894, 61128, 19410,
-56729, 28511, 12290, 38492, 56033, 22520, 8204, 40898, 49799, 20639, 38858,
-55030, 16041, 60944, 30030, 54399, 19927, 47764, 32766, 6256, 55066, 29248,
-49716, 18881, 42584, 24157, 38913, 19583, 48298, 33810, 20657, 52195, 11339,
-57074, 26553, 40407, 15762, 53450, 18309, 36962, 46470, 12884, 24855, 47374,
-20055, 39518, 29593, 51564, 14682, 27818, 53722, 21096, 62297, 17548, 59049,
-20575, 55748, 24914, 61533, 34173, 7511, 36062, 65288, 18083, 33447, 45666,
- 767, 40138, 11192, 41522, 2148, 65118, 20645, 54176, 17333, 31988, 13236,
-44808, 3703, 61589, 10166, 30217, 60416, 5314, 56741, 10888, 36114, 55508,
-28919, 12490, 38381, 26456, 44938, 14124, 22435, 51547, 30513, 6842, 36127,
-63208, 4697, 43791, 21363, 35069, 54895, 16805, 59610, 22913, 44846, 26274,
-47371, 19535, 37968, 25661, 52365, 7429, 29257, 50369, 7026, 24717, 58098,
- 131, 64460, 10634, 49089, 2588, 36857, 50662, 15220, 44895, 25775, 49965,
-18117, 31415, 59553, 10973, 38798, 32036, 7152, 36641, 51158, 23558, 5844,
-53844, 31867, 8321, 51943, 11803, 33387, 49043, 7135, 22403, 57655, 32035,
- 8797, 60694, 726, 54143, 19746, 61861, 34089, 21765, 45890, 6450, 49420,
-17741, 62025, 14581, 41639, 27587, 37511, 20859, 43529, 13046, 46977, 28736,
-37899, 8210, 56925, 31950, 6833, 42855, 14212, 36925, 58339, 3062, 55873,
-26615, 38275, 2104, 25264, 47429, 31633, 339, 58347, 22251, 35286, 50014,
-16375, 32325, 63978, 10323, 58700, 7830, 31964, 65140, 7120, 56453, 33394,
-25412, 38467, 31230, 15177, 34297, 51265, 2425, 48907, 16365, 31100, 55825,
-20836, 32358, 7982, 34383, 65513, 14293, 38219, 7284, 49756, 35673, 25832,
-32883, 39815, 16826, 48933, 32251, 14396, 42062, 21827, 54761, 17291, 59493,
-23844, 63829, 2956, 26106, 58952, 6308, 25235, 56450, 22301, 63995, 20335,
-53352, 27749, 9062, 47319, 2733, 37267, 65029, 31069, 9751, 35159, 61605,
-25086, 13257, 64705, 28921, 11110, 49364, 26843, 7010, 34730, 43966, 475,
-51790, 40952, 15883, 45016, 9999, 64112, 4558, 53299, 11586, 62956, 4967,
-57575, 39921, 3219, 45734, 35119, 6000, 63964, 32655, 25276, 61010, 10816,
-57786, 32441, 55913, 7981, 33549, 62854, 5237, 23541, 45007, 34688, 561,
-40575, 10771, 37948, 26765, 49294, 6628, 39404, 16337, 53655, 21214, 46306,
-10192, 38931, 54759, 14689, 57811, 29953, 62868, 15556, 52495, 32052, 45090,
-10339, 40746, 51031, 64185, 28912, 48247, 16664, 49338, 37462, 14933, 42406,
-18284, 50149, 24161, 5037, 41959, 57716, 3482, 55106, 6250, 59807, 40241,
- 776, 41739, 58173, 23140, 13987, 31530, 56504, 13306, 46192, 7698, 43016,
-11685, 38682, 3414, 51960, 8973, 65092, 13975, 44126, 16793, 40604, 55866,
-14876, 63320, 38661, 18518, 45155, 28348, 52492, 20931, 62454, 29957, 7856,
-63879, 33195, 6474, 35978, 63051, 4317, 34717, 50468, 363, 43845, 65439,
-21631, 12022, 57402, 41208, 17833, 64343, 35318, 27477, 59702, 3046, 30170,
-63966, 38937, 2727, 47951, 28486, 37490, 22898, 41865, 31936, 5712, 50537,
-11925, 32633, 63663, 24249, 41115, 2605, 47107, 21943, 51767, 12465, 58891,
- 7064, 55595, 34293, 2233, 48969, 26090, 36710, 18313, 54385, 21463, 61200,
-29319, 12797, 50392, 34585, 7539, 52508, 30550, 57265, 15888, 63330, 27356,
-38595, 10107, 65314, 6590, 55769, 37349, 18865, 47251, 20528, 40163, 51978,
-15808, 28962, 41951, 2719, 58857, 13082, 61739, 45201, 7288, 27007, 59150,
-24104, 64727, 6784, 36941, 3529, 62365, 43701, 27611, 1043, 53512, 26173,
-60173, 20487, 54137, 8390, 56236, 3257, 59868, 35891, 1270, 53135, 26933,
-49501, 2563, 45596, 34940, 9501, 39060, 29963, 45141, 17773, 38912, 47738,
-12378, 42064, 14407, 44679, 937, 63113, 35686, 25159, 52680, 21018, 5556,
-50720, 26531, 48387, 4842, 53203, 32507, 1268, 45835, 34136, 4107, 36026,
-51212, 23945, 11302, 59454, 27484, 9224, 61831, 34026, 25672, 36505, 46705,
-17731, 41632, 22559, 44834, 26648, 13806, 65082, 31038, 17366, 48087, 12941,
-54749, 4134, 41379, 33627, 2697, 21542, 40883, 27538, 50590, 17598, 37553,
-60878, 9181, 55452, 22644, 47701, 28660, 57482, 1766, 30427, 46755, 12883,
-43018, 5357, 49570, 25462, 57082, 31070, 5584, 48729, 26610, 7855, 34906,
-46525, 23314, 8594, 27161, 58970, 24880, 5439, 22701, 9626, 35884, 56292,
-23760, 1030, 51988, 31172, 62715, 2391, 34191, 64713, 22205, 14895, 40539,
-29907, 47165, 17494, 33336, 62338, 20288, 9839, 34612, 54211, 39233, 10139,
-50001, 28572, 64538, 19883, 56211, 24738, 62650, 17618, 40135, 29325, 54027,
- 5558, 60012, 30662, 1385, 45494, 31993, 4922, 49791, 12801, 37215, 5941,
-41276, 11526, 46083, 25069, 38076, 17274, 58436, 12028, 28113, 46971, 16724,
-25091, 54688, 22340, 9543, 48198, 39524, 27555, 10395, 47616, 844, 44134,
-13419, 41170, 23560, 52478, 10337, 27604, 51321, 20209, 64807, 13390, 56507,
- 8285, 58819, 39437, 22500, 60037, 1541, 37778, 9142, 57264, 31736, 18515,
-61070, 973, 46167, 22567, 41393, 26784, 11449, 63614, 16704, 60282, 4138,
-50228, 10872, 41589, 1879, 49124, 39487, 27810, 16406, 60199, 21030, 46743,
-11454, 43401, 5917, 51755, 18438, 53277, 23226, 41937, 29682, 8972, 43647,
- 3577, 54042, 24330, 198, 35421, 60435, 21319, 51560, 19369, 43183, 4281,
-23138, 56866, 32899, 12283, 43809, 19481, 54149, 22611, 50870, 24827, 11477,
-51763, 40090, 18596, 44231, 4536, 41343, 13964, 44476, 19783, 42892, 29132,
-13083, 64148, 34004, 7779, 32988, 62863, 11462, 27267, 52305, 19334, 55720,
- 7139, 62177, 31778, 16560, 60698, 5409, 52437, 21559, 40196, 18124, 46231,
-12705, 34427, 58920, 39858, 15223, 59902, 18832, 44788, 20193, 37255, 58294,
-17307, 54168, 22634, 63622, 16386, 57275, 40529, 17918, 37354, 53902, 21391,
- 2277, 57864, 7635, 28007, 60942, 3014, 55681, 10301, 32274, 49616, 36153,
- 8288, 59643, 29427, 38542, 22746, 49552, 16720, 52267, 28634, 63348, 13777,
-59130, 1994, 43628, 12125, 33199, 48957, 16240, 65378, 5849, 52950, 13864,
-33192, 64007, 18485, 57819, 22605, 62768, 30059, 1409, 42003, 20759, 62255,
-18690, 42682, 55708, 20345, 4017, 60042, 35869, 53539, 188, 36219, 47290,
-34152, 50628, 25836, 6979, 43426, 64566, 25260, 8372, 38036, 26969, 48820,
- 9581, 52400, 35622, 61708, 8847, 24274, 57001, 12008, 25472, 52809, 29254,
-49439, 1605, 22202, 62012, 24171, 3238, 35949, 51247, 1810, 42556, 9742,
-31863, 59061, 404, 23912, 49276, 36279, 13229, 62089, 35722, 19220, 56405,
-25876, 60322, 21832, 57154, 24020, 55098, 15810, 59226, 3823, 51842, 23513,
-39592, 55214, 9949, 57710, 37710, 13939, 41749, 56710, 24782, 2107, 62647,
-34098, 25715, 58176, 19977, 54161, 7524, 46204, 16212, 36511, 59322, 11588,
-41224, 4224, 45985, 18394, 49746, 25774, 13000, 43630, 17102, 48527, 26325,
-53097, 16506, 50062, 34830, 10726, 39044, 15531, 64277, 3921, 49719, 30011,
-36111, 43994, 12242, 45479, 19925, 64656, 25970, 55404, 22402, 6414, 63700,
-41962, 13220, 40246, 4265, 61345, 24105, 40035, 12862, 44874, 3250, 48140,
-13529, 57522, 25189, 61597, 32132, 15080, 63209, 29687, 46885, 6012, 39489,
-10983, 47995, 27396, 55610, 37340, 17330, 49899, 38014, 5183, 46264, 14639,
-42099, 13324, 38337, 57162, 33263, 8761, 61646, 12858, 55090, 17769, 63696,
-24341, 60808, 6058, 54370, 25509, 41245, 20809, 50703, 18202, 37846, 30209,
-58358, 1075, 40957, 12588, 47046, 36161, 327, 51429, 29661, 38302, 26738,
-60058, 9731, 57321, 4757, 55661, 28399, 7203, 24127, 45889, 372, 42090,
-14246, 63056, 10684, 27816, 42368, 13945, 47148, 8978, 38781, 2777, 30523,
-64459, 4705, 23944, 49176, 35994, 18609, 52248, 34946, 14046, 47649, 19127,
-37620, 54075, 1164, 22222, 52817, 24608, 2086, 58170, 9599, 35787, 62042,
-12351, 42724, 6146, 37932, 18504, 48099, 22089, 54627, 25677, 3151, 39278,
-30925, 44486, 19426, 37023, 51788, 10305, 40677, 3047, 44481, 14053, 37232,
-59382, 15533, 52032, 12024, 37480, 2609, 30703, 50673, 28577, 41344, 13386,
-19525, 30970, 61809, 14166, 56649, 1736, 60911, 34698, 13673, 21563, 40507,
-54376, 16153, 59462, 18683, 45636, 28125, 1152, 22829, 48302, 34529, 2611,
-36160, 43767, 5514, 45884, 15860, 60407, 42252, 6573, 33334, 58755, 18148,
-31113, 47640, 15245, 54739, 36713, 18547, 46621, 35014, 10528, 22101, 51456,
-27068, 7862, 47800, 12019, 40022, 3370, 42525, 10245, 47622, 1261, 39104,
-29402, 47141, 14002, 44353, 1561, 22557, 45495, 27126, 3175, 63291, 28027,
- 5655, 34766, 52066, 14373, 49156, 6767, 29579, 50022, 15358, 61505, 26261,
-57238, 1293, 24447, 44782, 17041, 53345, 26891, 38230, 2234, 33973, 63098,
- 4781, 55588, 35274, 14922, 40321, 30085, 6051, 59331, 26807, 55331, 33020,
-24673, 53211, 14009, 58270, 5232, 21854, 55755, 29128, 39246, 5904, 46019,
-11479, 32870, 52045, 23728, 763, 56514, 18791, 44600, 29350, 14408, 55246,
-28044, 34604, 59946, 16646, 39546, 901, 42864, 16962, 36611, 48517, 8169,
-42738, 12553, 52509, 18359, 62393, 30975, 7667, 33940, 10422, 59877, 766,
-21985, 53226, 28527, 57870, 1557, 61124, 28107, 4752, 20062, 49228, 35856,
-22905, 32653, 48925, 705, 36929, 12265, 45670, 17246, 48310, 4294, 58922,
-11814, 55998, 5384, 48036, 16420, 44157, 22552, 64557, 26979, 15201, 57004,
-23885, 10652, 49161, 2621, 30207, 45452, 23423, 41832, 19730, 49800, 32276,
-62004, 17728, 56371, 31994, 51546, 3499, 39691, 55648, 5868, 61210, 27218,
-33607, 50582, 22961, 44489, 14341, 45840, 33002, 12088, 62608, 30559, 11809,
-45766, 23197, 33491, 63467, 6180, 24839, 61703, 33456, 14488, 40681, 48964,
-19063, 46464, 24258, 813, 31241, 55657, 23136, 51858, 32783, 10126, 64442,
- 7324, 52099, 29143, 58715, 8686, 24638, 61834, 3991, 25565, 43908, 20251,
-53104, 28941, 51015, 9503, 32185, 40834, 4411, 33741, 56578, 23967, 64418,
-10114, 48004, 7424, 63549, 37652, 48543, 8061, 29669, 17831, 42674, 19306,
-46858, 29764, 58563, 3602, 27921, 44108, 5856, 42601, 13782, 60988, 31283,
-54690, 11078, 63693, 26927, 55890, 16780, 64374, 23798, 37770, 9450, 26838,
-55637, 40009, 10957, 45839, 7347, 34700, 49539, 27250, 6101, 56692, 11927,
-62833, 32663, 58010, 3787, 34169, 55033, 21353, 61427, 23026, 54685, 26863,
-65488, 19078, 33774, 61080, 9827, 26900, 56715, 21638, 64917, 32474, 8113,
-60571, 33160, 12456, 50743, 30460, 60846, 19704, 43496, 22057, 60413, 38291,
- 3638, 32281, 37092, 5440, 39585, 29838, 54809, 6007, 61694, 34273, 9243,
-60336, 28743, 53627, 19631, 45248, 28135, 8712, 58441, 3693, 64701, 43139,
-13355, 47931, 4581, 44748, 8864, 35347, 45573, 18692, 33248, 51001, 24938,
- 225, 59146, 36212, 17905, 61955, 37615, 9136, 46426, 34861, 29932, 49668,
- 8506, 53819, 35298, 1723, 62824, 9568, 25325, 54857, 21230, 60945, 12156,
-56197, 5819, 28502, 55399, 22503, 59668, 25294, 44000, 1412, 54242, 20489,
-64329, 41851, 16093, 40406, 63292, 31537, 8878, 32623, 43298, 18779, 48005,
-31444, 64294, 24348, 2941, 58613, 7778, 38638, 28742, 53357, 23042, 32652,
-58033, 10790, 38818, 19342, 45057, 24758, 42718, 21554, 61423, 13518, 50192,
- 4829, 43417, 34025, 8785, 35355, 65142, 18300, 55360, 36582, 16157, 51820,
-13859, 64183, 1749, 43175, 11796, 40747, 28053, 9355, 22928, 46717, 24820,
-12415, 49655, 32490, 889, 56227, 10851, 62163, 7509, 55724, 17405, 58808,
-39584, 5936, 41681, 56840, 680, 59218, 9008, 40867, 29364, 45599, 12299,
-42067, 60430, 7425, 31982, 64222, 6485, 34174, 57591, 37327, 14472, 45590,
- 3783, 59992, 27050, 35653, 44915, 16951, 42604, 14315, 36669, 50496, 14997,
-38708, 56735, 7938, 60766, 34848, 6916, 24834, 55221, 19896, 63312, 26540,
-45044, 13511, 47010, 16497, 39369, 25071, 54900, 31983, 3285, 21651, 52773,
-40760, 65421, 11692, 55379, 5768, 52995, 11364, 35236, 61898, 12848, 57145,
-26044, 51464, 7724, 41295, 16972, 45322, 15403, 41108, 7843, 50829, 34453,
- 2946, 57276, 30386, 48270, 14300, 25287, 53435, 22029, 63728, 23677, 3890,
-61673, 41263, 21778, 44819, 25697, 6898, 41423, 24374, 44803, 9967, 43077,
- 1859, 46726, 11180, 44628, 4665, 32065, 50050, 17821, 53302, 36630, 6161,
-41718, 16946, 50296, 38677, 14763, 52799, 40111, 18807, 44620, 11534, 39491,
- 4116, 50959, 9776, 21097, 43074, 64895, 16913, 51757, 14492, 45505, 18146,
-43238, 31374, 19926, 52055, 17822, 47017, 6371, 40605, 14194, 61175, 33672,
-23485, 47326, 15758, 31366, 37582, 22956, 57827, 19255, 62335, 26409, 1452,
-61279, 41216, 9240, 63087, 33693, 15278, 31326, 53425, 3380, 24798, 57480,
-19886, 61050, 11939, 25777, 65097, 20619, 48228, 31600, 19328, 47652, 33230,
- 6283, 50407, 27420, 45705, 19955, 38058, 50914, 14191, 40909, 3858, 37762,
-13755, 49311, 32734, 45166, 3039, 24814, 51839, 27761, 12552, 47699, 20582,
-62214, 11061, 52357, 6326, 42842, 10152, 40987, 52670, 29639, 43851, 19432,
-57465, 9562, 49518, 2343, 37496, 27544, 62384, 31358, 159, 65084, 10246,
-53680, 3548, 36477, 30713, 57414, 17385, 60555, 28698, 46245, 5946, 42309,
-31266, 8236, 62804, 3552, 38258, 26004, 47155, 16002, 52869, 3824, 64530,
-34973, 54914, 14720, 60255, 29550, 37053, 21384, 45584, 19169, 43558, 25244,
-38271, 27978, 48058, 1390, 26410, 49694, 20551, 32020, 38120, 25762, 53023,
-15073, 58396, 17466, 51025, 4333, 27140, 53337, 17154, 37723, 27124, 50686,
-20825, 9880, 65192, 29727, 40552, 19659, 50238, 255, 24476, 57195, 4974,
-63439, 29861, 1266, 55255, 32011, 17038, 47487, 30716, 17677, 64305, 40149,
- 2368, 46745, 8551, 51559, 22207, 60366, 6082, 32915, 59252, 1336, 36750,
-14798, 43329, 59432, 33641, 4658, 30242, 39236, 24175, 45261, 15891, 31871,
-51185, 19902, 41104, 31632, 2063, 36576, 22033, 57983, 37556, 3715, 53737,
-20093, 44289, 14569, 27885, 49081, 18876, 41472, 4271, 65056, 36598, 662,
-42915, 16621, 50647, 38920, 19832, 10314, 52443, 2664, 39596, 55465, 15204,
-64826, 17604, 58557, 29878, 37625, 18151, 52836, 19980, 37211, 58189, 8694,
-40157, 2836, 30851, 62019, 12978, 54531, 5118, 28590, 45974, 24164, 7386,
-59020, 1160, 55544, 16265, 64067, 30010, 35302, 56873, 24197, 8937, 40974,
-30742, 59615, 7773, 63761, 35371, 12784, 46425, 450, 41984, 13698, 65206,
-24275, 51779, 1163, 49245, 18039, 36109, 54973, 95, 62781, 8452, 29397,
-43689, 12555, 49423, 37443, 28338, 14574, 48312, 20761, 42193, 56516, 9720,
-40930, 29054, 49583, 14714, 43865, 5122, 52977, 37885, 2927, 43220, 12316,
-58462, 39206, 4122, 52540, 37424, 13981, 41145, 4667, 64481, 25426, 2032,
-62633, 19575, 56809, 22103, 64830, 28105, 9806, 23282, 55177, 35266, 8368,
-58406, 36007, 3185, 53910, 23902, 37713, 26123, 59947, 16066, 56149, 33757,
-20813, 11272, 63090, 3926, 41844, 20960, 34916, 64812, 14548, 52193, 7061,
-49864, 35239, 22948, 32468, 38507, 27684, 52825, 9263, 24857, 48484, 2440,
-52559, 21386, 54771, 20276, 61005, 23594, 40880, 27805, 58430, 8758, 29841,
-61287, 22352, 48790, 25352, 7453, 41665, 31434, 2114, 52168, 8535, 65521,
-13184, 59566, 30168, 3781, 51062, 12524, 36551, 30333, 63874, 16363, 54897,
-13471, 65280, 5493, 32556, 48394, 2352, 37058, 23606, 57017, 38580, 11034,
-47538, 3048, 54958, 8618, 40947, 48248, 24794, 6770, 56944, 11649, 34726,
-61249, 38635, 12426, 46802, 17865, 48924, 23621, 41985, 6067, 60010, 35515,
- 709, 45363, 11227, 31686, 58848, 14993, 32979, 39396, 349, 36697, 28881,
-48453, 18165, 44802, 22433, 50921, 28085, 9087, 20387, 50223, 10069, 58304,
- 2543, 29033, 63952, 37410, 432, 46396, 8565, 52614, 20588, 65098, 33718,
- 5365, 28758, 49699, 29943, 61415, 240, 59174, 32539, 8159, 62689, 12793,
-51738, 20296, 32117, 59321, 13592, 55013, 8363, 30157, 58626, 33727, 27874,
-63910, 17298, 31056, 48385, 881, 49975, 27409, 5686, 63644, 32805, 6692,
-61833, 30391, 15098, 29085, 64153, 23007, 46098, 19269, 42548, 24647, 36398,
-63532, 2293, 57272, 36937, 22512, 41453, 26602, 47134, 24506, 10887, 45419,
- 8, 48386, 28981, 55240, 2473, 23010, 47200, 26692, 3269, 58034, 25288,
-62469, 20609, 55306, 35589, 10843, 29215, 42352, 11844, 54002, 7279, 25995,
-42628, 19638, 51059, 38255, 2761, 53776, 23182, 7599, 51749, 32414, 3193,
-54364, 7320, 26155, 47767, 18779, 44518, 6725, 64227, 26950, 40944, 17721,
-32976, 58986, 16828, 51918, 7484, 26479, 64025, 17811, 31379, 62179, 22944,
-53584, 11673, 48929, 34661, 27175, 45258, 10499, 42261, 5388, 53477, 31634,
-61000, 6263, 49021, 30135, 15343, 50568, 26132, 39712, 7151, 49323, 2478,
-30438, 46209, 23206, 242, 59112, 35566, 24808, 51387, 27562, 59533, 8153,
-25977, 43606, 18926, 46384, 15877, 56624, 6384, 59726, 14342, 47028, 19147,
-63177, 39322, 12018, 42823, 15788, 40357, 12757, 45078, 1213, 51283, 13210,
-47675, 16677, 53821, 37342, 5659, 42431, 13091, 38279, 57078, 17434, 63426,
-39403, 20326, 42784, 18178, 47388, 6750, 35311, 57474, 22125, 61584, 6178,
-53433, 10182, 43454, 4062, 46120, 19503, 50638, 16491, 39636, 27320, 64544,
- 9556, 33218, 20091, 63204, 21983, 42656, 18305, 61612, 29232, 1660, 52760,
-38786, 21194, 47173, 28433, 8477, 20581, 55050, 31008, 40007, 9367, 59368,
-15919, 49947, 26500, 13266, 53811, 23849, 49189, 18574, 37618, 27727, 57557,
-15974, 64947, 12972, 54044, 7201, 57773, 11240, 63018, 5106, 56778, 31752,
-61367, 25656, 35968, 22407, 34157, 50021, 9146, 25119, 54628, 17755, 62946,
-29075, 45864, 10409, 48785, 18660, 62536, 21464, 9694, 34804, 47461, 18440,
-52713, 36940, 21539, 43387, 16441, 46657, 6232, 39391, 28560, 36965, 26000,
-47427, 1186, 45976, 13423, 35654, 50633, 7986, 37814, 33177, 12649, 35337,
-51262, 15580, 48418, 26378, 41440, 621, 51458, 42116, 6939, 49569, 11926,
-56165, 234, 59550, 10663, 20987, 49593, 32879, 17877, 64749, 12890, 54276,
- 6488, 33115, 52712, 18717, 63079, 14966, 43985, 19088, 36666, 56421, 10054,
-39476, 54103, 16034, 43758, 7369, 38499, 30655, 3512, 44537, 57161, 16471,
-63846, 27869, 33922, 60807, 10312, 56142, 31795, 15275, 59608, 17746, 40124,
-64945, 17028, 57975, 40011, 15728, 37972, 65406, 2149, 58824, 13775, 52279,
-34300, 1354, 56911, 29894, 7066, 41486, 24561, 36686, 29968, 45958, 10475,
-43402, 1473, 44499, 9417, 30014, 42283, 18802, 58201, 7344, 30070, 52945,
-17997, 47926, 14892, 43049, 20844, 39227, 19180, 61841, 34532, 5717, 65358,
-14215, 56467, 18105, 63767, 37029, 8459, 51870, 38676, 15552, 47475, 6622,
-37545, 12832, 39717, 30987, 55532, 5038, 61192, 24455, 38766, 12844, 41950,
-24071, 51084, 7690, 43193, 1454, 21728, 56302, 27331, 62307, 4421, 58582,
-17133, 37242, 29151, 57572, 6524, 36295, 32248, 18420, 55805, 19687, 60144,
- 1347, 30515, 46152, 6240, 24359, 58443, 4906, 55210, 34288, 27631, 49509,
-16753, 40918, 15235, 44243, 19241, 40643, 21508, 60134, 11109, 36951, 28357,
-60579, 8519, 54616, 15851, 41917, 52299, 162, 29608, 50057, 12989, 45980,
-35437, 15473, 58395, 33690, 10738, 62599, 3328, 53428, 32087, 45883, 26431,
- 2264, 62130, 21213, 37736, 31225, 11806, 65019, 43012, 21127, 56932, 5128,
-61945, 9828, 52479, 4878, 44260, 20304, 43165, 22965, 41494, 27551, 37756,
-19929, 42958, 12874, 46263, 687, 44409, 62619, 6055, 55776, 18434, 39696,
-60396, 13201, 43828, 23851, 4510, 32800, 56213, 23738, 42515, 7428, 35750,
-56908, 25053, 12084, 43044, 4782, 26033, 59940, 1415, 55261, 24553, 61224,
-12508, 56788, 4894, 62534, 14451, 55882, 23238, 59708, 5229, 24983, 57273,
-16478, 61296, 24327, 56754, 20731, 43752, 11802, 54020, 21488, 56930, 31166,
-16487, 57552, 25522, 38815, 27629, 44451, 16216, 48810, 39702, 27668, 8986,
-51012, 4258, 42640, 20373, 37791, 60059, 3386, 40432, 26065, 51508, 4854,
-60220, 11836, 28063, 50276, 32807, 11076, 49375, 22698, 33598, 48844, 12159,
-51476, 33490, 6893, 31544, 38160, 4492, 45647, 17117, 46860, 35400, 5557,
-49842, 29050, 43060, 5021, 24899, 45357, 11412, 27595, 60176, 19510, 31694,
-36758, 23618, 39598, 31177, 17083, 48257, 13038, 38707, 62418, 10988, 54737,
- 18, 60565, 18941, 54330, 21210, 57982, 24628, 35788, 60149, 3084, 47310,
-13331, 36265, 60572, 715, 38267, 26912, 58280, 2305, 51585, 11427, 43640,
- 323, 46781, 21164, 41162, 28713, 34274, 45720, 11848, 22264, 58258, 27614,
- 9878, 65171, 31515, 54828, 16678, 61817, 1346, 51821, 14020, 42596, 29997,
- 2007, 54147, 34063, 61702, 2870, 33137, 57980, 26874, 54684, 32473, 36333,
- 7920, 31408, 47859, 34530, 27118, 50158, 11214, 39014, 25156, 60518, 200,
-49231, 10867, 44759, 32208, 50888, 13940, 36304, 53027, 33004, 15707, 44739,
-26045, 2458, 62607, 10020, 43071, 9, 51752, 29117, 60685, 2672, 52130,
-34390, 23650, 49060, 1518, 42410, 20894, 34070, 47933, 6351, 25278, 59057,
-40302, 7020, 59711, 31035, 4514, 49742, 31509, 19167, 45318, 26330, 42994,
-17537, 63706, 6259, 58007, 35136, 24256, 52793, 4422, 56282, 34362, 2626,
-36110, 9018, 32238, 41213, 22339, 42537, 19519, 48465, 26169, 55992, 3439,
-61248, 10653, 55375, 1973, 52167, 25936, 38651, 18036, 53248, 14550, 23747,
-47287, 13721, 43517, 3914, 27923, 48532, 7192, 40754, 58782, 18075, 38283,
- 885, 59591, 32420, 51777, 2448, 40220, 65495, 22143, 56364, 39113, 11333,
-42028, 32752, 8945, 31514, 47900, 20790, 45173, 22235, 43680, 34862, 9585,
-40213, 30465, 47225, 20249, 41925, 4007, 44378, 8300, 40392, 2398, 60796,
-35914, 5173, 36664, 9349, 43860, 33986, 4022, 60391, 9995, 30113, 53188,
-23311, 5958, 61504, 43023, 14515, 56322, 15906, 62211, 29651, 11975, 33800,
-57988, 8179, 29700, 42507, 22362, 40175, 65342, 995, 21917, 61374, 36326,
- 4576, 64441, 16514, 59725, 26761, 14575, 62103, 43103, 18955, 52561, 22248,
-57720, 2409, 25174, 64359, 22162, 9117, 60905, 33180, 55727, 677, 34177,
-46321, 5351, 50241, 10406, 54807, 8330, 62083, 3895, 55207, 23037, 60259,
-19506, 31609, 47587, 15855, 42637, 13689, 38664, 5292, 47363, 34745, 6719,
-49367, 14433, 54526, 34009, 23862, 49621, 15698, 31287, 63692, 8781, 33072,
-40143, 25303, 63476, 15903, 57010, 31513, 54637, 10579, 60337, 1296, 24512,
-55119, 42665, 4078, 40700, 49662, 21082, 2699, 28599, 46600, 22102, 44668,
-23325, 48078, 18108, 58630, 40922, 20457, 8522, 27370, 45622, 18606, 37467,
-13393, 41241, 5828, 64062, 19894, 54126, 22555, 9056, 64675, 3332, 59540,
-19958, 50912, 15192, 44232, 20946, 65348, 24370, 8289, 26571, 62726, 22603,
-11565, 61532, 38035, 10492, 50121, 36075, 23427, 53030, 20021, 64828, 25678,
- 8879, 35000, 46818, 30153, 7107, 56266, 14314, 62860, 24595, 51911, 3705,
-23009, 62421, 35646, 9928, 21101, 53899, 34204, 17430, 64719, 36356, 9213,
-60683, 5151, 55298, 13183, 37883, 22650, 41190, 15574, 49538, 8135, 29009,
-44789, 18348, 46191, 22852, 52290, 27835, 62929, 14622, 51129, 1200, 60561,
-35173, 8152, 32724, 38366, 18781, 46728, 24866, 45073, 13742, 64501, 6827,
-58827, 27790, 39900, 8804, 34884, 60017, 20348, 57268, 36699, 19633, 54011,
-33616, 9954, 49545, 15250, 53361, 27728, 12636, 22875, 49070, 29447, 6129,
-48044, 14227, 30787, 54240, 17920, 63455, 28140, 52414, 2054, 40653, 10595,
-51996, 3502, 27618, 65349, 15826, 54572, 1928, 60546, 11572, 53749, 29928,
-64372, 18833, 47209, 25403, 14405, 32326, 63178, 23653, 59369, 14745, 52097,
-22242, 35270, 62705, 3256, 33363, 54886, 18493, 31021, 38245, 25975, 45130,
- 1896, 50061, 21806, 48780, 16430, 37047, 62014, 13036, 53900, 6744, 25504,
-44719, 34977, 7979, 25123, 51886, 28831, 44199, 1421, 40464, 53587, 24148,
- 2658, 58609, 9373, 41918, 13753, 37662, 52114, 14576, 33814, 48316, 23569,
-13600, 39099, 28524, 63495, 20630, 56245, 25492, 43786, 18361, 47271, 26928,
-45601, 11561, 41488, 6267, 46435, 2635, 35535, 64610, 22563, 56439, 25720,
-61665, 13042, 28219, 64879, 20259, 41253, 26030, 8398, 58948, 4955, 34412,
-54879, 20358, 46808, 18727, 59728, 6924, 29105, 48243, 22708, 7845, 26713,
-46053, 20042, 50429, 35625, 8004, 32626, 62604, 13504, 25341, 55881, 32699,
-60589, 7404, 40698, 10569, 64086, 5996, 36715, 9914, 28544, 63620, 31937,
-55291, 10891, 64446, 4877, 59426, 15933, 51598, 26060, 46190, 594, 44120,
-35816, 25371, 45714, 14674, 41383, 5098, 63232, 29685, 38878, 4135, 51620,
-33524, 47857, 4632, 35455, 49225, 616, 27850, 56968, 19440, 59285, 7609,
-29908, 45710, 13788, 38256, 53782, 22890, 11606, 63339, 25997, 39738, 28985,
-37493, 7596, 30197, 57617, 36247, 14431, 50562, 30287, 45063, 26008, 2423,
-48132, 11217, 25180, 51110, 22423, 40485, 23662, 47726, 1300, 50629, 12032,
-43293, 19625, 64558, 38448, 14086, 61387, 6753, 57679, 10960, 47428, 3656,
-44641, 30297, 54484, 14099, 29444, 63813, 17509, 52689, 30652, 5419, 59767,
-16655, 40686, 22092, 47037, 34016, 3126, 49035, 64901, 26776, 1257, 50712,
-32109, 11770, 62416, 1808, 26255, 64304, 30160, 45178, 8738, 40597, 63863,
-36268, 10084, 58562, 20822, 36008, 60792, 2812, 34655, 46059, 5742, 43975,
-16784, 57734, 25972, 64179, 18512, 32960, 49945, 6479, 44677, 26070, 37675,
-22345, 46318, 25594, 13584, 34635, 51543, 10080, 58775, 37419, 52690, 11288,
-49014, 2094, 40630, 32359, 7516, 46567, 15749, 38009, 47975, 11661, 44728,
- 802, 59690, 8374, 32313, 57483, 28481, 39948, 4991, 55695, 32336, 1642,
-45126, 17400, 36612, 58243, 15668, 55791, 30440, 58761, 19225, 9615, 32419,
-57808, 22167, 8404, 47782, 36828, 20108, 49051, 26311, 61727, 31335, 6432,
-42879, 55121, 1614, 35662, 50543, 7879, 47220, 14064, 37844, 12261, 41630,
- 1148, 60731, 34040, 13339, 35710, 63428, 18173, 53602, 28670, 58134, 20682,
- 8354, 48178, 3981, 40807, 19973, 51646, 33808, 9799, 52846, 462, 62024,
-29487, 40129, 21332, 50868, 9597, 41808, 3505, 50498, 13297, 35451, 55308,
- 4233, 42360, 33720, 58783, 3450, 38533, 13749, 61530, 28961, 17002, 37995,
-29648, 45523, 5474, 43687, 13102, 52783, 26551, 54081, 18744, 32121, 56993,
-22614, 50220, 4139, 44711, 16474, 50778, 22758, 48891, 21219, 45127, 30667,
- 9569, 32008, 61323, 16342, 56895, 12340, 30877, 55512, 22693, 47211, 26041,
- 7993, 56591, 31305, 15765, 58966, 14466, 30343, 58054, 16488, 32438, 46599,
- 5480, 39420, 13446, 47350, 34194, 3235, 58695, 32105, 5344, 57831, 37186,
-17158, 51139, 3519, 58586, 12761, 55650, 39089, 11764, 46047, 28909, 1840,
-56676, 13385, 62212, 36067, 18655, 56036, 43102, 630, 56505, 17195, 64107,
-15058, 57561, 28702, 60899, 4028, 53825, 33359, 471, 48796, 24964, 40692,
-28476, 38147, 17896, 58712, 26621, 11683, 38004, 24215, 47822, 2205, 42203,
- 9121, 62441, 35296, 20846, 50345, 4272, 53725, 10285, 29329, 54674, 21281,
-16930, 52651, 30271, 37188, 6437, 46507, 16518, 38994, 52122, 21483, 3320,
-35577, 60582, 20200, 4019, 52803, 18995, 33471, 44704, 9058, 24610, 49324,
-10600, 26963, 58837, 21991, 37469, 13108, 42579, 6962, 36887, 53835, 14887,
-41760, 18210, 62048, 12474, 52294, 5876, 40701, 58005, 296, 27312, 42861,
-22684, 3125, 26515, 45447, 18704, 30046, 54333, 17313, 64494, 23848, 55553,
- 9308, 25215, 65188, 20160, 53007, 35671, 23241, 47021, 18848, 9681, 63447,
-24962, 41826, 14820, 51014, 20413, 61154, 27145, 4047, 48954, 11446, 42137,
- 2154, 46393, 23927, 50809, 13657, 35629, 61011, 28032, 12949, 65038, 29715,
- 791, 44944, 12313, 57007, 28559, 10955, 31589, 62989, 19424, 57338, 22929,
-53484, 4365, 61757, 22617, 52091, 28396, 5555, 50502, 24310, 532, 42553,
-33432, 8963, 25292, 51828, 33971, 28129, 53227, 16839, 43241, 2429, 45292,
-23046, 35939, 46925, 17408, 43777, 12065, 65460, 25529, 45511, 16203, 62757,
-34168, 26840, 44785, 15198, 30423, 60630, 11218, 37337, 23411, 54087, 31244,
- 4928, 42991, 57919, 816, 54296, 11512, 63452, 23598, 38881, 20170, 43170,
- 3623, 38293, 48836, 456, 43067, 13517, 56056, 23759, 40166, 877, 36567,
-11711, 38567, 2218, 60182, 19397, 50080, 22191, 41133, 5503, 49257, 36775,
- 1641, 43430, 9843, 52734, 37204, 18040, 49638, 41441, 1875, 39818, 54358,
- 9197, 40545, 65000, 18341, 53997, 25580, 63707, 21183, 55949, 27336, 41150,
-18582, 48230, 27974, 1040, 45931, 21731, 43429, 18702, 46620, 33050, 20278,
-63785, 5387, 59861, 35021, 22694, 43561, 5759, 50929, 29721, 8063, 32007,
-38201, 12585, 46132, 7520, 43734, 33723, 16551, 35056, 45873, 22247, 11488,
-51887, 30721, 9847, 54777, 1804, 63945, 32860, 7518, 35614, 55625, 5680,
-43818, 12467, 58521, 25185, 49078, 15268, 43796, 31604, 11792, 62120, 23454,
-36522, 61053, 12647, 43099, 38864, 7933, 44542, 16084, 61152, 22832, 56497,
-28276, 12126, 42988, 57856, 13957, 24991, 48488, 34084, 26584, 43874, 1207,
-62810, 28895, 54678, 17410, 64686, 38325, 13705, 47228, 4184, 61477, 23029,
-54874, 28108, 43, 59928, 24250, 48905, 4327, 42088, 16326, 63465, 33139,
-17771, 38763, 62231, 7298, 54582, 31477, 65124, 7928, 37993, 61658, 5529,
-48695, 36115, 1316, 41391, 29060, 49517, 4547, 39960, 31870, 13743, 62970,
- 5682, 51629, 34836, 20022, 52438, 9038, 64411, 28781, 38911, 8553, 52027,
-39705, 21181, 45397, 18103, 63599, 33804, 55253, 5585, 31299, 44701, 3960,
-38207, 52954, 6213, 40740, 55358, 21697, 34304, 40524, 17861, 58770, 41320,
-12622, 43836, 3112, 41069, 18419, 44951, 17238, 47750, 11263, 38562, 56808,
-16317, 59283, 29410, 55479, 12312, 62630, 40665, 4755, 45194, 12783, 35874,
-62891, 11054, 57093, 14802, 61066, 6123, 31133, 57429, 4292, 55345, 37366,
- 1807, 29207, 51868, 23102, 10270, 57538, 1184, 64911, 38249, 19028, 51888,
-16443, 64057, 8776, 41168, 52467, 15407, 33474, 48034, 20451, 40534, 19044,
-50757, 1811, 57646, 16310, 62173, 25092, 14442, 60427, 32447, 47820, 30366,
- 7767, 62748, 26441, 57424, 28298, 53440, 23924, 41654, 33274, 4056, 54515,
-13994, 63522, 10776, 26916, 62122, 19271, 58239, 32275, 2778, 59809, 10170,
-26480, 63582, 23614, 17616, 47528, 26201, 6513, 43160, 11977, 42163, 1472,
-43535, 11207, 50423, 7280, 63999, 10372, 39897, 61825, 12388, 55016, 6568,
-65032, 26822, 442, 51370, 16428, 42184, 17736, 47853, 11466, 30764, 57960,
-19759, 41044, 63547, 16578, 60363, 27867, 34327, 53414, 26440, 4674, 54584,
- 9989, 26342, 59692, 40939, 17072, 62867, 36657, 19447, 43266, 20830, 46343,
-24884, 49486, 16593, 65452, 19498, 53703, 30223, 13748, 34543, 56336, 513,
-57987, 37908, 18578, 44316, 1539, 27207, 49983, 4508, 24498, 63165, 22346,
-53791, 10875, 43276, 4345, 47794, 34499, 8054, 23402, 50624, 39418, 6555,
-54543, 10745, 57614, 31679, 15984, 41942, 4586, 45307, 32179, 569, 55561,
-24883, 51548, 19774, 44681, 12093, 47095, 30663, 38970, 9118, 34602, 57608,
-21423, 49450, 27784, 10585, 55057, 29738, 12669, 46639, 17130, 41920, 14870,
-50596, 33500, 20396, 43518, 26704, 13287, 57830, 17725, 61302, 15271, 30275,
-58765, 7638, 50726, 29299, 41236, 22494, 59925, 420, 44242, 31295, 21648,
- 3709, 59356, 30984, 16067, 32668, 62406, 6134, 49978, 26425, 8817, 20343,
-38791, 64169, 18352, 56417, 15769, 25365, 49578, 16675, 32821, 8490, 63424,
- 3352, 49263, 29813, 5690, 54090, 27371, 61162, 10794, 55397, 29965, 36935,
- 7005, 63959, 20435, 31613, 48171, 8095, 37154, 21298, 50876, 31517, 17018,
-59852, 23597, 55758, 934, 25060, 46535, 30109, 40114, 23962, 49764, 15571,
-34845, 45962, 23707, 13449, 35367, 60705, 6487, 36029, 47741, 20724, 49996,
-32733, 9276, 46768, 2125, 44531, 25696, 48988, 17754, 29760, 64989, 9268,
-28217, 56244, 6608, 59806, 15236, 37356, 27745, 45162, 11751, 36376, 52470,
-27233, 8654, 19876, 59104, 38088, 14359, 43702, 9101, 46824, 6447, 65435,
-12476, 56681, 37167, 18563, 43491, 21413, 38992, 51783, 13037, 30310, 38167,
-17059, 48144, 21783, 34629, 46076, 6749, 37598, 52654, 2914, 36994, 56328,
-22128, 60903, 19017, 52739, 16942, 62256, 19868, 36732, 24812, 54410, 15748,
-32944, 41901, 25480, 37960, 10082, 52426, 41520, 10744, 48486, 31239, 55277,
- 7407, 65420, 38730, 15048, 46350, 3539, 33888, 48886, 6310, 51915, 2786,
-21968, 62360, 36435, 18760, 65264, 36150, 5861, 29551, 46880, 3546, 25927,
-60186, 15464, 55974, 12568, 61730, 149, 40442, 27948, 46128, 3298, 40036,
-63094, 6434, 28955, 45701, 24454, 7806, 48456, 13273, 59113, 39837, 19073,
-57494, 41781, 12255, 47969, 2853, 38286, 25647, 65322, 18049, 54944, 29471,
-63380, 317, 28362, 61874, 22426, 42591, 19976, 38257, 53593, 12486, 60446,
-35833, 15118, 48033, 18270, 41579, 11507, 39671, 2687, 63030, 15674, 55514,
-19287, 60967, 27224, 11244, 54008, 1499, 35390, 45841, 4545, 48699, 21334,
-35463, 60056, 5299, 55885, 27530, 932, 58310, 11872, 53552, 34512, 30372,
-45913, 7240, 33613, 52194, 18225, 45751, 26183, 2763, 55760, 10274, 38175,
-32065, 12563, 54826, 36923, 49924, 14384, 41982, 55328, 623, 36593, 30181,
-14535, 54346, 32288, 59900, 29028, 246, 50355, 10547, 34224, 62687, 11591,
-38672, 60213, 22921, 42206, 32125, 16245, 65491, 23891, 37170, 15370, 30741,
-46671, 24601, 1729, 57776, 33255, 14325, 50963, 2407, 40030, 27061, 64439,
- 5987, 39213, 1923, 48521, 34933, 9305, 39109, 30955, 50095, 21204, 4596,
-53656, 11780, 36264, 64128, 8894, 20995, 53090, 28700, 46737, 15385, 31886,
-54108, 4453, 42514, 12047, 25057, 54501, 22036, 59419, 35046, 5966, 32643,
-58553, 1731, 38957, 23670, 46034, 16762, 44323, 30792, 48419, 9553, 64692,
- 6241, 54581, 29286, 4493, 41457, 65268, 35969, 2551, 29366, 54528, 19004,
-61058, 35711, 21843, 32565, 49535, 7637, 29201, 60700, 1982, 57383, 31409,
- 6118, 42055, 56065, 4889, 64269, 8826, 29971, 61837, 13837, 57136, 27482,
-11762, 60275, 30092, 9919, 50425, 3453, 36305, 29292, 38046, 5149, 32388,
-49343, 1916, 42592, 30335, 4511, 59646, 13998, 56852, 31098, 15519, 34075,
-61642, 21899, 3274, 26596, 45374, 23273, 852, 54751, 28503, 58729, 14094,
-24154, 42162, 18988, 59416, 39273, 8887, 44602, 30888, 1884, 48107, 21029,
-58267, 15038, 54470, 42705, 7263, 50640, 4828, 33596, 38808, 23336, 50938,
- 8755, 34843, 52152, 11139, 36390, 23208, 49729, 16233, 40306, 65203, 26388,
-51929, 32157, 7154, 46084, 14871
diff --git a/src/main/ran.367.179.h b/src/main/ran.367.179.h
deleted file mode 100644
index 4b1cbe2..0000000
--- a/src/main/ran.367.179.h
+++ /dev/null
@@ -1,5995 +0,0 @@
-/*
- * "$Id: ran.367.179.h,v 1.2 2001/02/25 01:58:35 rlk Exp $"
- *
- * 2:1 square dither matrix file for the gimp-print plugin.
- *
- * Copyright 1997-2000 Thomas Tonino
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
- 0, 48162, 37632, 16984, 50697, 28820, 7846, 64425, 37420, 20029, 52759,
-13180, 46778, 30985, 650, 57324, 27274, 16466, 55035, 36671, 6899, 45453,
-23687, 52437, 2894, 41412, 21422, 32368, 53581, 4740, 28409, 48442, 20251,
-65473, 2200, 41936, 21113, 35749, 60467, 12638, 31852, 47394, 16110, 58501,
-24933, 39633, 2370, 47114, 26386, 56222, 6571, 42820, 26950, 59825, 13893,
-48999, 25626, 42799, 1401, 46564, 22992, 61232, 5177, 33693, 51857, 13638,
-45589, 20439, 55050, 12218, 37036, 62085, 16469, 32129, 45722, 872, 56381,
-28780, 9713, 50928, 36419, 19167, 52421, 10975, 34366, 57497, 1607, 45333,
-26565, 64216, 5169, 29190, 59891, 13832, 42288, 22116, 63796, 17024, 41882,
- 1964, 34588, 48605, 7763, 61394, 34351, 1207, 55279, 26342, 43616, 5905,
-38763, 26997, 47269, 760, 29261, 60565, 19508, 44479, 4188, 36873, 46092,
-19172, 50462, 13328, 35734, 59826, 6496, 41515, 21959, 60729, 16445, 38191,
-48710, 13699, 31885, 59911, 17353, 43525, 31627, 10371, 63694, 37856, 18135,
-51444, 34092, 14183, 57337, 28295, 9933, 49344, 38472, 17310, 36846, 61146,
- 8053, 33270, 51595, 18183, 44347, 7058, 37713, 65031, 1631, 34365, 57760,
- 6687, 40788, 26111, 49203, 338, 29345, 55342, 16108, 39960, 22744, 48327,
- 3267, 59633, 25552, 50992, 4664, 60484, 10318, 36566, 46886, 20370, 57296,
-12184, 39472, 21598, 51114, 14062, 58877, 23858, 42810, 2143, 29902, 62155,
-18133, 42050, 21843, 37778, 50876, 1649, 28030, 43799, 6812, 55878, 37207,
-12604, 42815, 25325, 60204, 10204, 41238, 22827, 64898, 15635, 35752, 46093,
-12084, 42410, 4827, 54259, 22726, 31764, 59819, 9655, 37042, 61138, 19636,
-53496, 5629, 40837, 23307, 58268, 14597, 41757, 5147, 62189, 23296, 40948,
- 1734, 60879, 32569, 13862, 52146, 26473, 44478, 9175, 61428, 31186, 4515,
-58753, 11148, 40005, 25720, 55379, 14216, 42181, 22831, 52587, 7789, 44280,
-23791, 55077, 8758, 32795, 47900, 18901, 65222, 35482, 7538, 51357, 16473,
-29592, 63012, 6321, 43066, 14822, 60968, 25114, 47483, 6637, 50417, 20808,
-29805, 56984, 8743, 44256, 31053, 17818, 63112, 21833, 42616, 6122, 31273,
-65012, 12133, 40370, 24514, 60241, 2474, 51151, 11373, 40750, 23561, 57134,
-14949, 30629, 43944, 4863, 56646, 33343, 7597, 45488, 20327, 56009, 32152,
-12179, 44218, 6413, 57522, 21470, 35341, 63464, 14989, 47411, 20572, 60580,
- 8795, 43257, 14608, 47028, 25654, 53094, 10388, 31994, 43399, 15997, 54158,
-27814, 206, 63320, 31461, 17067, 36938, 51682, 10914, 45780, 34436, 2290,
-61944, 24200, 43270, 14803, 49656, 27742, 1024, 54514, 29206, 7126, 62422,
-37738, 15446, 57512, 28047, 60586, 11076, 30232, 58839, 4195, 43834, 25281,
-53940, 2274, 31992, 42893, 9065, 61200, 25249, 45237, 13695, 35288, 63897,
- 4139, 41872, 25060, 58807, 13308, 32833, 60727, 17764, 44427, 10482, 63415,
-18523, 35952, 56714, 9429, 32956, 52207, 18244, 44765, 8034, 51477, 28801,
- 943, 62161, 34758, 7733, 52013, 18077, 63578, 37615, 13137, 32299, 53546,
-20761, 47561, 3325, 39187, 23521, 55836, 11717, 33392, 59240, 14408, 36570,
-49643, 16902, 29761, 62693, 18, 41870, 24806, 52451, 4247, 28613, 48603,
- 7638, 59371, 25539, 39998, 14690, 64436, 22184, 44855, 2397, 31253, 63252,
-16204, 48816, 23748, 38689, 9122, 50777, 18427, 34018, 53026, 2763, 47476,
-32572, 6185, 50177, 26250, 60762, 14233, 28174, 44812, 16573, 50642, 23067,
-39712, 13417, 63459, 20875, 49601, 11618, 58731, 21901, 38747, 8443, 52870,
-32213, 22643, 62330, 9638, 30700, 57032, 5340, 43959, 28499, 18732, 55082,
-34861, 8704, 51165, 29798, 4078, 64529, 27564, 8250, 51538, 37450, 3178,
-54183, 27186, 7592, 48596, 30406, 4406, 53099, 19500, 38100, 63220, 13502,
-27146, 55724, 2190, 29034, 46241, 21515, 63571, 10225, 31164, 56329, 15389,
-27299, 50510, 11307, 46635, 22319, 61325, 13696, 31832, 56998, 18159, 46456,
- 5067, 31953, 60967, 10425, 45214, 29407, 13957, 38075, 44395, 17230, 29530,
-55179, 12, 42693, 25622, 49180, 5022, 64151, 26912, 38643, 9398, 48133,
-17186, 55176, 35536, 12428, 49827, 4213, 59466, 27366, 13810, 63880, 36194,
-19691, 52605, 15588, 27992, 58060, 917, 49072, 17754, 37077, 55518, 3257,
-31185, 48451, 8904, 57203, 28500, 18129, 51710, 37861, 15482, 56042, 2345,
-42644, 24644, 47982, 12689, 39362, 26545, 62998, 9433, 31560, 52831, 19015,
-46480, 33326, 7541, 54390, 24758, 45964, 10441, 40947, 22539, 59386, 547,
-39652, 24588, 54657, 14839, 35953, 46388, 18705, 51270, 6662, 34246, 63186,
- 3297, 39644, 26455, 61164, 12732, 38702, 26995, 58961, 4088, 28643, 53505,
-12993, 41951, 24150, 57353, 9, 45412, 33395, 17936, 56138, 38077, 9911,
-33546, 43021, 16358, 62312, 784, 40117, 24162, 55118, 12987, 39526, 2153,
-49602, 24494, 56865, 16391, 43534, 23411, 55851, 7811, 31809, 42636, 18973,
-61898, 31378, 4459, 49874, 36592, 8757, 63332, 24882, 48088, 14387, 39910,
-24099, 61718, 1118, 40866, 25547, 60801, 16604, 29797, 54144, 44, 43317,
-29595, 7054, 41190, 25047, 56341, 17125, 33783, 64512, 866, 39495, 21950,
-60857, 4239, 29966, 58863, 11726, 46829, 24696, 40941, 5879, 60160, 19236,
-30570, 57265, 13306, 47882, 21869, 39177, 8098, 60610, 34329, 17228, 57232,
-37240, 11384, 48608, 31281, 4484, 50290, 19405, 36225, 25117, 53647, 15814,
-39309, 20756, 62581, 9676, 35610, 49340, 16763, 55609, 23787, 39363, 6522,
-58058, 22526, 50315, 10662, 30503, 53829, 18309, 48515, 1041, 39687, 22739,
-55808, 5755, 47338, 24617, 40611, 61, 45421, 22541, 58802, 6290, 30368,
-61779, 15143, 39360, 24439, 54974, 13703, 45027, 21581, 31106, 46406, 6044,
-28630, 58818, 327, 40088, 15368, 64041, 30622, 19295, 58340, 5844, 50082,
-22039, 40541, 3786, 54392, 27433, 6859, 47712, 35352, 21365, 57905, 8560,
-35127, 64835, 15167, 42899, 33515, 11203, 54457, 20173, 48071, 6597, 32839,
-58367, 12187, 47001, 22762, 41290, 4615, 59465, 14779, 44265, 24392, 56415,
- 7830, 39465, 23536, 57508, 13284, 38973, 20403, 54414, 9010, 36813, 58272,
- 4120, 32592, 65127, 10086, 47082, 30627, 3052, 52967, 25880, 44670, 6781,
-41266, 25077, 64636, 14270, 49801, 1875, 34286, 53584, 16584, 41405, 24177,
-61521, 12137, 45517, 26, 63526, 24854, 40334, 10428, 54466, 19413, 34207,
-44386, 14107, 62497, 28391, 16839, 38325, 59018, 12325, 35069, 64817, 23387,
-46714, 1205, 31411, 50581, 7558, 35123, 48248, 16189, 56703, 5101, 40722,
-25224, 49119, 2875, 33438, 60658, 17196, 44056, 30228, 4069, 36213, 52609,
- 8257, 43071, 24073, 64878, 12734, 41830, 20913, 36436, 57660, 1344, 34863,
-64423, 7535, 49519, 33859, 19181, 62482, 28290, 8469, 35355, 54756, 18671,
-42473, 1291, 53468, 25068, 39920, 6045, 64694, 23281, 45070, 16155, 36358,
-54721, 7539, 46950, 30144, 3448, 37834, 60505, 9309, 45242, 33298, 20859,
-62847, 7783, 29066, 44538, 16368, 60740, 24994, 39747, 303, 63146, 31150,
- 6621, 48044, 19935, 34262, 64003, 8043, 30838, 57348, 3494, 48957, 17843,
-34524, 44733, 220, 65057, 27998, 11258, 59085, 38367, 15035, 29817, 64087,
- 4961, 48600, 17072, 29763, 52723, 10208, 42648, 22899, 65525, 2478, 30451,
-57916, 21178, 44974, 11926, 30803, 57063, 17965, 42813, 1857, 48465, 20156,
-52043, 14454, 33828, 45819, 5883, 61714, 15976, 40025, 25613, 55162, 8941,
-49996, 27976, 3522, 59783, 29838, 11778, 51122, 22769, 31780, 58968, 5514,
-45686, 26934, 61364, 14634, 35430, 52532, 9832, 30391, 59281, 1176, 34589,
-46154, 14979, 53781, 28078, 9385, 48072, 24716, 57852, 15619, 40612, 21389,
-53483, 2679, 34178, 53959, 10609, 46699, 30963, 19464, 52386, 5158, 45937,
-37903, 10447, 49921, 22487, 61936, 12450, 52136, 36829, 3729, 49784, 30156,
- 9612, 55095, 26330, 45598, 13532, 51953, 37324, 7437, 42523, 20013, 56105,
-13727, 48505, 26480, 43946, 1336, 41257, 25436, 64342, 5459, 50662, 18268,
-30431, 52712, 3252, 43830, 22392, 59065, 14788, 40533, 24467, 65528, 8856,
-42939, 2745, 34740, 49432, 6138, 42824, 24025, 56409, 14856, 28175, 42001,
- 3976, 65198, 18872, 47405, 33532, 2768, 40983, 21140, 62163, 7332, 34667,
-45022, 16641, 64768, 31354, 11201, 51473, 36725, 15091, 61456, 26044, 54702,
-12464, 38954, 26731, 47817, 2505, 53125, 21846, 41880, 10188, 64995, 36009,
- 3530, 51096, 19128, 56565, 36946, 11945, 50009, 24561, 44555, 8484, 52995,
-38308, 10771, 31710, 45725, 15287, 64615, 30937, 9901, 60281, 37203, 18977,
-56097, 10509, 31954, 51282, 17416, 27883, 49199, 1810, 60440, 23170, 41487,
- 3466, 61704, 26345, 40841, 16614, 50477, 36146, 7896, 54534, 26922, 39583,
-19982, 61332, 1111, 42076, 26969, 64935, 10715, 43824, 25389, 62549, 632,
-43013, 23224, 48890, 15072, 28808, 54817, 19878, 42620, 7416, 56240, 36218,
-14675, 61986, 18854, 34648, 57068, 4592, 45651, 18125, 39255, 26691, 60248,
- 9019, 47019, 29078, 3140, 51878, 38303, 19602, 33899, 47124, 13138, 56795,
-23286, 42382, 1924, 58620, 25234, 49618, 6289, 33666, 56858, 494, 45990,
-21823, 40650, 5566, 56048, 15311, 37235, 60726, 18611, 27501, 58764, 10452,
-42645, 19478, 32411, 59946, 12660, 37088, 54944, 19844, 41700, 6338, 53795,
-23659, 62933, 15163, 41355, 21445, 59367, 2717, 38786, 26888, 54262, 6260,
-48752, 18749, 28308, 52076, 15006, 27141, 56166, 4400, 45460, 12820, 38031,
-57686, 15549, 32048, 46850, 11215, 60774, 19532, 33240, 57145, 11864, 46768,
-29524, 388, 58488, 31239, 21168, 42283, 11499, 61978, 25987, 49401, 14547,
-29666, 54315, 4569, 42400, 24756, 53048, 13276, 47624, 33425, 5689, 52489,
-19503, 46764, 35084, 13855, 59088, 25275, 50875, 10302, 40437, 22164, 52339,
-15181, 41734, 26099, 61330, 8737, 51245, 24149, 39939, 13511, 50501, 34871,
- 2913, 56091, 21164, 33702, 43477, 8720, 57748, 37470, 18622, 61559, 5818,
-35004, 48827, 17345, 44094, 8455, 35163, 60755, 17115, 46535, 5627, 51569,
-21454, 30718, 64393, 7113, 39365, 23080, 60449, 10565, 38929, 26338, 49501,
- 3035, 64481, 19712, 32215, 43796, 13375, 52770, 21114, 35334, 65159, 6029,
-44562, 14787, 52556, 21143, 38734, 7569, 48031, 26170, 42172, 3844, 63529,
-21481, 39564, 13195, 48936, 22758, 58681, 3300, 34014, 65474, 19640, 44439,
- 306, 35036, 61025, 7873, 29820, 46187, 17318, 64382, 27710, 3879, 58359,
-36548, 13124, 65269, 27865, 17392, 58721, 34220, 5996, 45304, 31530, 18025,
-59433, 27675, 11162, 57992, 35367, 18108, 41682, 6434, 61499, 33331, 16405,
-49832, 24018, 64916, 2718, 38922, 21884, 62181, 9873, 54700, 23541, 38557,
-14016, 42671, 26344, 59857, 9876, 40278, 24505, 63432, 7692, 33565, 52017,
- 1665, 45729, 33275, 20517, 56317, 44058, 22707, 63752, 13116, 32551, 51621,
- 1266, 37582, 60688, 8648, 45732, 30234, 11564, 51100, 26318, 60133, 12535,
-42880, 24173, 55631, 14251, 28397, 50838, 5066, 42457, 24182, 57603, 3311,
-30102, 43259, 7104, 50236, 23367, 41510, 9684, 63778, 19623, 31705, 57057,
- 5028, 45855, 29498, 20183, 59408, 15077, 43693, 27494, 7237, 62875, 31592,
-17578, 59682, 34023, 2614, 27653, 62474, 20086, 54009, 770, 39370, 25134,
-45128, 16015, 50397, 2163, 40425, 25769, 61598, 4781, 37895, 55420, 9619,
-43833, 26410, 38885, 12589, 53141, 30636, 8755, 57320, 28129, 385, 65110,
-29790, 18526, 56761, 10267, 47317, 25697, 38565, 14278, 53290, 20738, 47024,
- 5345, 33037, 51583, 16729, 29295, 61561, 6629, 37702, 51216, 2123, 40592,
-24199, 59943, 17131, 29040, 50146, 307, 43443, 30572, 13060, 48597, 25888,
-59046, 7792, 42966, 22253, 54894, 15613, 36106, 63141, 10896, 30040, 57673,
- 4493, 27445, 51480, 6954, 30891, 61679, 20105, 39483, 12374, 46348, 22169,
-52527, 16037, 42073, 25464, 61858, 11980, 51231, 20939, 29238, 45556, 9535,
-38426, 53356, 3730, 30715, 65241, 22558, 44966, 100, 50103, 27637, 8624,
-63992, 35229, 14561, 48506, 38135, 1166, 31434, 56300, 7544, 45236, 25241,
-50603, 14894, 31296, 63158, 12118, 46162, 33975, 8813, 61491, 38199, 16476,
-30028, 60104, 20736, 48747, 2762, 29509, 65227, 6377, 40965, 24508, 50086,
- 3545, 43364, 28005, 17703, 61277, 37951, 14504, 52973, 6248, 45759, 24462,
-52120, 2317, 41024, 22189, 65006, 12050, 31408, 58615, 18480, 40261, 1620,
-64196, 22648, 42897, 14555, 61625, 27556, 9788, 54628, 37424, 4004, 43679,
-23979, 60450, 1306, 32260, 58023, 6853, 47233, 16747, 38498, 20970, 58763,
- 4568, 55462, 29358, 17999, 48884, 36952, 10859, 60655, 19552, 46953, 27565,
- 3518, 50147, 31670, 22113, 53244, 11559, 29768, 56028, 23271, 50643, 275,
-39244, 26175, 62410, 10076, 35491, 55614, 15384, 42025, 25197, 56493, 997,
-46494, 18195, 55574, 31299, 11715, 37277, 46846, 5103, 58456, 24306, 39752,
- 1253, 54977, 16914, 39492, 26495, 56746, 2510, 41679, 25317, 64078, 11357,
-54704, 19070, 31620, 50815, 8192, 44817, 26009, 61694, 9057, 38915, 25534,
-52524, 6324, 37865, 55658, 13100, 28387, 47329, 18962, 55183, 9871, 35025,
-41806, 15390, 50729, 22729, 44807, 8121, 32847, 49472, 2753, 41942, 24905,
-50739, 16290, 64038, 1353, 35642, 48504, 20779, 43950, 3195, 62854, 22817,
-47681, 28512, 1745, 58420, 36700, 10927, 45917, 26776, 53200, 8106, 34655,
-44659, 18906, 49811, 4772, 58049, 20874, 46802, 380, 33764, 55016, 18684,
-42012, 12781, 54334, 19823, 30189, 50002, 6783, 61044, 14242, 54085, 7977,
-39814, 26416, 57250, 10472, 47164, 19714, 27243, 54239, 15908, 36833, 56923,
- 302, 39109, 20168, 53321, 6069, 36693, 48869, 1664, 59313, 20654, 37052,
-61825, 8514, 33450, 48189, 21258, 64340, 13603, 35347, 59114, 3973, 46009,
-28007, 11093, 50618, 36444, 17777, 60693, 8435, 33568, 49392, 1566, 37398,
-54747, 20959, 40497, 4301, 50639, 13726, 38011, 55427, 16560, 34991, 44034,
- 9353, 51036, 23109, 58893, 6306, 31828, 63439, 20423, 46799, 13461, 34385,
-48192, 16633, 29809, 59926, 20366, 46136, 5959, 64005, 21296, 34253, 45916,
-14446, 51519, 33531, 12889, 48143, 38003, 3738, 32721, 63091, 6955, 51174,
-31103, 3106, 60251, 35376, 18616, 58627, 9992, 45712, 35227, 12921, 55468,
-31731, 18215, 56990, 12445, 37440, 48038, 5278, 33376, 64026, 11377, 55455,
-23392, 39774, 3640, 51456, 19177, 35331, 65529, 992, 30338, 50996, 6773,
-40306, 24750, 49880, 15061, 38087, 64157, 17412, 35654, 45049, 11011, 53632,
-28722, 3592, 65317, 35853, 8420, 59646, 31058, 4249, 49011, 38020, 7900,
-33698, 55069, 2508, 62809, 27068, 16455, 49089, 37163, 6761, 52342, 15626,
-35113, 61540, 17734, 43455, 30596, 3202, 58881, 20699, 27914, 51705, 12099,
-39474, 22972, 61760, 10570, 34622, 57230, 622, 42198, 23758, 59054, 3974,
-40254, 21284, 53613, 1833, 34568, 50579, 7906, 41093, 25797, 51881, 16910,
-37316, 56338, 13738, 31590, 62857, 10120, 53615, 35156, 5359, 48040, 19972,
-32691, 63558, 10697, 39213, 18182, 56927, 34721, 8526, 44796, 26526, 49973,
- 6510, 37029, 56813, 15264, 31579, 53874, 8691, 36063, 49861, 2747, 45652,
-29998, 20650, 64699, 12437, 46835, 35765, 18567, 51644, 13750, 39938, 26990,
-64232, 2251, 42538, 25248, 46707, 14435, 40802, 6110, 63375, 22141, 39364,
- 910, 53182, 32966, 15718, 63777, 36569, 12809, 58455, 1509, 36210, 62787,
- 6437, 41254, 18882, 33332, 56689, 13169, 43137, 22830, 49398, 2677, 32402,
-53421, 12254, 44661, 35927, 20866, 62724, 6585, 43119, 23553, 60125, 16999,
-29411, 49300, 11012, 63390, 19129, 32219, 47703, 8188, 61102, 18915, 35487,
-46447, 6731, 49386, 23212, 38563, 176, 59652, 17245, 36526, 53646, 4894,
-32479, 56419, 17881, 42175, 11106, 49242, 29975, 16913, 59749, 36125, 5091,
-62856, 26326, 44696, 1710, 58981, 28563, 6890, 54858, 34401, 20586, 56518,
-13684, 62182, 21362, 38865, 6746, 53878, 24071, 40917, 14105, 57466, 28197,
- 9165, 54499, 36287, 12068, 52854, 19504, 44504, 32364, 5972, 55673, 20551,
-42090, 14416, 59059, 30023, 3857, 61261, 22838, 39919, 11893, 35896, 63834,
-15938, 28490, 47595, 5662, 61505, 25582, 38829, 3953, 59524, 26182, 41484,
-17332, 30015, 45067, 21726, 60193, 4636, 30805, 43250, 14217, 63267, 35078,
- 5121, 49150, 28379, 9331, 64103, 25118, 43544, 14873, 62504, 31316, 16244,
-45822, 29514, 11447, 51908, 18809, 28358, 55141, 14520, 39855, 1455, 52415,
-20546, 30767, 53853, 15983, 33575, 62687, 687, 40883, 23529, 52719, 13903,
-39943, 25176, 58170, 11696, 28348, 60976, 15927, 44083, 23412, 65179, 8725,
-30134, 48570, 5076, 61460, 29029, 18639, 42326, 11188, 53652, 24536, 41154,
- 3525, 56801, 28802, 7931, 65517, 36882, 1003, 50496, 13230, 35332, 56274,
-17567, 41932, 2025, 62190, 24336, 40081, 5380, 60581, 24045, 53338, 15989,
-41636, 22249, 45727, 13159, 56014, 23152, 41632, 7553, 50473, 24856, 39683,
- 2443, 64493, 20985, 46513, 4603, 41974, 25758, 63304, 9751, 28322, 54103,
-15168, 42244, 26080, 46335, 7220, 61671, 31851, 15851, 57514, 27823, 10250,
-47743, 37885, 13234, 61027, 21697, 43463, 2272, 59117, 32447, 7993, 28204,
-54593, 875, 48501, 18445, 33108, 55910, 13497, 45463, 24730, 39555, 15423,
-57581, 19620, 28178, 64364, 13777, 42771, 19441, 36521, 46304, 11405, 54578,
-27993, 18397, 38078, 57469, 4303, 29726, 47880, 9714, 53611, 19047, 36691,
-55561, 9131, 33143, 64519, 18472, 44373, 4858, 53059, 28612, 16864, 38328,
-54855, 9878, 30474, 51115, 13475, 43023, 24010, 63837, 11224, 39581, 22849,
-61744, 12422, 33797, 58323, 832, 28382, 48612, 7624, 44644, 23121, 40212,
-15073, 58053, 26337, 51009, 1434, 41236, 25155, 59224, 5149, 30956, 48231,
-19251, 59853, 534, 33092, 62557, 17123, 27894, 49184, 4381, 41045, 24837,
-59740, 12802, 31824, 56560, 18037, 40852, 7142, 55426, 29491, 4699, 62443,
-24373, 43271, 5756, 54317, 20334, 31971, 49993, 8204, 61741, 22977, 32714,
-51688, 11875, 42781, 25438, 57118, 9754, 45475, 29318, 6256, 55054, 38370,
-19834, 28726, 47963, 15897, 43596, 24307, 59714, 8182, 46987, 30413, 4784,
-58293, 36315, 19343, 63518, 8324, 29605, 59070, 3848, 32111, 50237, 15554,
-35906, 48167, 2058, 54396, 34125, 7186, 44843, 25717, 53364, 3966, 41710,
-23317, 50017, 10494, 29664, 57629, 15728, 32605, 62217, 13407, 44005, 23707,
-48433, 11750, 27905, 64839, 20016, 44065, 1518, 34534, 62569, 21551, 54288,
- 3054, 41131, 20781, 51072, 11797, 38675, 23267, 52570, 13949, 36964, 61305,
-18230, 47431, 584, 39494, 26957, 46521, 10018, 55511, 26799, 42566, 11906,
-60441, 31110, 5082, 51490, 38234, 16502, 31639, 65346, 6987, 27885, 59876,
-14824, 40689, 25527, 63108, 746, 32533, 51000, 17587, 43238, 12885, 55453,
-26017, 51922, 7078, 43540, 22701, 56706, 10211, 32800, 42545, 14155, 55364,
-22104, 47840, 9083, 35411, 64478, 585, 32001, 11921, 37000, 49757, 18734,
-58434, 1929, 39729, 23186, 55306, 17055, 37496, 45993, 12299, 52337, 34558,
- 3781, 47199, 21625, 57131, 6818, 34415, 65336, 2680, 46718, 35777, 6355,
-60465, 19801, 47594, 32416, 11950, 61241, 4660, 42100, 24433, 47453, 13188,
-57552, 30950, 5460, 64218, 20532, 47661, 3063, 53847, 32110, 7581, 51360,
-35825, 1155, 46445, 24801, 57730, 14795, 41345, 20977, 35620, 57116, 1643,
-47493, 16674, 36650, 59421, 12298, 33093, 52677, 20998, 40179, 10783, 57606,
-22733, 32239, 47805, 4378, 29249, 54344, 19514, 44060, 7697, 52189, 34880,
-18830, 43085, 9787, 58027, 31360, 1474, 60970, 26549, 39011, 11434, 63856,
-19296, 32139, 57027, 13557, 47795, 25869, 38746, 11857, 60106, 21822, 47390,
- 1056, 35132, 49887, 20760, 60815, 2778, 38851, 21437, 52370, 14164, 38257,
-49306, 6318, 36133, 56015, 17867, 28554, 52343, 5742, 46019, 34236, 20222,
-47380, 14201, 56013, 38421, 16014, 62561, 24077, 43564, 5752, 40232, 23196,
-62939, 1719, 53372, 34691, 10561, 51964, 36401, 756, 48056, 25482, 57152,
- 6978, 29574, 62046, 1541, 33951, 59692, 8771, 44175, 24873, 55236, 14898,
-40418, 24606, 63096, 6090, 41459, 24421, 49057, 2217, 40662, 25844, 59216,
-14337, 36824, 49265, 7100, 27325, 65382, 18446, 36490, 58466, 5327, 28792,
-47696, 19299, 55474, 3326, 31233, 54165, 9237, 41925, 22658, 62359, 16080,
-34319, 53268, 2408, 64508, 31206, 9294, 44442, 22555, 61751, 11731, 36072,
-46034, 17187, 54153, 9211, 40132, 24282, 52385, 13941, 39775, 7517, 54510,
-35499, 19764, 55885, 11109, 42594, 21520, 63448, 881, 34955, 53092, 14195,
-45173, 21069, 33111, 48011, 10501, 55832, 26832, 38646, 11848, 59684, 17737,
-35241, 44151, 1441, 54921, 16249, 30597, 60113, 4031, 40053, 23895, 62279,
-13870, 49592, 22553, 44234, 4637, 64506, 10514, 53742, 32445, 3132, 49433,
-27988, 16793, 64945, 38202, 11382, 28385, 48916, 15026, 43676, 23623, 52261,
-13339, 41189, 21926, 57153, 8819, 27605, 63107, 14084, 41019, 21670, 61346,
-12456, 38686, 27014, 59179, 14260, 33224, 64674, 1774, 42736, 22372, 55274,
- 5046, 38960, 26783, 60436, 3476, 37545, 50158, 7144, 29734, 55454, 13961,
-46930, 27424, 8644, 45411, 31347, 13921, 58427, 24218, 43681, 6007, 63827,
-19981, 48582, 3683, 31039, 42253, 11206, 63517, 22282, 51449, 4811, 38501,
-19912, 64788, 2323, 33971, 48055, 15906, 43438, 23714, 58651, 407, 47366,
-20151, 37665, 50478, 3048, 30411, 54080, 10214, 46688, 22855, 40003, 6353,
-64146, 26931, 38538, 1814, 47571, 18458, 34296, 62281, 3505, 30897, 48823,
-19063, 65046, 1440, 34404, 43610, 12362, 52621, 27230, 16430, 55898, 47234,
-25090, 62261, 6678, 29021, 46626, 15410, 52591, 33182, 7148, 61513, 29755,
- 2561, 58742, 19076, 28933, 60851, 10817, 41553, 25519, 53908, 13000, 40885,
-24107, 57903, 15536, 44205, 25230, 40839, 7939, 58235, 23073, 45251, 36488,
-14764, 55715, 7570, 35875, 51467, 16828, 46295, 26449, 40706, 10372, 33994,
-42955, 19031, 63718, 27163, 12948, 59300, 38381, 11198, 29302, 47360, 3214,
-62995, 12679, 50207, 22598, 32773, 62269, 7497, 27449, 50834, 18843, 44345,
- 5415, 55197, 25163, 41766, 15112, 63145, 8238, 37252, 58827, 9928, 39430,
-25628, 59709, 12110, 28708, 63535, 2866, 48811, 20500, 37024, 52246, 15206,
-44425, 5027, 48373, 25254, 54175, 71, 40637, 22667, 62297, 7082, 44441,
-26900, 53690, 9345, 30819, 58856, 18634, 44907, 8681, 41072, 24450, 54568,
-12007, 36016, 64284, 1409, 27452, 59722, 19560, 41911, 3302, 62754, 31882,
-16480, 58044, 27151, 8777, 64844, 37199, 3763, 29992, 50450, 11397, 36271,
-60055, 19229, 51062, 9781, 31841, 48493, 16959, 27660, 61327, 6486, 46228,
-22563, 60566, 10997, 33247, 53660, 14881, 40412, 24186, 51302, 13032, 39061,
-20975, 64664, 7313, 32766, 51985, 974, 45632, 35181, 13463, 52530, 17763,
-60257, 36830, 8374, 31257, 51203, 3407, 62016, 20479, 31869, 45519, 1573,
-53024, 16053, 44573, 33888, 10091, 59850, 26492, 42752, 14639, 46350, 23996,
-51016, 4272, 31160, 55862, 12026, 42927, 27311, 17393, 50493, 37534, 4533,
-55720, 18701, 48613, 29402, 2859, 57669, 34255, 20679, 63733, 3742, 42748,
-26257, 60301, 18707, 43675, 2108, 65274, 26663, 38912, 5495, 50997, 25634,
-46956, 16745, 28999, 58144, 3011, 36960, 60649, 16253, 40798, 489, 65168,
-23123, 47915, 3816, 56337, 28562, 9989, 63641, 37359, 20919, 49259, 10541,
-43980, 17635, 52362, 30254, 2161, 34802, 56645, 15376, 39961, 25147, 46932,
-14024, 38334, 60443, 9342, 34496, 54792, 1614, 44628, 23185, 53064, 6112,
-30967, 61569, 514, 38932, 26806, 65354, 5402, 30883, 50994, 16224, 44414,
-35325, 4845, 47319, 24179, 55967, 430, 43728, 20747, 50859, 6385, 39129,
-25972, 53386, 12539, 34653, 50460, 9666, 45522, 20311, 56066, 31496, 15454,
-52899, 38278, 19259, 61450, 6528, 36807, 50718, 17371, 64467, 35102, 873,
-52944, 26841, 40336, 9487, 45318, 25363, 59608, 14701, 54278, 26491, 38824,
- 8975, 58039, 25490, 45110, 12436, 50116, 22856, 56991, 7798, 30159, 62667,
-10919, 41705, 17657, 30707, 55498, 9495, 43124, 23213, 61956, 16118, 36931,
-52145, 8538, 33377, 55966, 19551, 41999, 10199, 60362, 24817, 52891, 11351,
-40356, 21991, 58823, 8286, 39142, 26590, 46576, 16508, 58335, 28919, 3669,
-61393, 37942, 8269, 54798, 2921, 33812, 52004, 20792, 42061, 9944, 64989,
-23670, 44569, 13247, 51306, 21236, 35375, 49644, 7482, 40160, 23715, 56133,
- 901, 35784, 50238, 19769, 45531, 8940, 31044, 63698, 417, 53694, 34452,
-18093, 51450, 2782, 29637, 64651, 18976, 44710, 27847, 1998, 61716, 34333,
- 6623, 58483, 23679, 48954, 14637, 54476, 4796, 34932, 45579, 20080, 51998,
- 6705, 36440, 56438, 18179, 42543, 25914, 39325, 4507, 55265, 18121, 45410,
-30656, 262, 63650, 37168, 16133, 31722, 60064, 2292, 49731, 28503, 19998,
-52465, 15984, 32626, 50721, 542, 46242, 20598, 35867, 54097, 13241, 45188,
-30332, 6389, 65406, 27815, 17586, 33835, 58975, 8877, 42805, 29649, 10932,
-51784, 36469, 18347, 57664, 3514, 41473, 23502, 51622, 5577, 36245, 65288,
-15758, 31499, 57287, 6708, 45479, 28572, 17044, 48512, 33166, 7897, 52943,
-26115, 46746, 14010, 37699, 50089, 444, 35178, 53953, 18272, 42067, 23280,
-60819, 7444, 46458, 27417, 2829, 33753, 55545, 21845, 45872, 4789, 37533,
-56584, 13020, 43702, 33439, 16386, 30187, 50707, 3260, 44999, 22473, 63844,
- 5221, 42444, 26500, 58576, 2701, 49213, 23843, 39741, 11335, 58040, 19946,
-29928, 62187, 4488, 46716, 29877, 11202, 56832, 23692, 45860, 15116, 34184,
-42910, 11547, 55621, 38030, 9400, 29362, 63448, 17889, 49775, 422, 40030,
-20634, 64933, 6485, 36389, 58784, 17563, 39413, 20905, 49389, 5690, 59147,
-36292, 13337, 60611, 20844, 33444, 43479, 7254, 65440, 23505, 41921, 12337,
-49305, 29970, 15538, 51262, 33518, 9776, 56330, 21940, 32615, 48866, 8428,
-45037, 23103, 58328, 10581, 36408, 61975, 8181, 41677, 22414, 51458, 7582,
-30528, 53642, 20114, 44489, 11135, 32985, 42064, 19430, 52338, 15089, 45723,
-27457, 6400, 56684, 35371, 21834, 65323, 8409, 37360, 59042, 21057, 42189,
- 7182, 61260, 29879, 727, 55627, 20236, 27385, 51287, 15488, 42463, 25321,
-63015, 10347, 34595, 56575, 16228, 42435, 23585, 54275, 7976, 47056, 20160,
-36537, 57960, 1391, 28098, 52334, 20323, 64209, 10151, 39512, 26704, 53580,
-11321, 34692, 62603, 17593, 43559, 7995, 59489, 28976, 18094, 62936, 36227,
- 1052, 43104, 10876, 63925, 27350, 2553, 48187, 35040, 21887, 57305, 4170,
-28784, 42668, 10224, 47120, 21220, 61947, 12940, 34380, 55461, 1980, 39209,
-21440, 43509, 5298, 52939, 23125, 41082, 1540, 61840, 27033, 38607, 10418,
-41399, 25771, 52934, 3318, 36424, 51039, 21402, 63797, 4530, 35582, 57143,
-12488, 31228, 46125, 2100, 59305, 18543, 28894, 44982, 4458, 57501, 32873,
-17010, 46101, 2927, 36171, 55911, 15317, 42928, 23807, 49318, 5110, 55624,
-31536, 10524, 51055, 36084, 14791, 45611, 22038, 29149, 63115, 17733, 41376,
- 5300, 57740, 26722, 38533, 736, 55600, 27017, 40868, 4841, 57599, 17592,
-33094, 64585, 13458, 46183, 31153, 10218, 62881, 27571, 4449, 52565, 36937,
-17252, 48057, 27332, 11270, 62331, 37568, 20815, 49957, 7049, 33521, 59568,
-12728, 42605, 22022, 52413, 15992, 44498, 29783, 163, 62385, 37635, 16481,
-28707, 61328, 2482, 31633, 58154, 15795, 27467, 49326, 8323, 64815, 21891,
-46772, 10265, 33540, 60604, 13294, 42117, 22957, 53877, 9244, 48082, 23857,
-44912, 11616, 33317, 60943, 3917, 43234, 23525, 64687, 11511, 29795, 58433,
- 5126, 42544, 27421, 16990, 55491, 36030, 10765, 50641, 38374, 3357, 46254,
-21902, 61700, 15963, 54992, 32580, 6123, 49730, 20790, 31855, 62934, 13162,
-39923, 20428, 55637, 28311, 1948, 50548, 37270, 19734, 62546, 4154, 34943,
-58647, 11273, 43533, 22347, 61808, 9109, 40741, 24890, 63717, 11495, 28201,
-45505, 4807, 56876, 12648, 32779, 52156, 17215, 37748, 59304, 8884, 40974,
-14583, 65066, 29850, 18273, 49953, 27139, 2650, 63621, 38419, 8659, 58937,
-25160, 39289, 12091, 55913, 31537, 18789, 52822, 9852, 44798, 34893, 13770,
-60898, 26234, 41902, 7727, 50660, 22562, 40281, 15672, 54384, 26516, 39390,
- 247, 64051, 22181, 48289, 5680, 61089, 27602, 19342, 57991, 35180, 6009,
-43473, 22275, 57146, 36741, 13219, 32645, 53301, 10636, 29311, 47611, 1696,
-64077, 24687, 42256, 10358, 29642, 47176, 188, 54450, 27484, 15643, 51343,
-36778, 8898, 56713, 27729, 1107, 54812, 37228, 6635, 61467, 25189, 40713,
- 4166, 52884, 17933, 29948, 62909, 13427, 32986, 48277, 3641, 30875, 54194,
-12924, 46338, 27776, 17564, 61476, 37658, 4280, 58578, 26331, 47123, 6633,
-62664, 29685, 2514, 37876, 60434, 16815, 31436, 50439, 91, 45212, 28541,
-19033, 47223, 11730, 54255, 32614, 17213, 49897, 35908, 11058, 61989, 37631,
- 3896, 31061, 58224, 6748, 40206, 21578, 50520, 3449, 27957, 59774, 12969,
-41914, 24504, 60540, 10670, 45471, 18821, 33948, 60877, 8224, 42562, 33301,
-18223, 49695, 5289, 58087, 22488, 45384, 2917, 30325, 55568, 21983, 40198,
- 3761, 51661, 13031, 30284, 53740, 21216, 46684, 16825, 37976, 56592, 9779,
-31431, 51798, 14465, 38108, 60057, 16493, 54696, 26112, 39640, 6795, 49806,
-30222, 16669, 64714, 26001, 50380, 8422, 60956, 31598, 13818, 55975, 34848,
-18162, 48287, 5852, 59643, 20578, 43861, 14715, 61208, 28101, 7409, 45803,
-29609, 14023, 49620, 24987, 42365, 6764, 64455, 20444, 35861, 47929, 11485,
-54765, 23380, 40593, 12578, 65417, 26379, 49473, 9427, 29510, 63358, 839,
-33653, 60108, 13486, 40656, 22331, 63987, 7033, 41533, 25780, 58978, 11299,
-37193, 8947, 31118, 54016, 20143, 44018, 12049, 60032, 22306, 39071, 9159,
-63382, 20402, 30859, 45028, 2083, 51936, 28289, 6004, 59095, 34098, 16885,
-38327, 57401, 12619, 28589, 61098, 9806, 38190, 56257, 4812, 28941, 45835,
-15558, 54516, 22503, 39863, 5167, 56393, 31985, 9397, 65411, 36188, 12286,
-46966, 22772, 50392, 10106, 55067, 21374, 38170, 47812, 9261, 35059, 60137,
- 630, 44350, 31435, 15322, 54214, 37400, 2764, 48926, 24638, 56961, 6173,
-39986, 21283, 64186, 6956, 38928, 26835, 54545, 14299, 47527, 34628, 7160,
-37904, 55882, 18389, 33290, 49569, 9423, 62688, 31313, 1170, 59903, 27212,
-19066, 57431, 28576, 13767, 49912, 36503, 1792, 41440, 24435, 64850, 14234,
-38043, 48315, 831, 29841, 52858, 7403, 42790, 17274, 61391, 30076, 8438,
-46633, 25472, 53562, 14468, 40522, 24440, 54947, 2539, 38743, 20904, 53412,
- 5394, 31102, 48557, 15832, 58936, 24277, 39806, 19841, 44604, 1519, 63947,
-28931, 15469, 47449, 25988, 51719, 170, 36836, 58251, 7813, 34673, 53585,
-12312, 28324, 51539, 19289, 42999, 6370, 50061, 21747, 47036, 389, 36796,
-63170, 16322, 28611, 54753, 3363, 43218, 18312, 56569, 31412, 1778, 65103,
-33942, 6584, 58577, 20749, 44517, 13167, 52634, 29229, 17074, 37684, 50333,
- 2380, 42209, 15235, 54611, 25544, 48452, 7784, 28574, 62605, 3041, 44099,
-25573, 60239, 15100, 34542, 45672, 9017, 57376, 33969, 16972, 63312, 37954,
-11374, 32446, 61086, 3287, 47306, 31116, 16459, 38146, 62345, 18985, 45144,
-11606, 34465, 47936, 16605, 59521, 12235, 35931, 55027, 54, 43114, 21288,
-56287, 15746, 40570, 23725, 64829, 1678, 34369, 48985, 9693, 28885, 52823,
-14324, 39579, 21763, 50851, 12687, 33805, 54231, 18824, 43287, 5187, 57840,
-27195, 14254, 53346, 32996, 5750, 60795, 37872, 2735, 27590, 63965, 6512,
-45804, 23446, 42192, 14990, 53363, 22428, 48029, 12726, 33400, 61052, 18420,
-46352, 31909, 7417, 36222, 55312, 2299, 39256, 26361, 56249, 4633, 49113,
-16690, 29594, 53741, 2580, 59967, 27009, 41312, 13521, 32713, 61574, 18408,
-49156, 10080, 32809, 65414, 15563, 42049, 26260, 61151, 7536, 33870, 57502,
- 4337, 27858, 42377, 18900, 63264, 358, 44698, 27629, 7666, 48475, 33956,
- 2785, 60554, 19567, 36006, 57165, 4500, 43083, 12166, 29842, 47267, 16166,
-38382, 49491, 4016, 28637, 64198, 12731, 39104, 26947, 54554, 935, 35114,
-47553, 11644, 57622, 19831, 37003, 60557, 1218, 54435, 22032, 39899, 14922,
-51213, 27632, 7728, 60742, 31506, 92, 52505, 34853, 6730, 44375, 19482,
-53890, 37500, 11627, 51189, 27886, 17075, 36461, 53509, 2471, 46109, 32972,
-18491, 52949, 241, 47585, 40046, 24662, 60553, 2199, 39744, 26215, 48134,
- 6036, 52935, 25802, 43437, 15972, 47927, 7032, 61123, 23205, 41348, 15918,
-54810, 22002, 40094, 3069, 51345, 19120, 33127, 46545, 1821, 52980, 31677,
-19019, 43598, 13088, 58892, 31200, 963, 63606, 25500, 46940, 14277, 28459,
-50972, 3307, 41469, 24798, 60249, 5891, 39212, 26851, 44132, 7125, 64307,
-17911, 28154, 53775, 12429, 39853, 24252, 56049, 5260, 28940, 61134, 20526,
-43026, 11418, 38853, 26796, 58660, 3278, 34321, 52091, 18601, 41258, 1276,
-62855, 20332, 28879, 59414, 15574, 46924, 2465, 39608, 23763, 53149, 13787,
-37223, 48087, 8647, 38462, 53533, 4473, 34737, 63440, 9986, 30109, 59338,
-19279, 44667, 4843, 51462, 27856, 11491, 60903, 35452, 15305, 59475, 26074,
-47159, 11071, 34887, 56371, 18130, 43766, 208, 32204, 64992, 7120, 42415,
-23227, 57087, 12373, 33421, 60145, 19042, 42996, 2145, 50767, 35964, 9361,
-61177, 25777, 48440, 10332, 34982, 57346, 5204, 42381, 21393, 56181, 13910,
-40707, 22876, 62135, 17355, 36590, 47217, 1326, 60004, 32455, 16518, 65455,
-35792, 10507, 57005, 22675, 45578, 5430, 33489, 48089, 20269, 61827, 28190,
- 9355, 38346, 48840, 14703, 53456, 24180, 42488, 8666, 32505, 60522, 3778,
-36190, 57398, 8050, 30823, 63213, 21179, 39248, 4446, 60866, 19649, 37486,
-46566, 15779, 52160, 22025, 40882, 5040, 55378, 21305, 30593, 53061, 3659,
-27543, 51419, 6949, 44651, 22497, 52950, 13683, 40174, 25014, 58671, 11017,
-52102, 4683, 32722, 49857, 22946, 64145, 1930, 30893, 44550, 22477, 50795,
- 9179, 38820, 26316, 60804, 5316, 34879, 52654, 11000, 43689, 26445, 57274,
-15276, 36251, 63937, 8463, 31278, 48719, 958, 61008, 24216, 41192, 9667,
-64583, 22228, 33415, 47677, 9253, 38364, 62930, 16336, 43442, 22911, 54884,
-13420, 34762, 51442, 18235, 37938, 57793, 2086, 32669, 64783, 8967, 44250,
-24725, 55098, 955, 38971, 12006, 63642, 22153, 48775, 16898, 29765, 64570,
- 9006, 43725, 21531, 32617, 62505, 11979, 44828, 23750, 38540, 9421, 56141,
-23178, 48389, 7038, 40482, 25947, 57192, 695, 44421, 24534, 54184, 5162,
-39627, 22303, 50027, 15156, 35711, 60316, 11673, 48921, 30607, 20938, 57774,
-15815, 30565, 65238, 13324, 41989, 24475, 54049, 11296, 45925, 28402, 17832,
-59033, 36763, 149, 62801, 27462, 9162, 57589, 36467, 19309, 52181, 9516,
-44519, 21238, 63235, 15621, 31104, 53797, 3924, 43375, 27121, 16417, 48086,
-30100, 8767, 62589, 33030, 3805, 57967, 37355, 17080, 46385, 22226, 61839,
-14442, 41369, 25700, 59535, 3399, 31580, 62461, 18729, 44996, 5456, 57984,
-29370, 20673, 61247, 12129, 42560, 24903, 64755, 15308, 7432, 45235, 19565,
-56023, 32122, 12907, 62800, 36844, 17948, 57221, 3277, 40273, 26458, 50284,
-14090, 34903, 56299, 8574, 30776, 48468, 13920, 64243, 23819, 42200, 7026,
-60199, 22430, 40490, 8786, 65052, 26384, 51181, 7861, 35719, 49704, 17860,
-42211, 8382, 57058, 37051, 16707, 58799, 20461, 48744, 13422, 31831, 56919,
- 1918, 51038, 20716, 37518, 55699, 3980, 32788, 50479, 19820, 63217, 10759,
-46204, 34934, 16026, 52463, 7299, 65283, 23441, 45060, 13900, 50543, 29581,
-10664, 56122, 25918, 45345, 9588, 50148, 36508, 4554, 53884, 26052, 43891,
-17189, 61455, 5920, 45996, 27066, 17975, 64405, 29486, 14765, 49236, 22602,
-44756, 17931, 52560, 6980, 38959, 25938, 56867, 16834, 37080, 53925, 6364,
-45168, 23801, 39473, 3264, 53440, 21943, 39450, 5420, 62121, 22913, 51839,
-15173, 39389, 26402, 59245, 9994, 45601, 27005, 51267, 8199, 39617, 23543,
-64611, 14410, 29739, 55543, 5610, 41011, 21666, 53542, 16190, 40285, 23566,
-62374, 8170, 33569, 49596, 3425, 44492, 32401, 6026, 57665, 22080, 42053,
- 9702, 27650, 53937, 3660, 44053, 25465, 40284, 13470, 59510, 24930, 40175,
-12371, 53077, 6918, 37726, 57688, 17744, 27432, 46437, 4252, 36101, 62412,
-14027, 45461, 21811, 51771, 10495, 42459, 24684, 47933, 12588, 53299, 26071,
-44968, 11088, 51144, 32245, 1308, 59289, 30739, 9669, 61995, 37151, 18698,
-49155, 11572, 36753, 62905, 13827, 40205, 25362, 59743, 2278, 38619, 26901,
-64746, 5978, 46210, 17916, 29493, 43207, 20799, 57079, 7799, 29076, 42547,
-18329, 57670, 5760, 33418, 64488, 20015, 44128, 10132, 50011, 29103, 18800,
-58882, 6716, 39306, 20519, 51073, 3112, 40812, 22699, 59559, 16472, 34489,
-43451, 7157, 56781, 25589, 39313, 1793, 51082, 18280, 58808, 27676, 3216,
-36091, 52099, 7889, 40291, 25259, 58530, 8738, 31244, 49022, 13812, 28669,
-51829, 19053, 41195, 5470, 32609, 45653, 16903, 57224, 26729, 47248, 4958,
-37606, 53871, 11080, 33423, 50755, 15708, 57525, 136, 40376, 26655, 51417,
- 5660, 64987, 19930, 46741, 1533, 33588, 63419, 11654, 51409, 21323, 38497,
-13560, 58836, 19996, 48535, 11170, 31715, 64119, 1418, 43614, 23823, 54712,
- 6184, 34796, 46926, 10361, 53696, 37877, 4849, 51586, 21556, 48065, 1245,
-32993, 63414, 8140, 52159, 31900, 19374, 46524, 13018, 38148, 53490, 16831,
-29873, 46007, 2129, 59136, 26244, 39760, 5201, 49818, 24551, 41724, 12678,
-65133, 32564, 5759, 58991, 37419, 19477, 52599, 12170, 44565, 24521, 41202,
- 9464, 56507, 33866, 5284, 50869, 36348, 10907, 45170, 23218, 56100, 8508,
-40388, 25625, 47723, 14491, 38044, 49741, 6303, 30202, 56111, 4138, 35221,
-50276, 62173, 34017, 16072, 51214, 4733, 45765, 29325, 10217, 50703, 20671,
-34970, 65453, 11294, 28974, 59840, 114, 40359, 24393, 62115, 4205, 35231,
-44279, 11449, 53510, 26873, 39119, 12327, 55871, 24166, 44984, 2969, 39593,
-20210, 59863, 28052, 4240, 62146, 33308, 21324, 53459, 1390, 32831, 44950,
- 7487, 63458, 25442, 42829, 17082, 33523, 61974, 8855, 29125, 48518, 16506,
-43517, 6212, 38957, 25746, 58349, 1728, 40729, 26371, 49950, 17866, 38524,
- 843, 59780, 20001, 36755, 62132, 5160, 39634, 17964, 58332, 31524, 13315,
-65061, 22983, 41457, 10348, 51631, 32038, 19713, 56550, 38480, 3206, 35383,
-55116, 7603, 31880, 61931, 654, 40543, 25159, 58077, 12869, 47586, 32235,
- 2046, 62386, 19828, 30250, 49177, 10613, 63984, 19017, 34065, 57652, 10186,
-41583, 25891, 49020, 9375, 30328, 54430, 4526, 47484, 20668, 38576, 1223,
-62836, 17945, 32297, 47035, 4349, 52275, 19447, 34117, 46000, 13155, 63347,
-32339, 2985, 58482, 35863, 12273, 51031, 29501, 15902, 64057, 24656, 53322,
-11481, 30611, 48928, 15253, 61666, 35305, 17139, 49153, 21176, 62593, 6176,
-34690, 52140, 1958, 31445, 64392, 17099, 45337, 30058, 672, 36509, 63473,
-10640, 50135, 29444, 18429, 53867, 2080, 39266, 26849, 64822, 17958, 38888,
- 778, 59925, 32433, 7413, 38298, 64440, 17526, 27147, 56213, 14326, 43445,
-23423, 50490, 7257, 28922, 58132, 871, 45317, 20552, 31072, 56576, 8296,
-41694, 21030, 55652, 9974, 49365, 21688, 34124, 53275, 601, 63072, 13504,
-35503, 47168, 15230, 60485, 32262, 10656, 49490, 24626, 40369, 3370, 56728,
-17547, 35590, 63359, 1255, 32711, 47651, 22993, 62490, 11508, 42883, 25750,
-54005, 5881, 45999, 21382, 53126, 14620, 30048, 46880, 16128, 61534, 37467,
- 8142, 32496, 46075, 21328, 56189, 12431, 31511, 64966, 1140, 47460, 21290,
-41592, 4416, 62628, 36867, 10673, 59328, 26013, 47438, 13438, 62341, 30083,
- 7824, 41535, 23238, 59615, 14558, 27943, 61824, 3681, 40849, 22690, 47166,
-31049, 11365, 59417, 21992, 39317, 13065, 42788, 26502, 58674, 15506, 39337,
-26892, 46381, 5984, 60509, 27039, 42804, 2671, 35607, 56204, 16539, 40757,
-25280, 59286, 8907, 39767, 22059, 62720, 3222, 41702, 28206, 17806, 61069,
-36128, 10651, 29638, 58580, 16274, 39558, 24412, 42643, 5758, 56996, 26589,
-49208, 3412, 32150, 65508, 7411, 51023, 23909, 42439, 13068, 34725, 61685,
-17877, 56245, 7912, 36312, 48653, 15215, 44114, 23209, 54029, 2596, 32074,
-47450, 18073, 64814, 1502, 48580, 29770, 19811, 63166, 16195, 28672, 58280,
- 2004, 48386, 21056, 38636, 16223, 51722, 1151, 63476, 27628, 9712, 59268,
-37229, 17043, 52256, 27827, 11512, 44449, 984, 41438, 22929, 63928, 17165,
-35130, 58649, 1483, 46375, 27735, 7605, 51794, 37952, 17294, 32336, 54136,
- 9389, 47718, 28165, 17618, 59419, 32116, 1117, 62716, 20624, 48797, 5435,
-32821, 61604, 16841, 47738, 32539, 11104, 52185, 37200, 18761, 48796, 11826,
-40945, 26256, 60780, 10216, 39983, 22405, 47379, 3748, 53359, 14099, 40830,
-23453, 57332, 1114, 34049, 60342, 20535, 51323, 12211, 45059, 31728, 18957,
-62541, 5838, 43741, 26987, 54577, 9634, 46488, 32155, 14919, 47957, 24278,
-53045, 1912, 44078, 20809, 39303, 7339, 55382, 30032, 180, 63291, 38256,
-11043, 28795, 60242, 15868, 43767, 24126, 50910, 11713, 35386, 54705, 16351,
-42270, 4243, 60201, 22753, 45826, 14866, 35096, 55398, 4939, 42469, 25618,
-50648, 1354, 28962, 47842, 17415, 58541, 2907, 36525, 63646, 16305, 41966,
-24042, 61302, 12999, 48912, 25467, 42220, 6801, 58377, 21331, 37211, 60469,
- 567, 27252, 48780, 8480, 28251, 52649, 19285, 46923, 27553, 1126, 55745,
-38145, 9189, 45584, 19800, 36012, 60379, 2112, 44193, 28310, 5747, 55421,
-37438, 11528, 30181, 54337, 15045, 47373, 24059, 41466, 8860, 49362, 25312,
-59867, 13516, 44430, 20060, 33061, 56901, 6280, 42002, 23790, 58969, 16371,
-49157, 5855, 33625, 56784, 20932, 43040, 15036, 54245, 28412, 2836, 49040,
-36471, 8516, 53096, 33254, 3496, 37844, 65151, 16608, 33162, 52065, 15648,
-41938, 4847, 46869, 23988, 63951, 12542, 45834, 24718, 40464, 4334, 58327,
-19439, 39613, 26195, 44867, 6147, 55636, 27348, 2964, 53553, 37249, 19339,
-62159, 13119, 45622, 26690, 53284, 11741, 40181, 24197, 44801, 14192, 54769,
- 5130, 30155, 56916, 18971, 39063, 13656, 58200, 32294, 2598, 63742, 36192,
- 5461, 54826, 12008, 28406, 49980, 19736, 63409, 5914, 35138, 49245, 15901,
-44494, 29090, 10227, 59878, 24064, 46346, 16342, 28085, 53184, 250, 40087,
-21397, 55795, 3261, 34733, 53121, 20299, 43853, 1724, 51220, 36935, 18428,
-31111, 50049, 6300, 63921, 18161, 35612, 53076, 2838, 45354, 24358, 55189,
- 6664, 31237, 50505, 3579, 56853, 20312, 38683, 10633, 48113, 22845, 61899,
- 9606, 29368, 50797, 5407, 46290, 19258, 32942, 52877, 12742, 45045, 24779,
-58057, 13886, 33341, 45929, 7251, 55384, 25088, 43757, 4100, 51200, 13826,
-61617, 22779, 38995, 10616, 60345, 21840, 44511, 15005, 39653, 20152, 59990,
- 8556, 52885, 30065, 2857, 45263, 31892, 22105, 52176, 288, 29217, 62304,
- 9621, 42037, 26511, 61039, 10356, 39756, 25897, 55244, 14081, 36528, 45679,
- 4344, 53407, 38233, 12800, 42666, 26209, 64418, 5771, 55188, 24510, 44601,
-13270, 32340, 54014, 20446, 45735, 2674, 32802, 57531, 20267, 25607, 59861,
-14210, 30974, 53071, 8575, 39554, 23817, 55130, 13336, 32893, 61930, 19267,
-43280, 5075, 58432, 22483, 41725, 15239, 56512, 36329, 6706, 50999, 25423,
-45947, 9493, 41149, 23300, 54604, 14071, 29265, 56692, 283, 41893, 25007,
-57871, 6719, 31681, 63127, 3456, 45629, 18352, 55935, 29913, 12177, 59335,
-37307, 20431, 65097, 5956, 45009, 30502, 18675, 52972, 9660, 42224, 23149,
-64567, 3628, 37040, 53219, 14685, 47503, 22573, 40219, 12981, 56411, 28648,
- 4148, 63979, 37561, 9007, 30260, 61837, 15864, 46533, 25453, 59828, 12778,
-35061, 48657, 16652, 27347, 52610, 6678, 46734, 33095, 2135, 58831, 18469,
-42773, 28914, 9623, 63900, 33778, 18989, 37414, 50965, 8156, 28786, 63053,
-12213, 39836, 21089, 59167, 14673, 37489, 64572, 12126, 34771, 45309, 19303,
-50917, 28000, 11669, 55549, 31081, 5255, 35989, 56324, 15398, 30132, 53549,
-10511, 45030, 28709, 14901, 38368, 54316, 17659, 61530, 36322, 14307, 44195,
- 6769, 64883, 36721, 17700, 30430, 59134, 4452, 48405, 27480, 12505, 51883,
-37614, 14532, 64691, 22740, 46267, 897, 59757, 25923, 42524, 7271, 62277,
-18850, 33357, 55314, 5015, 39125, 22009, 54164, 3551, 47887, 28389, 15768,
-61687, 35357, 9100, 43448, 26034, 54795, 12304, 46008, 29799, 4914, 62790,
-37076, 10603, 44612, 22379, 61705, 16635, 28548, 57476, 13365, 47685, 24366,
-41144, 10421, 60669, 21133, 54695, 29816, 14120, 51124, 37110, 1193, 32030,
-60998, 14060, 47666, 31895, 7129, 61565, 16778, 50331, 34425, 12313, 65116,
-38471, 9465, 28770, 52111, 750, 39191, 21714, 57301, 4640, 31763, 50383,
- 7415, 60030, 20091, 34851, 49440, 13135, 42024, 323, 65476, 26236, 40395,
-10210, 45310, 22438, 49669, 17330, 39735, 26470, 59896, 609, 43273, 30786,
-16983, 57646, 28068, 3931, 61160, 36597, 18643, 50665, 32360, 7618, 56102,
-38195, 14725, 32143, 63138, 9753, 43054, 23981, 48439, 10831, 65084, 17340,
-31311, 58738, 8247, 45481, 13340, 55732, 25058, 42890, 9160, 49550, 20754,
-30216, 60178, 10368, 36958, 62380, 16788, 44699, 24164, 41237, 12670, 64351,
-25540, 53050, 4685, 32888, 43765, 13288, 58054, 36751, 15915, 65062, 29189,
- 2173, 56129, 36709, 8213, 29490, 48201, 739, 62445, 22492, 41905, 12486,
-36815, 64917, 19906, 33578, 45124, 1655, 55701, 24382, 40695, 5482, 54940,
-27025, 50019, 779, 38654, 26769, 43358, 14208, 54874, 20485, 64067, 10391,
-34954, 58435, 16027, 40642, 23724, 56667, 6689, 38814, 21199, 57799, 3633,
-28938, 43571, 8532, 58728, 27519, 15401, 32896, 61350, 7382, 49393, 19457,
-41103, 33219, 9128, 60855, 37581, 4477, 43462, 14983, 65306, 25757, 39843,
- 6559, 49465, 8878, 37800, 49048, 3643, 42975, 24940, 59429, 5869, 47181,
-21234, 39480, 2504, 53702, 24495, 47266, 13028, 33456, 64414, 1732, 45006,
-23439, 40184, 14095, 57802, 18448, 37027, 63294, 2545, 33682, 49450, 8561,
-44143, 22663, 64688, 10252, 39879, 23511, 54771, 15300, 39478, 24614, 50235,
- 6328, 35904, 52732, 505, 28135, 49190, 16160, 35511, 50780, 10644, 61715,
-25418, 39651, 7185, 49147, 29205, 17457, 57132, 28076, 7991, 61478, 32263,
- 2360, 59193, 35812, 19543, 49735, 16321, 41389, 25690, 54119, 6639, 35240,
-51305, 2961, 40976, 21994, 57459, 5606, 36620, 61088, 20617, 41737, 13389,
-64901, 21413, 37375, 47414, 5294, 53146, 22936, 45882, 2659, 30756, 56500,
-14141, 38203, 52714, 336, 43973, 26151, 53687, 6618, 31569, 43808, 4085,
-55597, 27235, 7786, 60530, 32863, 780, 37943, 47162, 9029, 59653, 21709,
-40456, 2074, 63121, 34311, 18780, 50159, 3358, 65432, 34866, 7738, 29904,
-45439, 3869, 56459, 25532, 39551, 20575, 54723, 10739, 49458, 22480, 41584,
-16416, 61411, 33801, 6473, 57110, 24571, 42266, 9510, 32069, 51354, 13041,
-38927, 20633, 53202, 30773, 2607, 46457, 23128, 61293, 10008, 40963, 26468,
-65275, 11550, 37569, 51602, 1179, 30366, 48463, 18953, 63764, 3158, 40127,
-22909, 59350, 15716, 48246, 19388, 29469, 58484, 6161, 35086, 49752, 106,
-42240, 22235, 59810, 6351, 45559, 32343, 2113, 47415, 37274, 9151, 62211,
-27302, 17600, 56952, 38252, 7959, 28837, 53659, 16038, 42392, 24476, 55261,
- 1768, 29870, 48729, 18714, 36291, 58947, 15615, 45099, 23966, 60897, 8865,
-43326, 23068, 63825, 14950, 41168, 25350, 46272, 2834, 61269, 31050, 20652,
-52525, 35660, 7044, 51264, 23736, 59111, 12398, 35128, 62782, 4353, 45029,
-20996, 55591, 14482, 36788, 47829, 9971, 51652, 22893, 39406, 14180, 55196,
- 1839, 42962, 22879, 64244, 4949, 50222, 27263, 17755, 52206, 36038, 6699,
-57487, 26635, 39425, 4071, 54626, 19190, 38943, 26833, 60985, 1104, 38617,
-17484, 62825, 34477, 4414, 54787, 16230, 47847, 29036, 569, 34605, 53078,
- 8416, 57573, 32037, 1711, 45347, 36136, 17431, 63133, 21804, 46878, 65,
-27422, 51620, 7833, 42534, 22481, 47197, 14931, 63633, 38418, 19840, 51914,
-16105, 31907, 58341, 2654, 47822, 28789, 6915, 53945, 16939, 30358, 48981,
-12150, 62086, 26399, 38504, 10131, 63595, 22857, 46896, 11850, 61029, 25013,
-39423, 6269, 46655, 24961, 50183, 8380, 28444, 54852, 4440, 43224, 22496,
-51919, 12485, 33406, 49193, 16019, 63693, 35056, 20226, 51612, 621, 46310,
-37921, 17418, 30459, 59668, 3031, 52772, 29000, 16499, 48497, 21265, 58320,
-34005, 10834, 48119, 17689, 61816, 31672, 56967, 27561, 12117, 64625, 32794,
-14962, 49760, 36204, 10776, 61220, 25944, 41739, 15027, 63491, 36456, 6259,
-51492, 19999, 30496, 53269, 10679, 59984, 34228, 4601, 50171, 28909, 12575,
-53051, 27216, 17173, 59327, 37910, 4369, 31914, 53001, 17655, 48042, 2118,
-36182, 58279, 12835, 30853, 64367, 19783, 41472, 15063, 61051, 31933, 4880,
-57831, 22048, 41556, 2575, 31674, 54471, 15160, 58687, 33442, 87, 46398,
-36069, 20344, 51145, 11590, 43278, 23242, 52603, 8239, 32851, 60860, 458,
-48483, 21064, 58809, 14672, 32519, 64328, 12215, 28910, 50691, 15462, 45467,
-27897, 3598, 53597, 34277, 8431, 55754, 27879, 15002, 61651, 36421, 8839,
-58516, 25437, 42612, 7285, 65244, 27386, 17002, 31514, 60695, 9757, 40844,
-24154, 61902, 15774, 46985, 20020, 30272, 52861, 13542, 44687, 24549, 65158,
-16940, 28695, 45284, 13989, 52366, 26204, 43414, 8765, 56745, 26096, 39888,
-13697, 51318, 24886, 57859, 12522, 31940, 47801, 16587, 60132, 2409, 41906,
-32440, 7509, 62904, 36679, 318, 29483, 52913, 17421, 35703, 47295, 3002,
-58425, 21316, 35471, 63879, 4425, 43798, 16312, 58815, 35252, 11160, 51281,
-36839, 16947, 57963, 5957, 43372, 22661, 56259, 14652, 41308, 24006, 57953,
- 7030, 38577, 26709, 50811, 8481, 31182, 53787, 1658, 36076, 46767, 13722,
-55181, 27091, 17846, 63525, 38282, 8300, 29306, 50784, 18264, 64173, 28300,
-12223, 58261, 34327, 3904, 48396, 31057, 10804, 49197, 22420, 59435, 2796,
-36415, 63640, 8599, 32820, 43601, 10366, 56251, 27144, 4028, 47635, 30772,
- 7243, 36980, 54179, 18778, 33643, 49071, 1602, 37364, 53526, 10499, 34069,
-56315, 17935, 43852, 8396, 28317, 62308, 15971, 43590, 31587, 1917, 55199,
-28437, 9291, 41667, 24328, 52211, 7240, 28835, 65188, 2840, 41052, 24767,
-61945, 6341, 45801, 20582, 58630, 29463, 12292, 38386, 47147, 9038, 33320,
-60935, 2537, 46124, 23575, 41198, 12623, 61645, 20581, 33516, 47087, 5704,
-52594, 14186, 41328, 25794, 46646, 9938, 57133, 20185, 31930, 43841, 7369,
-64640, 25830, 39642, 13877, 47511, 20706, 28731, 61070, 14768, 52096, 27926,
- 7141, 53801, 37521, 14249, 59074, 33613, 17901, 60894, 35416, 10168, 50769,
-27573, 4630, 34811, 59986, 6393, 45582, 24463, 39525, 11479, 56577, 18765,
-35348, 59267, 8747, 39328, 23797, 44805, 2980, 57807, 21227, 40622, 6879,
-55918, 34697, 3743, 49342, 18260, 57747, 29471, 1853, 37764, 62803, 13964,
-45604, 31339, 16398, 64245, 35742, 1043, 59794, 24969, 45249, 5009, 40951,
-11503, 61772, 22654, 28546, 57160, 6056, 47619, 23414, 43063, 14222, 37012,
-62944, 353, 41781, 29972, 7133, 55879, 35709, 1898, 42613, 19702, 4931,
-35912, 46756, 21209, 55343, 447, 29267, 53950, 18866, 44324, 4162, 52826,
-30815, 10154, 49496, 27877, 16577, 57163, 38235, 3451, 28536, 46990, 16361,
-65209, 21675, 36380, 43309, 5858, 57565, 35851, 11282, 45861, 21852, 60307,
-12564, 42502, 26442, 62026, 9636, 28641, 50894, 3860, 46192, 34295, 8086,
-54135, 23004, 45730, 13774, 33733, 48777, 11521, 62964, 21091, 45708, 5512,
-39087, 24415, 64091, 16207, 52743, 6083, 39124, 26164, 63460, 3888, 30615,
-56212, 12481, 43174, 26483, 38857, 10064, 44407, 26272, 53445, 8040, 46834,
-34607, 1421, 56173, 38015, 19709, 63576, 14562, 46331, 23167, 40666, 931,
-51516, 30357, 16962, 48927, 34180, 11970, 54332, 20100, 38383, 49907, 4434,
-34819, 46237, 18979, 57444, 2297, 32508, 50920, 8585, 37982, 63285, 3164,
-40758, 21309, 51679, 6636, 36364, 57848, 3963, 33768, 60948, 10886, 38923,
-23733, 48423, 5443, 59912, 21973, 46979, 1447, 39757, 23126, 62017, 6134,
-38573, 24119, 48592, 15174, 53927, 23590, 42822, 12871, 56685, 22095, 43877,
- 8096, 63316, 19604, 31443, 50056, 11256, 45486, 18681, 29635, 56484, 9115,
-39597, 21243, 63031, 28847, 43, 49037, 30890, 19315, 52894, 36320, 2929,
-31839, 60115, 11044, 44626, 20404, 55150, 11916, 34348, 60697, 17144, 42619,
-24596, 65509, 7734, 32980, 43912, 3688, 51727, 31064, 12903, 56586, 36530,
-15507, 44076, 4558, 54043, 24942, 40911, 14756, 55890, 19757, 37735, 65349,
- 5175, 44321, 38403, 18290, 27262, 50694, 15034, 46610, 22123, 59991, 17615,
-35019, 62682, 14122, 51750, 24851, 42328, 5188, 64853, 12124, 29753, 58051,
-15711, 28555, 62037, 6427, 27455, 47941, 12733, 54955, 37577, 4040, 47655,
-21687, 59995, 13924, 36355, 50710, 17781, 48269, 32723, 11755, 59558, 37432,
-17356, 32073, 56803, 12226, 42964, 35395, 16516, 48829, 31793, 3740, 60585,
-35193, 18991, 54688, 28790, 11907, 37806, 58595, 15362, 32284, 50935, 647,
-44523, 27662, 10269, 56416, 35485, 21148, 65492, 6763, 51956, 23258, 40024,
- 1916, 48857, 24169, 53710, 12382, 41799, 22330, 59509, 5267, 54525, 10282,
-36850, 42798, 4032, 48691, 33558, 11910, 56443, 23112, 41516, 6054, 50010,
-28071, 2883, 54417, 37755, 12552, 57038, 38488, 16951, 29937, 50093, 9296,
-64318, 22873, 31532, 48558, 415, 41750, 25827, 63994, 6246, 53653, 18412,
-31290, 50723, 14805, 46014, 28658, 12490, 64851, 26174, 43900, 11049, 35454,
-60321, 16640, 32797, 50812, 3272, 27107, 55697, 7696, 43805, 23193, 51326,
-13067, 31471, 55047, 17520, 47178, 31139, 8338, 53207, 16462, 35759, 64890,
-11077, 31570, 54533, 9407, 27930, 56617, 18088, 50998, 22506, 43884, 13856,
-60346, 24957, 51974, 30030, 62333, 7744, 41564, 17373, 34244, 63205, 9255,
-39027, 23250, 60511, 12683, 37860, 55817, 801, 45489, 35763, 8638, 62522,
-21894, 40768, 7932, 52462, 33121, 553, 55546, 14862, 47391, 20816, 29475,
-63963, 1521, 50012, 25645, 38935, 5584, 51940, 20075, 45172, 37192, 14626,
-55703, 27084, 18006, 59009, 37304, 1761, 63814, 24771, 42956, 6718, 53808,
-26186, 38587, 13006, 59244, 19908, 49542, 9902, 42113, 26775, 55837, 13586,
-45207, 21582, 48881, 15650, 41126, 24222, 65206, 5667, 47276, 22107, 61630,
- 3394, 31539, 42107, 19780, 59996, 27081, 11642, 49743, 29580, 4267, 37063,
-58267, 7704, 31783, 62718, 18808, 43351, 4896, 59767, 22214, 44739, 1588,
-62204, 28353, 15467, 58777, 27050, 12358, 51993, 37887, 21337, 45553, 14344,
-56698, 27819, 17692, 33738, 57412, 10274, 42182, 26586, 54222, 13204, 47528,
-20028, 30740, 49679, 82, 64250, 19352, 44634, 31028, 8330, 36023, 63450,
-18516, 43522, 9780, 53262, 26955, 41281, 10488, 64319, 31117, 3984, 58618,
-26253, 39948, 5113, 51613, 25885, 39419, 12832, 56263, 29087, 6863, 61010,
-37045, 1619, 46779, 25537, 55174, 6244, 44957, 18519, 37992, 60576, 13853,
-42499, 7992, 63283, 25876, 50078, 5779, 39103, 26984, 64724, 445, 49341,
-24669, 39678, 4567, 52278, 12630, 37769, 55947, 16215, 27887, 61401, 11414,
-45951, 24069, 40416, 1505, 60969, 22798, 31759, 46538, 7966, 62585, 35816,
- 481, 50416, 27599, 15553, 52442, 29213, 12142, 57925, 34566, 6298, 54925,
-30947, 230, 37237, 51137, 8097, 44156, 31777, 2120, 59739, 17709, 46247,
-35968, 20993, 47500, 3553, 38060, 51356, 18437, 44775, 36529, 1063, 64267,
-29777, 17257, 58016, 34526, 10040, 41699, 26452, 64742, 6257, 30964, 57315,
- 1281, 42989, 21642, 54237, 5347, 46055, 22522, 50828, 402, 27711, 63268,
- 7442, 54038, 24472, 40052, 15093, 48019, 1211, 64541, 22843, 44252, 5389,
-55583, 28860, 9268, 64052, 37060, 16235, 59879, 22933, 49339, 2707, 29930,
-44121, 15107, 62143, 28743, 11255, 57908, 33479, 17425, 61301, 3059, 32229,
-46170, 16638, 50070, 33345, 18292, 65297, 27130, 15452, 59953, 38463, 2031,
-28966, 61735, 19247, 43901, 11457, 64539, 31709, 15560, 49145, 27157, 1314,
-62174, 36651, 19136, 52880, 3850, 42409, 14973, 61294, 21503, 52214, 11969,
-33420, 48313, 20427, 42584, 7806, 62714, 33207, 1382, 56643, 37213, 18898,
-48120, 5543, 54583, 24517, 42114, 9008, 53650, 19379, 47371, 37985, 11461,
-32023, 58587, 19210, 39049, 6348, 65192, 23997, 40159, 2773, 60377, 21702,
-32883, 50453, 1615, 45802, 22087, 58915, 4730, 35224, 47257, 12384, 40453,
- 3578, 64180, 26580, 39275, 10100, 46077, 18603, 35153, 15789, 56513, 24719,
-51420, 3243, 42696, 25642, 57418, 5518, 46353, 34646, 15947, 27374, 59210,
-18463, 31312, 50452, 12658, 43697, 25921, 60902, 11248, 46205, 28418, 19322,
-62066, 37279, 7296, 55019, 16629, 34374, 43743, 8774, 57170, 18039, 34393,
-65315, 822, 30343, 59814, 7331, 38343, 51666, 11939, 29556, 48081, 10009,
-37971, 51550, 17913, 30922, 56536, 1210, 47722, 26968, 39625, 4278, 60965,
-22864, 38583, 2169, 62265, 31980, 7443, 57475, 34322, 1254, 52056, 18596,
-31810, 54324, 13139, 39242, 24830, 58009, 11168, 48639, 6028, 38344, 62388,
-18662, 33336, 56857, 10123, 42930, 25347, 49494, 12347, 54945, 24874, 38964,
-10653, 53470, 32830, 17714, 37716, 50652, 6912, 47008, 35980, 3572, 64672,
-29741, 7540, 59949, 34507, 527, 54402, 38422, 6066, 47861, 23683, 60363,
- 1580, 38969, 22651, 62177, 5778, 41801, 18188, 55884, 29435, 11631, 38113,
-54079, 16879, 47975, 28625, 4684, 56932, 34687, 19399, 59513, 817, 44393,
-21073, 36266, 51130, 13579, 44323, 20117, 65340, 9805, 33193, 59918, 1089,
-44956, 22381, 54253, 16115, 41109, 23440, 65017, 14162, 34346, 50274, 12036,
-57560, 27403, 4854, 34278, 54946, 21086, 40033, 12724, 46607, 24384, 53684,
-16096, 41941, 21824, 46298, 8837, 62689, 33329, 20315, 58899, 29146, 2334,
-48983, 35611, 19234, 52992, 5148, 32316, 57115, 10144, 49158, 19307, 39080,
-12702, 52289, 17208, 29529, 56783, 20801, 45433, 6990, 35174, 60542, 1858,
-41227, 23612, 61779, 13808, 45362, 26241, 64662, 11686, 28366, 54002, 15465,
-40389, 23734, 56597, 7543, 30471, 55041, 14052, 62831, 27300, 9222, 59295,
-31691, 13524, 49536, 23355, 41957, 5714, 52715, 24268, 44970, 3007, 53967,
-20442, 47075, 12925, 40140, 25549, 61831, 13927, 39372, 26535, 64153, 8905,
-34163, 58382, 15325, 43745, 33334, 18502, 51283, 9586, 57498, 27016, 42258,
-13333, 34469, 53391, 17251, 41745, 22037, 47888, 14486, 53300, 29907, 6105,
-45581, 36868, 17242, 59225, 33197, 7723, 50561, 37159, 19060, 45851, 5513,
-51522, 36902, 21373, 43001, 8035, 62582, 27780, 926, 55985, 37888, 9148,
-49449, 32119, 17167, 52528, 37924, 8454, 32671, 53447, 23756, 40143, 6802,
-57651, 21253, 34101, 44896, 9980, 55017, 24899, 40617, 13271, 56057, 26733,
-39070, 5312, 46316, 23471, 60662, 2270, 29225, 57093, 16255, 40093, 24123,
-52707, 9558, 29924, 61501, 15457, 40098, 21280, 59470, 550, 38668, 26365,
-57382, 4755, 29336, 63354, 17184, 42355, 2286, 56906, 26706, 47781, 10797,
-35915, 54313, 19157, 43088, 11803, 62134, 25886, 39984, 7761, 43604, 24865,
-53508, 15790, 60733, 21960, 36343, 49280, 8057, 32192, 57357, 1220, 49800,
-11861, 39736, 6131, 45148, 20514, 61515, 31090, 13888, 50805, 19797, 29210,
-64950, 2882, 47637, 36853, 6586, 63771, 24763, 54968, 2019, 39143, 17292,
-34016, 58780, 3964, 42719, 12227, 50987, 23243, 30902, 47837, 5115, 61097,
-19778, 29865, 54302, 10678, 41044, 21970, 49681, 16282, 45895, 27720, 2811,
-61244, 36660, 16467, 58084, 27526, 4093, 62054, 14517, 40817, 21657, 65489,
- 9142, 32670, 46868, 19336, 53314, 11241, 44229, 25783, 50933, 20460, 42341,
-10545, 60016, 26196, 44965, 9756, 35426, 62963, 1801, 42568, 18910, 55331,
-36325, 15826, 28404, 45066, 598, 52753, 16677, 39075, 21052, 65339, 2337,
-33347, 45430, 6409, 60318, 26748, 42016, 3299, 64138, 30208, 10337, 57211,
-21980, 27838, 44308, 11603, 53881, 23233, 40484, 16003, 47305, 27257, 11475,
-63534, 37082, 15307, 31381, 53012, 11040, 45825, 24388, 55045, 14472, 35462,
-46687, 7085, 58960, 27244, 2215, 61418, 37288, 14276, 52085, 22250, 46508,
-11689, 31623, 50551, 17631, 60881, 7927, 28601, 54837, 1936, 35095, 47094,
-16086, 53744, 23951, 41153, 14422, 34096, 48672, 4282, 58667, 32647, 8099,
-52841, 30057, 2407, 37507, 43388, 20391, 64533, 14884, 48354, 29853, 1510,
-57231, 33610, 10510, 62036, 4183, 32901, 56333, 14017, 28815, 51369, 17619,
-44904, 6513, 41816, 23151, 63644, 8699, 41489, 23728, 62325, 14130, 47752,
-21865, 34248, 64949, 2613, 43606, 24405, 59599, 5410, 39844, 11683, 63352,
-23568, 47951, 16762, 30737, 53216, 10539, 47530, 20886, 38861, 5391, 49233,
-22419, 58284, 3817, 36113, 63463, 12650, 48643, 25962, 39840, 459, 45256,
-19824, 36993, 52659, 4544, 43027, 25222, 55802, 10931, 60750, 21074, 39051,
-14363, 63016, 26827, 38877, 8759, 58879, 23469, 44685, 7785, 51890, 35037,
- 2339, 53577, 19465, 45231, 29399, 11130, 38114, 55590, 2963, 46658, 23646,
-38886, 5185, 62070, 21783, 49098, 3527, 30019, 62841, 7684, 33373, 58874,
- 2138, 40440, 24102, 63191, 13642, 55276, 4096, 27387, 47356, 20528, 60272,
- 319, 41148, 24863, 63695, 14426, 28756, 58857, 11821, 48616, 19218, 35617,
-52985, 14203, 29968, 44155, 3711, 58316, 27863, 12368, 62968, 21913, 44815,
- 657, 60159, 18105, 47351, 36220, 4413, 63783, 17608, 31261, 46717, 2452,
-59715, 33500, 8078, 48947, 18331, 58082, 29951, 10854, 38398, 54377, 9339,
-34715, 47340, 4610, 59072, 19854, 38096, 50137, 3561, 27842, 52360, 10166,
-43392, 23660, 64476, 12480, 45761, 20643, 49626, 9514, 33115, 54004, 20142,
-40688, 13489, 33027, 59904, 7856, 29276, 41395, 3910, 56822, 21115, 49485,
-14577, 34229, 63808, 9784, 31899, 44746, 2231, 51446, 18530, 29330, 59700,
-13127, 40946, 23343, 65118, 47352, 19404, 54737, 28355, 9879, 49104, 38358,
- 1400, 35820, 56368, 11998, 42275, 22861, 54398, 10444, 44284, 20897, 48573,
-14554, 41970, 23270, 56001, 6142, 47182, 30142, 20093, 57397, 35257, 2301,
-63406, 21173, 39825, 9885, 52328, 33670, 3051, 47691, 26642, 58198, 4971,
-32585, 63619, 13238, 43480, 22229, 49988, 8289, 32103, 53395, 18781, 46493,
-35066, 6495, 50544, 25867, 43746, 15720, 59881, 7732, 34652, 58102, 16997,
-39893, 5253, 64642, 15289, 38937, 21363, 49910, 4895, 58276, 29254, 14411,
-48129, 25856, 51894, 4411, 30382, 64741, 10530, 50088, 22751, 31752, 60781,
- 5457, 47524, 24276, 41499, 13265, 56163, 23358, 38558, 11436, 52166, 21109,
-43911, 14801, 55184, 36579, 1074, 61439, 18136, 32081, 48471, 4690, 62701,
-31717, 9278, 57936, 35461, 20352, 50188, 3811, 44893, 21966, 64400, 7523,
-30381, 43303, 2615, 62680, 21120, 31508, 50052, 15793, 44113, 28139, 10359,
-57616, 33501, 2912, 63842, 26178, 40640, 5683, 45764, 21972, 38198, 57632,
-14292, 30079, 62403, 18742, 42546, 3625, 32328, 61581, 7315, 52058, 20421,
-28283, 43561, 12817, 47621, 24695, 62477, 16578, 28067, 54437, 3804, 45613,
-36259, 8615, 59914, 22233, 43612, 15375, 50966, 37016, 22866, 45452, 7928,
-60341, 37571, 1230, 31219, 53297, 15636, 58010, 31073, 11066, 36959, 54651,
- 637, 44450, 26332, 39123, 5663, 51470, 16544, 29839, 55651, 11070, 34344,
-47984, 18870, 54385, 30091, 3697, 37513, 56515, 8413, 33659, 64310, 3092,
-42218, 24566, 56821, 13220, 43328, 33607, 18605, 29277, 44844, 6202, 52757,
-16969, 31661, 61421, 10751, 49689, 29743, 15900, 65298, 21105, 40511, 2436,
-33216, 46169, 7812, 51799, 32541, 126, 56436, 18032, 48757, 30050, 3410,
-63686, 38065, 16328, 28378, 60572, 10130, 36313, 50267, 4253, 61397, 27095,
-17243, 30663, 65373, 13004, 52397, 24889, 41477, 10889, 56247, 20193, 37114,
-47328, 12321, 27227, 46069, 19092, 52440, 8671, 31654, 48865, 18792, 43154,
-30787, 9061, 52971, 35683, 15547, 56737, 32327, 8249, 49716, 37770, 2248,
-44173, 25548, 56673, 4851, 41054, 23929, 63564, 10916, 51001, 20463, 35818,
-47327, 5628, 54967, 25627, 39003, 10992, 51536, 29978, 14341, 55683, 25120,
-42197, 7620, 53294, 22614, 39822, 14143, 65391, 24198, 44793, 1082, 35787,
-63194, 16571, 27895, 45140, 14663, 64977, 27648, 11309, 34099, 44906, 13718,
-63509, 31479, 17255, 55691, 34590, 6561, 51440, 26953, 39815, 1677, 59150,
-26737, 44004, 5997, 62375, 26297, 49405, 184, 43990, 22609, 63258, 15882,
-46902, 36300, 7086, 29452, 58124, 790, 41129, 20413, 55965, 27928, 11925,
-62660, 37269, 5570, 46691, 26154, 53814, 4200, 33936, 30465, 60065, 2403,
-36629, 63569, 17071, 27493, 57990, 9413, 45818, 32134, 5787, 60373, 38208,
-18063, 30021, 58971, 4705, 34878, 61464, 8834, 44290, 25473, 64848, 14235,
-40431, 6909, 54300, 25353, 45717, 13087, 59142, 26382, 41689, 14202, 63025,
-20786, 43474, 11513, 35770, 54051, 19103, 40244, 5481, 56712, 34382, 20739,
-64736, 342, 42449, 29235, 12467, 60656, 22351, 54701, 2666, 40153, 20818,
-51673, 29526, 684, 36463, 54007, 19626, 46585, 31342, 2810, 61295, 24842,
-42663, 17464, 36705, 56659, 8993, 40257, 21568, 58613, 16572, 37248, 43385,
- 7453, 54066, 13820, 40938, 26607, 58194, 9379, 31699, 49185, 17930, 63092,
- 4, 41261, 26930, 60778, 5465, 32525, 49361, 18948, 46051, 9456, 38086,
-56407, 13980, 28236, 50278, 19094, 43357, 1818, 53502, 29369, 16735, 58924,
-38158, 12708, 33049, 51853, 15597, 58594, 26415, 39186, 12195, 56936, 4451,
-34113, 64998, 21493, 47245, 7651, 40818, 24283, 51438, 9201, 33382, 61854,
-15785, 53117, 27268, 4122, 48159, 36926, 6977, 49802, 26647, 59020, 12478,
-44547, 29070, 15518, 63729, 37370, 530, 59593, 19668, 39947, 5486, 51141,
-35126, 9831, 61821, 30774, 13452, 53276, 26265, 40380, 6902, 63971, 29298,
- 2304, 54149, 16792, 41302, 25162, 47794, 13175, 64326, 21289, 39298, 3873,
-48594, 25603, 59720, 17397, 29896, 50655, 9512, 57983, 19994, 32650, 60599,
- 7294, 42346, 25227, 63885, 1271, 32163, 42918, 12898, 60164, 24871, 44248,
-14397, 49927, 28515, 18062, 58995, 32396, 8964, 37567, 62237, 1321, 46914,
-11229, 60332, 21678, 35437, 57144, 2906, 41979, 24578, 55992, 6967, 33894,
-47171, 12364, 54480, 22996, 59028, 16192, 29030, 61706, 13187, 43512, 26031,
-39486, 11025, 54503, 33591, 19787, 50898, 5840, 32529, 48060, 22045, 56445,
-14124, 31675, 42464, 8365, 57117, 38392, 1517, 32929, 44753, 6443, 60184,
-26268, 38634, 35, 61373, 18340, 51580, 34869, 4393, 64859, 36572, 21401,
-57862, 1014, 35840, 61176, 12791, 45080, 24485, 64709, 6627, 28981, 46968,
-21592, 55797, 10476, 31227, 64265, 13507, 39604, 22167, 59276, 6953, 45616,
-25950, 39471, 2450, 61017, 18146, 33250, 42971, 14829, 64807, 28146, 7397,
-58775, 37810, 2981, 49759, 16512, 30335, 62622, 10864, 47576, 28825, 4832,
-51168, 31615, 19479, 53342, 7420, 47850, 36863, 3232, 51796, 21488, 36478,
-54778, 20, 47750, 27127, 7241, 49452, 37452, 2499, 60620, 22094, 42662,
- 8843, 61979, 23158, 38544, 13781, 52323, 21344, 38499, 10543, 56239, 18110,
-34915, 52751, 9183, 30934, 55717, 13063, 44196, 24572, 52310, 16708, 61465,
-35645, 6570, 50475, 38214, 17103, 30266, 55409, 11121, 42322, 21435, 58441,
-15219, 52300, 24326, 40635, 14382, 50252, 5273, 44688, 33145, 18867, 62769,
-27056, 15697, 50197, 27748, 215, 53680, 33222, 12284, 49328, 24215, 39606,
-17759, 51879, 1153, 34706, 60081, 17054, 43349, 31643, 8310, 36276, 48431,
- 30, 55277, 23698, 38658, 6199, 59970, 22742, 49991, 1419, 30022, 62347,
-15898, 44603, 28073, 11350, 36147, 48923, 16658, 56176, 33043, 4808, 48297,
-37667, 16702, 31616, 63899, 6850, 45753, 23079, 62421, 8668, 28736, 58871,
-13462, 35523, 48322, 8295, 55503, 32865, 245, 44671, 23036, 63850, 6511,
-46803, 32991, 2014, 57037, 27435, 18968, 63467, 34139, 2822, 46148, 20691,
-55165, 6741, 34613, 44301, 21977, 53759, 9085, 39211, 24538, 54613, 11855,
-29794, 63660, 21271, 42936, 3030, 36174, 60939, 8178, 40129, 24528, 65376,
-12278, 37376, 49232, 6836, 28220, 61248, 894, 40150, 24897, 46358, 5095,
-51249, 19105, 29234, 53289, 14951, 41565, 617, 54836, 35643, 18222, 60177,
-13736, 44597, 28811, 1642, 49127, 37506, 10014, 64775, 32085, 20557, 57138,
-10921, 39034, 22124, 54123, 2283, 35308, 55850, 9346, 45482, 22556, 31932,
-54691, 10904, 42968, 22969, 56638, 15778, 39995, 23924, 47808, 800, 59144,
-19809, 32522, 47111, 11331, 57627, 35725, 20922, 62548, 4777, 31894, 50550,
- 9568, 42263, 24240, 57330, 14565, 45518, 6998, 35098, 64643, 13737, 41786,
-24390, 49557, 3173, 40775, 23288, 55006, 9485, 35592, 48909, 15709, 53573,
-28133, 5904, 41035, 20248, 61377, 701, 36646, 51999, 6723, 27788, 48911,
-16267, 54303, 27500, 19297, 51850, 38412, 4759, 27867, 46414, 18869, 64102,
-10042, 38840, 21897, 59632, 1461, 38655, 26285, 42599, 6601, 50006, 36020,
- 3834, 48063, 21661, 64609, 5532, 45741, 24353, 60310, 9248, 37215, 57904,
-17770, 43984, 678, 40139, 25236, 62902, 12592, 49455, 20245, 27330, 47972,
-15493, 53811, 22474, 40512, 9437, 56385, 26939, 44472, 7028, 28702, 55295,
-14096, 44212, 27994, 11051, 38052, 54575, 16440, 28452, 50376, 3175, 40773,
-17997, 51730, 37126, 1629, 62006, 16169, 40906, 24188, 52380, 3432, 48108,
-30415, 16746, 53396, 34370, 11762, 57453, 22886, 48965, 9378, 28913, 56796,
- 1435, 50587, 34410, 18682, 46722, 13466, 33562, 60523, 20619, 45306, 260,
-34435, 57493, 15537, 38005, 61518, 9182, 42386, 24922, 58931, 12668, 31175,
-60986, 18212, 42963, 8105, 62131, 29382, 18131, 59670, 36028, 12586, 56842,
-25463, 45301, 14289, 33181, 48168, 18686, 55367, 5156, 45122, 25102, 64622,
- 3110, 43277, 23313, 60871, 5384, 48750, 24929, 39649, 2426, 65430, 22268,
-38822, 5751, 46166, 30473, 12991, 47540, 23001, 64560, 3331, 40253, 20565,
-60637, 53, 35064, 45282, 9022, 36037, 6809, 48166, 22160, 58878, 29412,
-13174, 55113, 37965, 3507, 53426, 38487, 11072, 35522, 64355, 14297, 41455,
-21693, 62175, 2788, 32352, 57866, 13561, 45748, 28764, 21333, 53116, 3722,
-49476, 24394, 64552, 16000, 29329, 44353, 9341, 56561, 26299, 39981, 14526,
-46719, 24979, 52624, 7938, 36912, 57371, 2411, 46822, 23256, 60162, 6014,
-40596, 24570, 63043, 14055, 27972, 57720, 10045, 43215, 26514, 55598, 11540,
-33560, 50040, 18785, 45491, 5950, 41413, 22807, 63260, 16780, 28610, 53913,
-13509, 34950, 49439, 18080, 27753, 60428, 12996, 45546, 35716, 5042, 48453,
-22371, 59375, 12641, 40066, 25391, 61792, 14784, 50268, 4619, 30761, 64556,
-17185, 43243, 2433, 58424, 35307, 6234, 51044, 25546, 59202, 14810, 29183,
-53181, 19725, 48103, 5494, 32384, 55567, 20675, 42112, 14967, 52495, 23274,
-44160, 9760, 57601, 20885, 35884, 63190, 8047, 42689, 32296, 22746, 61118,
-11292, 29466, 46128, 4988, 55540, 20903, 36459, 58884, 11859, 27980, 44084,
-17346, 55302, 138, 41877, 25916, 63144, 6180, 40529, 25469, 49187, 17715,
-30427, 57612, 4581, 48155, 16948, 36828, 64206, 1888, 32460, 49174, 6675,
-60504, 18138, 42331, 35137, 5857, 55820, 17555, 42868, 27849, 8290, 50046,
-37850, 15293, 55812, 19599, 35521, 60573, 2716, 47417, 26981, 38731, 19827,
-53771, 1835, 46967, 33488, 7657, 59124, 36522, 18501, 61955, 13445, 44943,
-29041, 4881, 62671, 21388, 34699, 57172, 12088, 45178, 26557, 53961, 10961,
-40867, 23246, 63192, 2573, 35658, 42841, 9494, 65204, 34412, 15919, 56508,
-32666, 12032, 50628, 22802, 43594, 5519, 53095, 26859, 44578, 11339, 63602,
-19149, 53706, 30244, 16600, 56896, 38157, 11922, 33041, 55433, 18974, 41269,
- 1712, 50203, 27695, 12009, 31310, 64918, 20988, 52054, 7092, 34039, 43680,
- 3346, 58859, 36820, 7894, 63906, 31886, 4104, 59645, 34066, 19419, 48317,
-11809, 63759, 36812, 17058, 32705, 60537, 2498, 51077, 22389, 42185, 6188,
-62515, 34001, 22049, 58782, 8549, 27951, 54904, 19389, 46380, 35026, 5983,
-44610, 18600, 61489, 35963, 12634, 42801, 197, 65029, 26451, 46419, 6490,
-31586, 63305, 19238, 45724, 13058, 39546, 25214, 61980, 4081, 53641, 24448,
-39612, 6503, 56487, 26035, 42779, 11592, 50632, 27504, 17409, 34131, 54634,
- 2048, 45593, 22066, 39220, 5710, 56399, 23050, 32920, 48788, 14312, 42223,
- 5266, 53665, 23448, 40304, 9877, 65353, 29813, 4140, 53340, 37385, 15827,
-31093, 57874, 11084, 39282, 26978, 54910, 12403, 38772, 26578, 44490, 14588,
-58843, 20601, 48132, 11417, 32576, 51222, 19853, 59233, 1766, 32793, 51904,
-15418, 42994, 25379, 47227, 13482, 53159, 27777, 17357, 63960, 31149, 57235,
-18431, 42651, 923, 34301, 65273, 8091, 46751, 27341, 16545, 31432, 58201,
- 8459, 43953, 25178, 52473, 7236, 38949, 26320, 50538, 9689, 30419, 62872,
- 8044, 41626, 15342, 58275, 33757, 11791, 37977, 47363, 4698, 61549, 34503,
-18300, 49000, 3248, 64967, 33968, 10827, 28537, 60741, 18101, 42465, 27276,
- 9044, 51762, 37418, 19859, 55034, 9260, 34006, 50128, 1346, 41294, 23391,
-53106, 3819, 38692, 20047, 60095, 2043, 31772, 57295, 15610, 33497, 51525,
- 3948, 37742, 47046, 10753, 60906, 27206, 3345, 52630, 38385, 8319, 31516,
-55445, 17204, 42030, 26422, 53373, 7756, 31334, 51860, 1388, 43284, 29821,
-18621, 59087, 38402, 12276, 34234, 52402, 20805, 48046, 13534, 38975, 20252,
-43850, 7679, 55789, 32829, 285, 37868, 44987, 17304, 59556, 27712, 2520,
-62072, 31773, 7776, 37031, 64719, 16942, 33678, 47482, 1922, 27821, 48849,
-17445, 58121, 3905, 37162, 48279, 16052, 64127, 25223, 41758, 8625, 50684,
-18779, 34455, 62741, 5471, 47093, 21696, 33648, 52269, 12828, 46413, 19677,
-31697, 51696, 7425, 65164, 14025, 41430, 25718, 60361, 8421, 28484, 46366,
-20666, 57368, 11268, 39058, 24765, 51364, 12281, 64895, 21353, 29845, 48961,
- 3616, 61531, 19795, 30148, 58416, 162, 45770, 29054, 7726, 51772, 33399,
-17801, 63361, 6130, 43331, 26503, 61297, 16995, 28547, 52037, 11591, 30405,
-47737, 280, 52828, 19948, 36606, 46394, 14771, 50525, 2194, 39691, 23706,
-65044, 7194, 38795, 21303, 58169, 15224, 29918, 47780, 12263, 55782, 29735,
- 4005, 48801, 27074, 8430, 61698, 37559, 810, 55330, 25474, 40595, 13930,
-62216, 20096, 31382, 48892, 4340, 40872, 10112, 60945, 27784, 1130, 50921,
-22316, 44615, 10003, 30932, 62249, 16616, 37941, 56762, 5054, 34829, 45020,
-15197, 61038, 18963, 30264, 54358, 16534, 27047, 45415, 13711, 50714, 23778,
-41362, 14536, 53023, 1902, 39837, 25813, 55900, 5537, 49151, 24519, 40172,
-10099, 57457, 30538, 18568, 47253, 11576, 54019, 15799, 36267, 42483, 4263,
-59410, 29473, 13194, 51084, 25165, 57014, 7933, 28929, 54907, 21087, 49077,
- 9856, 40847, 17570, 54376, 36301, 3200, 41656, 23991, 59809, 5851, 49253,
-20187, 32477, 43589, 12224, 63056, 22154, 46057, 8707, 32719, 64658, 3606,
-37303, 59422, 7065, 41621, 23546, 64264, 13710, 51155, 26671, 40784, 11655,
-52642, 2758, 30046, 64027, 20260, 33964, 50868, 1301, 45946, 19580, 38247,
-58678, 11704, 27677, 63027, 694, 42032, 23776, 51983, 5885, 42526, 20685,
-63616, 1449, 51678, 32744, 7489, 54211, 26548, 45435, 3745, 62753, 14882,
-39420, 25890, 54767, 8740, 36987, 57729, 4519, 32740, 61928, 7480, 37574,
-50678, 3668, 22582, 48871, 7714, 61020, 25213, 41151, 15406, 52083, 19777,
-37372, 61900, 1771, 42380, 22968, 54838, 4053, 33911, 60601, 19506, 42379,
-15087, 54088, 36067, 4542, 55783, 22727, 30152, 46565, 1896, 60404, 19034,
-27704, 52662, 10569, 31113, 58384, 13496, 42905, 19749, 38142, 55099, 3949,
-35112, 45504, 12094, 58004, 32898, 15570, 64272, 3111, 30013, 44204, 20607,
-61830, 16161, 47550, 33374, 12427, 64451, 25775, 42631, 14347, 51008, 23651,
-44831, 9948, 65038, 20368, 28070, 58344, 7551, 44365, 19933, 36409, 56118,
-12593, 29525, 65460, 21200, 44047, 754, 61155, 11711, 39127, 21512, 64390,
-15419, 33622, 55517, 10034, 47127, 27239, 3461, 56771, 28720, 6865, 62144,
-26394, 41754, 1557, 64940, 24807, 47779, 16164, 38468, 62853, 11658, 27176,
-50940, 6492, 35965, 53915, 14040, 47505, 21523, 55824, 3558, 30729, 50690,
-13671, 60677, 37242, 9348, 54381, 25704, 45351, 10682, 30256, 53802, 1292,
-39148, 19563, 56749, 32393, 3118, 53743, 25374, 41016, 14627, 61234, 29764,
- 8735, 58165, 35447, 3219, 60122, 17169, 43397, 21744, 38842, 1219, 55032,
-35351, 19260, 53013, 3998, 34596, 44516, 14677, 62748, 29480, 3259, 46685,
-33967, 9321, 57139, 37964, 15835, 32860, 52912, 7024, 43240, 24670, 65234,
-14320, 40587, 22000, 54972, 10866, 39411, 23925, 56072, 12343, 40445, 4802,
-57195, 21854, 35235, 65403, 8938, 42521, 25824, 58872, 6150, 32014, 55209,
-18091, 28573, 59427, 10221, 42096, 25633, 55471, 3601, 34283, 44417, 8203,
-59587, 24103, 40071, 14530, 60843, 20034, 38196, 52917, 15204, 28255, 48359,
-17839, 58393, 7729, 35783, 46934, 2675, 57432, 15122, 36336, 52644, 19802,
-34497, 46904, 14245, 63120, 36244, 6308, 58164, 23721, 46696, 3653, 42373,
-21809, 52955, 9592, 48325, 29441, 2267, 50468, 35419, 10789, 62626, 38098,
- 885, 57328, 29713, 8933, 55100, 35082, 22134, 62198, 10583, 45339, 20858,
-38757, 13500, 61736, 19692, 46638, 34949, 4600, 65155, 26027, 44104, 503,
-31091, 63427, 18801, 49018, 9455, 33631, 60891, 1145, 41851, 17758, 47843,
-33235, 4439, 62361, 36904, 19507, 29911, 60311, 8132, 44085, 26155, 55604,
-10774, 35094, 53047, 16547, 41912, 7850, 58430, 28908, 1949, 51638, 36887,
-14774, 55329, 27133, 18126, 48740, 30359, 14527, 55793, 32806, 9699, 48792,
-34918, 636, 62516, 21020, 34471, 58720, 15994, 43210, 8490, 57449, 29221,
-17390, 55040, 32432, 7528, 49613, 21827, 35031, 47255, 9800, 57065, 16899,
-34728, 59625, 11687, 30913, 47640, 16334, 40360, 23570, 61822, 10629, 38560,
-19140, 41907, 26998, 53221, 6149, 43500, 21161, 61091, 17979, 28014, 49354,
-10598, 41986, 23484, 55873, 14679, 43267, 11666, 39261, 26488, 53074, 12483,
-32176, 47350, 4752, 55635, 28872, 10795, 34615, 48534, 14952, 37830, 57464,
-10192, 30323, 48874, 850, 65500, 28245, 17978, 48467, 38033, 11288, 63679,
-20159, 43829, 31864, 8722, 56435, 35982, 22213, 45815, 1072, 51776, 25390,
-61991, 6516, 27633, 47529, 17331, 62659, 29885, 640, 50790, 36864, 22775,
-47856, 11067, 58999, 37348, 4468, 30004, 56960, 7200, 40547, 21449, 54911,
- 8439, 30172, 61520, 5068, 39329, 26474, 49046, 988, 35803, 53288, 15852,
-32025, 62690, 1640, 41730, 23350, 50261, 5302, 40007, 15367, 51015, 34343,
-24425, 57468, 3714, 47625, 25957, 40469, 5632, 62823, 19937, 37754, 54265,
-16275, 35603, 49631, 10877, 44367, 19318, 57061, 31460, 8868, 54127, 34550,
- 4908, 28351, 55353, 18143, 34135, 64217, 10684, 43167, 25123, 39082, 8919,
-45157, 26187, 59259, 10427, 43600, 19931, 30299, 41255, 6391, 65136, 19470,
-34986, 59326, 14381, 49821, 23668, 44124, 6864, 63540, 22760, 45391, 8183,
-35977, 56228, 2002, 48978, 20916, 39503, 13637, 45830, 26582, 53431, 5894,
-61782, 24120, 46676, 12713, 29750, 63389, 10531, 48723, 18248, 30579, 54343,
- 7312, 37130, 58762, 19074, 27786, 51760, 1367, 43770, 24091, 63674, 13093,
-39582, 22011, 51150, 9256, 32764, 59443, 3470, 43787, 25569, 61848, 966,
-48956, 21067, 34530, 46114, 15845, 51101, 2481, 39980, 24246, 55868, 13140,
-38893, 21174, 64224, 10971, 37278, 47966, 5620, 31384, 52459, 13211, 45444,
-22171, 61616, 16434, 31204, 46753, 17, 53557, 34998, 7469, 46224, 30444,
- 2269, 63861, 35951, 6605, 45118, 30637, 21011, 60510, 10878, 30112, 43439,
-23431, 64454, 8176, 28854, 54328, 5048, 43038, 27177, 17325, 51872, 37564,
-15180, 55848, 32410, 12682, 63422, 27450, 19340, 57503, 38105, 14589, 59935,
-23500, 47014, 6558, 28297, 48485, 17513, 36306, 65106, 4797, 46943, 16772,
-31599, 50166, 3784, 59533, 26383, 42564, 1257, 54251, 28148, 8783, 52274,
-37334, 10459, 55997, 22325, 49778, 12582, 36977, 44052, 20869, 53187, 14373,
-39069, 26834, 63740, 10162, 50430, 22034, 43405, 14751, 57179, 1871, 46727,
-34836, 13450, 61826, 20745, 47472, 795, 31588, 65212, 22610, 46539, 12811,
-33403, 54803, 16075, 47265, 28584, 6020, 38082, 61649, 1196, 52271, 23851,
-39631, 4345, 57395, 20321, 29155, 46484, 12412, 54117, 27342, 4964, 49900,
-36688, 22194, 46371, 3947, 60704, 13990, 42287, 25177, 62192, 2152, 40560,
-19189, 54210, 25036, 38854, 2966, 49334, 22017, 61331, 6855, 34114, 56579,
- 4047, 43198, 25960, 55434, 478, 49680, 17673, 29864, 64121, 12684, 33765,
-45823, 1075, 56818, 31694, 17005, 65073, 38018, 1943, 29781, 59345, 4929,
-62264, 20376, 44001, 2312, 63425, 21684, 39728, 13880, 60127, 25306, 50787,
- 6453, 64020, 18819, 27839, 51489, 13371, 45160, 24679, 39408, 8741, 57090,
-34091, 3255, 50955, 27606, 7422, 53707, 38176, 17947, 48251, 5499, 64018,
-20137, 41304, 12353, 37349, 49428, 16559, 32644, 56893, 9786, 39786, 22023,
-55704, 14438, 46336, 6747, 32259, 52631, 18316, 27266, 55823, 14975, 43797,
-24008, 60896, 123, 31993, 48799, 16179, 42009, 22035, 56729, 11841, 30917,
-60468, 18657, 43572, 9567, 48705, 28417, 17369, 57691, 35465, 11404, 59781,
-31184, 19710, 62544, 6262, 48687, 18432, 35685, 44246, 13021, 59647, 23147,
-48274, 11991, 29342, 45254, 499, 60418, 21313, 30577, 53104, 4018, 39241,
-15225, 46401, 21949, 61268, 12514, 37096, 46239, 3209, 49939, 21151, 29515,
-57841, 1191, 48342, 22289, 54906, 5581, 38591, 26966, 63004, 217, 51453,
-16277, 44542, 23419, 52130, 2687, 43070, 28282, 9762, 60409, 37537, 15682,
-31300, 49420, 12204, 59756, 28627, 16637, 43837, 24546, 55008, 6777, 64516,
-22456, 41585, 10521, 32166, 48894, 14913, 34328, 59182, 5269, 42585, 23498,
-36677, 56313, 294, 43339, 22429, 50668, 15447, 42103, 9967, 60990, 35118,
-18545, 55576, 6155, 47342, 34422, 2220, 57863, 26200, 41344, 16850, 52689,
-29882, 8529, 35214, 44881, 13392, 59775, 30080, 6765, 63227, 20476, 29586,
-58248, 16369, 45456, 4234, 53523, 27040, 41605, 1120, 50843, 22971, 62897,
-17012, 36096, 57417, 1652, 29338, 49692, 6384, 41819, 23081, 64602, 16893,
-28224, 57442, 11632, 49733, 24680, 40709, 12720, 59107, 22997, 50085, 3508,
-34766, 54656, 18289, 48509, 366, 33411, 50696, 17813, 60236, 31792, 12214,
-58458, 34189, 2158, 65449, 27119, 8234, 38484, 51232, 271, 36361, 46526,
- 7274, 28719, 51676, 4359, 42123, 19845, 36750, 60645, 9628, 51572, 27380,
-11675, 43581, 25632, 58026, 12633, 39485, 23336, 53397, 9537, 35434, 64357,
-14630, 44909, 32415, 16149, 60351, 24895, 42846, 7219, 34454, 62210, 3521,
-27647, 57737, 6697, 45560, 22832, 56107, 2853, 38535, 26179, 59622, 6359,
-40486, 23534, 52755, 16279, 28483, 51418, 5388, 40902, 24951, 56506, 14740,
-39222, 4990, 59654, 25959, 41391, 3383, 63483, 21048, 35315, 56862, 11753,
-43806, 22155, 41090, 12563, 63725, 25575, 44245, 16535, 60403, 7329, 37020,
-44025, 18074, 58147, 28470, 10056, 63147, 38345, 18418, 33502, 47863, 6035,
-52627, 18023, 33818, 59406, 7284, 45868, 14425, 65020, 26646, 40161, 9325,
-45597, 25555, 50442, 14334, 29458, 64732, 12238, 40158, 22810, 60124, 7707,
-37174, 47650, 4268, 54054, 23849, 40101, 14126, 50467, 5650, 45224, 27687,
-19284, 52177, 35564, 24081, 40258, 8977, 56219, 26958, 38510, 7034, 57516,
-26524, 45594, 594, 40754, 21122, 32997, 44481, 3003, 59278, 34408, 6835,
-62502, 18763, 47841, 30211, 12587, 60844, 36924, 16854, 58662, 29827, 473,
-62389, 25514, 40208, 10128, 46678, 26867, 59081, 7760, 29719, 54228, 2032,
-42319, 24296, 65368, 4708, 41338, 26380, 60579, 17468, 41206, 1844, 63672,
-37999, 8195, 33853, 51437, 13130, 39081, 26481, 52910, 10487, 34028, 63093,
- 2535, 44335, 24634, 51714, 5810, 39023, 22921, 64113, 3623, 33646, 52094,
- 6690, 43492, 26075, 53383, 2905, 45839, 26725, 41768, 14516, 55028, 27837,
- 8179, 52426, 31754, 2214, 57137, 36129, 8814, 65184, 25361, 39637, 14172,
-58142, 8252, 34105, 63449, 23887, 50626, 2013, 40199, 26428, 58494, 14476,
-30673, 61752, 10081, 41742, 16819, 32184, 60156, 13193, 40639, 24217, 56736,
-11586, 47002, 21613, 34619, 55272, 5290, 39154, 25006, 62351, 13607, 35673,
-53248, 4341, 47341, 24717, 41594, 467, 52457, 21197, 39556, 4572, 61657,
-32473, 15262, 48093, 28657, 763, 52141, 37560, 20063, 56759, 2915, 40532,
-22656, 50950, 17122, 58119, 9475, 28338, 65484, 12902, 39381, 25616, 62167,
- 2733, 30352, 48623, 14243, 45583, 24891, 40056, 11604, 62877, 18237, 30351,
-47980, 5558, 56587, 13824, 37781, 64482, 18229, 50297, 27426, 3988, 53266,
-38417, 14112, 49884, 36743, 9745, 41058, 26366, 62069, 11900, 38502, 19539,
-59733, 14365, 43705, 34326, 4566, 47236, 19799, 38134, 63704, 14883, 32349,
-56794, 10580, 35624, 51981, 3320, 41678, 21931, 62574, 5713, 33931, 55880,
-18980, 41991, 9496, 64972, 26097, 41221, 11582, 61299, 25283, 45833, 13902,
-39941, 3228, 45165, 24910, 49610, 9664, 38115, 46303, 19371, 54478, 29954,
-13851, 60659, 27044, 17821, 58443, 37630, 11565, 64675, 25610, 54927, 12749,
-31854, 44971, 3190, 59122, 37079, 19666, 54715, 424, 32915, 63324, 7110,
-46036, 30699, 18100, 49848, 27353, 6390, 56890, 36282, 1989, 48352, 17729,
-56440, 28577, 12002, 51331, 38263, 16325, 32854, 65337, 11163, 42776, 20196,
-53739, 12982, 47280, 34520, 10922, 64472, 32207, 3753, 58624, 36544, 18874,
-62922, 8525, 30475, 50495, 17537, 44364, 21711, 52811, 11230, 36457, 49974,
- 9030, 45078, 18916, 32334, 60022, 4751, 53403, 28900, 7967, 48450, 35890,
- 1689, 50985, 19627, 30292, 65098, 3064, 40480, 14987, 51932, 30604, 954,
-55904, 27479, 12841, 64337, 38366, 9373, 28471, 51225, 20964, 41432, 32158,
- 5005, 56140, 18339, 52282, 32822, 1173, 57783, 20000, 36742, 47857, 4762,
-34490, 56196, 15258, 44300, 27340, 16771, 58347, 36288, 8198, 62496, 30326,
-20434, 59866, 35815, 8474, 55547, 13289, 47160, 34727, 58680, 17632, 42194,
-12067, 53344, 22297, 49331, 9824, 32034, 63049, 17311, 47600, 8299, 55166,
-23144, 39908, 15928, 53876, 23805, 41132, 1597, 55500, 21429, 40197, 5784,
-47021, 33034, 15497, 50234, 37394, 13834, 57727, 22766, 52164, 2702, 39194,
-24683, 61136, 15149, 34431, 53055, 8829, 45260, 30909, 19228, 51196, 10721,
-30811, 54198, 20863, 44862, 11954, 58091, 28747, 3409, 65165, 20464, 45193,
- 5594, 58654, 27415, 17087, 54323, 38299, 12896, 34537, 55147, 14735, 42680,
-25934, 56595, 11823, 40585, 23918, 62166, 10251, 39144, 21706, 58682, 7627,
-32841, 63931, 1158, 37651, 60191, 16582, 46467, 24456, 39749, 15119, 53487,
-21770, 42721, 6337, 47879, 26809, 51571, 17319, 40815, 10138, 32468, 56633,
-20163, 45434, 6948, 35302, 55061, 19513, 44860, 5041, 54256, 25510, 43649,
- 2815, 63395, 18202, 32165, 42512, 7866, 61504, 14266, 29944, 57878, 19203,
-49082, 7463, 46163, 29433, 17897, 64006, 10552, 33959, 57911, 17036, 29545,
-65412, 13678, 43140, 23083, 53971, 9546, 36746, 58634, 18441, 30016, 62218,
- 7693, 44188, 24648, 64160, 12255, 32487, 47705, 2141, 37866, 52304, 19960,
-44042, 5446, 55380, 33574, 19406, 52752, 7883, 32542, 59030, 3739, 53454,
-20926, 33338, 46066, 9020, 61127, 20469, 42412, 28250, 1683, 47753, 32275,
- 7560, 58800, 37759, 17388, 29059, 56447, 732, 27294, 60314, 7293, 51441,
-21821, 43080, 3224, 54879, 26673, 46733, 7061, 29172, 60964, 12052, 53857,
-27562, 9663, 51400, 37102, 4825, 27635, 45939, 20227, 58905, 13837, 31321,
-44201, 17222, 51764, 27367, 1033, 48935, 31724, 17029, 52475, 5174, 39149,
-23141, 56981, 8418, 34426, 54954, 19634, 62885, 7267, 31060, 57429, 14940,
-28836, 61413, 4152, 35613, 45621, 7878, 38409, 54048, 2886, 29824, 48537,
-18424, 43105, 1405, 40196, 21485, 63968, 16176, 28040, 49714, 8302, 42716,
-24100, 48905, 14837, 42121, 21915, 58816, 2938, 33957, 61080, 12143, 46251,
-29296, 19448, 64023, 37746, 5777, 32950, 47639, 19180, 60584, 1545, 40730,
-25475, 52445, 5609, 38674, 26914, 62828, 592, 28896, 45659, 17254, 50636,
-24523, 41681, 11732, 49065, 21240, 38178, 54272, 1592, 35075, 64017, 7580,
-28384, 57719, 17258, 29946, 61178, 472, 47742, 27558, 10187, 49194, 37104,
-18330, 61988, 31155, 13823, 56775, 23998, 42281, 9145, 53804, 34801, 20880,
-46769, 8816, 61360, 34723, 19131, 50653, 37259, 3478, 29990, 56758, 19463,
-43771, 277, 58203, 13598, 48427, 26967, 43046, 10701, 63790, 24347, 39515,
- 9804, 60816, 18085, 28520, 50199, 8850, 32559, 63216, 1574, 46529, 31226,
-11822, 52126, 22822, 43969, 2527, 48429, 16066, 41629, 26653, 63671, 340,
-30990, 6177, 50595, 26084, 64708, 2898, 34231, 41418, 18471, 54075, 4475,
-39349, 25942, 58319, 12780, 30957, 64429, 4888, 45607, 29759, 9860, 61672,
-25963, 43644, 13198, 64816, 22408, 54452, 9540, 28364, 55953, 4485, 44695,
-35045, 12786, 64502, 20845, 43558, 5824, 48520, 27949, 20180, 57570, 13668,
-38284, 59480, 2851, 34586, 63195, 7831, 39020, 25956, 49862, 16611, 35417,
-53497, 10835, 39876, 23579, 50732, 14927, 37594, 47492, 4129, 29270, 64704,
- 7367, 31493, 59662, 1937, 49500, 20314, 38545, 16713, 54296, 395, 48117,
-34461, 13448, 42641, 24761, 47252, 10758, 50484, 19932, 29731, 43780, 4711,
-63591, 11154, 50486, 31222, 3362, 57626, 34187, 19836, 62636, 1260, 44786,
-25973, 60134, 4460, 42652, 15485, 63907, 24768, 48494, 581, 38974, 26752,
-65513, 9416, 38630, 17383, 52264, 23457, 46180, 4336, 53718, 35549, 20184,
-50345, 2331, 42510, 36199, 11356, 61024, 31812, 1159, 54200, 37157, 22131,
-48186, 5143, 38286, 50530, 7910, 33683, 55866, 2645, 41196, 25450, 46608,
- 5583, 52803, 12571, 35667, 49578, 16097, 29116, 54087, 4952, 43229, 18594,
-61282, 29722, 8548, 34711, 60556, 17779, 46974, 10334, 41639, 26002, 64381,
-12229, 38876, 26751, 49426, 13706, 60015, 566, 39025, 24396, 50429, 11158,
-57454, 36345, 15380, 54455, 22452, 44123, 10072, 64114, 34324, 12454, 48794,
-38450, 17324, 31545, 47119, 12917, 63911, 24686, 38845, 10028, 58064, 21780,
-49422, 16710, 32091, 42673, 2876, 60050, 22505, 47555, 17791, 37996, 63055,
- 7619, 33265, 48502, 1971, 54902, 28845, 8185, 61535, 38036, 20188, 57883,
-10363, 33632, 62456, 19662, 44223, 1803, 50387, 27550, 15373, 47408, 35666,
-22044, 52447, 945, 36657, 49009, 10628, 27436, 50708, 18534, 63831, 27258,
-14744, 49726, 36940, 8821, 61867, 24340, 56210, 11063, 33918, 47190, 5848,
-57580, 32510, 18310, 62827, 35254, 5049, 57028, 28593, 10756, 51199, 37878,
-17277, 43769, 24369, 53896, 3865, 41409, 13207, 51938, 24241, 58626, 9551,
-44544, 21471, 31389, 55457, 10451, 44534, 23709, 58288, 14244, 41609, 20914,
-54835, 8552, 35585, 61078, 2341, 30677, 57918, 6060, 45398, 27995, 15878,
-56920, 27236, 13819, 48738, 38411, 2771, 34363, 52204, 13309, 40518, 22697,
-65478, 16231, 31444, 57785, 2344, 45400, 22803, 49701, 5933, 32202, 59309,
-15490, 27692, 48239, 5411, 57880, 23847, 41411, 15430, 45515, 7131, 59956,
-21674, 52025, 10788, 32643, 62866, 15666, 39184, 24849, 61759, 2734, 38590,
-23076, 45968, 5510, 55310, 26354, 41728, 2193, 53738, 20301, 37798, 52710,
-13342, 28200, 59517, 19719, 41812, 6224, 64427, 28982, 19097, 57083, 33441,
- 5393, 53429, 18760, 45614, 61342, 23486, 46622, 14895, 38784, 27034, 59272,
-10675, 46561, 24147, 61599, 14695, 36130, 49219, 2136, 42586, 22050, 52730,
-14699, 37243, 47076, 18366, 51657, 5207, 39146, 26659, 48568, 2322, 43236,
-36223, 20755, 61789, 16354, 29613, 50945, 9193, 33038, 56671, 16283, 38094,
-63505, 255, 35987, 47444, 7404, 28021, 50023, 14859, 44169, 24453, 56478,
- 946, 31293, 62149, 6183, 43108, 25303, 59655, 1544, 36152, 61719, 8567,
-27964, 57164, 17641, 48546, 22257, 41140, 11152, 46273, 26843, 63400, 7925,
-44107, 25665, 59302, 17656, 30173, 64584, 4142, 52941, 31428, 18250, 56007,
-35996, 8558, 56697, 22206, 33454, 41871, 15800, 61861, 24061, 45850, 7622,
-42268, 14628, 55734, 22940, 38762, 11178, 52656, 26918, 38554, 9522, 51852,
-17569, 32169, 58012, 11496, 46599, 20553, 33393, 48034, 6431, 59659, 15402,
-38789, 26846, 64527, 9997, 31240, 58312, 17191, 27668, 45550, 15095, 56332,
-23216, 41134, 9371, 59212, 18629, 31014, 62648, 12341, 27546, 45551, 18026,
-59874, 10842, 35001, 63270, 17296, 40624, 23297, 60846, 1708, 33677, 58829,
-10164, 39624, 25307, 49060, 13134, 55705, 24802, 41340, 3097, 50335, 21112,
-31788, 56590, 1055, 43650, 22883, 54399, 6593, 41582, 21720, 31948, 48303,
-16087, 65113, 34275, 4251, 45108, 21589, 62100, 5303, 40251, 25513, 51579,
- 2856, 42775, 23131, 57385, 5884, 36098, 60835, 2036, 28842, 44814, 6332,
-52717, 23591, 41543, 405, 33692, 64907, 8830, 53160, 24548, 39265, 13040,
-55983, 877, 29181, 50750, 15714, 40572, 22903, 65518, 12100, 36010, 47385,
-16157, 29778, 45731, 3757, 51314, 25805, 42715, 12396, 58650, 32876, 9843,
-63766, 37789, 4288, 59598, 11523, 40691, 25664, 64389, 16636, 38289, 58889,
- 1972, 33694, 43387, 6095, 59638, 31877, 17275, 51167, 33993, 5437, 45568,
-26363, 53605, 15094, 40897, 23245, 50806, 1843, 40500, 14109, 52845, 20978,
-36954, 65395, 1066, 30300, 47778, 6780, 62703, 15662, 32109, 58253, 20282,
-45912, 145, 39811, 25852, 63042, 5053, 41664, 17802, 61766, 30365, 3321,
-48516, 32715, 6984, 60146, 24034, 49934, 15644, 40242, 22767, 53327, 13731,
-33709, 64771, 10513, 37862, 47974, 4585, 60870, 31447, 19687, 58520, 10655,
-42710, 25183, 56636, 3901, 29788, 54420, 7461, 43204, 23976, 39599, 10712,
-64417, 20138, 37457, 45222, 161, 62889, 38014, 17620, 31865, 51471, 2479,
-63620, 25466, 39629, 13817, 48652, 25091, 42739, 6366, 46258, 23022, 55525,
- 8798, 33226, 52871, 11879, 60261, 20705, 48406, 13625, 37251, 62935, 16810,
-29454, 57393, 5811, 40654, 24728, 49323, 3589, 32315, 55668, 17004, 35050,
-50929, 9075, 39977, 14908, 60218, 25348, 39523, 10228, 50067, 1675, 32762,
-56704, 6844, 44524, 19319, 52742, 1021, 31096, 43609, 8689, 56519, 27574,
-17792, 61104, 35060, 7424, 59575, 27568, 148, 57957, 32444, 20656, 60067,
-11985, 33848, 63336, 17926, 53443, 7096, 32581, 46327, 1265, 59893, 25386,
-41933, 4202, 49702, 30395, 12529, 54395, 27129, 17128, 61915, 37403, 19902,
-58637, 5244, 40202, 21624, 49093, 15544, 41586, 22504, 56859, 12744, 33620,
-49372, 17896, 30789, 53754, 11396, 44778, 30321, 717, 62051, 33289, 19084,
-56180, 4390, 39019, 21860, 52510, 12435, 35718, 49846, 6141, 45324, 22901,
-40141, 14290, 60982, 2618, 39817, 25184, 46995, 13752, 59576, 159, 48522,
-30417, 9457, 36805, 54732, 18270, 32481, 48245, 5231, 64456, 18951, 31787,
-59235, 2552, 44537, 23930, 62296, 5686, 40685, 22323, 51410, 1831, 29285,
-62530, 12512, 41953, 24917, 56110, 864, 41331, 22519, 49698, 6923, 37129,
-63592, 3691, 48008, 32678, 6111, 52687, 24697, 44426, 3036, 51029, 20357,
-36307, 56974, 1432, 48901, 30847, 22138, 51161, 3756, 28446, 56948, 8900,
-42416, 25345, 46430, 15209, 51259, 21534, 62844, 661, 32055, 46090, 7650,
-63989, 16197, 29548, 58683, 6081, 40515, 24866, 59803, 13005, 34525, 63221,
-18423, 45381, 5021, 58216, 29252, 10140, 43165, 25187, 53129, 14198, 31835,
-48728, 18903, 59264, 10996, 33475, 62584, 14782, 28359, 45827, 20113, 50420,
-15371, 38150, 56950, 18238, 34264, 62444, 13641, 48966, 27566, 15392, 36668,
-45436, 4362, 62280, 23265, 41329, 19466, 60497, 9242, 34821, 57094, 3923,
-42325, 24789, 59354, 5356, 53366, 13240, 34658, 64255, 21793, 38771, 6398,
-53603, 18995, 29084, 55190, 14624, 46644, 21322, 29150, 56025, 17798, 44806,
- 6911, 53225, 29674, 14189, 47751, 22741, 55787, 12391, 28876, 46661, 737,
-57846, 23135, 41634, 14053, 63200, 3543, 35275, 58908, 8716, 30833, 61681,
-19856, 46527, 29893, 7661, 55979, 16555, 41561, 24970, 54406, 11840, 40249,
-23701, 50764, 8545, 38825, 22525, 55104, 13878, 49135, 32464, 16004, 53951,
-28198, 8880, 50323, 37644, 19039, 56012, 12246, 43659, 36256, 4254, 29967,
-62576, 9550, 46748, 25220, 42460, 83, 55722, 28721, 18475, 35577, 44596,
- 9703, 54664, 22061, 32531, 62222, 6568, 39838, 20995, 49562, 15144, 32598,
-51855, 12908, 60639, 34316, 4046, 55242, 28457, 16150, 52345, 27150, 6728,
-56104, 38427, 12003, 29297, 46113, 9889, 56524, 34036, 1420, 65300, 17864,
-35537, 57929, 3725, 30121, 49382, 16484, 44253, 25682, 40735, 7642, 31006,
-58585, 3309, 34171, 49336, 11787, 44664, 22350, 65522, 14942, 29704, 58113,
-10685, 37813, 47939, 752, 27514, 61691, 21311, 46887, 3241, 52517, 34146,
-20674, 14398, 64062, 22455, 41150, 12597, 60598, 24878, 39438, 13553, 65387,
-21054, 33473, 50144, 5565, 45106, 31488, 10506, 50599, 38181, 19984, 48271,
-13937, 35567, 55164, 6240, 45919, 28134, 3658, 50043, 24804, 42066, 15185,
-57214, 23074, 39327, 12127, 54938, 28522, 17771, 60931, 34070, 8375, 38475,
-51032, 3305, 28568, 52914, 10315, 43018, 26616, 64784, 8915, 33168, 54854,
- 3944, 37220, 47894, 7408, 28232, 64021, 3186, 41663, 23275, 59477, 15660,
-36183, 51924, 7655, 43373, 25196, 47920, 15858, 57586, 31546, 2394, 61408,
-29326, 15665, 56780, 34785, 9727, 53673, 26701, 48824, 17379, 64873, 6932,
-42982, 29260, 17019, 54081, 20690, 38451, 59073, 2802, 28143, 61197, 12237,
-41358, 24880, 50355, 8052, 42359, 21987, 53616, 12599, 39426, 25624, 56448,
- 7705, 35131, 54668, 15934, 43068, 23603, 53102, 8863, 38494, 21006, 60842,
-11127, 32123, 55466, 15809, 42769, 27199, 18224, 57359, 36682, 12796, 64832,
-38387, 16487, 32341, 60508, 11179, 44325, 23806, 40188, 6926, 64304, 19188,
-45809, 37579, 14230, 53112, 31942, 4634, 65059, 37944, 7094, 34768, 45129,
-20221, 53888, 11858, 40561, 23574, 53109, 36464, 11145, 46435, 19671, 52040,
- 9387, 29080, 49852, 2564, 39725, 25311, 54720, 14518, 34985, 49705, 2102,
-63478, 27878, 7688, 57987, 38012, 77, 28603, 46969, 20603, 52802, 3651,
-37499, 55996, 8158, 33367, 65305, 10558, 27312, 53726, 3398, 29942, 43482,
- 6807, 59321, 19629, 51143, 30447, 11429, 54860, 35563, 7230, 49817, 24786,
-44231, 16670, 53499, 30014, 11463, 50396, 36890, 17787, 43888, 25372, 55678,
- 2346, 41576, 15523, 46609, 26632, 60763, 575, 42310, 34121, 7584, 51910,
-38448, 2504, 31704, 61179, 20486, 43058, 4766, 35599, 62739, 9564, 37198,
-45053, 16435, 65037, 25585, 39236, 10010, 54599, 20115, 30534, 48384, 15905,
-41666, 24876, 54454, 11975, 39516, 4327, 60358, 22768, 33747, 49948, 9281,
-61459, 19758, 34235, 59374, 2208, 43049, 26208, 64836, 4525, 30304, 59884,
- 7717, 37421, 45854, 2682, 64237, 34376, 21731, 59090, 982, 41063, 25798,
-64970, 14697, 45350, 21278, 54596, 33149, 6654, 57249, 17953, 36420, 49526,
-12680, 61753, 5749, 53374, 25072, 40107, 1246, 50803, 16886, 45623, 26525,
-63860, 9116, 37986, 58812, 1008, 27749, 45979, 19133, 50255, 11615, 35893,
-43791, 9489, 58558, 35512, 14521, 49163, 23436, 61079, 5729, 30976, 49954,
-16291, 42145, 23986, 53790, 12183, 40443, 21861, 62577, 7010, 31902, 51503,
- 925, 64676, 22387, 42595, 15385, 54520, 27446, 8385, 61274, 32483, 104,
-36991, 50877, 7884, 42160, 24037, 62338, 12555, 34138, 54928, 6507, 43461,
-31692, 18368, 59125, 7356, 42678, 30797, 48024, 3808, 54920, 26878, 38520,
- 5291, 55657, 26856, 41239, 3281, 58003, 18812, 37312, 62656, 14369, 27117,
-57272, 3877, 28923, 65030, 8851, 44477, 23090, 40064, 14722, 59082, 34684,
-19010, 62272, 10567, 31425, 48498, 4745, 65124, 32232, 7495, 51173, 36773,
- 2556, 46664, 22211, 64311, 13279, 33368, 44711, 15642, 60232, 35065, 1632,
-50291, 20807, 44653, 14116, 62470, 27537, 17316, 58383, 38046, 20937, 52852,
-10167, 32220, 50186, 4899, 40104, 21644, 58108, 13728, 32302, 64958, 6475,
-39912, 24304, 45891, 10433, 51505, 26213, 39447, 919, 63062, 20877, 44071,
- 5506, 38740, 26167, 51782, 12059, 34913, 62398, 4541, 46675, 27408, 10489,
-37855, 51040, 16507, 47101, 30205, 804, 56297, 36605, 16618, 33437, 60410,
- 4060, 48640, 32629, 14783, 64695, 27665, 9243, 37081, 59036, 3453, 40744,
-26494, 56871, 5104, 43840, 25394, 51733, 2137, 29546, 61911, 8629, 44993,
-30314, 349, 49599, 27140, 7740, 55400, 27881, 4456, 34492, 52280, 15786,
-59504, 31625, 10383, 55530, 33673, 22, 48834, 22955, 57583, 13394, 27703,
-47826, 17634, 59899, 27202, 4065, 57559, 32953, 17151, 61573, 1957, 48382,
-22252, 32178, 64847, 4421, 37543, 57369, 15881, 32836, 61712, 7998, 44366,
-23304, 60401, 11363, 41403, 20440, 33324, 55044, 12430, 43657, 18102, 64785,
-36718, 9382, 44468, 26064, 61366, 13816, 29974, 47642, 1060, 37745, 49559,
-19572, 36641, 58449, 12308, 46530, 24253, 40176, 1514, 61133, 25203, 47830,
-13574, 29673, 64524, 2121, 32968, 58686, 6203, 39926, 21572, 63542, 201,
-31146, 60198, 8779, 47726, 19316, 32376, 62981, 9217, 52055, 21097, 30923,
-48862, 12155, 65235, 27189, 16209, 54387, 38124, 8958, 47141, 24911, 56912,
-15096, 31235, 54618, 3124, 27586, 51523, 6897, 42166, 21194, 61122, 2511,
-37178, 52023, 7892, 28994, 64634, 213, 49892, 21654, 31989, 47680, 15957,
-55313, 2605, 44486, 26439, 39475, 5261, 51720, 16869, 29253, 56266, 10256,
-34428, 51237, 19121, 43478, 27478, 10986, 57135, 29630, 19606, 51769, 11525,
-36370, 46475, 17282, 55229, 7816, 34672, 51795, 1779, 40556, 16007, 49036,
-26211, 63527, 3900, 30926, 43715, 20292, 34152, 46715, 9141, 64298, 30246,
-14072, 59508, 35339, 3249, 43431, 24115, 54724, 16751, 35897, 42718, 8361,
-59542, 32418, 21919, 62405, 1852, 47620, 19638, 29419, 64882, 3212, 43352,
-20244, 36957, 58817, 11221, 28274, 61669, 4749, 34623, 51672, 8419, 46657,
-27855, 17708, 58940, 38212, 14568, 34362, 56542, 5210, 47977, 19564, 35550,
-52547, 13205, 43625, 25215, 56839, 17746, 31266, 54485, 4397, 43764, 22444,
-50083, 16250, 28432, 64934, 9892, 41868, 25751, 54126, 16656, 8157, 43800,
-23070, 39561, 10059, 63234, 20616, 48841, 11581, 32891, 52011, 15273, 45606,
-27799, 1331, 54876, 38467, 12322, 36356, 53032, 16432, 31417, 49345, 1869,
-56502, 30886, 8506, 51965, 37721, 730, 55153, 22109, 40347, 13546, 45253,
-24027, 58544, 14785, 43258, 25948, 56412, 11195, 41048, 24642, 57937, 6564,
-48681, 19116, 29860, 55899, 11108, 39101, 26029, 52333, 8120, 31629, 49092,
- 360, 44014, 13585, 34391, 61196, 16268, 42201, 25139, 62850, 8311, 29849,
-50589, 1412, 41762, 23434, 53875, 14241, 62321, 21334, 42160, 7103, 58471,
-23757, 47922, 12955, 33236, 58927, 19182, 44895, 2051, 57064, 23129, 40131,
-14815, 55108, 35627, 19332, 65312, 5539, 32987, 57959, 11493, 44737, 21308,
-63707, 10243, 28943, 44032, 13791, 55788, 23699, 41622, 63, 50753, 18758,
-29929, 48326, 13364, 63242, 20295, 49504, 12163, 32926, 65213, 14121, 46660,
-35945, 19242, 50807, 11909, 59394, 35730, 15255, 61264, 38473, 18158, 36031,
-62928, 9833, 47426, 27318, 2335, 50104, 38376, 14644, 27884, 62428, 19726,
-43875, 9915, 37443, 61870, 2440, 31648, 51848, 13904, 37007, 43200, 6573,
-50926, 25801, 39746, 8398, 59148, 15068, 42027, 25655, 50744, 9927, 45842,
-27971, 17636, 56225, 37287, 1247, 30652, 51861, 18390, 45800, 5670, 50726,
-22780, 35303, 55738, 6441, 27948, 49812, 19805, 54585, 7112, 40594, 23592,
-51781, 15982, 60155, 29113, 5498, 55672, 17691, 35035, 64257, 9384, 31476,
-54389, 18581, 43434, 4926, 37145, 56271, 20680, 41869, 15042, 46738, 26117,
-52454, 8426, 41518, 23171, 49083, 14546, 39790, 26130, 58073, 6008, 43669,
-24754, 39296, 3315, 55480, 17063, 36384, 45555, 4491, 58548, 30103, 13756,
-35753, 61966, 74, 41137, 22404, 49132, 12089, 38332, 59177, 18659, 31724,
-53333, 11538, 44106, 26823, 58490, 13687, 34224, 56077, 18641, 44031, 10293,
-36662, 62475, 5953, 41593, 19494, 31820, 64299, 11115, 48837, 21599, 33135,
-63560, 7586, 48415, 24019, 40049, 12857, 54456, 1315, 63179, 35220, 14800,
-49603, 38216, 6759, 60405, 27563, 3798, 49136, 30212, 20398, 58189, 11789,
-31338, 62164, 20265, 44609, 7996, 40072, 22912, 51736, 15404, 60284, 2522,
-27987, 52433, 18848, 38424, 49768, 7999, 29335, 53326, 19618, 47062, 6076,
-29688, 61734, 13764, 48818, 27087, 5031, 52650, 38361, 16665, 31984, 55436,
-10261, 40377, 25951, 53630, 13993, 47050, 577, 32490, 54429, 18499, 45246,
-29377, 14971, 60526, 37212, 1969, 49748, 29660, 8998, 55065, 23825, 45528,
-11393, 31737, 63413, 1816, 41494, 23364, 60078, 5994, 39269, 11431, 64159,
-21203, 39834, 10242, 60474, 32268, 2775, 56280, 36414, 19673, 51486, 1204,
-33253, 62424, 26199, 49080, 13809, 59409, 24619, 45174, 249, 38940, 26417,
-59812, 6129, 30741, 63810, 11021, 48202, 29935, 20682, 61529, 4695, 45474,
-22499, 60455, 11594, 42396, 19335, 64171, 28575, 15871, 47799, 25907, 43000,
- 7758, 63219, 26694, 49039, 1754, 38966, 21474, 62699, 6233, 32947, 54023,
- 574, 47165, 30563, 17432, 37343, 62924, 3717, 45513, 24051, 61369, 4782,
-34004, 57667, 15923, 36845, 65295, 21835, 51637, 6343, 28693, 54196, 2167,
-47818, 17474, 37892, 55883, 13080, 27747, 60494, 8832, 44933, 33660, 3274,
-38125, 52839, 17803, 31395, 44701, 3840, 55152, 28950, 7941, 37037, 63795,
-14051, 32175, 50884, 8734, 60752, 30305, 1439, 45191, 24490, 52095, 13592,
-39997, 24204, 53170, 6869, 32565, 48018, 2333, 61662, 26238, 38724, 9717,
-58664, 20263, 33602, 61422, 6310, 43633, 23717, 38953, 1415, 45603, 23573,
-54311, 5924, 39378, 22877, 57952, 3978, 32520, 43607, 21629, 53671, 2858,
-28312, 46643, 6222, 54821, 21934, 42574, 13107, 35553, 57386, 17976, 30135,
-54731, 4125, 46795, 35179, 7351, 53619, 28433, 16632, 38445, 56195, 8611,
-28147, 49717, 18565, 63047, 10966, 31441, 54870, 18145, 45267, 35364, 212,
-55541, 19021, 36670, 63745, 3495, 42587, 13320, 47884, 22682, 62408, 9679,
-35538, 58504, 15232, 30289, 63054, 3265, 45564, 17148, 32574, 60666, 1448,
-42186, 31526, 18190, 63143, 4158, 42870, 33905, 11147, 45276, 25556, 51349,
- 2347, 42230, 22121, 49877, 5999, 34075, 62820, 14498, 46980, 27671, 8748,
-59644, 36103, 3550, 61922, 19202, 31794, 57344, 10578, 33890, 62358, 4092,
-51738, 19896, 30816, 49650, 11838, 59230, 19628, 32725, 62059, 9647, 28683,
-51006, 19501, 43413, 6515, 52155, 27929, 16752, 58036, 34430, 5766, 63568,
-28841, 15486, 46188, 1259, 62285, 25107, 38901, 4987, 46573, 21543, 51057,
- 3902, 39835, 23383, 59398, 28850, 13412, 49056, 25409, 57499, 6647, 40708,
-24261, 58389, 620, 46056, 18748, 30017, 43836, 3388, 60983, 18274, 31055,
-48414, 22019, 42539, 5134, 61551, 27061, 18099, 38460, 56248, 12449, 33555,
-63761, 5812, 39696, 25417, 47544, 3166, 37172, 55219, 13165, 32641, 58870,
-10374, 45879, 24726, 41919, 11552, 56367, 36513, 4438, 27175, 57876, 15297,
-36745, 63008, 11099, 32227, 55690, 2865, 44599, 20083, 37950, 58022, 14640,
-27699, 63369, 6361, 42630, 24437, 60131, 4415, 32774, 57708, 18988, 38192,
-49296, 7778, 27371, 64453, 3337, 42660, 22683, 56063, 13244, 33728, 63872,
-19266, 46984, 3057, 39096, 25291, 57541, 17377, 51043, 9498, 29208, 45938,
-16685, 53571, 26019, 49133, 1962, 30248, 45755, 15474, 52692, 22990, 41174,
- 8724, 46384, 26349, 57972, 12629, 40574, 2998, 35413, 53453, 6509, 30206,
-50305, 18498, 57198, 9391, 43597, 23327, 54187, 15844, 34167, 42941, 8111,
-52407, 14885, 39710, 26218, 54572, 7281, 38839, 25889, 50546, 3169, 35393,
-53594, 6750, 60672, 21319, 38519, 11464, 56874, 18937, 33333, 55414, 10206,
-44412, 23663, 51788, 14221, 39914, 20992, 59693, 5525, 28043, 52619, 12092,
-40686, 21230, 51402, 13208, 43515, 20465, 54460, 3046, 28013, 46167, 9842,
-35868, 60143, 14281, 43019, 33744, 21260, 64353, 3960, 45840, 36411, 15559,
-53334, 29383, 12063, 57751, 27238, 9570, 65437, 36448, 11672, 61135, 21942,
-42541, 16083, 52220, 23899, 48644, 5839, 41184, 22368, 47452, 17350, 37479,
-59358, 7199, 42395, 23182, 63110, 3139, 38816, 26863, 58894, 17181, 40189,
-20883, 52622, 5139, 47467, 16233, 54283, 28092, 11381, 35588, 57190, 15526,
-47579, 26787, 62609, 8475, 38552, 26999, 60531, 17695, 47487, 10649, 27969,
-64156, 7287, 41722, 18722, 34019, 57701, 14495, 31101, 48587, 1000, 65293,
-24244, 39911, 5923, 60973, 24116, 39882, 15363, 64668, 21361, 32280, 58529,
- 5181, 47343, 19531, 33830, 60271, 960, 44594, 36027, 20449, 47732, 3182,
-58254, 29727, 14390, 62678, 22945, 47610, 6762, 30331, 54104, 19819, 34216,
-52789, 5256, 40920, 25201, 53956, 2388, 44691, 21989, 41138, 10338, 56694,
-24769, 48412, 12707, 35432, 58074, 8528, 45326, 25242, 55270, 14479, 48285,
-22482, 61695, 8415, 33122, 57548, 11736, 29364, 60347, 16124, 42735, 22795,
-55439, 605, 31746, 51700, 17494, 45844, 29140, 11894, 50181, 37356, 1736,
-54314, 28388, 13432, 45057, 35992, 15217, 64781, 1080, 40892, 26193, 52764,
- 5765, 43585, 22670, 40342, 1569, 59793, 33261, 17757, 64557, 37475, 9209,
-46705, 19216, 50824, 32331, 9269, 56505, 35497, 21733, 49918, 10273, 43129,
-23513, 59934, 12870, 30780, 63736, 17229, 47115, 6875, 34315, 55596, 1626,
-43822, 18334, 30084, 53846, 12590, 35488, 52520, 9864, 38055, 59002, 14921,
-52019, 24805, 41277, 6478, 57655, 15794, 32662, 45599, 10417, 52575, 32246,
- 386, 44654, 24459, 53863, 15353, 42136, 22824, 60929, 10021, 52978, 28771,
-16579, 65284, 27317, 707, 50651, 36609, 7218, 60802, 28768, 17873, 38489,
-64863, 9821, 32007, 48193, 324, 39861, 22076, 51088, 15677, 34872, 65171,
- 8130, 28776, 49356, 776, 36418, 46386, 20325, 51896, 12692, 39720, 22538,
-50800, 8395, 28797, 62702, 12906, 36480, 55177, 16400, 33272, 50513, 9250,
-40884, 25054, 52648, 6133, 39673, 26667, 59334, 15164, 49266, 6646, 44108,
-34571, 21035, 62420, 38259, 3821, 33269, 59719, 13612, 41587, 23648, 63122,
- 6925, 35218, 58560, 13444, 30422, 62859, 5438, 39293, 20821, 55425, 60812,
-22041, 41170, 17670, 64339, 11896, 34361, 41918, 20849, 62158, 2296, 39916,
-24919, 48891, 3615, 57620, 21806, 33194, 62923, 515, 42895, 23977, 59284,
-15139, 32277, 61914, 12260, 40804, 23972, 44440, 2415, 52512, 27003, 39681,
- 5065, 49911, 16998, 30835, 61431, 3193, 38625, 26896, 65419, 9719, 32474,
-54542, 15278, 42059, 24766, 63792, 896, 38621, 26921, 60423, 6790, 30683,
-50457, 15137, 37838, 57311, 18810, 27096, 48648, 5307, 55284, 28169, 10375,
-52179, 31440, 18299, 48629, 45, 63331, 38442, 16800, 35080, 46081, 1790,
-50368, 24311, 39959, 6302, 54524, 30763, 604, 60349, 37664, 15326, 29516,
-64291, 3554, 52728, 27255, 10752, 32102, 53513, 12494, 41245, 21548, 55589,
-15178, 45153, 7621, 34116, 65021, 13473, 42646, 23456, 35959, 44639, 1977,
-63950, 22782, 41831, 4514, 55243, 13037, 40200, 22046, 57478, 11737, 39952,
- 708, 53166, 20343, 34308, 54493, 13619, 49853, 23519, 63168, 8336, 37409,
-52523, 17367, 28924, 44755, 9271, 53390, 21737, 48562, 12001, 34414, 51669,
- 1316, 45733, 12895, 41562, 24610, 63801, 10094, 40638, 22315, 54559, 14747,
-29102, 65263, 9789, 41686, 24598, 51518, 5331, 31242, 42985, 12285, 59955,
-24607, 39973, 8322, 59274, 16785, 29037, 65389, 11082, 33645, 48477, 8146,
-61536, 31322, 17835, 37033, 43220, 4910, 64573, 28277, 16385, 52089, 20438,
-39024, 6119, 63768, 35698, 263, 40621, 24884, 52670, 14461, 37972, 48228,
- 3635, 33063, 53163, 10296, 41084, 25586, 65176, 12526, 34521, 58373, 5193,
-43851, 24787, 63981, 15431, 42231, 23639, 49385, 7617, 57707, 21158, 32024,
-45563, 10429, 56457, 18024, 33601, 64044, 11270, 46111, 24616, 53892, 10158,
-48696, 31076, 3768, 55894, 26350, 43228, 2050, 55002, 24664, 41573, 5372,
-65301, 17917, 36834, 56993, 7711, 32466, 44914, 979, 54021, 25677, 41370,
-15450, 51312, 22583, 65015, 13984, 36202, 60171, 4450, 45039, 27166, 16389,
-62639, 28516, 5697, 46870, 34355, 11977, 62151, 37623, 21044, 46964, 2518,
-65535, 28450, 13354, 59330, 36749, 20023, 50289, 7311, 35147, 57140, 1399,
-45171, 21060, 35356, 49718, 5002, 44038, 34438, 21651, 57378, 14483, 44717,
-31896, 1919, 54785, 35601, 13610, 27822, 51619, 17109, 58655, 23830, 42232,
- 6319, 54299, 21010, 40742, 12876, 56282, 32408, 18631, 61386, 8788, 30582,
-57354, 2431, 34285, 64182, 17883, 46519, 35173, 1562, 52681, 22341, 43337,
- 5119, 57520, 20218, 30601, 63098, 365, 43948, 22133, 61492, 12086, 33148,
-42265, 18692, 65145, 30270, 819, 52785, 12527, 27941, 55542, 18654, 47802,
- 5205, 36290, 54336, 18137, 46842, 27487, 457, 50262, 36759, 17776, 52074,
-24297, 44402, 9615, 48555, 31689, 1738, 52263, 25753, 46282, 4721, 56429,
-28667, 8775, 50973, 36143, 12810, 64679, 26427, 41842, 9711, 50084, 19186,
-29825, 53784, 11251, 44431, 5071, 55495, 20268, 30177, 47421, 9058, 57530,
-34988, 19397, 64757, 13144, 42432, 23949, 59306, 8857, 40214, 24732, 57433,
- 6856, 41461, 21832, 49944, 2352, 34202, 57019, 7788, 44075, 23619, 58172,
-11628, 32817, 48128, 18436, 63429, 7923, 44663, 29003, 1124, 62713, 38363,
-12029, 32062, 59792, 19519, 41121, 6670, 61005, 37601, 20092, 28011, 47262,
- 5305, 56650, 19808, 28645, 59592, 13895, 48126, 28320, 18400, 58155, 35431,
-10002, 46581, 21797, 56253, 11344, 34825, 43510, 16286, 61953, 36427, 331,
-58306, 26538, 48781, 4765, 31309, 60058, 23496, 49202, 1040, 30373, 55393,
- 8902, 61009, 19058, 31632, 50165, 8089, 58907, 30249, 18035, 35467, 52499,
- 2706, 43760, 25240, 50097, 17027, 30942, 62226, 5480, 44046, 25796, 38679,
- 1581, 44770, 26693, 56463, 4191, 32976, 61811, 13911, 37612, 58925, 3294,
-30925, 44187, 9097, 57733, 28864, 19990, 55370, 35985, 2971, 46579, 26517,
-56648, 6312, 32543, 51136, 3897, 40012, 22219, 53428, 13055, 36413, 61412,
-17160, 48974, 34282, 2631, 55282, 18267, 46569, 32599, 840, 49977, 37914,
-20272, 57105, 15512, 40393, 23889, 52243, 474, 59131, 22421, 47560, 10732,
-33977, 54934, 2632, 41246, 26362, 50926, 11819, 30904, 54372, 18889, 42516,
- 5806, 64458, 28151, 18762, 58097, 27054, 7355, 61288, 35855, 19130, 49166,
- 6906, 40710, 16711, 53789, 20537, 38767, 8191, 56548, 32270, 2922, 61345,
-36613, 18595, 47823, 4993, 60043, 26855, 38862, 2668, 50733, 20274, 30672,
-57656, 8073, 38838, 26203, 44251, 14187, 60452, 23020, 38790, 11536, 62621,
-20414, 38624, 12989, 52327, 26240, 47026, 2987, 28838, 50633, 14631, 62079,
-24070, 39263, 8824, 58600, 30400, 3368, 45888, 38037, 7164, 27806, 47310,
-19633, 55792, 32789, 2109, 50285, 37098, 19100, 55021, 27510, 911, 49632,
-28580, 9106, 56430, 33872, 16954, 38153, 53193, 4723, 27512, 47066, 13935,
-64530, 28488, 16303, 52139, 31126, 11129, 58338, 18520, 28181, 62798, 12506,
-40873, 6047, 50050, 17096, 63393, 25735, 47671, 8122, 37934, 61280, 4163,
-32859, 45658, 7687, 62500, 25557, 39223, 2184, 60375, 26368, 42277, 5317,
-51212, 24181, 41021, 15876, 44809, 23410, 53203, 7297, 39314, 15134, 60426,
-25716, 41353, 9674, 59496, 24720, 38914, 11105, 53481, 17996, 36074, 56975,
- 8729, 31243, 51561, 2528, 55811, 27888, 10027, 48695, 38393, 19875, 58862,
-36621, 7380, 43121, 23025, 64795, 29292, 9060, 42371, 14460, 61112, 37784,
-10825, 57044, 28179, 3892, 65258, 34769, 15577, 7956, 59014, 37189, 19424,
-61787, 10438, 33140, 40823, 17376, 60415, 31657, 21262, 55584, 5793, 46372,
-16851, 36138, 58824, 6931, 40568, 15884, 65240, 34213, 18524, 37897, 49131,
- 1194, 63081, 27520, 14462, 51454, 30764, 8194, 36142, 54481, 76, 44779,
-26786, 52948, 12207, 48753, 18614, 31500, 46140, 13622, 62416, 27125, 16901,
-50913, 36033, 9983, 46885, 21594, 55025, 1985, 41437, 23576, 34223, 56615,
-12502, 49373, 30461, 17137, 54553, 36482, 2774, 46920, 25945, 53745, 13464,
-30722, 50799, 8653, 58820, 33394, 12748, 51632, 37839, 7851, 31893, 62950,
- 4110, 45325, 12400, 40964, 26069, 62536, 2529, 31611, 48061, 18986, 54703,
- 5406, 28961, 50337, 19576, 46193, 9226, 33461, 62899, 19460, 41225, 10044,
-53856, 22111, 46029, 14587, 33433, 51732, 3932, 45631, 27336, 15065, 47158,
-37626, 9317, 60139, 28898, 19585, 64766, 33755, 6668, 56693, 12844, 41952,
-23658, 55303, 11056, 48577, 21146, 58522, 9960, 40060, 22679, 51370, 6578,
-47261, 19774, 27961, 50600, 15742, 63567, 23294, 41022, 4794, 61618, 15692,
-30605, 52593, 12042, 39963, 20804, 62298, 15564, 43127, 24955, 60806, 7750,
-33100, 56503, 1493, 27731, 41177, 10284, 64410, 20339, 29531, 52302, 10841,
-40554, 22014, 60911, 7158, 31634, 45608, 4003, 63835, 29519, 13723, 44185,
-36051, 6794, 30696, 61157, 15473, 42291, 23596, 59817, 13515, 44493, 21962,
-57126, 9126, 33553, 59579, 16719, 47481, 35618, 1369, 50756, 38469, 16511,
-29826, 46752, 2825, 55993, 22269, 33448, 62220, 1187, 43015, 23773, 47930,
-16042, 52231, 23088, 40767, 11407, 55917, 22459, 39755, 12489, 52186, 23914,
-62837, 14681, 47384, 5198, 42339, 23531, 61228, 710, 51609, 21153, 41113,
- 5948, 53153, 25235, 48030, 4203, 44510, 23075, 59731, 10738, 34908, 61317,
-17121, 42072, 33811, 5718, 52987, 18142, 47783, 34767, 12344, 60921, 21742,
-52154, 16803, 33691, 61557, 8284, 40404, 14581, 64574, 24776, 41653, 7011,
-59582, 13948, 37030, 63360, 16041, 42098, 23781, 47728, 7391, 60724, 21796,
-45368, 33339, 9659, 54281, 37447, 3468, 43792, 24189, 61987, 6469, 36865,
-53969, 2385, 31556, 47270, 19027, 59025, 24237, 38753, 3462, 42859, 21182,
-58256, 14963, 44021, 24923, 55828, 12065, 30085, 48525, 14457, 55299, 33217,
- 9771, 47454, 21621, 58270, 11291, 34479, 63741, 3707, 49737, 32394, 13609,
-56826, 24593, 43586, 5448, 51557, 19440, 33008, 48411, 2809, 62123, 26397,
-41837, 6556, 27908, 49111, 16266, 41848, 22927, 47710, 7847, 35727, 61018,
-14817, 27167, 50339, 3203, 30005, 61613, 16185, 46274, 1387, 32655, 57971,
-21297, 52098, 4697, 31614, 48821, 16532, 45469, 37266, 14028, 55781, 27261,
-17288, 28777, 50698, 3387, 43931, 23662, 54665, 13611, 45791, 775, 50091,
-11441, 41235, 22791, 30025, 60776, 1939, 47890, 22440, 28958, 52115, 3391,
-46219, 27834, 9300, 58550, 32765, 16971, 37361, 44991, 3605, 60372, 24550,
-41115, 16478, 62071, 20599, 38556, 5626, 63961, 22730, 43472, 1304, 55619,
-37531, 8612, 31195, 59287, 3874, 41145, 25615, 64887, 5988, 38880, 27008,
-60863, 14793, 47590, 4309, 39563, 22870, 59078, 6003, 43371, 21875, 65091,
-11532, 39338, 23024, 62215, 1601, 35634, 44769, 16335, 27120, 64197, 2663,
-44087, 22596, 52750, 16295, 33781, 55507, 20847, 47326, 6791, 51797, 23524,
-40230, 8911, 59808, 22725, 37661, 64621, 8021, 40240, 24438, 54342, 14448,
-44203, 2146, 56881, 26306, 38749, 6219, 63504, 26839, 39609, 12017, 58301,
-20695, 34675, 64368, 420, 53263, 24518, 40753, 4948, 50792, 14514, 46534,
-38296, 18343, 30198, 59530, 3187, 39352, 26496, 62749, 5003, 34944, 45688,
-14739, 64247, 28257, 11476, 35353, 60340, 518, 43353, 32747, 7235, 54415,
-29654, 17788, 47851, 36945, 8785, 59153, 25355, 48933, 372, 35728, 53798,
- 9146, 30111, 49258, 19641, 45445, 15275, 34683, 58898, 21017, 44190, 5892,
-50360, 36506, 3617, 62571, 26412, 43654, 14156, 55799, 27333, 17112, 51698,
-36453, 8592, 49222, 21508, 56847, 16826, 49732, 27778, 3847, 55970, 37685,
- 7807, 29467, 62119, 1800, 39621, 25382, 50072, 4017, 29669, 43611, 13981,
-62918, 27375, 8982, 54831, 37422, 13525, 63666, 26657, 44507, 7588, 49906,
-28485, 13914, 60859, 36884, 4318, 31190, 65078, 7280, 46370, 31157, 396,
-61818, 25293, 44763, 6626, 34873, 41428, 21773, 56087, 12815, 36090, 49010,
-17015, 33864, 63223, 9837, 30514, 57588, 15722, 41955, 26794, 55490, 7494,
-32567, 49744, 438, 28260, 45497, 11400, 57810, 21221, 29627, 64010, 2253,
-43095, 25287, 49525, 10634, 29651, 54880, 339, 43106, 20871, 57617, 30899,
- 4887, 53419, 19857, 44652, 31396, 22684, 51530, 8432, 32198, 57381, 3945,
-29629, 50879, 19146, 40714, 1725, 62957, 18509, 29925, 59692, 12847, 49933,
-18160, 33229, 47775, 14421, 42495, 22956, 61296, 8343, 35745, 52293, 12010,
-46368, 26718, 55106, 11118, 34444, 51905, 1129, 39812, 18928, 63811, 37112,
- 3076, 28451, 45034, 17361, 64617, 37238, 1317, 29952, 52629, 17519, 46129,
-28716, 9834, 59729, 37522, 48, 30643, 65377, 16607, 36782, 56159, 12021,
-29063, 44521, 20751, 49890, 13998, 64963, 36947, 4181, 58993, 29890, 12779,
-63962, 37994, 20401, 45899, 4817, 56171, 37670, 18046, 52267, 10632, 34457,
-56413, 19729, 48339, 8014, 34979, 43920, 17375, 63873, 27156, 7468, 59766,
-30031, 1116, 47535, 38226, 6043, 35748, 57619, 16135, 32173, 64875, 5613,
-39118, 26629, 58512, 17983, 34618, 63307, 4489, 52999, 19455, 34992, 43733,
- 9939, 57771, 20473, 36598, 61014, 13405, 41107, 22336, 54174, 5890, 47009,
-20973, 50131, 12601, 32728, 53201, 4614, 29393, 47285, 10350, 56535, 26303,
-41890, 11754, 60489, 19825, 27999, 52277, 15441, 42446, 22806, 53331, 13410,
-35054, 55659, 19871, 44384, 7342, 52202, 21246, 32104, 63964, 9596, 40787,
-24744, 51774, 15039, 31664, 56295, 4836, 45273, 17928, 52021, 24175, 55674,
- 6010, 38074, 48839, 18018, 34051, 57149, 9653, 43193, 27369, 1069, 64728,
-38095, 17450, 30081, 56911, 13197, 44822, 33436, 1536, 51785, 17909, 30441,
-47436, 3342, 61050, 29691, 18481, 36405, 48306, 11101, 59666, 21412, 42305,
- 2868, 55090, 25267, 41683, 6808, 50817, 16953, 29659, 44037, 10049, 61320,
-22320, 31905, 57725, 1702, 27616, 61961, 8370, 44561, 21920, 52479, 12470,
-47435, 29352, 17662, 55552, 31245, 2249, 37391, 54111, 21023, 41595, 13430,
-56223, 24900, 47214, 10897, 34274, 60062, 1932, 51428, 23674, 43004, 6968,
-33935, 64483, 14407, 41346, 22689, 55981, 2480, 37301, 63878, 7208, 48448,
-28567, 12540, 56071, 32244, 15142, 54277, 24272, 45832, 8656, 37481, 50840,
- 1648, 34480, 60352, 11617, 42086, 23704, 62322, 2176, 32230, 45380, 12460,
-64825, 35983, 19349, 51152, 11245, 33731, 52480, 20660, 45125, 10104, 65458,
-26941, 53902, 7721, 32964, 46099, 17956, 58926, 34196, 4417, 51076, 20861,
-39054, 11366, 59688, 18107, 32813, 55020, 9590, 44751, 25685, 50967, 12561,
-28807, 54980, 18294, 35309, 49161, 9340, 29109, 59447, 17739, 49627, 1848,
-32153, 65418, 7742, 27719, 57048, 3583, 42593, 21866, 48527, 35579, 1424,
-64846, 13267, 39900, 22074, 58776, 14274, 35758, 64280, 18919, 47865, 4373,
-35458, 52062, 9894, 40124, 20219, 56962, 5352, 36181, 62349, 15921, 39496,
-25154, 46276, 9262, 49807, 17283, 35661, 60773, 11635, 48519, 3144, 35692,
-54333, 19940, 44044, 14665, 63868, 32125, 9312, 56670, 35857, 22595, 48394,
- 7095, 41120, 26375, 57300, 846, 29535, 63978, 9848, 35015, 51061, 16165,
-45336, 28833, 221, 64190, 22346, 39278, 5572, 62075, 29982, 16340, 59686,
-23650, 45166, 10098, 49380, 22612, 59581, 7076, 30692, 51626, 13724, 44399,
-22608, 61001, 6829, 40517, 24487, 47538, 14238, 54515, 22966, 44339, 8954,
-49605, 27580, 3883, 61224, 37456, 10364, 58500, 1049, 33303, 43710, 19789,
-52331, 10198, 34933, 54469, 1489, 28624, 57142, 17378, 43209, 9051, 29309,
-63622, 22502, 45146, 5912, 40182, 24460, 62270, 15242, 28291, 57280, 2212,
-36026, 49898, 19150, 42297, 11546, 54108, 26128, 63447, 49979, 22232, 41228,
- 9329, 52595, 23975, 47809, 15146, 42732, 7098, 51299, 23284, 45366, 13360,
-28674, 48642, 6022, 64089, 17831, 32804, 51172, 7871, 30993, 48077, 2620,
-63731, 25425, 40085, 15443, 57086, 34976, 7340, 64388, 21945, 37344, 59152,
-15533, 34063, 51443, 3472, 38889, 24581, 50219, 7114, 33810, 64579, 2625,
-47308, 32276, 6717, 62032, 28545, 189, 50062, 15628, 40387, 26388, 57202,
- 2484, 42802, 18587, 53964, 28661, 645, 61516, 35676, 10692, 50338, 26672,
-39907, 8216, 42552, 14654, 59258, 31427, 10794, 61802, 27685, 4448, 36594,
-60803, 13702, 49442, 28851, 11045, 53593, 36353, 3667, 63301, 19895, 48533,
-28411, 14503, 58734, 36986, 11465, 52382, 25538, 40726, 5831, 65236, 16592,
-30257, 46367, 8124, 53247, 26988, 38508, 10176, 62467, 19961, 36774, 59373,
- 5633, 33965, 55650, 18859, 45972, 11526, 38025, 54662, 15332, 47628, 36714,
-16731, 32076, 65470, 177, 33542, 58825, 7132, 42871, 24156, 60834, 15941,
-47869, 5575, 62301, 23703, 38785, 3829, 65014, 22126, 45274, 14727, 38805,
-20852, 63111, 11212, 54226, 29844, 17766, 45674, 5644, 60472, 32456, 11446,
-52815, 27194, 18180, 35546, 61878, 556, 42854, 25099, 60252, 6942, 39724,
-20979, 65048, 12894, 29212, 58167, 17927, 47862, 27825, 5173, 53065, 36996,
-18935, 57923, 7555, 41856, 29375, 1004, 47934, 24290, 62955, 16107, 40683,
- 5666, 58661, 22987, 38506, 12816, 48598, 20377, 60858, 2483, 42353, 28912,
-12737, 47272, 25759, 57804, 57, 43583, 24009, 52452, 4974, 39722, 21615,
-57610, 1637, 33639, 60174, 20412, 41540, 3863, 63169, 16377, 37043, 53587,
- 4750, 31033, 55140, 20045, 44333, 15290, 37239, 52441, 10547, 47142, 29717,
-17946, 59219, 11759, 50241, 20814, 30497, 52779, 3446, 42858, 26022, 53855,
- 8690, 41560, 26008, 56242, 14092, 44224, 25993, 58970, 13036, 38760, 22089,
-51607, 8600, 32241, 48712, 3839, 63649, 22149, 32549, 56175, 1339, 28916,
-42279, 16271, 65093, 27193, 6817, 58081, 37706, 0, 42685, 24611, 52372,
-15622, 44172, 4907, 58932, 34694, 19838, 51845, 11812, 45973, 19062, 38243,
-54939, 4075, 27190, 59945, 7607, 33823, 55708, 18057, 41995, 10268, 47399,
-25069, 50570, 8945, 35182, 42222, 4677, 57106, 32524, 11833, 36339, 54102,
-20566, 40042, 4342, 56458, 33128, 10618, 50593, 36907, 2643, 61972, 21517,
-39778, 4957, 58709, 32317, 18739, 53598, 38221, 14339, 30280, 47860, 18278,
-55062, 28651, 7188, 60176, 25127, 46825, 15578, 42657, 23462, 50931, 11507,
-33752, 60325, 20987, 47437, 203, 32003, 58385, 14209, 49033, 33151, 3716,
-51749, 37132, 12080, 54754, 21735, 30961, 61542, 4279, 39714, 20920, 44669,
-13261, 61168, 11, 46426, 31005, 19595, 56958, 2737, 36406, 62459, 18713,
-31863, 59439, 1633, 37143, 57121, 15358, 40326, 24984, 55071, 300, 42138,
-24445, 56453, 14566, 43632, 29425, 8542, 59485, 31287, 868, 50822, 25791,
-42418, 13669, 55109, 1934, 45605, 20349, 30878, 63391, 13078, 44346, 17807,
-58098, 37963, 10833, 28749, 54157, 18557, 44929, 12239, 37802, 58632, 17907,
-33147, 63066, 10479, 46947, 20165, 34665, 60605, 8393, 49797, 37444, 14300,
-47744, 21157, 58442, 3012, 31518, 63682, 19287, 46911, 28616, 463, 52361,
-38329, 20126, 53923, 15805, 44642, 23130, 40678, 7564, 60144, 32791, 15306,
-51187, 22427, 42286, 9772, 61729, 35216, 5077, 55805, 21975, 42471, 9372,
-54814, 22568, 34942, 43781, 649, 58166, 23812, 40170, 12776, 56019, 23077,
-49067, 1504, 28426, 44939, 14102, 49713, 27273, 3010, 62869, 35640, 7507,
-29616, 51565, 4193, 27078, 55950, 9740, 43403, 23539, 51042, 13398, 38716,
-20638, 52147, 8935, 40501, 19499, 30826, 44482, 12181, 55086, 26242, 40017,
- 8348, 50893, 26093, 57067, 6241, 40821, 25969, 46814, 3599, 37646, 58185,
-19068, 27554, 50124, 16076, 38029, 46863, 4757, 53910, 23731, 39204, 10594,
-51606, 18247, 35207, 49863, 2713, 41183, 25435, 54800, 6301, 30966, 43182,
-15111, 64205, 30086, 9137, 46489, 25042, 54820, 14063, 34890, 60187, 18624,
-43494, 4259, 36510, 55696, 18076, 31789, 47321, 646, 57471, 23768, 39029,
-11242, 51553, 21345, 62478, 35311, 6526, 52964, 17212, 31685, 64710, 13218,
-42173, 25965, 62613, 10235, 35744, 50113, 17236, 44003, 7944, 31967, 56663,
-21729, 46175, 9951, 40858, 25692, 63690, 12148, 34464, 47648, 5441, 60782,
-27160, 16458, 37932, 61843, 6695, 40135, 24320, 44926, 7759, 56835, 18141,
-32927, 62199, 6101, 39033, 23770, 60463, 1805, 39009, 22069, 62986, 6563,
-31523, 48090, 1115, 65443, 24486, 41826, 15040, 59588, 26553, 38908, 11091,
-50779, 18249, 36761, 59119, 10408, 46106, 21463, 33356, 51164, 12259, 28560,
-49532, 17197, 61660, 7898, 38694, 26429, 53583, 12487, 29593, 65225, 3049,
-40525, 24404, 60833, 9233, 28869, 49408, 14912, 37638, 51991, 20346, 44474,
- 4833, 60338, 32453, 19679, 57568, 2035, 30820, 65410, 13419, 46409, 20179,
-27683, 62824, 486, 43028, 16258, 60263, 24426, 42261, 14718, 63134, 27577,
-18704, 55144, 35190, 10175, 50154, 26247, 42245, 12753, 63420, 1891, 46284,
-24902, 62372, 6168, 34681, 45134, 14759, 50796, 22672, 39511, 3372, 63011,
-32033, 6883, 58112, 37285, 4033, 49348, 30614, 15049, 53975, 36979, 11506,
-27630, 60818, 18913, 43266, 10118, 64566, 25643, 41496, 6756, 51166, 15150,
-43446, 25305, 58819, 8202, 31666, 15114, 40076, 25497, 63940, 7445, 37803,
-49176, 14171, 28491, 53869, 8371, 40984, 24831, 49670, 10411, 31335, 61558,
- 8682, 47187, 35973, 19893, 62785, 5390, 35148, 52745, 20411, 49445, 11469,
-35776, 44776, 18350, 61348, 9236, 39346, 26437, 48925, 14612, 60120, 6349,
-40303, 26735, 55809, 689, 31029, 48436, 20209, 61593, 5055, 33364, 57506,
-22439, 48114, 8265, 30130, 52604, 3648, 39207, 25782, 56038, 5412, 45005,
-27536, 17317, 32285, 64501, 6582, 44382, 29859, 16030, 52637, 36316, 5145,
-56797, 23127, 44269, 12990, 33031, 65007, 8016, 29960, 50069, 1994, 57861,
-24993, 39339, 4933, 55939, 26501, 39116, 204, 46782, 24090, 50754, 16220,
-31276, 46035, 1856, 59112, 32738, 11805, 61483, 20746, 50246, 14999, 32450,
-63858, 4659, 45307, 31742, 17808, 57302, 35547, 9764, 65104, 20362, 37636,
-52720, 15727, 42923, 22935, 47057, 13765, 63676, 38479, 18757, 35135, 60447,
- 6196, 40105, 26279, 56354, 3538, 32600, 64589, 25112, 46476, 1492, 59141,
-34269, 10065, 49103, 20118, 58586, 30378, 859, 48145, 36043, 18932, 61993,
-13872, 49728, 30983, 12264, 55248, 35707, 1351, 64960, 30543, 8994, 58675,
-22179, 43556, 16463, 57556, 31393, 5586, 62081, 21699, 30977, 59098, 11128,
-47349, 20119, 36701, 57504, 150, 44908, 19686, 34671, 61049, 3308, 42493,
-23554, 52804, 6394, 46072, 25729, 59290, 13942, 28622, 45637, 8687, 63326,
-26157, 42124, 6735, 54991, 25843, 46628, 4725, 41094, 18532, 56551, 24451,
-40853, 8266, 49125, 35572, 3291, 54410, 19584, 46226, 29706, 5622, 64143,
-25328, 53455, 13257, 37773, 49790, 999, 28057, 59877, 18164, 48922, 2616,
-28009, 58446, 20737, 43074, 33090, 171, 54204, 19866, 31595, 49425, 2755,
-63374, 26865, 38773, 10559, 51817, 24877, 45650, 11874, 49905, 18513, 33398,
-53091, 9460, 40605, 23939, 55079, 17008, 33597, 43302, 7683, 56352, 31074,
- 2642, 53293, 20698, 42793, 4687, 62840, 27438, 7454, 52500, 37837, 2287,
-61965, 18559, 36057, 58643, 4242, 40548, 23795, 48054, 19542, 60136, 1953,
-42501, 23299, 49090, 16023, 35991, 55452, 5520, 46507, 35443, 19598, 57823,
- 1617, 29875, 64900, 12268, 39517, 22954, 49835, 11470, 37448, 53952, 16982,
-40447, 24639, 53280, 6456, 31609, 51421, 18258, 37792, 50025, 9307, 29164,
-53291, 1767, 31847, 49079, 6270, 43402, 17037, 64790, 30608, 7864, 56446,
-33652, 18071, 51056, 35455, 9436, 41105, 21705, 58022, 2314, 31047, 64517,
- 8643, 47906, 30499, 19132, 54805, 38297, 16738, 27661, 61432, 9692, 41927,
-24185, 65321, 7664, 50133, 38224, 2952, 31130, 53210, 20250, 39513, 680,
-58128, 33082, 18440, 62771, 36296, 2571, 48482, 23043, 55087, 5296, 58405,
-17171, 30047, 53147, 10953, 32680, 60288, 4375, 46568, 21355, 65180, 16672,
-35626, 52818, 3985, 44708, 17291, 27740, 53996, 11828, 29858, 44591, 17419,
-60205, 3021, 39571, 24194, 65483, 6700, 51863, 21212, 30586, 57951, 4409,
-43406, 28725, 18337, 54707, 36151, 11261, 47037, 24129, 59910, 8501, 36604,
-43976, 15667, 50606, 27587, 1691, 36800, 61094, 14970, 41792, 23881, 65230,
-13806, 31275, 51054, 10930, 37901, 57056, 2139, 42085, 25709, 54675, 8985,
-41559, 21734, 62356, 11865, 33355, 47917, 17097, 59726, 3447, 40670, 25009,
-55010, 14906, 32897, 46322, 11817, 61189, 20731, 44226, 9124, 65347, 33914,
-18564, 57964, 6100, 37389, 64043, 14049, 28874, 49659, 19561, 42078, 4079,
-46883, 28781, 8651, 52768, 22079, 41272, 16245, 60194, 6548, 47859, 25636,
-41973, 3852, 54964, 28292, 7122, 60652, 33138, 905, 58474, 37253, 8151,
-30369, 53103, 2488, 27769, 48027, 11219, 59453, 22296, 42033, 14261, 50265,
- 7766, 35509, 53864, 16591, 28294, 63652, 3215, 42864, 14280, 34094, 61119,
-11765, 27816, 52151, 2665, 42176, 21880, 59260, 6644, 40928, 23393, 46067,
-10911, 51752, 26484, 40629, 12774, 63523, 1889, 46026, 25983, 41448, 9835,
-52057, 16849, 33950, 44520, 4556, 62994, 27328, 14400, 54242, 32303, 10016,
-52168, 26824, 48661, 13057, 38754, 17506, 61868, 32168, 11007, 37729, 48302,
- 2230, 54289, 33062, 17515, 40292, 12466, 60387, 31548, 15415, 37707, 64191,
-10058, 31959, 47741, 1846, 61869, 28796, 15999, 58605, 30581, 10829, 37530,
-60431, 15388, 41764, 22263, 47873, 2992, 29694, 58193, 15640, 34634, 52408,
-10810, 44875, 31862, 14985, 54540, 36005, 7310, 50079, 14018, 64489, 25089,
-43678, 9220, 58188, 34795, 13680, 47316, 22380, 60083, 797, 41061, 19696,
-63689, 30901, 3053, 58426, 15318, 43656, 26972, 61755, 3969, 46158, 13573,
-60209, 27782, 17688, 47786, 35623, 12000, 57917, 25997, 47357, 15726, 35219,
-55375, 20543, 29588, 48714, 9362, 42478, 22902, 53676, 14414, 31696, 64700,
- 6251, 44541, 30721, 16546, 57687, 33861, 8607, 61886, 31119, 14179, 44020,
-21475, 62592, 10262, 32978, 50251, 15955, 42650, 25253, 54630, 2830, 31618,
-63184, 7804, 28131, 46912, 3737, 58619, 15612, 37947, 61967, 10693, 46751,
-28262, 4969, 64474, 34781, 12019, 57909, 37998, 15961, 60018, 25010, 40675,
- 874, 52187, 24925, 39484, 4262, 60561, 28772, 13465, 55901, 25825, 42970,
- 8065, 53813, 36898, 16960, 27288, 56460, 13563, 45021, 624, 52153, 11807,
-34164, 44989, 19391, 56866, 2034, 33134, 43987, 16542, 55143, 22238, 44774,
- 7177, 55973, 23834, 47430, 13476, 28735, 44369, 10299, 54563, 28234, 12916,
-45413, 33551, 20549, 36638, 51311, 2044, 42092, 24465, 55442, 15598, 39359,
-25826, 43333, 985, 56037, 12351, 29141, 59672, 20676, 37380, 64612, 2104,
-33822, 58106, 7067, 47445, 21104, 34043, 54394, 13843, 46474, 26749, 38730,
- 1568, 49234, 17174, 33676, 62366, 8126, 50958, 31701, 2779, 65053, 21423,
-42840, 12655, 51874, 28242, 3992, 63913, 20854, 34218, 56089, 11024, 44219,
-21424, 54632, 7477, 34240, 45535, 1009, 58860, 28375, 15630, 46201, 22161,
-62643, 12866, 39235, 23747, 58684, 1380, 49281, 26079, 40165, 5919, 51294,
-21150, 31197, 56451, 9759, 43577, 21640, 63484, 5803, 41083, 25693, 52124,
-13393, 30657, 48670, 4374, 41697, 25083, 52738, 10462, 40075, 25986, 56184,
- 7191, 30252, 63356, 13629, 38413, 59759, 17820, 33904, 56607, 2446, 46793,
-26425, 38916, 13562, 61637, 21181, 50385, 11087, 38159, 48121, 16848, 27155,
-50020, 10781, 43936, 22225, 56748, 14832, 38177, 62511, 16456, 30941, 44729,
- 1125, 54864, 30278, 17861, 61696, 21482, 41325, 6416, 48462, 36445, 18058,
-56885, 25318, 46725, 5434, 38254, 55825, 17486, 32388, 63343, 10560, 39205,
-26269, 53307, 14860, 61746, 20175, 38787, 3393, 54873, 32620, 19579, 51108,
-36599, 14252, 48986, 23779, 64029, 1160, 39391, 19468, 53324, 30008, 8818,
-49909, 37607, 20842, 59534, 4809, 40224, 21808, 65221, 1550, 41468, 22566,
-55018, 5153, 28162, 63926, 15056, 42588, 25219, 56721, 3675, 48266, 24163,
-44624, 1279, 52329, 20090, 28438, 58351, 14134, 43812, 36160, 20590, 51616,
- 6040, 44358, 23559, 50585, 740, 28907, 57260, 8569, 34957, 61748, 20604,
-40481, 9096, 64962, 22905, 39867, 6460, 61105, 25080, 39238, 12014, 56376,
-18858, 41451, 29684, 6279, 52847, 38083, 15683, 28031, 55977, 5184, 43872,
-34137, 16561, 56599, 36360, 9129, 54614, 21239, 46487, 34895, 6283, 50458,
-17679, 38732, 26633, 52986, 5595, 37166, 51125, 9738, 64468, 21716, 39994,
- 6567, 32319, 58757, 565, 43181, 11343, 64172, 17562, 31867, 55800, 3286,
-36757, 45956, 11630, 50174, 27392, 10464, 55309, 37825, 5111, 51011, 21745,
-40095, 452, 54266, 26815, 48157, 3764, 40869, 24595, 56855, 5888, 34252,
-61631, 9401, 47695, 19104, 34636, 44289, 13125, 56678, 33044, 21085, 49138,
-27358, 1486, 34169, 55729, 21129, 41550, 15218, 52538, 24850, 47370, 7278,
-28948, 54443, 12566, 48480, 32272, 19553, 58161, 11131, 43914, 21879, 49505,
-37255, 419, 64056, 19220, 29568, 47201, 11107, 60348, 38446, 4942, 33292,
-61946, 20056, 40955, 26051, 64211, 5246, 48109, 25755, 40832, 10899, 62450,
-29641, 4560, 59413, 33117, 15463, 38133, 63746, 8554, 34498, 60044, 4874,
-50804, 20759, 35021, 65448, 8990, 49488, 59450, 11908, 28619, 62993, 19198,
-45684, 5715, 33916, 61985, 11687, 52478, 32553, 19219, 38342, 45910, 6169,
-49925, 11272, 41539, 25251, 50880, 12912, 40019, 25908, 62193, 9749, 28605,
-58805, 4760, 42047, 15552, 63162, 23901, 53752, 10959, 40641, 22898, 44825,
-15286, 53469, 25822, 41326, 5786, 56428, 19612, 35662, 46634, 14585, 52923,
- 6335, 42343, 25744, 62274, 3262, 39726, 25460, 60196, 12417, 48967, 18862,
-36540, 61251, 7258, 31035, 47899, 4119, 55874, 28583, 15118, 45820, 32571,
- 9854, 60570, 18630, 28453, 64081, 12618, 47516, 36487, 861, 51279, 37548,
-17548, 31477, 56677, 2326, 36240, 59482, 16842, 28329, 62509, 12862, 44359,
-21211, 60413, 2767, 34552, 48328, 17134, 53550, 35947, 1285, 27153, 51592,
- 7596, 40013, 22865, 64563, 8391, 33007, 55334, 109, 44665, 29631, 18319,
-63398, 31303, 2784, 55390, 35400, 17745, 64885, 32606, 3765, 50602, 29163,
- 7867, 54090, 35687, 19489, 63982, 9600, 46843, 36557, 4529, 51068, 24301,
-57969, 12735, 30667, 53357, 8018, 40631, 21391, 65360, 29650, 12922, 48566,
- 4608, 43628, 22500, 56417, 90, 33129, 48972, 5791, 44194, 25063, 59941,
-15841, 41407, 6831, 61162, 29130, 4151, 57331, 32995, 9099, 45201, 24391,
-56731, 13196, 46604, 34791, 2350, 61678, 16058, 42901, 26233, 56635, 11197,
-45150, 25217, 58214, 9358, 30472, 48976, 12199, 41846, 23665, 59010, 7359,
-38821, 21604, 64932, 9608, 32570, 56006, 16374, 37059, 45892, 4228, 53839,
-27357, 8551, 59913, 37654, 18727, 65264, 11815, 34554, 55432, 13952, 32194,
-51645, 17876, 43580, 5969, 53110, 24482, 46349, 3541, 29589, 55972, 19459,
-42106, 1464, 63893, 26290, 45952, 3986, 59391, 33383, 21275, 62722, 1923,
-45478, 31208, 20901, 65211, 12812, 48675, 28264, 6849, 51347, 26021, 39862,
-10295, 64705, 19782, 32419, 59273, 116, 44915, 21611, 63256, 15396, 29307,
-42407, 1718, 45866, 25370, 61335, 14075, 48902, 28303, 19347, 52012, 36496,
- 5624, 47819, 24981, 62738, 15829, 29350, 58168, 1042, 34221, 61437, 18416,
-45540, 29915, 13714, 64379, 25681, 43125, 10659, 59061, 17834, 31571, 63634,
-11290, 43237, 21315, 49073, 14321, 40557, 24160, 59515, 614, 51495, 23202,
-41023, 5634, 63922, 12152, 36574, 59297, 17585, 43361, 7936, 60893, 32654,
- 2743, 44884, 19423, 63508, 34544, 3245, 44059, 21815, 61813, 5973, 46630,
-34289, 16860, 62578, 8449, 31567, 52829, 15725, 44131, 35183, 3602, 50621,
-28455, 15331, 53009, 23163, 43855, 7550, 55217, 14047, 39254, 22823, 56073,
- 8450, 33901, 52882, 18746, 42589, 12826, 47061, 24330, 52664, 1781, 27904,
-49134, 16683, 45017, 24757, 39854, 14378, 55957, 1175, 39399, 25062, 31714,
- 4218, 48043, 37979, 13881, 57886, 23051, 49893, 9234, 30127, 47468, 3237,
-63533, 27224, 14935, 57445, 34132, 21694, 61211, 4883, 30576, 56206, 16993,
-45691, 606, 37704, 50519, 11820, 30723, 56325, 20577, 44585, 6151, 38521,
-27031, 57672, 234, 48340, 35242, 10006, 61067, 28824, 16446, 38336, 62765,
- 1413, 29662, 57713, 22123, 38843, 11712, 51436, 19204, 31541, 52915, 8684,
-43672, 22607, 30486, 55578, 2670, 41133, 24248, 52903, 11637, 40468, 20044,
-34443, 65533, 7886, 49997, 22185, 35390, 52503, 2467, 44963, 34192, 7373,
-27110, 62635, 16299, 28466, 58372, 10149, 42034, 21636, 53213, 7319, 38064,
-49589, 1133, 32133, 54658, 8461, 39300, 23277, 57569, 6426, 27820, 43377,
-12188, 62099, 38184, 15686, 31726, 58476, 11575, 41854, 25046, 51373, 15364,
-39957, 22631, 59951, 5743, 35445, 51060, 14545, 27931, 57829, 6350, 41485,
-24597, 46389, 13163, 61221, 25820, 41007, 5739, 52003, 24285, 39739, 13805,
-59845, 28354, 15631, 45367, 37896, 282, 62120, 23360, 43859, 15593, 51531,
- 1699, 37886, 54046, 19951, 34104, 60569, 8698, 40549, 24498, 64568, 13707,
-38584, 20707, 50518, 8539, 31740, 55661, 23475, 47418, 11647, 40000, 22721,
-52377, 16252, 60568, 36350, 5478, 28126, 64698, 11829, 41300, 24836, 52830,
- 8110, 38531, 17789, 51120, 33466, 6839, 36752, 53171, 15603, 61237, 34993,
- 311, 50923, 19670, 32552, 53473, 11738, 43518, 26756, 49816, 6989, 60708,
-29977, 13248, 63531, 34358, 11551, 49842, 31036, 2627, 45389, 24748, 48982,
- 5090, 40403, 25670, 63350, 2195, 39094, 26408, 56899, 12309, 32909, 60648,
-16846, 37158, 45420, 11569, 53353, 34290, 21206, 50901, 9598, 39073, 19683,
-51735, 8077, 35754, 48403, 17903, 53442, 9376, 40299, 33293, 3344, 61153,
-37879, 19107, 57406, 1534, 42809, 24104, 53663, 11194, 42079, 23421, 56787,
- 8210, 34089, 48736, 10970, 55663, 34048, 19437, 54044, 8739, 34864, 41774,
- 3991, 56891, 30784, 14573, 59851, 21135, 42139, 8730, 34686, 52170, 19109,
-43505, 12909, 49376, 27795, 2934, 53312, 35333, 8141, 56040, 19191, 32593,
-47219, 6465, 53132, 23324, 39315, 1269, 54212, 26544, 60768, 5063, 30564,
-45076, 17206, 36150, 54862, 14492, 30404, 45995, 20043, 52015, 4127, 30384,
-54843, 22047, 40536, 12491, 56640, 26726, 40531, 9730, 50590, 17938, 31135,
-53753, 10465, 38965, 26432, 56753, 2490, 29195, 54627, 20527, 40696, 5395,
-59746, 22293, 55527, 12615, 38239, 65200, 1680, 35939, 57537, 17423, 32060,
-47189, 2769, 60075, 29766, 17611, 48622, 893, 61081, 26398, 39190, 5679,
-62976, 18236, 36852, 57822, 9438, 31797, 52241, 3467, 61939, 19522, 31937,
-46058, 10647, 53708, 15801, 64135, 27681, 7694, 54360, 35394, 437, 41630,
-26259, 60558, 17133, 34782, 44097, 8080, 51425, 30484, 1361, 47756, 38218,
-19675, 52090, 7530, 35737, 63843, 22172, 42753, 16012, 59786, 37083, 2891,
-48517, 25501, 55645, 9405, 39616, 16863, 64258, 20454, 30578, 50625, 3347,
-36567, 54071, 7964, 31842, 49497, 18531, 45155, 5379, 64459, 26887, 41081,
- 427, 58322, 17448, 36134, 63002, 5243, 47573, 16276, 37219, 63883, 9847,
-31799, 57913, 17287, 45357, 135, 53556, 26854, 40602, 4979, 57097, 17711,
-29280, 58903, 13894, 37603, 48847, 10929, 54189, 34946, 3875, 47462, 24628,
-64386, 13865, 44835, 19590, 27402, 58608, 15399, 42610, 24816, 64922, 11408,
-33600, 46590, 18055, 54298, 32548, 5190, 52392, 24503, 48513, 3465, 44598,
-20571, 62306, 4975, 31011, 57998, 11297, 42959, 25572, 54755, 8686, 46250,
-37700, 19475, 49049, 11340, 59162, 20688, 38610, 552, 48873, 20035, 57901,
-16045, 32923, 48547, 2363, 55304, 34495, 9968, 64428, 27405, 17118, 49819,
-33680, 6013, 59630, 31503, 18904, 57898, 27781, 7349, 49447, 16580, 30691,
-52564, 10074, 45707, 26952, 57875, 2846, 29895, 63073, 19009, 43832, 768,
-33360, 65524, 20318, 42622, 3001, 48684, 30377, 10736, 55221, 38117, 18930,
-31926, 58610, 4087, 44404, 22561, 63665, 921, 29887, 60451, 20109, 47086,
- 3079, 43169, 21154, 28403, 45409, 13681, 62705, 4934, 41271, 22847, 57008,
- 2386, 38751, 24562, 41318, 19126, 51875, 492, 39858, 24477, 55646, 15848,
-38236, 57407, 7810, 30962, 60682, 20876, 44674, 14828, 33362, 59076, 9796,
-42431, 21790, 48387, 298, 55101, 27115, 7645, 62879, 30107, 4667, 58767,
-15894, 44728, 27019, 62319, 12559, 42942, 25032, 60529, 5990, 29220, 57812,
-16070, 50445, 22815, 44942, 12074, 30007, 47040, 16296, 62435, 37250, 5254,
-31078, 52522, 14287, 39595, 24577, 62109, 3724, 41382, 22370, 60626, 5240,
-30802, 49535, 17449, 65161, 22783, 46360, 10683, 34381, 53380, 1490, 45047,
-26604, 60685, 4482, 39816, 25683, 63945, 7155, 37107, 59519, 14575, 48425,
-24082, 41814, 2089, 60315, 20626, 34734, 44764, 13325, 58633, 32195, 19257,
-47073, 12874, 36349, 53145, 7982, 64731, 27207, 3091, 58219, 38371, 9132,
-61794, 24031, 42135, 14315, 45877, 5976, 65009, 23813, 38984, 155, 61494,
-20396, 35633, 59251, 4555, 42035, 23433, 65495, 12194, 41481, 18815, 35892,
-45981, 9807, 63697, 27911, 14745, 47868, 30770, 6997, 46359, 27045, 18777,
-49707, 28774, 6450, 63372, 21014, 36841, 44362, 11143, 53791, 20735, 36124,
-45450, 14100, 57391, 21335, 31554, 51094, 6810, 39884, 21127, 64770, 13743,
-39185, 26721, 48470, 6410, 56580, 24430, 42133, 34149, 45151, 17987, 50534,
-30751, 12649, 62545, 20881, 45418, 6963, 55566, 28629, 13311, 59158, 35941,
-16214, 64219, 27845, 10082, 57780, 31753, 14331, 48606, 27600, 3912, 53886,
-33211, 8482, 28042, 64921, 19012, 41142, 13215, 60466, 26732, 42426, 5213,
-52434, 12897, 40246, 22676, 58928, 13790, 40997, 25279, 60746, 9424, 39880,
-23166, 53780, 13332, 29569, 46177, 9275, 50751, 21976, 29617, 42219, 10397,
-57482, 28167, 19781, 50227, 4551, 42740, 26280, 62015, 13652, 38604, 20828,
-60245, 11295, 32208, 48511, 8825, 42370, 25278, 61461, 4631, 44455, 27689,
-18606, 60296, 38395, 8927, 32322, 51451, 3162, 61786, 33716, 7857, 50842,
-37407, 4208, 47838, 22051, 56802, 446, 30533, 61113, 14653, 41859, 22008,
-63975, 10335, 38755, 26682, 53843, 14050, 36849, 49762, 18884, 47204, 2328,
-39107, 17984, 61063, 29154, 1364, 63809, 25663, 39989, 5089, 52461, 26862,
-63224, 15104, 44222, 34812, 4347, 60512, 29016, 12297, 43466, 23331, 51633,
- 4036, 37221, 46292, 12083, 54761, 26235, 39658, 10988, 47133, 4229, 36989,
-64140, 23379, 42653, 2235, 58984, 23891, 39543, 6543, 53728, 22092, 47439,
-11940, 36036, 56873, 16333, 49143, 27862, 7108, 58105, 32640, 13782, 63319,
-25688, 44035, 433, 51447, 13716, 39810, 25660, 56414, 9408, 38844, 26979,
-49805, 10645, 37330, 57593, 17117, 32059, 64399, 7614, 53601, 31371, 17898,
-38118, 55510, 9919, 34080, 62258, 16079, 47011, 5813, 59754, 26980, 48294,
-15055, 42184, 5396, 61572, 27804, 17295, 50941, 35878, 12251, 54506, 3792,
-49860, 19643, 46945, 28442, 5320, 64597, 35574, 15988, 38425, 50264, 18677,
-36014, 47872, 14455, 40460, 24555, 57049, 902, 38725, 22805, 55397, 3491,
-41046, 19038, 34029, 42408, 476, 63490, 31453, 8168, 59552, 36165, 4313,
-49427, 28170, 13617, 58162, 22204, 44091, 2357, 55919, 30520, 16064, 51670,
-32706, 12560, 46135, 24386, 57392, 14928, 43560, 2209, 39356, 25821, 62191,
- 7805, 41005, 23965, 57120, 13593, 38832, 22551, 56065, 10343, 32288, 53623,
-17195, 42878, 31297, 5635, 63065, 36698, 16208, 29007, 51376, 4642, 65064,
-27419, 7548, 50048, 37807, 3563, 62751, 27700, 18438, 45985, 37568, 10763,
-50722, 27938, 18028, 48575, 33974, 1046, 56130, 32209, 18689, 50735, 36876,
-13338, 48664, 25961, 52865, 6860, 29243, 46308, 16750, 55840, 30060, 1286,
-48175, 25300, 57532, 4806, 50671, 17640, 33384, 54015, 1013, 35636, 51514,
-16159, 58769, 34763, 4257, 61452, 38434, 15892, 50782, 30735, 8974, 58277,
-27570, 3836, 64943, 30704, 7822, 50432, 35226, 2640, 48001, 16280, 55743,
-26802, 43416, 317, 46845, 22754, 59169, 12354, 40575, 21249, 61023, 2174,
-27279, 9644, 60011, 37583, 3557, 56123, 25268, 39677, 15066, 50248, 36333,
- 2420, 52735, 23510, 46554, 5502, 41703, 19025, 54199, 37413, 2226, 61767,
-21032, 34956, 58309, 12550, 47258, 20124, 35679, 52911, 6506, 49377, 32362,
- 2047, 46013, 23082, 57212, 17960, 33005, 63438, 6693, 42213, 23971, 55721,
- 2206, 46257, 17561, 34022, 59315, 4155, 48330, 33881, 15791, 63594, 37712,
- 3499, 60021, 18489, 48703, 35199, 1228, 54886, 38287, 22611, 59270, 6683,
-41901, 24658, 54489, 3127, 41365, 26448, 53142, 19044, 63380, 1558, 39639,
-21825, 55239, 14965, 36874, 49516, 378, 28905, 57266, 16714, 40333, 25605,
-43336, 12710, 54926, 27738, 17231, 62788, 30960, 8817, 44198, 25608, 50601,
-11047, 28587, 48009, 2637, 36217, 56732, 17685, 45536, 970, 59526, 28694,
- 7885, 65398, 32523, 20539, 57564, 10533, 36402, 51463, 15369, 31644, 55841,
-12025, 43617, 22096, 47469, 8848, 30539, 54698, 11010, 42144, 21635, 50162,
-17113, 62670, 35879, 8808, 57756, 30612, 19235, 61313, 2736, 43190, 21799,
-62865, 17219, 50404, 33476, 12594, 54959, 18836, 31464, 44944, 12165, 62721,
-18725, 31947, 42746, 8068, 61480, 27145, 4379, 52928, 34312, 10522, 38056,
-47137, 19434, 54128, 7874, 39387, 21727, 59760, 18007, 29917, 62651, 5942,
-45180, 20425, 54370, 13670, 32904, 56082, 5564, 27624, 45812, 12879, 49584,
-24238, 40157, 3377, 59892, 27727, 14322, 48182, 29450, 7953, 52808, 26140,
-42559, 17018, 38511, 10382, 64289, 23173, 52776, 9470, 37587, 46209, 1090,
-63851, 23771, 41356, 17726, 36925, 62681, 8991, 38059, 56488, 13580, 30324,
-53889, 8276, 27942, 58062, 2497, 32107, 65355, 6653, 48668, 17895, 32568,
-53648, 11094, 43999, 26781, 64805, 11790, 47714, 23257, 53903, 14257, 46218,
-25001, 40527, 11369, 56103, 18341, 37821, 51504, 7210, 32142, 64980, 19137,
-40398, 9289, 59782, 21000, 44305, 834, 64064, 37430, 7386, 32535, 51074,
-20923, 55465, 11668, 32648, 48458, 18134, 50978, 6446, 31725, 63385, 2790,
-46207, 20064, 28239, 47478, 728, 57196, 27085, 20284, 46172, 12318, 53962,
-37836, 9769, 46871, 18706, 36122, 56343, 14678, 29934, 57358, 11806, 48140,
-34072, 1653, 61000, 31062, 13850, 56983, 37041, 7075, 64266, 24997, 44045,
- 7800, 60535, 28599, 3343, 58837, 33228, 10280, 45464, 22053, 57576, 9107,
-33387, 51063, 14301, 36842, 60829, 10845, 42761, 22298, 31131, 59071, 7346,
-42153, 23712, 62212, 9235, 43283, 19894, 29196, 47858, 12861, 27137, 54692,
- 89, 35406, 47919, 16595, 38249, 51723, 12360, 43031, 24383, 60276, 13471,
-41425, 23402, 63513, 10703, 38648, 20002, 60698, 9746, 50245, 30176, 4609,
-37428, 52646, 14564, 47060, 36068, 54971, 15468, 28535, 49220, 19688, 43037,
- 5202, 65095, 31202, 10672, 59862, 20843, 40415, 12178, 62624, 25725, 48682,
- 8446, 29257, 45031, 17499, 50730, 5834, 41775, 26595, 62946, 941, 45088,
-15207, 29284, 56664, 17517, 37663, 62711, 10604, 30027, 49330, 1139, 45158,
-26310, 53189, 11492, 38525, 19755, 65380, 30421, 12288, 50279, 24419, 42723,
- 7074, 55182, 20254, 28271, 53177, 12253, 44772, 27290, 15247, 64845, 30010,
- 9430, 48151, 17613, 36175, 51476, 12352, 32287, 64637, 16820, 47630, 5597,
-33672, 45777, 15534, 57811, 31071, 6599, 51945, 27083, 12283, 65139, 37596,
-14275, 52598, 6192, 46821, 21990, 60706, 1403, 36022, 45793, 10568, 55470,
-37923, 16238, 63609, 5801, 37282, 58890, 19035, 51215, 29721, 9092, 33829,
-54646, 20224, 43176, 11774, 34969, 52824, 3911, 44028, 26298, 53944, 6049,
-41299, 23588, 48163, 3074, 37071, 58281, 13512, 32701, 61533, 2018, 40542,
-26004, 65193, 6630, 32136, 46048, 1188, 27718, 54322, 21286, 47546, 10353,
-38780, 25202, 56992, 7690, 30481, 44475, 644, 60170, 29165, 8404, 51847,
-35826, 4924, 55687, 25836, 48395, 1079, 37927, 51309, 17577, 31083, 59101,
-14001, 43382, 23191, 62432, 1585, 28957, 45083, 15978, 56131, 32350, 3442,
-49673, 35994, 9825, 52210, 26509, 40752, 2457, 61349, 23862, 44050, 16554,
-37946, 58706, 1638, 35576, 61999, 11068, 43978, 20516, 51290, 35751, 814,
-65068, 37917, 18767, 58396, 3584, 45783, 25326, 55129, 2037, 44138, 34858,
-18687, 29215, 59493, 13595, 34166, 48388, 10687, 57731, 27308, 1669, 31361,
-51348, 20169, 46510, 3373, 33883, 62094, 11346, 41980, 22043, 52449, 13045,
-42837, 26577, 61236, 9067, 40247, 23621, 59100, 7905, 38500, 20678, 56819,
- 6500, 38629, 27020, 61994, 2727, 50092, 20007, 29406, 63812, 1010, 41937,
-25368, 54053, 10526, 45671, 26880, 50138, 5926, 39041, 25713, 54528, 13278,
-28550, 48365, 17140, 62948, 4941, 39897, 26562, 61190, 235, 39026, 22203,
-58875, 15220, 41879, 25316, 53002, 9566, 34150, 65361, 15639, 42137, 30263,
- 7499, 62116, 33876, 3201, 57819, 23005, 30183, 61099, 107, 44428, 24416,
-40930, 8218, 52059, 20949, 42931, 15227, 52890, 23702, 46689, 4307, 41850,
-21743, 49395, 14981, 35410, 52191, 11413, 40171, 23354, 53810, 15159, 37357,
-62255, 1938, 41662, 24978, 63866, 5439, 44551, 19818, 28314, 47361, 3433,
-63328, 13753, 40504, 25768, 56083, 12038, 38944, 25745, 52606, 2892, 60634,
-36410, 7765, 57245, 38245, 14868, 62725, 27059, 5401, 59339, 32693, 21461,
-54548, 1507, 39028, 26675, 56655, 6347, 33455, 46253, 4027, 52027, 24260,
-41897, 13232, 35934, 58260, 17575, 28698, 64496, 5922, 23565, 39705, 806,
-63139, 32458, 8557, 58215, 35282, 14237, 51026, 24021, 43783, 4330, 55134,
-26852, 38775, 117, 56900, 20506, 36344, 65307, 11708, 32088, 56379, 18723,
-38978, 10390, 54306, 22975, 36543, 60962, 9027, 46777, 27641, 4848, 52103,
-36232, 14969, 61300, 21117, 38958, 9079, 58006, 26917, 44602, 8107, 54612,
-35111, 821, 61621, 29905, 17241, 37257, 58752, 1970, 41881, 31114, 7828,
-56945, 37528, 4955, 52088, 21948, 33060, 62891, 2234, 28529, 55757, 8634,
-39446, 24046, 56485, 12928, 39056, 22691, 51064, 9187, 37783, 62766, 17904,
-34386, 46670, 4840, 54426, 30114, 17385, 62240, 36764, 11490, 30885, 48875,
-18574, 59796, 28828, 3323, 34331, 52148, 20225, 46978, 32167, 13962, 45104,
- 4308, 64799, 22907, 40502, 6238, 62531, 24224, 50399, 15031, 41040, 23240,
-63105, 12291, 39470, 21225, 59770, 9898, 33841, 64623, 17077, 28758, 52990,
- 7029, 42364, 23622, 55429, 14160, 38804, 23046, 50944, 11930, 58652, 37554,
-15929, 42225, 5608, 64754, 27000, 48734, 13112, 41959, 23804, 55449, 15177,
-40009, 23092, 46011, 13887, 61823, 20753, 41752, 11074, 32848, 65100, 15334,
-28075, 55145, 3275, 45654, 36533, 8633, 49745, 31034, 18527, 58336, 35597,
- 5328, 47586, 24062, 64893, 15019, 42744, 22157, 58974, 12829, 46742, 33906,
-17753, 48964, 4590, 65344, 30813, 9191, 51821, 28890, 18626, 53500, 33668,
- 7053, 57942, 17531, 45901, 27370, 12109, 50463, 34407, 21956, 62914, 8329,
-39077, 26876, 51513, 14693, 56841, 4089, 42311, 25868, 56064, 4890, 32126,
-45064, 15668, 61144, 36205, 10289, 55731, 23183, 43132, 14488, 47636, 24630,
-59550, 5605, 39607, 24106, 56726, 1744, 38858, 20757, 54498, 4441, 44876,
-26983, 52703, 2186, 42199, 25909, 58297, 10724, 43854, 21701, 35589, 55333,
- 8796, 45529, 35382, 12997, 60388, 20972, 38892, 3498, 62647, 18355, 34909,
-58469, 11364, 43306, 23029, 60258, 3009, 31687, 42838, 21755, 57976, 9792,
-44416, 24774, 53007, 12919, 47397, 32607, 8326, 60574, 29600, 17535, 50552,
- 4954, 37469, 58868, 13115, 44230, 23784, 49721, 16795, 41102, 10490, 51870,
-17874, 32381, 54562, 12479, 63231, 33316, 2611, 59351, 26631, 39198, 8952,
-63696, 16653, 34828, 59744, 9914, 30545, 57585, 2309, 29227, 63040, 18357,
-43008, 5212, 49637, 28058, 18192, 54684, 30454, 13059, 37817, 52157, 15952,
-59827, 33084, 9696, 50412, 35560, 19537, 52809, 2245, 45195, 21576, 64831,
- 5681, 31919, 49448, 14250, 45443, 27909, 17906, 51466, 29912, 9415, 46961,
-37812, 18401, 49481, 9959, 29922, 61855, 17100, 43742, 11514, 52788, 28394,
-16453, 59570, 35935, 7407, 62634, 26227, 54161, 1693, 31522, 44882, 9041,
-50865, 57755, 12349, 43749, 21758, 52349, 17495, 47582, 27981, 1495, 56517,
-36730, 16808, 31921, 48032, 9352, 60398, 24484, 42384, 14493, 46841, 4676,
-51946, 24666, 43183, 2725, 60292, 25910, 40985, 14295, 51327, 3564, 33782,
-55422, 19476, 42580, 12661, 59209, 25019, 43629, 5596, 51413, 24825, 40146,
- 3437, 62108, 21868, 41741, 15471, 46957, 22548, 51726, 10606, 31658, 48739,
-14889, 62439, 24172, 50448, 13066, 32057, 60389, 19005, 45788, 7135, 37525,
-50808, 15654, 43418, 23424, 59905, 788, 44827, 26734, 64001, 3501, 29749,
-55751, 19794, 44719, 1900, 28015, 59595, 11217, 43412, 23738, 41421, 2365,
-50354, 25003, 58492, 4998, 40062, 14392, 53070, 25140, 41865, 12135, 60917,
- 1714, 28192, 55999, 21065, 42440, 12443, 35380, 56982, 16806, 46286, 32006,
- 2156, 60477, 36369, 8963, 46243, 24637, 57177, 316, 30274, 52249, 19657,
-42843, 5429, 49836, 20647, 35997, 60046, 9541, 33637, 47852, 2986, 56869,
-20337, 44370, 30738, 4611, 59966, 24709, 53564, 15012, 39592, 1589, 52014,
-21327, 63465, 6282, 33132, 48885, 3934, 56358, 26780, 38684, 2009, 57081,
-26490, 49588, 5368, 44469, 37388, 12699, 59730, 20304, 27456, 64246, 14956,
-53824, 6614, 40324, 22193, 61361, 12441, 41825, 33221, 7448, 57240, 37843,
- 1213, 30757, 63067, 8622, 52909, 26110, 40089, 12209, 55408, 23111, 41347,
-14088, 45199, 3898, 64012, 21573, 30716, 42508, 9441, 60618, 37538, 4748,
-57278, 15627, 32506, 49677, 20205, 61219, 6208, 33458, 44892, 19973, 65501,
-12511, 39676, 23230, 54257, 7513, 28099, 50275, 18691, 41186, 6057, 63970,
-26129, 39508, 668, 50488, 18116, 32990, 53111, 12072, 44619, 23325, 64096,
-15086, 42141, 23970, 62562, 13620, 39084, 22147, 60914, 9274, 32720, 48778,
-16689, 53349, 5497, 31814, 59121, 15879, 27755, 50443, 6120, 42925, 25991,
-52660, 13409, 47570, 29900, 1670, 50919, 33773, 8012, 53082, 37689, 18360,
-54763, 6167, 47128, 31082, 15863, 36104, 64329, 4783, 42352, 23145, 54937,
- 1824, 35723, 44093, 20525, 55803, 27234, 9155, 52201, 35565, 1572, 59930,
-22239, 32771, 64562, 4297, 42527, 23690, 48786, 5206, 39392, 22423, 46593,
-17143, 51034, 5901, 43858, 25404, 55392, 376, 39547, 23157, 51217, 13408,
-36407, 46619, 8332, 55262, 20667, 33925, 65252, 12130, 47044, 3965, 36088,
-61182, 8037, 27428, 47907, 344, 41538, 24953, 57130, 6075, 39569, 26928,
-58115, 11213, 35044, 42974, 17338, 55175, 22086, 41092, 6357, 63889, 33002,
- 2079, 58356, 35811, 20595, 64320, 3027, 33714, 55533, 19652, 45681, 4792,
-34535, 65366, 19358, 47716, 1084, 31159, 50818, 18087, 44503, 11633, 33190,
-48190, 15268, 61722, 35005, 19050, 3376, 41204, 25898, 60330, 5483, 34639,
-41853, 11847, 62180, 21955, 45836, 6547, 64401, 23012, 39635, 16112, 53285,
- 7023, 34323, 61370, 21536, 40091, 9432, 59041, 35691, 20614, 46356, 7111,
-64565, 30877, 21132, 44845, 11488, 63658, 25975, 39922, 2558, 53563, 19924,
-32699, 64720, 13474, 48000, 19057, 31098, 55266, 6383, 36185, 58513, 4363,
-27521, 64109, 6825, 43802, 22989, 39347, 3803, 45154, 21532, 54193, 314,
-41146, 26153, 61693, 14034, 29840, 57815, 7943, 41251, 17604, 30998, 54349,
-11871, 40519, 21320, 49347, 6979, 36258, 61139, 13025, 32902, 48378, 20826,
-57676, 8221, 33156, 64236, 20081, 44863, 9840, 34287, 48290, 20823, 65477,
- 8331, 32578, 45163, 16827, 50438, 35795, 7183, 60306, 24457, 53309, 686,
-28006, 43816, 11019, 58223, 27275, 17549, 51544, 30646, 4641, 54216, 36019,
-17453, 49192, 8378, 37916, 62360, 16327, 31630, 54486, 815, 44969, 28296,
-15277, 61800, 25304, 40863, 8579, 64104, 17565, 35799, 49517, 9428, 43409,
-30288, 18157, 60930, 37123, 11793, 31030, 45591, 16005, 59724, 23595, 40721,
-10230, 63785, 21671, 47211, 8784, 29374, 61047, 19143, 33843, 52119, 7641,
-47344, 31997, 232, 42202, 24907, 46611, 17404, 51655, 30748, 2128, 54713,
-23007, 48904, 17214, 28202, 53851, 11927, 43432, 23059, 38991, 6760, 59189,
-21336, 47654, 6, 32056, 58314, 24573, 48715, 10379, 37058, 56022, 2132,
-47912, 29160, 18455, 53895, 25795, 43496, 1250, 41250, 11825, 47161, 25705,
-57832, 9752, 30876, 46927, 140, 52586, 33344, 15024, 62350, 37957, 2698,
-58798, 21569, 47183, 33262, 12378, 57462, 20686, 37026, 62945, 7361, 29541,
-60040, 3671, 35641, 50044, 8189, 30929, 55682, 10466, 34659, 51976, 5220,
-46343, 20132, 41209, 1180, 63199, 25864, 40475, 19113, 46363, 3168, 64444,
-31059, 16709, 57319, 34910, 9504, 61522, 23777, 42237, 15348, 65324, 21911,
-45567, 10556, 29683, 63292, 14211, 41904, 23010, 56260, 2569, 49186, 18710,
-28996, 58375, 10958, 39685, 26286, 62602, 12241, 48544, 3539, 32758, 63816,
-14073, 46988, 25113, 40209, 6536, 55327, 20719, 47548, 13075, 29001, 61803,
-16117, 55122, 30631, 9518, 65451, 35151, 21631, 53441, 11050, 33750, 47992,
-20637, 60227, 6757, 43289, 24556, 61683, 15659, 30532, 50424, 837, 41707,
-23915, 57180, 15435, 45123, 19211, 34304, 53825, 11830, 64649, 31597, 16517,
-46032, 21858, 62776, 14343, 31473, 47876, 7268, 61073, 30056, 666, 59337,
-34531, 13518, 46217, 23370, 53287, 16191, 40991, 6755, 50106, 24741, 40661,
- 8164, 60479, 22279, 30493, 53712, 8820, 40808, 23989, 57668, 13944, 39932,
-21608, 64008, 3088, 52409, 24839, 42988, 6572, 27796, 53360, 64913, 31915,
-16764, 37540, 48543, 15691, 55344, 27305, 3903, 53073, 37617, 15420, 29591,
-47131, 2526, 57336, 30599, 17135, 49865, 28539, 1183, 52883, 31007, 16712,
-55168, 4305, 29769, 50130, 15629, 35428, 58146, 495, 49499, 30522, 7698,
-35480, 46194, 17098, 57777, 7006, 42179, 29224, 32, 60020, 37318, 14600,
-49149, 28395, 17541, 52504, 38167, 11897, 33505, 57229, 14123, 46865, 25445,
-65111, 10311, 38736, 24675, 55948, 11727, 35518, 46808, 2873, 49214, 21352,
-35208, 60638, 4419, 44159, 25017, 62082, 9700, 31718, 52898, 16359, 41373,
-24257, 56208, 4224, 39469, 15424, 50881, 26543, 39002, 5928, 55195, 18081,
-29791, 56985, 10, 42140, 24479, 53785, 5363, 62371, 29995, 18381, 47875,
-37590, 9950, 31944, 49035, 15479, 62062, 30745, 5299, 48357, 37939, 13151,
-64335, 21610, 43555, 10937, 60905, 32812, 21518, 55577, 3570, 28095, 46692,
-12859, 63543, 19020, 35071, 56059, 4985, 46784, 18699, 33598, 51493, 38,
-27448, 57364, 20628, 47244, 3702, 33831, 50024, 8586, 56086, 27185, 2619,
-51190, 36803, 7062, 53115, 25706, 43684, 13527, 35569, 54411, 17142, 41398,
- 2449, 57521, 27088, 15685, 38359, 54622, 18740, 60033, 34965, 4814, 63710,
-11102, 38390, 57788, 13565, 29456, 44061, 4999, 64442, 20717, 32087, 48455,
- 2626, 60784, 24983, 44945, 14592, 35544, 63589, 18165, 42698, 6247, 34560,
-60947, 15524, 44464, 27210, 11452, 63271, 36733, 6058, 50902, 14780, 64564,
-22335, 30485, 54822, 3253, 40448, 23472, 62021, 15704, 39093, 20956, 58326,
- 9247, 46461, 29701, 16384, 35493, 52216, 9957, 28447, 54404, 4101, 44946,
-27584, 16323, 53678, 38089, 13404, 47299, 28333, 17853, 58524, 36939, 31,
-47154, 29695, 15678, 64334, 25352, 55119, 12701, 38599, 22067, 50725, 6929,
-56016, 33258, 13369, 49019, 23892, 42169, 292, 53703, 22441, 40183, 4412,
-56383, 26750, 38733, 5426, 55556, 26267, 49206, 681, 33004, 59034, 7525,
-38941, 26803, 61856, 9380, 34314, 47853, 20038, 52635, 5958, 45889, 21217,
-34504, 56744, 16119, 41676, 30610, 7890, 57562, 18029, 50367, 30845, 9484,
-38123, 58237, 964, 35264, 44183, 6734, 50409, 23251, 40724, 1931, 58033,
-17949, 30911, 61363, 4689, 42190, 17546, 32871, 56255, 2920, 39477, 22125,
-53482, 9851, 32530, 59369, 6471, 39048, 26808, 55960, 2412, 48915, 20495,
-28675, 44157, 4360, 55570, 10222, 34027, 49050, 1524, 54494, 28810, 15303,
-44800, 23160, 51085, 10500, 40037, 26431, 57070, 8709, 43695, 26169, 61543,
-11974, 32040, 54425, 14191, 46433, 35594, 511, 49833, 17716, 37691, 59005,
- 3703, 32414, 54638, 6866, 45711, 23710, 38707, 12616, 61117, 20467, 36703,
-48730, 9525, 44069, 11487, 58423, 2008, 29400, 63468, 8437, 32832, 44643,
-19037, 60788, 9573, 33618, 58904, 19569, 43547, 12501, 63329, 36941, 10000,
-44978, 25858, 64045, 11246, 34388, 46960, 19486, 62088, 9721, 42701, 24168,
-54011, 13570, 41541, 22015, 62324, 9686, 50421, 22605, 31323, 54351, 11612,
-43945, 22401, 53041, 8357, 32951, 63103, 2441, 41179, 19545, 60602, 29273,
- 1329, 37434, 55100, 6088, 33807, 51058, 18392, 43491, 4632, 59168, 27705,
-16964, 63780, 32083, 10733, 55083, 19232, 29082, 50384, 6379, 39742, 22926,
-56823, 538, 28844, 64733, 7904, 45887, 21535, 31003, 60651, 1025, 42007,
-16310, 61832, 25294, 47113, 13131, 40354, 22633, 59279, 10882, 38561, 26838,
-41368, 13327, 52879, 3629, 64486, 25173, 43010, 6604, 51647, 18434, 36754,
-55942, 9884, 29008, 50075, 1229, 40267, 25529, 54951, 6439, 28226, 47798,
-15366, 37001, 59536, 7945, 40940, 25168, 51406, 9947, 39250, 26434, 53926,
-11780, 42269, 21941, 62931, 38084, 6378, 32528, 60254, 12379, 40250, 22825,
-65429, 17069, 33774, 43603, 14256, 62223, 30397, 17192, 58134, 399, 48604,
-30078, 6091, 64620, 21144, 46214, 32325, 10179, 62645, 29436, 6395, 50042,
-12249, 28744, 44872, 21071, 50630, 27649, 6213, 35797, 59428, 16357, 50924,
-34387, 10796, 55692, 18790, 37097, 50173, 8350, 30511, 54270, 4289, 28649,
-49763, 11584, 56471, 28240, 20297, 52643, 5062, 32916, 47102, 16783, 55073,
-31481, 19249, 46074, 35649, 8590, 59127, 18181, 37125, 50969, 7640, 32356,
-53850, 3916, 48722, 26542, 41216, 5804, 64395, 22601, 44842, 1309, 60753,
-38313, 15210, 34183, 65130, 8640, 47989, 31142, 1506, 57849, 22917, 51134,
- 5745, 41360, 24927, 60633, 11391, 49635, 22657, 39800, 2968, 45126, 26986,
-59607, 10170, 43384, 29418, 15438, 58688, 36860, 6374, 61206, 18668, 33875,
-46131, 8522, 59461, 31147, 14391, 51712, 20098, 42879, 12115, 60544, 21059,
-40921, 16173, 44129, 23617, 52298, 12757, 46448, 21505, 40298, 1076, 65004,
-31682, 17114, 37705, 60775, 8780, 28365, 47898, 398, 61611, 21259, 44470,
-34824, 2704, 63474, 22728, 43356, 14510, 52393, 27383, 17605, 60253, 37747,
-13317, 56068, 24585, 45857, 7303, 39788, 19877, 49211, 25831, 64810, 10244,
-29477, 45523, 7957, 62745, 26210, 48372, 13840, 42340, 23632, 64093, 10535,
-41229, 23514, 60515, 6927, 33608, 58515, 17574, 40410, 23941, 61640, 12407,
-42629, 20375, 65157, 33980, 3718, 57738, 37204, 19090, 63123, 4175, 47393,
-21367, 38613, 1302, 48332, 22118, 57674, 4447, 28430, 63577, 15922, 43146,
-24500, 62128, 11020, 28917, 51578, 15099, 42737, 26438, 60117, 9687, 53451,
-25905, 41824, 173, 57010, 18570, 30360, 55133, 27525, 19546, 51182, 38061,
-14607, 46528, 23459, 56717, 558, 40970, 26389, 51552, 5909, 39886, 26223,
-55662, 3332, 31676, 54159, 20359, 48490, 5179, 41220, 23697, 56464, 1986,
-39348, 23244, 59706, 5937, 38632, 26712, 55986, 4024, 48449, 26414, 39152,
- 1887, 58559, 17664, 33838, 63853, 4582, 40327, 25767, 56055, 12818, 44243,
-23902, 53567, 10133, 49115, 21732, 43487, 15834, 59778, 27898, 9580, 62207,
-32295, 15155, 49869, 37708, 6862, 52640, 23866, 45138, 1656, 37527, 65362,
-15509, 33907, 59197, 11543, 47333, 18864, 35217, 50908, 14603, 33369, 54877,
-10233, 44420, 19485, 53539, 30731, 10925, 51382, 3552, 33665, 62959, 6804,
-43216, 23626, 48838, 2279, 56598, 20005, 46206, 26720, 39540, 11324, 57944,
-20741, 33427, 63462, 2955, 40506, 20639, 58941, 15987, 33988, 61610, 13825,
-45941, 19869, 34981, 65304, 1628, 50897, 20782, 30495, 58059, 4389, 43626,
-22191, 64920, 1859, 29943, 58952, 7212, 48249, 16565, 29143, 55424, 14447,
-42608, 24652, 53318, 1039, 29793, 46745, 7601, 57419, 27399, 4486, 48003,
-38211, 20504, 34081, 60320, 9681, 40690, 23793, 51496, 12250, 37101, 55605,
- 3130, 47995, 33794, 19905, 57341, 36426, 1747, 55136, 14396, 37741, 63201,
-19934, 45775, 536, 40466, 24117, 62068, 3994, 46438, 27379, 16257, 62906,
-33549, 13173, 57161, 36901, 19667, 45547, 1750, 36769, 62329, 12932, 42293,
-23293, 60009, 412, 39753, 10577, 61676, 28891, 2848, 48987, 38210, 12138,
-27634, 63552, 16538, 43035, 24372, 60539, 12937, 38595, 19785, 54644, 11651,
-48542, 37244, 18849, 27555, 55218, 6472, 49322, 23799, 40973, 18623, 61632,
-11443, 35073, 43627, 16944, 64683, 9922, 39010, 19525, 54105, 32096, 7060,
-61626, 35236, 18627, 53521, 4219, 34533, 65485, 20031, 45082, 2057, 52045,
-21813, 28925, 44139, 12081, 62915, 27265, 17312, 49007, 35504, 1976, 63849,
-26960, 48232, 4182, 30002, 53279, 8291, 64718, 35463, 3115, 59771, 30759,
- 6947, 56785, 25695, 41969, 13922, 53919, 4147, 43029, 23836, 55293, 13346,
-36790, 52729, 9846, 27442, 59280, 15324, 36565, 49612, 6245, 32425, 62382,
-10838, 45073, 31154, 3276, 49400, 34698, 9170, 62913, 26385, 43318, 13874,
-56543, 1201, 34423, 47347, 14934, 54637, 33641, 17235, 40588, 1841, 56516,
-21155, 46240, 4821, 32369, 53385, 13370, 38809, 21953, 51588, 8891, 47013,
-36046, 2817, 52963, 26612, 38930, 5916, 47353, 17977, 53992, 28352, 11518,
-49639, 25406, 40968, 10057, 53914, 26891, 64576, 13179, 42888, 33615, 18153,
-52482, 37983, 8498, 31762, 56207, 5094, 47291, 19018, 34371, 64660, 1882,
-39164, 20787, 49237, 5241, 34306, 58951, 16308, 32311, 49492, 5772, 13498,
-33992, 42916, 4463, 61970, 31683, 7163, 52537, 36920, 19680, 65511, 12022,
-38693, 21456, 61629, 11142, 47827, 23236, 42164, 8298, 62455, 18234, 31423,
-58795, 12191, 44313, 26358, 52260, 8577, 31660, 47282, 20534, 61577, 14563,
-44100, 35072, 10865, 65254, 21045, 42692, 12408, 52178, 24259, 44693, 10326,
-50057, 17020, 34916, 61777, 6497, 39369, 26319, 64346, 8165, 31743, 47796,
- 2786, 36164, 54027, 20279, 45295, 1097, 28778, 58148, 20189, 40860, 9527,
-57213, 26600, 42863, 12295, 51243, 28161, 3329, 42492, 24705, 63247, 5856,
-39611, 26190, 60085, 2501, 38671, 25651, 63914, 5280, 37824, 58959, 20326,
-46142, 27793, 11905, 54640, 36934, 13915, 63820, 26413, 38951, 8153, 61365,
-16449, 33938, 54388, 1436, 46010, 28849, 14757, 47523, 24313, 53757, 5934,
-42765, 22738, 52602, 3414, 31576, 57388, 9286, 42476, 25301, 39318, 14316,
-53591, 8702, 36789, 49587, 17306, 33091, 52326, 13940, 45738, 34515, 19635,
-61279, 2265, 44312, 34808, 7914, 62619, 19492, 48540, 36963, 11260, 53974,
-21149, 35170, 64301, 13052, 52144, 7302, 27940, 45285, 15330, 53982, 31017,
- 1368, 61731, 28089, 16937, 43427, 24715, 65279, 7233, 41767, 16907, 60865,
-26206, 47800, 4246, 32684, 52460, 10240, 30180, 54252, 13245, 43022, 31504,
- 9368, 58659, 37962, 1070, 52138, 24314, 40583, 5762, 64633, 23365, 48932,
-16522, 30161, 53806, 8688, 34032, 46265, 17727, 56999, 23963, 43925, 13896,
-53425, 20891, 32308, 58460, 879, 45665, 34517, 6550, 52344, 21248, 47194,
- 1796, 42797, 25371, 59333, 5105, 32279, 63308, 12785, 43032, 31757, 15773,
-59052, 3123, 51401, 29807, 20320, 54150, 4248, 46906, 21921, 32673, 56237,
- 2355, 45715, 15196, 41894, 25675, 57122, 8937, 45749, 23415, 39991, 11531,
-54504, 31711, 14733, 37682, 57825, 7335, 49961, 31727, 2942, 53192, 37657,
- 7689, 58138, 21292, 41551, 10902, 35121, 56831, 14762, 33381, 46996, 17993,
-27474, 50456, 14595, 37780, 53152, 18449, 45364, 8154, 58722, 29387, 18376,
-51384, 35675, 5674, 64042, 29862, 17273, 38174, 46118, 6972, 51426, 28166,
-18679, 55742, 37715, 4167, 28972, 53989, 18485, 64174, 27111, 14836, 52034,
-37423, 3673, 59648, 21108, 36500, 52578, 12197, 27922, 58729, 4255, 42572,
-20505, 52926, 30468, 12703, 61354, 36176, 16315, 49719, 25781, 62508, 721,
-43637, 25667, 64365, 15339, 28997, 59379, 19462, 44568, 13455, 60464, 22711,
-41069, 7834, 36568, 62377, 1925, 32144, 58611, 18548, 45261, 5194, 36658,
-50770, 7676, 27758, 60840, 2708, 44758, 22545, 51325, 13739, 40194, 26107,
-57207, 9024, 41903, 24931, 55741, 11419, 29803, 62489, 19901, 41112, 10660,
-46161, 23285, 63821, 1288, 57483, 22536, 48942, 17198, 27136, 59989, 12574,
-28712, 47910, 4905, 54775, 25568, 41784, 1742, 51140, 32694, 13395, 56779,
-25563, 39394, 281, 51205, 21775, 38578, 6229, 65063, 17571, 34336, 57072,
-12409, 39290, 1373, 51459, 19098, 29857, 55049, 5475, 49981, 26920, 38568,
- 3167, 61378, 19403, 31859, 59401, 976, 28185, 43362, 20448, 56388, 3536,
-42039, 22586, 57605, 14451, 52044, 24144, 40226, 8562, 64547, 17583, 36060,
-46339, 5109, 63075, 32554, 18466, 49628, 3849, 36896, 58606, 17522, 34832,
-53905, 10812, 44918, 20898, 57940, 13551, 42210, 22517, 52676, 7604, 47196,
-28817, 14037, 34377, 43844, 1332, 58029, 18512, 29410, 50802, 4606, 44176,
-15492, 57712, 23375, 50249, 5216, 29549, 44675, 19655, 59194, 9221, 34780,
-60393, 11882, 39441, 26872, 63924, 8499, 35917, 49005, 12492, 28544, 50436,
-18660, 61318, 5965, 44165, 22669, 59994, 29105, 12395, 62206, 3384, 41388,
-24885, 57907, 5711, 39201, 24568, 54233, 13227, 49270, 17811, 32172, 56631,
- 4912, 28149, 44726, 16222, 59299, 1827, 41685, 30887, 19517, 55994, 36633,
- 3828, 63288, 18364, 47539, 36021, 10590, 57828, 37847, 4720, 47027, 14551,
-52638, 23870, 39382, 8453, 43958, 21730, 57103, 15216, 39445, 25468, 60667,
- 7035, 35705, 56273, 15632, 47739, 29283, 19989, 42934, 11311, 60153, 18920,
-50675, 30790, 8070, 38223, 58184, 3280, 41673, 22354, 64120, 6602, 31031,
-51867, 3989, 38911, 26106, 65191, 5587, 49573, 18770, 29222, 55063, 11120,
-41359, 25282, 64867, 14262, 36311, 55481, 16036, 34071, 51211, 9748, 28718,
-46721, 381, 57289, 21018, 37591, 45697, 10060, 33246, 60319, 14433, 40191,
-25264, 62355, 8571, 48782, 20324, 30303, 63763, 4701, 51830, 17762, 33286,
-50111, 603, 60172, 25175, 42535, 5631, 62184, 18148, 46492, 27873, 11176,
-64926, 38365, 16184, 29801, 54137, 13114, 44873, 25207, 60853, 5600, 40109,
-24653, 62784, 1559, 36254, 57773, 10762, 44401, 28881, 3787, 63618, 22932,
-34045, 41037, 2006, 62048, 32498, 15182, 49617, 22590, 43539, 3085, 57237,
-20197, 33855, 64881, 1406, 42320, 13331, 58998, 23435, 48052, 8488, 36238,
-42913, 557, 58329, 32160, 19597, 44749, 10677, 50243, 29555, 5264, 63996,
-38144, 15936, 46318, 24379, 63441, 9034, 37955, 47932, 3487, 27997, 58005,
- 7715, 40937, 17234, 31377, 55326, 11510, 41233, 4131, 50701, 31790, 8320,
-54748, 35081, 207, 48349, 25340, 53392, 15670, 42882, 22148, 51389, 12119,
-39648, 24331, 60068, 17038, 31451, 56441, 15378, 42236, 24947, 55617, 10264,
-33276, 62868, 1225, 46189, 20073, 31405, 61267, 4366, 45923, 18253, 35055,
-53595, 2793, 48004, 29327, 7872, 52665, 36451, 14404, 31829, 45004, 9963,
-38285, 50676, 2361, 35971, 58265, 17937, 32398, 45779, 9088, 59166, 30067,
-17675, 64701, 37650, 6631, 46899, 16232, 60878, 26669, 42553, 12890, 53253,
-25271, 41106, 3246, 48767, 26347, 63006, 17202, 33504, 59303, 9523, 39828,
-23261, 45796, 13999, 55725, 25807, 47632, 9420, 36930, 46145, 18324, 55354,
- 8858, 48713, 33390, 17533, 60324, 37808, 11459, 32877, 44559, 5381, 58887,
-20976, 33576, 54998, 11271, 27932, 51718, 21480, 40220, 10248, 60957, 25560,
-45375, 13262, 29964, 62537, 1428, 40462, 25463, 51179, 4097, 36737, 55572,
-11757, 31818, 61359, 16675, 37021, 51640, 9468, 65067, 22384, 32716, 46867,
-10097, 60476, 34396, 20569, 41934, 611, 47286, 35539, 21492, 65248, 12348,
-40746, 25899, 51498, 4724, 41946, 23452, 55730, 193, 45133, 21826, 57997,
-17149, 33295, 62971, 2271, 45526, 31351, 15688, 55253, 34516, 510, 48819,
-38312, 16533, 31730, 55554, 11602, 44377, 21487, 63383, 9579, 41545, 27023,
-60690, 3083, 45915, 21785, 37867, 63705, 9003, 32687, 50405, 23491, 46083,
- 8259, 61462, 13983, 49268, 22301, 29689, 42720, 6491, 55155, 27476, 13503,
-50870, 30219, 18673, 58371, 35354, 741, 62253, 26755, 53773, 11639, 34133,
-64961, 2797, 44668, 19312, 49503, 27522, 1926, 63871, 34025, 6172, 57956,
-26015, 48253, 3841, 35038, 44476, 14082, 61216, 27280, 10454, 55592, 34977,
-13472, 50979, 25171, 43173, 9985, 59241, 21383, 47596, 12986, 42332, 36555,
- 9199, 62195, 20313, 37734, 58065, 4539, 33068, 49198, 8029, 27809, 62486,
- 2798, 43909, 23917, 61356, 17602, 33913, 52737, 8200, 27960, 63629, 22140,
-48521, 6888, 35696, 57268, 818, 43172, 18362, 33844, 59077, 10344, 44348,
-24478, 38800, 11983, 62819, 20559, 31010, 47480, 10720, 29038, 52592, 20971,
-40565, 1258, 55727, 35117, 19803, 47575, 4653, 59750, 22529, 38992, 531,
-50984, 18262, 32157, 52672, 12621, 41654, 21521, 54716, 6691, 31201, 60458,
-15707, 36519, 49783, 9466, 57438, 17328, 47991, 27377, 8584, 56165, 37222,
-11403, 60909, 25954, 47598, 10108, 29187, 48831, 16320, 52711, 26355, 38988,
-11193, 61485, 19762, 27967, 52787, 16010, 46395, 28715, 6466, 62172, 35632,
-16859, 57073, 22718, 44214, 8544, 34889, 59456, 25, 29262, 51342, 18240,
-34398, 55132, 11079, 32004, 49114, 20363, 59870, 5517, 46629, 20986, 35664,
-57965, 16444, 43082, 24921, 63273, 10705, 39925, 20840, 61417, 4778, 34757,
-56860, 7187, 30282, 63788, 3210, 46313, 29563, 10600, 49249, 370, 34186,
-65040, 6974, 40295, 23291, 49421, 16556, 29871, 54896, 7151, 36862, 50511,
-16715, 28685, 59467, 10165, 43272, 24540, 65218, 15599, 40063, 21500, 60862,
-24580, 53204, 6094, 62884, 20564, 29539, 54347, 15573, 43784, 7747, 63656,
-24195, 39795, 14366, 52900, 4118, 43651, 27892, 20116, 57614, 33491, 10532,
-45635, 4860, 63470, 36186, 14584, 57994, 21713, 44721, 8137, 28636, 52686,
- 4686, 43166, 25225, 56681, 633, 33085, 62610, 7567, 41030, 20071, 58693,
-27524, 6030, 63341, 38035, 14500, 29457, 54309, 6935, 46942, 28004, 469,
-61968, 25711, 49367, 12798, 30371, 47369, 3104, 36891, 61380, 15417, 43060,
- 97, 54743, 33198, 16955, 53075, 6237, 48169, 21300, 36536, 56492, 9381,
-32430, 62148, 15393, 27906, 49754, 279, 43093, 24266, 57298, 4396, 28064,
-42335, 16198, 56051, 2841, 39618, 25756, 51777, 7590, 29095, 62709, 17988,
-54801, 9891, 31844, 46776, 2099, 56863, 18613, 32478, 61756, 10853, 48716,
-26574, 38534, 14188, 52938, 5006, 47034, 24376, 38936, 9844, 59064, 26356,
-40652, 10639, 64007, 19112, 27412, 57425, 6992, 40263, 26654, 53519, 930,
-38495, 26254, 51840, 6250, 38765, 20430, 55784, 10637, 30279, 52792, 16917,
-40745, 3622, 55328, 18593, 38849, 26965, 44051, 890, 56472, 34417, 11254,
-60766, 20771, 46617, 34158, 2205, 64085, 38404, 8119, 28531, 49462, 19311,
-45927, 5530, 30606, 50395, 16732, 40789, 23192, 55435, 9091, 36466, 53119,
-17253, 44782, 22366, 51687, 12530, 36675, 65424, 17918, 28207, 51542, 691,
-36582, 49183, 18196, 45404, 28228, 2041, 62990, 29811, 17065, 49813, 35404,
- 1398, 60460, 31092, 17480, 52611, 3108, 47777, 27491, 15617, 53415, 29560,
-12709, 57427, 38068, 16905, 30701, 53358, 11048, 40337, 4387, 49729, 19384,
-36189, 55524, 2154, 40814, 16188, 53831, 28755, 12175, 49747, 25865, 55131,
- 6055, 40907, 22286, 51252, 1777, 58192, 26829, 40766, 5313, 56629, 16558,
-36968, 64073, 8187, 32437, 58806, 17199, 42828, 9000, 61564, 25528, 41161,
-14199, 48760, 26444, 64290, 10381, 41864, 23894, 61381, 8008, 33857, 49725,
-17007, 42601, 23614, 53544, 59, 46597, 20670, 31272, 43588, 4678, 37292,
-65514, 20310, 41798, 856, 54118, 30439, 13531, 36293, 58452, 3809, 41503,
-22374, 62805, 6018, 30633, 46261, 2460, 54816, 33257, 5873, 65208, 35741,
-12827, 55854, 23372, 47672, 1785, 31230, 50821, 13451, 55611, 27492, 18983,
-49399, 37634, 7014, 61877, 14379, 41731, 24803, 65107, 1360, 43927, 24699,
-39576, 14330, 62001, 27447, 1720, 50102, 34162, 6113, 46491, 23361, 57281,
-13912, 31723, 50565, 16896, 46379, 23363, 40835, 14227, 54739, 33795, 17990,
-61763, 37482, 20873, 52698, 14070, 29308, 58232, 3876, 34746, 60266, 11928,
-42204, 23011, 64341, 12705, 33779, 48977, 733, 39754, 21985, 54857, 6686,
-33340, 51368, 3528, 42206, 9143, 39972, 26030, 45626, 12951, 57259, 4225,
-41727, 22373, 30510, 48654, 884, 56359, 21794, 33136, 47508, 11794, 60186,
-36041, 2149, 50425, 19138, 55523, 31015, 17335, 48345, 1051, 30888, 51178,
-10883, 60169, 37184, 16158, 32344, 64492, 13330, 41521, 22485, 50946, 16140,
-29834, 54092, 2356, 36246, 52456, 16411, 30863, 50244, 1770, 41625, 22978,
-65466, 15974, 35609, 43991, 20087, 54566, 7863, 37547, 63553, 18252, 27411,
-48647, 8909, 56291, 22752, 30119, 47337, 8131, 59698, 24828, 39903, 14988,
-64411, 5189, 43937, 28107, 17989, 47985, 38384, 7973, 63492, 32844, 19881,
-48883, 12357, 36388, 60811, 7012, 50343, 34693, 21444, 63137, 12053, 32247,
-57282, 14807, 34930, 49859, 6404, 43126, 24310, 60717, 15669, 29957, 50528,
- 6830, 44529, 23605, 40908, 3943, 65024, 18333, 39403, 26944, 59751, 12240,
-43017, 21764, 48284, 5469, 53341, 20950, 33173, 51907, 3922, 47320, 35583,
-10963, 64689, 20214, 45334, 12695, 59703, 22475, 43292, 14676, 65122, 25763,
-41330, 297, 48122, 24132, 62104, 12156, 31999, 58917, 5870, 47007, 21603,
-65019, 15967, 40438, 24159, 44928, 5242, 53169, 15696, 41127, 22920, 54930,
-14002, 33388, 60114, 9820, 39706, 24973, 56568, 10912, 36988, 59109, 4538,
-32475, 62503, 12970, 42674, 28806, 8026, 61568, 38351, 2685, 31020, 46028,
- 9520, 56942, 32866, 16103, 62488, 27052, 6858, 59628, 33573, 15719, 54308,
-36802, 7396, 57962, 20147, 28334, 45015, 11796, 56690, 22706, 34427, 43179,
- 7467, 63239, 36690, 545, 50762, 21432, 41033, 6375, 60045, 19556, 35276,
-57899, 14758, 30229, 64993, 11867, 45258, 29551, 20547, 61883, 5165, 43967,
-36758, 20969, 65282, 9337, 38638, 26942, 61451, 13913, 47675, 34484, 7669,
-53405, 19681, 31785, 50964, 2781, 43993, 24039, 48316, 4927, 54686, 21416,
-31490, 50892, 2461, 34047, 55386, 6071, 44102, 16581, 31232, 56612, 4009,
-45292, 22979, 58345, 2320, 29051, 64581, 13106, 39535, 26613, 61644, 11329,
-51238, 18893, 59340, 28223, 7051, 50562, 31566, 14878, 44646, 23959, 63418,
- 7371, 40125, 23850, 56108, 15501, 35874, 44820, 12591, 60487, 22934, 40763,
-14470, 51261, 25724, 43245, 3061, 49947, 16443, 39455, 26716, 60532, 7242,
-33313, 43294, 3842, 57827, 12442, 45470, 22192, 33302, 56666, 4963, 46992,
-19243, 34395, 50091, 11986, 55693, 33325, 7907, 52417, 37772, 19168, 64715,
-12686, 32558, 54363, 2710, 44043, 28284, 7472, 65469, 36468, 1165, 59690,
-27502, 8293, 50440, 38372, 4520, 28465, 56757, 7860, 46053, 36224, 19571,
-51574, 9698, 45426, 28298, 2444, 52691, 37435, 5692, 57448, 19575, 29482,
-63218, 13987, 44590, 26237, 58725, 12319, 30472, 56370, 48532, 33477, 390,
-64251, 37776, 19568, 33280, 51809, 10254, 61230, 19187, 44888, 37066, 6937,
-63014, 18931, 29011, 53852, 9393, 44509, 24454, 39331, 5709, 59003, 22407,
-35320, 62034, 15766, 43092, 23638, 40607, 2494, 55501, 21550, 48007, 5826,
-37313, 60734, 9868, 34219, 48296, 13104, 64947, 23349, 43051, 5196, 61041,
-18744, 35962, 58199, 10237, 31352, 48270, 3927, 56763, 13522, 41252, 25012,
-51224, 1942, 32974, 59612, 13700, 44322, 35205, 4703, 65177, 19003, 34806,
-44120, 2636, 55940, 31928, 19515, 49001, 10283, 60433, 35655, 2130, 58110,
-27169, 16225, 38129, 56306, 3121, 29784, 51980, 19256, 44225, 15288, 28650,
-47386, 5696, 53837, 20291, 45372, 1776, 40628, 22299, 59514, 17364, 38608,
- 3509, 52821, 35808, 10474, 62583, 20541, 29923, 57543, 11625, 43727, 22653,
-56160, 7782, 31745, 49546, 1085, 64537, 29177, 16900, 37991, 58179, 9074,
-44850, 30330, 14636, 60135, 25421, 41976, 5161, 55920, 25199, 39461, 2842,
-53085, 32397, 7304, 46234, 19367, 60376, 35106, 6684, 40006, 26826, 51250,
-17508, 38529, 12934, 51989, 31489, 3233, 53682, 35877, 9841, 62821, 32495,
-20281, 58741, 6152, 44285, 25930, 51992, 3607, 42374, 21490, 64490, 1303,
-46790, 29039, 14892, 51431, 27977, 20061, 48243, 183, 53880, 37717, 14843,
-27260, 58911, 16589, 49554, 27172, 4350, 53938, 38486, 10898, 37268, 46993,
-19721, 52559, 5491, 39279, 24582, 47103, 14724, 38099, 64344, 4174, 36278,
-46773, 8351, 61192, 19886, 32382, 48491, 10689, 43803, 23962, 64059, 13917,
-46775, 25515, 42472, 1582, 51392, 26568, 47055, 5716, 41244, 22645, 58498,
- 9743, 32170, 47969, 17609, 59944, 2681, 31406, 46063, 17396, 54623, 3891,
-42581, 30261, 15456, 64464, 23888, 42187, 8805, 60583, 23237, 39215, 13785,
-61912, 26763, 38948, 10209, 45013, 18947, 63630, 27425, 11368, 59254, 36395,
-20645, 47916, 9311, 53716, 38103, 14206, 31732, 51748, 10306, 45920, 36000,
- 5131, 55275, 22151, 42163, 2867, 35932, 44816, 13233, 55949, 21851, 36505,
-61799, 5142, 52834, 17815, 33539, 51253, 9409, 46763, 31603, 196, 57900,
-24992, 42000, 7632, 56905, 24305, 39226, 9297, 58756, 20488, 32518, 63546,
- 9797, 42217, 21274, 48320, 14731, 64923, 36797, 16932, 29808, 61209, 2164,
-50401, 27785, 16102, 38415, 54195, 8381, 27400, 62652, 3067, 29623, 45299,
-21759, 59529, 8960, 30220, 49015, 16791, 41832, 23673, 58250, 11923, 51884,
-19693, 31069, 43707, 12653, 55582, 36319, 16452, 62965, 21963, 47764, 11274,
-31811, 61055, 1625, 43301, 25714, 63310, 17182, 33824, 59130, 14035, 47708,
-27733, 15839, 52123, 38131, 8534, 32383, 50295, 2052, 41208, 20393, 62138,
-16213, 24036, 55322, 14772, 28569, 49840, 5556, 59637, 16047, 46755, 34649,
- 3005, 27581, 57491, 15946, 34892, 49952, 3434, 41492, 23276, 64323, 13600,
-52363, 26465, 41268, 11640, 54013, 4260, 29152, 49091, 7574, 63286, 26728,
-45870, 8924, 31008, 57806, 16646, 27434, 53131, 3967, 44398, 24972, 39697,
-11265, 55971, 20529, 28281, 48421, 7879, 44057, 24468, 53629, 15250, 40039,
-23406, 62604, 5695, 35286, 55337, 17141, 41920, 6767, 50637, 27773, 15956,
-54341, 38273, 9357, 28337, 61592, 21961, 46694, 8503, 40459, 25736, 54607,
-14219, 31063, 50749, 12632, 37064, 54167, 6454, 44462, 22390, 64046, 8565,
-32649, 58543, 878, 37933, 62049, 10746, 42116, 24032, 64750, 13694, 33511,
-56081, 5474, 44396, 25526, 64376, 13841, 40386, 24655, 46575, 998, 49788,
-16498, 31509, 53909, 2521, 40698, 25066, 61872, 15977, 36643, 44734, 13672,
-54000, 34924, 2723, 28157, 62763, 20271, 43016, 1496, 52924, 21741, 31422,
-47041, 8841, 63082, 29067, 18652, 59047, 36161, 11527, 51324, 28990, 14175,
-47237, 21204, 64049, 2116, 43452, 25440, 61253, 7518, 41627, 24959, 59917,
-14818, 28761, 47312, 101, 51240, 26936, 38737, 11183, 61217, 17968, 36363,
-50098, 12267, 31642, 53626, 16297, 37732, 60953, 6087, 34798, 45537, 10342,
-64288, 21466, 30587, 56004, 7124, 45177, 32358, 12060, 63502, 38050, 18804,
-27843, 58557, 2243, 30884, 64776, 13022, 42491, 21765, 60700, 222, 54791,
-31806, 10450, 50829, 27069, 16392, 55215, 30226, 1944, 59557, 27893, 17225,
-53016, 31551, 3824, 37765, 53834, 9984, 60941, 23512, 38808, 8895, 62665,
-18072, 33346, 54482, 962, 42707, 23666, 56657, 7128, 40432, 23094, 55679,
-13121, 33183, 48371, 19950, 59748, 11472, 35809, 45845, 1330, 54866, 33621,
-18313, 49943, 9649, 45916, 34294, 157, 57389, 22159, 49230, 6663, 35409,
-52281, 17336, 45451, 29032, 980, 62352, 37256, 15694, 27802, 63537, 6479,
-41013, 25344, 60286, 15993, 30987, 47198, 8842, 63245, 29527, 15838, 58451,
-33310, 1668, 49301, 11252, 42929, 19955, 29236, 45880, 2330, 59501, 29023,
-14753, 64632, 34779, 10654, 53267, 19897, 32708, 46838, 1327, 61757, 18818,
-30665, 52626, 6293, 40552, 25387, 54738, 774, 29909, 52131, 8397, 40932,
-25494, 54248, 10445, 34881, 43724, 6685, 63357, 20556, 31607, 58672, 14003,
-37598, 46828, 16218, 53461, 4712, 39172, 26871, 56606, 863, 35278, 60927,
- 9801, 39040, 25367, 47676, 3482, 59227, 22344, 48707, 6137, 27900, 53774,
- 2349, 42143, 25359, 57778, 14893, 41210, 23060, 55412, 12952, 39433, 6373,
-54286, 24367, 43191, 8081, 35888, 60686, 3353, 42731, 22781, 61692, 13101,
-54110, 26973, 38669, 4746, 43640, 11054, 31403, 61420, 8088, 42992, 23465,
-32135, 41339, 8794, 65162, 18536, 37763, 51033, 9811, 30399, 61866, 14777,
-46649, 29570, 7176, 49045, 36674, 1605, 61283, 20369, 33337, 44859, 13946,
-56546, 23437, 38827, 11192, 54346, 19884, 34765, 47383, 1515, 63738, 38009,
-19697, 49475, 8327, 57026, 32274, 199, 51920, 35164, 14087, 64050, 30562,
- 2591, 59923, 34868, 9377, 50074, 30011, 18695, 46451, 10213, 64762, 31066,
-19268, 58008, 37480, 1239, 46708, 18172, 57447, 32828, 4052, 51322, 16528,
-30659, 59096, 719, 42597, 21784, 64968, 4522, 45344, 29392, 18802, 61689,
-34268, 10405, 40657, 26462, 53666, 12893, 46126, 27483, 16523, 35306, 52810,
- 3341, 39344, 25974, 49563, 11548, 30753, 53628, 18747, 42097, 7474, 56722,
-32026, 18067, 59841, 34971, 8245, 63340, 20037, 35769, 51109, 8968, 30009,
-55072, 4174, 27278, 48854, 7333, 60587, 23195, 46422, 12141, 34250, 56510,
-16610, 39076, 7512, 58525, 17851, 36726, 50437, 12941, 42075, 1705, 48635,
-25106, 57765, 4187, 36973, 54809, 9094, 40993, 23682, 57973, 10799, 33359,
-55512, 20104, 45997, 4855, 37187, 57136, 18773, 40218, 12614, 63574, 23399,
-43142, 2378, 56756, 30203, 7377, 62369, 24013, 44067, 4034, 55931, 23409,
-41486, 13517, 57013, 25238, 39536, 4768, 51159, 18507, 35866, 61143, 1446,
-42834, 22774, 52163, 5829, 34003, 50504, 11702, 41193, 24985, 51474, 4656,
-33137, 49251, 13916, 44309, 27326, 18193, 62706, 38357, 6837, 33940, 51790,
-19277, 39682, 5967, 56910, 36994, 12363, 58946, 27306, 17799, 33212, 45121,
- 5045, 56702, 20726, 31472, 52466, 10814, 39670, 26119, 64249, 13177, 38712,
-26874, 52108, 10184, 28552, 63454, 276, 40559, 24591, 50679, 5820, 29009,
-62539, 16163, 41780, 25873, 59431, 4095, 30621, 65174, 16376, 51651, 25498,
-41406, 12107, 58478, 27801, 3427, 56283, 37300, 12926, 51280, 21511, 30796,
-55078, 2999, 47485, 32731, 20775, 52542, 1197, 42786, 22981, 56070, 14030,
-39092, 24563, 52279, 6407, 47053, 25837, 64352, 16628, 34310, 60094, 8789,
-53474, 26086, 40608, 6430, 49984, 22227, 39193, 17424, 48726, 4508, 63178,
-29062, 16501, 50657, 36921, 4771, 45312, 23810, 57609, 13713, 35984, 62587,
-15867, 42953, 22632, 59143, 4494, 30710, 48323, 21600, 56035, 15498, 35871,
-52196, 493, 42856, 28124, 7269, 57059, 34789, 20262, 63747, 12139, 42243,
-20981, 49534, 15211, 31662, 53120, 5107, 62743, 18014, 43086, 33070, 14522,
-37511, 63939, 15904, 46557, 32017, 19554, 51210, 6820, 37714, 64187, 4298,
-32879, 50956, 19056, 46344, 30940, 41, 65401, 20918, 49292, 16852, 30204,
-55606, 6314, 39210, 24881, 47017, 9682, 64861, 22200, 50582, 58093, 2742,
-35846, 52311, 20164, 46288, 1389, 57757, 20921, 29517, 54101, 5100, 43122,
-24227, 55952, 68, 40493, 21256, 60356, 17126, 33742, 57754, 12174, 30638,
-48045, 6346, 65421, 25110, 42006, 410, 60591, 26003, 40286, 5074, 59727,
-17606, 43327, 28901, 10286, 35346, 60027, 14886, 41793, 24112, 61880, 17351,
-41159, 6200, 46496, 23874, 51017, 16143, 41566, 21602, 57050, 808, 33429,
-60268, 20648, 42330, 3788, 49118, 28937, 9782, 63366, 25415, 39439, 10848,
-49173, 19919, 35143, 63730, 11685, 39065, 26584, 52518, 7265, 38705, 25478,
-57066, 15624, 49272, 1278, 42489, 23115, 59978, 4959, 48280, 19625, 37139,
-57480, 7282, 30262, 60141, 18791, 45713, 6532, 55450, 22998, 39305, 363,
-61188, 21626, 29384, 48683, 3075, 42857, 12939, 55311, 26813, 41761, 6596,
-46516, 17476, 61058, 33711, 12727, 38414, 58826, 18053, 32949, 42514, 10493,
-55625, 29708, 4842, 48198, 26246, 61243, 19596, 44736, 30375, 3624, 54736,
-28117, 17057, 61472, 33335, 9445, 43942, 22951, 62518, 16025, 29670, 52896,
- 5133, 47793, 26340, 39160, 1417, 50201, 17162, 64727, 29585, 10398, 45288,
-25037, 49285, 6677, 55660, 19864, 32925, 45549, 14418, 52836, 22075, 41478,
-10401, 33484, 47278, 17380, 63363, 1999, 31638, 46651, 15757, 59641, 32746,
-11002, 49349, 20436, 28423, 57551, 9025, 29906, 60563, 15013, 42756, 22571,
-62241, 8358, 35841, 57366, 16423, 29111, 61606, 7275, 34936, 48310, 2946,
-57758, 23207, 45742, 10055, 65364, 26232, 44998, 14804, 50032, 28953, 2463,
-38194, 64528, 8492, 49191, 26082, 39333, 13768, 60382, 3171, 44318, 21969,
-50864, 5977, 45767, 20021, 59481, 3483, 37201, 50253, 18301, 30894, 57943,
-10972, 33921, 53644, 19382, 43811, 6555, 55767, 12154, 39704, 22874, 52782,
-13120, 43493, 29219, 4869, 62614, 37922, 15975, 31218, 47406, 10641, 64872,
-24205, 40820, 7071, 59543, 17854, 35392, 43223, 11580, 58264, 18745, 37608,
-65049, 7710, 31686, 48880, 3649, 61124, 17207, 43007, 36856, 10456, 30225,
-55548, 4210, 45189, 24407, 39045, 12966, 57642, 19385, 30682, 61410, 2901,
-54215, 26252, 43550, 12946, 34100, 55716, 10178, 41704, 21712, 64231, 11389,
-34198, 49471, 3375, 45156, 27551, 7718, 52881, 36455, 19837, 64463, 12087,
-41534, 3160, 60365, 29250, 13212, 48971, 21558, 65343, 11004, 31019, 50612,
- 1906, 39737, 26308, 54793, 6658, 61780, 26043, 46223, 11620, 41175, 26660,
-51366, 8576, 28431, 56926, 537, 44777, 29663, 9308, 60121, 36054, 11992,
-56149, 30200, 15761, 48370, 27757, 9978, 61879, 36524, 12386, 56200, 26825,
-40302, 9283, 58311, 34372, 14761, 48222, 19792, 59253, 929, 42405, 31635,
-15495, 38067, 27486, 17783, 55954, 29468, 11610, 63724, 17268, 36299, 50309,
-12754, 40474, 22567, 59275, 10718, 39132, 26370, 52579, 7937, 28396, 54254,
- 3918, 42649, 23938, 56096, 14890, 39827, 21399, 51582, 9149, 31456, 45330,
-13096, 55839, 20696, 30073, 49276, 6356, 57367, 24535, 46729, 3073, 30686,
-54327, 7039, 38744, 21938, 57658, 12799, 34155, 59156, 4497, 32283, 63157,
- 7556, 43723, 25981, 54185, 8685, 39502, 23334, 52733, 13879, 34962, 53840,
-20484, 41828, 5026, 59361, 26740, 52771, 2395, 42943, 24153, 56194, 9766,
-33167, 62009, 17395, 46844, 8717, 40043, 26364, 58240, 13397, 52288, 29561,
-16906, 33234, 65207, 2696, 40790, 22615, 50768, 12394, 39935, 26579, 63303,
- 9617, 32090, 58080, 16966, 46997, 10122, 35042, 63699, 15461, 52219, 23643,
-38882, 4547, 53224, 21519, 28855, 56707, 460, 42284, 24622, 52259, 9491,
-29162, 63770, 1808, 47507, 19108, 35405, 65506, 13932, 39538, 129, 51548,
-11729, 35310, 64383, 20496, 45740, 6165, 36495, 47643, 18021, 56727, 30529,
- 698, 46792, 35067, 11283, 58761, 20563, 44655, 14225, 61619, 24447, 42540,
- 8128, 34709, 51828, 2711, 58575, 30434, 16355, 37758, 47911, 4464, 65490,
-25646, 38562, 629, 60381, 18942, 49829, 29926, 9166, 51663, 36483, 19395,
-54802, 6461, 43390, 24509, 65215, 3145, 37449, 46549, 13845, 54671, 35598,
-18246, 47746, 895, 53402, 37472, 17736, 27597, 46275, 2503, 52203, 36892,
-19357, 53978, 11641, 42129, 29219, 13717, 56232, 35152, 1015, 41218, 21703,
-59835, 9452, 33970, 55117, 15964, 41896, 23625, 55964, 94, 45978, 23138,
-49688, 17363, 30342, 62975, 12323, 34813, 57099, 15453, 41036, 24822, 62442,
-12783, 47486, 4976, 41886, 22686, 64763, 2932, 38859, 23302, 49739, 17463,
-34701, 57921, 1890, 31778, 47736, 7845, 54848, 33891, 19743, 50155, 1438,
-60383, 21042, 34130, 43546, 3843, 54202, 20149, 28775, 50142, 9734, 62095,
-27418, 4496, 50569, 28686, 14816, 36168, 57104, 11533, 41361, 20480, 32697,
-58092, 483, 53749, 22386, 39605, 14067, 51928, 21162, 63539, 1143, 36268,
-50895, 11691, 44271, 24113, 40028, 9047, 59629, 22461, 39731, 6724, 60259,
-27001, 48261, 2204, 54154, 18529, 28816, 61075, 11891, 33267, 58438, 17768,
-47554, 1523, 32177, 54844, 23811, 45457, 17649, 37373, 53446, 5454, 44352,
-24627, 40764, 15477, 60142, 22974, 48229, 9399, 44206, 24288, 38664, 3776,
-58609, 21776, 38523, 2189, 64514, 18832, 34899, 47140, 13403, 61889, 22786,
-41188, 4094, 50118, 24428, 40192, 981, 59618, 18410, 34937, 54719, 3047,
-42528, 21993, 47956, 5509, 52932, 25395, 44716, 2295, 62762, 26277, 38566,
-11973, 51967, 23106, 60221, 5688, 46328, 63079, 8650, 37655, 49456, 4019,
-41652, 22890, 54639, 6535, 32862, 62700, 2594, 45092, 34243, 19678, 64582,
-12854, 47613, 37177, 16171, 32043, 63506, 8530, 46462, 29687, 3038, 58255,
-36793, 17828, 62673, 26472, 48242, 2638, 35914, 64827, 15199, 42247, 33617,
-11961, 62429, 23326, 45349, 15566, 64627, 26645, 43751, 1618, 52536, 20951,
-40162, 14842, 54825, 22938, 39497, 11932, 49771, 17871, 35122, 58855, 2117,
-30725, 61072, 7119, 43497, 15175, 62080, 23735, 45340, 12846, 39970, 21142,
-58213, 6023, 48291, 22255, 39487, 1797, 51994, 20612, 36077, 64302, 3646,
-32120, 45577, 7090, 36373, 56622, 10920, 44125, 25502, 54711, 8005, 33499,
-61445, 1470, 47871, 19921, 35528, 51219, 4074, 43264, 25343, 58942, 5986,
-39874, 25101, 45828, 9257, 60274, 33113, 14394, 64906, 36586, 10385, 47694,
-20642, 62335, 5072, 35362, 49758, 16330, 41111, 24704, 57850, 8362, 50918,
-26894, 43569, 16048, 58885, 25878, 47608, 8175, 32810, 58014, 14375, 27469,
-63521, 4549, 40558, 22340, 52129, 13495, 65334, 26868, 41628, 7882, 33771,
-54694, 3895, 30363, 49621, 18052, 60538, 22187, 40981, 13860, 35397, 61907,
- 9554, 28819, 51383, 18326, 42118, 13399, 54680, 26475, 40310, 5728, 58118,
-22719, 41039, 3807, 61791, 26225, 40397, 14318, 53164, 19119, 30480, 56400,
- 7481, 27296, 43848, 4172, 63974, 25635, 40067, 13361, 58196, 6468, 32351,
-65011, 20962, 40429, 9544, 59473, 22627, 32668, 63815, 5753, 47895, 21016,
-43793, 16304, 61815, 32914, 6504, 51485, 22521, 43520, 4320, 62236, 30380,
-12646, 36783, 61290, 10333, 32969, 58361, 4774, 41928, 23526, 48979, 1198,
-31531, 55875, 7554, 43521, 32561, 16868, 54717, 35481, 8346, 45649, 26373,
-57340, 13988, 29437, 62087, 9120, 41288, 21364, 63957, 14329, 39580, 24368,
-59716, 9111, 44823, 18386, 29145, 55318, 8637, 49454, 27324, 13907, 63083,
-33245, 328, 37637, 44641, 13034, 56708, 34793, 19661, 54725, 2062, 46347,
-23222, 62575, 29167, 8642, 48361, 24896, 42014, 7324, 60736, 25584, 43407,
- 8145, 47814, 28654, 15208, 55365, 31562, 5044, 64973, 17092, 49764, 36422,
- 670, 55112, 25893, 46374, 14920, 38586, 25292, 43424, 8493, 55438, 37337,
-21736, 51022, 5287, 43962, 25276, 60709, 14594, 39772, 5975, 62483, 28309,
- 9929, 57768, 32032, 19888, 61582, 3336, 46213, 36108, 6258, 57456, 31952,
-17849, 63197, 10887, 50140, 26927, 44048, 14169, 55084, 23958, 41860, 5763,
-53464, 26288, 38919, 10836, 55771, 18276, 32880, 64991, 13210, 44803, 26050,
-52199, 6218, 40649, 24950, 60536, 13630, 38833, 23645, 63857, 10597, 38618,
-21597, 49809, 7394, 56987, 26949, 39488, 10095, 49182, 20186, 33889, 44713,
-27219, 13663, 58923, 31259, 15265, 60673, 25492, 45863, 11352, 28959, 48709,
-17104, 58368, 6263, 31791, 43367, 2095, 59815, 24629, 51627, 10745, 40591,
-20899, 61765, 16617, 47810, 32659, 5370, 52875, 11811, 41748, 22988, 51242,
- 9521, 27899, 56511, 738, 51634, 21093, 39655, 5589, 50059, 31289, 10881,
-56191, 24960, 42109, 8031, 62186, 26805, 38660, 2759, 48548, 27038, 64312,
- 5308, 44186, 24226, 50826, 16183, 40243, 21254, 56782, 36114, 322, 30868,
-51906, 8177, 64164, 34441, 15520, 45966, 25443, 60640, 12004, 44781, 24731,
-54708, 10815, 29055, 48216, 14875, 61158, 24790, 49623, 146, 39405, 21247,
-59436, 13314, 47039, 29484, 17041, 54025, 37826, 10934, 29316, 57092, 18041,
-39940, 12793, 50332, 33858, 19523, 55926, 1215, 30470, 49464, 19375, 45232,
- 2792, 40834, 24001, 55587, 13178, 39490, 22312, 53898, 11191, 30453, 56192,
- 5693, 44255, 22757, 38720, 3289, 62238, 21892, 38503, 5416, 56029, 23478,
-42709, 1287, 52922, 38051, 16477, 31583, 55360, 6854, 43504, 24474, 38898,
- 2972, 59578, 23176, 48725, 16399, 37387, 63865, 12805, 39052, 5418, 47881,
-26181, 53933, 1121, 42672, 22816, 56322, 6993, 32318, 59939, 3191, 44877,
-21015, 63677, 15060, 30931, 54037, 12920, 46227, 29133, 8660, 58318, 34261,
- 500, 38201, 62779, 10601, 50008, 34458, 19117, 51482, 31450, 8055, 59498,
-21816, 34212, 49152, 14825, 43408, 5178, 55581, 25330, 44773, 642, 50170,
-17590, 40248, 25840, 54512, 3721, 30841, 49327, 11902, 57574, 26705, 39006,
-10851, 48554, 17507, 52702, 21050, 44029, 6236, 50571, 27701, 16492, 37542,
-55230, 8976, 33609, 65431, 11646, 27944, 48137, 21285, 61057, 1996, 29077,
-59320, 20468, 49321, 10142, 36303, 52190, 767, 42755, 25185, 53254, 5661,
-38653, 26497, 56053, 3213, 48446, 20494, 35746, 64373, 5408, 42747, 31879,
-16247, 58083, 37925, 7462, 47683, 23247, 60165, 16483, 29756, 46486, 6589,
-64024, 26284, 39548, 16882, 43647, 5426, 53478, 33947, 18939, 65272, 11839,
-29537, 50280, 2585, 37752, 62413, 17920, 35403, 58804, 9557, 44879, 20999,
-34809, 47398, 8268, 29479, 62005, 19862, 40676, 12013, 51608, 4223, 65427,
-19378, 47657, 30233, 258, 63240, 16654, 40615, 31004, 8811, 53807, 34334,
-20579, 51439, 11483, 47079, 36265, 1127, 50163, 16877, 34352, 54287, 12863,
-29173, 51895, 19695, 42986, 137, 47622, 35119, 19396, 60691, 7893, 33649,
-47525, 12455, 60334, 32164, 20758, 58032, 2612, 43631, 23982, 51927, 6579,
-39283, 21782, 56454, 8465, 32686, 62669, 19952, 49831, 8913, 31890, 57649,
- 1410, 43986, 26533, 54508, 13555, 41163, 23926, 45944, 3831, 64542, 18117,
-30827, 53717, 1782, 17014, 56431, 38322, 7330, 48362, 34598, 599, 51973,
-18307, 35414, 56420, 8928, 41990, 24826, 54615, 14351, 49480, 21552, 38782,
- 5835, 44080, 26771, 54808, 816, 28553, 43138, 8244, 59636, 25410, 39415,
-15924, 55319, 34513, 4445, 59875, 37969, 16201, 32488, 43682, 13099, 60950,
-35838, 17723, 53664, 37352, 4064, 60225, 17083, 30882, 50774, 11318, 45355,
-24295, 55712, 13272, 38522, 20785, 57238, 10437, 33989, 62484, 4471, 46439,
-28591, 10716, 54678, 38330, 18479, 48435, 28016, 3199, 37819, 55706, 7667,
-31821, 41009, 19390, 63099, 5466, 34621, 58700, 18571, 42990, 9402, 38650,
-22547, 63528, 15551, 51021, 5553, 41802, 23033, 62457, 3614, 41242, 24840,
-64179, 5360, 44614, 23552, 59565, 2256, 30235, 65441, 10576, 40600, 26055,
-62468, 11684, 35109, 58187, 17210, 50757, 30865, 5949, 59403, 25752, 43548,
- 2338, 63430, 36780, 12415, 27459, 60723, 14349, 50055, 26144, 45678, 11112,
-53243, 27018, 40871, 13133, 62851, 20120, 28867, 49257, 10249, 60246, 19215,
-34340, 48895, 9224, 57519, 21465, 45506, 11662, 31628, 55907, 409, 27826,
-52905, 21058, 43718, 9249, 59385, 19064, 31512, 63479, 11342, 40731, 25894,
-49889, 12355, 38870, 25243, 52450, 9883, 37840, 48298, 1511, 34205, 64857,
-20198, 42952, 15548, 52104, 23767, 47297, 13111, 28346, 44703, 2306, 61941,
-15517, 35986, 54057, 19890, 42082, 1673, 56573, 29005, 18243, 51603, 38172,
-13246, 34399, 62038, 15008, 37613, 57362, 9853, 34755, 63031, 14125, 40203,
-23464, 46173, 1458, 64737, 20125, 32355, 59664, 2937, 38976, 26353, 63864,
-14138, 34726, 57473, 2342, 43212, 24513, 51814, 14943, 36178, 53620, 6239,
-40287, 17612, 52257, 36624, 12340, 44149, 4197, 63238, 30217, 16615, 33572,
-59888, 11645, 44748, 22027, 61046, 10005, 32412, 42531, 14900, 53558, 29866,
- 9509, 46552, 23384, 61148, 2414, 41187, 19728, 54899, 31048, 9258, 49027,
-38088, 3288, 53492, 23716, 42571, 8366, 32801, 60543, 13772, 46894, 22462,
-58601, 3431, 36135, 46800, 14977, 57069, 34384, 10791, 27585, 53588, 4604,
-40367, 23466, 50410, 1960, 60665, 27706, 15476, 53727, 33035, 7059, 48569,
-23868, 56957, 15568, 33026, 40959, 10320, 58066, 20533, 34562, 47118, 12538,
-59752, 23214, 42728, 2098, 63874, 26103, 40771, 15090, 58833, 23099, 30730,
-64292, 7083, 42600, 25734, 59791, 9694, 33943, 64864, 14790, 28160, 53319,
- 4799, 41568, 24887, 55934, 1340, 29427, 44975, 8921, 49935, 17529, 33961,
-63603, 9462, 41740, 26171, 60923, 1809, 30613, 48685, 17079, 44041, 3664,
-39789, 26230, 51581, 15316, 39239, 20712, 59972, 4626, 34964, 62073, 9049,
-30075, 51415, 21094, 41972, 8270, 61022, 35448, 3143, 50498, 29451, 20050,
-65325, 12923, 42417, 26886, 62065, 4835, 39532, 23342, 63876, 1233, 38999,
-26294, 61187, 11395, 45592, 23063, 65039, 15391, 34476, 57169, 12913, 35956,
-50611, 19222, 44161, 1453, 64362, 20017, 28988, 45098, 10908, 49416, 22622,
-63497, 7500, 47225, 27714, 2087, 58439, 28848, 14623, 44723, 21648, 48649,
-36809, 523, 65160, 20293, 40912, 6418, 60668, 26850, 42855, 1168, 52053,
-29414, 12331, 37573, 49755, 15594, 65302, 27191, 5775, 58583, 33605, 13589,
-61797, 38491, 18106, 27880, 59649, 562, 50785, 15437, 46632, 25839, 40655,
- 2307, 51502, 25523, 55238, 4264, 46024, 33528, 18009, 38253, 57186, 12098,
-32404, 52428, 9812, 45377, 21251, 55250, 13835, 35048, 42264, 16375, 51675,
-22349, 47163, 6311, 43486, 21395, 52794, 3777, 27388, 43956, 8852, 64281,
-35960, 19081, 49958, 10048, 32337, 45958, 18782, 52647, 38294, 824, 31646,
-58342, 9302, 39466, 20896, 64812, 2496, 32191, 50292, 8440, 35845, 56526,
- 3975, 45043, 24847, 41164, 2045, 64254, 28332, 14844, 53698, 36985, 6382,
-63129, 18414, 35337, 45365, 8321, 57313, 32140, 16921, 50324, 37648, 4591,
-46598, 21400, 57547, 2093, 34136, 62778, 19158, 43985, 5087, 60642, 28696,
-16838, 57351, 27289, 7184, 50841, 37461, 4385, 59056, 32452, 6798, 60813,
-36970, 16761, 55719, 25121, 41509, 5925, 47479, 12747, 64450, 25246, 39163,
-10050, 62567, 31617, 3631, 56290, 27319, 7801, 49108, 30072, 2368, 52895,
-28069, 18693, 48422, 5157, 55405, 30209, 16878, 37827, 53590, 8833, 43162,
-24057, 56199, 7854, 44952, 21787, 53477, 11243, 30333, 62012, 18194, 41558,
- 3800, 59017, 30508, 19608, 61646, 33791, 8736, 47207, 24184, 56021, 14826,
-42058, 21369, 54224, 6867, 40301, 26536, 56442, 2667, 34280, 46156, 17523,
-63493, 27594, 551, 57618, 37095, 13440, 50853, 33689, 16697, 53054, 37260,
- 5036, 65407, 27567, 15280, 57864, 35245, 11438, 61850, 20025, 49856, 28934,
- 794, 51766, 38193, 9117, 29599, 45321, 19521, 54941, 28254, 6012, 38230,
-59894, 17105, 32387, 48305, 11996, 64149, 29984, 17372, 38010, 55815, 3995,
-43839, 19250, 63772, 36045, 1460, 43753, 26940, 60869, 5449, 49014, 24990,
-42741, 3719, 56525, 28288, 6521, 52052, 36492, 18946, 49715, 7519, 35079,
-55286, 4290, 46264, 13584, 39500, 22139, 56902, 2493, 38690, 23455, 51067,
- 5821, 37462, 57975, 17262, 32454, 62493, 9645, 43712, 22442, 65260, 15681,
-37487, 56788, 5419, 28882, 46160, 20201, 52958, 12541, 44146, 22642, 57236,
-10124, 34601, 64604, 21205, 53766, 12169, 33163, 56424, 6848, 46602, 31386,
-19281, 50210, 12493, 37815, 56672, 269, 34481, 52994, 15359, 45322, 27049,
-16419, 37408, 57290, 5442, 41020, 23095, 53988, 10339, 44747, 20360, 58107,
-13528, 30824, 46418, 18221, 53000, 7648, 34631, 57954, 3519, 32029, 51251,
- 8949, 45091, 22468, 62876, 6534, 30558, 57511, 15067, 33638, 47346, 6006,
-61161, 24089, 39367, 3512, 52550, 31328, 16695, 54160, 38039, 10579, 33120,
-51275, 4917, 61686, 27407, 10073, 52110, 32712, 14114, 53767, 22703, 46403,
- 9976, 31404, 63045, 14549, 45186, 24898, 59768, 2536, 32206, 43299, 17780,
-52632, 38041, 11337, 27082, 49766, 4726, 32912, 54070, 10572, 43535, 35136,
-20379, 57805, 8139, 31912, 65408, 11845, 39259, 19313, 60730, 29310, 8950,
-59012, 27112, 2078, 49512, 27592, 16421, 60885, 37328, 696, 30355, 49317,
- 7708, 61942, 28038, 4232, 57621, 36476, 17280, 61387, 32212, 13418, 59981,
-38304, 15762, 48724, 28088, 1350, 54669, 37829, 16811, 58737, 28595, 7516,
-61376, 23572, 48217, 15148, 35771, 55178, 5913, 42807, 24210, 46686, 15822,
-60925, 22329, 41847, 14781, 33072, 61958, 12697, 30098, 54993, 17482, 44620,
-33566, 4351, 51694, 20443, 28615, 47609, 12329, 60048, 24506, 40262, 2824,
-64608, 28812, 10589, 55251, 26784, 39302, 12927, 54130, 29732, 7793, 37523,
-53281, 15717, 34405, 49636, 8405, 43890, 35949, 22448, 61486, 11714, 29680,
-48920, 17429, 42413, 22357, 53608, 3574, 30456, 45612, 10890, 57837, 23220,
-30573, 44666, 4977, 52790, 22540, 46971, 16174, 36285, 43929, 12046, 59165,
-33417, 16802, 65150, 38092, 8442, 44311, 24579, 58197, 11156, 36615, 61563,
- 5849, 28210, 50635, 18814, 41207, 11846, 31604, 58842, 726, 40452, 25449,
-46973, 5444, 51135, 20924, 28504, 46819, 12557, 55361, 442, 41400, 26048,
-64407, 5335, 39130, 26956, 60644, 1555, 38770, 24674, 65250, 12918, 48469,
-19558, 28349, 53778, 6002, 37620, 49570, 11915, 43773, 22709, 59916, 6726,
-27876, 62864, 12162, 29428, 49987, 17992, 45233, 32962, 1593, 51885, 25984,
-44898, 5725, 33664, 55893, 17558, 27174, 63155, 13221, 35267, 59195, 1806,
-43187, 16063, 64491, 24143, 44682, 121, 56117, 28829, 19754, 42525, 5452,
-58031, 33468, 10103, 52132, 24841, 41857, 11614, 30892, 58540, 18167, 50122,
-10872, 39451, 21232, 62750, 14048, 36255, 45913, 17266, 65069, 31669, 10354,
-45431, 24844, 61250, 16470, 29730, 42711, 21270, 62254, 8518, 49478, 26971,
-44119, 16313, 55610, 11332, 46662, 24395, 40499, 2007, 49518, 21083, 39463,
-13769, 50990, 34411, 3150, 53991, 27205, 18961, 62171, 35175, 304, 58470,
-38023, 7658, 29182, 50353, 17717, 47072, 5935, 30026, 42817, 692, 59516,
-24298, 41262, 16148, 65076, 2530, 29434, 58973, 20426, 46570, 13876, 27623,
-64034, 6399, 31929, 59725, 54307, 27850, 9556, 47510, 26453, 61265, 2266,
-38666, 25857, 52476, 7063, 36034, 49867, 3801, 60546, 26766, 41935, 14045,
-47090, 29682, 17023, 56423, 25419, 40880, 2358, 33230, 46860, 11530, 53607,
-25881, 40851, 9977, 50164, 18975, 31848, 56168, 12606, 42915, 21605, 59099,
- 8608, 45496, 22732, 63786, 12659, 42228, 34222, 16649, 56889, 37711, 6000,
-44905, 26482, 58657, 3192, 34557, 56302, 18450, 39206, 5468, 52690, 20522,
-36684, 56069, 9515, 28152, 47025, 1513, 57775, 35880, 17398, 64594, 38443,
-13939, 27229, 61392, 6525, 50228, 23762, 41961, 13788, 54369, 22273, 49175,
- 7630, 34456, 51990, 17269, 43748, 34239, 13746, 64551, 37919, 6851, 28840,
-47218, 19855, 56815, 12076, 33556, 43153, 15611, 54138, 32635, 8710, 48538,
-27792, 60, 51123, 36365, 7608, 57227, 20810, 34599, 62007, 9552, 27132,
-44725, 3555, 50970, 36261, 18156, 42165, 4364, 64066, 28945, 19327, 49414,
-12531, 33865, 59115, 6880, 36728, 52376, 347, 57317, 23944, 47846, 5263,
-35091, 46405, 10023, 61060, 23840, 41135, 13798, 62307, 32584, 1802, 55211,
-37078, 7364, 30408, 51573, 16089, 45169, 35559, 19962, 61344, 5910, 48197,
-24710, 43391, 16767, 58985, 27844, 253, 63934, 31420, 18861, 54329, 2880,
-45628, 15889, 38156, 56227, 1164, 27697, 63051, 8881, 35108, 47757, 14700,
-63610, 21662, 39436, 66, 60359, 18720, 35185, 57015, 7175, 30064, 61315,
- 1280, 48333, 28788, 20290, 51308, 4756, 46667, 21914, 31337, 60836, 341,
-49697, 33104, 20510, 42800, 13396, 54895, 34548, 2064, 63175, 25087, 47935,
-16987, 37217, 64928, 9174, 31822, 57856, 15990, 37247, 63663, 6656, 33126,
-45202, 20588, 52780, 14317, 42808, 22646, 57108, 10446, 46020, 23337, 53122,
- 8207, 45298, 34862, 3754, 61859, 36642, 13813, 58987, 27173, 16974, 54726,
-33767, 4613, 38109, 49043, 20121, 42937, 1096, 57254, 35287, 9680, 61444,
-21637, 40239, 12736, 59234, 18825, 37054, 64752, 10755, 38423, 48618, 4767,
-28304, 52778, 18048, 40692, 25256, 50064, 10367, 38884, 20490, 52350, 14173,
-36156, 59151, 8965, 45575, 22794, 49630, 16341, 29474, 62630, 3296, 45492,
-22215, 53218, 6261, 38680, 26498, 56017, 2398, 32084, 50850, 7955, 27395,
-53302, 951, 41372, 22212, 56334, 3481, 33319, 52431, 11253, 48369, 425,
-34972, 56279, 18521, 39046, 4996, 63708, 20887, 33124, 60997, 8901, 30318,
-54888, 15873, 59537, 31474, 6891, 61507, 27696, 17124, 47849, 38360, 8429,
-49290, 13651, 44917, 31021, 15532, 63349, 36228, 2939, 57894, 33051, 19672,
-61218, 14548, 48214, 35391, 7963, 52427, 21717, 34400, 49017, 9875, 43825,
-33867, 5790, 53610, 38459, 18422, 36376, 47733, 11706, 1038, 36047, 63435,
-14450, 39769, 20812, 48614, 12105, 55475, 31390, 16718, 43208, 21564, 57020,
-11818, 38541, 20459, 64111, 337, 49665, 35296, 6881, 62096, 20583, 50213,
-13796, 60424, 24220, 38987, 3125, 63208, 17026, 29552, 59405, 128, 40020,
-26304, 64988, 5767, 38645, 26836, 55603, 1030, 30666, 49002, 19377, 59577,
- 2931, 47148, 29557, 19244, 63995, 11831, 40402, 21138, 51646, 7644, 48404,
-26730, 43340, 16306, 61351, 7901, 40446, 24587, 63715, 14711, 31022, 44232,
- 9147, 55102, 29107, 2850, 53053, 37948, 16442, 33723, 45782, 1684, 60525,
-26739, 38542, 3919, 45293, 26698, 63754, 1019, 30709, 55794, 6190, 47519,
-21489, 52959, 17512, 34208, 60278, 4906, 39975, 25065, 62987, 1897, 46785,
-27220, 18461, 64665, 37558, 11960, 54922, 29355, 17878, 47250, 31693, 4734,
-52107, 13689, 46898, 37008, 15535, 65266, 30914, 11892, 57489, 24795, 47235,
- 9571, 34127, 56715, 1763, 53433, 30000, 16624, 48737, 27396, 10856, 31866,
-43979, 19453, 65185, 12066, 39237, 22057, 50867, 1018, 31564, 56557, 8617,
-43635, 22678, 50942, 14340, 41665, 21800, 62033, 9725, 33278, 58695, 803,
-49507, 14094, 40582, 21971, 65154, 3547, 33434, 51171, 10127, 46509, 25206,
-40458, 11269, 58035, 20417, 31307, 64194, 9336, 46522, 18972, 31927, 50293,
-13302, 56888, 23353, 38891, 7353, 54321, 26305, 42551, 15698, 49899, 9443,
-40952, 25809, 50890, 12452, 39320, 23485, 63417, 9231, 35938, 57873, 16294,
-41017, 11567, 52378, 26411, 39113, 15414, 64137, 4062, 47274, 23188, 59363,
-16011, 30367, 43846, 7019, 52317, 28597, 13341, 54759, 23680, 42758, 1812,
-49922, 22398, 40682, 13231, 60260, 27750, 8036, 58388, 35295, 2402, 50951,
-31162, 19417, 41529, 13514, 58047, 17374, 30588, 47424, 20765, 51660, 7475,
-33020, 46647, 1988, 64908, 29371, 19142, 53320, 11174, 31223, 56308, 15069,
-40201, 24292, 52741, 4001, 47307, 25342, 43235, 6905, 53527, 28401, 2367,
-51010, 31176, 15589, 60037, 37514, 7994, 33535, 62767, 3575, 31295, 58220,
- 6871, 45881, 26477, 63645, 3044, 40761, 18918, 31581, 61710, 1016, 36949,
-51341, 13991, 34002, 59133, 9529, 41073, 24038, 64666, 14671, 44354, 22534,
-60486, 11232, 38205, 57920, 15729, 32894, 60071, 9322, 43453, 25902, 63489,
-15701, 40142, 24333, 60524, 14528, 28918, 51316, 10317, 42267, 25336, 53040,
- 1067, 36379, 48641, 18225, 41275, 3957, 45275, 23671, 49030, 12145, 36332,
-57361, 5630, 32128, 59307, 20732, 28371, 55388, 5016, 51079, 22910, 40564,
-12834, 52613, 24999, 40149, 8631, 54963, 28400, 17267, 62551, 38085, 5237,
-27861, 54856, 14523, 63149, 27046, 16734, 58436, 30309, 3562, 61643, 22619,
-43928, 57939, 17502, 31655, 52555, 4256, 42830, 24381, 59936, 6102, 35022,
-64927, 1636, 45897, 25050, 53559, 5385, 40672, 23898, 44467, 15103, 54490,
-26334, 42484, 9614, 39481, 26207, 44635, 7795, 52569, 21756, 35142, 54290,
- 9208, 42212, 23755, 52116, 13506, 44177, 23229, 50952, 14903, 40190, 20878,
-62302, 9214, 39519, 25383, 43468, 11089, 55550, 35251, 1335, 50221, 25530,
-60039, 15246, 38670, 23014, 64903, 50, 31056, 47054, 19536, 53636, 4086,
-33485, 50943, 6999, 60861, 23792, 40660, 15192, 46436, 22949, 62966, 5304,
-29442, 55301, 18452, 42604, 9672, 57127, 24325, 49510, 11005, 39449, 21601,
-58447, 14415, 38869, 26817, 42745, 2911, 56384, 12806, 41715, 23413, 54781,
-14871, 35384, 50277, 10163, 31373, 52618, 5238, 42119, 25030, 58739, 3211,
-35562, 63983, 15058, 42360, 22918, 60506, 29550, 6198, 55172, 22004, 42682,
- 532, 53018, 32938, 16425, 62552, 22188, 43592, 14166, 40748, 23826, 63298,
- 4617, 37874, 59976, 17518, 50909, 3485, 40419, 26315, 54365, 7121, 29117,
-58670, 15459, 47807, 26461, 39221, 5682, 64013, 25599, 48656, 3626, 28557,
-54063, 15338, 42825, 27267, 18282, 60147, 36346, 8992, 45643, 25533, 55012,
-14808, 39443, 22055, 59859, 4124, 47277, 23955, 42063, 6292, 52222, 22150,
-34917, 59314, 5297, 40801, 23921, 44443, 1876, 61334, 19511, 31883, 48803,
- 4602, 65396, 34338, 20580, 58048, 3114, 32190, 60129, 18539, 44587, 4231,
-54603, 29758, 19617, 43630, 2803, 59988, 21172, 45876, 8712, 54588, 19101,
-40266, 31385, 9578, 49544, 37124, 4579, 57210, 19529, 35200, 61083, 3087,
-45115, 15138, 39427, 26405, 62150, 8344, 54035, 31284, 3436, 49560, 38314,
-17354, 29748, 63424, 9486, 37526, 48807, 4844, 62694, 25486, 40256, 46,
-56658, 11421, 43456, 25461, 60270, 15713, 40345, 21725, 50306, 7025, 34676,
-63153, 3531, 43761, 25611, 60491, 6401, 39066, 19510, 63841, 33954, 13548,
-58135, 38200, 16182, 46827, 23027, 57246, 10029, 42057, 21507, 54173, 14165,
-44958, 26216, 51003, 13182, 40050, 22694, 55283, 9750, 43573, 24625, 54180,
-11764, 47962, 20957, 43077, 7455, 56504, 27852, 17220, 36913, 54441, 520,
-48314, 30660, 5897, 52956, 35506, 17856, 29139, 44351, 4902, 49384, 23932,
-39240, 18697, 50389, 7273, 35761, 54511, 4136, 32267, 47121, 6784, 59400,
-32050, 19850, 45552, 12047, 57204, 28571, 6304, 62967, 26062, 52324, 13229,
-33065, 64413, 656, 43231, 22869, 51630, 16138, 42575, 2396, 63998, 34061,
-18358, 46460, 9908, 60025, 26924, 43623, 4856, 64293, 22410, 45072, 1963,
-32752, 46761, 11947, 58002, 19467, 36206, 46003, 1268, 37814, 51139, 10534,
-43330, 24196, 49179, 8521, 29996, 50680, 10420, 44556, 22385, 59051, 13423,
-30122, 45948, 15931, 50743, 22516, 40954, 10818, 31246, 61528, 16206, 50318,
-28769, 9973, 63037, 36328, 4706, 58774, 21494, 51825, 1086, 65359, 31568,
-18759, 58334, 5146, 46002, 31391, 18484, 56943, 8144, 36093, 61316, 3282,
-31834, 57283, 7193, 46864, 32726, 18304, 54885, 5311, 49652, 28782, 17265,
-61255, 38045, 9553, 30997, 44371, 4649, 55139, 12956, 40918, 25774, 56843,
-11437, 35350, 59353, 21562, 45935, 15995, 29848, 49139, 854, 34020, 59921,
-10096, 51543, 19922, 34716, 47902, 12451, 64865, 20763, 31871, 40428, 5863,
-62521, 19910, 31986, 52577, 8436, 45669, 23647, 63334, 10542, 48207, 20780,
-29693, 65125, 7868, 46190, 27836, 3938, 57251, 38013, 14359, 59798, 22821,
-47988, 12804, 39553, 21076, 49520, 7947, 30679, 56977, 1647, 45376, 18924,
-35444, 47889, 11353, 59831, 25855, 41089, 7009, 36801, 46663, 3208, 59468,
-34989, 7746, 55482, 18856, 47012, 34245, 9451, 29068, 57554, 20841, 47427,
-13688, 34669, 63032, 18335, 42782, 32799, 3180, 59624, 20232, 45264, 13062,
-37696, 56997, 17475, 34011, 46285, 6754, 56203, 34919, 4178, 51268, 30561,
-20190, 57400, 1899, 34688, 62919, 6681, 44706, 19402, 35030, 53685, 13367,
-62303, 26163, 39281, 2524, 49410, 16461, 29511, 64811, 12056, 52230, 26820,
-38537, 10246, 57602, 17452, 46317, 28343, 8932, 53540, 36435, 17470, 51681,
-10792, 41324, 26762, 49411, 14118, 34637, 64387, 10067, 47662, 26869, 38530,
- 5915, 62641, 25737, 43417, 1363, 53427, 21916, 62284, 14857, 42110, 23953,
-46185, 11585, 49928, 21356, 32867, 59538, 5794, 48237, 20133, 43655, 35591,
-14543, 65092, 23139, 44501, 5998, 54742, 20294, 46624, 27663, 11545, 53631,
-32504, 14417, 50521, 29263, 18851, 64223, 37362, 4348, 31350, 55340, 8304,
-44022, 25808, 57732, 14499, 41110, 22060, 51594, 13202, 32732, 48627, 10257,
-55974, 28318, 210, 49600, 27226, 7826, 62310, 32298, 4285, 44310, 25970,
-64185, 639, 39586, 23609, 60305, 5536, 38612, 20989, 62058, 1529, 30251,
-49633, 14914, 33813, 60499, 6230, 39238, 26758, 65318, 14932, 32423, 47659,
- 4487, 63124, 19849, 29043, 42522, 13626, 61586, 21762, 49169, 3023, 64327,
-19524, 34325, 53942, 13467, 62328, 2239, 31366, 58957, 20570, 41858, 14012,
-64129, 23820, 41447, 17203, 52531, 2953, 65527, 33743, 16084, 49685, 37549,
-19784, 43379, 9547, 56556, 21982, 40054, 15301, 56220, 30001, 6363, 60577,
-35909, 19704, 49727, 11733, 41108, 25479, 54521, 1102, 38812, 20767, 50077,
-15940, 34271, 53350, 13402, 60157, 23374, 40186, 3758, 53134, 30855, 9354,
-60831, 27298, 17560, 57173, 32941, 5337, 64448, 37915, 19469, 2428, 60100,
-32961, 7224, 38350, 54468, 167, 37011, 62783, 8376, 29767, 58535, 19348,
-47996, 6673, 33730, 56691, 2054, 47464, 31960, 18635, 53438, 13293, 38721,
-26819, 46376, 10610, 37122, 50980, 14288, 41341, 22984, 63966, 1826, 37515,
-49325, 16429, 28822, 52868, 12075, 40942, 23872, 58914, 2284, 38796, 23086,
-65520, 13890, 33155, 52432, 3732, 41917, 24411, 63433, 16034, 47589, 21451,
-35223, 60616, 7298, 28652, 49883, 3418, 42555, 27622, 9803, 63322, 37599,
-13301, 57349, 21041, 43951, 31236, 3146, 38454, 58468, 7493, 28623, 44922,
- 248, 53954, 24935, 47293, 14833, 42935, 2578, 61111, 25151, 40308, 4490,
-50145, 19171, 31527, 57009, 404, 37072, 51422, 11276, 32049, 61654, 18016,
-45639, 29575, 1101, 35316, 63276, 8408, 45379, 26637, 60890, 13956, 40982,
-25385, 53729, 10573, 30548, 63647, 4236, 39264, 21110, 51507, 13709, 61181,
-27759, 19630, 49924, 30557, 12880, 52806, 25760, 40167, 1150, 64445, 22328,
-44647, 6642, 37578, 61195, 1883, 28012, 49524, 9671, 55446, 23700, 40537,
-10808, 52444, 25027, 60787, 27, 27723, 43895, 9015, 64925, 23916, 39871,
-13035, 62573, 23089, 46620, 7703, 37854, 50564, 17366, 31283, 48025, 12797,
-61110, 27582, 924, 32700, 44672, 10047, 56532, 21208, 33674, 53921, 8180,
-45120, 23604, 41861, 6048, 55292, 21483, 40485, 2820, 33493, 59139, 21229,
-43829, 995, 63148, 25452, 38695, 5684, 60996, 22812, 53720, 590, 38955,
-24974, 50692, 14657, 58888, 22887, 42011, 10686, 57029, 29340, 13655, 46244,
-34845, 7686, 58266, 31596, 187, 64212, 37849, 8531, 55459, 27921, 16427,
-53060, 30655, 908, 57168, 28505, 10473, 50776, 37857, 16550, 32424, 60832,
- 1152, 36079, 59024, 18281, 44148, 3952, 55564, 35213, 7918, 46299, 23766,
-52756, 14730, 39284, 20491, 62394, 870, 45992, 29919, 8667, 55671, 37502,
- 2144, 62118, 23845, 45454, 16816, 37624, 54340, 14802, 36585, 45618, 19163,
-53714, 36137, 9351, 50724, 17068, 32354, 55756, 12102, 43827, 26870, 56776,
-11240, 33571, 51686, 17399, 38122, 56254, 4105, 29240, 46397, 18124, 53167,
- 2276, 41249, 23562, 57102, 12873, 35166, 46765, 6743, 57759, 25076, 40275,
- 9988, 31574, 46305, 15057, 56197, 27560, 9134, 45576, 37616, 17579, 27656,
-46636, 8229, 55887, 29800, 1296, 49932, 36534, 9936, 30396, 48353, 22731,
-40434, 4663, 58287, 11570, 31976, 60478, 2282, 46455, 35923, 7266, 51113,
-24743, 47260, 12971, 41581, 23551, 55024, 3534, 30975, 62696, 7154, 42708,
-23584, 61496, 11409, 29512, 58517, 6736, 40508, 25333, 49622, 9658, 29620,
-65442, 21417, 47997, 14039, 35464, 50364, 3020, 41769, 22013, 52616, 14714,
-28136, 46089, 20074, 41610, 11454, 64764, 27131, 18964, 49244, 27963, 14580,
-53197, 35750, 2945, 44684, 25917, 64277, 13487, 39219, 21951, 43213, 11199,
-59362, 25320, 42070, 2748, 49055, 18027, 61636, 29426, 4091, 59902, 28096,
-11315, 48690, 30640, 20683, 62083, 5473, 47518, 18296, 33118, 64207, 9697,
-43639, 26617, 51499, 7547, 40674, 26430, 58069, 11583, 45390, 21981, 53503,
- 6657, 31733, 58294, 1755, 43089, 19178, 52244, 33630, 12549, 62271, 18259,
-55009, 36120, 2261, 52239, 25104, 41895, 6041, 54416, 18354, 62114, 27440,
-15449, 51127, 37236, 17833, 56886, 33010, 8241, 59554, 35530, 18730, 50654,
-12652, 33273, 54449, 16488, 36351, 59992, 9492, 42108, 24466, 54354, 15313,
-44921, 22976, 41201, 6962, 55423, 21922, 49915, 15756, 42532, 23865, 55747,
- 2589, 38713, 19860, 56345, 5908, 36950, 50746, 15862, 41791, 23940, 58283,
- 8173, 33898, 45182, 2094, 54121, 10652, 37366, 61920, 4984, 41916, 23174,
-57055, 15601, 31099, 48526, 12146, 55193, 18845, 32199, 52488, 12543, 44127,
-33640, 5427, 64747, 17699, 48896, 31397, 7779, 36066, 47185, 12476, 57800,
-31941, 20392, 52439, 1451, 44808, 32367, 17487, 58364, 11456, 28327, 64366,
- 3392, 40477, 24341, 55688, 9139, 36875, 49059, 14723, 58291, 24470, 40328,
- 4548, 62662, 18322, 28604, 57890, 451, 34353, 60603, 11539, 43974, 24708,
-63757, 14821, 49124, 7681, 39047, 26996, 47429, 13050, 56350, 21277, 45036,
- 8246, 33550, 47067, 18467, 57233, 6834, 40279, 32045, 2181, 53019, 36611,
-17034, 33081, 65530, 3524, 51300, 26217, 40807, 15360, 53928, 27528, 18287,
-46754, 33616, 4338, 62691, 36625, 13490, 46302, 19160, 38401, 61372, 2752,
-27513, 56710, 12444, 42687, 22222, 51292, 8609, 39285, 25053, 62956, 15416,
-42102, 21721, 60912, 1726, 33745, 58226, 10126, 42403, 24174, 52295, 12034,
-36837, 64555, 16540, 28510, 48116, 19700, 39693, 5136, 57736, 30158, 8337,
-65228, 31706, 2941, 59691, 12459, 28800, 46559, 20848, 61641, 5930, 39014,
-23952, 53347, 3128, 41078, 22469, 65114, 6574, 47126, 27472, 13675, 62852,
-37227, 10205, 58245, 21639, 33685, 50986, 8887, 43449, 25070, 61095, 10743,
-31041, 53917, 1911, 45107, 23156, 59603, 7400, 33611, 42099, 70, 63377,
-21864, 50823, 6329, 34209, 61032, 16332, 40318, 22959, 53476, 12755, 62695,
-21596, 44068, 7464, 60211, 19162, 53277, 26273, 42074, 16666, 51649, 27579,
-14101, 62283, 30569, 19738, 58271, 1688, 31517, 65167, 8201, 39257, 26061,
-57007, 16448, 36429, 51741, 14656, 32442, 53891, 2799, 43935, 35427, 18451,
-62093, 102, 44771, 36472, 16855, 55938, 4586, 43943, 19069, 63782, 28377,
-12792, 59171, 37488, 8969, 34450, 54828, 31125, 57021, 16178, 47903, 35449,
- 3939, 56382, 37790, 7835, 47157, 21554, 56062, 17329, 38651, 9343, 53037,
-26745, 60213, 4388, 50991, 29583, 7972, 63551, 35557, 21839, 55959, 9836,
-34318, 45647, 16043, 54661, 35898, 7272, 58158, 38437, 13979, 44471, 23878,
-55956, 841, 39108, 21819, 53232, 13042, 34083, 60817, 16363, 48805, 364,
-38982, 18839, 56800, 34816, 13588, 49826, 38438, 17158, 29760, 63204, 5723,
-44451, 20561, 37668, 48059, 8138, 29409, 44851, 19286, 65025, 10772, 39171,
-25958, 49594, 11914, 44607, 35847, 4331, 59068, 11322, 41062, 21667, 52319,
-29193, 4967, 64402, 23694, 42242, 1341, 57860, 29460, 6470, 46740, 33064,
-18349, 62318, 8196, 34606, 50408, 2289, 64100, 26124, 39090, 12275, 59102,
-31025, 6205, 52396, 33277, 11347, 64852, 26916, 46546, 16691, 27967, 62921,
- 913, 34303, 48421, 13184, 55352, 28477, 17809, 65027, 23943, 44137, 14923,
-29294, 51826, 17730, 46470, 8075, 36673, 60555, 2897, 42094, 24784, 62672,
- 4795, 40137, 24201, 59890, 15302, 46105, 25296, 39832, 2273, 53283, 21647,
-63342, 16853, 28429, 50047, 5800, 42120, 15784, 61775, 26592, 48474, 5035,
-35674, 51851, 15749, 42040, 23030, 59239, 6096, 30311, 44276, 18327, 65311,
-33509, 7261, 51464, 19964, 46115, 32527, 12584, 52734, 37169, 14846, 49975,
-20502, 30337, 53043, 6489, 41744, 31695, 19689, 54853, 11534, 61469, 23142,
-42447, 3440, 37358, 64670, 16922, 29200, 59613, 10323, 42177, 23737, 63706,
-13237, 46117, 20567, 56185, 5321, 47506, 22520, 38878, 10313, 61275, 20794,
-48258, 6140, 30775, 60312, 12463, 51461, 23841, 41014, 9023, 58614, 25205,
-48931, 7466, 33937, 52192, 15646, 46365, 31254, 4534, 64607, 34102, 19091,
-57639, 3004, 45950, 34174, 8978, 53918, 26634, 44790, 13047, 49668, 29131,
- 4727, 61199, 33165, 20966, 49238, 3033, 34193, 53747, 7562, 59341, 14364,
-44326, 25319, 51787, 11903, 41173, 23445, 50178, 17879, 37451, 56914, 1837,
-40603, 25290, 51899, 9691, 45848, 18275, 60793, 32255, 10523, 45763, 36880,
-16302, 53906, 34541, 354, 50294, 25128, 42292, 5084, 64094, 17400, 30567,
-54779, 1162, 39768, 21896, 50014, 16699, 36338, 64821, 12310, 29985, 47580,
-16278, 54380, 24127, 39820, 9858, 57538, 23378, 48676, 3603, 32008, 56767,
- 6037, 45383, 26591, 39128, 2609, 55539, 26893, 38616, 13708, 46468, 238,
-35358, 64760, 7853, 44938, 34112, 4392, 37918, 54448, 17102, 45570, 35063,
-14066, 53176, 20512, 43864, 9773, 49128, 28930, 4405, 64671, 37881, 10714,
-48017, 23085, 56455, 12404, 29129, 50705, 20123, 59226, 10807, 31329, 41419,
-24202, 55110, 7774, 32035, 48975, 573, 42914, 22889, 62480, 6252, 50126,
- 1840, 29086, 43347, 9458, 62023, 31713, 18079, 59681, 25298, 40875, 5939,
-60960, 23732, 49196, 682, 40770, 17209, 34118, 46246, 14036, 54985, 31357,
-16049, 49990, 6107, 41651, 24501, 57360, 508, 40031, 20233, 50610, 27373,
- 2995, 33919, 60483, 8732, 41876, 26741, 62797, 6797, 30873, 57495, 3423,
-44211, 20531, 31904, 62498, 10287, 47146, 29381, 4214, 64479, 27187, 8606,
-53186, 37920, 14371, 48601, 25156, 58779, 665, 31760, 61003, 17094, 50588,
- 4813, 34604, 47566, 20471, 56229, 1214, 29367, 63958, 8885, 48473, 22925,
-30347, 62858, 2780, 45371, 16799, 37136, 46797, 9153, 53422, 26134, 39122,
-13505, 61404, 22713, 52198, 3349, 39074, 26652, 57553, 11722, 29590, 43421,
-16938, 56716, 3510, 40665, 25115, 62176, 15154, 40271, 20456, 50394, 4657,
-34342, 57550, 11944, 44927, 29640, 19305, 61453, 6440, 42961, 32652, 3830,
-36520, 49298, 7390, 58938, 34818, 169, 63494, 21235, 29174, 49776, 14279,
-34611, 51918, 9926, 30798, 46903, 20122, 53329, 586, 35379, 56791, 9084,
-29508, 61390, 14008, 44627, 32223, 3914, 54986, 36527, 11700, 59329, 24794,
-38947, 8770, 53367, 18189, 29191, 57098, 544, 46991, 34034, 13928, 48666,
-20909, 53462, 1662, 41343, 28681, 16242, 60720, 38373, 2232, 28046, 48351,
- 6894, 64538, 25823, 39601, 3871, 61829, 17307, 35738, 58465, 1966, 48241,
-26713, 38574, 5286, 49822, 18003, 55372, 30556, 12305, 52193, 1765, 40782,
-25674, 55056, 3894, 38492, 27029, 60886, 9338, 39456, 26715, 60126, 12808,
-50622, 25263, 45113, 2525, 35527, 54570, 10913, 43503, 34449, 1322, 64722,
-17614, 49645, 31167, 3298, 37205, 63604, 17467, 27204, 58011, 9632, 40910,
-22846, 49370, 6227, 44488, 24141, 52125, 13400, 30697, 60123, 20407, 38909,
- 6381, 65467, 19452, 35486, 55005, 15158, 43160, 6893, 59843, 25138, 46962,
-15731, 42152, 20704, 34052, 62654, 1273, 39139, 20655, 58716, 4652, 34097,
-63314, 7263, 31013, 48158, 13023, 64680, 29343, 16415, 36965, 54649, 1064,
-27962, 49364, 19153, 58554, 4469, 30012, 61447, 19544, 44463, 12376, 55448,
-23263, 39156, 7695, 59271, 26137, 44466, 14430, 62137, 29823, 7080, 52028,
-24676, 43316, 2826, 58880, 36214, 5656, 61400, 18061, 45959, 37087, 12886,
-28656, 64532, 15592, 41777, 23780, 61903, 8987, 34040, 59045, 18638, 42474,
- 5649, 63300, 25095, 54156, 19624, 30253, 49369, 10998, 59222, 22524, 48176,
-10331, 28461, 63085, 5369, 40366, 26810, 58958, 468, 35092, 61147, 13763,
-45302, 27208, 17890, 55698, 30972, 8272, 37698, 63554, 3987, 33244, 42361,
- 6425, 47587, 22243, 62953, 2155, 35900, 46571, 15540, 61131, 23911, 53128,
-13483, 39368, 26324, 32051, 63653, 11748, 52228, 24065, 40241, 13303, 53751,
- 1371, 34050, 51379, 16100, 44380, 32217, 11782, 62245, 25346, 43975, 5612,
-65134, 23846, 39928, 1491, 58218, 19337, 32675, 62454, 12453, 43582, 18625,
-64838, 31421, 9103, 56856, 38288, 16748, 46666, 24488, 54722, 12385, 45963,
-20941, 40684, 15499, 48194, 25541, 55232, 5226, 42823, 24966, 59126, 15016,
-36433, 43923, 19991, 59937, 27912, 2997, 56621, 36576, 10481, 41606, 21722,
-52795, 12330, 39988, 25819, 58145, 9043, 30283, 60282, 14361, 43091, 34555,
-17580, 53398, 38179, 12247, 46547, 19715, 54975, 32070, 10749, 61874, 19269,
-29729, 58581, 5336, 44880, 21101, 49029, 10768, 41415, 25169, 63188, 13493,
-40148, 21414, 53439, 5676, 47614, 35051, 20372, 54082, 8641, 33939, 48571,
- 266, 58561, 26369, 42077, 9448, 53005, 31738, 3129, 59708, 35321, 16372,
-47471, 21944, 51902, 13898, 57710, 22994, 46225, 19008, 28319, 43513, 13298,
-56060, 37794, 5641, 58533, 27507, 16433, 65363, 37105, 6285, 57722, 13951,
-43310, 22530, 48624, 17323, 37055, 50847, 7300, 41273, 23905, 60430, 15296,
-40923, 22814, 45760, 2700, 55928, 19965, 33187, 63711, 6274, 43161, 24691,
-60429, 8333, 39826, 26443, 63297, 11034, 34643, 54505, 5827, 47241, 27201,
-10727, 58713, 34451, 20728, 54683, 9790, 43062, 22271, 46929, 13794, 50957,
-28469, 10614, 45266, 22507, 65109, 13892, 41900, 24192, 58861, 9048, 36712,
-48288, 19029, 33033, 62807, 13594, 44878, 21099, 52183, 6358, 43673, 25439,
-54003, 785, 31924, 42712, 6703, 57338, 31140, 14406, 63908, 19953, 28077,
-57981, 15565, 45500, 25493, 39615, 10004, 56201, 22510, 42509, 11705, 50971,
-38242, 369, 32727, 61881, 12144, 54526, 26882, 38601, 9945, 63910, 26680,
-40992, 651, 48076, 16598, 57199, 25832, 41578, 2476, 48393, 28081, 18510,
-56157, 37995, 11137, 30348, 63583, 4207, 50699, 27768, 9467, 54532, 26658,
-43323, 12723, 52574, 24711, 46314, 15333, 42661, 21620, 54960, 4177, 33732,
-58983, 7633, 44197, 20067, 63953, 35843, 8888, 41721, 26327, 52113, 7052,
-40180, 25996, 60183, 2914, 33154, 52483, 20174, 46340, 11412, 36195, 48997,
- 3772, 34651, 55870, 20953, 39531, 11422, 53286, 28628, 14015, 44009, 25491,
-51227, 2056, 30969, 55138, 7755, 44954, 34540, 786, 51739, 20140, 48097,
-14384, 29796, 52252, 11262, 34751, 49855, 15541, 39610, 3306, 60744, 17713,
-38895, 26426, 43814, 1240, 57587, 36470, 20181, 52212, 11994, 44576, 22178,
-50542, 17444, 29829, 54169, 7790, 34935, 48766, 1547, 59426, 21665, 44327,
-14078, 48851, 19166, 60922, 27936, 15752, 52568, 33371, 12581, 58157, 21033,
-40909, 4877, 29843, 45041, 8002, 58707, 18140, 47096, 20791, 34181, 44363,
- 4621, 55593, 20453, 29333, 48188, 10990, 63323, 29064, 4876, 57752, 36105,
-18369, 50734, 10039, 32667, 53735, 18115, 44986, 11912, 52335, 26992, 48363,
- 3955, 39145, 25920, 52312, 5640, 36825, 53723, 15023, 27923, 63246, 4810,
-40055, 22550, 59872, 2134, 37133, 54178, 8069, 32798, 64717, 13499, 39316,
-22362, 53034, 7088, 31663, 56078, 1087, 49140, 12938, 33017, 51773, 17589,
-28617, 65335, 5270, 45904, 24265, 62683, 2652, 44242, 19622, 38007, 52775,
- 3954, 27327, 46999, 7256, 61235, 27248, 2063, 34082, 58358, 6806, 42438,
-23418, 52859, 578, 36234, 49489, 15085, 40488, 24952, 64782, 1967, 36956,
-55346, 7649, 31767, 50037, 845, 59349, 31279, 17969, 65348, 10964, 42272,
-23219, 59880, 16273, 39304, 23601, 44705, 12462, 62796, 21498, 39842, 14775,
-49483, 23308, 53854, 8742, 36888, 64183, 1376, 31755, 40796, 10483, 62363,
- 4521, 36102, 53056, 9949, 46823, 27063, 18404, 38337, 53330, 1522, 29268,
-48938, 17875, 41101, 25621, 60215, 7979, 33595, 64294, 4394, 27779, 58472,
-19493, 48238, 882, 29279, 52149, 9280, 65450, 25982, 40626, 13571, 50689,
-21427, 38626, 11624, 54467, 19106, 33203, 52101, 2849, 44745, 22361, 57524,
-13602, 31991, 62091, 17391, 37492, 50466, 4319, 42026, 17170, 60202, 35979,
- 1100, 57500, 32016, 7922, 62952, 36713, 18665, 55737, 6733, 33089, 51876,
- 272, 40156, 25871, 61923, 4822, 28814, 53355, 7984, 39262, 26485, 59393,
-11041, 39050, 19298, 56705, 13802, 45473, 21218, 61919, 16018, 40606, 23045,
-48784, 7940, 37396, 52878, 4123, 32100, 50839, 6840, 61481, 20286, 33478,
-48141, 6305, 60140, 28421, 20497, 53306, 15015, 45370, 24481, 41526, 2115,
-59360, 21131, 47112, 6852, 55713, 22597, 35093, 51862, 5378, 44192, 14434,
-37504, 63290, 10345, 31368, 51526, 305, 45179, 19159, 35322, 56491, 12837,
-32386, 46152, 18741, 60980, 6156, 39645, 22234, 55746, 462, 30099, 61519,
- 8831, 39764, 25785, 49565, 15092, 41380, 23860, 51269, 3532, 31480, 56938,
-11949, 45414, 21214, 63431, 10968, 35330, 48552, 18490, 41624, 13072, 57906,
-31577, 5500, 63010, 19264, 28060, 59656, 15345, 44795, 6099, 62598, 19505,
-34612, 49162, 8718, 65385, 18954, 35568, 58694, 11724, 27659, 53080, 17172,
-40520, 24274, 59975, 6616, 34874, 46137, 1741, 55070, 28857, 20562, 58175,
- 9251, 48338, 25773, 42881, 6154, 63846, 14613, 50381, 31121, 16760, 47117,
- 3799, 60001, 32112, 7478, 37121, 64099, 3334, 41337, 23867, 60687, 15590,
-40562, 26132, 52545, 6128, 39674, 24418, 51175, 942, 35490, 44567, 8112,
-56162, 25980, 39384, 9156, 51598, 26697, 64959, 16786, 34784, 53939, 3439,
-61292, 8765, 27775, 57763, 15812, 35665, 65497, 7309, 43133, 24088, 40207,
-14103, 54339, 21186, 48375, 1982, 30566, 59113, 21672, 39294, 3600, 61435,
-26309, 38512, 7449, 59626, 20499, 31000, 47268, 11225, 60670, 23678, 44063,
- 1337, 34632, 51566, 10910, 47470, 18111, 33862, 50256, 11556, 28138, 58679,
-18242, 46417, 1565, 34627, 49482, 17681, 62951, 27393, 11739, 45683, 37273,
-22158, 57814, 8367, 35387, 47143, 15907, 55416, 29677, 11989, 34884, 54536,
- 9548, 49287, 31804, 16212, 64641, 36944, 18279, 55937, 32658, 13203, 52184,
-38464, 17216, 28540, 65487, 13091, 40414, 25244, 60684, 8854, 32681, 56270,
-11557, 35225, 51353, 19196, 28588, 60588, 14918, 44026, 24271, 41060, 6720,
-46382, 25834, 51864, 1681, 31786, 49647, 5409, 63877, 30133, 7685, 49171,
-34923, 2202, 56456, 26782, 44403, 5030, 29006, 59027, 15561, 42028, 23855,
-56095, 14578, 44697, 25180, 54682, 16726, 30807, 64603, 2721, 35168, 59372,
- 9390, 42892, 22183, 61768, 8869, 32815, 54378, 3322, 47203, 28407, 15744,
-38261, 52893, 10734, 33153, 45907, 13545, 62534, 32579, 17300, 49642, 36870,
- 6648, 31540, 59772, 1758, 42306, 26293, 62448, 4612, 49346, 27751, 14489,
-61405, 35948, 6821, 42734, 26419, 51709, 131, 46334, 30054, 14960, 63434,
-25412, 52092, 10458, 29247, 45806, 18751, 53423, 26297, 41171, 2610, 50157,
-24809, 44608, 14984, 61082, 21177, 47633, 11999, 34593, 56609, 16090, 44184,
-22175, 55537, 1178, 31077, 48850, 22737, 63102, 3205, 38603, 26898, 51713,
- 9086, 36118, 53645, 1855, 32835, 62471, 17459, 41708, 22471, 59616, 13793,
-40659, 24360, 46005, 2039, 57053, 18464, 31925, 43730, 4090, 65331, 34424,
- 8135, 58262, 17974, 48830, 35541, 11341, 31220, 43285, 18370, 62262, 12311,
-29073, 59685, 18218, 47239, 27578, 7352, 56709, 36686, 16414, 61721, 24011,
-48632, 5860, 40857, 21462, 65060, 2029, 37160, 50033, 16660, 33287, 60192,
-10563, 47864, 35944, 16822, 51097, 22796, 58019, 2311, 35571, 62512, 8155,
-29301, 59721, 14553, 42640, 25131, 54867, 1598, 39245, 24529, 56375, 6336,
-30356, 64946, 865, 42549, 24808, 53700, 13628, 37427, 49791, 1697, 33708,
-54674, 17823, 31207, 42994, 589, 57820, 24526, 40513, 5288, 47883, 20474,
-37930, 62842, 3244, 30662, 57746, 9394, 42833, 25659, 65141, 15052, 40276,
-22146, 61769, 5275, 44341, 33241, 18771, 57309, 10173, 32342, 52265, 22099,
-41479, 8663, 61739, 24574, 41319, 13355, 55516, 22930, 46816, 14904, 31402,
-57178, 11184, 47440, 35637, 4680, 65281, 18855, 35292, 56837, 10434, 31194,
-53537, 13056, 64330, 23394, 41381, 3174, 60371, 19326, 30623, 43885, 1181,
-49916, 12961, 39671, 25393, 45392, 19401, 37386, 50948, 397, 47458, 18284,
-30676, 50192, 3065, 60299, 33159, 8452, 45007, 24005, 64592, 15421, 42254,
- 7823, 56046, 24980, 41852, 13814, 53062, 23155, 40454, 15131, 64384, 2516,
-39852, 21650, 49255, 13008, 56482, 29939, 16394, 37945, 65229, 7153, 29025,
-60641, 21387, 41789, 5955, 52303, 30864, 21242, 61508, 11133, 42273, 3596,
-34600, 48413, 18700, 64184, 4918, 40510, 26162, 60660, 1864, 32099, 43537,
- 7521, 61745, 38430, 18059, 28229, 58876, 160, 46326, 11035, 28368, 50737,
- 5219, 42008, 24233, 63151, 9196, 37347, 50358, 3619, 33705, 56711, 6126,
-44133, 21549, 48779, 3098, 30401, 59785, 16622, 46473, 4287, 33487, 48380,
- 9219, 57183, 19698, 33537, 62426, 9869, 28889, 58321, 21043, 45610, 12772,
-41823, 23765, 56915, 13822, 53472, 22260, 38907, 11042, 65175, 20128, 32913,
-46424, 8067, 52892, 30693, 3312, 36859, 61062, 7680, 33798, 48311, 11468,
-41915, 25096, 50362, 15985, 30141, 55822, 4244, 46236, 25022, 39793, 13123,
-63643, 20373, 35586, 56296, 1365, 42088, 23608, 57109, 5535, 39966, 21360,
-53640, 3685, 43788, 24499, 56581, 11123, 44849, 23509, 52580, 13015, 34214,
-45638, 17150, 37768, 56331, 9335, 28832, 48255, 19727, 64957, 11779, 40073,
-23187, 57060, 8458, 33402, 47971, 3119, 41003, 23473, 64229, 5008, 39297,
-11354, 60475, 18031, 32546, 59057, 9276, 38874, 26844, 43381, 7577, 64069,
-29626, 2979, 49549, 38219, 12579, 33900, 65271, 17863, 45886, 9726, 35526,
-52940, 18454, 42161, 5123, 64321, 29431, 16950, 59037, 27870, 9981, 37929,
-56026, 507, 29275, 49068, 8853, 30630, 63302, 16504, 35780, 47526, 7360,
-54106, 23054, 40411, 14043, 51535, 25968, 39770, 5108, 63052, 23100, 53143,
- 2648, 46260, 36330, 7808, 50793, 32513, 1425, 54391, 34906, 19621, 49964,
- 4035, 44549, 29061, 10668, 59190, 37165, 15080, 53139, 24934, 46936, 9704,
-29888, 54113, 3400, 27966, 41778, 19581, 64439, 4787, 40828, 12202, 45455,
-26670, 52840, 13645, 32538, 48968, 20935, 39723, 5447, 50491, 18417, 33130,
-62019, 13537, 43344, 23013, 49357, 16530, 33557, 57225, 8212, 39773, 23260,
-45495, 9650, 64262, 24076, 40074, 10623, 60683, 21690, 49402, 13296, 30090,
-53734, 15121, 56913, 32486, 10555, 46311, 25141, 50629, 13624, 35469, 56093,
- 4354, 31521, 52658, 10520, 47784, 27654, 16393, 38206, 64242, 927, 28434,
-53858, 19892, 39598, 2695, 56427, 26860, 38567, 5550, 53052, 26765, 39008,
- 1903, 62781, 26699, 51674, 8489, 43795, 21847, 29711, 54892, 12745, 46095,
-28372, 2599, 62406, 37575, 16671, 29398, 47150, 7005, 32426, 49667, 15021,
-55569, 35540, 11524, 61590, 20445, 30448, 58370, 5637, 14405, 55834, 28502,
-10200, 62370, 25035, 42146, 12031, 57167, 22840, 39572, 15082, 56529, 26789,
-38921, 6408, 52018, 20308, 29754, 46963, 11313, 63734, 3, 32196, 57744,
- 6457, 46150, 31874, 17810, 54483, 35561, 5952, 62225, 24956, 42697, 3593,
-52876, 20066, 35281, 55259, 214, 45353, 16236, 34904, 56940, 9482, 39872,
-26583, 50837, 16796, 60188, 29472, 9347, 54829, 35929, 20330, 50772, 10110,
-42158, 23371, 54177, 14471, 48048, 27429, 3752, 52481, 36733, 15575, 43465,
-21707, 60798, 37820, 14993, 57327, 21426, 45335, 989, 30507, 47376, 15869,
-60066, 27368, 17638, 51695, 37291, 13633, 63784, 25231, 41669, 7161, 53217,
-26312, 42529, 14246, 63536, 25434, 39560, 2531, 53033, 16001, 43939, 36917,
- 4423, 54994, 17790, 35782, 61612, 2970, 39600, 26270, 45239, 5792, 58207,
-25384, 47952, 491, 39371, 17663, 62684, 27604, 12051, 56719, 38465, 18078,
-28724, 51457, 777, 59807, 21408, 39785, 6786, 63156, 33746, 14077, 52165,
-37416, 10574, 59679, 23753, 42907, 6084, 51975, 17111, 31910, 62985, 13084,
-44030, 25397, 60111, 9665, 38637, 26989, 64088, 15078, 39684, 21837, 61262,
- 4273, 36702, 58204, 7578, 28339, 64471, 1147, 47474, 18443, 33814, 55853,
- 3704, 38918, 25900, 59948, 5625, 41690, 21652, 55029, 16114, 30907, 58412,
-12562, 50427, 33727, 15616, 44848, 23906, 54291, 5754, 40539, 23329, 53107,
- 1700, 57912, 19364, 36644, 52493, 15263, 27345, 60109, 7073, 50810, 23385,
-40449, 5868, 57481, 30117, 12498, 60547, 26072, 47302, 10648, 36978, 49949,
- 4386, 45093, 25097, 51301, 13097, 33626, 65146, 16175, 37100, 52272, 5554,
-44461, 27530, 13382, 62219, 30164, 9723, 57452, 32515, 1530, 61100, 19271,
-48191, 29476, 9446, 37961, 58545, 20088, 28325, 64315, 15567, 41522, 24350,
-61357, 8859, 39711, 26441, 64862, 14110, 35712, 55430, 2579, 31258, 43734,
- 7181, 57420, 19601, 36443, 62414, 12123, 34345, 58562, 7594, 45957, 26478,
-56150, 17732, 30866, 63061, 6207, 38820, 19472, 55535, 7, 35169, 65505,
-17073, 30295, 57986, 9744, 46047, 28050, 4006, 55612, 36193, 10146, 51948,
-19642, 28904, 60047, 4391, 50557, 18547, 32306, 55338, 3457, 48401, 30306,
- 8046, 38154, 63927, 4204, 44797, 23871, 39429, 1423, 59292, 21126, 42453,
- 5823, 63516, 22307, 47051, 15735, 39680, 23321, 59255, 2895, 31180, 56626,
-12677, 45316, 17088, 35162, 47721, 11878, 61227, 24138, 42318, 13859, 65047,
-20631, 45813, 9440, 58568, 21614, 42787, 6272, 38602, 20139, 61976, 709,
-49634, 18255, 33078, 60386, 9344, 43048, 25079, 49391, 4265, 54758, 21504,
-37044, 62004, 10063, 28342, 45980, 5176, 52022, 25447, 41967, 9819, 52848,
-32890, 64639, 2835, 46444, 33803, 20041, 52820, 4472, 33690, 46033, 7546,
-63021, 36058, 957, 47315, 18550, 61738, 32591, 2804, 58428, 36154, 19518,
-50136, 16337, 43386, 22218, 51255, 13263, 27652, 58759, 8472, 45277, 28664,
-19645, 48106, 10069, 59318, 25770, 40953, 12635, 49314, 23061, 29696, 62002,
- 4673, 47475, 24096, 58410, 2255, 32507, 45095, 6952, 52502, 26138, 40933,
- 480, 61891, 29716, 14991, 57314, 36304, 6986, 63756, 19872, 37643, 57611,
-12750, 29432, 64252, 8613, 48946, 27101, 3250, 51837, 35442, 10467, 61703,
-26561, 54672, 12149, 32960, 43433, 7817, 55506, 31171, 1500, 48064, 28273,
-10957, 54594, 35858, 18228, 61185, 15, 32042, 45023, 7820, 56158, 20968,
-30409, 48035, 11935, 60779, 19944, 33125, 51160, 8812, 29305, 48104, 10742,
-60087, 19752, 32627, 50717, 9595, 34703, 60564, 20855, 43217, 6125, 50798,
-34931, 19880, 45696, 7000, 63751, 22668, 32683, 42725, 13039, 55269, 24048,
-44623, 2191, 58362, 20353, 28280, 49660, 332, 34320, 56897, 12027, 41049,
-22773, 50415, 8500, 29779, 52620, 2336, 41292, 23545, 54496, 12508, 42458,
- 242, 55366, 35630, 9198, 48773, 30568, 16744, 38024, 54172, 12112, 41424,
-24530, 59075, 8910, 43464, 23800, 53180, 14086, 48611, 18750, 34446, 45211,
- 1587, 61699, 24026, 39623, 6209, 43359, 25459, 62524, 747, 48663, 19213,
-30310, 64743, 14506, 44154, 32011, 10245, 48795, 28211, 4466, 55969, 37740,
-16918, 31684, 42884, 2293, 61608, 27953, 16867, 50259, 34685, 14, 44656,
-21872, 58569, 14974, 33517, 56851, 19516, 42023, 6448, 54990, 21078, 44629,
- 3588, 56838, 27090, 18944, 60629, 37695, 969, 50649, 19874, 45721, 36806,
-15344, 50204, 23856, 44557, 6688, 34199, 55148, 17539, 42639, 10943, 49591,
- 4310, 33386, 56928, 11690, 44932, 22750, 52221, 6622, 41512, 24859, 50514,
-11561, 45932, 23499, 63773, 13789, 29237, 49383, 973, 40645, 23404, 51098,
-15651, 38881, 20864, 52929, 1328, 35047, 50414, 10136, 44586, 24815, 61096,
-11173, 43621, 23153, 51931, 12882, 40309, 2624, 53068, 20409, 37724, 61007,
-14467, 29540, 45677, 2246, 63522, 35494, 10884, 43156, 25612, 58523, 12636,
-40887, 22923, 45033, 16168, 59050, 27365, 11589, 35017, 52722, 17006, 61950,
-29881, 9575, 52245, 36899, 16676, 32534, 54965, 330, 30165, 61298, 8916,
-41706, 19496, 49521, 36260, 5798, 51623, 25407, 59596, 4111, 30648, 44506,
- 7754, 54869, 33422, 19, 51329, 37089, 17045, 31938, 49413, 12994, 59627,
-26275, 46191, 10276, 40528, 24427, 58355, 5705, 41439, 22859, 53722, 11933,
-38860, 20144, 59711, 15354, 45407, 226, 34447, 57896, 17436, 40498, 22367,
-63173, 2053, 47684, 19949, 36665, 43196, 27241, 16324, 58043, 37967, 10853,
-60757, 28243, 17712, 50541, 29847, 13569, 55271, 26101, 42018, 10741, 51089,
-24724, 44983, 8697, 40966, 26573, 59459, 7350, 34888, 62810, 2244, 49024,
-32842, 16977, 63626, 37363, 933, 55889, 32345, 17644, 46757, 5093, 64118,
-36035, 9817, 51706, 17812, 43256, 33703, 12030, 40924, 20191, 63894, 14691,
-38631, 21885, 59316, 12763, 48033, 18257, 33410, 52424, 4030, 45356, 18123,
-32469, 49830, 1348, 42128, 24870, 53637, 5931, 35269, 42125, 14283, 59765,
-30881, 19043, 47790, 5769, 40739, 20681, 48790, 4023, 64074, 24796, 41544,
-15284, 62196, 20203, 34288, 58034, 4801, 47514, 24332, 40699, 15281, 58689,
-22813, 48943, 11293, 35925, 64578, 5024, 40102, 26047, 54433, 627, 40791,
-23578, 64939, 14264, 36447, 52143, 1516, 42647, 16022, 57158, 28494, 4325,
-36617, 48539, 15755, 59420, 28987, 1865, 57597, 37181, 17256, 49054, 9715,
-61306, 28249, 5047, 50110, 35029, 17145, 38228, 46605, 8719, 62292, 31012,
-14682, 44182, 25672, 64990, 3068, 39358, 26597, 61583, 14995, 32870, 58755,
- 6822, 45042, 19903, 60650, 32536, 16113, 28456, 63507, 20068, 53155, 2509,
-46498, 20952, 30285, 61037, 5234, 50428, 22242, 39856, 2103, 57882, 32853,
- 9450, 63955, 27927, 11390, 53168, 37127, 14046, 49794, 22280, 57342, 10707,
-38528, 27037, 55946, 8254, 34159, 46490, 3630, 58537, 20094, 35049, 63401,
-13275, 42969, 23581, 62417, 7791, 46680, 25074, 53582, 14538, 36798, 56509,
- 8683, 41495, 25269, 64830, 7473, 37645, 54301, 2592, 28467, 62124, 11310,
-39157, 26424, 60084, 9677, 34997, 42542, 11113, 48530, 31156, 14670, 58726,
-25638, 41554, 6021, 63691, 28017, 3855, 54616, 37484, 16612, 64796, 27516,
- 118, 60210, 37099, 23312, 54040, 13658, 43249, 28019, 3142, 60560, 36140,
-20723, 58176, 712, 34270, 61860, 19366, 39437, 5371, 52727, 35146, 17410,
-60607, 26121, 43134, 5677, 63263, 10729, 44741, 25161, 60008, 14661, 39622,
-23124, 53796, 2988, 39319, 26773, 59214, 5893, 33188, 47731, 18992, 62901,
-35090, 7515, 49945, 22394, 42241, 8619, 56639, 24601, 41064, 15407, 53178,
-21680, 48500, 186, 31513, 65216, 7316, 36687, 51997, 2348, 31983, 56406,
-19988, 46637, 5079, 41335, 13885, 48441, 25481, 60663, 7046, 41462, 19083,
-49756, 37293, 13291, 45893, 24086, 64721, 7656, 28927, 57798, 20177, 41079,
-10824, 46669, 23722, 63445, 16068, 39962, 22528, 60438, 10917, 28276, 57702,
- 4333, 40702, 24275, 53561, 2308, 30861, 64791, 13803, 48295, 28155, 16489,
-55615, 33749, 1740, 63909, 26677, 48236, 6594, 41182, 24084, 65112, 14185,
-48173, 30045, 7134, 56848, 37669, 16410, 28748, 55114, 8352, 13183, 49412,
-30479, 6432, 54412, 24308, 43815, 1904, 37404, 58429, 9298, 43090, 22205,
-64011, 5669, 39229, 21495, 60864, 13428, 34394, 55791, 3751, 47834, 23919,
-39933, 15866, 42743, 21510, 56674, 4702, 41834, 23133, 52414, 11140, 38391,
-60277, 14917, 30785, 43677, 19502, 55855, 3177, 30846, 63034, 8306, 46208,
-25812, 51132, 5722, 55680, 26974, 46831, 3037, 43123, 24968, 65147, 6712,
-41930, 20789, 58953, 29612, 12356, 62882, 22594, 47413, 10001, 31332, 59285,
-16956, 45786, 27707, 1577, 55785, 37629, 12984, 63001, 25742, 52543, 9419,
-38701, 22965, 56126, 10234, 35942, 52079, 6424, 45670, 17278, 39355, 21984,
-65214, 8621, 51898, 35203, 3647, 28268, 55508, 16251, 42299, 23783, 58912,
- 8403, 30849, 47669, 16920, 56276, 6145, 46442, 30003, 17710, 63086, 24287,
-39407, 11444, 52718, 18676, 30999, 64126, 9184, 41087, 24759, 52352, 11257,
-30170, 54064, 3690, 43485, 20768, 37233, 57303, 12333, 29324, 64806, 7145,
-27463, 56008, 18865, 35700, 49195, 4928, 53955, 17489, 34265, 57858, 7204,
-41891, 20255, 49761, 11663, 38564, 26173, 53006, 3489, 37544, 51448, 6386,
-45270, 13329, 40904, 26801, 57384, 9709, 48418, 18040, 33389, 44715, 13164,
-63172, 30390, 16002, 46944, 36819, 4512, 55634, 20592, 29774, 45719, 7965,
-65479, 32690, 2861, 47043, 20072, 60692, 13566, 43011, 24250, 54999, 12644,
-29494, 51818, 5963, 41097, 24442, 54446, 555, 39195, 21704, 51313, 11756,
-33206, 63833, 5476, 43893, 19974, 31183, 52229, 11971, 46511, 18923, 31394,
-48447, 13934, 42945, 22216, 52588, 1384, 32463, 49773, 16686, 63109, 28062,
- 2936, 55798, 34592, 8582, 51816, 22451, 47689, 16743, 35781, 57767, 12078,
-30505, 51957, 9080, 45422, 31922, 19209, 48152, 5871, 31589, 63376, 16647,
-34772, 54913, 9240, 46025, 16407, 32413, 53885, 9774, 28414, 48437, 15514,
-59623, 22900, 42083, 3794, 46616, 12468, 52313, 37477, 18151, 31700, 54958,
- 4080, 33141, 47998, 8256, 64774, 20278, 33009, 56450, 12387, 42490, 21828,
-54601, 9192, 44170, 28306, 15951, 58473, 30839, 734, 64619, 32596, 19079,
-51276, 4661, 30277, 61526, 7637, 38902, 26847, 54368, 13960, 47324, 28097,
-17696, 61276, 37902, 8793, 43470, 26042, 63275, 17845, 31174, 57370, 2621,
-44295, 21630, 29692, 64071, 10999, 55924, 27523, 2377, 54145, 36799, 17521,
-50549, 32234, 1352, 62354, 33897, 17773, 50342, 3236, 35958, 53406, 7107,
-30955, 48677, 15525, 43759, 22173, 63719, 11650, 34467, 50407, 17086, 43241,
-34305, 3666, 57750, 38097, 9078, 49838, 21749, 44002, 11092, 33446, 57654,
-16098, 30160, 51163, 4675, 39151, 21082, 53570, 11958, 33789, 50827, 4306,
-31667, 60101, 45571, 729, 62833, 36871, 19708, 47631, 12822, 64295, 30821,
-19355, 52258, 4126, 35261, 48195, 17676, 54878, 30905, 1583, 52814, 28084,
-19161, 65265, 14427, 33218, 54312, 10109, 61002, 28960, 12496, 47770, 36249,
-15382, 30945, 58243, 6758, 27539, 50240, 1878, 61663, 24029, 40282, 13661,
-53672, 20481, 35105, 58840, 771, 42690, 23743, 39258, 9068, 60942, 17674,
-31572, 55068, 11802, 39111, 26127, 53949, 8205, 50497, 38169, 2908, 33893,
-56309, 21092, 39909, 4570, 50916, 22626, 65071, 11151, 29962, 50035, 19980,
-43744, 2563, 33541, 58143, 19365, 42984, 448, 49579, 20729, 28487, 60328,
-12279, 30412, 56444, 1872, 43613, 29710, 16769, 38130, 62728, 10115, 46245,
-32933, 1433, 52330, 18586, 35201, 63404, 10484, 38802, 26024, 43030, 20542,
-57596, 3779, 31766, 49575, 6874, 61114, 26231, 46408, 2572, 39501, 23718,
-55160, 6588, 46041, 21929, 65526, 13729, 33385, 58685, 16314, 47687, 1277,
-33047, 54479, 15656, 36080, 51716, 2805, 43667, 11233, 60797, 19911, 30435,
-45562, 9865, 51192, 22056, 31043, 56497, 961, 42757, 22688, 65128, 13995,
-46357, 27461, 17302, 62391, 34597, 22324, 59488, 4735, 38756, 25657, 65231,
- 676, 28798, 56675, 6995, 39251, 24824, 51834, 10989, 59597, 19049, 31846,
-43813, 423, 56908, 24740, 40461, 15189, 52886, 26220, 39562, 4742, 51248,
-21080, 41070, 1527, 62077, 37417, 17622, 47520, 22110, 59257, 8602, 32760,
-48392, 17862, 59800, 3715, 29655, 45814, 16226, 57739, 37609, 1952, 60394,
-24620, 42428, 4066, 62764, 23432, 50615, 5833, 30074, 64025, 18209, 46787,
-27152, 5309, 53311, 37864, 21063, 43779, 13073, 64971, 37875, 2185, 31217,
-60461, 7436, 46361, 25216, 40694, 2833, 56479, 15741, 37775, 59296, 10596,
-51273, 22352, 39732, 1243, 50441, 18834, 30267, 64507, 4962, 47717, 18382,
-35659, 56777, 2878, 45079, 30455, 8778, 57174, 34148, 19822, 64144, 29100,
- 1940, 58414, 22604, 43717, 13143, 61812, 26626, 41025, 15689, 50825, 5012,
-40673, 25872, 63881, 1443, 38627, 25354, 60414, 4270, 48694, 37175, 10430,
-53649, 25150, 47513, 11863, 36081, 57769, 17261, 33096, 46603, 11314, 62717,
-20515, 42180, 3694, 55863, 35381, 10460, 49782, 22565, 58295, 705, 33769,
-50975, 7739, 40118, 23984, 47588, 14593, 52918, 3993, 35671, 44261, 18056,
-48791, 32555, 6725, 60839, 14376, 43913, 26156, 54440, 9857, 41982, 25648,
-57455, 12968, 41104, 23310, 62862, 2517, 32930, 56106, 8822, 39459, 26681,
-55371, 6447, 28486, 61059, 10642, 46481, 27048, 17551, 62883, 34968, 5276,
-59364, 25040, 47412, 2903, 36294, 54589, 12764, 44480, 26183, 61076, 1512,
-43595, 23652, 63744, 14207, 40994, 21849, 32656, 54905, 15522, 28048, 52307,
- 3756, 41709, 22792, 49324, 10393, 32921, 61166, 15819, 28858, 45363, 7081,
-59973, 35160, 11734, 38104, 48988, 9172, 43981, 28979, 628, 47130, 37005,
- 6143, 51903, 24621, 64526, 2617, 42695, 21513, 53691, 37978, 12277, 33552,
-45105, 9323, 57792, 26552, 38920, 6189, 49694, 18528, 28760, 64820, 12510,
-53161, 21298, 33696, 49998, 5982, 41363, 23587, 61440, 1146, 34995, 46050,
-16824, 27702, 60713, 10782, 43643, 16147, 62506, 29134, 9365, 47946, 33687,
-17625, 55014, 6436, 35359, 61074, 16781, 46432, 29565, 10982, 64818, 32604,
-16055, 56799, 36999, 3310, 50719, 33820, 14835, 48383, 24913, 58310, 4557,
-49810, 20153, 31089, 56969, 14079, 43171, 24773, 57868, 5492, 44410, 24493,
-49460, 2151, 61833, 13095, 35484, 53614, 15314, 44883, 23752, 40314, 10135,
-58538, 22416, 44372, 14033, 62179, 26640, 38635, 84, 41855, 26610, 50287,
- 5938, 41313, 25748, 62525, 18525, 46085, 5342, 41303, 23268, 58972, 16352,
-39161, 26407, 48336, 1613, 64148, 23886, 38904, 5339, 62501, 17384, 35898,
-54026, 8028, 30393, 50242, 9946, 36786, 56403, 1472, 47918, 11611, 32547,
-54962, 19290, 43584, 10747, 52816, 35259, 17040, 47901, 20587, 62014, 3207,
-40943, 25913, 48810, 7207, 62812, 35344, 18232, 46713, 5907, 61174, 31659,
-12168, 57945, 34494, 16123, 63793, 36626, 11210, 27690, 45566, 4343, 56521,
-13601, 40296, 26423, 65058, 11267, 42060, 26058, 55053, 14135, 35701, 52748,
- 8255, 27509, 49487, 20740, 39946, 10852, 55336, 33431, 15571, 37150, 54008,
-11744, 43599, 34460, 9202, 58514, 38406, 14152, 30383, 59886, 7123, 49235,
-20022, 28272, 55348, 15129, 40781, 23177, 54227, 13833, 34182, 62804, 20762,
-43185, 28497, 3741, 46096, 26534, 62205, 13358, 43874, 25764, 57264, 10327,
-41166, 22532, 31241, 61109, 11111, 42468, 21874, 65379, 14567, 40442, 25571,
-54345, 6957, 39694, 16740, 49502, 36681, 7337, 55804, 24751, 39197, 615,
-53261, 19151, 31825, 58770, 10646, 46972, 18112, 31897, 55968, 11836, 46465,
-29822, 14635, 56925, 33268, 18178, 44589, 5315, 55391, 26262, 41374, 1825,
-59293, 22652, 40023, 5941, 51202, 25351, 39165, 15895, 63800, 30779, 5567,
-46354, 36881, 12205, 55654, 29148, 15960, 64982, 35581, 10201, 59697, 31538,
-19771, 58437, 8553, 28079, 63009, 15937, 41364, 24599, 56373, 4277, 39452,
-21404, 47495, 5450, 65459, 18897, 33416, 55060, 8171, 29481, 50272, 16364,
-42020, 23593, 61908, 1156, 48069, 20483, 33412, 52118, 13391, 37023, 56058,
- 429, 29544, 52404, 18822, 42556, 12189, 37890, 63251, 17490, 28121, 58844,
- 8473, 40687, 17156, 30782, 56156, 10272, 39665, 26302, 59110, 7862, 19240,
-42087, 9114, 58622, 34242, 17471, 61954, 36511, 5887, 57084, 24663, 44244,
- 287, 54206, 23689, 40231, 14891, 50765, 22309, 61892, 5319, 31398, 55258,
-16514, 62611, 27287, 18173, 57297, 38316, 9001, 31850, 49430, 18887, 61173,
- 8143, 30185, 48963, 18811, 65415, 28949, 3997, 52507, 21844, 43435, 13236,
-56024, 32946, 7532, 47908, 36894, 2410, 62076, 19048, 29884, 56966, 10823,
-47789, 15782, 29980, 57761, 5571, 49312, 19995, 32068, 55167, 335, 34838,
-52921, 19656, 42628, 3379, 60437, 37315, 21591, 49058, 12316, 27859, 54276,
- 4454, 40927, 22036, 51407, 5854, 44453, 23442, 61309, 10025, 41232, 22256,
-64213, 8222, 31647, 42333, 13351, 61708, 27097, 6342, 37586, 51416, 12077,
-39937, 21904, 61115, 8103, 33015, 52270, 19201, 45736, 27979, 9383, 63967,
-32633, 971, 56319, 35439, 19077, 52001, 4589, 34626, 50300, 12048, 47144,
-20584, 61638, 9559, 31849, 59689, 19813, 39188, 7839, 53452, 21341, 37425,
-63848, 10696, 28436, 47221, 6333, 54352, 21405, 40362, 13350, 55536, 26879,
-43892, 10787, 49277, 27974, 15309, 59495, 37799, 4532, 61358, 28673, 20694,
-43916, 15943, 52453, 23489, 40041, 7277, 61545, 26201, 39584, 14303, 60036,
- 5991, 43175, 23398, 33761, 54458, 10083, 42150, 16874, 51005, 28566, 11959,
-54033, 37584, 19102, 49200, 1935, 41351, 24547, 53362, 6527, 31009, 50347,
-15422, 60954, 34556, 20307, 53084, 28326, 2203, 50759, 36071, 6299, 47240,
-22245, 60770, 1027, 41736, 18842, 63206, 33701, 4800, 58801, 17661, 29282,
-47331, 699, 57426, 20367, 28195, 60679, 3116, 48992, 19882, 27673, 56363,
- 243, 46231, 18060, 32775, 61548, 4546, 44964, 34254, 10485, 64178, 807,
-44677, 29422, 6544, 51587, 12838, 60955, 36172, 18708, 55694, 6182, 39227,
-21574, 52582, 3928, 35869, 59038, 15352, 49085, 1650, 38819, 26857, 53305,
- 6519, 31626, 50914, 168, 43335, 22042, 62106, 30334, 11773, 59396, 33725,
-18492, 47301, 9731, 57023, 27006, 45286, 6428, 38924, 26541, 62267, 3634,
-51511, 21509, 39158, 5664, 61653, 22892, 40893, 2794, 63379, 23522, 39518,
- 9473, 60600, 20928, 49164, 14453, 35788, 53417, 12523, 31501, 60182, 1283,
-48101, 21567, 53035, 14247, 27674, 58896, 20206, 40697, 4647, 48688, 21986,
-54431, 1553, 40838, 23376, 50939, 12230, 38291, 47730, 844, 37155, 52916,
- 8225, 30915, 51050, 13228, 59084, 28581, 16871, 49699, 36951, 571, 46798,
-21883, 60794, 12500, 34473, 57155, 6887, 38685, 26095, 42767, 14798, 64168,
- 4157, 45100, 27231, 16152, 60326, 38317, 8768, 46744, 26176, 55374, 7787,
-30958, 50195, 1002, 32733, 45596, 20836, 64420, 5451, 46618, 22635, 53444,
- 2732, 34666, 51390, 5112, 65327, 25668, 39354, 1727, 50855, 28679, 11649,
-53046, 20865, 40530, 14429, 65002, 33563, 8918, 58252, 30089, 2896, 46112,
-36748, 19873, 51423, 12930, 34390, 45465, 4536, 50127, 29681, 14354, 60035,
-22418, 44833, 5638, 39906, 24043, 55111, 421, 43501, 14167, 37111, 56878,
-16111, 33909, 62395, 1538, 39588, 24781, 60070, 16288, 28246, 45394, 13161,
-51334, 37402, 4516, 42617, 21191, 64378, 36948, 9690, 42043, 24646, 63177,
-11978, 42655, 23726, 60014, 7855, 38981, 23105, 50553, 14057, 28684, 56483,
- 900, 38081, 63408, 9969, 31075, 48331, 15171, 62434, 25484, 39482, 13153,
-46659, 26450, 55638, 5343, 35722, 47099, 19255, 54527, 761, 45424, 33526,
-18233, 59640, 27752, 3217, 53633, 36804, 17138, 55369, 27550, 11728, 36247,
-59325, 4198, 41027, 22028, 53044, 16134, 46706, 28044, 8348, 64735, 38258,
-16720, 29647, 56789, 7327, 40168, 24422, 54956, 14778, 44830, 2451, 56604,
-29121, 12979, 50230, 31109, 655, 55410, 34468, 18149, 61952, 31903, 9646,
-59499, 34249, 4055, 51971, 18969, 33306, 57463, 2544, 44657, 31916, 18879,
-46982, 12914, 53543, 35265, 7794, 64681, 30552, 3795, 54078, 34332, 18633,
-50004, 2413, 56179, 22640, 31744, 49335, 15429, 58616, 1356, 29209, 64598,
-21700, 39847, 3627, 58841, 30490, 8792, 62397, 22585, 30336, 56174, 10319,
-45247, 21646, 59135, 174, 28476, 43219, 8986, 57443, 17299, 31637, 44743,
- 9770, 62293, 30199, 12963, 49992, 37693, 16821, 28813, 55642, 9795, 48070,
-22919, 36374, 51433, 8981, 65457, 22033, 40394, 6901, 36040, 47294, 15130,
-32461, 64505, 9829, 43489, 36982, 21676, 52961, 11367, 41482, 24775, 56917,
-16265, 39350, 24489, 49720, 11709, 58966, 36591, 21524, 47432, 27864, 1764,
-50179, 24452, 42309, 9920, 63991, 30754, 19139, 44916, 8264, 55075, 32751,
-20032, 60098, 12911, 44499, 23426, 62760, 11383, 35605, 55042, 15792, 41537,
- 4531, 52709, 25861, 41172, 2777, 65123, 23072, 38652, 12225, 60785, 20776,
-49787, 14576, 40099, 24458, 43701, 13388, 58094, 26563, 44679, 8434, 34966,
-54861, 12725, 48321, 28602, 17588, 45213, 36906, 3404, 64910, 29624, 8095,
-57323, 23764, 42422, 15033, 34833, 44105, 7222, 62311, 36018, 3006, 47109,
-25067, 61506, 9207, 43722, 30912, 16661, 62640, 33662, 5009, 57077, 28862,
-20390, 60406, 15081, 27123, 63806, 17995, 44266, 33209, 2171, 37787, 61487,
-12158, 30650, 55630, 14732, 43459, 28392, 4665, 52237, 24702, 44824, 17232,
-59858, 9089, 50712, 31136, 18955, 54815, 37641, 5878, 50260, 31188, 20322,
-65381, 3133, 40070, 23430, 61395, 13863, 37660, 57515, 9602, 51517, 25129,
-41600, 13543, 36279, 62183, 17434, 28321, 46390, 21612, 43641, 12610, 30063,
-56583, 15098, 46671, 33530, 6885, 59311, 37161, 3413, 47993, 22850, 43295,
-16099, 49358, 24777, 63852, 8347, 29697, 59001, 2030, 40786, 22603, 64780,
-10939, 34389, 54059, 1251, 36180, 51209, 15591, 63442, 29445, 10969, 58507,
-33029, 21190, 50631, 8504, 47623, 30175, 11674, 51432, 22343, 44533, 4978,
-54597, 35293, 9444, 63573, 29192, 16946, 58555, 24223, 46563, 1995, 32622,
-54495, 18831, 47772, 3791, 33796, 52106, 14720, 40372, 25853, 57789, 5018,
-31652, 63917, 8510, 43404, 32937, 18495, 45554, 23266, 58699, 2340, 33200,
-43233, 7880, 59261, 34747, 1190, 52497, 18537, 29099, 58592, 11862, 40378,
-24406, 63662, 15141, 38241, 49087, 8849, 34882, 64416, 15025, 30583, 49088,
- 219, 38183, 65388, 7252, 43887, 23375, 56669, 12845, 34190, 42307, 5538,
-59919, 30733, 20108, 49154, 1927, 59346, 18089, 32739, 51838, 3929, 43141,
-21366, 34583, 63412, 15926, 46851, 34532, 8349, 60420, 25266, 42147, 14848,
-51049, 3360, 46031, 23232, 41265, 14469, 48041, 25815, 61090, 8412, 39570,
-23015, 64406, 6590, 52701, 26717, 40080, 496, 59242, 22801, 41892, 14667,
-46100, 24645, 62890, 10090, 40792, 26687, 45283, 12662, 64115, 4919, 35012,
-45192, 19632, 50038, 11587, 33109, 55335, 14944, 43300, 20703, 51995, 35578,
- 5338, 43919, 17447, 64997, 37471, 8363, 32509, 48426, 13012, 64259, 35554,
- 4909, 47081, 24359, 54140, 15775, 39807, 22748, 58259, 3428, 32467, 64595,
- 6059, 45162, 32149, 19534, 61172, 2438, 43315, 30943, 13599, 46325, 25329,
-62084, 10255, 52357, 24344, 40903, 6038, 54474, 16797, 29523, 62888, 8045,
-33736, 59569, 1913, 30457, 48138, 6895, 61940, 20036, 42729, 30843, 4728,
-53013, 16549, 37611, 65178, 11028, 32638, 58117, 17477, 45785, 498, 33983,
-61425, 23786, 41994, 5477, 51223, 26045, 39422, 2430, 56258, 17915, 46908,
-28532, 8085, 60867, 21346, 32494, 45395, 10816, 57518, 20052, 31430, 50537,
- 5217, 43255, 24191, 55194, 2165, 32657, 64363, 8094, 54484, 34177, 286,
-48053, 15673, 65277, 30591, 19527, 51882, 1172, 33655, 62334, 7173, 50175,
-28265, 16144, 47465, 36571, 18709, 49673, 4871, 64142, 28122, 17648, 51549,
-29880, 11776, 55203, 38034, 14606, 32911, 52485, 18409, 49205, 6254, 41866,
-25082, 51761, 13972, 35926, 44951, 7737, 50003, 38277, 3585, 29462, 56949,
-11038, 46369, 21873, 52305, 6600, 40491, 24075, 63222, 9956, 35794, 48806,
-18715, 64487, 1672, 33788, 48610, 21410, 40426, 2647, 58832, 29033, 10121,
-62227, 23390, 43918, 11749, 34677, 56530, 19275, 51753, 4793, 44258, 27559,
-18365, 47754, 36564, 2321, 60175, 31108, 6672, 49795, 37687, 11851, 57326,
-53842, 8278, 48852, 34745, 4625, 63524, 23422, 43789, 18010, 50451, 27984,
-13424, 60445, 31884, 5569, 56030, 37666, 11180, 33300, 52401, 15343, 43686,
-25284, 56534, 8015, 46882, 26078, 41818, 12272, 57919, 18413, 28440, 47173,
- 4245, 35312, 52209, 18070, 44638, 3113, 63838, 26113, 40584, 5515, 59378,
-36340, 18097, 64469, 15117, 40800, 23143, 46600, 79, 55200, 34974, 7150,
-52026, 27829, 14232, 59389, 28883, 8392, 38062, 57428, 11098, 30240, 65287,
- 1729, 45003, 18820, 51359, 36838, 15028, 46873, 24554, 59601, 5623, 52673,
-13616, 41596, 24742, 57095, 11579, 48937, 20070, 29495, 44846, 14539, 63214,
-34179, 2956, 37984, 51813, 7490, 29751, 53154, 2595, 28176, 56824, 21443,
-42304, 5293, 46107, 23262, 57333, 13899, 31815, 41940, 16873, 51148, 30255,
- 1609, 62731, 24351, 48067, 11890, 37652, 55806, 14704, 41948, 25288, 45401,
-10478, 64369, 26895, 48708, 9072, 28144, 51378, 4788, 42154, 22412, 54619,
-17438, 38774, 5733, 65286, 20669, 36716, 57715, 7724, 30061, 63472, 142,
-43410, 18323, 32224, 55317, 11428, 48459, 25457, 38605, 10365, 56683, 17668,
-48265, 33352, 8942, 57704, 37049, 1731, 47766, 21587, 55494, 6721, 36866,
-50874, 20217, 29920, 57703, 8997, 40669, 24668, 60754, 6419, 39202, 26341,
-63282, 826, 41422, 14248, 59523, 25431, 48496, 3367, 28534, 54258, 16348,
-41130, 23931, 52498, 10584, 39528, 21244, 62991, 1379, 33722, 55847, 7418,
-43663, 26038, 52029, 14729, 40470, 23518, 53699, 11578, 46402, 27715, 16798,
-54872, 37147, 4237, 56408, 19451, 34031, 44637, 1716, 59180, 23018, 33079,
-51346, 3695, 46583, 22337, 50644, 14945, 37188, 53960, 12201, 44247, 27722,
- 2724, 54609, 37718, 19274, 60053, 7599, 45137, 19889, 56231, 28367, 6991,
-51157, 36967, 22220, 53725, 10924, 47559, 17939, 29645, 63678, 9177, 42818,
-21198, 49941, 34876, 4864, 57813, 38149, 19059, 49051, 1501, 63503, 23876,
-38748, 6709, 54041, 16779, 33453, 62984, 10258, 46425, 25990, 40765, 16513,
-48680, 29259, 12383, 36916, 59865, 20800, 42044, 6396, 45666, 24755, 57571,
-15140, 41314, 24632, 56148, 10152, 33920, 61623, 475, 43065, 25656, 54682,
-10843, 36491, 47180, 1993, 60749, 23093, 41688, 6531, 64446, 27378, 105,
-58174, 36452, 21139, 59927, 10611, 37873, 65182, 1920, 27618, 58055, 16892,
-33699, 53828, 13558, 42569, 25879, 64654, 8487, 38768, 26736, 56549, 2943,
-44977, 20902, 53733, 5992, 30307, 41811, 14609, 57625, 28244, 7196, 53968,
-33322, 14259, 49553, 35435, 18034, 47735, 1467, 54045, 27934, 7064, 45846,
-36669, 17003, 59823, 32036, 7451, 63059, 14350, 28495, 52982, 16127, 43552,
-22277, 59451, 72, 32480, 41661, 23839, 59830, 14113, 41234, 21314, 54326,
- 1203, 31698, 62246, 8307, 42561, 21998, 53420, 17237, 29114, 63150, 898,
-40846, 23255, 60243, 5155, 39326, 17352, 50485, 35608, 3548, 61339, 22070,
-32778, 45974, 8861, 62513, 25936, 40799, 9783, 60562, 26902, 38620, 13660,
-46551, 20764, 53761, 10101, 32292, 48131, 2855, 56623, 32250, 11060, 50766,
-25602, 41456, 12262, 59852, 20555, 37727, 49431, 5341, 35097, 61656, 17426,
-45936, 22403, 55640, 13733, 38776, 26546, 54445, 9958, 29274, 61239, 2630,
-40476, 21924, 48602, 17176, 35468, 54890, 6575, 38961, 26321, 65445, 3709,
-38047, 54584, 8715, 27454, 47836, 19759, 60913, 10551, 32707, 46018, 17743,
-62336, 36403, 11214, 51065, 18981, 35702, 62893, 7877, 28964, 49940, 3422,
-61933, 27346, 8494, 58754, 37309, 20538, 43755, 9536, 52666, 27475, 3636,
-32958, 62286, 6474, 52653, 23948, 38698, 813, 56465, 18533, 36070, 61783,
-13491, 31808, 58163, 1563, 48078, 26523, 43543, 14080, 49598, 28247, 12186,
-52763, 34679, 16156, 46855, 23961, 58813, 5059, 40154, 22267, 45319, 1961,
-62028, 20530, 30777, 42933, 4372, 63802, 27990, 18291, 51916, 31414, 12111,
-58865, 34656, 16319, 28732, 62276, 49, 48267, 17544, 35854, 54217, 2749,
-30518, 51233, 10871, 44821, 22244, 49789, 17941, 33057, 52601, 9605, 39688,
-22100, 60181, 6922, 33840, 61959, 2641, 43847, 23563, 58186, 15236, 29286,
-48658, 11981, 41191, 23600, 61726, 9569, 38611, 21107, 58617, 325, 36003,
-63670, 5330, 34616, 57572, 8632, 41751, 23523, 50193, 12159, 28767, 57884,
-17652, 39416, 11026, 61788, 20399, 38691, 12282, 42427, 25285, 65296, 7320,
-28963, 58365, 17682, 35492, 63566, 10116, 29018, 49466, 13568, 39695, 25766,
-53394, 2977, 33713, 44215, 16093, 63068, 4852, 40185, 26016, 59571, 3403,
-35831, 45221, 16794, 55759, 30762, 11682, 64994, 27437, 15198, 46127, 30223,
- 9635, 53315, 27002, 42442, 13564, 60244, 25581, 47603, 928, 39012, 21213,
-58607, 7503, 34823, 60592, 3354, 52283, 22101, 40489, 4561, 56531, 33131,
-16881, 54022, 37445, 8733, 31575, 59737, 3878, 39647, 21683, 52420, 13297,
-30513, 58231, 6624, 40280, 22166, 56538, 16564, 32151, 44678, 13064, 57062,
-30624, 15831, 48039, 38333, 9360, 28746, 46054, 3825, 53536, 18306, 31673,
-50508, 11781, 46411, 30126, 5268, 62730, 24097, 41057, 274, 47638, 23016,
-58574, 15298, 42683, 32589, 11792, 59382, 36897, 22644, 62110, 8620, 45645,
-35556, 19707, 61222, 12097, 44617, 22375, 64914, 5346, 41536, 24319, 59157,
-16339, 31973, 63605, 12988, 48698, 29344, 618, 50666, 35790, 19418, 55240,
-38305, 4165, 33179, 64808, 7639, 29571, 48181, 16756, 63892, 2548, 39138,
-25874, 55835, 10161, 35823, 49539, 12108, 41223, 23788, 55579, 2419, 33088,
-49676, 11798, 42454, 25274, 54129, 13754, 46910, 20943, 30982, 62343, 9907,
-28733, 53214, 16378, 42967, 6634, 53600, 24362, 39341, 1721, 54635, 21838,
-43321, 6106, 49823, 23571, 58736, 972, 39510, 26768, 61820, 13457, 29110,
-42960, 20298, 53493, 4292, 62832, 18813, 31631, 44164, 3458, 64677, 16256,
-40632, 25025, 51221, 653, 32210, 42362, 6481, 50096, 21013, 62309, 4368,
-35824, 47958, 17178, 55908, 28106, 11853, 64520, 38227, 119, 28688, 61634,
-18271, 46449, 12767, 51792, 28424, 17430, 57974, 36458, 5017, 53488, 26011,
-43239, 16431, 55723, 6179, 40681, 24345, 59218, 1370, 44580, 27473, 15966,
-54036, 37990, 21263, 47242, 14738, 35542, 54330, 18419, 48813, 5183, 32403,
-63668, 16524, 36601, 58149, 12688, 43961, 23161, 41157, 11553, 60705, 20933,
-31331, 47792, 7610, 41514, 24337, 50674, 11250, 39334, 22967, 60103, 9254,
-34291, 62607, 2236, 44707, 22685, 56520, 6019, 38166, 50298, 12858, 30788,
-63104, 15027, 51664, 26395, 38945, 7139, 59848, 19212, 50983, 36083, 15356,
-44575, 5774, 60838, 26830, 42948, 3913, 54279, 37907, 13838, 42048, 24995,
-60152, 7775, 42659, 22533, 65330, 16094, 37232, 58130, 7099, 31138, 61784,
- 2373, 44296, 26464, 55860, 11678, 30574, 50107, 17924, 45718, 27764, 9168,
-53609, 36197, 5329, 51343, 18806, 32884, 56747, 2872, 44356, 26848, 54565,
- 6710, 31107, 50517, 13828, 44264, 29828, 19968, 47220, 15751, 60482, 32948,
- 1138, 64282, 36914, 7848, 48864, 26091, 54734, 6458, 44496, 26560, 56235,
- 887, 48994, 20099, 35791, 45750, 4286, 51315, 14304, 41317, 22495, 57034,
- 348, 32983, 62686, 9629, 42876, 23828, 60444, 11600, 48731, 20280, 29497,
-56467, 8906, 32313, 49378, 14305, 58007, 27372, 835, 51468, 38155, 7357,
-33103, 59705, 3094, 50400, 36001, 18373, 56750, 3909, 45998, 21279, 40349,
-11220, 56056, 26943, 51247, 13776, 42763, 29908, 18457, 44962, 11588, 63791,
-25310, 46591, 9742, 28051, 49178, 2601, 62969, 22207, 47497, 13685, 43263,
-26727, 64525, 7602, 47891, 23879, 44260, 15602, 31466, 63095, 4171, 46392,
-27197, 8056, 49576, 36398, 2821, 60308, 23527, 51877, 18880, 34561, 56033,
-12694, 41260, 23999, 61785, 8076, 40027, 20997, 58766, 35342, 12545, 50371,
-19776, 61077, 10298, 33981, 45408, 4431, 54325, 18840, 28823, 46144, 1045,
-50459, 16862, 31002, 55233, 3906, 47970, 25978, 39428, 158, 56730, 30848,
-13019, 36616, 52072, 9305, 45297, 35717, 4492, 27237, 57928, 15412, 42550,
-23248, 56939, 9320, 44648, 24770, 52315, 11425, 40222, 24516, 56461, 12814,
-35274, 9599, 50271, 20550, 44536, 5348, 62756, 28123, 17678, 52615, 33804,
- 6592, 64494, 26056, 44447, 9004, 61584, 21307, 39001, 7362, 58526, 34356,
- 2547, 51986, 18783, 45961, 37067, 143, 63959, 21339, 33759, 59381, 13771,
-48772, 20167, 34959, 57209, 16033, 31494, 63279, 11872, 42398, 24918, 55278,
- 8211, 41280, 22593, 57741, 7338, 45841, 34225, 14509, 38073, 47668, 8772,
-57248, 21358, 33721, 53135, 10635, 44606, 20908, 56034, 15076, 63487, 25272,
-40259, 9324, 44570, 24210, 58101, 12768, 32676, 42157, 5250, 50357, 32256,
- 9822, 53345, 20135, 44422, 30308, 8223, 59464, 37483, 1686, 32934, 45294,
-15205, 59998, 22024, 41205, 382, 65045, 20766, 35873, 49982, 14178, 30703,
-55135, 9708, 47700, 36895, 4716, 60837, 10384, 32573, 58061, 2294, 44595,
-31318, 12380, 55989, 25100, 45196, 454, 54244, 20884, 29657, 50034, 2751,
-57252, 26068, 39620, 5078, 53379, 16491, 59097, 29017, 3093, 64521, 33697,
-19865, 53036, 4511, 46297, 30241, 18555, 53930, 37298, 10396, 31452, 64618,
-17439, 27853, 53792, 3227, 35955, 44109, 9032, 57709, 21862, 41571, 13326,
-47652, 28967, 2808, 55204, 25877, 48808, 11328, 38793, 20632, 64912, 9678,
-31600, 52369, 5064, 47348, 19425, 34042, 55528, 12872, 31996, 49262, 4169,
-27209, 53841, 13478, 40535, 23598, 56978, 5867, 38761, 20710, 63548, 1059,
-34719, 58532, 14911, 42836, 24339, 64128, 14029, 30616, 59764, 9970, 39230,
-21930, 65247, 12423, 33161, 47108, 17816, 59589, 28105, 7908, 61844, 36493,
- 3239, 52368, 22198, 45265, 13385, 30062, 53088, 19225, 42366, 2812, 34960,
-63799, 18144, 39208, 13884, 60264, 31911, 8451, 57745, 27246, 18645, 61340,
-34731, 6327, 46415, 24044, 52314, 14909, 40350, 21252, 55607, 6034, 38553,
-26963, 54777, 1284, 35885, 46840, 12401, 64431, 23315, 41401, 7719, 34559,
-62533, 18430, 43933, 24603, 54784, 12664, 40038, 22829, 62289, 10599, 39053,
-24133, 64199, 8240, 30836, 58181, 18576, 44331, 6164, 33055, 54219, 1671,
-61849, 26715, 38879, 5837, 53768, 18254, 35779, 59066, 14098, 44006, 30136,
-11286, 55213, 34975, 1543, 50863, 16631, 38592, 20663, 60119, 2434, 52786,
-35498, 10253, 50560, 19338, 34373, 65481, 14042, 54006, 24409, 39115, 11333,
-45058, 4818, 63585, 17032, 30970, 57479, 1192, 33577, 47647, 17666, 54488,
- 2719, 45745, 25194, 39740, 6502, 52077, 21431, 29927, 49207, 14032, 60163,
-33707, 9563, 65219, 35335, 20102, 56828, 11278, 40223, 23180, 63348, 9392,
-36155, 51398, 15221, 43721, 25503, 55644, 3013, 28398, 61865, 18336, 38347,
-52533, 10197, 34463, 64682, 5864, 40701, 21867, 61030, 1357, 34814, 58249,
-20585, 42957, 3405, 51699, 28586, 38301, 13510, 60722, 33146, 16621, 46848,
-37267, 3107, 59440, 24583, 47466, 14044, 39527, 20003, 51528, 35154, 3951,
-57039, 26539, 43475, 12691, 65475, 24148, 41071, 9350, 56075, 17556, 30041,
-50878, 11535, 41383, 4383, 30245, 65087, 10202, 41506, 2993, 53079, 24121,
-39153, 5081, 51019, 18743, 36504, 64975, 2227, 30190, 49275, 16928, 61383,
-27181, 1312, 59211, 30157, 15350, 50563, 28020, 2462, 62044, 37354, 7563,
-30872, 47665, 3151, 52438, 19733, 35329, 59266, 1036, 29718, 53586, 8019,
-45468, 24552, 62663, 15706, 40215, 23118, 60526, 4073, 34987, 55733, 14360,
-43098, 22941, 64150, 9110, 31024, 49031, 11236, 38714, 26674, 51284, 12569,
-28561, 60490, 2871, 43370, 19435, 33205, 63840, 13425, 30087, 50786, 18938,
-45766, 27848, 15542, 64786, 23751, 40727, 9050, 60963, 19833, 33825, 40633,
- 8251, 65083, 18256, 34257, 47854, 9461, 62794, 19730, 34678, 47023, 10777,
-36740, 44976, 17782, 55562, 10041, 40368, 26148, 58715, 15945, 43117, 6679,
-57004, 21418, 48665, 1261, 36699, 45991, 9942, 60887, 27126, 17342, 54773,
-29835, 829, 65383, 32471, 8695, 58282, 37675, 14021, 63233, 23298, 41817,
- 1037, 51254, 25623, 43567, 17190, 56680, 27950, 14511, 63623, 38260, 1487,
-28299, 61414, 9732, 45402, 37909, 19086, 29971, 64313, 8654, 43115, 25252,
-54620, 13755, 41501, 23279, 51362, 7247, 28983, 55707, 3546, 40877, 22435,
-50316, 583, 45313, 26624, 52991, 5097, 41618, 20750, 56164, 2022, 39277,
-24118, 48124, 14458, 55255, 25446, 40136, 7015, 59322, 26359, 39885, 10105,
-62378, 24575, 48096, 12666, 30353, 51693, 4982, 45931, 22692, 52705, 16237,
-36680, 45084, 1603, 49228, 29963, 19574, 64819, 38147, 9119, 31231, 59747,
- 2379, 47153, 25136, 63325, 8630, 40668, 21411, 60884, 16609, 28287, 44759,
- 2223, 53912, 20010, 28977, 48068, 10766, 57185, 4420, 34046, 46766, 19915,
-52250, 403, 42122, 26686, 48697, 14840, 54268, 35573, 2477, 48434, 22395,
-65428, 15064, 40040, 23203, 47755, 12714, 56903, 20646, 30418, 49966, 772,
-41420, 23328, 61319, 5172, 40001, 25784, 63556, 19082, 32491, 58553, 5768,
-45867, 24647, 39955, 14480, 61423, 20618, 28316, 55573, 912, 43957, 22680,
-40956, 6063, 62251, 26685, 53448, 20351, 38642, 8355, 49585, 26126, 44329,
-19646, 64055, 7087, 38758, 26877, 59735, 10837, 33073, 64371, 15875, 42316,
- 2061, 57653, 25130, 39596, 5814, 44605, 23309, 52398, 3126, 43268, 26678,
-58552, 5531, 45243, 28893, 17738, 59540, 33086, 6539, 63976, 19648, 37602,
-50482, 12465, 30809, 56186, 1879, 46440, 27868, 17566, 51472, 32577, 12667,
-49963, 30416, 18045, 46195, 8731, 61901, 33471, 18494, 57563, 30669, 49226,
- 802, 27589, 51563, 8944, 57208, 22223, 43750, 7821, 34577, 55161, 449,
-60900, 16199, 30460, 46428, 10888, 53599, 19744, 33112, 48584, 6520, 35014,
-60800, 20356, 47003, 5841, 34978, 58104, 22765, 46482, 15128, 52049, 33633,
-19227, 61580, 13098, 45900, 34203, 20912, 59822, 10307, 44505, 27789, 15903,
-56161, 38309, 6085, 33048, 51397, 18004, 37723, 54265, 5815, 46040, 23833,
-41502, 13480, 56619, 25583, 43150, 12266, 55103, 37891, 10492, 31134, 47135,
-17785, 64874, 14181, 38848, 21096, 51711, 2131, 31307, 56269, 8728, 33299,
-49825, 16541, 45634, 27846, 6811, 50794, 34929, 18658, 55043, 5585, 61490,
-23416, 43738, 4160, 57234, 34857, 9012, 48219, 25422, 56177, 5658, 45290,
-24303, 41446, 685, 59849, 33529, 7057, 51770, 37289, 3535, 53656, 22914,
-43355, 5832, 52121, 15370, 46774, 25455, 54718, 6961, 30550, 43313, 14226,
-55903, 27947, 1325, 63597, 23980, 49309, 5642, 42654, 23769, 60994, 394,
-31367, 50073, 10821, 39833, 26433, 61730, 11751, 43835, 24764, 58635, 15754,
-34792, 50932, 5562, 37842, 46087, 11962, 50029, 23071, 42356, 16092, 51455,
-31294, 6186, 45911, 18737, 58521, 33754, 8274, 61749, 37371, 2646, 32314,
-49614, 7389, 44153, 24136, 51540, 16553, 33288, 59069, 12258, 46877, 387,
-51731, 32952, 17460, 60006, 3990, 47070, 31051, 9881, 36423, 60635, 18615,
-46852, 31169, 10737, 57125, 35453, 19369, 62637, 13529, 42475, 24234, 60551,
- 8273, 34846, 45248, 17152, 63036, 5706, 43423, 30469, 11385, 65126, 33896,
-18317, 54047, 2313, 46830, 30828, 6160, 55273, 36765, 20605, 61092, 10709,
-34247, 42602, 3238, 64385, 27572, 11936, 55595, 32889, 15432, 53352, 3474,
-27531, 57659, 12116, 45906, 23582, 41633, 15266, 34086, 47987, 13349, 52127,
-31151, 5222, 38439, 58491, 15585, 36109, 61667, 6015, 42679, 23234, 40929,
-16196, 64693, 28737, 6611, 58225, 32497, 18043, 61514, 5552, 29303, 43882,
-12367, 60995, 26239, 38933, 7152, 51734, 26219, 58286, 3692, 32919, 45960,
- 8491, 64828, 17360, 33944, 55978, 10801, 32161, 52942, 17542, 46674, 7066,
-52194, 14059, 42455, 26897, 55655, 8726, 49616, 31816, 4563, 48717, 38416,
- 8995, 32710, 59348, 12693, 51377, 30870, 17651, 48308, 1635, 43395, 27011,
-61175, 15515, 54229, 3500, 39750, 24971, 52142, 13740, 43995, 22531, 56052,
- 4189, 48630, 28906, 19512, 53574, 34900, 10605, 63598, 21856, 49696, 15583,
-31870, 62464, 10486, 38835, 20900, 49820, 11854, 32113, 54261, 2435, 47616,
-23210, 40599, 10259, 45757, 24315, 60212, 7246, 41635, 21753, 62554, 11919,
-36400, 58873, 3645, 43188, 23542, 63346, 5504, 36826, 54318, 15079, 27410,
-47477, 6352, 58658, 11626, 36253, 63117, 21055, 41397, 15291, 32399, 64942,
-12287, 50977, 29676, 18033, 44990, 36777, 5989, 64053, 23782, 39549, 1537,
-59563, 16909, 30275, 51604, 2845, 39976, 26261, 55023, 14383, 42054, 1411,
-60435, 25509, 39159, 6277, 44257, 24915, 55532, 371, 49333, 16408, 30920,
-47656, 4622, 60676, 35053, 11462, 48110, 23463, 63402, 9135, 43894, 28024,
-13883, 65504, 36818, 9710, 59687, 22174, 45499, 5096, 35340, 64116, 16509,
-27828, 60621, 5675, 41839, 25119, 49375, 3872, 33102, 57405, 15145, 46211,
-23676, 41350, 13544, 63986, 27314, 1135, 57782, 38396, 21377, 62228, 3101,
-45602, 25967, 40375, 13792, 52927, 19282, 31958, 46431, 15394, 64498, 22788,
-40364, 11119, 34842, 61589, 18203, 53524, 12622, 39366, 22251, 57721, 17031,
-47018, 28585, 13226, 62507, 30658, 18890, 58582, 35946, 1997, 42351, 21685,
-60454, 36736, 4044, 51218, 20615, 33877, 53057, 12173, 40305, 18511, 57247,
-31795, 8658, 51352, 36835, 14604, 65010, 22073, 46890, 2889, 33032, 51791,
-18398, 41074, 4015, 55226, 29855, 13815, 62792, 27896, 18359, 57128, 35424,
- 6541, 61500, 28331, 3567, 55923, 36449, 22210, 49920, 11761, 28998, 53278,
-14953, 44558, 23162, 57546, 11554, 35621, 60593, 13494, 29914, 54125, 3273,
-42257, 27739, 20287, 62733, 35570, 7591, 50231, 26114, 39421, 14599, 64798,
-25730, 48900, 1759, 39802, 13366, 63386, 23555, 41749, 7735, 49690, 31653,
- 3956, 54789, 37677, 16051, 30727, 57726, 10102, 52024, 28330, 18996, 58867,
-37628, 664, 50483, 23864, 45543, 14357, 35760, 58050, 16915, 43152, 22835,
-58814, 103, 29672, 47428, 18393, 56766, 30930, 13608, 50742, 37774, 5274,
-60545, 21340, 36078, 44181, 8147, 49971, 35158, 19868, 61596, 7458, 54293,
-29579, 3676, 65494, 36561, 19278, 55207, 27076, 8314, 49854, 31410, 13541,
-52010, 26925, 60185, 1591, 31939, 50018, 14108, 43467, 23438, 49304, 9722,
-35101, 55081, 19325, 47699, 32281, 4599, 53643, 18263, 46698, 35289, 10725,
-43374, 21169, 60298, 14766, 40822, 25015, 51554, 6884, 39589, 24424, 57833,
- 2757, 38547, 21008, 40961, 26367, 60999, 218, 38910, 21853, 65036, 17852,
-37379, 57372, 11752, 27075, 62799, 17848, 45663, 27754, 3936, 55844, 37254,
-11918, 59021, 21095, 39311, 5521, 47022, 19194, 34397, 59399, 8899, 31270,
-62384, 612, 40373, 18753, 34958, 44618, 12746, 60647, 4870, 41211, 26530,
-48012, 766, 29522, 57390, 6944, 42436, 24066, 54891, 1539, 34754, 64591,
-16035, 42634, 24537, 60952, 14058, 34126, 58152, 883, 49047, 17120, 39267,
-26703, 44997, 4936, 53541, 28357, 16774, 37831, 54751, 10906, 29513, 48993,
-19763, 41997, 2066, 65242, 37468, 21123, 33955, 52487, 17153, 46022, 5726,
-30711, 54768, 1979, 48247, 25662, 38917, 4474, 60090, 24525, 53058, 10052,
-31749, 49388, 14610, 54908, 25142, 41960, 7659, 63496, 24860, 48206, 8664,
-32852, 63041, 18585, 29447, 53872, 9534, 45532, 21818, 59123, 11394, 38580,
-26993, 64016, 9472, 41490, 23425, 52248, 17401, 29188, 54936, 823, 41711,
-19445, 35440, 56994, 3284, 49256, 32823, 19876, 51963, 267, 32796, 54062,
-17925, 29223, 47247, 1811, 50695, 19207, 34984, 56244, 9624, 30482, 61893,
-19183, 42806, 7003, 60958, 28489, 4862, 47760, 37019, 17557, 51591, 29378,
-12016, 48586, 19239, 30706, 59718, 9934, 32785, 47925, 949, 62618, 28936,
- 7250, 36229, 51589, 1737, 57772, 16912, 29619, 42567, 3161, 47226, 26281,
-64285, 4503, 44112, 30509, 7987, 56473, 36827, 1131, 50373, 38483, 11039,
-28665, 63225, 17485, 49293, 11814, 28723, 46459, 17483, 62111, 6666, 41862,
-25506, 59837, 2392, 39072, 22168, 61896, 16985, 45574, 28479, 6392, 56139,
-35024, 16221, 59298, 29598, 9374, 64210, 35519, 22127, 49469, 7809, 33559,
-48334, 2390, 43184, 24063, 53408, 12855, 33998, 47216, 17855, 64347, 8010,
-32763, 59663, 2042, 39718, 21506, 62649, 6079, 30344, 51046, 18459, 41788,
- 5251, 57047, 22108, 36283, 49032, 9181, 55686, 15508, 40712, 23339, 56346,
- 2288, 45771, 21310, 54163, 6360, 32955, 59357, 19314, 45921, 32767, 4467,
-54166, 28191, 17752, 61446, 38300, 11086, 28270, 64473, 1313, 45987, 23517,
-39715, 4266, 48748, 32310, 13171, 54586, 20748, 41286, 5137, 62668, 28301,
- 9508, 51515, 33365, 11747, 37966, 50206, 15426, 63033, 6665, 41296, 24151,
-45668, 8781, 58180, 18342, 29161, 48466, 10226, 63919, 30632, 17498, 54996,
- 1053, 33196, 44919, 12612, 50912, 25600, 39541, 11312, 59204, 52, 37329,
-45109, 20276, 63839, 3231, 38872, 16673, 45821, 22186, 56489, 11433, 35966,
-63165, 2949, 30362, 59324, 16866, 42852, 1378, 63636, 23772, 40319, 14428,
-59118, 30036, 88, 62849, 24892, 48263, 6362, 34707, 54552, 2068, 43457,
-22281, 62202, 14484, 42238, 26556, 60023, 7902, 50575, 16071, 30644, 54205,
-12471, 47089, 29752, 3176, 51822, 16021, 43400, 33945, 1773, 53522, 37275,
-15201, 63941, 32137, 7002, 50728, 24054, 42665, 14223, 64886, 25277, 50356,
-11621, 40978, 21459, 55755, 14403, 46839, 26188, 51195, 7660, 57239, 27973,
-18090, 52491, 36517, 12023, 61603, 19045, 36211, 50709, 14621, 33110, 60425,
-13250, 47125, 28511, 7435, 51650, 35850, 4408, 53069, 29578, 8661, 42456,
-22501, 55451, 33710, 11114, 61355, 20328, 48980, 9533, 33330, 64122, 326,
-44118, 22399, 60247, 6103, 34144, 56774, 16437, 28182, 50555, 7383, 27142,
- 3540, 56272, 37455, 19957, 61761, 13866, 42282, 22799, 58565, 9577, 41322,
-20554, 47170, 12836, 37671, 62117, 3374, 28687, 45320, 12171, 56754, 21282,
-38867, 12943, 58300, 22348, 44611, 4068, 37852, 48125, 13368, 32939, 64614,
- 3270, 42046, 23620, 56434, 5932, 39762, 21301, 58239, 2495, 35836, 63023,
-12867, 43411, 24110, 61132, 7471, 30879, 46641, 16655, 27259, 60412, 10497,
-41809, 26194, 62532, 8564, 36648, 57630, 14302, 40819, 24109, 59043, 11537,
-40022, 23306, 52636, 521, 39166, 26343, 55325, 11302, 33986, 50031, 18927,
-58997, 7322, 34774, 63315, 4424, 37319, 53137, 7678, 42887, 24098, 54629,
-12043, 39743, 17337, 56971, 21264, 40861, 10665, 48886, 31961, 22145, 60214,
- 9404, 52128, 23179, 38588, 11701, 55126, 19547, 35345, 60643, 14854, 48651,
-27232, 17985, 55473, 32769, 4885, 36990, 53039, 8038, 44953, 34119, 190,
-56845, 21579, 36532, 49845, 13978, 30752, 55185, 11680, 46558, 33594, 4216,
-54659, 37619, 12761, 42900, 24496, 53014, 5375, 47825, 21079, 39174, 597,
-53883, 19093, 37683, 57577, 14642, 27351, 64834, 7378, 40457, 21789, 60331,
- 261, 39126, 26527, 51760, 16353, 42280, 24269, 55521, 10638, 48893, 26143,
-40471, 634, 64002, 21081, 46497, 33704, 8108, 65115, 18883, 30590, 45737,
- 4815, 59667, 29648, 10026, 62458, 36498, 12842, 41840, 24654, 51949, 8401,
-28110, 55300, 16046, 42404, 12082, 58792, 34820, 2459, 51917, 21125, 47711,
-14946, 33087, 50283, 12280, 57129, 29464, 15721, 63371, 36284, 8749, 60000,
-25049, 48218, 12524, 36558, 55022, 3506, 27240, 64685, 8219, 44145, 28608,
-20161, 53369, 34980, 2422, 61684, 21907, 34201, 54660, 613, 42848, 24420,
-40325, 5598, 58943, 26076, 40057, 15807, 62596, 22425, 42367, 5962, 53010,
-23146, 46221, 16768, 27824, 57111, 12069, 33922, 47612, 20963, 58847, 6892,
-40441, 25884, 50989, 8601, 40016, 21830, 53471, 7842, 38903, 26522, 52731,
-12950, 33547, 56644, 5736, 42727, 20451, 52553, 34021, 12962, 38394, 57485,
-17998, 28022, 64095, 9987, 31263, 47578, 4506, 55641, 12425, 34140, 45063,
-22176, 63739, 4930, 34664, 41649, 8477, 59478, 21049, 36310, 61932, 9412,
-27527, 58017, 20358, 47419, 10402, 28473, 44249, 18721, 60606, 36025, 368,
-56217, 31298, 7673, 36823, 54833, 2454, 45176, 25365, 38956, 5138, 65345,
-17009, 32326, 41833, 1791, 63135, 30948, 8479, 45210, 24299, 54492, 6307,
-39590, 26131, 52867, 3759, 40433, 21619, 55869, 16773, 40061, 22413, 63077,
-11455, 36727, 50065, 16657, 65438, 6226, 29562, 48050, 2247, 40842, 23896,
-57352, 15705, 40755, 25289, 56378, 13222, 39902, 26123, 52226, 8893, 36015,
-61287, 13861, 44886, 18000, 64374, 29334, 10661, 46810, 26202, 52837, 8061,
-33784, 46116, 17030, 63728, 32940, 1157, 57801, 22288, 48136, 15954, 36050,
-60317, 5099, 42847, 26026, 53658, 539, 31720, 51004, 14978, 28130, 59699,
- 7398, 52843, 27627, 19376, 50527, 36131, 8540, 47727, 26393, 54089, 13644,
-31830, 50685, 8897, 45585, 27593, 4365, 51636, 37674, 20364, 58534, 11972,
-36390, 53621, 5503, 47592, 30414, 15489, 44545, 21668, 53123, 6676, 31557,
-62894, 4008, 45280, 33495, 7192, 65173, 18311, 48252, 34421, 12904, 45311,
-21645, 64350, 2012, 43642, 30500, 22202, 54581, 14111, 45014, 27503, 17056,
-57262, 34185, 2661, 65326, 22291, 33941, 52541, 4587, 43247, 25373, 63373,
-15797, 44465, 5902, 49706, 35876, 19637, 62979, 7295, 41954, 26779, 50624,
- 2082, 45883, 28263, 10575, 36053, 65253, 8957, 45878, 25195, 59063, 14490,
-30425, 64132, 19306, 43568, 12740, 53566, 27762, 3386, 65468, 38139, 8152,
-29108, 50974, 20101, 63918, 15285, 27608, 49555, 1707, 63202, 22544, 40151,
-13654, 60207, 26551, 43025, 10595, 62050, 30230, 4779, 50778, 38279, 16574,
-33242, 52174, 10415, 46441, 24589, 54882, 12547, 40578, 4323, 63070, 35363,
- 7505, 46147, 31756, 15652, 58919, 36577, 10288, 54924, 28405, 15637, 50586,
-38152, 1667, 53538, 24681, 42875, 13378, 37753, 53027, 18015, 27851, 49551,
- 3656, 61677, 20240, 37725, 47855, 80, 65416, 29997, 21593, 48910, 9070,
-43429, 25487, 60128, 6313, 41531, 22264, 62022, 2989, 38883, 24733, 45055,
- 5880, 53401, 22863, 40313, 1842, 43350, 26378, 58510, 15470, 46373, 31439,
-19280, 56067, 36545, 4201, 60107, 13970, 46937, 25337, 40728, 11244, 50273,
-17180, 31023, 62390, 13901, 50905, 22950, 45569, 10880, 52628, 29889, 3072,
-55485, 35212, 16284, 60219, 30854, 8744, 63005, 37937, 4000, 51371, 29573,
- 9652, 53015, 35373, 18367, 61927, 4283, 32959, 55472, 13280, 46724, 34547,
-19997, 62156, 3790, 40862, 23204, 50512, 10395, 29185, 64605, 16575, 40935,
- 7392, 61384, 28762, 3156, 49209, 37224, 15584, 52469, 38444, 16645, 28951,
-49609, 20237, 61595, 1430, 31401, 43226, 19341, 56963, 13347, 44291, 24823,
-50522, 5866, 45720, 17081, 30867, 49273, 7486, 35524, 58848, 2877, 52060,
-33443, 13657, 27352, 49441, 10351, 45227, 22549, 62912, 15229, 29272, 60173,
- 8669, 51691, 20006, 34337, 46255, 11758, 54569, 23168, 47509, 16039, 35756,
-59567, 3283, 41950, 22018, 65026, 12537, 44142, 23730, 62008, 8325, 32692,
-59163, 413, 45890, 30364, 19147, 58785, 3247, 44007, 28171, 18583, 54213,
-36619, 14285, 62278, 31268, 4215, 50045, 36314, 7433, 51567, 31703, 3084,
-62642, 17725, 46989, 29932, 1237, 48887, 37853, 32028, 50788, 6941, 35635,
-60380, 192, 39424, 21740, 55921, 4904, 29667, 50683, 14806, 44754, 25846,
-40737, 7485, 54487, 18411, 30506, 40374, 11345, 65195, 18064, 36073, 46078,
- 9016, 62055, 34330, 17260, 46421, 36707, 1022, 56768, 14507, 31346, 62572,
-18147, 40774, 1646, 61479, 27830, 17693, 38112, 57292, 14959, 33366, 64800,
-10893, 29031, 48374, 1431, 42904, 24128, 64403, 13108, 35020, 58828, 2180,
-49533, 25228, 42470, 12513, 48178, 21606, 54806, 15460, 40664, 25696, 56662,
- 3520, 29872, 60007, 6261, 51810, 27743, 16908, 37940, 58244, 10416, 46454,
-33669, 301, 62056, 38110, 9422, 51319, 24948, 41038, 14159, 48686, 8678,
-59606, 23199, 38532, 2260, 55594, 33923, 17481, 28142, 56854, 67, 44379,
-24533, 58645, 12899, 34211, 62140, 17597, 38307, 56236, 5485, 42609, 22613,
-53815, 2590, 39448, 21906, 50216, 4399, 38813, 25925, 60759, 9838, 31920,
-51835, 14728, 45360, 24436, 60354, 862, 42461, 31286, 7712, 57881, 38048,
-17658, 32843, 47191, 8090, 55774, 32532, 3726, 51374, 24365, 45754, 13484,
-41453, 22490, 61042, 1786, 28596, 58350, 19562, 42252, 5387, 34741, 59359,
-19443, 49353, 28558, 13882, 58072, 23503, 48254, 2923, 28594, 52070, 19605,
-44015, 4498, 61665, 27364, 14074, 57989, 35204, 6566, 63089, 22254, 48022,
- 852, 32872, 57363, 8803, 35507, 44316, 11638, 58305, 27128, 16639, 36654,
-45259, 5455, 57219, 31224, 17440, 53260, 37210, 11886, 30670, 55156, 18216,
-43587, 9459, 58398, 19428, 49069, 30276, 10769, 64110, 33512, 20418, 49881,
- 7838, 37493, 61963, 994, 41993, 12147, 51236, 31392, 17687, 38311, 54371,
- 9528, 29715, 65351, 5092, 44579, 25786, 39591, 2697, 57414, 37190, 7238,
-32588, 64613, 21034, 43983, 14117, 50212, 28114, 1829, 48111, 33932, 20945,
-54397, 14174, 41790, 24012, 64888, 1099, 43866, 26421, 49444, 15165, 41753,
-23225, 65233, 580, 29361, 56170, 16272, 43149, 8746, 60395, 36116, 19943,
-49160, 1965, 32097, 55943, 21673, 44273, 11997, 54201, 32251, 8001, 56490,
-27390, 533, 59390, 37640, 8662, 32892, 46567, 18019, 58018, 10018, 48619,
-23239, 39342, 2170, 64309, 32741, 18674, 56661, 37539, 673, 63228, 23774,
-45187, 16153, 40399, 21595, 64497, 5734, 37152, 58001, 16830, 32545, 52519,
- 4565, 43297, 35157, 20867, 47228, 13292, 58866, 27761, 3444, 61019, 37662,
- 6996, 29577, 55622, 13118, 48564, 27505, 16630, 51951, 35489, 1968, 55588,
-30874, 14937, 48718, 27301, 12233, 52287, 37183, 7970, 47771, 26249, 55125,
-13285, 34761, 49640, 9186, 57728, 24785, 41783, 10650, 53756, 20894, 28877,
-64996, 14813, 45837, 20734, 36811, 42849, 10088, 59871, 23853, 55399, 12399,
-44515, 22345, 56558, 15655, 41644, 25593, 58078, 11134, 41066, 24827, 62677,
- 8791, 35475, 56877, 4258, 30688, 64308, 21066, 43775, 2263, 58740, 24309,
-47200, 6766, 28880, 53063, 19970, 40769, 4824, 55553, 27281, 11966, 60924,
-37786, 21326, 43110, 5159, 52410, 24962, 46159, 11816, 33391, 59434, 5400,
-41804, 22476, 49878, 2791, 37093, 55447, 15381, 31292, 52740, 18572, 40663,
- 4731, 55157, 22820, 40343, 17719, 63823, 5900, 39268, 26406, 60220, 1113,
-32182, 52133, 8635, 43907, 22606, 50536, 16194, 35731, 42290, 9215, 61409,
-29518, 3771, 53551, 20085, 27138, 49026, 14819, 28631, 59220, 19414, 46861,
- 5773, 61180, 30035, 20130, 44992, 10322, 54068, 26840, 45808, 13313, 64952,
-37541, 11218, 51747, 21103, 39176, 6499, 48472, 29602, 4011, 52446, 27060,
-15930, 33220, 61223, 12433, 41354, 26811, 62880, 10847, 32737, 57843, 17963,
-47877, 6136, 42606, 36064, 20452, 58994, 6910, 40898, 18683, 35253, 56810,
-13848, 44811, 21870, 50361, 5761, 61498, 28109, 19540, 43972, 11895, 58547,
-36359, 17500, 63669, 6907, 31324, 55411, 15365, 47725, 36659, 8845, 45590,
-25525, 63923, 14444, 30965, 43376, 1318, 55833, 33850, 6583, 43366, 18857,
-62368, 33158, 12320, 59844, 22811, 32900, 41445, 8823, 49779, 31105, 20238,
-44899, 16142, 54794, 35177, 11868, 43570, 24022, 64559, 16095, 28507, 51599,
- 4884, 32071, 50282, 10468, 60901, 23064, 40936, 12878, 63781, 1109, 44925,
-23181, 51020, 4819, 34695, 64904, 21321, 41053, 265, 33657, 54447, 17680,
-44292, 4070, 55867, 13959, 30675, 52213, 16248, 28252, 57075, 20813, 44625,
- 6966, 63244, 27481, 1445, 57961, 35638, 21100, 51846, 13199, 56323, 20283,
-47522, 11785, 28513, 59959, 17223, 40949, 4618, 57162, 31433, 9178, 55951,
-37094, 18042, 61399, 5453, 43579, 25334, 59799, 10536, 39585, 21575, 57647,
- 8127, 31876, 60550, 10078, 47499, 18667, 35297, 51978, 10873, 46151, 22300,
-30006, 47311, 5936, 57275, 27730, 16050, 52068, 36775, 4968, 60005, 26018,
-39434, 13786, 63210, 18967, 34487, 46120, 11014, 51925, 22576, 65144, 3970,
-39453, 26648, 52294, 5561, 35708, 58750, 15837, 28549, 52682, 10557, 42520,
-21754, 53296, 13146, 32307, 59931, 4238, 29449, 47965, 9688, 55123, 23993,
-40294, 2197, 61289, 19415, 28037, 48836, 11304, 57561, 1071, 41176, 21988,
-31736, 52296, 10328, 41375, 21527, 63887, 81, 34739, 43634, 8971, 62291,
-29856, 10826, 46762, 18754, 38466, 58122, 4892, 34602, 64316, 16367, 42993,
-23532, 60502, 5098, 40289, 21769, 62892, 1394, 31591, 46080, 5601, 34026,
-59590, 18608, 45342, 986, 33984, 49424, 11235, 57885, 27496, 4513, 52797,
-34713, 19975, 40969, 2686, 49850, 13113, 33363, 62392, 6016, 48364, 18096,
-34961, 53677, 2816, 28360, 49320, 17761, 42183, 23533, 50196, 13054, 37439,
-51897, 10442, 32601, 55402, 15194, 37117, 61108, 1822, 43690, 23558, 64106,
-15259, 32899, 51230, 3670, 29331, 48817, 8953, 57938, 32052, 16457, 65367,
-37846, 7924, 47202, 24735, 53491, 13269, 32441, 56688, 9863, 42451, 22305,
-59039, 6985, 35689, 62178, 14618, 45640, 32875, 10156, 52663, 37057, 20302,
-56335, 13216, 29348, 47667, 17955, 62092, 36883, 13635, 30933, 63628, 1499,
-46506, 23852, 54060, 15004, 33679, 50598, 13147, 38340, 64748, 8297, 35085,
-55001, 3935, 43821, 31418, 15859, 38292, 50816, 748, 33375, 62437, 20907,
-39192, 7876, 53220, 30728, 3665, 58330, 25400, 42148, 15200, 54114, 19329,
-64624, 37311, 11504, 38478, 57460, 610, 44136, 23507, 55669, 6367, 38906,
-21037, 52078, 1068, 38581, 26764, 54818, 15464, 62407, 2040, 29625, 44526,
-22591, 54124, 10172, 46931, 28018, 3066, 62943, 36928, 15038, 31998, 48553,
- 2604, 54282, 29940, 20387, 49215, 1136, 33910, 52416, 19826, 40014, 5135,
-62364, 30617, 18905, 52716, 2832, 36295, 53948, 10035, 48092, 27322, 16659,
-65515, 37464, 22236, 53378, 8536, 37286, 50053, 1094, 43144, 16146, 57228,
-28802, 3026, 63743, 36628, 10496, 59215, 4296, 28380, 51984, 19913, 46954,
- 2837, 37299, 56010, 13830, 34650, 63164, 19555, 39824, 2114, 54050, 34482,
-18609, 49577, 29572, 10263, 60471, 37882, 16397, 28028, 51803, 12975, 46975,
-25565, 61648, 6873, 39199, 26814, 60661, 18892, 35396, 45521, 6388, 65018,
-34712, 2957, 40421, 22710, 52766, 14291, 37365, 49243, 18266, 45864, 7514,
-41835, 31621, 3793, 60977, 34501, 22628, 49638, 1324, 35323, 52233, 20472,
-42656, 12203, 63453, 26025, 41693, 7827, 49515, 19557, 36942, 50594, 2442,
-31179, 55488, 13217, 41282, 25211, 53816, 2740, 39324, 26205, 57294, 5417,
-38818, 26192, 54667, 2329, 64273, 18394, 35222, 43706, 9620, 62400, 30139,
-14686, 48020, 22777, 43014, 1743, 51291, 24152, 41963, 5929, 60748, 25545,
-40581, 12931, 44702, 23910, 56314, 15260, 29910, 62597, 11379, 40238, 26141,
-49286, 3560, 31356, 57786, 7802, 39345, 26905, 50856, 11359, 36739, 56128,
-17309, 32154, 43526, 12976, 53173, 22834, 46329, 9252, 35990, 64740, 17814,
-34013, 50026, 15909, 62547, 5906, 44306, 24553, 58075, 14308, 28361, 47029,
-18227, 58648, 33052, 5085, 49224, 21102, 60883, 37065, 8701, 28001, 50820,
-19737, 40260, 2593, 54470, 30995, 14646, 35918, 53310, 10905, 43192, 24193,
-48224, 15261, 63916, 21354, 39657, 9880, 55192, 26479, 60715, 6828, 41808,
-19134, 33372, 63311, 15188, 46387, 7611, 61509, 25754, 29604, 53932, 4084,
-45361, 20944, 30207, 65394, 9882, 43831, 19768, 59206, 37069, 11529, 61962,
- 745, 34095, 58025, 8208, 27684, 62974, 18958, 41597, 5764, 49606, 27808,
-17741, 57410, 34729, 10278, 38389, 54310, 20223, 45580, 12959, 63545, 24423,
-39738, 13829, 50314, 3081, 28045, 55458, 19756, 42397, 178, 62708, 27771,
-17164, 38143, 63701, 3767, 28065, 49095, 16805, 29202, 51045, 697, 27307,
-60961, 7730, 29496, 46625, 2738, 35802, 58712, 7345, 43334, 27644, 4311,
-57045, 38441, 10360, 28248, 59397, 17981, 41000, 5023, 62775, 22509, 44868,
- 2300, 29959, 57661, 18774, 42174, 13132, 51900, 23290, 63501, 7429, 27803,
-56340, 16958, 41965, 5182, 57595, 25829, 43393, 14395, 36450, 46857, 8692,
-61664, 28393, 2458, 46139, 32252, 7414, 59365, 27716, 18833, 51129, 31843,
- 9917, 45699, 25378, 60019, 14177, 43113, 24524, 64462, 7537, 46627, 21070,
-34570, 50492, 11305, 58227, 36847, 4672, 64813, 17760, 32704, 52332, 11326,
-41805, 25190, 59388, 8939, 40926, 16343, 65217, 37553, 9909, 60527, 24998,
-43902, 11153, 54689, 24712, 43225, 12196, 58895, 23319, 46941, 16814, 29632,
-61650, 4584, 35916, 51955, 11378, 45308, 3701, 31468, 56336, 14996, 28328,
-64430, 9982, 36983, 46820, 18562, 51241, 12231, 41212, 25687, 49044, 17200,
-37154, 62252, 6732, 31534, 59977, 10773, 42554, 23504, 48721, 7921, 29420,
-59019, 14684, 47409, 28219, 6612, 56616, 35905, 20406, 46178, 7587, 56044,
-32944, 3397, 58696, 37562, 9830, 45462, 23197, 56602, 12819, 42445, 2224,
-52833, 21294, 27612, 47678, 11336, 58631, 25762, 43186, 8846, 61527, 30512,
- 4435, 58864, 33107, 22231, 63613, 14154, 48165, 19541, 44286, 9657, 55778,
-17825, 30143, 61887, 6315, 48400, 24739, 39004, 528, 53849, 20700, 34867,
-64470, 11435, 27610, 58415, 15329, 34445, 45811, 4994, 50218, 17136, 33684,
-64004, 12164, 43312, 23873, 59856, 9093, 41878, 20415, 32736, 50239, 12392,
-58418, 27062, 849, 51350, 38066, 7748, 65328, 19321, 34947, 58704, 11424,
-47896, 33407, 17389, 55048, 2371, 36342, 59900, 7172, 33534, 49976, 1035,
-42494, 21269, 54463, 6560, 33821, 59758, 15003, 44563, 24408, 65371, 1895,
-41555, 22599, 61570, 6793, 45824, 27337, 876, 63657, 36432, 6266, 59160,
-26467, 41770, 3080, 55363, 29156, 8082, 39993, 26719, 53255, 17233, 35263,
-49593, 4025, 31519, 53901, 11519, 41567, 23520, 56125, 14368, 34073, 42983,
- 1171, 56527, 32492, 11784, 59940, 24941, 44640, 9543, 63499, 25722, 40905,
- 6782, 61167, 17497, 34341, 56005, 8160, 30184, 51208, 3581, 44577, 23495,
-38942, 16211, 47599, 24734, 54234, 1847, 43222, 31449, 18205, 55780, 38162,
-11186, 35472, 19221, 59503, 10562, 37073, 53136, 1471, 40225, 23461, 55212,
- 5334, 30436, 45252, 16074, 53098, 29266, 19570, 48016, 36922, 3218, 46342,
-23749, 59352, 13256, 32434, 51501, 7837, 46893, 27431, 2606, 58906, 30732,
- 7498, 35133, 44174, 671, 56653, 34041, 18999, 52849, 36667, 10706, 60622,
-30150, 15472, 48761, 36595, 7264, 52468, 19740, 46805, 33737, 9304, 57536,
-37766, 12528, 54235, 33885, 18008, 38001, 50322, 10775, 64697, 27203, 16593,
-53257, 37415, 20345, 47172, 14741, 51435, 21156, 35165, 45117, 8445, 54851,
-25085, 39310, 12306, 56221, 26012, 50223, 6445, 39292, 25727, 60636, 1386,
-32637, 45503, 18315, 49101, 30671, 11189, 60028, 35008, 19004, 50058, 1520,
-63753, 20341, 29988, 51228, 12700, 34905, 55711, 16289, 49552, 24072, 43290,
-13092, 54550, 4575, 36201, 63890, 16725, 50015, 3152, 34573, 53252, 11783,
-41367, 17358, 30296, 57242, 3723, 45573, 27672, 15973, 30889, 51475, 20853,
-43720, 6546, 60876, 22650, 49167, 1, 30350, 55206, 21051, 47425, 4715,
-28422, 46097, 18875, 56630, 3972, 38678, 22006, 64544, 525, 41590, 32002,
- 8064, 56887, 37308, 11032, 43020, 21557, 58502, 15054, 30101, 49684, 20054,
-60735, 7017, 35827, 44437, 19408, 53958, 27070, 4951, 61204, 35076, 21514,
-54407, 309, 30120, 56041, 9447, 40797, 22790, 49919, 16590, 29874, 55373,
- 1256, 35720, 57613, 18841, 44913, 4192, 41873, 23642, 61341, 15638, 43033,
- 2532, 64324, 25641, 41307, 14224, 49875, 27468, 17298, 63154, 32228, 4646,
-51104, 28887, 16809, 63520, 31128, 9287, 59802, 37140, 17052, 50927, 5727,
-33700, 53980, 16122, 46483, 27099, 9867, 50481, 37245, 229, 53947, 26644,
-39121, 5946, 64756, 24334, 45525, 10735, 39850, 23272, 57631, 12852, 33860,
-59317, 15543, 46891, 28886, 3785, 53337, 37679, 7388, 47964, 18664, 62679,
-22163, 30341, 56188, 6483, 40382, 21771, 51138, 1222, 32117, 52872, 13692,
-63013, 27183, 4048, 45673, 37035, 10220, 54538, 31320, 17573, 45642, 24473,
-55772, 3350, 29278, 45296, 5324, 63813, 21166, 30433, 50523, 14269, 45807,
-29255, 18325, 64656, 35349, 13547, 47704, 25204, 62013, 10940, 41139, 22630,
-55171, 9056, 38585, 20743, 53984, 12518, 32998, 48702, 15634, 58403, 34680,
-19751, 49538, 29955, 13446, 51336, 21448, 45378, 11036, 36724, 59908, 20487,
-42487, 1575, 64343, 9861, 39307, 22363, 59376, 7700, 35848, 64849, 2684,
-30609, 51562, 9673, 62789, 27198, 17427, 49074, 36618, 4509, 52952, 17106,
-32857, 48037, 714, 57334, 20714, 29961, 50862, 2921, 40544, 25456, 58292,
-15890, 34891, 61717, 12600, 52399, 4753, 35919, 64279, 13460, 29094, 59138,
- 9828, 47403, 27329, 600, 64652, 51590, 6484, 44082, 24068, 49625, 16017,
-29047, 60582, 13141, 34453, 47747, 9532, 61198, 24131, 40725, 6981, 65033,
-13968, 50903, 28710, 15770, 53457, 36821, 47, 62466, 23190, 42778, 16406,
-64868, 37351, 13807, 49188, 22001, 61835, 18346, 47886, 10036, 29058, 63131,
- 5580, 47698, 22819, 40509, 4022, 57781, 31945, 12598, 61758, 24137, 43735,
- 1908, 60226, 23417, 40363, 5060, 64169, 25850, 42178, 3402, 55982, 23062,
-43346, 15017, 33952, 48164, 23, 63017, 29878, 7772, 58079, 33150, 2870,
-65399, 19014, 28986, 46983, 635, 58730, 34512, 8041, 48010, 17865, 32431,
-56879, 11228, 40704, 21718, 53215, 9073, 35639, 65140, 3070, 43508, 23760,
-52850, 6868, 31267, 48260, 17339, 40734, 4741, 59555, 25712, 39707, 6792,
-62932, 31234, 1267, 37015, 60807, 17829, 29461, 48503, 8283, 42337, 28362,
-18579, 58440, 31124, 5285, 61554, 26300, 49137, 12910, 32145, 63648, 8253,
-38354, 60010, 1385, 47289, 24511, 39409, 12977, 33793, 57645, 18656, 40237,
-10860, 33294, 59806, 15222, 35420, 51913, 12719, 41981, 25733, 53113, 9633,
-33651, 50081, 14736, 60820, 24678, 40211, 2178, 55173, 25396, 50269, 6268,
-33586, 63557, 120, 40577, 26037, 47646, 14140, 51775, 2502, 30783, 58278,
-16566, 45184, 30771, 6354, 38275, 65256, 15969, 44616, 23696, 58724, 2384,
-33054, 63973, 8555, 39950, 21192, 51388, 6206, 30442, 65085, 17050, 37555,
-51823, 9152, 32200, 54451, 21541, 39440, 10508, 52551, 34079, 914, 57494,
-36932, 8676, 49311, 19426, 36302, 55285, 8312, 34614, 47033, 19993, 53736,
- 488, 45026, 30070, 19491, 63886, 27741, 2000, 38324, 60617, 19261, 29439,
-56934, 11657, 42638, 21368, 58233, 15442, 35860, 53030, 2242, 32501, 54544,
-16619, 47077, 4173, 29440, 44766, 6796, 62234, 18885, 32392, 45976, 14769,
-60919, 24975, 39974, 308, 51858, 12795, 43674, 25708, 58913, 9499, 34843,
-61477, 15965, 44126, 28100, 6876, 38321, 49498, 17637, 59184, 27667, 13725,
-61742, 35616, 5599, 49547, 27919, 13413, 53823, 37680, 15950, 32309, 48769,
- 9931, 61449, 27285, 4321, 53995, 38323, 7825, 27937, 55358, 3324, 45068,
-19724, 30428, 52234, 36, 43044, 25561, 60732, 5069, 43899, 26668, 63035,
- 2644, 29415, 41810, 10849, 54764, 3689, 37179, 57156, 7819, 32053, 61806,
-18351, 48282, 5271, 30949, 56632, 15425, 44787, 26948, 55440, 12134, 41077,
-26493, 50472, 15595, 45352, 27284, 19205, 47512, 37743, 6411, 44911, 13468,
-65291, 21458, 28237, 57887, 11415, 43878, 18607, 34702, 54631, 13192, 42774,
-22763, 65129, 10247, 29015, 48995, 28, 42642, 22617, 29867, 57071, 11097,
-39851, 21801, 50711, 5648, 35248, 53516, 14590, 42607, 22761, 37788, 17201,
-31559, 63444, 8162, 35587, 56439, 3933, 46143, 27511, 17472, 50845, 31950,
- 1886, 55665, 35459, 21371, 43700, 5168, 57582, 38452, 10862, 30595, 54783,
-19454, 40392, 4666, 50494, 29830, 9816, 53719, 25595, 42995, 4875, 39168,
-26581, 58666, 15252, 42976, 31376, 9241, 55076, 34259, 19310, 49537, 25315,
-56167, 6211, 40732, 18702, 30492, 54610, 10754, 49913, 30429, 14065, 46933,
-20501, 58348, 9138, 36953, 61473, 5645, 27646, 54652, 12041, 44444, 23602,
-41231, 12888, 55308, 22960, 49316, 6480, 36177, 61152, 15527, 43064, 27728,
-19976, 64253, 37047, 2541, 46289, 24753, 63024, 4769, 28915, 58394, 14534,
-40430, 21669, 54746, 11849, 38726, 26976, 62732, 9105, 33191, 56572, 22083,
-42669, 10962, 54969, 22882, 41264, 14323, 52793, 21380, 45507, 9418, 58020,
-33963, 20014, 62653, 1682, 49116, 36235, 11172, 46039, 21447, 54517, 377,
-35976, 43688, 19022, 53941, 27116, 11995, 34551, 52908, 9887, 62563, 26507,
-43260, 3529, 51996, 25779, 64080, 5927, 43896, 25597, 57339, 1485, 32189,
-63411, 7568, 30110, 59987, 18636, 44497, 28700, 5744, 48118, 18186, 65055,
-31845, 12663, 38306, 46732, 16059, 54208, 23630, 43638, 9011, 57051, 22577,
-33606, 63295, 11165, 38320, 49274, 9144, 27588, 57558, 13530, 47457, 27499,
- 7197, 34466, 51707, 12497, 45245, 22081, 53762, 13264, 43842, 25686, 56348,
-11006, 33647, 48346, 431, 27256, 62758, 18795, 46905, 4973, 59441, 30625,
-17869, 62256, 23362, 42425, 12346, 46012, 24273, 59247, 1599, 41222, 22513,
-61028, 5979, 41128, 28474, 14827, 57474, 38470, 10658, 34646, 47498, 14619,
-55294, 31861, 5239, 48758, 17264, 35859, 62723, 3559, 30491, 51007, 8943,
-41075, 20182, 59868, 28472, 8410, 64195, 37091, 21528, 56844, 13929, 41426,
-23038, 54875, 2084, 35483, 44236, 8804, 57365, 31594, 19967, 63688, 36381,
- 4370, 49254, 19770, 29389, 46321, 3455, 56778, 34357, 19051, 60627, 30053,
- 8248, 36055, 52773, 2683, 44298, 22449, 57124, 16952, 32743, 62740, 8596,
-44560, 22943, 56806, 321, 42991, 19773, 35695, 57889, 16240, 43401, 22097,
-59093, 14602, 32856, 63486, 9442, 39217, 17022, 56752, 33432, 13485, 48755,
-36039, 19089, 57033, 9845, 35764, 52844, 18486, 44780, 23352, 65081, 15048,
-40854, 24665, 52320, 254, 40644, 23903, 63272, 12698, 39539, 24812, 52930,
- 5748, 38515, 20832, 61884, 950, 34153, 57677, 7211, 31708, 52777, 3654,
-60195, 27902, 18363, 51842, 35739, 2183, 49495, 38189, 6174, 62383, 24324,
-48853, 4106, 28853, 56931, 7130, 36515, 51746, 18478, 33233, 62780, 8956,
-53165, 17504, 33380, 48058, 2469, 61066, 24354, 41080, 16835, 62977, 30840,
- 3734, 58765, 12958, 54393, 2228, 43006, 24797, 51012, 15193, 41015, 21228,
-64063, 6162, 36316, 58397, 15730, 28703, 48593, 11965, 60069, 27517, 17923,
-32861, 63859, 4021, 45587, 28208, 12729, 56812, 36335, 17900, 61385, 1396,
-33248, 55861, 12625, 49740, 20802, 41247, 2125, 57147, 23631, 44438, 16380,
-64235, 1199, 41643, 11386, 32735, 48036, 15781, 65245, 36489, 5576, 42421,
-19484, 62305, 36923, 1468, 52484, 31758, 22085, 45778, 13977, 51684, 31555,
-19926, 60496, 35801, 5248, 58949, 26147, 46252, 10203, 40878, 25793, 52075,
-11659, 32405, 55263, 5318, 48590, 12773, 41434, 23042, 54203, 9972, 35192,
-51597, 17800, 46824, 32065, 6617, 61252, 26376, 45797, 1974, 55648, 20589,
-43867, 16067, 47455, 516, 64222, 26772, 38517, 4137, 48579, 24964, 65423,
- 3022, 39085, 26531, 51685, 5604, 40008, 25578, 52724, 14797, 43941, 25061,
-65156, 7209, 41958, 24916, 59651, 13854, 47551, 4921, 37053, 58030, 19742,
-42704, 31340, 5593, 54757, 17972, 47765, 35566, 12602, 41756, 23835, 55632,
-10037, 39679, 22230, 50431, 16688, 47080, 37505, 2933, 55749, 12448, 36584,
-57243, 21706, 43737, 7615, 52353, 27678, 3292, 62029, 28773, 8059, 36933,
-59763, 17942, 39522, 5332, 45539, 19945, 52817, 27200, 1392, 61905, 37771,
-20266, 52405, 3870, 37532, 62861, 15047, 39934, 26287, 60653, 5151, 38536,
-27015, 61981, 3339, 41274, 22415, 60238, 14388, 37002, 54819, 8414, 43636,
-23739, 40269, 15179, 55267, 7165, 35646, 50304, 3977, 29883, 65499, 14571,
-39868, 26177, 56850, 10879, 33582, 48856, 17527, 64553, 36257, 4537, 27055,
-61871, 7405, 51970, 22460, 40264, 12101, 65196, 26348, 41141, 8262, 49929,
-23231, 43747, 14794, 62102, 25845, 46238, 5058, 35374, 50672, 18444, 43860,
- 978, 51303, 30649, 10314, 48576, 25045, 65434, 12256, 28787, 48301, 16818,
-51092, 5993, 45205, 27817, 16318, 55826, 38267, 10502, 65043, 24569, 41984,
-14239, 47558, 181, 50748, 22588, 40950, 16350, 64744, 30862, 9279, 37113,
-51849, 1263, 41147, 25377, 60189, 6339, 39018, 25369, 64228, 12411, 28132,
-46485, 9164, 52496, 30951, 1349, 49781, 37989, 22958, 53517, 5386, 45530,
-26135, 64434, 3806, 29989, 55667, 7072, 46181, 24327, 40717, 14139, 60256,
- 5314, 38570, 26853, 49141, 8936, 60899, 19300, 35714, 54909, 7336, 32689,
-51274, 2550, 46337, 20079, 60446, 13556, 43886, 25483, 51078, 11138, 41822,
-22723, 63378, 12884, 35629, 42563, 11003, 57201, 32981, 16104, 61443, 27057,
-10033, 52633, 32321, 15516, 36696, 60294, 11837, 42126, 23987, 46046, 2316,
-58088, 13453, 39758, 25016, 45490, 6402, 59383, 21306, 44200, 12839, 32054,
-56119, 8892, 44008, 20008, 49453, 28428, 62239, 18170, 47078, 33979, 11888,
-61434, 36708, 359, 48073, 24838, 54830, 10436, 40352, 23003, 63159, 7561,
-34103, 42577, 1061, 55941, 37709, 10022, 52114, 20408, 31949, 60353, 7205,
-48432, 24821, 41460, 14841, 46280, 22671, 59547, 5903, 31707, 65102, 14419,
-37368, 51767, 6552, 30690, 46854, 17885, 59789, 26335, 44852, 3170, 52969,
-29323, 12853, 49021, 24706, 55520, 7844, 28663, 43998, 18541, 59291, 4455,
-36062, 64983, 10336, 41696, 2376, 46504, 17721, 50545, 21024, 39274, 1659,
-63875, 34912, 19891, 59497, 3586, 40523, 22284, 62399, 16961, 33358, 57842,
- 7283, 29597, 61740, 15724, 43856, 27404, 165, 57277, 37241, 13380, 41623,
-17784, 53475, 25313, 39552, 5323, 58228, 27027, 38742, 12420, 50833, 20788,
-59701, 10181, 44278, 33394, 18338, 56372, 11887, 44073, 22402, 61379, 12824,
-32429, 59223, 3591, 39846, 19407, 32590, 56868, 10153, 39175, 23034, 63026,
-16979, 29492, 49459, 2827, 64596, 14535, 40122, 25349, 58929, 8623, 30224,
-61371, 2201, 48996, 20019, 36416, 62655, 4382, 27946, 59170, 9314, 29106,
-45197, 16073, 51740, 27228, 1231, 62752, 30265, 17177, 35068, 59231, 13766,
-45984, 34429, 19324, 52306, 1866, 31936, 64648, 21522, 49528, 12631, 34700,
-59412, 17315, 43845, 28286, 10387, 35446, 55339, 17722, 30812, 46553, 888,
-56884, 19720, 42670, 11917, 46981, 20627, 51926, 15582, 30858, 45664, 6776,
-50229, 28217, 17348, 58511, 35360, 1817, 51387, 25504, 43298, 16897, 61191,
-21999, 47359, 8961, 33772, 54382, 5208, 44419, 21152, 52395, 2852, 30138,
-46016, 12106, 54305, 38186, 17428, 32560, 44111, 3352, 59332, 23854, 44810,
- 789, 57624, 19852, 33021, 60432, 11375, 39308, 1526, 52515, 16930, 30339,
-57870, 10054, 39287, 25676, 63071, 16031, 37441, 58955, 4717, 40779, 18261,
-34054, 60060, 3172, 38950, 25454, 58539, 10075, 35502, 61838, 1772, 33210,
-48416, 17837, 54176, 5588, 38998, 26519, 63278, 11746, 31399, 55222, 4901,
-41971, 23844, 58126, 15101, 43282, 21814, 55341, 12656, 34364, 50872, 18069,
-44012, 7646, 53515, 32742, 2693, 62895, 37116, 19201, 60275, 28231, 11968,
-43763, 18113, 61272, 21207, 40351, 10145, 50320, 23451, 42188, 15944, 62449,
-33239, 1119, 54197, 22437, 45516, 17858, 57416, 2072, 42684, 30551, 11249,
-46532, 25375, 59511, 14474, 38997, 26788, 55922, 8930, 32803, 40573, 3229,
-64155, 18966, 36475, 56202, 4785, 28267, 48049, 19815, 55383, 310, 29489,
-50403, 7841, 45510, 38375, 18109, 29104, 64550, 1503, 40646, 19474, 50379,
-30388, 7915, 63565, 37959, 19920, 30991, 55643, 3814, 50455, 26692, 38672,
-10150, 64841, 26172, 51512, 838, 39260, 25181, 57978, 5843, 34830, 10207,
-51930, 29092, 4543, 55404, 20053, 27818, 57910, 9108, 44700, 19032, 33157,
-52100, 2662, 45101, 26296, 54537, 14712, 47354, 28460, 16880, 61917, 25647,
-40995, 2218, 46654, 34505, 18690, 64577, 3766, 31741, 52700, 11022, 39968,
-24958, 53987, 8258, 46919, 20078, 27800, 61214, 12825, 35693, 53560, 4791,
-39079, 22409, 58298, 14596, 34883, 62773, 434, 45002, 17270, 33204, 61121,
-12245, 47693, 27548, 16020, 49753, 29804, 19052, 55675, 34926, 14338, 63284,
-29328, 11209, 54465, 32514, 17078, 48798, 7101, 29700, 51107, 14464, 46540,
-28668, 1242, 52301, 36231, 18871, 49619, 3464, 33715, 55695, 9227, 47774,
-30850, 20089, 63867, 4153, 48918, 32370, 10475, 62031, 35789, 14013, 49100,
-23104, 61106, 6988, 41884, 31211, 16790, 49876, 6139, 61949, 25477, 41278,
- 233, 55225, 34859, 7931, 46959, 23477, 55976, 16040, 50670, 5836, 45040,
-26139, 55602, 1525, 31770, 51880, 9477, 43383, 27669, 18592, 55779, 35762,
- 688, 50500, 20824, 39395, 15942, 54192, 32618, 6813, 46186, 15529, 52781,
-33481, 19548, 48991, 36878, 5051, 64270, 20946, 35262, 49086, 9121, 37823,
-53779, 4478, 42387, 25052, 56603, 10305, 41402, 24714, 57510, 11777, 44262,
-28390, 4199, 55796, 30374, 7672, 37039, 51176, 3122, 64840, 22465, 41913,
- 5659, 60029, 24229, 50619, 10087, 38490, 27042, 54602, 7832, 64233, 34508,
- 1594, 58205, 19330, 36215, 63335, 3796, 30906, 45514, 13268, 64706, 28965,
- 8062, 57181, 37084, 2694, 32544, 53479, 11402, 41572, 23113, 58131, 15738,
-31827, 62644, 13442, 39577, 23395, 60200, 1234, 27547, 49474, 13857, 56352,
-29157, 10439, 53351, 37377, 16926, 29013, 45769, 6595, 54970, 25092, 49053,
-19040, 36692, 64855, 6062, 42714, 23444, 55892, 3380, 31487, 53188, 8652,
-28214, 49566, 20657, 56281, 9648, 41988, 23677, 55074, 13852, 41608, 21848,
-52150, 15319, 45856, 28221, 8384, 60767, 23637, 43128, 16129, 53304, 7406,
-36981, 57753, 20602, 45218, 14056, 51201, 29780, 3815, 63575, 38217, 7077,
-30766, 59106, 3019, 38622, 26707, 56474, 13704, 47365, 24936, 40836, 11308,
-50791, 4180, 34545, 55816, 7479, 47835, 30903, 1584, 54148, 35378, 17749,
-58922, 2924, 31349, 51635, 13316, 43511, 26666, 64201, 6104, 39064, 25122,
-47489, 13965, 63451, 33874, 3867, 50704, 21031, 42614, 5464, 65519, 22358,
-45102, 15671, 57941, 23389, 47729, 7496, 31145, 49882, 16723, 61129, 33990,
- 9228, 43252, 25816, 64000, 14616, 31578, 59301, 4322, 35089, 56054, 12300,
-43396, 26158, 58909, 5350, 53731, 35176, 17826, 48028, 10671, 59929, 22948,
-42301, 14151, 54529, 20199, 41267, 5200, 46710, 18886, 30147, 60789, 14370,
-46478, 22584, 39216, 44349, 19252, 63832, 33116, 10956, 38435, 49284, 14399,
-31252, 64772, 5050, 41008, 22311, 61556, 10901, 39059, 21022, 60657, 8383,
-36008, 50682, 4776, 43194, 13963, 56286, 23091, 49672, 9670, 29607, 55544,
-15840, 35279, 62248, 345, 45693, 29559, 16681, 60216, 35922, 2887, 38474,
-49123, 10470, 29199, 63612, 20215, 43107, 7566, 50167, 25286, 39393, 11667,
-57436, 26463, 40391, 3497, 53409, 34238, 8368, 57926, 37495, 769, 61778,
-27254, 7452, 53826, 37466, 3263, 45676, 22749, 62145, 9526, 36784, 56988,
-18685, 33681, 64915, 6275, 44090, 25570, 59932, 13190, 44936, 24444, 64509,
-11636, 40035, 22875, 59455, 12369, 34629, 42792, 15125, 56153, 22287, 46518,
- 7797, 30301, 57215, 2831, 44328, 18794, 33464, 53465, 1828, 58701, 26569,
-38887, 19046, 53416, 10674, 30634, 45074, 16730, 63952, 26603, 41742, 2268,
-31327, 61725, 19979, 38810, 8657, 48443, 22196, 59217, 16362, 33361, 61056,
- 6050, 48185, 31868, 11100, 62067, 26228, 45397, 7616, 65413, 23550, 43719,
-13847, 58457, 25004, 40609, 355, 54966, 13343, 60116, 24793, 41315, 11263,
-54280, 18949, 28194, 61229, 14342, 39189, 20388, 51600, 758, 32248, 62495,
- 6775, 47169, 35195, 17154, 61382, 37722, 10977, 48107, 24829, 56895, 14958,
-30989, 45871, 12335, 56112, 25658, 39373, 14076, 44199, 20793, 61544, 2806,
-47745, 24108, 40436, 12887, 44512, 25601, 53973, 8934, 39999, 25021, 55618,
- 9654, 34485, 48842, 16069, 41165, 23008, 46642, 13083, 60110, 20069, 30695,
-63929, 29, 35266, 50348, 7741, 43818, 24400, 55852, 9113, 48292, 20715,
-33869, 63074, 8093, 39708, 21188, 61406, 33915, 5862, 50317, 13686, 63684,
-35418, 18127, 42091, 2813, 53697, 27746, 10528, 32994, 59415, 18936, 49256,
-12769, 34810, 44931, 14858, 61141, 33370, 1476, 43758, 26661, 62367, 7004,
-46501, 33775, 743, 64558, 30689, 7527, 36678, 55052, 19394, 47151, 30817,
- 2500, 58760, 33599, 19351, 48742, 28196, 1608, 38477, 60880, 8745, 34418,
-48804, 18036, 27334, 52554, 15433, 45511, 24685, 64897, 9616, 39530, 20796,
-60904, 5611, 34668, 58822, 18553, 44847, 27359, 12830, 65186, 35975, 15772,
-57968, 28482, 11175, 47824, 37314, 21009, 61011, 7585, 39272, 20230, 49873,
-11832, 31344, 51048, 9299, 58663, 28480, 17370, 55231, 37333, 13079, 60224,
-30192, 16887, 48599, 31968, 561, 54361, 36056, 10137, 28323, 59674, 19914,
-44760, 1921, 39949, 23537, 58519, 15715, 48846, 3056, 40072, 23785, 44272,
-13307, 53208, 22999, 48578, 8292, 39545, 21663, 45704, 14660, 28164, 61909,
- 546, 43554, 32138, 7226, 37656, 63787, 1694, 32174, 58794, 21996, 50214,
-12366, 36170, 52774, 7951, 32594, 56725, 1611, 26104, 54740, 6752, 45229,
-24183, 60453, 2899, 35460, 54010, 17161, 28621, 56143, 12766, 43139, 25398,
-52945, 3642, 32193, 45615, 13304, 58527, 30889, 19276, 64167, 37551, 8032,
-32330, 59963, 19603, 43752, 6077, 50846, 27397, 18508, 56555, 37086, 5295,
-44166, 22400, 57387, 15733, 27192, 55355, 907, 34587, 51668, 15070, 28478,
-61605, 4164, 46556, 22120, 52747, 6523, 30546, 64545, 13831, 46196, 23428,
-41041, 11266, 51162, 21202, 33281, 48556, 15545, 42626, 24894, 57683, 5954,
-40339, 24056, 52534, 391, 47004, 11808, 41086, 21881, 53986, 10182, 30916,
-40233, 4867, 51338, 19410, 37194, 52947, 2182, 28565, 49851, 6163, 60728,
-25971, 38759, 1184, 64985, 26649, 40715, 14760, 47821, 25250, 63547, 9613,
-40128, 23618, 46300, 13538, 64422, 3416, 34053, 48430, 21183, 57490, 4384,
-39418, 14197, 48454, 22687, 54186, 9618, 41513, 26798, 64891, 14311, 42350,
-36241, 3946, 46268, 23351, 53777, 15658, 41435, 21886, 43076, 4571, 57413,
-34350, 18640, 41136, 3137, 51105, 30163, 8233, 63607, 35940, 18515, 45790,
-31084, 7731, 35870, 47979, 2059, 58387, 33208, 6557, 45620, 24165, 64037,
-12120, 43118, 23893, 49723, 15645, 29356, 55064, 2689, 27225, 46410, 19450,
-60392, 455, 39100, 21464, 62074, 6799, 36729, 48951, 1975, 31605, 63767,
- 6449, 52006, 26753, 38769, 9587, 59430, 18535, 51030, 33185, 5528, 46895,
-22638, 60875, 12743, 41874, 21681, 62430, 724, 30768, 59004, 6171, 50741,
-26377, 38831, 4361, 52238, 18477, 46502, 27939, 12516, 59424, 38222, 3573,
-31348, 42850, 16186, 58409, 5424, 44452, 25680, 52960, 2159, 47284, 18829,
-39630, 26602, 56452, 3845, 30984, 48099, 9328, 61795, 21159, 35206, 56585,
-16285, 44981, 124, 40047, 26643, 62528, 6530, 29728, 47839, 17011, 58100,
-22321, 38826, 11205, 50185, 18775, 28082, 54418, 12675, 42812, 24738, 60148,
- 4128, 40300, 13549, 62822, 25998, 41051, 12005, 51833, 6577, 64338, 36298,
-18120, 27113, 54706, 13223, 38432, 61938, 799, 32932, 58337, 10740, 42017,
-22743, 53118, 1687, 44405, 24079, 49094, 15014, 29394, 54428, 595, 37331,
-51257, 17516, 46079, 4754, 40700, 23627, 63299, 6476, 30477, 51126, 14748,
-44649, 25788, 57579, 4057, 35237, 59954, 19165, 41325, 744, 35301, 44689,
- 7583, 49583, 27360, 2315, 53555, 38356, 8485, 62263, 25075, 41637, 13945,
-52595, 38408, 4300, 33465, 63007, 13849, 47400, 29601, 5560, 53230, 36507,
-20381, 56405, 6936, 62698, 26742, 38699, 1092, 61620, 17598, 33816, 59753,
- 3484, 52513, 37503, 9961, 49106, 24158, 57817, 15405, 52161, 27620, 17645,
-48324, 37202, 9656, 27763, 61814, 3330, 41408, 23366, 65267, 15226, 40401,
-50319, 16701, 35063, 56316, 11555, 41603, 22511, 50583, 8301, 38138, 47658,
- 1305, 36562, 58933, 7217, 29429, 65532, 16202, 37604, 51532, 513, 27149,
-49221, 6365, 44267, 22142, 52266, 1623, 40618, 25721, 63351, 14215, 38120,
-48135, 9637, 27924, 63977, 13673, 52169, 33263, 6287, 62057, 38276, 18688,
-46296, 8079, 58692, 37550, 18049, 32201, 55897, 9524, 41306, 25953, 49798,
-16663, 35813, 58621, 2657, 31288, 63726, 18176, 44220, 4900, 59738, 30287,
- 9850, 51429, 19055, 34567, 60702, 13176, 43009, 25364, 61553, 17313, 31148,
-58462, 2926, 36840, 63338, 16032, 42667, 25093, 60944, 8610, 32557, 57623,
-16716, 45215, 23657, 40824, 9542, 51911, 20936, 45135, 12228, 55246, 33507,
- 5652, 50308, 17466, 30517, 56000, 8389, 34129, 52383, 16300, 43563, 27666,
- 9267, 54424, 37013, 17994, 60612, 32238, 7079, 58331, 34440, 17827, 51412,
- 782, 29814, 53211, 7803, 58221, 28063, 12905, 64175, 37859, 1830, 30639,
-55377, 13747, 47375, 28921, 9264, 53484, 25125, 60718, 12752, 37135, 48066,
-16531, 27443, 56344, 3661, 50334, 23154, 64954, 16682, 30052, 43440, 13081,
-55487, 26797, 48344, 3163, 38855, 21421, 59016, 4965, 38126, 65322, 9176,
-37014, 53025, 12813, 40353, 25937, 53589, 9995, 43084, 23890, 50873, 15546,
-28705, 58354, 17175, 45689, 22283, 42045, 12637, 55208, 24893, 46068, 166,
-28032, 65372, 17406, 37832, 56760, 2930, 35247, 49968, 7245, 28120, 53554,
-19164, 44418, 11786, 34870, 63022, 14870, 43148, 24557, 56741, 6903, 36523,
-51570, 17672, 27320, 65065, 10219, 53072, 34911, 19716, 41125, 12794, 64404,
-29634, 16728, 36710, 59993, 10730, 51728, 22266, 43143, 15596, 58454, 25588,
-39097, 13209, 51408, 5533, 29712, 64035, 20806, 50559, 11679, 38641, 21641,
-55097, 3854, 34787, 45656, 5819, 51893, 25671, 63396, 2869, 35372, 47288,
-20658, 57226, 9204, 32044, 48706, 18563, 52501, 35189, 5374, 55428, 20435,
-45843, 29448, 15409, 38319, 59532, 4117, 47673, 33351, 7623, 29069, 53435,
-21450, 39792, 4591, 50211, 17572, 35389, 57567, 12054, 31330, 62197, 6965,
-42132, 19701, 63898, 30959, 9888, 57222, 21967, 33624, 52506, 8468, 43380,
-26185, 55775, 383, 33581, 64924, 9589, 40881, 23942, 52308, 12315, 46584,
-22784, 63956, 10585, 52242, 30445, 18468, 62697, 37804, 11967, 29357, 57000,
-18220, 44314, 6774, 61323, 30426, 18764, 55616, 27323, 8133, 51841, 35830,
-16172, 64504, 25270, 44959, 9033, 33658, 49736, 18647, 41977, 10329, 46132,
-22382, 55257, 30221, 9511, 45010, 16925, 31260, 65464, 20961, 41924, 4872,
-35402, 44564, 11033, 62606, 30237, 6114, 57123, 38481, 17584, 34226, 53511,
-11721, 45385, 31364, 4897, 20382, 62907, 29417, 920, 37848, 59463, 14710,
-33695, 63500, 17970, 27291, 57263, 13643, 31424, 48855, 19350, 41729, 8920,
-54780, 28216, 18293, 62811, 37028, 11387, 55191, 28607, 16739, 57200, 37068,
- 8773, 30466, 51596, 3452, 58564, 19362, 34402, 49302, 1717, 40895, 19237,
-47501, 30020, 11560, 54146, 32141, 21679, 44033, 2259, 64075, 13705, 38962,
-21231, 60681, 1596, 29699, 56499, 8134, 42811, 24834, 52356, 7105, 38871,
-26812, 53273, 13760, 34896, 65205, 1319, 46683, 28093, 8190, 54772, 31978,
- 4186, 37993, 53534, 7609, 43005, 24590, 49261, 12553, 29044, 56545, 857,
-48756, 22570, 41293, 10979, 30438, 63080, 3696, 54931, 31649, 15914, 60337,
-36547, 3181, 29071, 59137, 19422, 36126, 61587, 711, 42497, 24094, 60130,
- 5186, 47866, 19530, 32188, 62526, 1141, 46110, 29122, 12567, 49419, 26221,
-42450, 5215, 63132, 20870, 45849, 35529, 15257, 49181, 19125, 34486, 50645,
- 6641, 44381, 25649, 59734, 8353, 34875, 63367, 17417, 37280, 48523, 1105,
-42036, 22764, 56805, 5192, 32124, 62011, 10341, 43608, 29385, 11931, 36653,
-52031, 5383, 59773, 23019, 39567, 9794, 56904, 18201, 34122, 52694, 10463,
-45922, 32682, 16594, 51112, 20229, 28266, 62676, 4650, 45509, 18650, 59040,
-31561, 3621, 64377, 35697, 8261, 53990, 32698, 10619, 60567, 37676, 4275,
-32619, 62588, 16749, 35936, 52309, 10546, 45183, 29097, 14582, 52954, 27321,
-16929, 60367, 38281, 10089, 32312, 56462, 21583, 49189, 1469, 31446, 58431,
-10980, 40084, 21516, 61578, 2280, 33826, 45046, 14888, 49674, 29048, 940,
-56480, 24640, 47978, 4312, 33342, 54643, 8456, 45480, 27717, 392, 36494,
-65400, 7228, 33291, 48838, 1815, 43996, 24361, 54745, 14214, 35810, 46572,
- 7348, 58563, 25026, 43180, 10461, 63775, 27576, 15808, 59583, 37272, 13213,
-31333, 44415, 16287, 59221, 5164, 39091, 26679, 44473, 1334, 65257, 29226,
- 9706, 43731, 24235, 61337, 456, 34803, 56852, 8377, 50220, 27557, 17179,
-37497, 65507, 11238, 44856, 19176, 60088, 34123, 14386, 62980, 27292, 5968,
-51481, 37744, 16383, 46423, 24565, 52988, 4465, 40793, 25357, 46955, 2055,
-62657, 18378, 29332, 59200, 11911, 39507, 20622, 49438, 16758, 29168, 56582,
- 2475, 33878, 61266, 6442, 39036, 25591, 42388, 15916, 57555, 4946, 32271,
-51099, 22088, 47085, 3556, 31161, 51665, 21433, 39798, 1531, 49738, 12105,
-37197, 58269, 20629, 43762, 677, 41091, 12236, 59458, 22360, 54914, 2513,
-30664, 51643, 16344, 64758, 35894, 4594, 50172, 20204, 35412, 54319, 2106,
-47116, 12495, 29050, 60495, 16759, 49683, 27158, 2756, 54995, 38209, 16060,
-27051, 51025, 257, 60926, 27736, 8815, 58111, 37884, 54295, 12843, 43820,
-25255, 49581, 7571, 29118, 53772, 3517, 44355, 35743, 6067, 52208, 23053,
-62438, 2362, 34620, 59262, 21233, 45926, 4944, 32127, 48177, 15513, 35023,
-61707, 4501, 42582, 23215, 60707, 13359, 46578, 21061, 31442, 43398, 8387,
-61352, 22715, 31817, 51278, 9897, 64905, 27335, 3684, 57718, 36474, 15913,
-50687, 26436, 45520, 5788, 52167, 24286, 42278, 15555, 48524, 33283, 12062,
-61368, 20798, 45449, 17413, 56092, 3746, 47332, 24209, 41607, 15190, 56425,
-20930, 37017, 45198, 18030, 64432, 27331, 10933, 50028, 34885, 19433, 55413,
- 5668, 34608, 46712, 17891, 36551, 65521, 5114, 44294, 21723, 50336, 13974,
-39110, 24312, 47663, 7234, 52902, 23340, 41800, 8193, 51194, 15340, 41123,
-22515, 54547, 10505, 38994, 26515, 57675, 12891, 40034, 22103, 52791, 9890,
-34854, 64751, 2843, 53467, 21791, 38628, 12998, 55478, 28530, 10325, 60936,
-38280, 3045, 27218, 62185, 20171, 53097, 14348, 40123, 22546, 51229, 3782,
-28118, 57835, 15161, 31645, 64495, 11623, 39717, 26440, 52036, 15885, 35007,
-54491, 1567, 60503, 21798, 42414, 15088, 47442, 34794, 227, 63750, 25341,
-44317, 7201, 29566, 61601, 13439, 27626, 56361, 1177, 45011, 31951, 8214,
-55467, 35361, 11141, 50470, 25057, 40855, 13954, 48478, 24689, 43024, 798,
-51156, 19867, 28975, 56389, 14367, 46918, 5943, 40986, 22939, 58299, 3887,
-33982, 63510, 7946, 47776, 37167, 2092, 51815, 24377, 42921, 5265, 64880,
-17070, 40348, 25787, 44834, 4763, 54598, 30536, 13875, 47949, 23586, 57458,
- 5918, 36441, 62755, 18917, 39533, 11573, 60397, 22724, 43671, 15172, 62232,
-20257, 32703, 57119, 14519, 42466, 23278, 55381, 11445, 29891, 63296, 19660,
-41012, 4274, 59933, 18716, 30547, 41962, 2187, 54083, 32098, 18837, 38244,
-52762, 554, 29628, 48863, 7375, 55315, 19887, 32824, 50982, 11710, 61064,
-21460, 49847, 16813, 37264, 58408, 14658, 48005, 32380, 12507, 52855, 23041,
-43549, 13869, 32621, 58653, 2001, 42872, 24848, 56613, 3420, 28419, 48626,
- 8828, 45279, 37146, 19490, 29587, 55307, 2560, 59882, 10809, 38938, 26911,
-61012, 12457, 31860, 49075, 15109, 35924, 53387, 3406, 42583, 24291, 62154,
- 5507, 36501, 53196, 13061, 45943, 28293, 15243, 49352, 21317, 56182, 1804,
-45773, 34860, 20200, 59631, 10019, 42406, 17365, 63776, 35814, 9238, 59181,
-25799, 45278, 17259, 64986, 31889, 5789, 48026, 26793, 61737, 19226, 31137,
-47986, 7677, 39829, 25158, 58758, 6080, 43199, 28676, 12967, 56679, 25860,
-42062, 7542, 60932, 28010, 18514, 57422, 33661, 8341, 38173, 53803, 14314,
-34633, 46315, 6950, 64079, 32776, 13773, 46212, 30818, 19586, 48213, 34093,
- 3672, 18122, 51506, 33169, 10020, 64457, 21899, 46743, 12580, 31387, 61322,
-15745, 48172, 38251, 11171, 32502, 44744, 15304, 49967, 7385, 29096, 58099,
-17594, 53924, 2077, 40667, 24813, 50063, 14570, 31291, 53371, 762, 36237,
-65333, 6870, 54269, 24799, 39803, 14380, 58217, 5776, 44495, 19682, 37465,
-48638, 12426, 30537, 62627, 9118, 40010, 18719, 59525, 34470, 10177, 65456,
-37338, 4668, 57690, 26401, 40919, 240, 32301, 62908, 13030, 38594, 21570,
-59092, 5404, 32249, 49248, 10625, 60327, 2489, 30489, 47496, 15734, 58211,
-29621, 1579, 62260, 38121, 16733, 60041, 8271, 29833, 52117, 14355, 27772,
-58503, 7934, 35699, 61796, 417, 43809, 18476, 64610, 29846, 11813, 57855,
-34010, 21372, 63265, 4407, 31813, 46720, 18269, 65310, 2562, 35215, 50647,
- 6628, 44818, 26165, 57082, 15836, 40044, 25008, 44588, 8466, 60291, 24820,
-46939, 2075, 31768, 43908, 16263, 57434, 30654, 9054, 46711, 37164, 147,
-30116, 58723, 10985, 46164, 36738, 9913, 52232, 22062, 42947, 2655, 55264,
-21137, 47222, 6722, 41378, 18909, 49749, 25650, 39716, 6325, 62441, 18487,
-29035, 53272, 13501, 48941, 20524, 36111, 55320, 2418, 46631, 35517, 21659,
-60628, 11976, 38338, 48699, 15494, 27221, 63196, 1788, 43977, 22064, 61156,
- 5843, 55007, 15949, 39566, 26454, 64951, 7725, 36744, 50270, 18873, 31455,
-61107, 9367, 42411, 26372, 55015, 13623, 43444, 29536, 17902, 61754, 33928,
- 9037, 54839, 30140, 20316, 47145, 10412, 60972, 22355, 49038, 16259, 35515,
-64086, 9478, 43221, 20042, 30594, 53805, 8972, 42321, 25512, 46884, 6959,
-52639, 34760, 3032, 38093, 50995, 7743, 47459, 30458, 5020, 61061, 37234,
-17804, 52962, 8042, 31946, 56959, 15234, 33800, 48529, 8962, 65117, 23796,
-44854, 14026, 60548, 7870, 43557, 22722, 61633, 12131, 40029, 23468, 64092,
- 2353, 43248, 25609, 40749, 6779, 34419, 55647, 3587, 27978, 41458, 6135,
-63912, 21407, 40423, 3131, 62122, 25849, 49329, 9900, 38837, 21829, 52375,
-12334, 36832, 55858, 16347, 30988, 50669, 141, 64628, 13172, 43865, 21909,
-32289, 48408, 17239, 54574, 7202, 42250, 22787, 58357, 9369, 45090, 21446,
-60614, 11064, 31375, 48499, 15663, 43274, 22397, 58313, 4235, 35978, 62903,
- 7117, 43687, 30054, 17922, 65239, 11719, 48771, 25895, 39167, 111, 56039,
-28158, 14083, 53432, 37970, 4130, 30059, 54236, 8760, 41316, 23973, 56882,
-13345, 39086, 4651, 54120, 16596, 35099, 63854, 11023, 31923, 47488, 15157,
-53818, 37491, 154, 63237, 22068, 48153, 11169, 36877, 50960, 4007, 43415,
-23084, 64409, 1031, 31317, 58703, 18308, 28508, 44158, 9979, 59834, 37563,
- 5351, 55456, 14346, 62357, 28083, 46645, 1983, 58400, 26435, 38990, 5211,
-57529, 25841, 40776, 127, 52754, 20982, 28103, 60725, 4324, 55180, 27161,
-18997, 64356, 38032, 9815, 31213, 44704, 22391, 63760, 8462, 33790, 59174,
-10731, 45874, 27651, 15491, 49595, 29636, 18065, 45161, 2391, 55280, 29251,
-16557, 33590, 59580, 95, 53004, 24170, 43081, 5118, 54733, 25411, 46171,
- 1054, 30501, 53688, 17568, 27693, 50090, 14064, 44837, 21553, 54621, 10413,
-43692, 26664, 52030, 8980, 40058, 26120, 63563, 16776, 43538, 28741, 14716,
-57141, 36372, 6033, 43499, 22285, 51545, 9785, 28159, 48312, 20441, 33833,
-56907, 2049, 35920, 47132, 19611, 53376, 29201, 15030, 40738, 26466, 54095,
- 5960, 35644, 50099, 1733, 42851, 13996, 48208, 26229, 56402, 7395, 39641,
-26054, 52195, 11541, 30645, 61035, 19054, 39228, 4696, 48337, 11226, 59462,
-19535, 31438, 50217, 6412, 36575, 63716, 19779, 48620, 5699, 40643, 24146,
-54032, 12741, 65035, 23211, 48759, 15767, 33309, 62911, 20036, 44163, 5735,
-61622, 25109, 39133, 14709, 59611, 34161, 12381, 63116, 29671, 4220, 58669,
-32787, 11502, 44683, 26191, 57985, 3408, 33561, 42221, 5875, 51330, 17488,
-30799, 62962, 8580, 42511, 18597, 50849, 28590, 5397, 58037, 37231, 17217,
-51721, 33315, 12216, 38272, 47300, 18888, 30680, 57193, 3378, 44826, 17857,
-30467, 57604, 2241, 43910, 22082, 53788, 15857, 38972, 1186, 50233, 21876,
-58000, 5720, 41321, 23223, 48674, 15687, 59548, 36367, 3271, 53900, 37960,
- 7341, 29198, 55912, 626, 40677, 25749, 59742, 3712, 48914, 17433, 35807,
-61997, 1757, 32361, 57592, 16279, 27297, 64204, 18075, 28671, 59680, 13634,
-27067, 44864, 19942, 50391, 2656, 28701, 49107, 21090, 43262, 867, 61926,
-26469, 38934, 15925, 56003, 4643, 41283, 33451, 18038, 51615, 37006, 6215,
-56362, 26039, 45257, 14441, 34044, 53332, 10015, 62710, 22818, 46059, 13254,
-32602, 57112, 15861, 44491, 25842, 53861, 11016, 35438, 46589, 7037, 30668,
-60265, 18960, 44583, 6405, 63466, 26109, 41416, 4873, 59288, 17840, 39155,
-26792, 53711, 6740, 36061, 61798, 3198, 45682, 19471, 33462, 65392, 889,
-39252, 26381, 51941, 5780, 38806, 25811, 56846, 1444, 34948, 64696, 8604,
-41240, 25081, 50030, 16428, 32064, 57284, 9497, 41602, 24214, 53701, 5974,
-32818, 60738, 19381, 41384, 6429, 49120, 34865, 20713, 62514, 15953, 46640,
-21786, 60731, 2417, 34990, 51014, 17957, 45225, 25689, 57437, 1630, 49451,
-24371, 40514, 4144, 60390, 27471, 17718, 51133, 32695, 6316, 41528, 26504,
-62487, 14770, 29690, 56574, 9066, 40450, 26295, 51593, 11607, 47602, 36627,
- 3165, 56278, 27465, 17279, 50516, 23000, 41604, 8364, 35470, 61624, 22470,
-41909, 13526, 56036, 21189, 45085, 9425, 34128, 65070, 18680, 43293, 7116,
-37688, 47314, 10537, 33809, 53245, 1095, 41570, 25172, 56892, 5428, 51086,
-19071, 29347, 41836, 3254, 55620, 18617, 37353, 59797, 4718, 34007, 62339,
-10571, 48283, 20347, 36239, 63088, 9310, 45710, 22388, 39619, 14220, 60799,
-26889, 38559, 11320, 57273, 21566, 48299, 8597, 36602, 59172, 2455, 32907,
-63436, 6326, 39396, 24243, 60830, 2947, 33274, 57182, 18104, 45768, 953,
-35188, 55154, 8020, 41508, 23382, 50891, 12261, 62808, 31888, 14477, 54624,
-37090, 4480, 64030, 12933, 45065, 26142, 40228, 11880, 57477, 4326, 34420,
-49658, 10148, 59887, 21088, 44901, 13274, 55769, 28509, 17868, 60630, 35304,
- 9758, 45139, 24024, 62139, 13745, 43056, 21565, 56268, 1616, 41648, 25098,
-64014, 17884, 35901, 52042, 428, 43039, 22922, 58467, 10750, 29137, 52340,
-13775, 32786, 61842, 17793, 45512, 4495, 31833, 42789, 7989, 56840, 27178,
- 1981, 50596, 38171, 16856, 29733, 56116, 9087, 45062, 28579, 607, 51520,
-20211, 37908, 45756, 14737, 48872, 22494, 54218, 8308, 30312, 50051, 15810,
-65143, 21958, 28751, 58448, 11284, 39839, 25673, 57269, 3492, 36100, 64475,
-20990, 40809, 10169, 54028, 29065, 4134, 59546, 27515, 9246, 63381, 35255,
-12865, 48973, 25862, 60262, 9039, 39178, 26593, 62992, 7276, 32225, 48633,
-19863, 64635, 12595, 35034, 47188, 10941, 31702, 64032, 356, 43661, 13013,
-28340, 50677, 17850, 32750, 63392, 15022, 42196, 23713, 53271, 8125, 38665,
-26919, 56183, 10861, 44571, 20576, 27916, 51804, 8546, 38362, 49117, 11081,
-36514, 45924, 1298, 53721, 36233, 9707, 62835, 32886, 15740, 58116, 35910,
-10238, 54889, 23759, 41713, 6878, 53384, 20925, 28843, 50882, 13287, 58851,
-27401, 1549, 64723, 31798, 19591, 49558, 3319, 60230, 28026, 17509, 48230,
-37673, 16, 58238, 25198, 49066, 9439, 35842, 59402, 1820, 39638, 23373,
-63229, 15700, 54893, 22322, 41427, 1007, 51110, 23974, 39727, 13636, 53021,
-20560, 33892, 46665, 7753, 60399, 23794, 40616, 14161, 49986, 21160, 29175,
-55786, 11277, 43042, 23744, 57396, 8537, 33001, 63514, 20155, 43934, 13933,
-50330, 27770, 17387, 54571, 33440, 12613, 60233, 938, 45387, 20371, 33748,
-55298, 3000, 39964, 26785, 51929, 11285, 45281, 25055, 64303, 9763, 28935,
-51933, 1182, 43476, 11723, 39214, 26601, 53348, 10480, 28902, 63541, 6505,
-41929, 21025, 38572, 11763, 62194, 19115, 46121, 34839, 8754, 55586, 37931,
-12711, 59484, 20888, 46679, 1863, 53223, 34509, 17166, 48420, 21563, 61242,
- 4524, 39286, 19231, 63140, 30559, 10869, 52937, 37949, 1249, 64936, 24649,
-43524, 15408, 4635, 31095, 52907, 7777, 35120, 48754, 16479, 59562, 28399,
- 3411, 49240, 25011, 58230, 16933, 28785, 63044, 13971, 43484, 21952, 59586,
-15053, 32790, 46613, 10174, 37851, 62098, 15996, 44239, 24512, 52418, 9488,
-41441, 25542, 51142, 14683, 40108, 25226, 56303, 3959, 41311, 24688, 53695,
- 7291, 35283, 51027, 2990, 42443, 20470, 63920, 6153, 40613, 24633, 55013,
-14692, 43662, 22747, 50930, 11767, 31355, 55385, 15458, 41366, 22508, 49514,
- 7629, 30242, 62047, 22393, 48625, 12860, 31887, 64192, 3930, 44424, 25789,
-39668, 112, 59471, 23305, 47122, 16381, 39699, 24356, 50959, 7513, 62632,
-22906, 43926, 16203, 61415, 24111, 42979, 2622, 38900, 25164, 64117, 7097,
-33022, 48732, 3907, 40390, 21888, 58803, 37, 34594, 53151, 5951, 37510,
-48514, 16583, 31853, 54606, 9136, 46082, 28518, 15074, 62320, 33101, 13273,
-37431, 54061, 3727, 41747, 22712, 56477, 1294, 35704, 50346, 21633, 55777,
-14144, 35954, 45447, 17954, 60810, 31891, 9668, 54072, 35198, 3968, 49923,
-19614, 65280, 36573, 13552, 57484, 27143, 8007, 64134, 33634, 1760, 37681,
-61732, 20027, 45706, 10241, 37958, 54556, 987, 32855, 44890, 6109, 53866,
-19619, 45680, 14680, 29363, 47318, 42, 56610, 18566, 35677, 46472, 14954,
-52472, 37296, 1452, 53873, 22885, 40272, 6117, 43430, 21272, 55744, 13148,
-46760, 23589, 41320, 4816, 56349, 26587, 39865, 3618, 55814, 25166, 39135,
-15075, 52696, 21165, 37092, 62332, 8294, 46404, 27071, 2405, 34563, 57697,
-11993, 47664, 20819, 65169, 13735, 32674, 47381, 5643, 59512, 35107, 14494,
-62999, 29012, 4670, 56652, 31735, 12673, 58791, 20890, 29603, 51715, 3920,
-46875, 22443, 39936, 5653, 64278, 18328, 47292, 33405, 12136, 37281, 61226,
- 2960, 46256, 30954, 10212, 48127, 38168, 21385, 53770, 9259, 35575, 42344,
-13033, 52173, 32516, 7919, 54727, 29953, 19969, 43116, 4859, 64965, 29646,
-20389, 52389, 11770, 45667, 29204, 4443, 48180, 34349, 14505, 61743, 31836,
-10995, 57244, 36273, 2351, 64154, 29313, 14939, 52063, 22569, 44340, 1404,
-57637, 34317, 10349, 63142, 4299, 36915, 52384, 13277, 29802, 50584, 16741,
-40813, 3880, 55963, 30910, 7647, 61502, 37345, 3153, 48250, 30443, 19174,
-51944, 29115, 8334, 62097, 22662, 46281, 13647, 63212, 20817, 38850, 2168,
-54799, 17767, 38197, 57191, 13029, 34009, 60056, 22681, 49543, 5358, 35726,
-55995, 15783, 33483, 48561, 12900, 58948, 26572, 44140, 7288, 52188, 29124,
-13867, 65088, 30437, 3024, 49646, 24049, 43828, 10688, 39162, 19954, 59979,
- 5874, 45024, 31774, 13520, 52571, 24370, 43541, 6694, 55223, 22458, 45896,
-13048, 29837, 47878, 7379, 53679, 37597, 60357, 16101, 42861, 24722, 63954,
- 2486, 32031, 42271, 14272, 55033, 36776, 12176, 32903, 51921, 1784, 46614,
-30830, 7962, 50378, 35793, 4042, 65181, 19750, 52544, 27639, 251, 32887,
-57544, 6284, 39137, 21895, 64646, 1554, 32846, 58402, 6713, 45747, 18772,
-35280, 57535, 12303, 32476, 64738, 17322, 29810, 56020, 13142, 47567, 35766,
-16626, 52511, 31282, 3533, 62838, 37692, 8017, 29246, 60112, 19283, 47564,
- 4559, 34894, 64477, 11515, 53624, 20246, 40891, 6414, 37262, 58811, 17493,
-28090, 47955, 10077, 57682, 18379, 33636, 45694, 8706, 30193, 55220, 3117,
-60368, 19291, 41691, 31001, 934, 55807, 37845, 8979, 32642, 52585, 18736,
-58041, 10757, 40455, 26708, 51950, 14633, 62608, 27004, 43917, 10946, 50108,
-18651, 30104, 57836, 14611, 27460, 63076, 6815, 42376, 24270, 59901, 4149,
-37473, 50899, 7635, 27489, 46592, 18717, 65493, 11426, 30128, 44600, 16526,
-60355, 28238, 7260, 38369, 63209, 3184, 27638, 52596, 6845, 41838, 24431,
-59366, 13889, 48080, 26255, 41542, 10440, 54617, 30096, 2984, 38341, 52387,
-18288, 28856, 56267, 12515, 42873, 27430, 4588, 59584, 35088, 15176, 48304,
-22720, 63455, 13344, 38644, 26774, 59404, 6620, 33596, 61675, 12402, 42577,
-22649, 65452, 8441, 31115, 43325, 18544, 62020, 11211, 33734, 49404, 15813,
-64133, 31087, 519, 51935, 35619, 11055, 62168, 34168, 18644, 45012, 14128,
-61256, 22248, 42420, 7115, 58857, 26092, 44408, 4168, 29547, 55601, 11376,
-38140, 60608, 19214, 45268, 5124, 39664, 24946, 43906, 2672, 58085, 23936,
-40848, 16872, 50202, 195, 46094, 22717, 42298, 15327, 50663, 23875, 40422,
- 6609, 64969, 18345, 38868, 26180, 59486, 12474, 44178, 24605, 52641, 2020,
-28034, 59120, 16439, 44117, 27109, 8840, 63113, 34999, 17084, 57795, 6768,
-30814, 62127, 15986, 47719, 27349, 5484, 64397, 36861, 16775, 58976, 10410,
-36772, 50616, 17610, 46818, 7483, 33524, 60920, 16525, 36652, 51396, 9604,
-58392, 25018, 40252, 7354, 53835, 18546, 47031, 27670, 10223, 49770, 37588,
- 5732, 62433, 18375, 31917, 48998, 14938, 41949, 24543, 47626, 15933, 32114,
-61145, 2250, 45476, 19549, 59755, 34409, 13239, 45967, 24977, 52557, 10587,
-42724, 21484, 63631, 6097, 37317, 58140, 16721, 34569, 50613, 4418, 30554,
-43954, 7836, 58056, 22010, 35735, 48205, 5004, 27466, 50224, 18994, 45954,
- 7920, 31345, 65404, 18711, 44130, 393, 61482, 24335, 39218, 3655, 54409,
-16991, 36317, 60097, 1232, 41680, 24300, 47045, 15802, 58141, 33074, 6770,
-63972, 25619, 51628, 15147, 40845, 22294, 65201, 432, 34154, 58195, 15248,
-41287, 32688, 2603, 59186, 38428, 16766, 33667, 57356, 11881, 27621, 560,
-33328, 55763, 12936, 39763, 23283, 53238, 8847, 46479, 21715, 63365, 6243,
-41883, 24007, 61591, 15618, 40297, 25521, 57776, 13105, 39878, 26476, 48379,
-11563, 35774, 60419, 14265, 46881, 26346, 50464, 11062, 36756, 54099, 16884,
-28644, 49109, 10129, 63481, 28156, 860, 50263, 21932, 45185, 5524, 40614,
-23303, 62025, 1362, 28256, 58296, 8838, 41733, 21965, 48013, 15739, 55961,
-35543, 608, 42503, 26518, 57012, 14310, 44967, 30908, 1769, 47627, 24661,
-55444, 16016, 51497, 2177, 35533, 61201, 21617, 42031, 5233, 53617, 20319,
-64858, 36719, 12389, 47973, 28692, 7036, 53970, 36481, 18286, 48678, 13662,
-65187, 27518, 3523, 46653, 35441, 20609, 54813, 1103, 46149, 23347, 38640,
- 6267, 57220, 19936, 37610, 65056, 8316, 33718, 45358, 3071, 52784, 32928,
-20692, 49016, 13615, 30370, 55186, 16409, 38420, 57258, 1749, 32072, 49112,
-20333, 54989, 5011, 34849, 47287, 10503, 57671, 20405, 32449, 48939, 11929,
-30320, 64716, 19088, 45965, 1012, 39529, 20955, 61470, 5007, 34750, 46407,
-15980, 62594, 23656, 41619, 6493, 50344, 16500, 35943, 60814, 9576, 49531,
-30927, 20774, 57042, 7093, 40110, 26049, 53365, 2015, 46400, 22026, 51321,
-15825, 41577, 25553, 55158, 5647, 39689, 25020, 58380, 3240, 50349, 21378,
-29899, 55489, 4945, 41059, 23691, 45739, 14145, 59906, 20833, 49814, 2676,
-29438, 47981, 8464, 51393, 28968, 1375, 54551, 34565, 19169, 48457, 12242,
-60109, 34057, 16125, 47924, 27791, 6533, 52351, 21774, 31966, 62579, 12585,
-50567, 31671, 19308, 54685, 6417, 30213, 64535, 19013, 37340, 58263, 9912,
-33712, 61680, 2399, 47697, 25587, 43012, 13982, 54636, 587, 48204, 33832,
- 8696, 62440, 38232, 19346, 32503, 47831, 6529, 56793, 32082, 19420, 50369,
-37835, 3812, 28717, 52651, 19111, 44767, 1047, 37397, 55151, 18011, 29057,
-49959, 2096, 46279, 20711, 32379, 62485, 2962, 28871, 56387, 21201, 41357,
- 667, 55519, 20062, 28315, 43304, 3313, 65074, 22535, 45228, 30317, 4644,
-61270, 35314, 20839, 58133, 12608, 42730, 24772, 52977, 3504, 29965, 59665,
- 7988, 54039, 23322, 40567, 10066, 54952, 26598, 38727, 6089, 49891, 22587,
-64396, 209, 39521, 19858, 59062, 34529, 11599, 49247, 24212, 42423, 1621,
-53887, 19806, 37170, 60944, 14632, 47653, 25977, 40922, 8763, 58916, 16876,
-33171, 62030, 3077, 39987, 25103, 52625, 11052, 39896, 21293, 30856, 47071,
- 9651, 56380, 19870, 32180, 49808, 8150, 28125, 48203, 19431, 61851, 5678,
-39857, 22339, 55003, 13323, 37519, 47271, 3395, 32422, 56929, 7770, 43052,
-26420, 49824, 9716, 29322, 62157, 18926, 48692, 8896, 27613, 63599, 3893,
-43843, 21859, 51102, 11223, 28582, 46615, 6751, 62259, 30407, 16890, 57430,
-38016, 977, 29618, 48211, 20340, 55843, 10017, 34807, 59779, 5214, 44613,
-22537, 54557, 2608, 30231, 56449, 6934, 45075, 23108, 40473, 3632, 62638,
-20693, 29658, 44785, 2844, 61159, 20040, 36531, 43203, 13967, 54811, 37512,
- 8486, 60991, 26608, 49661, 10822, 33066, 53205, 17595, 34748, 45250, 12751,
-60378, 28634, 6976, 45714, 23900, 64999, 17146, 51395, 8694, 39534, 23487,
-58411, 12336, 32924, 61697, 5636, 42246, 30808, 19810, 46222, 11769, 55821,
-31565, 15912, 38017, 49129, 1645, 27413, 44180, 16551, 57584, 33978, 11208,
-63189, 26339, 43360, 5708, 36121, 51351, 16981, 59198, 30297, 6659, 63617,
-37062, 18163, 53246, 12643, 42300, 24403, 53799, 2126, 27760, 47828, 16085,
-60910, 23069, 40463, 12071, 58781, 1034, 35415, 64513, 8926, 45437, 27065,
-17775, 62887, 37050, 9476, 42816, 26073, 61054, 14586, 40427, 25273, 51018,
- 543, 42579, 17048, 54942, 36580, 5354, 50095, 25887, 58095, 13077, 32448,
-44794, 22714, 56880, 8649, 31497, 48492, 10936, 60002, 21649, 32264, 55080,
- 401, 28213, 44066, 17892, 64673, 2714, 36663, 47330, 18838, 61935, 12421,
-41841, 31680, 8113, 60549, 34478, 2902, 49063, 19495, 33543, 56986, 13102,
-45533, 23775, 40718, 7869, 61347, 16861, 32205, 51576, 10012, 57857, 26571,
-38623, 7520, 44077, 25778, 59067, 17062, 36685, 63262, 11771, 32226, 46702,
-16210, 65003, 5496, 40826, 23026, 54171, 1695, 38388, 63737, 14409, 35110,
-56833, 851, 46182, 27575, 9127, 61163, 38182, 14763, 34523, 43591, 10717,
-51559, 27272, 4966, 53450, 29786, 16396, 37730, 56941, 10844, 33972, 61212,
-19610, 42205, 27389, 13260, 52087, 30571, 4453, 45332, 14557, 65299, 22660,
-40487, 273, 54250, 13811, 41323, 22072, 63593, 8072, 33189, 50340, 22842,
-59704, 9814, 34037, 61448, 13664, 42130, 25495, 56870, 9045, 41613, 24125,
-52708, 10667, 35186, 63769, 17552, 47709, 32019, 6737, 57423, 35902, 17910,
-51742, 12416, 37883, 55406, 17511, 48751, 414, 40344, 26638, 56099, 7068,
-36085, 63720, 13591, 42590, 25413, 38899, 638, 64956, 21939, 43419, 12716,
-62064, 25260, 41598, 9076, 32216, 53667, 15833, 46806, 28119, 3678, 38119,
-55776, 15223, 28564, 64571, 13200, 45977, 27506, 6640, 55497, 35032, 490,
-64789, 19745, 31558, 51534, 10324, 41471, 22463, 54645, 14294, 30077, 61004,
- 4432, 45145, 14994, 59788, 25726, 40235, 6372, 64626, 22090, 35552, 56995,
-10271, 31931, 44949, 17629, 53259, 34191, 742, 50499, 18952, 28992, 59105,
-11358, 39361, 24085, 53859, 12775, 35998, 55580, 4986, 44930, 22828, 35806,
-53317, 14456, 46324, 31264, 19175, 61205, 37108, 22836, 59086, 17932, 33976,
-50506, 4082, 45423, 27790, 11370, 60457, 35268, 16698, 51239, 3576, 43965,
-28039, 17943, 53031, 32304, 10981, 36438, 60946, 15519, 42869, 25132, 64260,
-13090, 34855, 54710, 18602, 47275, 7239, 35052, 56951, 13335, 47074, 29197,
- 4823, 59229, 21219, 31407, 48531, 15062, 41763, 3301, 59985, 22557, 39875,
- 5947, 64275, 24058, 50591, 2219, 33019, 54531, 18663, 40338, 5025, 48607,
-33430, 21175, 62373, 3235, 46928, 26575, 39498, 14972, 49955, 22804, 65374,
- 9140, 36969, 50702, 3419, 28307, 63063, 11075, 53017, 21359, 35680, 61847,
- 5413, 50176, 23049, 39233, 2285, 47335, 21068, 60856, 14789, 28445, 41998,
- 9293, 50208, 23960, 44288, 10512, 29176, 58489, 4780, 34483, 62035, 14089,
-49374, 32156, 9585, 37196, 51293, 4294, 29499, 54957, 20106, 43691, 15763,
-50150, 29123, 3856, 53638, 34462, 6517, 47402, 22112, 58920, 2664, 32039,
-49655, 7771, 64336, 21118, 34313, 58599, 9303, 28111, 61977, 20058, 41404,
- 8417, 34109, 51683, 3382, 63249, 17962, 29128, 52678, 1535, 42949, 25408,
-39402, 5281, 57694, 19246, 47179, 36556, 11608, 53683, 25943, 46070, 14142,
-32261, 52509, 4915, 28680, 48489, 20049, 56391, 11440, 39330, 23066, 63685,
- 8871, 49942, 28215, 939, 59237, 35656, 15166, 48220, 25314, 54573, 1893,
-39801, 23241, 43079, 4059, 65202, 21766, 52749, 12503, 32012, 55287, 6001,
-41122, 23346, 56827, 3915, 39759, 19846, 30935, 57698, 8955, 35631, 49212,
-16529, 27362, 51484, 7701, 43120, 30589, 17822, 58419, 35798, 4185, 53999,
-25892, 47660, 1905, 59869, 18184, 35647, 44709, 9158, 63456, 21708, 46283,
- 7334, 29088, 53127, 4113, 31636, 49872, 8148, 60680, 36377, 16967, 58461,
-23497, 49288, 10785, 35368, 56146, 17591, 30039, 60625, 10403, 42759, 24818,
-55538, 15213, 40152, 5088, 43605, 24867, 53325, 3516, 39761, 21927, 54353,
- 6387, 35686, 60571, 14698, 31250, 49493, 5489, 43618, 27168, 13185, 59980,
-38456, 10232, 29072, 47591, 1570, 62848, 27376, 7975, 32982, 44889, 22426,
-64443, 10839, 32240, 50194, 17420, 28363, 48281, 5399, 58787, 17035, 50844,
-33413, 7376, 53212, 35327, 2692, 56098, 15152, 45152, 26041, 57636, 7916,
-33544, 51083, 18902, 61215, 8917, 44235, 32583, 4828, 37822, 57523, 10802,
-42368, 23649, 49556, 15817, 29776, 54012, 5898, 43622, 25906, 63475, 1459,
-33785, 57608, 7381, 47463, 32850, 20033, 53485, 2651, 31533, 50299, 17817,
-42874, 1723, 51452, 15550, 37335, 63675, 3835, 28614, 59824, 11740, 42795,
-23934, 63345, 5382, 34730, 48300, 20378, 61567, 2229, 46042, 28168, 17950,
-64306, 31840, 12079, 59621, 1397, 28496, 56656, 10155, 41217, 5615, 49803,
-45487, 1885, 53822, 12161, 40805, 24294, 64745, 15849, 32374, 53692, 8471,
-40147, 26317, 64070, 11904, 35657, 48924, 623, 63198, 24631, 40901, 5817,
-51234, 20141, 38925, 1333, 53458, 28344, 9737, 32816, 59885, 15044, 41657,
-22991, 51779, 8983, 33873, 53897, 18191, 43868, 2033, 65131, 28740, 17991,
-51800, 34799, 11643, 55555, 26609, 47038, 14867, 39068, 20811, 61857, 10850,
-35006, 58042, 15097, 28706, 53144, 11122, 43685, 35694, 17704, 60364, 6660,
-52549, 36417, 464, 29239, 47015, 17017, 60013, 22201, 39892, 6652, 46199,
-34084, 17281, 56301, 9777, 31901, 42777, 14306, 59347, 25188, 51968, 7997,
-33353, 46341, 296, 56234, 31729, 19065, 61627, 3082, 36375, 51052, 16441,
-47531, 30049, 20243, 44961, 5746, 59683, 21098, 43394, 15135, 63847, 35832,
- 7070, 41504, 24050, 61484, 10290, 37818, 57930, 12654, 43320, 23816, 56275,
-11889, 30093, 51744, 16137, 44332, 24004, 39614, 4403, 46596, 15747, 53936,
-37411, 2101, 44690, 24293, 60017, 14910, 43645, 28183, 10119, 49468, 35313,
-14377, 64843, 19814, 54122, 13168, 45787, 31052, 9071, 63559, 24527, 40381,
- 6235, 61202, 21855, 41284, 9326, 59031, 17456, 35033, 64105, 625, 43002,
-26325, 52851, 14327, 29921, 44832, 17626, 37898, 52725, 10780, 29533, 64777,
- 4598, 44750, 18896, 33593, 62473, 10867, 53612, 29742, 15272, 48646, 37899,
- 1032, 27797, 46416, 15843, 60761, 34060, 10275, 49102, 25562, 61438, 12520,
-45743, 21128, 53518, 29026, 3223, 59083, 37302, 20296, 65342, 10592, 50900,
-15856, 44861, 22963, 39951, 11410, 63828, 20574, 32696, 55905, 12603, 49662,
-23863, 40077, 1057, 59248, 23369, 48367, 17013, 35856, 63667, 14267, 45459,
-28188, 1422, 55036, 38339, 7575, 31165, 62063, 2705, 43425, 24745, 49653,
- 6011, 33307, 58153, 1789, 46500, 30992, 20665, 64877, 14119, 47259, 33003,
-19254, 62757, 11480, 30038, 51002, 18649, 40467, 1282, 57657, 27766, 16219,
-61828, 34491, 2445, 50831, 20895, 33397, 56243, 13575, 44079, 20889, 35614,
-58505, 15865, 53565, 5132, 39332, 26007, 54898, 2157, 34945, 56544, 9609,
-45625, 32459, 21288, 43947, 11466, 59500, 28635, 16996, 49012, 37137, 20150,
-60407, 4983, 39779, 22054, 62846, 1862, 40597, 23954, 47494, 13985, 59732,
-23035, 49004, 17441, 29668, 62929, 3314, 33527, 60369, 9223, 41987, 23869,
-58623, 11942, 38615, 20361, 50423, 15386, 40550, 25800, 64061, 10710, 42896,
-23172, 62564, 8836, 34514, 59377, 20482, 30024, 55842, 7001, 42424, 24800,
-49529, 16187, 30218, 55245, 8425, 41829, 25339, 56256, 15310, 41735, 8776,
-30837, 57927, 15896, 42702, 4146, 51184, 21561, 37310, 49366, 15679, 43102,
-24093, 65356, 17016, 31963, 25580, 61960, 18766, 34967, 56836, 6975, 37325,
-52016, 2715, 43532, 23654, 57640, 4923, 45703, 21452, 59104, 14136, 29762,
-46393, 9203, 57285, 18731, 32020, 61983, 12122, 49239, 20983, 36219, 55529,
- 4628, 43100, 24965, 64511, 477, 38979, 26628, 61846, 6092, 38828, 25731,
-52869, 9292, 36024, 45847, 5032, 58381, 21469, 41386, 320, 32562, 56834,
- 7366, 44383, 26006, 49904, 4077, 39464, 25577, 63625, 1110, 31981, 56686,
- 8318, 45534, 21810, 29869, 57723, 12128, 43269, 23829, 56113, 8263, 34603,
-44789, 13719, 58444, 22942, 51375, 703, 29792, 48484, 20055, 64354, 3853,
-35928, 44167, 12140, 58285, 27381, 16648, 64580, 37459, 8627, 49231, 25620,
-42345, 14437, 59454, 27545, 1497, 64773, 36630, 11157, 55305, 26108, 39442,
- 582, 54383, 25182, 48397, 13110, 32075, 55930, 2421, 47670, 27439, 17091,
-35740, 59964, 264, 40114, 25426, 62568, 5425, 33401, 55493, 9904, 61263,
-32685, 19654, 51618, 11231, 31688, 64028, 17701, 47372, 5847, 31198, 53755,
-18703, 37833, 60578, 6146, 42069, 24780, 47536, 2847, 34506, 58567, 20509,
-43648, 3682, 52993, 17211, 48541, 29740, 1429, 54987, 33817, 23249, 49926,
- 8520, 40106, 24932, 54871, 7370, 33251, 62409, 3832, 47848, 31918, 6518,
-61015, 21857, 43041, 14022, 37801, 56466, 8573, 28235, 47832, 19977, 40975,
- 5544, 58417, 36002, 12028, 63596, 20216, 38302, 53274, 3055, 27104, 44548,
-18083, 52086, 110, 41332, 33585, 6904, 63128, 17894, 42675, 30743, 6070,
-48878, 25126, 41887, 2900, 29576, 61764, 8399, 54897, 25135, 46548, 7372,
-28954, 41672, 3475, 62401, 31979, 16057, 54285, 36869, 11558, 27869, 56353,
- 2555, 41616, 22616, 57847, 10051, 32999, 43698, 18752, 53535, 27694, 11856,
-48366, 37536, 14163, 64158, 23429, 39799, 17226, 52825, 11665, 37653, 56172,
- 8764, 28878, 59149, 482, 42312, 24074, 48917, 4693, 34753, 65446, 12851,
-46652, 19925, 37149, 53424, 9406, 46203, 19438, 37546, 64297, 5737, 40144,
-25516, 59790, 3783, 51149, 11619, 31271, 42944, 19421, 60313, 8674, 41620,
-24067, 62317, 15191, 39797, 20166, 61374, 1715, 49951, 24211, 41475, 4410,
-63230, 32526, 9469, 52767, 26828, 42889, 11843, 50258, 30293, 14615, 53486,
-34952, 6886, 54497, 30082, 759, 36226, 56311, 7720, 45545, 25045, 52084,
-16684, 39460, 20984, 50854, 3733, 45617, 26904, 56647, 5523, 44023, 21850,
-51198, 820, 34368, 57325, 14524, 39881, 25071, 53865, 5037, 45393, 12980,
-40213, 22493, 58628, 9531, 33763, 62843, 2881, 46330, 35365, 18407, 51087,
- 1477, 33953, 64856, 22020, 49969, 10549, 35535, 54419, 19817, 33023, 62423,
- 6919, 30394, 58597, 3100, 35343, 50487, 8159, 39917, 44456, 4596, 51624,
-28944, 14776, 48147, 20004, 28140, 62492, 9793, 41849, 17451, 38633, 26804,
-51725, 6960, 37760, 55228, 15920, 43131, 23357, 54034, 2233, 39410, 24080,
-45989, 8923, 59000, 17796, 31761, 52443, 12222, 40405, 21638, 56552, 14374,
-32780, 47748, 11509, 59634, 22589, 40870, 15887, 62742, 30555, 13918, 47785,
-25703, 63321, 9955, 42749, 23688, 59669, 12269, 31112, 54230, 9230, 44784,
-20772, 50474, 15528, 40743, 26243, 63176, 2567, 48508, 18612, 37625, 62010,
- 4738, 31601, 48621, 19987, 63845, 2772, 31177, 43158, 15170, 61454, 24219,
-39550, 8989, 53705, 28659, 17297, 56733, 31026, 5911, 50883, 35930, 13136,
-45386, 22554, 53879, 4502, 33445, 55515, 7929, 38021, 46737, 15279, 52412,
-22327, 41712, 7511, 62926, 33706, 17446, 44680, 5195, 61890, 23282, 42234,
-16261, 37070, 64931, 6005, 50740, 21072, 30681, 54655, 10424, 41821, 22479,
-48826, 15282, 29351, 42193, 1383, 58177, 26271, 45557, 4029, 39299, 26081,
-56740, 12607, 35456, 58939, 73, 46913, 20342, 29945, 56366, 11934, 37894,
-61333, 9683, 28868, 51555, 14356, 38847, 23345, 59673, 11164, 35474, 63069,
-18987, 43286, 4395, 58374, 36167, 13158, 45630, 20410, 59818, 10800, 41875,
-24092, 57467, 15434, 41099, 25146, 50250, 2746, 58854, 30694, 16307, 52008,
-36848, 284, 60149, 25143, 46312, 16870, 32338, 54827, 8827, 49096, 28863,
-14830, 56147, 37209, 8123, 64465, 31280, 20355, 57011, 13648, 43970, 26790,
-49962, 9157, 54918, 34641, 19528, 60805, 12787, 51745, 36855, 17064, 32086,
-49252, 453, 37119, 59058, 16438, 51147, 25511, 43045, 7069, 48843, 30315,
- 4332, 65523, 38271, 15387, 31016, 53794, 6309, 35002, 48154, 15009, 64661,
-27086, 5163, 59805, 36327, 19848, 53308, 8394, 31251, 51069, 3459, 61043,
-29349, 22259, 45314, 4315, 49126, 34309, 18171, 52046, 10947, 32078, 56701,
-15187, 43870, 22647, 55350, 8228, 29319, 44391, 3999, 59472, 30928, 11319,
-49742, 28279, 18380, 53943, 8970, 46443, 19821, 38792, 26622, 65357, 1148,
-49368, 21910, 34299, 52674, 11139, 29397, 47593, 4850, 54600, 25265, 38811,
-14598, 57693, 31285, 13003, 48293, 22881, 45661, 1065, 64208, 17859, 34085,
-58705, 3937, 43660, 21539, 65472, 17053, 41470, 24843, 61873, 15502, 43332,
-22541, 39506, 11988, 57335, 1978, 36326, 65120, 14925, 33024, 59522, 9042,
-39181, 24875, 62326, 12973, 36115, 55092, 9319, 28956, 46263, 3566, 49545,
-35913, 15958, 61594, 26336, 51081, 231, 44040, 23705, 52936, 13923, 39273,
-21350, 57470, 10938, 28766, 59344, 19706, 45544, 5568, 39901, 25567, 61085,
- 62, 48234, 13429, 41719, 25148, 45902, 10948, 52655, 18425, 29056, 60234,
-13784, 54472, 32639, 10400, 64170, 36720, 295, 58136, 33238, 13435, 49076,
-24398, 61016, 1426, 44692, 20107, 65425, 32992, 3185, 28370, 62565, 7840,
-41827, 26532, 51961, 6704, 63930, 27007, 44411, 2542, 27874, 61433, 6467,
-42369, 23808, 50036, 4072, 63587, 16911, 30029, 44374, 1248, 55813, 28059,
- 7190, 50763, 37216, 3710, 53931, 17492, 38745, 20424, 52158, 1860, 36446,
-65309, 16883, 40916, 23450, 55623, 5472, 31178, 59048, 11605, 38750, 22634,
-54804, 8873, 32905, 47388, 16662, 27534, 56980, 7431, 41160, 24694, 54641,
- 8519, 32979, 47434, 4829, 57824, 18826, 34251, 49849, 1209, 41580, 15510,
-63287, 23556, 40636, 2523, 59736, 32436, 17952, 62315, 12738, 45149, 28413,
-17525, 57424, 31123, 3637, 35010, 60190, 18805, 49780, 27831, 9799, 53242,
-35423, 19199, 57350, 9112, 49700, 29459, 14007, 46420, 32792, 8507, 63046,
-18554, 37731, 52983, 2302, 34770, 65223, 8101, 54421, 24247, 40680, 12985,
-61701, 21739, 52680, 7859, 30291, 50257, 17051, 42760, 27625, 9194, 64375,
-33815, 4271, 49896, 27282, 17028, 48711, 36305, 787, 65393, 25882, 42168,
- 6742, 52162, 21266, 45226, 10031, 32186, 54422, 16680, 28952, 65089, 3060,
-48835, 26910, 38514, 17293, 51500, 1542, 36497, 64317, 10300, 34786, 47441,
-20234, 40586, 7047, 63863, 18356, 34300, 50039, 9765, 28939, 62735, 2369,
-44636, 23460, 40268, 4481, 61910, 34817, 13154, 46677, 22332, 50160, 5225,
-40026, 24342, 62446, 2310, 39032, 25327, 59846, 15202, 44934, 1216, 41100,
-26161, 57821, 5717, 43949, 21917, 64600, 14452, 30168, 55234, 9507, 38718,
-21036, 61040, 14149, 52736, 22837, 42717, 7818, 57171, 24721, 40825, 18482,
-61457, 27857, 3333, 38128, 51843, 16801, 30281, 47042, 764, 57711, 24329,
-44319, 16062, 34901, 47105, 10566, 58556, 19609, 36153, 62042, 12875, 43112,
-23567, 63985, 6214, 39038, 26724, 60993, 1874, 33192, 47679, 21677, 63421,
-15818, 40120, 23897, 57078, 239, 36248, 62203, 15294, 40979, 24713, 60796,
- 7216, 41815, 16697, 46130, 30154, 13618, 57035, 3099, 37524, 63405, 16426,
-31181, 45346, 10147, 65210, 29159, 5816, 51317, 35999, 18860, 56591, 10270,
-39247, 25931, 52039, 6216, 38783, 24522, 56262, 8227, 31837, 47047, 2885,
-52704, 10453, 33806, 50377, 4316, 63364, 26621, 46813, 18305, 29081, 43989,
- 6738, 54191, 23335, 42195, 17582, 53270, 2823, 46582, 28023, 16724, 58980,
-37383, 11501, 65313, 19001, 28745, 55349, 7227, 39493, 18213, 32000, 63824,
- 6264, 41449, 25594, 60237, 4442, 31193, 48095, 7363, 37150, 53093, 14638,
-32616, 57270, 8092, 44540, 29166, 16650, 55252, 36762, 5197, 63259, 21167,
-36366, 56883, 891, 39417, 20338, 6281, 47273, 24853, 42530, 15395, 50727,
-22224, 46004, 5966, 36623, 54362, 15212, 30153, 58604, 8309, 40829, 13319,
-53158, 37290, 16754, 31380, 59938, 12377, 46853, 21222, 38496, 14271, 57790,
-19883, 35234, 46291, 15820, 55877, 31196, 10830, 45289, 36263, 21039, 57895,
-10071, 33756, 46668, 19722, 61466, 32047, 12823, 57322, 26570, 42003, 6619,
-58988, 24909, 45175, 14335, 48899, 28556, 3355, 60907, 35839, 14184, 51533,
-25149, 46783, 6971, 43072, 25833, 64797, 14282, 51755, 1366, 36822, 46049,
-19273, 60825, 11876, 38614, 26641, 65082, 14542, 41199, 25323, 46006, 10231,
-62451, 21486, 33106, 52152, 6946, 29852, 55709, 19772, 47782, 9463, 39182,
-26757, 51564, 796, 34572, 63936, 9212, 44502, 24380, 56252, 12274, 45994,
- 2027, 32717, 59023, 21585, 48822, 3361, 39088, 25496, 55571, 1236, 35140,
-60699, 19835, 44390, 3657, 50225, 28739, 13387, 59263, 27607, 16402, 45141,
-21918, 50205, 6671, 31027, 48094, 10779, 41638, 23341, 63765, 2729, 36666,
-59776, 11693, 45054, 22091, 54788, 14845, 36640, 62874, 7244, 30678, 57440,
-18934, 44718, 12807, 55324, 27032, 38527, 2327, 56979, 25470, 47263, 7213,
-37433, 50736, 15083, 42603, 22065, 56570, 5602, 46038, 25558, 55664, 13318,
-29737, 53303, 4878, 27985, 59713, 12645, 43790, 24483, 54981, 5872, 41297,
-22119, 52897, 14011, 34682, 57006, 7702, 31495, 51304, 18447, 45300, 29812,
- 1576, 60150, 32470, 15979, 57845, 36354, 11327, 54403, 21439, 46703, 4947,
-32485, 53100, 20783, 63482, 9232, 39468, 24167, 52576, 12270, 35466, 48481,
- 4597, 43507, 24262, 57379, 1674, 46202, 26884, 39335, 11136, 60384, 34630,
-16703, 46464, 69, 50461, 36785, 13649, 58768, 21299, 44268, 7980, 62978,
-22377, 40960, 13513, 30044, 61904, 6210, 54912, 22844, 41732, 1226, 50554,
-27391, 7663, 32417, 54181, 2549, 41923, 24464, 58497, 11688, 49307, 20540,
-39954, 13936, 52080, 5236, 34260, 54744, 12730, 43275, 22512, 51177, 7780,
-32179, 48673, 2649, 55121, 34012, 22716, 50286, 4714, 58886, 36132, 20689,
-51783, 12388, 42951, 26505, 59387, 58, 34354, 52175, 12345, 42780, 25262,
-58509, 2400, 44574, 26913, 60882, 13535, 42329, 22867, 62040, 10728, 49415,
-26639, 39603, 12339, 57869, 21184, 30744, 60158, 13533, 38791, 20573, 54786,
- 8550, 34800, 61511, 13732, 49708, 28212, 5, 60589, 31747, 12434, 36879,
-64238, 20253, 42624, 4710, 49263, 21312, 31042, 52693, 1914, 41646, 25639,
-58363, 10593, 48257, 19718, 36600, 54693, 12314, 33119, 45716, 17076, 64220,
-23359, 41579, 2389, 61776, 27549, 17912, 48787, 35013, 9622, 63862, 32242,
-19099, 46758, 12715, 51759, 29643, 9739, 43777, 26149, 61750, 40229, 21820,
-59591, 3677, 37767, 55149, 10991, 30494, 63659, 18632, 43992, 4295, 33882,
-47490, 16784, 55653, 25402, 42481, 5322, 58150, 22432, 40627, 13, 56326,
-25792, 40625, 4470, 50922, 29950, 7981, 64860, 37782, 1017, 27658, 60297,
-19075, 52683, 3381, 39859, 24747, 54292, 14286, 41844, 2660, 50121, 24279,
-45586, 11190, 64561, 34708, 16603, 51405, 4457, 35747, 56620, 10607, 33028,
-47940, 19030, 42303, 56, 62704, 16945, 36158, 57557, 3760, 40505, 21420,
-34266, 59838, 10681, 30129, 52358, 4121, 43664, 20822, 56437, 1868, 48200,
-35100, 6581, 59444, 23720, 42334, 3652, 47473, 17735, 60099, 35134, 11018,
-44712, 25429, 58399, 5180, 41910, 23458, 54900, 14004, 41167, 25851, 52965,
- 4911, 39374, 20558, 30708, 65255, 14650, 43807, 7949, 40811, 26588, 63344,
-11613, 42832, 22326, 51806, 9741, 38799, 25818, 58508, 16552, 36918, 52359,
- 9059, 46399, 36141, 4574, 63423, 38070, 18538, 57891, 662, 36975, 54152,
-14115, 29465, 48897, 15780, 28074, 55845, 5557, 40221, 24659, 51556, 1850,
-41224, 25522, 53946, 10194, 39713, 22478, 60959, 5128, 41410, 23711, 63997,
-12414, 39904, 18285, 59207, 27840, 179, 60689, 35028, 9768, 30603, 63416,
-18847, 43261, 6842, 33786, 61291, 21185, 45217, 15872, 51180, 33252, 2122,
-60712, 37225, 15769, 30793, 46977, 3762, 59502, 22962, 41794, 16200, 65482,
-27813, 10422, 55407, 23946, 42972, 12085, 51265, 26274, 47374, 7434, 29269,
-43502, 14649, 64823, 23492, 39915, 12058, 47921, 29153, 16742, 55522, 33834,
- 2111, 59507, 28865, 19456, 62535, 10952, 33006, 41124, 18899, 64098, 8570,
-31881, 48276, 2954, 55091, 21455, 32159, 62770, 11698, 28443, 55492, 6649,
-40987, 25331, 51080, 10666, 35545, 55849, 3050, 45794, 20635, 37342, 49142,
- 9173, 31721, 63789, 13567, 37191, 57681, 16106, 43968, 22029, 55760, 8882,
-38543, 27024, 45701, 7438, 57818, 22944, 32027, 61948, 10761, 46859, 28542,
- 3096, 64787, 35336, 19600, 59265, 14459, 28859, 44543, 10955, 63829, 18377,
-28551, 43988, 8502, 61888, 25606, 39042, 6928, 48264, 22122, 54107, 15823,
-40827, 23368, 62560, 8243, 38717, 20929, 53661, 7421, 32730, 40406, 3220,
-54546, 19658, 33036, 44171, 333, 63818, 19380, 34921, 49995, 5555, 45945,
-25507, 41507, 1293, 48969, 24690, 56365, 4662, 42441, 20661, 33513, 52860,
-10840, 45829, 22705, 55838, 7909, 30051, 51812, 15748, 34141, 60287, 8388,
-43774, 23009, 62103, 13734, 31255, 51854, 2512, 45838, 28420, 7899, 61128,
-27269, 1077, 55773, 35145, 13053, 50566, 30685, 10229, 52236, 37131, 3827,
-58369, 24723, 50303, 1753, 40069, 26283, 60654, 4099, 34877, 57699, 14041,
-48844, 17630, 31225, 7674, 35062, 48591, 16450, 28734, 58934, 2416, 41985,
-23838, 56933, 12706, 50311, 22472, 38518, 2028, 61793, 20831, 48184, 11057,
-35319, 54500, 15605, 32755, 63255, 11401, 45399, 18718, 54423, 33650, 13801,
-47804, 21351, 50860, 6727, 34059, 47091, 15335, 65480, 29248, 5421, 58717,
-35974, 18788, 62553, 8003, 33225, 40999, 830, 49436, 19938, 30600, 61225,
-13109, 43368, 22077, 64022, 7305, 30174, 58493, 20621, 34284, 52813, 10279,
-29028, 48768, 19185, 55906, 6345, 41549, 23490, 48212, 15703, 63397, 25838,
-39860, 13283, 51510, 29242, 19748, 55146, 15690, 49457, 27030, 38739, 11913,
-54141, 23056, 42315, 1564, 65463, 16496, 33123, 50076, 11549, 62867, 20640,
-38579, 7671, 60971, 16678, 43170, 26818, 55085, 6501, 47446, 34434, 18277,
-60411, 22759, 50232, 4830, 34157, 57684, 15487, 31492, 64412, 5527, 43553,
-11489, 48006, 31370, 892, 60269, 27102, 17642, 54846, 29703, 12446, 51365,
-34777, 20395, 62520, 8862, 33486, 57486, 3833, 37566, 52273, 19253, 32597,
-62188, 9431, 42751, 21434, 60300, 15572, 32868, 49648, 2958, 46334, 35260,
-20051, 53354, 9490, 42877, 26746, 51892, 5876, 35385, 55159, 21655, 41548,
-14497, 52584, 37010, 2597, 47629, 24455, 58333, 14851, 42115, 716, 37490,
-57187, 7593, 28799, 46108, 19411, 51701, 11574, 64415, 20207, 36212, 49435,
-11110, 30549, 45858, 572, 52109, 37690, 5961, 60992, 21496, 39686, 3549,
-64065, 19026, 34584, 58642, 704, 49241, 30921, 8232, 56468, 35273, 3708,
-61285, 38090, 6896, 49417, 22826, 41655, 8800, 53520, 36608, 17408, 49938,
- 6397, 54679, 25940, 40133, 13606, 57933, 25356, 41645, 12765, 52318, 4654,
-38335, 48908, 17967, 35862, 64256, 1928, 32324, 59610, 19354, 48209, 15427,
-33202, 65220, 4925, 27617, 52235, 17047, 40620, 24872, 53083, 5150, 29404,
-63203, 12469, 40545, 23672, 52796, 3417, 64546, 19331, 29898, 50503, 909,
-42239, 27382, 18054, 58304, 38237, 9506, 30115, 46704, 4853, 53512, 35074,
-20458, 52066, 773, 37572, 55902, 15641, 34553, 50954, 2275, 45111, 18505,
-57318, 30626, 8959, 37038, 55909, 3594, 32724, 50068, 11372, 60208, 24539,
-43135, 15355, 64725, 24207, 45382, 8004, 59505, 15788, 47976, 25034, 41119,
- 9123, 61142, 29503, 18470, 51820, 9481, 64441, 31906, 12484, 37463, 47607,
-15870, 63758, 6086, 39944, 25979, 61429, 3445, 33927, 44435, 19248, 63060,
- 1149, 40483, 26226, 53972, 12556, 33847, 48860, 5805, 42853, 20834, 64909,
-34582, 14997, 52600, 37777, 16311, 49479, 21863, 43428, 6032, 59897, 23628,
-44903, 15530, 65496, 22574, 41525, 13666, 45230, 21653, 56289, 7903, 30410,
-49463, 16061, 44799, 28356, 2179, 65008, 12192, 44168, 23594, 62845, 9334,
-49710, 19705, 33592, 53156, 8006, 39457, 26145, 64408, 9611, 41601, 26959,
-51298, 13799, 30162, 64953, 3899, 42134, 24208, 50547, 5665, 39112, 22888,
-61602, 1915, 43566, 26447, 58733, 9952, 30043, 62917, 18442, 43519, 8751,
-32838, 51859, 17368, 44731, 9641, 53414, 30598, 20606, 56187, 13744, 44304,
-26311, 54564, 5795, 40065, 25295, 52760, 1551, 39246, 26744, 54714, 13665,
-49397, 5292, 41114, 23377, 60462, 2081, 32092, 43879, 14702, 62327, 30986,
- 588, 54241, 38049, 7960, 32365, 57446, 4523, 45542, 36216, 10007, 61566,
- 175, 41055, 20623, 63687, 6175, 36394, 50539, 18551, 29024, 54539, 7215,
-39663, 26023, 46601, 3120, 57666, 22961, 31413, 47541, 1666, 59323, 13759,
-40195, 24041, 57902, 125, 44937, 12033, 29052, 56285, 21136, 44221, 2097,
-39467, 23165, 53480, 17914, 29004, 62419, 15126, 38111, 49664, 11053, 44457,
-36971, 2888, 60895, 27996, 6220, 44840, 25322, 49511, 15020, 40888, 24040,
-65137, 12219, 43903, 1044, 50471, 28385, 13415, 53185, 34638, 6344, 56050,
-27631, 16875, 62476, 29079, 11450, 58850, 36399, 1299, 48770, 20596, 62830,
-29815, 12777, 47569, 4051, 62224, 27615, 16625, 38400, 54086, 8665, 35167,
-49548, 20039, 65290, 10680, 31498, 50574, 21584, 62961, 8790, 33929, 43288,
- 1275, 55560, 27414, 7168, 62200, 37869, 14968, 58202, 27162, 17405, 48528,
-34635, 13842, 53028, 25005, 41779, 6643, 54760, 22016, 40217, 10657, 61996,
-25804, 42803, 15606, 50857, 27611, 18082, 58151, 35981, 11661, 64941, 26224,
-44487, 3095, 60217, 22878, 30584, 42784, 828, 62053, 22318, 45403, 5828,
-31199, 65050, 20057, 45089, 27159, 8543, 54591, 29941, 13201, 52348, 22985,
-43441, 7504, 29300, 56514, 11338, 41491, 19292, 58749, 36697, 2060, 61310,
-10748, 46544, 19200, 33554, 49769, 151, 59355, 30196, 16366, 45032, 35796,
- 6819, 56553, 17443, 36539, 60396, 6051, 44247, 13679, 50054, 23482, 56152,
-12210, 41256, 24904, 63039, 10111, 42462, 24213, 60520, 6715, 47020, 29554,
-13906, 64870, 24231, 40604, 5619, 60981, 21029, 44566, 13846, 64136, 29413,
-16789, 35508, 46701, 834, 56921, 28946, 6826, 50578, 30542, 19073, 36656,
-52904, 4595, 31606, 56321, 17665, 44072, 2221, 58542, 35819, 16229, 42783,
-23675, 59947, 2741, 29861, 51399, 18066, 34475, 57194, 13966, 46938, 22030,
-54654, 7147, 28738, 46858, 13691, 58089, 20718, 38673, 4020, 56293, 28145,
-16889, 59250, 38377, 8996, 27482, 47281, 3890, 57017, 30742, 9675, 63446,
-38207, 18044, 32171, 53929, 658, 40274, 29819, 7652, 57024, 36636, 4820,
-53003, 27913, 17491, 62949, 36704, 9167, 58858, 21329, 35988, 54133, 29505,
-56318, 1174, 38875, 26861, 41588, 5252, 61458, 17218, 28335, 57865, 718,
-45687, 18219, 31776, 60507, 7522, 44522, 20095, 33949, 48701, 9849, 60255,
-19368, 31372, 56043, 13383, 41006, 23824, 52217, 5980, 39573, 22130, 55124,
- 2884, 35672, 48930, 21660, 61048, 202, 41158, 23028, 34448, 47960, 2319,
-60222, 25039, 39007, 9102, 63683, 18755, 33908, 57844, 11520, 42317, 23388,
-59907, 9169, 33408, 46499, 18169, 30794, 64426, 12626, 35277, 46948, 17510,
-58183, 28177, 7572, 51119, 37103, 17183, 28345, 60293, 11652, 42249, 22916,
-64203, 16217, 39509, 26567, 51819, 13103, 43938, 24701, 56539, 9899, 31374,
-60408, 4161, 44344, 22422, 61388, 13082, 33654, 52516, 17344, 42385, 11207,
-64460, 36397, 18982, 28991, 48536, 8354, 53434, 31977, 17536, 63999, 36634,
- 7589, 52807, 14902, 47931, 26821, 59813, 6696, 45675, 36404, 3269, 56641,
-27356, 7419, 64072, 32759, 20994, 56134, 15233, 47167, 33627, 19078, 59336,
- 2393, 32265, 56909, 7675, 46709, 21040, 33457, 60701, 16606, 36499, 47104,
- 4109, 64793, 23137, 40015, 12294, 50627, 34500, 6982, 48004, 18302, 29958,
-56608, 14284, 43898, 8866, 38106, 54098, 18978, 32595, 44241, 7524, 57375,
-30939, 13992, 61668, 29042, 3921, 41185, 24078, 54796, 17347, 44436, 2863,
-39035, 26723, 57644, 13242, 31256, 45167, 16888, 53234, 29074, 4304, 50372,
-35903, 8071, 63712, 28620, 2658, 57187, 37226, 8867, 61690, 26696, 46391,
-13741, 31624, 53265, 18878, 48161, 2565, 33419, 56965, 7531, 45624, 30834,
- 246, 51972, 20851, 39782, 12942, 55748, 34852, 8279, 52374, 19992, 47537,
-33671, 12167, 58921, 38042, 18207, 50775, 1488, 34297, 61326, 17129, 36460,
-57496, 3962, 45440, 28381, 16620, 62404, 37621, 406, 50620, 24389, 46176,
- 6861, 29359, 54770, 15383, 42051, 26122, 56571, 7459, 41615, 21347, 47923,
- 9925, 33729, 62620, 13160, 47069, 25229, 41010, 9013, 51802, 30749, 19963,
-62795, 37733, 1473, 33144, 60154, 18648, 47597, 3568, 35967, 54919, 12718,
-32372, 41443, 19123, 58206, 4209, 31573, 54413, 10987, 47387, 25995, 39397,
- 1590, 52812, 24988, 48812, 5373, 39672, 19917, 52661, 33460, 12206, 62727,
-38188, 2085, 55914, 14131, 41760, 26014, 63087, 8427, 39971, 24028, 50819,
-11478, 30097, 55915, 5719, 46531, 19653, 35785, 57996, 7460, 43281, 27540,
- 965, 52494, 31582, 8787, 37980, 59283, 16420, 35191, 50597, 6072, 42004,
-24752, 64421, 14648, 46907, 36454, 465, 54335, 19293, 33496, 62615, 13255,
-40096, 23117, 53228, 3015, 27901, 59049, 11522, 42437, 25028, 62257, 12406,
-47517, 19473, 30734, 61286, 10515, 34928, 46396, 487, 51310, 23508, 41660,
- 5463, 50426, 18318, 10053, 45086, 24609, 59723, 11448, 51445, 21005, 32218,
-46946, 8912, 52182, 35805, 20838, 55991, 5700, 47193, 25044, 58708, 1252,
-40407, 17290, 53765, 29504, 2744, 37109, 46736, 8280, 59203, 32935, 18197,
-64370, 12410, 46672, 38215, 16298, 27508, 58234, 7843, 39559, 26036, 54797,
-11883, 64123, 19694, 29832, 43574, 6201, 51758, 23403, 46888, 3040, 28794,
-49734, 16193, 62491, 4943, 38688, 26248, 53264, 2699, 36908, 56214, 8049,
-50531, 27164, 4518, 53506, 37627, 12208, 45641, 25261, 65278, 5349, 47605,
-19458, 31080, 52572, 2447, 34543, 53769, 7358, 46134, 21752, 60756, 3503,
-34474, 45429, 14231, 53066, 23447, 40990, 15699, 30747, 47601, 450, 56390,
-23877, 38803, 6074, 54522, 21979, 49777, 3889, 34788, 62590, 12953, 41797,
-23320, 51116, 2776, 47049, 19928, 30619, 62170, 9185, 41782, 19830, 32963,
-55752, 10236, 48889, 21375, 35171, 51648, 18655, 42084, 5000, 50650, 30106,
- 9545, 64601, 37401, 11482, 53282, 28027, 16988, 51427, 38379, 4427, 27293,
-45600, 9031, 54427, 20770, 30178, 44581, 8345, 57022, 28203, 343, 59572,
-37988, 23132, 64534, 4535, 46091, 33237, 23116, 59423, 1987, 28056, 64215,
-11566, 49960, 23990, 40651, 1195, 51340, 22058, 47006, 12073, 58965, 33580,
- 5203, 48774, 26189, 60295, 16120, 42570, 6368, 48945, 23968, 59236, 8496,
-39102, 20687, 56410, 32273, 12475, 47534, 38295, 18155, 50720, 31191, 10960,
-45287, 20784, 51856, 1909, 35388, 60575, 5579, 42151, 24221, 64240, 10309,
-40290, 22162, 62153, 14662, 42894, 25574, 60500, 5970, 46434, 17961, 29293,
-63748, 14605, 39719, 4212, 54338, 27854, 9285, 49070, 30194, 14645, 56522,
-24242, 42533, 6973, 48235, 27498, 15798, 60370, 36139, 5741, 47088, 19978,
-58120, 30069, 13001, 63388, 38436, 17422, 33011, 51186, 4067, 64938, 23332,
-38593, 14655, 60791, 26396, 51394, 4616, 41056, 23098, 53704, 1692, 33098,
-65316, 16694, 47893, 4328, 28061, 54595, 16028, 49062, 27271, 8478, 38262,
-57946, 15998, 27640, 49278, 1959, 63257, 22995, 47909, 14629, 35628, 43531,
-20277, 56496, 7968, 32943, 62165, 19577, 42041, 12940, 59243, 24130, 44307,
- 8535, 55291, 27664, 16264, 48112, 31690, 20947, 61441, 9895, 47010, 18558,
-30268, 53411, 3700, 37392, 65285, 13780, 40103, 26089, 53295, 9870, 28600,
-48223, 15483, 60892, 23624, 40894, 12972, 64944, 19480, 27959, 43732, 2588,
-62777, 29818, 18098, 53602, 10378, 44162, 32046, 7491, 60888, 21501, 31619,
-49649, 5247, 41908, 25508, 57714, 10435, 34674, 45082, 14964, 48417, 36011,
- 4980, 51488, 16994, 33548, 54935, 2557, 45898, 22924, 40255, 16382, 58173,
-29264, 12960, 64518, 38187, 16599, 32214, 60848, 23635, 40155, 4803, 47820,
-18853, 34413, 65303, 3371, 42248, 15855, 29606, 61998, 11287, 42105, 26409,
-38894, 15448, 51958, 21537, 31173, 63469, 10704, 42477, 24879, 61233, 14609,
-27783, 49332, 663, 41569, 25111, 53575, 4141, 31088, 62481, 10993, 32512,
-53237, 17617, 47254, 4540, 36808, 45466, 7476, 55932, 16346, 34920, 62027,
-10767, 30952, 57080, 8639, 43658, 22636, 35210, 55249, 10392, 43576, 18817,
-61918, 27679, 11300, 38058, 44357, 16139, 63119, 31484, 18933, 59600, 1690,
-39196, 21542, 55534, 10516, 35129, 59128, 12760, 44761, 27903, 17524, 58191,
-30769, 11078, 37793, 54953, 17042, 29317, 62958, 2067, 33686, 49888, 8864,
-64678, 19233, 34591, 43536, 10491, 61807, 25640, 45636, 9426, 30526, 56804,
-16338, 44297, 27495, 5574, 61213, 38026, 16924, 33160, 58067, 5014, 40002,
-24267, 50041, 522, 65433, 18303, 30778, 43966, 12611, 61575, 1606, 30527,
-58930, 14200, 39131, 22433, 53730, 211, 46650, 24357, 42372, 6607, 63163,
-34549, 12901, 58071, 31212, 17951, 63680, 37659, 2196, 58487, 15347, 35141,
-51355, 18669, 46587, 30055, 9090, 52761, 15614, 41530, 19747, 51403, 7691,
-36097, 53148, 16787, 42845, 33494, 5355, 58702, 17698, 33042, 64869, 8066,
-39398, 25859, 45103, 15254, 62348, 22078, 39979, 10954, 52007, 20429, 34564,
-61819, 3338, 32253, 47577, 18210, 65023, 1706, 42632, 24612, 60609, 5038,
-27891, 58869, 14850, 36518, 63309, 6294, 41385, 23842, 55735, 17543, 39099,
-12957, 51537, 29709, 17301, 53578, 36535, 3454, 55031, 31990, 10820, 50153,
-21547, 35551, 56830, 1624, 42191, 21540, 57634, 31935, 17205, 60003, 37332,
- 3226, 63250, 36048, 10362, 52548, 20620, 32881, 63891, 975, 50444, 31358,
-14157, 54052, 25124, 42162, 8513, 34735, 53157, 3569, 27541, 56377, 9921,
-39632, 20659, 47392, 11697, 31872, 53994, 2325, 45494, 19651, 32278, 59915,
-11355, 29423, 58114, 19619, 44839, 10923, 34585, 56770, 20967, 44622, 6958,
-36442, 64419, 19334, 46146, 29675, 5964, 61249, 36683, 18226, 30166, 45338,
- 9449, 53343, 27315, 526, 63980, 37323, 17805, 50307, 27686, 7179, 53463,
-37410, 2862, 31363, 65022, 18372, 41414, 4112, 57851, 35891, 6576, 52215,
-26932, 39458, 1154, 55093, 35338, 15436, 59671, 27794, 19983, 48368, 548,
-59132, 21468, 36632, 63181, 3846, 45048, 32540, 10432, 56829, 21588, 48634,
- 5171, 33538, 55502, 11568, 45442, 21555, 36722, 57803, 1657, 28729, 52477,
-17633, 37797, 55857, 11800, 28493, 61670, 18666, 44179, 1374, 51386, 20725,
-64647, 30313, 8705, 58013, 20651, 30191, 60937, 9396, 40896, 26651, 63938,
- 7214, 49218, 32603, 3611, 54887, 37485, 8074, 27591, 47641, 3017, 53249,
- 8769, 63495, 35425, 15323, 56392, 29178, 10369, 48870, 23148, 55575, 37261,
- 2281, 49972, 22342, 63904, 4645, 46294, 9359, 57304, 34996, 3565, 46249,
-20591, 51653, 6943, 37935, 56654, 16316, 31362, 51258, 9313, 28104, 57635,
-15580, 37576, 49387, 2010, 42772, 24628, 59962, 13583, 31800, 57216, 18114,
-28305, 49580, 1300, 42635, 22209, 52589, 17971, 33170, 65166, 416, 47811,
-20112, 31070, 59487, 4150, 36095, 48227, 20317, 56976, 783, 28521, 49121,
- 8807, 42485, 24727, 54670, 14436, 43716, 26554, 50398, 3304, 40494, 23547,
-62729, 6271, 49271, 35933, 1297, 65013, 25000, 41647, 5651, 48399, 20026,
-37384, 57578, 12628, 44660, 28682, 4593, 57217, 21223, 49105, 29502, 2429,
-37985, 63732, 19372, 46537, 990, 36966, 58954, 14431, 45930, 28543, 10621,
-53965, 20825, 45428, 13016, 60751, 36872, 16586, 28827, 53800, 4681, 47715,
-25896, 39386, 16570, 52951, 23476, 47763, 5944, 62243, 26512, 39777, 13742,
-59694, 19588, 29558, 48970, 1479, 43516, 21627, 52957, 5707, 47967, 29093,
-13926, 43782, 25308, 61550, 3706, 40913, 13010, 63126, 35149, 20872, 57955,
- 2506, 32385, 61876, 21968, 46452, 9996, 30705, 61126, 14268, 45427, 24901,
-52067, 10770, 42052, 20960, 56955, 2225, 31448, 48256, 7326, 55321, 36230,
- 86, 30095, 56649, 14069, 41429, 22776, 54961, 9277, 39808, 21893, 31248,
-49513, 11442, 53547, 20958, 35155, 46157, 334, 54375, 27601, 16503, 58068,
-33902, 9965, 47615, 25772, 59269, 1073, 34273, 46901, 6606, 58852, 28041,
-15315, 48809, 38268, 4528, 62982, 30118, 13519, 48148, 24375, 51605, 5673,
-41197, 11227, 45143, 23947, 53133, 16293, 28660, 47184, 4743, 58644, 12864,
-39830, 24035, 43997, 9818, 59678, 37206, 2582, 64707, 23408, 48123, 12064,
-37263, 61116, 21686, 43772, 1142, 49956, 26404, 58945, 6487, 40048, 24906,
-62244, 9125, 43756, 17778, 52379, 36184, 7971, 48704, 25684, 42013, 2587,
-61585, 28805, 13436, 53174, 31383, 346, 50934, 11720, 40751, 25596, 52805,
-10691, 38410, 56734, 5013, 31995, 60309, 19409, 48636, 29281, 11943, 45865,
- 3775, 55486, 36089, 16205, 60473, 26258, 45774, 11204, 51891, 21618, 28690,
-44972, 13891, 60703, 20386, 42375, 12015, 64082, 23386, 49785, 5431, 33604,
-46215, 9009, 56627, 32922, 18128, 43982, 7027, 52048, 27805, 17249, 54868,
-36484, 2291, 45728, 24736, 62209, 15675, 40939, 24228, 60541, 6843, 48199,
-15505, 33498, 63654, 10918, 46021, 27098, 3148, 50745, 38461, 8340, 33934,
-58598, 16840, 29390, 40843, 4550, 55526, 17872, 34194, 50419, 1894, 44361,
-23616, 56501, 12789, 38710, 21124, 59238, 11766, 44727, 22376, 52857, 14559,
-33463, 61525, 19320, 43529, 53681, 13720, 27982, 49885, 164, 36795, 58407,
-19461, 43823, 8236, 32906, 59176, 18726, 43488, 12499, 38555, 26906, 53195,
-14767, 43646, 26282, 59416, 12759, 30446, 65259, 21502, 44342, 5057, 36816,
-61817, 19206, 46235, 33924, 7292, 56155, 18435, 29396, 63428, 6872, 40112,
-22317, 50226, 3251, 35510, 64630, 14726, 39701, 24833, 60760, 5227, 46184,
-14298, 40357, 25928, 54359, 12040, 39432, 17503, 51478, 29443, 7289, 64765,
-33201, 15251, 53087, 36042, 20769, 61493, 4281, 32550, 47208, 7127, 63915,
-18050, 36962, 56735, 9517, 30131, 42706, 15271, 54188, 23039, 46700, 8646,
-32389, 52346, 14877, 59506, 27889, 7084, 51266, 22152, 37322, 53460, 14439,
-41863, 7465, 59154, 35194, 13581, 51811, 28463, 10863, 55750, 32628, 20154,
-51558, 7089, 34647, 64842, 1838, 42452, 25073, 52558, 6464, 31132, 58629,
-12113, 40451, 23655, 63289, 8084, 33045, 57517, 3693, 42691, 32556, 19644,
-45493, 11990, 55345, 33379, 8209, 50134, 37805, 15664, 61781, 24682, 39669,
-11306, 60470, 20354, 35600, 56364, 6877, 47283, 19941, 33071, 54267, 22839,
-45862, 5691, 42336, 25430, 49999, 14572, 40619, 5019, 54260, 24811, 40322,
- 479, 55026, 20518, 38548, 3488, 60739, 27036, 49751, 12790, 37018, 63580,
-16485, 28261, 42764, 19766, 64554, 10159, 45588, 35872, 5422, 62860, 25191,
-52419, 15680, 43932, 6494, 61588, 25790, 39791, 7849, 64163, 19011, 32377,
-43714, 11760, 50169, 28973, 4056, 65090, 36392, 7917, 43159, 22527, 62580,
-13539, 43880, 20610, 35187, 65420, 8708, 27286, 52436, 19647, 44282, 7446,
-36781, 59342, 15328, 34110, 64437, 20432, 48259, 497, 35238, 60498, 8810,
-42917, 37061, 21479, 30544, 56809, 7328, 47938, 28187, 18696, 51601, 33279,
-10553, 54923, 18582, 45206, 31520, 5945, 52371, 18374, 34276, 62542, 12642,
-42227, 21936, 56956, 14293, 38846, 26907, 55437, 652, 39969, 22579, 64031,
- 5140, 55761, 18361, 32041, 49786, 8313, 42954, 23985, 59011, 15000, 33887,
-55819, 21003, 47192, 2770, 65152, 27470, 16668, 50129, 37437, 15102, 41599,
- 8618, 58572, 36159, 22518, 61510, 14000, 29179, 49246, 9735, 40840, 20275,
-58732, 252, 36614, 62275, 7670, 32266, 49144, 2570, 56578, 26166, 38575,
-10419, 43881, 21001, 62436, 14515, 28955, 42505, 4837, 61560, 24545, 48907,
-14750, 31823, 64655, 8161, 42831, 26594, 56292, 8929, 35995, 50100, 299,
-30197, 52925, 19245, 39721, 25145, 51256, 5414, 41442, 20306, 59968, 34437,
-15736, 65101, 22841, 48763, 5921, 35961, 54143, 13650, 47724, 25078, 42766,
- 7745, 63193, 22592, 39385, 6132, 46749, 25517, 52336, 983, 40569, 26292,
-62447, 5701, 39542, 26098, 56953, 1546, 39114, 24944, 32782, 6422, 38027,
-62113, 17359, 46065, 27596, 5405, 64225, 38318, 16181, 28008, 49204, 6159,
-60664, 22915, 40794, 400, 62960, 21267, 39557, 6542, 50781, 34433, 1813,
-47065, 17774, 58479, 28861, 13085, 42578, 1208, 64692, 21497, 36425, 50605,
-11695, 44724, 25451, 54207, 12617, 30258, 58979, 19007, 44554, 9213, 54507,
-32022, 11392, 50752, 37276, 21004, 59116, 7665, 30247, 63030, 2470, 46998,
-22338, 55499, 13381, 40856, 23913, 45373, 5549, 57948, 11692, 41156, 25924,
-55962, 13554, 39848, 23194, 52856, 373, 28115, 46606, 19154, 61353, 32106,
- 4014, 57724, 37138, 13357, 61790, 20613, 43053, 842, 33271, 47243, 17250,
-59847, 2730, 32131, 62510, 16807, 27787, 50871, 20011, 43157, 5882, 60329,
-24586, 41088, 4076, 47914, 25932, 59717, 15357, 40409, 22891, 55011, 9724,
-38996, 26702, 49571, 2935, 33719, 55505, 9581, 43460, 21778, 50125, 15444,
-29027, 64230, 10117, 36269, 58639, 1991, 41018, 21632, 65341, 27925, 3460,
-52112, 35369, 7137, 55105, 26778, 43050, 700, 50608, 16717, 31085, 64263,
-11810, 39766, 1641, 60179, 18118, 31553, 55205, 8672, 65534, 30259, 18965,
-57316, 34432, 10846, 63822, 26933, 43279, 9356, 56676, 25866, 46037, 6225,
-40648, 22641, 55987, 9662, 32849, 52984, 4376, 49064, 31858, 13386, 57950,
-27682, 17720, 46807, 36911, 956, 30423, 58551, 19723, 45795, 2468, 32630,
-56816, 13721, 48662, 27253, 6945, 57409, 37320, 21692, 53920, 12721, 45660,
-25023, 52769, 11279, 39322, 26630, 56190, 2387, 47999, 18473, 37880, 57982,
- 781, 33178, 61541, 16986, 46648, 28049, 2789, 53832, 29245, 8166, 38380,
-55039, 14481, 27833, 50388, 18388, 65276, 2119, 49028, 16949, 33837, 62129,
- 3797, 42536, 13690, 57947, 25678, 39982, 1663, 63064, 22290, 42987, 14550,
-57404, 28970, 8215, 36974, 53382, 3016, 33139, 47767, 5757, 63485, 20241,
-34173, 50568, 11870, 45962, 26291, 39321, 10114, 62402, 20145, 35046, 53724,
- 3861, 41117, 22980, 60821, 5614, 40051, 17893, 31369, 44147, 7829, 57663,
-29416, 1212, 63572, 24497, 43785, 4583, 53552, 16667, 33482, 44535, 1463,
-64276, 32611, 6166, 55764, 25488, 43940, 14525, 50532, 24230, 40265, 15777,
-45483, 21386, 50198, 6197, 58063, 26747, 47618, 1880, 35688, 55403, 17108,
-47230, 34088, 11317, 38255, 57717, 1482, 41214, 22655, 53198, 11885, 38939,
-21215, 58317, 14669, 33987, 65439, 12570, 44762, 3713, 58846, 35290, 13969,
-53489, 29787, 8703, 55484, 38405, 2127, 30919, 45329, 12243, 62736, 22052,
-38723, 122, 60422, 19110, 33180, 45695, 14463, 58308, 28519, 10591, 65226,
-33492, 18844, 55864, 13994, 30516, 50896, 19958, 42865, 10870, 48262, 17465,
-60077, 42354, 22564, 51887, 9315, 31475, 54442, 14487, 42496, 22552, 51226,
- 1634, 35817, 56121, 11046, 32221, 47874, 17684, 54948, 30322, 13712, 49078,
-25559, 57766, 11275, 40944, 24594, 52996, 8048, 35681, 55945, 23169, 48149,
-10723, 31781, 59541, 4302, 39271, 20611, 61427, 568, 36207, 52539, 6127,
-39015, 25883, 62415, 1832, 47968, 17289, 28752, 56817, 3610, 35401, 52284,
-15623, 44631, 23745, 41143, 9775, 32653, 60073, 1465, 52286, 18068, 31873,
-47232, 22880, 63538, 2264, 38706, 26977, 60385, 10891, 49041, 21053, 34406,
-58324, 6847, 41776, 14345, 50731, 21691, 28526, 44485, 5365, 55514, 36649,
-22851, 63530, 9349, 43838, 35230, 20475, 52064, 8583, 47563, 36909, 1167,
-65358, 29981, 14717, 48588, 36462, 17130, 63399, 22117, 43073, 9245, 36044,
-56328, 4479, 30463, 62793, 13437, 44791, 21406, 62024, 16009, 41096, 24236,
-60091, 833, 35772, 54436, 7055, 44387, 22808, 51969, 12821, 30361, 54151,
- 6322, 45908, 18580, 56230, 30831, 14473, 46362, 22572, 62970, 9594, 40540,
-24346, 57441, 4882, 42065, 25949, 52430, 16486, 28831, 48828, 12151, 44385,
-24087, 39479, 996, 47083, 13353, 49522, 24135, 39379, 6682, 52526, 21477,
-39043, 14666, 62078, 35027, 17919, 52292, 1098, 44423, 24700, 59411, 15556,
-39280, 23686, 54030, 3109, 33629, 50885, 8217, 60059, 23164, 48940, 10798,
-36029, 56045, 16141, 41042, 22895, 52612, 3810, 35548, 44792, 17554, 62712,
- 1442, 42005, 32357, 18239, 61312, 3197, 31491, 57695, 7232, 33614, 51873,
-15759, 45200, 30215, 11477, 51047, 21381, 39771, 6554, 55297, 19144, 35258,
-49291, 11941, 58485, 21038, 31215, 62499, 6223, 32661, 46179, 13362, 40355,
-25803, 55830, 8328, 36961, 50738, 19807, 32148, 46027, 6565, 59842, 30286,
-13299, 50614, 32610, 4476, 47100, 24142, 64287, 15917, 44378, 22575, 59777,
-13049, 30825, 43151, 16588, 54432, 6714, 29353, 61071, 14093, 33172, 54790,
- 1106, 45025, 27713, 14591, 64176, 37350, 9643, 47961, 26276, 52535, 10239,
-62290, 21467, 33628, 51491, 13235, 46580, 34722, 11571, 55202, 19761, 31249,
-49978, 10061, 58090, 24914, 40134, 15587, 52354, 21877, 39388, 8169, 63293,
-31079, 3926, 58450, 34742, 8835, 65172, 31982, 18103, 40329, 11577, 60417,
-22313, 41755, 8117, 63882, 27077, 3317, 54461, 28475, 16894, 34035, 60096,
- 6278, 44592, 26063, 61728, 3136, 41298, 25810, 52172, 5724, 38661, 26650,
-49429, 16847, 27935, 62294, 791, 38040, 49217, 17090, 27213, 51158, 15238,
-59140, 25631, 41180, 9272, 56554, 26970, 48659, 10180, 28759, 54841, 2720,
-35852, 49839, 19583, 42338, 4010, 48876, 35246, 8379, 57689, 37701, 2473,
-64726, 31353, 21077, 55128, 4227, 63152, 12992, 39662, 25324, 60786, 2754,
-35184, 57154, 12035, 31457, 60206, 15001, 42089, 23904, 64794, 3034, 45081,
- 9993, 34759, 62313, 4398, 44841, 18297, 35895, 60079, 2982, 29611, 63106,
-16916, 43458, 6024, 29775, 53862, 15970, 42167, 24203, 55460, 7990, 30944,
-48953, 16418, 42071, 23681, 57435, 13252, 43214, 20380, 34953, 53662, 10316,
-44217, 24338, 63888, 12704, 30971, 49663, 6046, 61430, 25707, 45970, 14332,
-39675, 25105, 62744, 6551, 39505, 14213, 50180, 21141, 54355, 8220, 33296,
-42215, 4805, 64645, 12892, 45077, 29430, 16891, 55198, 36198, 1783, 64058,
-18421, 47926, 29485, 12153, 50382, 18907, 28606, 56304, 5061, 41213, 23006,
-58046, 30273, 12868, 44940, 20708, 52699, 33724, 3018, 56624, 10062, 31065,
-46155, 329, 58499, 28233, 16536, 50830, 37284, 18756, 41867, 1343, 51977,
-29897, 7643, 54020, 31913, 13868, 48002, 27384, 16931, 61321, 34581, 4217,
-41922, 25554, 62802, 14896, 38722, 25245, 42965, 7948, 61281, 37142, 2519,
-51051, 18314, 32634, 54100, 11083, 34232, 48486, 18387, 58677, 7814, 37796,
-62600, 3864, 33545, 51095, 7286, 59635, 29543, 19939, 62761, 35684, 4116,
-58212, 18403, 32819, 59614, 2366, 48240, 30018, 8497, 46836, 26508, 63130,
-19592, 41511, 7430, 33510, 61021, 11073, 44275, 21250, 63327, 15195, 42308,
-29241, 12784, 37997, 64657, 4230, 28163, 47382, 8559, 63187, 31129, 19665,
-60322, 10875, 47815, 29705, 21002, 55057, 8693, 44582, 26065, 50352, 14313,
-40045, 21724, 63248, 9953, 28870, 59520, 4380, 42480, 25617, 63905, 13128,
-45501, 24289, 60974, 5166, 40424, 25444, 44392, 1881, 53606, 18852, 41463,
-24624, 52255, 4145, 61065, 19898, 29652, 46682, 15608, 63443, 172, 29002,
-52974, 16576, 41795, 22756, 56144, 7579, 36936, 60696, 16968, 41450, 529,
-32067, 56135, 7013, 39594, 26611, 51717, 1941, 60492, 23259, 36065, 45204,
- 3511, 51372, 17303, 40653, 24560, 58743, 7559, 50556, 29216, 17540, 56137,
-32187, 1799, 36810, 46320, 16317, 55469, 3515, 41116, 25630, 59605, 5488,
-40850, 26800, 62774, 2533, 40173, 23516, 47870, 7041, 35736, 60166, 3438,
-46216, 34578, 16597, 53669, 20856, 47368, 13126, 52573, 24991, 42203, 880,
-54116, 25694, 44433, 5144, 52552, 30800, 15274, 49678, 38453, 12915, 36596,
-62125, 9597, 48084, 24461, 39602, 13051, 51277, 18835, 30832, 55872, 10819,
-43343, 23928, 59864, 15127, 54834, 6591, 32197, 43924, 20835, 57505, 12712,
-36013, 64076, 6846, 44508, 32660, 3328, 53323, 23058, 45869, 7174, 35450,
-64239, 15684, 42394, 22964, 59448, 6692, 31543, 53836, 15862, 27871, 62646,
-17929, 44337, 27179, 13492, 52429, 36588, 7533, 47339, 26323, 1123, 33396,
-53138, 8013, 46750, 20231, 27965, 48720, 6789, 44209, 23301, 53651, 7654,
-33327, 48745, 18943, 28578, 56972, 15771, 39996, 24576, 54331, 9574, 31750,
-50209, 19288, 47416, 12439, 34188, 51737, 21245, 60674, 3134, 34215, 63901,
- 9266, 40778, 23470, 58591, 11964, 33447, 65390, 3443, 29720, 51246, 7768,
-61562, 27444, 4206, 59392, 33243, 18618, 41575, 1001, 56124, 16687, 38704,
-20684, 50572, 4041, 56386, 35495, 10950, 48102, 20212, 57312, 34062, 3813,
-44979, 25152, 59449, 15480, 47423, 28425, 18816, 53233, 36412, 3157, 62625,
-23273, 47149, 11371, 32976, 42314, 7595, 58638, 34831, 2976, 60646, 38161,
-13253, 31343, 64271, 15824, 46200, 4241, 37912, 58883, 7306, 27217, 61615,
-18211, 37870, 49319, 15821, 54676, 23420, 40711, 12265, 64616, 33459, 6265,
-48150, 26125, 60908, 11037, 35625, 46248, 19356, 65075, 3390, 37118, 56233,
- 9062, 29976, 48645, 19398, 57966, 8679, 31801, 49590, 443, 59620, 19927,
-48196, 29232, 13646, 44673, 25441, 59164, 5490, 39312, 26322, 64984, 2928,
-43619, 20733, 34145, 53655, 14674, 27464, 56470, 11001, 41759, 22698, 53654,
- 8149, 41095, 14719, 51786, 26245, 45327, 9910, 39967, 23540, 65119, 12573,
-33846, 57100, 3818, 38890, 14190, 58241, 26301, 50661, 1794, 39895, 25875,
-49930, 6651, 34710, 55235, 2787, 46277, 21779, 51801, 14085, 34522, 53893,
-18396, 44263, 669, 40307, 25381, 51824, 5479, 36731, 59437, 15136, 33231,
-64296, 5899, 41671, 23661, 54264, 2, 44299, 23474, 49629, 16521, 36179,
-54232, 9154, 32409, 56088, 1347, 29421, 42973, 10900, 49985, 21590, 64802,
-13122, 33962, 47758, 9284, 59183, 17246, 34689, 43652, 11430, 57279, 5353,
-34776, 43043, 22958, 58719, 9502, 35887, 65000, 2944, 28415, 49841, 10370,
-47797, 21376, 28517, 54209, 11842, 43177, 23927, 65465, 10409, 33506, 48091,
-18895, 41845, 8727, 57054, 21580, 30179, 64902, 10813, 46976, 19383, 33879,
-42519, 4627, 60080, 13639, 45132, 24635, 61709, 6545, 29085, 43412, 20065,
-64711, 13905, 38764, 22897, 52471, 7557, 45116, 21842, 57036, 13572, 31712,
-65531, 17603, 27721, 49604, 10586, 29244, 56944, 1669, 42794, 26795, 38649,
- 5842, 61271, 19179, 29949, 58697, 13007, 34230, 62898, 18575, 37605, 57345,
- 98, 27477, 51789, 19986, 42867, 4317, 53494, 18119, 33186, 64268, 906,
-46332, 36563, 7091, 63020, 20915, 40083, 1851, 46747, 36331, 22457, 63570,
- 9600, 35000, 48343, 2904, 28980, 42722, 11360, 56861, 20991, 39499, 12690,
-61853, 31988, 18798, 51677, 4426, 30684, 55998, 11601, 39905, 26102, 61711,
- 8844, 37478, 47401, 362, 32320, 59787, 6562, 46560, 29488, 16543, 56218,
-23560, 44902, 21472, 40874, 16326, 65149, 30871, 10538, 58325, 36439, 17886,
-63615, 3802, 39179, 26842, 61495, 12762, 37405, 51654, 6323, 31429, 60822,
- 1475, 43307, 21978, 64283, 5617, 40496, 26313, 56547, 108, 39841, 11200,
-46119, 24814, 49965, 14713, 27920, 53399, 1676, 45303, 21933, 54750, 10141,
-43915, 35243, 18694, 48903, 37795, 14204, 45762, 22953, 50101, 8894, 57830,
-34898, 25715, 47954, 9562, 64974, 26929, 42688, 15120, 30620, 60873, 139,
-43801, 29218, 15910, 65510, 37474, 11984, 31719, 51577, 1137, 34826, 57528,
- 8801, 41004, 25043, 49711, 6553, 30290, 59895, 21268, 52073, 15029, 40601,
-24355, 53206, 10330, 44532, 25416, 54408, 8, 49264, 19449, 29119, 53848,
-14031, 35682, 50022, 11957, 44110, 28205, 4773, 63003, 37214, 7606, 29745,
-52685, 3471, 45094, 24693, 57016, 14129, 39733, 21751, 58982, 5230, 42498,
-25358, 50288, 14852, 40078, 24145, 63624, 1751, 35298, 45271, 15743, 53418,
-24643, 40598, 10612, 36208, 56792, 4517, 34528, 63804, 11834, 41194, 21370,
-55929, 8826, 32018, 47068, 12657, 61184, 29973, 21, 47905, 38265, 17381,
-30978, 63627, 2726, 34840, 46453, 17838, 61407, 32101, 1480, 50021, 20419,
-55115, 6082, 41674, 25237, 53336, 16843, 43709, 24348, 54580, 5712, 42705,
-17132, 34778, 65375, 11648, 29868, 59007, 16379, 40383, 25392, 62472, 9082,
-39106, 26700, 60849, 7146, 29686, 59013, 15349, 33917, 56351, 9583, 46866,
-22434, 40435, 2005, 52953, 28373, 16858, 57113, 32269, 12848, 60765, 37926,
- 7552, 31734, 64684, 2925, 41309, 23150, 50433, 13943, 36622, 62287, 18002,
-31302, 56562, 3886, 39654, 26251, 55517, 5783, 38986, 26689, 51117, 1122,
-64060, 22578, 30994, 48358, 17382, 55290, 7935, 39913, 25904, 51185, 12546,
-45159, 34575, 16131, 61992, 38348, 5141, 33903, 59490, 18598, 49746, 3242,
-38676, 21019, 57716, 4940, 29831, 63174, 15657, 37968, 49870, 7138, 34835,
-55351, 2456, 29993, 62900, 15874, 48273, 22621, 39730, 8886, 53997, 35249,
-20830, 53140, 9318, 32753, 48693, 130, 57271, 31409, 16331, 61336, 37809,
-10965, 35326, 54263, 723, 38378, 51754, 6320, 31529, 59091, 13836, 41524,
-24002, 63655, 9630, 46220, 23400, 50993, 10669, 37381, 45052, 4367, 49446,
-27094, 9530, 46781, 29789, 16024, 64540, 34536, 11015, 59438, 31189, 22464,
-57031, 8655, 42294, 28458, 15124, 54271, 23397, 48567, 13352, 29207, 60771,
-18086, 50351, 4356, 29045, 45374, 19217, 53748, 14240, 61471, 22115, 33644,
-46673, 5802, 58518, 25258, 41552, 1048, 47547, 24397, 60631, 16992, 36391,
-50328, 1660, 43311, 21476, 51235, 15108, 57218, 24317, 40740, 12095, 54473,
-34378, 3728, 62910, 38180, 9046, 58773, 34822, 55359, 4578, 42750, 23032,
-51575, 535, 41498, 24434, 49443, 14296, 56540, 20641, 40803, 918, 58646,
-22136, 47364, 11953, 40998, 26060, 56265, 14061, 38926, 23859, 58835, 9935,
-44518, 22276, 65099, 18295, 32757, 59145, 4639, 43130, 35593, 16844, 62715,
-38080, 6598, 28209, 48402, 15787, 63207, 27124, 256, 58209, 28989, 7307,
-64499, 31807, 17046, 40379, 5377, 60615, 19664, 38493, 2983, 49294, 22970,
-57046, 6914, 41452, 24178, 54561, 9183, 45852, 21882, 52970, 7318, 42022,
-24187, 62213, 14212, 43694, 21586, 60938, 12472, 34170, 57091, 18941, 44039,
- 641, 31483, 65094, 5740, 48409, 19301, 33083, 62381, 8242, 40320, 21457,
-33827, 60987, 5985, 42997, 24449, 64894, 1450, 32132, 59658, 10431, 48144,
-19676, 31784, 58853, 13701, 42029, 21304, 61362, 8423, 32612, 54373, 2401,
-46909, 33960, 18332, 53313, 11852, 33312, 57188, 7255, 43447, 20594, 54774,
-27958, 12372, 59960, 37326, 5877, 64690, 22156, 48800, 15445, 27798, 52388,
-19488, 45646, 1169, 51487, 24239, 42434, 15811, 57784, 24017, 39781, 9866,
-50848, 23356, 58346, 5618, 37034, 49970, 15804, 28033, 55984, 5154, 39813,
-23544, 57451, 12057, 38551, 27021, 61031, 15267, 48868, 268, 35622, 63948,
-10013, 31679, 48617, 20416, 55810, 9316, 45096, 23107, 51743, 509, 32472,
-57166, 12365, 44293, 21021, 56241, 1639, 33350, 50000, 19087, 45685, 4744,
-40977, 24651, 65314, 13459, 31032, 60082, 19270, 44019, 11095, 48689, 37195,
- 3609, 50658, 19498, 28113, 56476, 14601, 46450, 29287, 19663, 57526, 6744,
-43876, 25174, 52093, 7958, 46837, 14309, 33059, 59920, 15968, 42429, 22093,
-61659, 12397, 40113, 24003, 49371, 14664, 41002, 2765, 62674, 21997, 33452,
-47701, 4352, 57735, 21226, 31359, 53568, 1454, 27316, 55829, 20285, 45746,
- 8023, 41807, 25699, 60949, 14133, 44838, 25629, 53530, 11027, 34359, 48950,
- 39, 27595, 59702, 17772, 43826, 25476, 50953, 8517, 34940, 56523, 753,
-30340, 49168, 18084, 59432, 3159, 30898, 62591, 12534, 40495, 25157, 44394,
- 8753, 51028, 28753, 3981, 56205, 20247, 28189, 47532, 15269, 27154, 62089,
-19812, 46512, 35239, 4916, 54240, 17403, 34510, 57787, 2673, 31308, 64761,
-16934, 28408, 56898, 14855, 33282, 60138, 3612, 50915, 24410, 41716, 5582,
-55216, 21027, 46892, 2381, 36560, 48825, 17193, 61314, 35294, 3415, 59006,
-38447, 7969, 35009, 45702, 11742, 55418, 20385, 33018, 58691, 7510, 39845,
-24491, 44813, 1532, 55896, 18504, 31467, 51320, 14957, 35104, 65384, 9918,
-43620, 32672, 5578, 58125, 27657, 13931, 63681, 33886, 4737, 45524, 30450,
- 9823, 64391, 22208, 43422, 15750, 49406, 27986, 19538, 50760, 14205, 7259,
-48660, 28523, 11439, 56369, 37173, 19208, 62268, 32329, 5886, 45709, 35300,
-10517, 52251, 25233, 44829, 7952, 33016, 62920, 19170, 50617, 8411, 31210,
-53199, 3639, 47845, 32664, 14773, 52097, 38072, 6459, 29169, 47806, 13447,
-55323, 27064, 8467, 50758, 30896, 17751, 60283, 37339, 5272, 32499, 55753,
-12509, 36094, 52800, 21237, 42482, 2602, 48631, 26499, 54018, 13074, 44389,
-25167, 55685, 11380, 45816, 18488, 32363, 62570, 12419, 38905, 26070, 60167,
- 2427, 34773, 56246, 17905, 47734, 4992, 39253, 26714, 52290, 2147, 46165,
-28055, 10448, 50524, 35729, 17247, 53981, 37498, 11898, 29211, 57347, 2551,
-42785, 23883, 55089, 11177, 47246, 17159, 30105, 57052, 9206, 40772, 22862,
-51260, 15586, 39709, 26077, 55509, 1950, 42958, 24171, 53783, 10406, 39942,
-23252, 49682, 16705, 29388, 64438, 6832, 40879, 23344, 62559, 93, 39377,
-26506, 60456, 10903, 36173, 49359, 3608, 46270, 27277, 17341, 33039, 44122,
- 2175, 58160, 32332, 8282, 60854, 38101, 17553, 30210, 63254, 6488, 35520,
-52657, 3421, 45050, 22180, 64359, 13069, 29376, 45425, 20724, 61982, 8581,
-33414, 48139, 19533, 64759, 10764, 44376, 26564, 52668, 4314, 43341, 21295,
-30294, 58602, 11664, 45305, 22789, 40115, 2492, 60772, 26885, 38766, 4920,
-61894, 17944, 43276, 23882, 48861, 5687, 35433, 51460, 15581, 42694, 24413,
-63692, 8766, 31341, 54405, 20172, 47606, 2909, 35849, 52205, 7978, 39404,
-25485, 57970, 7007, 29947, 62362, 22486, 42399, 5117, 52227, 34576, 9363,
-61713, 38310, 12271, 31641, 60304, 2540, 39700, 19487, 63544, 24122, 43736,
- 293, 52667, 10043, 31122, 48115, 3385, 57030, 29886, 7253, 54367, 36275,
-20273, 50402, 12182, 28066, 60513, 18047, 39249, 10602, 64188, 18990, 37987,
-48062, 9095, 30792, 63550, 15484, 37509, 50529, 1062, 31969, 56625, 7736,
-39931, 22190, 61468, 16413, 46052, 37295, 13356, 53963, 4135, 39224, 21491,
-60596, 14019, 42111, 24928, 65262, 7401, 44645, 23983, 41701, 14746, 49815,
-23295, 58222, 6027, 34657, 63457, 18584, 46847, 33177, 12558, 38160, 63903,
- 9055, 53430, 36341, 2807, 43483, 11085, 59974, 21628, 30530, 48550, 12185,
-43195, 21130, 54849, 8713, 36200, 46921, 1310, 53229, 20213, 36473, 44054,
-12350, 61103, 18013, 39340, 26351, 44633, 10373, 63313, 29101, 6181, 52464,
-27249, 10622, 47251, 31305, 19765, 57206, 27488, 5116, 63949, 24660, 42932,
- 191, 48783, 17479, 64826, 30801, 10945, 50313, 35144, 8400, 62834, 27529,
- 3749, 48990, 28618, 13431, 53907, 22424, 46269, 17607, 37811, 55431, 7045,
-28678, 48407, 18321, 58475, 36851, 2318, 51954, 31585, 7016, 60012, 37737,
- 1481, 31238, 61771, 22453, 39990, 16065, 64040, 33766, 3486, 50301, 12289,
-27680, 54055, 15633, 60042, 30319, 4107, 65516, 37171, 16537, 55496, 28153,
- 2207, 36479, 44720, 17621, 63582, 12096, 39491, 25002, 61957, 2472, 27642,
-57679, 17194, 34076, 61555, 1088, 37390, 46771, 19587, 56193, 2766, 43078,
-22514, 52322, 14755, 46383, 23338, 40385, 9327, 62614, 18245, 32781, 59560,
- 8595, 39476, 22491, 63407, 7189, 38788, 27026, 58797, 1762, 40371, 21442,
-51708, 5325, 43111, 18433, 49084, 27832, 11411, 63714, 31214, 20178, 54650,
- 8515, 32333, 64515, 16370, 36791, 58789, 3826, 27451, 62989, 7954, 45548,
-22217, 51521, 16837, 32185, 60031, 6498, 38738, 26908, 63318, 2258, 48700,
-18569, 37595, 54147, 3941, 31141, 57540, 6669, 46759, 18589, 33046, 64131,
- 5782, 38931, 26807, 62365, 751, 33426, 58366, 12044, 43291, 26547, 56820,
-10435, 31962, 50906, 18796, 44885, 4747, 51658, 20048, 28846, 57408, 13975,
-38163, 61810, 9607, 47556, 23969, 41118, 14651, 49792, 28468, 5001, 54386,
-36676, 14924, 49227, 27835, 12061, 60517, 31127, 8109, 37911, 47504, 2107,
-56751, 13958, 39818, 25433, 54001, 749, 42819, 25338, 38856, 7048, 59460,
-17750, 34263, 63370, 8966, 47389, 18604, 34256, 50968, 6538, 57700, 30524,
-18807, 46794, 13761, 52325, 25302, 40671, 7887, 59676, 19363, 29135, 64833,
-10608, 32761, 57993, 4422, 41931, 17531, 36814, 61183, 10266, 28993, 58727,
-15847, 43147, 23742, 63048, 1112, 31956, 53709, 18474, 45982, 12342, 37529,
-59762, 16904, 27355, 49355, 899, 43034, 22637, 54567, 15321, 45419, 26683,
-53715, 5493, 34056, 57402, 17066, 40018, 25740, 63097, 13804, 35124, 45752,
-19224, 65386, 15374, 32373, 59545, 6178, 46917, 35057, 725, 54356, 26266,
-44036, 6482, 51690, 28141, 14513, 59155, 35087, 3958, 53150, 19345, 28689,
-62201, 12782, 42296, 23848, 52455, 3679, 30327, 55055, 8903, 31898, 64510,
-20131, 42826, 11427, 51987, 26459, 47129, 5861, 39140, 19739, 52765, 34579,
-10548, 56790, 36437, 1560, 47215, 19816, 30137, 52009, 14508, 39780, 2198,
-60086, 25701, 49409, 5731, 32665, 44802, 19302, 57995, 32462, 16812, 51035,
-37828, 367, 62996, 28230, 6785, 50123, 33802, 22466, 58990, 14168, 41642,
-24352, 62465, 6540, 30354, 50266, 1992, 35211, 52989, 7484, 58021, 31838,
-16644, 54730, 38076, 13540, 32917, 65034, 18405, 51751, 1338, 38137, 49582,
-15562, 33777, 52889, 10404, 38989, 23201, 56396, 4922, 41392, 25702, 60235,
-13157, 45792, 19416, 37975, 57598, 16568, 36770, 59553, 7634, 30387, 63118,
- 2576, 42513, 23078, 51844, 14617, 35429, 53977, 8315, 27233, 61084, 20258,
-41454, 14792, 46123, 24176, 53675, 11799, 44714, 2629, 32010, 52425, 8872,
-46594, 29291, 20082, 57931, 38175, 2003, 47761, 22292, 42862, 13844, 48563,
-27416, 5259, 52695, 38315, 19732, 59950, 6650, 49381, 20911, 34724, 56922,
- 8799, 46826, 20450, 35271, 52846, 7682, 43778, 22446, 51339, 14980, 29120,
-64824, 9872, 40521, 26278, 59310, 7096, 29986, 61836, 2162, 44098, 25137,
-51059, 4658, 47097, 20862, 29386, 56875, 702, 42131, 23967, 52069, 14054,
-43528, 25518, 64325, 8288, 34764, 54973, 23134, 61688, 8914, 37246, 51411,
- 3441, 35668, 44819, 15018, 56864, 23653, 40915, 5981, 48888, 20453, 37858,
-55396, 14475, 41547, 24845, 60845, 4739, 40864, 13449, 45388, 23634, 55728,
- 9561, 41670, 22084, 34258, 52435, 12190, 27841, 63638, 15010, 43904, 24792,
-60632, 9855, 40783, 22581, 51868, 14916, 44546, 19918, 55656, 7796, 41692,
-24363, 53531, 3062, 38741, 20917, 47904, 6158, 61488, 29771, 16460, 37703,
-63969, 8512, 33214, 52863, 1011, 28241, 50623, 19122, 58944, 3866, 33740,
-65170, 11500, 44459, 21831, 61389, 2423, 32395, 57025, 19582, 42796, 15521,
-58796, 33056, 17966, 52180, 24469, 42919, 5995, 60721, 18998, 35159, 57085,
-13414, 46735, 22904, 50814, 1892, 41270, 21890, 55476, 31857, 2991, 62431,
-23956, 42015, 15244, 53627, 36274, 7526, 64283, 33314, 3369, 54543, 35911,
-14255, 48233, 38397, 2305, 53572, 27890, 13348, 47134, 23530, 52842, 216,
-39930, 25666, 50715, 6093, 30515, 55846, 12180, 41505, 21928, 50937, 9040,
-36431, 64876, 2140, 31622, 43776, 10134, 57924, 30403, 17683, 62540, 38006,
- 6157, 33076, 65153, 11388, 38967, 21750, 49894, 12477, 30476, 59452, 6707,
-47106, 23021, 55038, 8372, 28570, 43265, 2076, 52240, 21710, 28969, 42518,
-11146, 62342, 23789, 48390, 13748, 32631, 61426, 2343, 41996, 23454, 54845,
-11982, 36589, 49097, 5657, 46001, 25221, 57958, 10321, 36052, 63774, 14372,
-43206, 24542, 50187, 5462, 40193, 24515, 57151, 1270, 36252, 62707, 15050,
-31748, 58665, 3604, 45458, 27184, 16387, 63805, 29098, 9718, 54364, 38225,
- 4798, 59178, 23741, 45069, 9417, 41098, 17747, 57399, 28670, 13166, 52321,
- 4629, 27975, 64461, 8260, 45942, 27170, 15270, 56642, 38440, 18922, 61673,
- 4580, 44062, 32181, 8063, 51915, 37761, 16664, 46301, 22364, 65338, 13604,
-28873, 42558, 20727, 49484, 504, 43523, 25133, 58506, 4553, 44632, 36157,
- 9640, 59483, 30316, 21609, 61805, 6933, 41611, 26576, 62938, 13778, 35584,
-46514, 18827, 54558, 2073, 39203, 26759, 55347, 6221, 30653, 51869, 418,
-40177, 21525, 50673, 15893, 36357, 56872, 10974, 33000, 64892, 757, 44752,
-17095, 37429, 47813, 10760, 56825, 32826, 4903, 65028, 18552, 36032, 58963,
-23761, 56142, 14786, 40833, 21656, 59728, 6334, 44024, 31172, 17402, 62747,
-34752, 7203, 57256, 20503, 34165, 61845, 9893, 28888, 48385, 14485, 41885,
-25761, 54776, 731, 30188, 44336, 16627, 60161, 5258, 40331, 25462, 63762,
-11562, 32439, 57329, 4401, 44870, 33467, 18132, 49122, 12758, 54530, 36706,
-16520, 33164, 55210, 10915, 35478, 60480, 16044, 43202, 11676, 49914, 35663,
-17765, 61442, 5083, 36903, 53763, 10519, 29453, 49657, 17462, 42214, 944,
-30980, 46965, 16970, 57439, 28903, 13027, 61154, 37185, 289, 29724, 51263,
-17343, 62107, 28383, 10113, 47943, 29956, 1414, 52697, 36900, 17647, 49267,
-26627, 65294, 903, 34538, 46588, 16081, 61552, 4620, 31205, 58352, 7858,
-42142, 34210, 484, 50182, 19373, 36262, 56085, 3154, 30523, 59425, 8605,
-47688, 25179, 38656, 13038, 50001, 19684, 63480, 11298, 44237, 24245, 54605,
-13590, 34030, 56567, 2584, 46796, 22258, 42095, 15880, 62661, 36695, 7769,
-42623, 24976, 53820, 15604, 40365, 24385, 56027, 9052, 39095, 26866, 51886,
- 7365, 46879, 36099, 916, 49099, 27423, 6969, 65308, 34783, 14947, 48746,
-27910, 9081, 49574, 29321, 3925, 63870, 32663, 15413, 58127, 28866, 7344,
-44074, 14754, 53042, 37378, 11239, 28691, 59795, 1264, 44531, 27933, 13026,
-50117, 29931, 17101, 56811, 27214, 9002, 62230, 32108, 18012, 37889, 59492,
- 7317, 34078, 62791, 19412, 48671, 11745, 33469, 64424, 17528, 45127, 32967,
- 4950, 61579, 29049, 17496, 49216, 27603, 14880, 55227, 24053, 47769, 4719,
-37321, 53240, 10643, 27303, 51692, 20397, 42313, 1746, 58236, 25029, 44514,
- 3680, 54297, 18940, 43103, 32093, 1252, 37453, 61013, 11775, 33264, 58445,
-17334, 45241, 9265, 53760, 35821, 18493, 41050, 4691, 55096, 36992, 16562,
-29637, 58076, 8476, 44869, 27774, 16254, 64435, 31365, 20593, 40967, 2515,
-51807, 19114, 32366, 41276, 1752, 58612, 17263, 36428, 61186, 8100, 28826,
-53236, 20742, 43665, 8984, 28137, 47565, 19080, 55531, 32772, 6816, 46463,
-37346, 17155, 61943, 27609, 11609, 50189, 32421, 15539, 64650, 24667, 48221,
- 991, 36858, 61193, 22369, 42389, 14273, 49269, 36209, 18426, 53860, 38151,
- 3335, 33152, 52597, 10498, 29698, 48171, 17697, 64019, 27490, 3028, 57762,
-34156, 8673, 54915, 38008, 4083, 59860, 15466, 33260, 62000, 11656, 40634,
-21788, 50747, 16269, 28269, 54132, 13997, 45348, 4196, 35829, 47584, 18993,
-53998, 2973, 32094, 59185, 7974, 29337, 48549, 21318, 62346, 11432, 41714,
-22265, 64536, 14579, 43348, 25536, 46562, 8925, 61424, 29014, 4159, 49297,
-27108, 13281, 56277, 30651, 21560, 62208, 3256, 28527, 42507, 13310, 50576,
-24864, 41285, 7636, 46876, 51244, 10694, 28108, 61951, 952, 36082, 49572,
-14424, 27103, 52862, 10171, 46780, 23723, 40693, 237, 51053, 17847, 36119,
-58989, 3221, 32286, 62556, 9434, 39831, 23907, 64981, 12620, 37412, 49279,
-18646, 31650, 54109, 1845, 46364, 20934, 41203, 13795, 50454, 24016, 58086,
- 619, 39866, 22144, 46812, 5516, 64269, 20336, 29299, 49289, 1408, 39921,
-24760, 65270, 6438, 30953, 55419, 12440, 47107, 30946, 19861, 57604, 3747,
-33995, 59961, 13009, 45203, 25299, 64911, 5807, 40716, 23055, 49828, 10357,
-46015, 22102, 59602, 7757, 42342, 32814, 3090, 57897, 35479, 19328, 63515,
-12639, 31415, 57002, 7534, 39965, 21134, 51979, 10944, 56720, 28127, 19184,
-50686, 35837, 13523, 47213, 22005, 54541, 16567, 29142, 62126, 9295, 41467,
-24443, 50861, 14236, 36086, 65190, 2110, 43562, 26390, 59922, 5545, 38513,
-27010, 57888, 1262, 39703, 26328, 51937, 12193, 39170, 25551, 58783, 5125,
-48461, 29614, 12722, 54976, 21499, 46986, 6148, 36943, 59909, 312, 30702,
-48833, 18950, 43244, 10978, 64101, 20235, 28875, 59816, 11486, 37516, 55000,
-20084, 43960, 2974, 62235, 32748, 17049, 59161, 37106, 12651, 52866, 23740,
-46071, 9661, 35457, 61547, 19148, 48085, 27394, 4669, 64929, 38355, 15935,
-47238, 19444, 58459, 34670, 10139, 61652, 36711, 836, 47264, 38213, 20420,
-50938, 4846, 44527, 24615, 55856, 14385, 29622, 43871, 4132, 55059, 22894,
-40396, 2406, 59232, 21147, 48156, 13577, 36998, 57343, 3293, 33854, 60915,
- 8206, 41243, 22071, 63855, 16008, 32183, 45657, 3025, 57148, 30829, 14872,
-50386, 36352, 8230, 61416, 26945, 38598, 10477, 64485, 21728, 50469, 14127,
-44240, 24544, 51434, 5646, 39276, 23884, 63779, 3155, 30504, 58977, 14899,
-44988, 22928, 65080, 9565, 50925, 20202, 34197, 49611, 361, 56032, 37395,
- 7393, 59564, 14929, 44189, 25854, 60448, 9200, 49394, 21954, 29346, 54653,
-11772, 47644, 19230, 34195, 46333, 4866, 59246, 16722, 33472, 64333, 2065,
-39666, 15649, 61053, 22302, 52365, 501, 34024, 47686, 19589, 57834, 3774,
-37148, 46044, 7913, 30575, 55066, 19791, 44500, 9964, 34379, 59205, 2069,
-28971, 62387, 7492, 30243, 55558, 13632, 40865, 25239, 59457, 674, 34307,
-53899, 11361, 44730, 31100, 15899, 48347, 28094, 19593, 52448, 25747, 46103,
- 7223, 39232, 24140, 56618, 8197, 34439, 64332, 2678, 40931, 25480, 60624,
-16919, 29341, 57692, 10092, 39956, 26028, 52082, 12739, 34663, 43145, 15830,
-52713, 5224, 38600, 26222, 56566, 9761, 49608, 33819, 4545, 59942, 35650,
-16422, 38476, 54576, 17959, 37936, 47174, 5487, 36371, 51075, 10160, 33849,
-55004, 18206, 59594, 34, 34055, 61517, 17308, 30602, 4692, 34834, 45136,
-17060, 54249, 30088, 8628, 64638, 37580, 3720, 58751, 31964, 13469, 63735,
-26760, 43345, 11467, 53532, 24592, 44233, 13676, 47448, 20545, 56593, 7167,
-33519, 50962, 3868, 28818, 59551, 8614, 41230, 23693, 62353, 7399, 38703,
-22852, 60427, 9332, 38597, 26964, 62870, 11801, 52047, 25604, 39655, 9610,
-57662, 19096, 32115, 59032, 9171, 34841, 51724, 18784, 44103, 27983, 1990,
-63933, 37953, 15693, 51391, 22411, 39702, 6514, 56374, 20012, 38709, 14849,
-54031, 34624, 4221, 63215, 28150, 16121, 34805, 54374, 12935, 46788, 25870,
-51943, 6898, 42093, 25723, 50329, 3983, 44593, 23122, 58962, 14933, 31974,
-44572, 6638, 37756, 60303, 1679, 40777, 25064, 64398, 3644, 36732, 57355,
- 6291, 44897, 35011, 18200, 57999, 7149, 45986, 28897, 17059, 34217, 54762,
- 8931, 48350, 21795, 41215, 15123, 46138, 22858, 60737, 7412, 42924, 21530,
-65502, 8235, 45705, 32521, 14560, 56421, 37757, 2017, 64331, 30440, 13627,
-51757, 27313, 16963, 62873, 36337, 5223, 56628, 25985, 41001, 3571, 54093,
-33999, 17653, 50688, 4605, 30936, 56634, 12324, 39414, 23685, 51808, 1552,
-45432, 26059, 39587, 5508, 56486, 20910, 40546, 541, 54978, 30092, 10312,
-51524, 33348, 21438, 56614, 8470, 31640, 50771, 3674, 42633, 23754, 53335,
-14749, 27945, 60052, 6824, 30298, 63512, 17238, 41248, 1345, 51333, 35476,
- 9639, 58315, 28112, 13839, 51128, 35209, 11264, 53226, 25776, 41181, 7764,
-44429, 24636, 51614, 16563, 37022, 54379, 379, 28899, 49774, 12070, 60151,
-24559, 40534, 9014, 63333, 29312, 18204, 47433, 13150, 53105, 20662, 41523,
- 5917, 56433, 25520, 39225, 4037, 62813, 20544, 34459, 57549, 13305, 41349,
-25739, 50312, 8129, 33142, 55886, 1586, 38968, 26636, 44270, 5432, 62629,
-17599, 28895, 43189, 11453, 51093, 22040, 32807, 53776, 6249, 34951, 45781,
-18385, 63029, 6771, 35786, 44135, 2959, 65135, 27114, 12945, 49691, 37694,
-21923, 53501, 11029, 41975, 26620, 50813, 5458, 42390, 30585, 18678, 56307,
- 7301, 43469, 21546, 29633, 62141, 13614, 50888, 17224, 35197, 63182, 4115,
-29608, 54519, 12257, 46697, 23821, 41650, 16349, 48021, 21761, 64899, 6073,
-45051, 20110, 50700, 14706, 39514, 24322, 60072, 6729, 36581, 62726, 1128,
-43067, 11132, 58838, 18150, 31665, 63532, 1795, 51483, 29553, 15106, 46586,
-23636, 55935, 8761, 34939, 51307, 643, 42922, 24105, 61240, 5607, 45000,
-20394, 65197, 1163, 46809, 26961, 60743, 17973, 42517, 2818, 47456, 29446,
-19790, 53172, 12301, 27533, 57310, 1823, 32443, 62529, 8102, 28809, 49834,
-15397, 63608, 25955, 44115, 6204, 48832, 29933, 20523, 46469, 10032, 38266,
-57291, 48669, 22182, 63100, 6569, 38985, 23023, 51207, 18891, 45789, 27875,
-16365, 52032, 36583, 8115, 55289, 20249, 39013, 6098, 57854, 22406, 38546,
- 1651, 53049, 26881, 42515, 15883, 58045, 24791, 47690, 11323, 34067, 54840,
-15336, 42104, 25719, 55483, 3102, 42565, 24858, 53793, 6170, 48307, 21111,
-38539, 2874, 55639, 27012, 43436, 4861, 53819, 17411, 45955, 27283, 3327,
-60777, 36612, 14466, 56198, 24134, 46061, 7942, 32756, 62344, 14192, 50502,
-26665, 42950, 2534, 60828, 30642, 19446, 50592, 9802, 37710, 56696, 1901,
-40316, 23405, 64809, 11103, 38571, 22618, 59196, 14643, 36430, 61747, 12172,
-33751, 43227, 2703, 64226, 24374, 49564, 12332, 28750, 45859, 17841, 53504,
-10784, 42906, 30239, 15500, 49506, 22884, 63136, 1189, 32066, 52276, 20335,
-61068, 4938, 41557, 22872, 58589, 13730, 33533, 64047, 4156, 51066, 30376,
-10778, 55504, 36144, 3279, 53844, 28035, 17940, 60279, 38353, 9301, 27196,
-50988, 17394, 35822, 44017, 7470, 58052, 34293, 12221, 50526, 23479, 44210,
-14158, 61702, 21357, 39291, 10046, 47404, 26550, 63562, 14147, 42430, 25543,
-53713, 7279, 40971, 21338, 63078, 8335, 54091, 34645, 13596, 64569, 24888,
-46935, 11924, 37749, 62231, 17654, 42433, 2160, 48762, 26094, 61149, 13582,
-38700, 21817, 64130, 5603, 37442, 49804, 16170, 34941, 54984, 10722, 47990,
-21545, 28514, 65203, 15576, 45406, 20744, 37075, 60975, 5808, 41888, 24206,
-62453, 735, 34142, 49508, 19370, 63635, 5366, 32063, 46309, 11061, 58986,
-20636, 35070, 44446, 6983, 54950, 19929, 33966, 43768, 4552, 56355, 25919,
-39353, 593, 58950, 27022, 47913, 15037, 34339, 53604, 18344, 44955, 10806,
-28462, 47355, 96, 54162, 18908, 29532, 61170, 12361, 43057, 24139, 48820,
-13441, 58676, 20773, 35324, 47224, 6608, 60823, 24567, 40288, 3469, 64854,
-17842, 29020, 56807, 853, 39784, 25710, 51639, 15240, 28435, 55247, 16782,
-33284, 57705, 290, 30795, 61862, 7022, 44089, 20508, 56031, 13897, 33215,
-60442, 12418, 44552, 25912, 65378, 10277, 35804, 53957, 1870, 42170, 23708,
-56743, 6435, 40890, 22708, 50080, 16474, 37399, 58182, 8000, 32258, 60231,
- 1395, 39489, 26456, 51765, 11117, 38582, 26975, 63437, 5235, 46523, 19241,
-53576, 29230, 14705, 51188, 37382, 22523, 49624, 4804, 41178, 21396, 48179,
-12671, 43096, 36664, 5445, 50109, 19323, 30186, 62599, 13089, 47064, 20730,
-38609, 11289, 55163, 26994, 38606, 13613, 54221, 21900, 38509, 6463, 50716,
-24541, 58992, 15151, 37928, 63798, 7895, 36831, 44866, 20948, 51121, 13783,
-40957, 25566, 58422, 19685, 42926, 1393, 38913, 21224, 60714, 14253, 35477,
-52035, 3884, 64161, 28253, 16497, 1798, 42285, 14020, 55626, 26615, 41563,
- 2586, 60827, 10805, 34000, 56808, 1416, 42068, 25814, 47950, 4013, 61278,
-26985, 41773, 8999, 64202, 26133, 41342, 10874, 60711, 31469, 2628, 44920,
-19400, 64588, 27866, 313, 36717, 60868, 12647, 46681, 32237, 10713, 65350,
-17407, 31143, 44368, 13002, 61207, 26520, 41333, 10449, 63723, 21436, 34077,
-49641, 12929, 37719, 55127, 10407, 29584, 50115, 4573, 41617, 20192, 58593,
-28285, 441, 46520, 35318, 11144, 58103, 24558, 47378, 8444, 41943, 25297,
-58570, 14068, 45508, 20850, 32079, 52827, 5152, 44277, 20264, 54625, 549,
-45751, 30519, 6317, 51013, 27734, 18876, 53191, 35690, 9778, 56080, 20882,
-36694, 62266, 5770, 32291, 58772, 20134, 48098, 8680, 32827, 53449, 13864,
-43615, 27270, 10858, 47942, 37460, 15346, 31458, 52798, 270, 47209, 28506,
- 9370, 42251, 19956, 62136, 37863, 16088, 28791, 47674, 9736, 34744, 50350,
- 570, 44994, 20466, 61924, 33811, 4190, 59191, 19843, 47833, 28793, 2783,
-55666, 38204, 8407, 32874, 52297, 1407, 45758, 24161, 58453, 5853, 43495,
-22854, 38526, 198, 60280, 16651, 33856, 57533, 11096, 31550, 47549, 17534,
-27991, 51295, 3473, 43354, 19711, 57377, 27726, 5364, 36323, 54246, 20795,
-39821, 6661, 43905, 24060, 57373, 10719, 47762, 18945, 30996, 58900, 1956,
-45328, 23184, 41899, 3885, 58590, 38164, 7549, 32146, 54590, 2975, 47502,
-18139, 29046, 56305, 9229, 46230, 16957, 29564, 57633, 10215, 40021, 23200,
-55740, 15440, 29994, 42920, 3979, 65512, 17458, 32718, 46197, 1457, 61150,
-16817, 50866, 35501, 9954, 64083, 23396, 42618, 7427, 37032, 59957, 2383,
-30464, 61934, 7722, 50007, 36549, 19916, 64644, 15341, 36387, 49470, 3823,
-40958, 20942, 63183, 6940, 32784, 50296, 2722, 41263, 22693, 54220, 13322,
-30531, 57685, 15723, 35732, 48785, 11860, 42844, 23120, 61647, 9932, 31716,
-58413, 4194, 36995, 50489, 8339, 45655, 23235, 51154, 15186, 39234, 25401,
-59574, 2487, 36929, 50190, 8054, 27954, 55376, 3103, 40138, 22498, 49541,
-14812, 31416, 59982, 12554, 38817, 26559, 53209, 10469, 33688, 65108, 3078,
-27538, 49486, 14926, 42981, 23140, 56765, 13334, 32965, 60979, 2432, 42754,
-22295, 54549, 12944, 31796, 42504, 3430, 58156, 27134, 8809, 64587, 30386,
-19041, 55368, 34850, 6900, 59331, 24832, 53067, 17116, 32646, 58229, 3479,
-41377, 24604, 52316, 6217, 64124, 23031, 42207, 2437, 59395, 25086, 41480,
- 9330, 63232, 27043, 40479, 10377, 34347, 54170, 855, 28029, 48341, 18503,
-58109, 3650, 31602, 64713, 10423, 48764, 4790, 33946, 52684, 11505, 57321,
-24908, 41944, 8237, 54681, 22278, 44768, 12965, 35328, 58571, 51689, 17532,
-31152, 48079, 8386, 58178, 21116, 31336, 50215, 15372, 43666, 23449, 65237,
-12024, 38697, 21889, 50016, 15411, 33839, 55557, 19361, 49260, 4989, 39039,
-23292, 53845, 14998, 36321, 50659, 6549, 32484, 53404, 16936, 48464, 28803,
- 5039, 56094, 21760, 35421, 51494, 1241, 58668, 23746, 39000, 5738, 56798,
-16737, 36955, 51560, 40, 28632, 61474, 6938, 41720, 22771, 63243, 17244,
-37494, 54401, 9163, 34241, 48278, 17333, 65183, 23221, 41032, 4913, 52514,
-18556, 35678, 63807, 1200, 31437, 49042, 7118, 62737, 15011, 42625, 24778,
-60343, 9410, 39544, 23330, 63869, 16943, 37570, 55268, 15295, 42378, 5127,
-62815, 25835, 40270, 194, 48051, 15712, 52262, 24783, 40400, 2464, 65444,
-25880, 39401, 4722, 60488, 19578, 36516, 55395, 2854, 64779, 24677, 39323,
-11699, 61597, 19192, 36655, 55030, 14696, 48583, 27344, 1713, 57267, 38449,
-12788, 63114, 27118, 17272, 57590, 36383, 6610, 28369, 52135, 16006, 46088,
-36477, 11125, 63673, 21807, 42615, 15312, 59639, 27955, 17899, 64729, 38248,
-12551, 32729, 50327, 18453, 61497, 9195, 48348, 26937, 44738, 5191, 50852,
-22931, 41698, 2023, 61137, 36817, 15796, 59585, 38270, 8527, 32348, 49722,
-16634, 59053, 9471, 30851, 65471, 15113, 52721, 35016, 115, 45343, 26391,
-56136, 7781, 40245, 25153, 62060, 12877, 33852, 52540, 17639, 27135, 56537,
-14847, 42908, 24650, 61937, 8163, 34856, 50094, 20303, 32236, 64978, 4839,
-42479, 26100, 52838, 1945, 34206, 61661, 8533, 50508, 21379, 38238, 54042,
-11629, 28184, 57534, 22262, 40126, 6340, 31463, 46259, 18728, 51697, 11474,
-57150, 20158, 28830, 48510, 12978, 41379, 23912, 56637, 3450, 32009, 43786,
- 8447, 59710, 18005, 32015, 56596, 10196, 39150, 26845, 57808, 14445, 29892,
-64090, 11126, 33579, 48815, 1358, 43454, 24033, 55762, 4700, 31400, 52546,
- 7773, 37048, 49210, 20046, 43251, 11161, 63306, 22137, 40705, 12424, 30071,
-64125, 4674, 33842, 52888, 12114, 45359, 29656, 14721, 63549, 37913, 16454,
-32359, 52933, 6749, 61614, 24986, 39796, 4461, 48934, 19631, 58486, 200,
-45142, 28763, 15842, 55649, 38054, 21047, 61733, 4761, 36281, 52381, 8750,
-46427, 20568, 29455, 58477, 9239, 40806, 24912, 62340, 10631, 45934, 35196,
-17623, 54223, 37906, 2210, 44207, 13821, 61628, 22793, 45234, 315, 35865,
-65503, 11149, 44259, 27409, 15932, 56564, 36639, 12413, 32608, 46623, 14799,
-50374, 33656, 7180, 53108, 20097, 45315, 3268, 56109, 20980, 46621, 14194,
-31943, 61655, 6674, 40889, 24949, 52474, 15609, 43164, 23629, 39375, 14708,
-61895, 19145, 31379, 45969, 3086, 65447, 37294, 15256, 31775, 56533, 7402,
-40413, 23427, 33584, 63830, 5129, 45498, 23861, 39992, 13477, 62558, 5799,
-34902, 57706, 9333, 40145, 26625, 54728, 6701, 30755, 59642, 792, 44530,
-12717, 32406, 61609, 20940, 43471, 8305, 63488, 24507, 40762, 12296, 57176,
-22673, 43794, 9503, 36049, 63266, 16260, 45396, 8951, 39698, 25992, 47136,
-11423, 53592, 18877, 30736, 48589, 8541, 32936, 57791, 20931, 46728, 15854,
-35721, 51344, 1561, 45565, 28728, 13011, 61773, 27122, 3149, 54881, 37762,
- 9990, 30758, 60074, 15888, 44664, 27968, 11835, 53029, 36603, 16770, 40900,
-26791, 55758, 2238, 36885, 48585, 16471, 32290, 53809, 8051, 46471, 29315,
- 1807, 60528, 21121, 34143, 46023, 8802, 58480, 20228, 33311, 43481, 8011,
-57770, 18797, 30869, 46098, 11703, 56699, 17880, 34233, 48581, 10143, 30349,
-50961, 20820, 42127, 6803, 56395, 26010, 44891, 3544, 31507, 60054, 7056,
-35669, 52562, 18208, 31319, 48419, 4879, 37186, 49654, 11768, 41519, 25038,
-65005, 8806, 32005, 56169, 1144, 41497, 26053, 49931, 6380, 32121, 53545,
- 4058, 34973, 48130, 7875, 27810, 57513, 2324, 40332, 23798, 54462, 11795,
-38779, 20309, 65051, 15169, 30094, 53370, 12055, 44858, 27222, 4889, 48859,
-29258, 21046, 62746, 1185, 42664, 34519, 24364, 45331, 4039, 49295, 17501,
-29665, 62617, 12200, 39270, 17386, 51611, 21075, 43670, 5102, 49338, 29401,
- 8303, 63094, 38457, 436, 29969, 51805, 10676, 40116, 23096, 58935, 1610,
-43197, 14541, 53670, 35058, 18733, 59811, 12125, 47336, 20030, 43817, 27745,
-14796, 58640, 30618, 7613, 36465, 48572, 3426, 43242, 14413, 62229, 25614,
-54582, 2026, 38778, 26875, 44865, 4770, 65105, 16642, 32734, 55296, 9453,
-42686, 22310, 58690, 14006, 50646, 24284, 39927, 5987, 52566, 22165, 47557,
- 693, 31593, 51901, 18881, 44525, 5122, 56894, 19639, 28714, 62300, 10380,
-39520, 21394, 63590, 12883, 28313, 59370, 1644, 34732, 52864, 17442, 30765,
-47290, 2653, 54535, 24254, 44900, 16241, 40086, 21392, 61257, 6193, 48858,
-23101, 42226, 793, 58596, 25427, 47298, 11166, 35043, 45884, 16777, 64300,
- 9549, 43726, 34383, 20857, 61125, 11182, 47155, 30880, 7347, 50809, 12770,
-44910, 29089, 18399, 63700, 35377, 3881, 55768, 17646, 48014, 36004, 24,
-52801, 32957, 20400, 60671, 7050, 28730, 48286, 12037, 57545, 26118, 39169,
- 9130, 52529, 28386, 14831, 49343, 31419, 7881, 60493, 38165, 1427, 48376,
-22114, 57892, 4831, 29506, 61971, 16692, 40341, 25915, 60049, 11222, 38663,
-26837, 64015, 4972, 36149, 50533, 16757, 44049, 21544, 59308, 8677, 33720,
-60533, 291, 44742, 24819, 54741, 6524, 41574, 22704, 51288, 17435, 27636,
-59108, 827, 42627, 26212, 60302, 11458, 50281, 28374, 18637, 56930, 36166,
- 439, 52739, 25661, 47521, 18353, 29186, 53498, 2879, 42998, 20797, 63028,
-11031, 36512, 51912, 18251, 29083, 47377, 3463, 56347, 16975, 34502, 46849,
- 1377, 59175, 21163, 38596, 4143, 61463, 24657, 49509, 2188, 30462, 52832,
-20176, 59969, 4357, 32061, 64349, 22620, 42383, 2491, 62214, 25192, 45061,
-14014, 38993, 4339, 64749, 30635, 11416, 59146, 33077, 20608, 52614, 6376,
-36552, 49561, 16696, 45416, 22274, 56250, 7502, 34008, 49903, 3339, 61273,
-24258, 45238, 4694, 59343, 18769, 30483, 50060, 13426, 28441, 62411, 3755,
-42260, 24343, 58302, 13587, 35899, 49165, 11718, 27453, 55818, 16973, 30108,
-49360, 4261, 61259, 27917, 14393, 51286, 36843, 6827, 54225, 26487, 43155,
- 683, 62941, 24729, 46306, 5170, 59761, 17690, 34175, 50139, 12609, 63269,
-22700, 40566, 13488, 46477, 21925, 64590, 8058, 43955, 23992, 59044, 15403,
-29534, 60501, 2354, 44191, 20871, 53976, 14876, 40100, 23483, 57205, 16601,
-34111, 62479, 10726, 44553, 23264, 60590, 13086, 37791, 49868, 17550, 31612,
-62719, 6753, 43819, 26087, 59544, 3042, 34335, 46536, 7508, 58439, 32885,
-18868, 64009, 34416, 9813, 56770, 36542, 12669, 53250, 19002, 48215, 11159,
-60719, 19900, 32971, 56849, 7162, 43378, 25911, 58246, 3043, 32869, 64686,
-14501, 36578, 59769, 19124, 46060, 11707, 35398, 57411, 18724, 33069, 64068,
- 6025, 48960, 30498, 19024, 55790, 37454, 8568, 28538, 50365, 3687, 39734,
-24613, 64314, 6276, 35833, 52197, 1005, 46900, 23832, 63171, 12504, 55565,
-21261, 29610, 47206, 8505, 41658, 23607, 60841, 13363, 52931, 21398, 29773,
-49750, 932, 40187, 25576, 62595, 5522, 38682, 26951, 46731, 1701, 61762,
-26136, 43322, 11330, 65249, 25679, 40703, 8030, 60678, 34827, 16494, 37672,
-50638, 6833, 42042, 24996, 53235, 3285, 33449, 48444, 18921, 42486, 14402,
-56261, 27724, 6420, 62101, 36286, 19746, 59836, 9591, 31782, 57041, 1311,
-46951, 28609, 11460, 56498, 36587, 17677, 51959, 9290, 40524, 19829, 59494,
-28454, 1604, 51942, 32625, 22952, 56563, 5232, 40420, 25929, 54134, 2574,
-37258, 64097, 19793, 33958, 57600, 847, 41614, 14193, 50132, 25428, 45190,
- 8275, 30521, 65243, 16154, 27544, 50120, 4429, 36308, 46856, 14146, 62863,
-23289, 41589, 5559, 53868, 33255, 17794, 63337, 37393, 5034, 55120, 21664,
-45903, 16845, 29010, 63125, 10285, 41253, 25489, 48919, 9101, 31656, 55362,
- 75, 42611, 22624, 52178, 13243, 43342, 23348, 54690, 9631, 30171, 55876,
- 2688, 39646, 26159, 50247, 12438, 30033, 56947, 9560, 47195, 26761, 38696,
-12432, 62299, 5333, 36610, 48679, 13938, 53830, 20664, 38781, 2978, 14907,
-55256, 38141, 8948, 30487, 64866, 17221, 41465, 4527, 35648, 62043, 12681,
-49223, 32465, 14905, 46168, 26160, 54142, 5511, 34625, 64484, 13621, 39794,
-26085, 52218, 6916, 29158, 54687, 13379, 45216, 26767, 52071, 11185, 42637,
-34720, 17559, 57980, 7529, 42208, 26540, 50580, 15806, 40492, 9483, 56154,
-31856, 19573, 52285, 7440, 60421, 26656, 43668, 18786, 53410, 27485, 5671,
-47447, 38071, 15377, 57794, 29372, 8876, 62916, 35291, 858, 41591, 26197,
-64549, 14533, 30541, 40996, 12831, 54850, 21836, 38729, 10793, 65402, 34640,
- 5694, 56284, 20059, 30113, 51625, 11013, 41387, 22365, 65042, 6805, 38127,
-52608, 2948, 35256, 64036, 12983, 42621, 21529, 35103, 47617, 2038, 63709,
-23633, 40068, 13693, 58247, 22445, 39787, 9403, 33012, 54024, 14982, 44287,
-27552, 1907, 47583, 35366, 6297, 55988, 26528, 50447, 915, 30201, 40630,
-16927, 53732, 3705, 34580, 51541, 10983, 39383, 26418, 50540, 4995, 31158,
-61140, 10260, 43964, 3258, 28172, 51204, 19832, 40321, 502, 53101, 30329,
-15939, 55801, 4935, 46377, 19442, 34367, 52367, 13578, 41772, 21781, 55142,
-16804, 28086, 49337, 679, 42733, 14668, 52590, 25232, 46915, 3234, 40571,
-26360, 63611, 5830, 38873, 26816, 52364, 2466, 39667, 23664, 54513, 10079,
-38719, 21757, 52391, 9190, 30535, 47892, 1462, 27989, 54115, 21689, 42289,
- 4623, 52976, 13667, 45502, 26307, 39147, 13017, 60623, 5433, 45595, 25309,
-62937, 18051, 32493, 57040, 12685, 45799, 28804, 17921, 60061, 37974, 9798,
-31482, 40720, 18619, 51037, 5361, 34115, 64523, 17320, 49061, 29507, 6920,
-46045, 33635, 10386, 62954, 17624, 33612, 56216, 12605, 44454, 21273, 52946,
-10527, 31187, 54320, 20195, 38852, 7423, 55677, 33926, 15153, 53525, 20630,
-28199, 46970, 2994, 59319, 20289, 31975, 61329, 14150, 45208, 22308, 58339,
- 9539, 29746, 65488, 4953, 39805, 23610, 45485, 15760, 50161, 7716, 40315,
-26403, 51610, 13434, 34660, 62839, 17168, 43363, 32427, 3303, 65001, 21768,
-31875, 56786, 5029, 43308, 18371, 62314, 37265, 11938, 48146, 19023, 30553,
-60481, 12974, 44409, 18496, 49130, 28225, 6253, 52645, 27338, 17769, 62160,
-31277, 9943, 59883, 34134, 19566, 54982, 5672, 37785, 59008, 11420, 29936,
-56935, 17314, 43602, 1029, 33536, 51024, 15439, 29022, 56738, 2801, 45953,
-23228, 41431, 14319, 59821, 32910, 3862, 51289, 35077, 18793, 54077, 2252,
-36541, 64976, 19735, 44213, 15600, 36889, 62633, 6889, 33758, 56398, 1730,
-39626, 26446, 65320, 13919, 33014, 48023, 6116, 63058, 22848, 41162, 17473,
-32347, 64274, 1973, 49772, 20457, 30938, 56288, 16151, 28704, 45262, 6823,
-61375, 24920, 41992, 29639, 5541, 59952, 22356, 48574, 11743, 43506, 24782,
-59312, 16082, 45240, 27619, 7140, 58830, 37120, 2090, 60978, 21325, 40472,
- 9962, 48948, 22542, 58258, 8566, 36169, 62631, 18561, 32895, 41336, 5590,
-60197, 18540, 31779, 64139, 8670, 47186, 23978, 39243, 14625, 62983, 485,
-33490, 59274, 21348, 45971, 3750, 39809, 15162, 49437, 22947, 40733, 1058,
-56964, 12217, 34938, 50413, 19731, 64112, 2277, 40563, 23580, 50390, 14752,
-27767, 55288, 18092, 44228, 6603, 54284, 23640, 49313, 8883, 33930, 57935,
- 99, 42229, 23935, 53227, 16136, 37736, 46076, 8752, 57394, 37128, 1093,
-50149, 33114, 16126, 47059, 24441, 56651, 10294, 39953, 23644, 53934, 8495,
-59928, 16978, 31459, 44650, 9021, 56084, 34837, 3858, 49081, 16356, 60675,
-25414, 40925, 7321, 64162, 32745, 18522, 54502, 23827, 42576, 10942, 58481,
-20239, 36127, 61258, 8889, 42909, 23641, 63794, 13576, 44871, 21607, 62039,
- 8457, 29360, 57816, 14097, 35881, 49423, 19359, 63902, 31535, 12317, 57734,
-23885, 45609, 9555, 34298, 65409, 22677, 42055, 10504, 58793, 28448, 1238,
-64165, 37649, 8721, 31970, 57796, 10895, 36378, 61882, 21291, 40478, 5592,
-60872, 20077, 30271, 58714, 13373, 42080, 23831, 55865, 7961, 43863, 22484,
-59531, 14170, 41843, 26777, 63277, 6017, 41796, 23494, 56724, 15753, 37593,
-59129, 10297, 32623, 63452, 16865, 40579, 24316, 59971, 2172, 50325, 20536,
-33642, 53437, 16013, 41684, 64, 51337, 10690, 37633, 48226, 2800, 31826,
-55925, 13508, 44995, 22270, 61969, 2439, 42911, 24471, 59256, 14864, 39524,
- 205, 56954, 21028, 35604, 58579, 3179, 43059, 23837, 52254, 6144, 40934,
-23318, 58015, 2940, 35232, 64380, 15850, 44141, 4250, 60559, 30781, 19333,
-47063, 2024, 37230, 62523, 12338, 32954, 55088, 9930, 44134, 27354, 185,
-54663, 38069, 8022, 34886, 50370, 19509, 46104, 15105, 53693, 28275, 591,
-57542, 34539, 20455, 64667, 3822, 42358, 25170, 53130, 5310, 27645, 54865,
-10564, 49170, 25056, 41169, 12665, 48488, 20511, 36386, 50558, 7170, 27497,
-55058, 3493, 38107, 52920, 8114, 41394, 23880, 62818, 9905, 34963, 56989,
-14823, 36734, 46862, 5403, 51680, 21772, 42255, 1861, 47334, 24703, 50761,
-14930, 41226, 23044, 49146, 7926, 37446, 64804, 20702, 27535, 59695, 8523,
-44000, 19393, 36087, 62045, 9601, 29391, 50577, 10803, 43514, 23964, 56320,
- 8172, 42155, 22543, 58343, 13070, 30488, 51296, 4562, 57472, 28002, 12544,
-49586, 29979, 19615, 59696, 16309, 47210, 7229, 42835, 22359, 53838, 16510,
-35775, 46577, 4103, 55477, 14228, 42700, 23401, 54366, 8448, 34714, 44027,
- 3351, 63519, 33863, 19265, 46815, 11955, 52563, 37678, 17756, 46102, 31470,
- 2374, 57415, 33564, 7767, 50607, 36434, 1134, 55881, 31549, 17478, 51414,
-23208, 43849, 12525, 57461, 24749, 42912, 85, 32305, 50156, 20433, 44202,
- 2814, 55479, 15625, 46271, 26314, 51106, 904, 39804, 26000, 55629, 4709,
-34204, 52041, 18456, 44096, 29060, 6615, 36382, 51103, 18518, 65138, 32882,
-10093, 58289, 35399, 17671, 46574, 24846, 59924, 7021, 32636, 43329, 13986,
-56079, 31037, 5282, 60716, 38349, 11484, 30066, 59528, 21012, 39504, 2828,
-63403, 26083, 47092, 15283, 29736, 62147, 7668, 44941, 27756, 2623, 60745,
-33409, 17934, 27339, 61984, 14091, 28985, 58584, 4655, 43230, 20018, 32677,
-62586, 805, 44973, 26558, 38946, 5249, 53190, 19959, 29288, 47256, 12672,
-62494, 21241, 30525, 45038, 1381, 53081, 28341, 14196, 56700, 37639, 4504,
-61841, 16475, 32624, 45130, 3008, 52299, 17980, 31803, 55563, 5376, 39565,
-25939, 56294, 133, 33933, 47362, 17982, 38091, 54677, 1836, 27073, 45885,
- 7762, 38229, 53764, 4577, 36760, 61307, 18776, 41289, 2633, 51703, 20649,
-31018, 45627, 14687, 49407, 22436, 30034, 53622, 3736, 42393, 23269, 49946,
- 6625, 29528, 55927, 17795, 36107, 49936, 8277, 45541, 33050, 375, 51358,
-18542, 36893, 64372, 11866, 31388, 47692, 1026, 51285, 18610, 36243, 60250,
- 3537, 33480, 49597, 6787, 44064, 23481, 50480, 2819, 29395, 55037, 7815,
-34705, 43729, 11681, 64599, 28626, 9862, 38274, 61398, 20384, 30402, 57934,
-16765, 27598, 63410, 8782, 36191, 50359, 4764, 28592, 54444, 17000, 37436,
-49530, 7911, 32428, 53389, 23226, 40816, 9216, 50789, 16832, 31221, 60273,
-11952, 38896, 26676, 61863, 8723, 32021, 50476, 11596, 28449, 41813, 21695,
-52020, 9729, 36747, 49793, 13186, 58910, 23994, 41301, 6068, 49477, 18573,
-30712, 64548, 13249, 47323, 30392, 17285, 62940, 27406, 2254, 59712, 32323,
- 7456, 36538, 61537, 16465, 47928, 29757, 10617, 54182, 37458, 18283, 60229,
- 9386, 46017, 37208, 18022, 57922, 30720, 7314, 59829, 34527, 2262, 63384,
-29171, 15816, 57915, 33880, 13955, 64734, 28821, 17667, 35615, 58401, 1202,
-28757, 48445, 20076, 41820, 3230, 59089, 23159, 40163, 13129, 56397, 26606,
-39173, 18803, 64181, 7308, 35233, 60289, 2543, 31068, 55608, 18784, 45472,
- 4002, 34717, 47451, 16054, 54439, 29782, 6537, 47098, 25458, 57380, 706,
-35883, 64500, 13677, 39745, 26599, 61723, 6369, 45484, 24857, 40090, 10443,
-47707, 35516, 21384, 60928, 2507, 43804, 36723, 9906, 51667, 20846, 35272,
-62090, 936, 28173, 57648, 11735, 29478, 61238, 19767, 38569, 7225, 60333,
-26926, 45928, 13189, 58747, 22240, 41723, 10281, 54932, 30857, 1342, 64322,
-27343, 53993, 7198, 62896, 23933, 41068, 15071, 54847, 20146, 28102, 63703,
-13953, 48381, 35505, 9414, 65072, 38403, 4732, 33567, 47574, 16602, 63180,
-27310, 11901, 58786, 38269, 17437, 31668, 65436, 6406, 39141, 22304, 57779,
-14148, 43565, 20305, 61990, 11542, 31274, 58536, 9859, 47543, 24939, 61120,
-12696, 28186, 44658, 1954, 53737, 27882, 8167, 63601, 37622, 4098, 30478,
-49008, 16403, 61897, 28647, 8509, 47959, 35724, 19304, 51909, 1685, 33175,
-47706, 8009, 53251, 31608, 18914, 43545, 5971, 52291, 35715, 20136, 55417,
-12624, 36794, 49110, 19760, 54190, 5306, 36385, 46690, 9603, 51070, 34662,
-21571, 60940, 10855, 51641, 18391, 29354, 48879, 7600, 59103, 17742, 33053,
-64712, 2750, 40465, 25209, 50341, 5889, 38980, 19717, 57465, 11946, 45949,
-35652, 8762, 51385, 22195, 29723, 48360, 10107, 65329, 24190, 38807, 11259,
-49989, 19497, 28884, 59889, 9827, 41310, 22417, 52671, 7043, 28259, 64896,
-13181, 48560, 33845, 15579, 58718, 27361, 17576, 50321, 28633, 12045, 46515,
-24564, 56682, 8594, 38240, 63241, 4293, 35828, 60710, 10030, 40119, 20103,
-59094, 12949, 33623, 62947, 15379, 44400, 32702, 2583, 65246, 14336, 28302,
-57074, 20625, 43036, 10529, 58038, 28984, 4576, 50634, 35834, 20721, 61571,
-11008, 31326, 46198, 13094, 53256, 27441, 16679, 65268, 29851, 9728, 35957,
-61546, 19272, 47175, 12627, 57678, 21255, 30269, 47720, 4433, 55389, 27188,
- 7565, 49434, 34147, 3490, 38482, 53466, 14132, 44283, 21634, 58901, 14955,
-34151, 46730, 10928, 64919, 27970, 20009, 60552, 5781, 44274, 15531, 63721,
-24855, 42323, 4991, 47994, 23611, 53194, 1402, 43704, 20701, 54988, 16935,
-36318, 48545, 408, 59604, 29644, 17545, 63511, 4688, 29304, 45255, 14865,
-52968, 21287, 35228, 56432, 4026, 41738, 23443, 53668, 5279, 35768, 51430,
-12390, 43490, 21698, 54903, 13757, 40311, 23950, 42598, 5621, 58274, 22378,
-44458, 2105, 30432, 49796, 15676, 32141, 63942, 78, 44894, 21473, 51170,
-15451, 41889, 23548, 52508, 10389, 38002, 45220, 563, 49983, 23287, 43889,
- 5639, 51146, 16270, 37556, 55827, 6964, 31987, 65422, 17033, 44413, 31765,
- 9593, 63261, 35969, 4269, 53870, 12248, 46517, 26537, 42010, 13251, 53381,
-24746, 39894, 9197, 57839, 29228, 13300, 61026, 38455, 1698, 33025, 63866,
-21453, 40340, 11963, 52033, 20462, 30842, 46786, 3365, 52919, 17888, 32825,
-49765, 1108, 64193, 29314, 18217, 53634, 8593, 31229, 46791, 17819, 63749,
-28524, 5073, 57159, 30379, 13374, 38220, 48650, 9180, 34200, 51091, 2890,
-44960, 25499, 53089, 16345, 40810, 602, 51966, 25524, 38662, 5865, 60826,
-20129, 36059, 50112, 13156, 34749, 16989, 48075, 37218, 9505, 32080, 60594,
- 4063, 46723, 37144, 10892, 44092, 27058, 3340, 53985, 29184, 20194, 56755,
-14694, 28347, 51206, 8988, 37647, 54501, 4358, 28439, 50640, 11090, 42302,
-24943, 59804, 8879, 35500, 53548, 3225, 29380, 45894, 22639, 50066, 1709,
-40178, 21878, 54464, 4886, 37508, 57253, 11065, 30900, 48565, 16162, 42676,
-22003, 55051, 12676, 45071, 23381, 53529, 278, 41726, 21430, 58391, 12093,
-43003, 24014, 63884, 13149, 41200, 23488, 61006, 10191, 36092, 57575, 16857,
-28180, 60228, 3590, 46555, 23407, 64480, 10157, 29138, 43168, 15846, 63651,
-23809, 39574, 1933, 54592, 16401, 31584, 45772, 3480, 36715, 57650, 14614,
-41945, 23815, 51947, 10292, 42903, 22659, 53904, 12104, 34172, 61639, 14734,
-42770, 24095, 64522, 4038, 29772, 49034, 17616, 58745, 435, 39877, 26214,
-53298, 5859, 41898, 26198, 58902, 2070, 35244, 47572, 16145, 63330, 32375,
-11593, 58096, 36546, 3882, 42940, 22177, 60769, 5940, 36123, 46897, 947,
-64447, 32768, 6242, 59855, 35713, 16390, 53758, 28227, 11237, 48507, 27304,
-17731, 55936, 6194, 43551, 26471, 51585, 1600, 39016, 24788, 54766, 11725,
-47937, 19360, 37025, 51768, 4233, 30806, 62316, 16301, 39870, 23995, 45805,
-14820, 54782, 7653, 41433, 25376, 57988, 6421, 40277, 22937, 55613, 576,
-37973, 48142, 18199, 56404, 4291, 40004, 22785, 32989, 44804, 948, 62003,
-18174, 32783, 42866, 13775, 59479, 36857, 18591, 65352, 27053, 7102, 32482,
-61101, 812, 39412, 26457, 57255, 6403, 31805, 43862, 1498, 51656, 35921,
-18735, 56342, 30726, 2669, 36593, 54647, 19798, 41076, 14809, 65435, 30804,
-13225, 57638, 33851, 5357, 63281, 22353, 45988, 10352, 34360, 55895, 20827,
-43094, 9053, 57893, 31478, 993, 63896, 27180, 9500, 38057, 60360, 15292,
-32754, 57643, 10699, 40589, 24671, 56611, 7109, 33435, 48244, 3188, 63661,
-18670, 46086, 32945, 12532, 62247, 36396, 20892, 56601, 6121, 47944, 22809,
-41517, 11196, 35083, 62460, 4054, 30124, 47791, 6286, 61367, 27165, 17870,
-54509, 35778, 11653, 61852, 20270, 31038, 59380, 9288, 40980, 24810, 51962,
-12522, 29653, 54560, 426, 48949, 28498, 15337, 43593, 23040, 58573, 30674,
- 1244, 61539, 20752, 44238, 6191, 62685, 33080, 18175, 51865, 38116, 7323,
-27079, 55046, 18265, 44788, 5367, 33996, 59997, 17089, 42860, 8645, 60916,
-25448, 39200, 11948, 58744, 21957, 42839, 14104, 36272, 57175, 4012, 42159,
-23577, 55770, 10698, 34015, 50411, 15041, 42171, 23695, 52744, 7891, 60092,
-24608, 40988, 14853, 65054, 21349, 39869, 5526, 62826, 34281, 19699, 57853,
- 9018, 49396, 26946, 42977, 15428, 55916, 4638, 44662, 29233, 59609, 182,
-51183, 21964, 39890, 12596, 52901, 19000, 29424, 61674, 7343, 52253, 38079,
-17188, 59958, 38485, 8027, 35161, 45441, 2568, 59549, 31315, 19294, 47000,
-14622, 61361, 35125, 1867, 52874, 18298, 48741, 30714, 12290, 63339, 37306,
- 7178, 54917, 18152, 37074, 64543, 13259, 28742, 49052, 17455, 41765, 24623,
-63101, 6331, 33520, 59617, 2760, 40610, 26057, 61034, 9999, 39030, 26020,
-65486, 7325, 33799, 53983, 3513, 28416, 46319, 18395, 56937, 4834, 39134,
-26619, 48559, 1320, 33133, 51381, 13312, 42548, 29408, 7008, 35270, 50911,
- 648, 58024, 31325, 11216, 45369, 18959, 59983, 26116, 42149, 8588, 64871,
-22982, 49703, 11873, 33760, 63185, 1571, 39819, 25691, 60105, 6587, 36976,
-56588, 55, 31301, 50949, 7662, 36735, 46832, 20422, 55237, 9273, 36559,
-42898, 21171, 60792, 13145, 44676, 22132, 62462, 9411, 32457, 54807, 13377,
-44216, 27245, 4483, 50904, 38431, 17248, 27583, 49282, 10518, 55689, 31133,
-19804, 53430, 9755, 41939, 21805, 55094, 15241, 45131, 27072, 1787, 49540,
-37501, 19559, 57591, 32651, 51, 47645, 34392, 18672, 64702, 10620, 45035,
-22012, 60240, 5262, 40962, 26066, 59249, 9538, 40785, 23110, 54056, 7410,
-33895, 48962, 1661, 59677, 30385, 18166, 64792, 34617, 2359, 46952, 30592,
-14038, 62692, 19851, 45194, 32095, 11406, 52583, 25652, 42262, 14863, 60519,
- 6921, 51380, 25653, 39985, 9205, 56968, 22986, 46739, 1854, 28036, 54073,
-11399, 37517, 51662, 15661, 43253, 22860, 52997, 10308, 41219, 23569, 48398,
-16077, 59445, 27532, 12583, 38004, 45499, 9839, 61308, 27250, 11595, 58123,
-34302, 7983, 45561, 26005, 51617, 9584, 41493, 26529, 49724, 14218, 39017,
-26521, 53328, 3196, 48105, 24417, 40169, 16329, 51071, 38250, 11788, 32840,
-52423, 19741, 47768, 2546, 27744, 45700, 20520, 64964, 1206, 42216, 22665,
-60521, 15444, 39431, 24600, 52411, 9064, 27737, 47395, 4857, 53495, 14743,
-39336, 26046, 61093, 8285, 28713, 57527, 16227, 43653, 22272, 56090, 13481,
-33174, 42401, 9808, 56970, 31528, 4826, 47542, 25399, 42402, 2375, 49615,
-33717, 18177, 62517, 3982, 47410, 35534, 9069, 61165, 20879, 34704, 59539,
- 8184, 48272, 17001, 34518, 52394, 10455, 39021, 26105, 51328, 14574, 47787,
- 384, 27807, 63555, 16965, 49023, 35595, 10951, 58748, 19947, 49003, 30146,
- 2150, 54434, 33514, 18560, 47649, 4707, 55441, 34038, 7450, 61403, 26618,
-51584, 11303, 32679, 63280, 16515, 39380, 524, 60339, 24673, 39078, 3477,
-64466, 18911, 45417, 32517, 1595, 56665, 36368, 9998, 55137, 31544, 17830,
-49201, 11494, 46412, 23564, 39083, 17093, 64801, 2485, 39889, 25505, 62469,
-10085, 41241, 15877, 45744, 25806, 65397, 5702, 43055, 24707, 58673, 1849,
-35041, 46030, 10355, 31170, 49858, 631, 27247, 62295, 13762, 53258, 24264,
-39945, 9886, 64730, 25738, 44011, 7631, 30844, 56215, 21577, 45438, 5392,
-41085, 23253, 50609, 15481, 44528, 25193, 59650, 3942, 32977, 44406, 7709,
-61607, 31819, 675, 55726, 20837, 45147, 13797, 49937, 29679, 18738, 52051,
- 5043, 34493, 56559, 13384, 44539, 22247, 49994, 15959, 37900, 62538, 9395,
-33675, 44924, 20803, 52470, 14966, 65016, 22696, 44254, 8424, 61809, 21145,
-37618, 58996, 14552, 47016, 27171, 17601, 36779, 55831, 4437, 47947, 30628,
- 6580, 57308, 37592, 15607, 28911, 46466, 5616, 54058, 20288, 31552, 57089,
-13640, 47052, 19344, 27860, 45784, 15511, 60595, 27215, 17728, 53579, 28666,
- 2372, 59839, 33522, 14887, 51778, 28697, 7159, 55765, 37841, 3396, 29289,
-46429, 19796, 49686, 28481, 7749, 56011, 36550, 20365, 59660, 1307, 34654,
-62282, 18768, 45446, 3029, 39978, 26596, 61804, 13659, 49866, 29373, 7985,
-38352, 62886, 17327, 29405, 59356, 6924, 40989, 15059, 62427, 23467, 52652,
- 8226, 39776, 26982, 55559, 13290, 31269, 46262, 19879, 53514, 869, 33735,
-61246, 14915, 43857, 25366, 63498, 12458, 41327, 23538, 53361, 9916, 39929,
-22031, 50114, 16177, 56973, 35937, 4786, 51642, 28559, 7713, 63722, 35558,
- 2011, 58137, 19839, 48476, 31651, 11124, 62871, 35513, 19028, 50681, 6296,
-37557, 58710, 17660, 32770, 45933, 4108, 62734, 27458, 9036, 57641, 36672,
-20722, 63946, 3838, 34983, 52490, 8267, 32970, 63019, 3356, 48814, 29538,
-17740, 51191, 37871, 755, 48882, 22833, 61600, 3996, 39060, 19842, 59277,
- 2166, 32777, 60758, 6645, 43703, 19703, 64837, 12840, 33321, 58546, 6288,
-28003, 61254, 18154, 40886, 6772, 62658, 29714, 16833, 58778, 37085, 8359,
-52458, 31203, 16895, 50706, 29738, 9701, 57261, 31908, 811, 59159, 37406,
-17147, 65292, 24387, 42233, 1478, 47156, 19786, 52688, 37600, 2919, 32058,
-54247, 6800, 39661, 25471, 65077, 1722, 49250, 27915, 17240, 60203, 37905,
-12375, 64033, 21777, 55356, 10346, 39575, 26510, 43575, 14137, 56047, 26168,
-41029, 17824, 53011, 2731, 40516, 25531, 56495, 5785, 42891, 22454, 64937,
- 3638, 34106, 59282, 19392, 43699, 37426, 10125, 31046, 56298, 3135, 41031,
-23945, 45692, 6778, 61864, 25698, 41743, 9306, 65118, 26962, 41026, 13286,
-50664, 23048, 43810, 2690, 39022, 20548, 48867, 7042, 54475, 26289, 44227,
-18970, 52038, 13715, 47945, 31247, 6255, 58171, 22778, 43897, 15478, 27725,
-50783, 4430, 43319, 24672, 60694, 2087, 32282, 58956, 6452, 50509, 30717,
-20860, 46804, 12517, 51939, 22735, 58464, 32438, 7020, 56494, 19481, 29702,
-48984, 14401, 38132, 54642, 17669, 27295, 64361, 15245, 37056, 57566, 19095,
-44055, 33912, 4898, 48789, 17724, 55254, 35150, 1078, 52005, 20653, 40335,
-10811, 63990, 29320, 16706, 60619, 32353, 352, 57594, 35970, 10195, 29983,
-47788, 14814, 56151, 27089, 16613, 51988, 36984, 11471, 40876, 26040, 54735,
- 7384, 36972, 62666, 15007, 31751, 49225, 20447, 40408, 2148, 59832, 32077,
-10624, 55684, 24737, 48428, 722, 29744, 58531, 11059, 42101, 4226, 38728,
-26935, 56061, 17949, 45572, 2124, 32013, 54823, 10630, 38102, 61538, 8118,
-42324, 24251, 62925, 14529, 40384, 23528, 52105, 357, 34914, 62061, 17505,
-43314, 28533, 9941, 50363, 35889, 3290, 65261, 33323, 8591, 49709, 38246,
- 4404, 35018, 63581, 10973, 45448, 25403, 40036, 4997, 62233, 19387, 47953,
-32407, 12018, 63944, 35710, 15828, 56394, 720, 37297, 64663, 14569, 30968,
-52422, 8797, 44016, 27148, 11899, 53020, 36919, 22450, 57306, 7374, 33075,
-47367, 2257, 35407, 57867, 19753, 51465, 4462, 33997, 44095, 12521, 54697,
-25186, 45269, 5896, 38589, 20906, 61642, 2211, 33297, 48845, 7171, 63755,
-16527, 38836, 26883, 50152, 10857, 31120, 55633, 2951, 38677, 21276, 57241,
- 6702, 32575, 47396, 3950, 62112, 29290, 10663, 42821, 24249, 61245, 12212,
-46446, 22674, 40283, 15475, 53507, 26754, 38708, 5209, 45619, 21898, 54065,
- 2566, 41968, 24399, 64177, 14432, 49283, 28852, 10310, 55169, 38000, 16482,
-29991, 46925, 2216, 49666, 17157, 29053, 54943, 11473, 40747, 24047, 55700,
-15132, 40130, 20965, 58891, 5591, 33589, 64166, 16292, 43324, 31209, 11247,
-53657, 25335, 44101, 13631, 52746, 22695, 40204, 15043, 56594, 24868, 41488,
- 1272, 50535, 20507, 36075, 45873, 3580, 55551, 24015, 44088, 13390, 50434,
-34499, 5685, 54357, 25059, 43952, 11516, 61087, 37305, 4648, 46874, 19155,
-36017, 49908, 12947, 29075, 51272, 10190, 44947, 31515, 16585, 60459, 38293,
-12020, 27105, 64241, 16941, 45219, 23057, 58735, 14258, 34403, 43163, 10885,
-53239, 32988, 3366, 48377, 23818, 41500, 6061, 45341, 23114, 52835, 1508,
-60790, 24157, 38735, 4937, 63803, 10828, 33508, 45538, 20157, 62018, 11334,
-33503, 50366, 15299, 40831, 24000, 53162, 11116, 29019, 57507, 4729, 50435,
-21616, 44434, 15133, 64701, 29256, 12576, 51131, 35733, 14838, 55955, 22666,
-38866, 228, 53222, 19353, 32211, 62988, 9937, 46541, 24641, 57743, 14478,
-42591, 30145, 4377, 59015, 34511, 8756, 61402, 26088, 43246, 12090, 34610,
-49523, 7576, 59035, 33868, 18823, 63943, 12572, 33741, 53817, 15228, 45323,
-24318, 41787, 13973, 55443, 36910, 8087, 61532, 30037, 3769, 18095, 36645,
-45044, 13559, 51832, 36362, 2795, 63355, 30760, 8406, 49350, 36110, 3773,
-55718, 28598, 6632, 51831, 12011, 29596, 63461, 21343, 42703, 7262, 30979,
-57809, 12307, 45056, 26374, 53833, 2712, 35950, 47545, 12995, 51763, 26146,
-43254, 6052, 65032, 19526, 38053, 50254, 2303, 36187, 59469, 9388, 43426,
-22560, 64394, 3183, 28642, 58964, 20127, 42902, 1227, 57696, 27542, 8714,
-64189, 30149, 17021, 53175, 35531, 6078, 42274, 19432, 61338, 36203, 14263,
-49767, 24963, 62829, 16246, 49148, 5845, 41295, 25144, 64147, 17110, 48170,
-28699, 3971, 52355, 32300, 18241, 49687, 2448, 34925, 54096, 8870, 42726,
-20974, 56401, 12326, 32390, 54901, 4045, 44735, 25048, 58028, 15860, 40417,
-21802, 55224, 12640, 29339, 52406, 16262, 41803, 23606, 57223, 8287, 50832,
-17836, 31262, 45164, 1484, 54067, 23102, 40972, 6039, 59368, 25765, 40236,
-18956, 47759, 5080, 43061, 22396, 62786, 15737, 33404, 47740, 6118, 65365,
-16464, 40859, 26033, 51469, 14936, 63387, 23802, 41423, 10340, 28834, 47169,
-15962, 65096, 23667, 39136, 3138, 60439, 26909, 50713, 9896, 40503, 25208,
-58528, 14986, 40444, 24030, 57299, 3359, 42592, 21559, 64955, 6108, 45527,
-26032, 51529, 13443, 40111, 24954, 59079, 14423, 43873, 19173, 55387, 35003,
- 1224, 53596, 17650, 36502, 50889, 3744, 32808, 59820, 9077, 42738, 23217,
-65086, 13433, 49299, 29999, 17514, 55944, 32089, 8598, 45405, 36112, 517,
-60824, 23314, 44081, 5655, 62130, 18846, 35422, 58360, 7439, 32435, 45853,
-19195, 60402, 350, 43542, 30540, 7169, 46801, 23557, 53124, 13014, 27952,
-46084, 6415, 57257, 18348, 36270, 64669, 7545, 30724, 47552, 4436, 63084,
-30302, 8626, 48733, 37009, 16029, 61973, 29147, 8281, 54131, 37374, 15647,
-30389, 59741, 470, 39891, 23729, 64141, 14941, 38983, 3424, 49671, 28492,
-13908, 53821, 26150, 64360, 6698, 39783, 21995, 61682, 3731, 34064, 56772,
- 7387, 48906, 29136, 4505, 55281, 33354, 8711, 51332, 38019, 922, 30698,
-46994, 7501, 62927, 27242, 16468, 57838, 37283, 9642, 54084, 30345, 16693,
-58810, 38028, 13401, 32709, 46345, 8636, 57276, 22333, 49902, 16823, 30169,
-55170, 4402, 47407, 29214, 19127, 57018, 1947, 46916, 30420, 7626, 62393,
-35886, 16447, 41483, 25592, 61194, 7136, 34107, 52486, 967, 42537, 21871,
-57197, 4335, 31502, 48776, 11694, 60267, 25424, 45918, 5467, 40210, 17887,
-53827, 31144, 1372, 65462, 35285, 18517, 56127, 12833, 47152, 23037, 41065,
- 1951, 54709, 21748, 62463, 16755, 29180, 47304, 134, 42363, 25564, 52137,
- 5277, 40166, 22128, 57539, 9263, 35532, 63253, 1006, 28080, 48958, 14879,
-38399, 54274, 49895, 1578, 28528, 62323, 8039, 27080, 54074, 11824, 42713,
-24020, 60809, 12756, 45097, 20329, 33973, 47229, 16243, 58897, 35882, 2240,
-45940, 25084, 60808, 15710, 40907, 23727, 62396, 6187, 39288, 22800, 59022,
- 8104, 38639, 21170, 56695, 11348, 40580, 24055, 52679, 12252, 27655, 62273,
-17627, 28662, 46639, 5398, 51424, 34743, 16490, 38458, 48318, 10189, 35706,
-52853, 12293, 45662, 37535, 19118, 51780, 3837, 44086, 23097, 57450, 15110,
-47110, 27698, 7447, 56422, 38136, 2600, 32257, 46278, 20513, 59898, 13076,
-33808, 53393, 6655, 40346, 14834, 60989, 25847, 39958, 9364, 65079, 19985,
-28525, 59407, 13674, 47084, 26738, 38834, 7428, 64305, 16424, 38777, 21195,
-52081, 7143, 32420, 61171, 1877, 43232, 26329, 62379, 6371, 33232, 59026,
- 937, 43527, 32559, 22853, 65148, 11398, 41978, 25976, 61169, 13479, 51118,
-34775, 17694, 44432, 8572, 51729, 26938, 57189, 12232, 35525, 50071, 3582,
-28711, 54400, 17986, 44935, 31097, 351, 60089, 9923, 43921, 30822, 5199,
-56339, 21257, 50151, 809, 32587, 53674, 9366, 43097, 22261, 48898, 13357,
-30860, 57043, 17454, 45914, 4176, 52981, 35473, 8908, 47048, 25926, 54883,
-12674, 32243, 40507, 19650, 56264, 8174, 30810, 63057, 156, 52134, 26890,
-38516, 6231, 47983, 25964, 60026, 9454, 41043, 22007, 64248, 13456, 29500,
-47249, 19223, 56475, 259, 40011, 32378, 7628, 59573, 37739, 4061, 27918,
-60180, 16643, 48743, 24883, 40293, 13282, 54453, 20383, 31166, 51508, 12565,
-42814, 24520, 65041, 5106, 39120, 26585, 51479, 16623, 63477, 37156, 14182,
-56310, 32805, 2091, 38063, 60889, 19899, 33213, 49467, 1556, 40097, 24402,
-55357, 15504, 34815, 45114, 18198, 58376, 27691, 3820, 55187, 35039, 11671,
-47345, 23136, 65332, 6994, 48479, 20208, 35907, 53090, 9809, 42295, 21812,
-57877, 33770, 18828, 63050, 36393, 1622, 44630, 21119, 51952, 14389, 42038,
-25941, 54666, 11827, 40555, 22908, 63426, 12856, 36771, 43971, 15231, 57184,
-20261, 28646, 61658, 12482, 53569, 20893, 35481, 50446, 4960, 44388, 28727,
-19520, 64503, 236, 49013, 35555, 7986, 29112, 62997, 19317, 41520, 14861,
-47205, 34272, 886, 59833, 25933, 39692, 13605, 63988, 37004, 9791, 31934,
-60350, 13597, 44070, 22755, 48609, 1456, 56600, 11844, 32203, 54304, 15948,
-40032, 25108, 59442, 9695, 39031, 26566, 63993, 15764, 43450, 34228, 8369,
-57979, 21719, 30125, 60747, 12198, 48225, 26067, 40736, 9685, 51153, 27013,
-43296, 5698, 63579, 30924, 17581, 48848, 38290, 4211, 35653, 53639, 11362,
-61036, 20709, 38550, 10291, 62221, 27041, 49025, 3401, 30398, 51629, 16412,
-44732, 21441, 32908, 59707, 7506, 27309, 12012, 34068, 55681, 15183, 46922,
-32254, 18185, 36905, 59188, 4981, 40234, 22868, 52467, 1295, 61576, 23549,
-41926, 6115, 49308, 20778, 54752, 8616, 33474, 51671, 3613, 48268, 19085,
-30195, 55766, 13779, 42021, 24263, 63614, 4043, 46062, 18925, 34033, 58242,
- 1437, 47138, 33318, 8060, 53686, 35514, 14544, 57421, 30981, 12121, 54348,
-27093, 6065, 57001, 29194, 17163, 63161, 32613, 5505, 48319, 25051, 61964,
-13071, 39748, 29903, 1834, 64778, 33304, 22241, 43994, 13653, 60764, 27812,
- 8675, 55513, 37779, 223, 29707, 47231, 20024, 58421, 23908, 43069, 1217,
-56946, 21623, 33583, 48952, 5501, 41668, 23597, 52567, 3058, 60344, 22431,
-33570, 47634, 1020, 58746, 24401, 41956, 13950, 49379, 23198, 55891, 9720,
-39183, 22467, 50418, 13406, 29894, 55107, 15569, 47422, 3686, 52783, 20868,
-39057, 6680, 46656, 30713, 2893, 54933, 23923, 61875, 16836, 38863, 1627,
-60335, 23480, 40358, 19427, 61231, 10615, 34279, 56814, 13416, 39444, 23501,
-50326, 17276, 58967, 37476, 13947, 42658, 25380, 61045, 11804, 41464, 24321,
-58656, 7573, 34756, 64200, 1289, 42347, 32864, 21622, 63353, 11597, 30750,
-44010, 18187, 62543, 6814, 35864, 48929, 1873, 60391, 15496, 44448, 36289,
-18653, 48410, 11349, 42467, 21803, 65426, 12964, 44621, 20162, 31163, 52492,
- 2864, 43420, 25728, 55415, 5730, 34237, 44783, 16281, 61130, 24280, 48074,
-12244, 40658, 22629, 52050, 10976, 34642, 56742, 4510, 31510, 64631, 7752,
-47682, 27363, 1355, 57003, 36221, 9479, 46543, 21738, 55990, 12405, 36148,
-47803, 4102, 27614, 49567, 10702, 62418, 25405, 41067, 14689, 52002, 8973,
-28677, 60034, 21415, 42742, 10070, 62288, 28087, 33, 54069, 36297, 10588,
-49886, 31192, 16753, 59566, 38407, 1819, 31771, 44343, 10909, 57107, 28783,
-18320, 62052, 2424, 47461, 30151, 6295, 54842, 11167, 41532, 25388, 56178,
-10457, 31040, 58711, 2761, 47885, 18578, 36854, 57977, 374, 28128, 46889,
-18590, 59965, 2577, 31563, 50005, 6064, 45477, 25828, 39343, 2133, 60850,
-18406, 31306, 59187, 11280, 46505, 25946, 40121, 14540, 59873, 21281, 45776,
- 2860, 53528, 30791, 6477, 65189, 23803, 43047, 12160, 52561, 21390, 44980,
- 6711, 51169, 26486, 39823, 18465, 52873, 5542, 33991, 65369, 17321, 39690,
-26460, 49568, 3770, 28640, 63226, 13749, 43365, 21106, 53966, 7018, 46307,
-28464, 1884, 55260, 37336, 16923, 51363, 3266, 43087, 34736, 6444, 55670,
-20954, 62152, 2918, 38505, 20111, 53292, 14976, 36997, 57509, 10525, 27732,
-64948, 14707, 44584, 23065, 39636, 6031, 56074, 26710, 45975, 13372, 38823,
-20331, 65289, 11155, 34790, 58070, 4775, 47005, 19135, 37585, 64575, 23822,
-50836, 5362, 40551, 21478, 61311, 411, 49843, 28942, 14811, 54979, 33424,
-10183, 48595, 37956, 14537, 31769, 64531, 11517, 39400, 26333, 60051, 14496,
-38864, 26090, 65251, 9188, 34922, 46323, 848, 52726, 31465, 10544, 48959,
-25598, 61210, 9582, 29271, 44150, 15702, 63895, 25966, 41640, 3429, 60918,
-20644, 44320, 144, 38038, 65319, 18214, 33305, 50604, 2554, 44460, 22237,
-58771, 15237, 30661, 42827, 8373, 58273, 18460, 50773, 37642, 12473, 54608,
- 4970, 48160, 18929, 34609, 50981, 15853, 43922, 24692, 63317, 11884, 39376,
- 4956, 52675, 18628, 36242, 46833, 11301, 54699, 16736, 31045, 61834, 12533,
-39765, 24446, 45633, 9626, 53400, 18020, 30236, 42699, 8874, 63362, 36886,
- 4713, 29725, 46287, 18661, 64107, 3147, 41152, 25927, 60988, 6930, 39883,
-22170, 34661, 57403, 10301, 29366, 50375, 19607, 63632, 15249, 35496, 48637,
- 5796, 41983, 25031, 46595, 13909, 54929, 5534, 44330, 25817, 51271, 2581,
-42357, 25579, 63584, 8402, 46233, 28779, 3295, 32975, 64048, 7248, 52887,
-18588, 31454, 51659, 2728, 37720, 55201, 14502, 27872, 47303, 16116, 56114,
- 5540, 39301, 26858, 59619, 471, 50310, 20672, 28653, 58208, 14325, 42885,
-22383, 29403, 50667, 4346, 61033, 23535, 33525, 58129, 2635, 39898, 23937,
-48628, 5326, 62250, 16727, 33603, 58821, 8700, 40216, 23957, 62527, 9940,
-29170, 52799, 3364, 34488, 57076, 19788, 42677, 1748, 63274, 23615, 41612,
-15214, 50393, 21903, 41417, 10786, 33871, 61774, 14449, 40079, 26152, 54094,
- 2709, 32984, 61396, 8946, 29567, 58588, 18168, 44334, 35606, 5440, 54112,
-21682, 43099, 3577, 58210, 35250, 17326, 53179, 5052, 46958, 19966, 37981,
-50693, 14106, 27106, 64358, 19616, 44985, 5895, 52607, 28278, 20697, 60966,
-14333, 35284, 52061, 5229, 46612, 24938, 40914, 14352, 60416, 20677, 50422,
-35602, 17286, 47897, 5228, 62337, 37565, 16109, 45209, 24414, 62816, 6330,
-32346, 52341, 10038, 34696, 50573, 21302, 41444, 10994, 63702, 35139, 19036,
-58395, 13321, 48955, 24480, 42980, 6882, 51871, 34292, 3597, 55628, 22702,
-50947, 5822, 39357, 25212, 56660, 12771, 34994, 50886, 18506, 38970, 7888,
-58463, 31610, 3204, 61284, 36163, 17127, 57680, 113, 42391, 24492, 55980,
-14440, 29747, 46872, 9150, 59055, 20242, 36162, 51551, 7930, 47325, 30449,
- 2910, 36607, 62242, 17025, 33097, 47581, 10868, 62817, 24378, 40623, 14176,
-64286, 24225, 47568, 15557, 39628, 25041, 45726, 11544, 60534, 23333, 49871,
- 959, 31678, 46542, 7040, 52223, 33619, 2639, 59661, 24602, 49837, 16167,
-41675, 1528, 60038, 25247, 52758, 6913, 41034, 22973, 50105, 13550, 29231,
-56211, 3194, 41785, 62878, 29126, 17039, 57088, 35370, 10935, 46378, 20489,
-37750, 58307, 6917, 27251, 63727, 17107, 28072, 56924, 4444, 45018, 24256,
-53114, 224, 30167, 47279, 7106, 56312, 21974, 43136, 15351, 58549, 27765,
-17702, 61925, 35767, 14961, 41476, 2950, 51335, 36767, 19971, 54633, 5120,
-48802, 21428, 38752, 10303, 48015, 25952, 56360, 15503, 28091, 47533, 9225,
-59527, 25903, 39864, 9733, 33739, 49712, 466, 54824, 21187, 34442, 47562,
- 6908, 28054, 61724, 21419, 41964, 10540, 64348, 29521, 3663, 59252, 35993,
- 7156, 54983, 22896, 48989, 16132, 33195, 58918, 7706, 29615, 63600, 4114,
-42938, 25669, 55933, 1494, 50191, 29487, 14328, 58257, 35757, 6451, 61523,
-20256, 48329, 28218, 15361, 56356, 38231, 11451, 52000, 31965, 20348, 54273,
-12328, 36007, 48356, 18462, 62973, 5301, 41641, 23506, 60290, 244, 33227,
-43739, 8317, 57797, 20597, 29144, 64979, 11181, 52979, 37728, 18402, 31739,
-63090, 9474, 39117, 21193, 58404, 5797, 32586, 52247, 18984, 36309, 55888,
-12536, 44694, 23254, 38801, 4184, 46133, 21533, 62759, 16505, 29916, 44445,
- 8390, 61343, 34267, 19909, 49527, 12234, 54076, 22623, 42276, 15203, 37182,
-51889, 4736, 33726, 53413, 7865, 64586, 17530, 31878, 41746, 8922, 54294,
-16495, 29582, 50835, 9282, 56605, 26688, 38657, 11030, 53894, 19659, 28892,
-49917, 1548, 33256, 51197, 14641, 42156, 23719, 64767, 6508, 29836, 54523,
-16180, 45817, 29470, 7166, 60597, 35202, 2965, 56209, 24023, 43101, 17844,
-48765, 4704, 60093, 23047, 41695, 15891, 50141, 25218, 39650, 1221, 52224,
-31542, 9627, 65194, 26711, 48424, 16078, 31525, 46525, 10700, 63826, 25999,
-39660, 13170, 60514, 29987, 7031, 56224, 37327, 2839, 41259, 24924, 58698,
- 9572, 36236, 43205, 3961, 50013, 27264, 17085, 63819, 32130, 11951, 36661,
-55736, 9063, 43713, 28410, 153, 59476, 22600, 42596, 28376, 7950, 52975,
-34738, 10984, 28920, 53916, 14659, 41393, 24532, 64884, 6970, 28932, 53183,
-16373, 44484, 28193, 3940, 54916, 36347, 8547, 30123, 65454, 15886, 41047,
-23599, 62566, 12461, 44836, 18383, 32931, 62041, 10582, 42019, 26387, 60516,
- 2021, 47867, 24349, 44013, 16056, 55394, 23515, 41291, 9519, 49390, 22106,
-34120, 62612, 8483, 45001, 36334, 2364, 61436, 24945, 42448, 5218, 54859,
-18642, 33266, 57374, 12801, 44757, 24618, 49461, 9161, 58625, 19263, 29806,
-44360, 5010, 52171, 32537, 10471, 54949, 440, 31094, 59745, 8433, 53625,
-26954, 38667, 7625, 44923, 25535, 59418, 13976, 40490, 21026, 56918, 17114,
-46043, 29091, 7852, 64084, 35755, 21538, 48100, 9625, 43498, 26923, 59213,
- 512, 36196, 61885, 17349, 32233, 45291, 10626, 1775, 33663, 53038, 7206,
-43338, 24762, 65132, 4284, 51193, 17686, 34804, 46153, 2071, 53618, 36145,
- 9826, 40723, 20477, 58496, 12803, 36117, 62616, 17061, 32400, 41771, 3105,
-53689, 31485, 7699, 37686, 50087, 4932, 43930, 23206, 60024, 17362, 30372,
-57492, 8890, 40317, 25332, 59201, 13536, 42506, 23175, 62452, 7195, 32118,
-52373, 4050, 41396, 23583, 46266, 6788, 63817, 21332, 43624, 13454, 62196,
-26903, 40780, 4499, 60336, 16976, 45810, 36280, 968, 53316, 25033, 40538,
-15184, 46726, 22334, 51923, 11281, 32566, 42573, 2739, 65370, 24255, 45008,
-14420, 39751, 22314, 51568, 17908, 38647, 10399, 44208, 18912, 64659, 37341,
- 4371, 49159, 16700, 32563, 53922, 2332, 34907, 44686, 7612, 60518, 27398,
- 506, 37271, 58603, 8186, 45734, 28350, 1704, 55676, 31426, 15051, 51756,
-37180, 10926, 48391, 24869, 55316, 13873, 31505, 51888, 2192, 43711, 35172,
- 7270, 28427, 59294, 596, 43369, 24432, 55958, 12849, 41279, 23052, 47032,
-15032, 61929, 1466, 41659, 25732, 58159, 10193, 47773, 26899, 56589, 12393,
-33249, 48335, 5809, 54238, 24302, 40760, 1946, 59029, 25922, 44857, 3908,
-31957, 64345, 8511, 44681, 24101, 61475, 11498, 39887, 25741, 46789, 1081,
-57383, 20374, 45223, 35670, 4893, 63637, 19152, 33378, 43578, 765, 60874,
-22770, 47443, 6053, 36927, 63935, 13295, 45087, 22221, 55599, 8024, 32371,
-46550, 18577, 50507, 9810, 33428, 58566, 12548, 43305, 24861, 52225, 16436,
-32845, 63639, 6462, 53388, 31067, 20829, 44483, 12103, 52521, 34227, 6124,
-64054, 20720, 43178, 15115, 59657, 24155, 39873, 12220, 55241, 579, 39351,
-20600, 50858, 6228, 33836, 57096, 1955, 41474, 22625, 48667, 16829, 32500,
-62550, 13044, 44338, 21767, 48727, 15320, 63160, 33223, 10554, 57488, 37697,
- 1083, 51111, 24083, 45798, 4355, 30580, 65121, 16091, 34574, 46693, 11716,
-54459, 19386, 36250, 64629, 1780, 48460, 19193, 36553, 60933, 3435, 47296,
-17707, 37046, 56132, 1132, 32489, 61906, 9975, 48456, 22098, 40227, 17705,
-56668, 616, 32582, 54243, 7368, 38797, 26864, 57288, 1359, 38659, 24281,
-49363, 5257, 54832, 21007, 39849, 14362, 63471, 29203, 4868, 48655, 35451,
-13421, 64593, 30895, 5850, 51934, 19674, 30687, 55214, 13152, 49229, 21196,
-39067, 11325, 45905, 26263, 64152, 559, 40312, 23311, 60951, 5846, 38715,
-22197, 53635, 1235, 36277, 56226, 16130, 28222, 60102, 18894, 37552, 44853,
-14874, 49607, 23613, 41371, 3789, 64653, 21180, 51702, 10185, 39005, 26770,
-63167, 4679, 32878, 42500, 10711, 55859, 32511, 18799, 52347, 5070, 31613,
-56769, 18366, 39062, 10627, 53375, 25432, 42886, 6232, 54673, 20777, 48438,
-60400, 14229, 39659, 21946, 57872, 11660, 38830, 26915, 44397, 9501, 60374,
-19429, 28926, 43683, 14009, 61913, 25644, 42762, 6423, 51297, 22797, 44513,
- 9767, 49799, 21062, 60934, 13024, 44948, 24835, 64234, 14443, 31086, 56120,
- 9966, 35116, 52581, 540, 43075, 22135, 64703, 6745, 34472, 52906, 1739,
-45983, 29127, 17227, 57607, 36486, 12850, 61503, 30182, 14869, 52706, 35773,
- 3089, 56101, 24967, 38711, 10084, 52403, 19061, 32918, 54017, 11009, 29520,
-49172, 17786, 58386, 8136, 31802, 63038, 1703, 39089, 26614, 57114, 17119,
-30227, 53882, 8589, 35115, 50184, 564, 59784, 32834, 6838, 62772, 21342,
-48174, 34090, 8342, 51527, 20927, 28765, 56718, 10894, 40164, 23920, 65461,
-13411, 49651, 19885, 33787, 53812, 15981, 42557, 24502, 64803, 13758, 35299,
-46770, 19067, 59228, 7221, 30042, 64433, 18001, 42768, 4671, 61324, 37367,
-16388, 27223, 58641, 20170, 47139, 14531, 53750, 34108, 10949, 49879, 29854,
- 3699, 65199, 35436, 8083, 50936, 26623, 38977, 20148, 53368, 4865, 32451,
-64606, 17797, 39231, 225, 59801, 22199, 38841, 10744, 65491, 18599, 32162,
-47816, 9218, 36554, 56528, 16395, 39568, 21792, 54477, 2404, 30918, 48083,
-19006, 58788, 13871, 38687, 26831, 49901, 11150, 60118, 17414, 30746, 47313,
-10068, 55714, 26184, 41687, 11670, 30238, 57949, 16980, 42978, 27811, 4179,
-59192, 37134, 19436, 60984, 659, 41334, 24698, 63018, 4624, 39105, 21526,
-55710, 1028, 36787, 48913, 9026, 27569, 46232, 15084, 37520, 62519, 132,
-28638, 57307, 10967, 45019, 26357, 53436, 8603, 32632, 46695, 4276, 56739,
-33780, 17643, 62169, 24989, 42235, 13751, 54648, 22021, 45016, 14688, 31216,
-61524, 4607, 53782, 27182, 8116, 38326, 52122, 715, 30346, 54997, 7231,
-27092, 47844, 15991, 43740, 21908, 61770, 8578, 33105, 58379, 19141, 49006,
- 6857, 38952, 26400, 60063, 3851, 49418, 29785, 13266, 43883, 22447, 58139,
- 9270, 30973, 42681, 21935, 59199, 8563, 40082, 25863, 51866, 15620, 42348,
-26555, 59491, 5344, 46811, 24052, 41718, 13682, 48183, 21937, 61203, 11634,
-31486, 48047, 17461, 64769, 9028, 43708, 32105, 11987, 59446, 36485, 7426,
-51827, 32811, 19847, 56764, 1612, 41947, 25360, 46949, 15776, 59999, 3595,
-39435, 26392, 63713, 6455, 32293, 58190, 17706, 50119, 8524, 31168, 52998,
-14742, 42842, 25637, 51704, 9903, 39578, 26743, 61801, 8033, 33587, 50143,
- 3502, 46355, 27420, 6939, 62601, 34644, 12302, 57615, 22580, 47212, 14412,
-33067, 56357, 2142, 43201, 22745, 48275, 12954, 60847, 27708, 690, 50200,
-37589, 15046, 62768, 23793, 42791, 2996, 61303, 22664, 46141, 14353, 33470,
-64214, 12157, 39180, 24937, 42419, 26352, 51982, 3542, 41436, 23684, 61720,
- 1161, 49675, 21643, 33199, 54749, 7598, 48355, 32335, 3389, 56002, 18620,
-33762, 64930, 1756, 40323, 25590, 56481, 5573, 38507, 26695, 55463, 1323,
-40439, 22246, 50976, 4133, 27709, 62555, 13376, 47948, 26264, 38963, 11497,
-50302, 19016, 28258, 63211, 14992, 33285, 49403, 4758, 42259, 24862, 51404,
- 1091, 44874, 22559, 57914, 16548, 30424, 50963, 7290, 44740, 23669, 65224,
- 2382, 42349, 22143, 59561, 6195, 44315, 34160, 19690, 55739, 13258, 44302,
-21330, 61419, 5423, 47095, 13043, 40719, 23189, 57742, 12370, 30647, 46174,
-15674, 53848, 24852, 40059, 3316, 58834, 17271, 31462, 62142, 152, 43389,
-22871, 59173, 5551, 46073, 25935, 39098, 3735, 62814, 10414, 31547, 51547,
- 5086, 40759, 21409, 57879, 3526, 32973, 43109, 23002, 54168, 2691, 40795,
-21403, 33884, 47030, 8025, 53377, 38433, 10376, 33099, 64221, 4838, 40092,
-23316, 62133, 17469, 37816, 53022, 14556, 28655, 58845, 18712, 42081, 6042,
-61304, 16239, 49310, 24584, 40576, 9133, 54863, 26489, 45181, 14948, 51793,
-25200, 41546, 4891, 52966, 21084, 62650, 13800, 29379, 48551, 5654, 60168,
-25116, 41305, 9705, 62376, 32749, 3662, 45644, 23119, 56018, 5703, 40756,
-25024, 44116, 1984, 58390, 24232, 38897, 6739, 65142, 21841, 51836, 2213,
-35580, 54155, 14897, 48210, 31314, 10550, 51960, 28501, 16704, 56327, 36768,
-11069, 49315, 26513, 44144, 14358, 65498, 28947, 19262, 54139, 38264, 3698,
-56469, 27100, 9747, 51090, 38283, 16451, 30852, 59208, 2559, 39924, 23493,
-61921, 14153, 39295, 21425, 51367, 7751, 44887, 29876, 3141, 58406, 34847,
- 7457, 65405, 25094, 51509, 10394, 35800, 43696, 18384, 59384, 28116, 11920,
-64753, 34546, 17596, 38429, 60076, 3348, 30641, 56238, 12577, 40361, 25420,
-53979, 2298, 41155, 25257, 57157, 9874, 45272, 21947, 40647, 15455, 61727,
-37153, 5056, 50887, 25550, 45698, 16216, 54518, 5563, 34074, 49864, 20437,
-62623, 11877, 39044, 3189, 53935, 19613, 31972, 63836, 9513, 44722, 26605,
-57749, 4428, 39454, 25989, 55464, 2967, 40553, 23323, 52200, 15911, 27956,
-53786, 461, 45875, 27688, 15765, 62105, 37369, 9991, 50406, 21658, 58290,
- 6951, 29132, 44281, 20521, 54579, 10011, 41717, 24429, 52400, 2016, 41631,
-21912, 35835, 59675, 10832, 28025, 64879, 2538, 34718, 59080, 19904, 48735,
-11677, 43869, 21905, 65163, 13191, 35844, 56723, 17538, 29542, 50801, 1654,
-44152, 25994, 39462, 5547, 61635, 18415, 29365, 54587, 9210, 34844, 51041,
-16519, 38022, 45119, 20300, 58790, 6667, 28978, 48495, 13117, 36264, 51361,
- 8356, 30560, 58495, 2453, 41390, 22063, 56541, 5548, 18863, 63561, 10024,
-32837, 56076, 13214, 45558, 31054, 15803, 58636, 5245, 40526, 23017, 63236,
-15695, 38185, 49844, 8875, 28754, 47515, 19775, 59518, 11869, 39055, 27035,
-62972, 9098, 47713, 17284, 34897, 59854, 11622, 44303, 37893, 16360, 29938,
-56426, 5721, 45648, 24124, 57286, 3780, 36324, 42946, 9035, 53911, 22129,
-60783, 11234, 38681, 19907, 64889, 10304, 33985, 40679, 5436, 62942, 18483,
-32231, 55332, 12039, 39656, 25901, 56687, 9435, 38815, 26684, 63932, 3014,
-41028, 25848, 50656, 6433, 39537, 24323, 52819, 18017, 34058, 60852, 3859,
-43211, 25743, 62425, 5825, 28639, 42327, 13046, 55702, 19669, 33184, 48749,
-11316, 40899, 25210, 54729, 8587, 38549, 27028, 52390, 12447, 57293, 21210,
-43963, 28928, 17628, 59474, 36631, 11956, 48877, 23922, 53231, 9924, 62675,
-16404, 34927, 48793, 11187, 57628, 27643, 14647, 63394, 29678, 1274, 56115,
-22734, 45909, 15400, 31265, 52268, 2425, 46351, 27132, 7441, 57101, 36766,
- 1023, 47749, 24114, 55401, 13206, 29661, 45112, 2088, 60285, 22489, 43530,
- 6613, 35972, 62162, 3039, 30452, 57764, 11937, 45244, 24926, 39918, 713,
-58378, 20478, 32391, 46064, 13224, 51546, 28053, 17748, 53086, 36792, 10695,
-64108, 19550, 34375, 50449, 8460, 62806, 33013, 14512, 53339, 20220, 40590,
-12519, 46229, 33349, 18439, 27427, 63368, 6273, 41352, 23814, 61916, 2916,
-35651, 46293, 6841, 31304, 60323, 19923, 52669, 8360, 33058, 47358, 5529,
-57932, 12881, 32222, 61512, 16569, 47309, 31955, 20493, 64449, 5033, 48309,
-19072, 35317, 54438, 7249, 29863, 49303, 1735, 58849, 27907, 19197, 63586,
-36689, 11598, 49351, 18497, 45831, 28839, 1050, 33176, 47058, 15653, 56773,
-29901, 2634, 50168, 37115, 20498, 47420, 9104, 53746, 28336, 18500, 49693,
-36647, 5546, 64452, 17882, 34176, 47177, 13858, 50907, 20492, 33040, 63588,
- 1290, 48487, 29151, 9005, 56418, 33259, 18787, 64039, 660, 39643, 26662,
-60223, 14005, 43754, 2222, 30214, 46503, 21746, 58303, 36637, 10790, 50515,
-23087, 39037, 1910, 53008, 18549, 34797, 64227, 10426, 46122, 19156, 34087,
-60366, 4682, 47604, 33776, 10708, 58353, 37751, 19483, 47322, 4049, 54350,
-30068, 13925, 45690, 33792, 17305, 64261, 37141, 825, 47491, 22736, 60613,
-12359, 38794, 26822, 63000, 15732, 48615, 4222, 37176, 54555, 18231, 47702,
-30719, 13698, 41527, 4564, 55585, 26991, 38798, 2237, 52623, 24531, 40330,
- 5283, 59060, 19594, 35596, 63664, 8231, 48944, 20350, 35408, 50465, 12132,
-38331, 57826, 3620, 27211, 65232, 7488, 28995, 53241, 12568, 36635, 56145,
- 4329, 32147, 64739, 20259, 42056, 16234, 46817, 24982, 52617, 9480, 32858,
-46495
diff --git a/src/main/ran.509.131.h b/src/main/ran.509.131.h
deleted file mode 100644
index f6dd323..0000000
--- a/src/main/ran.509.131.h
+++ /dev/null
@@ -1,6084 +0,0 @@
-/*
- * "$Id: ran.509.131.h,v 1.2 2001/02/25 01:58:36 rlk Exp $"
- *
- * Square dither matrix file for the gimp-print plugin.
- *
- * Copyright 1997-2000 Thomas Tonino
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
- 0, 54481, 28629, 16669, 50007, 36603, 8133, 60381, 20398, 30495, 48890,
-10730, 62798, 23970, 40322, 2802, 54344, 21688, 38442, 10209, 56353, 25482,
-38320, 2124, 62617, 23786, 48600, 10308, 39832, 22001, 63565, 1184, 43579,
-25561, 54292, 10403, 41040, 21906, 57902, 5990, 30748, 45450, 19953, 65463,
- 2046, 32297, 44526, 13515, 55978, 24038, 41526, 5487, 63718, 17032, 37060,
-50207, 10248, 28360, 62025, 17711, 41907, 1927, 54848, 34655, 20809, 45069,
-11007, 59493, 26847, 40535, 2713, 51548, 28271, 12561, 62923, 37996, 16374,
-29028, 48217, 675, 60338, 24251, 39673, 11001, 48607, 21548, 56750, 2856,
-33891, 45663, 15665, 59890, 27975, 7615, 49365, 37553, 19984, 55682, 10616,
-42429, 25285, 58403, 1259, 32401, 52086, 19355, 43194, 10741, 63987, 26867,
-39972, 6453, 48528, 21545, 61487, 10237, 34918, 44087, 20496, 51690, 2914,
-32050, 62153, 12872, 42852, 23635, 51702, 1359, 32813, 65367, 20101, 46196,
- 9728, 37522, 52534, 16718, 30182, 57089, 6229, 43656, 21601, 51358, 10572,
-32555, 58716, 18260, 48003, 732, 38598, 26902, 64930, 12411, 48153, 30803,
- 2789, 54680, 35624, 17222, 50347, 8071, 33372, 58016, 21033, 44269, 13152,
-31394, 61158, 6915, 48730, 21913, 39460, 14506, 57671, 30309, 4605, 49736,
-37823, 18459, 61110, 686, 32886, 47994, 17271, 54551, 10422, 39263, 23326,
-64754, 8270, 32141, 51869, 16805, 47852, 28974, 52, 57719, 35743, 10833,
-47309, 23281, 65071, 13849, 31614, 50729, 4104, 45189, 28005, 15482, 59521,
-35393, 741, 48737, 25845, 54453, 9375, 41626, 21578, 58478, 14048, 32352,
-45900, 6450, 65471, 23712, 42191, 9239, 52173, 17111, 31042, 57970, 4788,
-44913, 28176, 15462, 52291, 35497, 2181, 64853, 21691, 45228, 9396, 33026,
-61727, 16918, 44731, 27418, 917, 55703, 38133, 15671, 29448, 47046, 3278,
-65005, 24723, 39589, 14307, 57141, 30498, 638, 51230, 35996, 17877, 58770,
- 4442, 47228, 27128, 39483, 13413, 60090, 21967, 43681, 4984, 56553, 29154,
-15259, 50549, 36370, 10306, 60064, 25190, 48121, 3424, 39333, 21505, 59129,
-10842, 30865, 50469, 20018, 41894, 3107, 63160, 31076, 17015, 50266, 37726,
-10021, 53087, 20380, 33854, 65169, 5244, 41873, 17519, 52200, 30762, 9114,
-58287, 38045, 15738, 28089, 48900, 4537, 62391, 22662, 40876, 11988, 55112,
-26901, 38757, 9620, 60223, 17370, 47452, 30772, 3233, 62181, 34922, 18709,
-53934, 9634, 44026, 35206, 20301, 56560, 6846, 49173, 22245, 41009, 10690,
-64725, 31343, 15869, 49795, 37034, 2310, 57563, 23634, 43283, 12105, 52468,
-17782, 33953, 64217, 8829, 43360, 24976, 56341, 12755, 38991, 21869, 52565,
- 4449, 33246, 65300, 15052, 44342, 27421, 9687, 53878, 35434, 14957, 60988,
-28118, 3284, 50031, 37002, 16470, 64983, 29159, 539, 49751, 36358, 18438,
-62371, 5386, 32673, 53728, 15267, 46284, 27728, 7963, 58927, 37508, 14582,
-53933, 28828, 9595, 50133, 37382, 21042, 65240, 2872, 41948, 26053, 57912,
-13865, 48678, 32990, 1741, 62774, 35536, 17775, 53117, 7747, 32237, 47777,
-21022, 55260, 11511, 39239, 26718, 61911, 6384, 48640, 25100, 41694, 9720,
-60009, 19784, 36623, 50568, 5577, 29184, 60845, 19804, 47245, 8254, 31891,
-57708, 18983, 43063, 5282, 52609, 21138, 32551, 61341, 1879, 46989, 18286,
-32040, 60255, 11172, 45422, 20953, 30127, 55231, 6769, 44568, 20340, 32212,
-59678, 11112, 48800, 21783, 40293, 3219, 55636, 25750, 39175, 12512, 58720,
-22746, 48302, 6298, 34077, 54156, 18739, 42463, 2451, 60030, 26430, 40000,
-14648, 52630, 29423, 315, 57001, 37117, 17701, 49576, 10666, 30528, 65130,
-19133, 41338, 7240, 50482, 29211, 14047, 56734, 37660, 4565, 49557, 27311,
-16884, 61202, 35447, 13174, 64425, 23599, 44288, 3461, 31633, 57703, 15434,
-43949, 27535, 6460, 55011, 38106, 12669, 29836, 48467, 19609, 65089, 7500,
-40814, 27256, 60214, 12428, 40055, 21313, 50986, 6304, 34108, 56069, 12053,
-46174, 28273, 16564, 61314, 37946, 3829, 31363, 53527, 14125, 43058, 24547,
-60771, 9092, 34855, 52207, 15612, 48524, 27681, 3458, 59917, 37169, 20843,
-49639, 8294, 32363, 57015, 20630, 45958, 6755, 32930, 58311, 15541, 47870,
-28324, 5745, 52543, 35826, 18519, 65165, 9529, 44159, 20959, 32845, 56712,
- 4094, 43620, 22437, 53461, 9550, 31565, 62440, 13619, 47062, 25556, 38502,
- 5083, 49266, 25161, 65147, 12671, 40728, 21763, 54687, 442, 35819, 51099,
-15058, 31071, 64411, 5284, 45972, 28096, 16418, 61179, 38221, 8953, 29619,
-49214, 18028, 57044, 2112, 38653, 25373, 52989, 13371, 32480, 58182, 7224,
-45310, 27956, 16870, 54356, 37244, 4581, 59392, 27336, 16165, 49298, 35917,
- 7897, 57835, 27954, 15304, 49756, 35442, 4037, 61899, 25139, 47503, 12379,
-39957, 24253, 64251, 4331, 41900, 22718, 56478, 9699, 32328, 53489, 16045,
-45411, 28824, 6628, 61994, 37115, 19723, 45407, 10183, 60360, 26879, 38962,
- 4529, 55371, 25450, 48004, 11209, 40717, 25195, 64151, 1215, 34324, 53963,
-16797, 45676, 27873, 6852, 59506, 35674, 20859, 51734, 12293, 41255, 26663,
-61593, 2142, 46156, 28746, 14667, 55971, 36922, 4247, 45875, 24819, 59913,
-13004, 40538, 24670, 55071, 5685, 43057, 21382, 61121, 9313, 37825, 51877,
-17050, 30624, 57715, 6594, 46349, 23920, 38658, 12743, 63637, 22518, 47221,
- 4637, 37759, 56783, 16662, 28608, 50124, 1577, 34738, 59725, 20692, 45882,
-11947, 41495, 25771, 63030, 7005, 33521, 47118, 18945, 56832, 11882, 38993,
-26843, 51280, 4412, 37555, 57541, 14256, 30464, 48197, 7537, 62892, 22193,
-40157, 11757, 54096, 26939, 43546, 7106, 61750, 19956, 33038, 46585, 8841,
-55624, 22624, 39729, 11363, 65185, 25517, 43303, 1893, 54181, 17939, 35663,
-49755, 8596, 31639, 64217, 19079, 46703, 6049, 40493, 26662, 55456, 12817,
-43834, 22800, 64544, 878, 33622, 47216, 14847, 52950, 28226, 6465, 58241,
-35527, 14222, 49387, 27633, 1473, 59639, 37296, 13477, 45753, 25249, 56063,
- 3216, 38970, 21785, 63435, 13407, 44825, 30445, 6848, 52147, 37129, 18281,
-60742, 2495, 33657, 50414, 16291, 45975, 28719, 6266, 56979, 37752, 20755,
-51696, 11681, 42688, 26342, 64071, 224, 30431, 47562, 13548, 60608, 26001,
-38503, 3060, 54860, 24259, 43530, 9152, 59423, 17954, 30037, 47817, 7419,
-62817, 25406, 39526, 4723, 50293, 19148, 30469, 58439, 1777, 41333, 23103,
-62197, 10002, 30757, 46908, 16869, 57142, 28665, 2335, 49447, 37272, 19451,
-62125, 8152, 42826, 25381, 52507, 13150, 33901, 56144, 6839, 42971, 23452,
-58341, 9349, 34489, 52051, 14298, 42439, 25552, 61813, 1327, 35377, 49859,
-16571, 31575, 63530, 4522, 45124, 27655, 15611, 60120, 38212, 7746, 28946,
-55068, 18725, 47550, 4497, 39205, 23256, 56514, 10191, 30237, 44744, 14181,
-63824, 24716, 39320, 4242, 57383, 18274, 31409, 45626, 2013, 58647, 22409,
-38310, 12697, 54774, 26088, 43829, 3094, 63170, 17040, 34690, 52392, 10126,
-41923, 25030, 55513, 37, 38670, 27083, 63573, 11666, 48025, 17393, 34267,
-56719, 8206, 42228, 25656, 51011, 3634, 34257, 62351, 13222, 42029, 24520,
-56767, 2279, 39432, 22493, 52733, 14157, 31934, 65013, 7585, 44755, 30961,
-18499, 61095, 4430, 43928, 20825, 31511, 55480, 9385, 41332, 22622, 62969,
-12935, 33207, 50238, 4225, 42972, 22593, 63787, 13494, 32486, 44375, 4939,
-52678, 20691, 34683, 59171, 1439, 43497, 23119, 52172, 9984, 32941, 62874,
-16012, 45284, 27864, 6013, 53021, 37634, 19647, 41663, 7603, 48651, 26740,
-56158, 13135, 34594, 46537, 1609, 64052, 20854, 33760, 45815, 4710, 57678,
-17975, 33864, 51707, 561, 43476, 25699, 53597, 14096, 32937, 59035, 3308,
-45060, 27463, 16893, 64734, 38099, 7499, 30136, 55233, 11401, 47688, 20415,
-33720, 57385, 649, 45983, 18015, 29736, 64036, 6826, 43784, 35482, 17518,
-53947, 10533, 34612, 62416, 17207, 42268, 263, 52515, 29132, 14613, 63872,
-37106, 3677, 50143, 27337, 16393, 60077, 38128, 1019, 30610, 55309, 15580,
-48291, 27710, 8114, 63466, 37101, 17572, 49828, 2246, 33674, 58357, 19662,
-44461, 7142, 33523, 50128, 14399, 59137, 26513, 38623, 4302, 47906, 24581,
-61619, 8619, 41134, 24064, 56082, 12028, 40488, 21767, 51055, 2763, 33300,
-54929, 17301, 45510, 5952, 33099, 62230, 20779, 42805, 11783, 48841, 26846,
-63499, 1121, 40183, 22970, 50667, 11115, 32948, 64689, 14158, 44601, 27822,
- 6551, 52343, 37607, 20502, 63026, 445, 42948, 26481, 54699, 11665, 39014,
-21384, 59314, 1668, 33538, 52859, 15556, 45039, 28668, 8195, 60738, 37505,
-19548, 51029, 2466, 42639, 25925, 59194, 13837, 31782, 51406, 1352, 42724,
-23893, 65108, 12942, 41024, 21595, 52324, 2955, 35677, 59045, 15421, 29753,
-49979, 8078, 42499, 22709, 62568, 11719, 40666, 24987, 54858, 3650, 43730,
-18102, 57918, 30044, 9542, 50106, 37039, 18728, 62843, 6692, 33515, 52610,
-20444, 43003, 9856, 63843, 21986, 38481, 3067, 48867, 26682, 56332, 13043,
-33278, 44381, 1802, 64012, 27525, 14859, 49831, 36777, 8722, 55899, 26635,
-43368, 3090, 61266, 29475, 14695, 53506, 37003, 7960, 46571, 24167, 63724,
-10524, 39274, 22197, 56192, 3468, 37727, 50460, 16114, 29598, 60603, 470,
-42421, 23802, 53131, 8682, 31623, 63904, 16697, 44420, 27763, 1839, 53303,
-36948, 17029, 58581, 28628, 5024, 49780, 35596, 17777, 59619, 2467, 37650,
-53016, 15539, 29430, 45282, 5461, 57850, 29014, 16812, 50766, 36237, 7418,
-61218, 24625, 42516, 12204, 56845, 22528, 39037, 1417, 53402, 30605, 16005,
-62325, 35359, 4096, 49814, 28632, 16831, 56617, 37273, 5023, 45416, 25173,
-61072, 12329, 40783, 22805, 55350, 8297, 45938, 30646, 16570, 62235, 35163,
- 5872, 47760, 23460, 54113, 10968, 40784, 26299, 56817, 601, 49113, 20379,
-34174, 58073, 8975, 42776, 24560, 53725, 13382, 31710, 64809, 1367, 43903,
-27452, 14735, 61099, 36512, 5837, 49860, 18045, 32922, 56922, 9129, 44264,
-32009, 19332, 53827, 6399, 42352, 22669, 63185, 12055, 33745, 52092, 20158,
-45119, 890, 35186, 54390, 14888, 30630, 60471, 11229, 42361, 24226, 52160,
- 5989, 34120, 54544, 15053, 44466, 27546, 7469, 60234, 37433, 12313, 51375,
-21398, 32508, 57983, 5102, 45660, 18255, 31590, 63276, 1014, 41463, 21829,
-51194, 14874, 31987, 64210, 3556, 47377, 24151, 39737, 11156, 57493, 21472,
-43599, 6889, 54700, 26044, 39218, 11201, 56648, 19754, 34103, 51963, 406,
-42838, 23210, 62424, 10683, 36135, 50715, 15429, 30728, 59358, 6705, 48939,
-24791, 40988, 1087, 60162, 22536, 47164, 9568, 33546, 53973, 13517, 42113,
-24568, 65320, 5850, 34115, 51584, 17323, 42835, 8772, 57895, 32637, 20942,
-49825, 4665, 30595, 62219, 20504, 44548, 13318, 34374, 59920, 6724, 42772,
-24123, 54629, 3124, 40654, 22939, 65410, 10315, 36689, 53806, 16381, 29223,
-48187, 6379, 58459, 18825, 31355, 46909, 10699, 60535, 26356, 38380, 223,
-49046, 22632, 56860, 10143, 33890, 46755, 14995, 62313, 27900, 1628, 51155,
-36125, 17259, 58208, 5564, 47537, 30502, 16170, 53213, 37388, 7250, 57522,
-23889, 46009, 12587, 31244, 62142, 8151, 41953, 24004, 54829, 12592, 39508,
-21813, 60027, 2542, 42827, 23165, 51552, 10615, 31628, 59496, 33785, 63386,
-14938, 46736, 22626, 39259, 5515, 60937, 29658, 16134, 50937, 36432, 9197,
-55834, 24726, 42925, 13027, 59630, 24188, 38768, 5627, 61605, 22351, 48431,
- 9107, 36538, 56881, 15461, 29546, 52317, 1429, 43331, 23299, 60191, 13840,
-36846, 50063, 5715, 29407, 62632, 19322, 44003, 10245, 32071, 49632, 20963,
-58175, 2729, 31130, 46598, 19702, 56645, 5904, 31035, 45293, 21176, 60979,
- 9278, 34797, 44231, 12812, 57650, 23370, 41274, 7425, 51143, 33799, 17932,
-62199, 11802, 42129, 23571, 52366, 4631, 33434, 55964, 19941, 46499, 8859,
-40902, 26203, 61646, 12252, 48783, 22818, 40373, 1373, 54101, 18387, 34308,
-63422, 10885, 45348, 17955, 35376, 53652, 1738, 30359, 60398, 14510, 45142,
-27432, 7735, 64972, 36221, 19840, 52566, 10374, 41763, 26021, 59205, 4348,
-39685, 21952, 55416, 9403, 33233, 46822, 18485, 60996, 5983, 38639, 26461,
-57189, 2395, 47743, 18479, 33569, 55814, 8833, 41744, 24464, 60089, 13137,
-32904, 50922, 4844, 42543, 24688, 57373, 10780, 34681, 48578, 19744, 62421,
- 5910, 34055, 47091, 17387, 57978, 10198, 39721, 22668, 53196, 4324, 33698,
-62622, 16339, 45957, 28678, 5954, 56759, 35777, 17550, 50643, 9912, 43389,
-23507, 62271, 4894, 36548, 51403, 16054, 29232, 57253, 1880, 46567, 28616,
-15004, 65496, 37937, 7928, 31834, 48326, 20457, 60392, 5366, 34706, 44796,
-16100, 56784, 27991, 1248, 49778, 36258, 13464, 58155, 23787, 42098, 6503,
-62349, 18253, 47061, 29128, 10582, 53889, 37247, 19042, 58522, 4931, 34149,
-50899, 18476, 41209, 10481, 59673, 20889, 33317, 51640, 249, 42568, 20226,
-59031, 29199, 5134, 54296, 36335, 19267, 49548, 12758, 32497, 62339, 6052,
-41095, 22404, 55037, 12907, 33863, 46408, 18221, 59090, 5062, 41772, 23321,
-50644, 13056, 34483, 61465, 7995, 42787, 23778, 55343, 12236, 41205, 22398,
-48068, 8610, 64511, 24780, 40924, 12265, 49327, 21700, 62095, 1043, 32565,
-44655, 15401, 54960, 28923, 3594, 49575, 35184, 19772, 61823, 8009, 46232,
-26058, 41513, 11208, 58034, 21925, 43633, 7025, 52233, 31051, 14370, 63655,
-35884, 10271, 49933, 21954, 44456, 2101, 32369, 65091, 15406, 48829, 28435,
- 4230, 56812, 36670, 19234, 50116, 7891, 34166, 64202, 18195, 45442, 12156,
-32078, 60903, 5294, 47915, 28852, 15967, 63152, 36622, 7189, 51770, 21170,
-35002, 48234, 10120, 58801, 20271, 32260, 45133, 2781, 54875, 25061, 39507,
-12353, 64446, 22182, 48871, 1902, 34101, 60197, 15119, 46481, 28476, 3664,
-57979, 36418, 16487, 50770, 27938, 8025, 63987, 37624, 20305, 46214, 2752,
-55960, 26746, 39723, 12427, 64610, 22063, 48695, 382, 33778, 62682, 19865,
-42686, 4163, 55390, 29809, 15782, 49677, 36534, 7791, 59616, 24102, 42319,
-11673, 53487, 27181, 38339, 5496, 60248, 21157, 38316, 12814, 54874, 27159,
-48942, 2023, 36791, 62999, 15947, 30041, 51096, 3885, 41994, 23942, 64899,
-12856, 47034, 29355, 8080, 58766, 34539, 19884, 53258, 2317, 32798, 46223,
-20991, 64588, 12582, 33352, 45351, 8532, 55563, 29971, 16632, 51047, 37256,
- 2928, 62439, 21998, 46017, 10394, 32210, 57111, 19528, 48471, 723, 38902,
-26992, 64008, 11025, 35032, 53053, 17539, 46251, 2773, 32840, 58128, 16240,
-46011, 29222, 8728, 53314, 38078, 14412, 31191, 58929, 19115, 43890, 627,
-50275, 31380, 14998, 62849, 37827, 4911, 44961, 24915, 55059, 8130, 41669,
-23862, 63756, 13328, 39257, 21074, 51104, 4071, 36062, 59007, 16678, 30217,
-49710, 7803, 42643, 23885, 65209, 11217, 39127, 21730, 55216, 937, 43831,
-26654, 61558, 14085, 36278, 50757, 2736, 28431, 56078, 16941, 45037, 27747,
- 6065, 64873, 35084, 16901, 49058, 29632, 8866, 57266, 35582, 18214, 50567,
- 1198, 12432, 43977, 28496, 3685, 52849, 36306, 12248, 57900, 25153, 47207,
- 7252, 41307, 18898, 62059, 30101, 2470, 49964, 35828, 17153, 55052, 10601,
-44805, 19411, 30918, 62936, 4473, 42535, 23421, 50221, 9963, 33594, 63832,
-18356, 47035, 3642, 40354, 22509, 58589, 15007, 32510, 53578, 1803, 47199,
-28232, 14654, 61337, 37308, 8060, 44730, 25551, 65249, 12208, 40762, 23027,
-51655, 3823, 33407, 55056, 16844, 47808, 27473, 1982, 64761, 36323, 19187,
-53726, 5417, 42992, 26572, 57026, 9075, 39264, 17248, 60828, 29597, 56,
-50112, 36856, 15435, 64198, 28528, 3655, 52288, 37998, 15398, 29987, 57639,
- 9106, 42921, 21114, 51625, 29054, 6593, 60813, 37588, 11758, 49724, 27513,
-16961, 58673, 37830, 3813, 50636, 28887, 15222, 55674, 38000, 163, 31137,
-63307, 12777, 47175, 28485, 16615, 52238, 37517, 3210, 58398, 23861, 42889,
-12941, 53843, 22383, 41044, 9838, 62674, 29770, 14588, 50449, 36989, 3320,
-64465, 22646, 46948, 14782, 36307, 53692, 7691, 29938, 63621, 17341, 44664,
- 3590, 30320, 55033, 14710, 43911, 28112, 301, 65433, 35439, 19970, 45100,
-11624, 55445, 26548, 39424, 7501, 58385, 23644, 48597, 12443, 40543, 22357,
-59986, 577, 31676, 53836, 13914, 47023, 25568, 40222, 6525, 60497, 19250,
-34538, 53185, 9989, 42882, 23824, 56782, 352, 40294, 23036, 51929, 13409,
-31754, 64402, 3407, 41903, 22569, 51448, 14322, 31993, 61892, 8087, 45544,
-28561, 16628, 54527, 37913, 512, 31402, 60040, 20225, 49140, 8340, 31874,
-44083, 21103, 65217, 1962, 31472, 52820, 16507, 45075, 28488, 5631, 62571,
-35776, 17530, 49531, 9456, 32736, 64522, 15946, 45224, 27729, 1865, 52746,
-37156, 18238, 57732, 10278, 42027, 26970, 49052, 2952, 65312, 25694, 39629,
-10231, 52150, 19120, 31592, 57767, 3990, 46828, 27615, 15149, 63606, 36060,
- 192, 50361, 29205, 16321, 58214, 36050, 3846, 44840, 26050, 56132, 7726,
-39072, 25071, 48870, 11014, 63893, 21605, 38938, 6653, 57368, 27021, 38789,
-10094, 51420, 17599, 33565, 64863, 2648, 48205, 24445, 38470, 12646, 60265,
-26168, 41615, 247, 56340, 29587, 15615, 51275, 36685, 7230, 58424, 23710,
-46978, 10898, 40963, 22427, 61726, 1050, 39974, 27125, 51872, 14392, 32534,
-59569, 2890, 42626, 22603, 55140, 12933, 39909, 25311, 45991, 1953, 57002,
-17446, 30966, 44137, 4461, 62754, 27758, 15202, 50122, 35956, 8542, 61509,
-23357, 47112, 4749, 37061, 58313, 16341, 28798, 44675, 7613, 54697, 24772,
-40989, 10322, 61986, 21889, 40073, 13342, 56107, 31773, 4460, 49446, 35542,
-17867, 61336, 9469, 34550, 51689, 19589, 43982, 6537, 31759, 56827, 16616,
-45864, 28886, 9204, 58664, 36266, 18167, 51803, 1956, 43440, 26651, 65190,
-13907, 38404, 21194, 54780, 3016, 43714, 25944, 58025, 10178, 41601, 23819,
-46715, 7409, 61514, 19384, 31249, 44230, 5172, 58506, 23064, 41180, 10529,
-53091, 31173, 16956, 57343, 35934, 3271, 50368, 24243, 43507, 11432, 61858,
-17482, 36967, 54254, 4146, 29487, 44057, 13861, 61277, 24368, 39981, 5245,
-56735, 28533, 15635, 49771, 35223, 11883, 59926, 26026, 41315, 4414, 53274,
-22485, 40372, 13089, 60505, 25248, 40339, 6408, 56587, 20019, 30167, 48490,
-12021, 64524, 22928, 39651, 1589, 55995, 28102, 13084, 51345, 36890, 4589,
-63820, 25824, 42582, 8675, 53309, 28337, 12371, 56819, 36195, 20186, 49941,
- 1829, 35564, 59217, 15087, 31287, 52163, 5992, 42979, 24669, 62651, 11656,
-40951, 23070, 53399, 3368, 33742, 57222, 13654, 46758, 26108, 41059, 6475,
-60206, 20171, 33544, 51546, 9432, 42730, 18318, 64259, 31971, 5365, 49922,
-36482, 14848, 57762, 29523, 580, 49883, 37657, 14642, 61778, 28022, 4267,
-49345, 37878, 20707, 59060, 63775, 22282, 49159, 9930, 32405, 55600, 18870,
-43095, 272, 65304, 23393, 38485, 11056, 54047, 26615, 43747, 6333, 63338,
-20443, 32434, 47898, 983, 57976, 23993, 40569, 11739, 53872, 18659, 31227,
-59404, 5598, 41877, 24799, 55897, 13325, 34419, 51469, 6994, 42324, 25839,
-64413, 12061, 41386, 23838, 55566, 5160, 34492, 48809, 20199, 54412, 793,
-39056, 27058, 59860, 13390, 46459, 28179, 7695, 61948, 38176, 15613, 30440,
-56360, 10062, 45902, 21084, 31598, 48562, 2958, 63320, 20414, 34699, 44505,
-12135, 55101, 24731, 39877, 6471, 58718, 19293, 30811, 53746, 11340, 42935,
-23266, 59979, 5393, 32385, 48738, 17286, 64747, 2933, 32229, 44661, 15372,
-57306, 29455, 5743, 49017, 36559, 20298, 62457, 8147, 42170, 26182, 47996,
-11160, 57774, 21458, 39000, 5713, 53679, 30270, 14978, 60387, 36141, 8470,
-50235, 27797, 16506, 65206, 37971, 816, 31647, 48678, 19940, 56224, 6186,
-32093, 44864, 19780, 57029, 11178, 39503, 27096, 61541, 1011, 43235, 22154,
-52103, 11790, 35034, 60566, 20427, 47780, 8557, 36387, 57078, 15456, 31480,
-48384, 6411, 61389, 23780, 41587, 1957, 51788, 30060, 15797, 62944, 35399,
- 3544, 49652, 18342, 33475, 64437, 8848, 41733, 23620, 55793, 11948, 38330,
-21531, 63462, 3222, 48811, 26672, 39246, 11375, 54286, 17310, 32723, 62635,
- 8394, 45658, 28182, 15769, 58362, 36107, 6158, 54510, 24490, 46855, 11349,
-41548, 22135, 57260, 4359, 40383, 26370, 64599, 9774, 39308, 23253, 52124,
-13429, 34590, 61743, 6091, 47015, 28266, 14676, 54233, 36978, 9132, 60213,
-25017, 46895, 12342, 41325, 21814, 57747, 3360, 40424, 25074, 53867, 13045,
-35573, 61101, 8688, 29974, 47727, 20179, 63195, 4528, 38326, 23463, 53466,
-11630, 38282, 21314, 61769, 1308, 45621, 29280, 15698, 54555, 38038, 6814,
-31391, 59286, 19182, 43516, 10755, 54464, 26755, 38867, 6206, 63202, 21333,
-47642, 11786, 33263, 60328, 18692, 45151, 3095, 34106, 54226, 14015, 43594,
-24425, 60939, 510, 41644, 23369, 54361, 12054, 39314, 26550, 57450, 6508,
-43952, 21280, 52666, 8883, 33392, 62716, 19217, 42464, 4500, 54790, 26082,
-40165, 13341, 63071, 25924, 38401, 5002, 54627, 21431, 43827, 11946, 58764,
-24044, 41457, 7228, 53645, 25828, 38968, 10092, 64959, 19559, 48863, 30720,
- 5839, 59384, 35735, 20928, 53203, 10743, 46916, 18927, 37542, 57966, 492,
-29575, 53414, 19490, 42039, 9317, 63426, 20964, 31346, 53100, 12609, 47831,
-34657, 3956, 65241, 18577, 32064, 50290, 593, 43719, 26181, 59764, 9764,
-29701, 52986, 14196, 42953, 24063, 58898, 1261, 32590, 46949, 14733, 61979,
-27785, 4388, 53183, 37587, 13679, 48149, 25178, 61112, 5735, 38980, 22447,
-54182, 12823, 31954, 47246, 7128, 61860, 24665, 40083, 11159, 51932, 18282,
-31900, 64666, 10, 48748, 26689, 38493, 11846, 56544, 17980, 33060, 47818,
- 8844, 63728, 24846, 39577, 1149, 48663, 21672, 60803, 13551, 40051, 26876,
-56191, 6123, 39177, 25262, 49191, 10114, 64010, 19486, 34063, 47518, 207,
-57677, 18862, 34252, 52241, 8139, 43072, 24189, 61919, 1653, 32691, 47628,
-18682, 58881, 9215, 33185, 46728, 20336, 55506, 2212, 32122, 44811, 15791,
-61941, 35825, 5529, 51585, 25680, 42864, 9650, 61017, 30560, 17034, 49520,
-35398, 6536, 57573, 24101, 41176, 10838, 49906, 19552, 32014, 61748, 4076,
-44354, 17368, 30817, 64260, 8740, 42981, 23664, 54773, 12788, 39565, 21388,
-57590, 775, 36719, 50263, 15444, 28964, 61869, 8684, 42097, 23600, 52876,
- 2092, 37094, 63548, 15632, 29592, 47835, 3497, 54759, 24722, 40580, 10978,
-58593, 23160, 48924, 7724, 41643, 25590, 60569, 12036, 40356, 21948, 52901,
- 7116, 32054, 55933, 15870, 44411, 30456, 6545, 13291, 45427, 24928, 39986,
- 3118, 61505, 23793, 49038, 13035, 40921, 21729, 58172, 4299, 32935, 46105,
-17548, 55617, 12273, 40406, 26400, 60754, 8250, 46464, 29957, 14552, 64999,
-37621, 2825, 51815, 22323, 46014, 14575, 32315, 60978, 172, 43416, 23986,
-56611, 10460, 38557, 21142, 52514, 3052, 32439, 59538, 17870, 45090, 8951,
-30806, 62850, 11856, 44074, 18473, 35604, 57931, 4957, 29573, 52803, 19931,
-47398, 1141, 33620, 60615, 17554, 49195, 7168, 38566, 26804, 59154, 10711,
-31305, 54184, 17723, 47469, 1753, 31379, 65310, 17167, 43464, 9685, 50804,
-20981, 34649, 61296, 760, 46438, 18746, 35557, 56747, 7916, 29920, 46994,
-20641, 55229, 10787, 40148, 25251, 61650, 998, 35060, 51510, 12792, 29285,
-56331, 18556, 40977, 2965, 63940, 27292, 49264, 12047, 42632, 23581, 61872,
- 1691, 34451, 47647, 19885, 56892, 5049, 34116, 45428, 15332, 59757, 28212,
- 8574, 50877, 36408, 17461, 60943, 2621, 42552, 25860, 54297, 9509, 31904,
-45594, 13879, 58100, 25056, 40632, 5297, 51292, 18042, 31810, 64577, 2796,
-45839, 23792, 41154, 12534, 53014, 17832, 30393, 59765, 8922, 42045, 22602,
-48140, 11333, 56919, 26886, 39253, 5500, 51607, 19729, 29850, 58252, 2351,
-43609, 26596, 50712, 7326, 31742, 57503, 13264, 45396, 31356, 20054, 59797,
- 4477, 34907, 50341, 19015, 42683, 2261, 53701, 30365, 12183, 61071, 37708,
-19566, 49668, 1549, 36631, 63324, 15337, 29883, 52672, 7248, 46108, 20371,
-30581, 57627, 2388, 44302, 27499, 16999, 59042, 38197, 4242, 30924, 48585,
-20084, 56609, 1131, 39272, 22835, 64201, 7528, 33852, 51918, 15530, 45871,
-28714, 6320, 58762, 37863, 17655, 51525, 778, 42701, 25539, 55677, 14280,
-32097, 45745, 7312, 59962, 26304, 40407, 12537, 55965, 22838, 39559, 5550,
-64717, 25037, 48965, 12508, 40342, 21959, 52005, 3227, 31255, 60958, 13927,
-42271, 23794, 55204, 1393, 36691, 50319, 15272, 29396, 56630, 10366, 41348,
-22645, 65459, 6107, 35319, 50171, 16836, 31248, 55916, 4338, 43437, 21622,
-63433, 15131, 36184, 49655, 1677, 29056, 59178, 16733, 45785, 35063, 9970,
-51924, 20618, 33826, 60462, 2321, 43071, 17306, 51666, 30996, 9472, 64027,
-35290, 18769, 49797, 3778, 43561, 26944, 61901, 15433, 31413, 54530, 26,
-44390, 27847, 15051, 52079, 37860, 8562, 63698, 25390, 43841, 3997, 34321,
-60920, 13807, 42821, 23626, 50651, 7035, 34708, 57391, 17666, 45750, 1546,
-41547, 23379, 60405, 9008, 40482, 26225, 55757, 12492, 39590, 22855, 51383,
- 6927, 34163, 63649, 18694, 47131, 3204, 40992, 27155, 56576, 12072, 39471,
-21687, 51077, 7153, 32143, 64872, 20531, 43947, 2480, 33180, 55832, 18805,
-42488, 10648, 63709, 26292, 41449, 779, 57224, 34773, 16799, 50296, 28625,
- 3952, 60043, 37393, 13518, 45452, 23604, 57657, 8203, 41339, 21855, 52483,
- 2502, 29018, 59841, 16226, 46288, 28398, 6789, 55533, 37982, 15409, 30337,
-65446, 8984, 43205, 22100, 52893, 1832, 36451, 58434, 15646, 28752, 44831,
- 4909, 54523, 25015, 38762, 9417, 59687, 21666, 46597, 14321, 37713, 53799,
- 5583, 28609, 63128, 15201, 44935, 28248, 6708, 52491, 37371, 12661, 64971,
-24430, 48873, 8874, 41835, 21629, 53242, 457, 33721, 58519, 13763, 46686,
-22177, 41346, 3408, 63190, 28736, 16236, 52142, 35130, 1185, 59763, 22288,
-46550, 13430, 37579, 56217, 7052, 28304, 47088, 20646, 59666, 2484, 38347,
-27258, 49746, 10358, 29985, 64766, 19185, 45629, 5538, 32280, 54616, 16166,
-44504, 27807, 10576, 59278, 35165, 17843, 50622, 7457, 41050, 27156, 56848,
-13208, 38338, 21221, 62873, 1538, 46962, 31065, 15776, 53702, 35179, 3145,
-64091, 26232, 46366, 12398, 41592, 24352, 62467, 1854, 34725, 53720, 60390,
- 4726, 31842, 48271, 14631, 55220, 26016, 38519, 6991, 59575, 18489, 30531,
-47704, 9870, 63851, 23222, 38950, 1949, 53543, 30623, 16019, 50077, 35639,
- 4192, 56369, 28466, 16883, 49577, 35332, 9280, 63161, 26155, 39967, 6478,
-50813, 18696, 31720, 62129, 7810, 48321, 26579, 39815, 12906, 65045, 22290,
-43277, 5938, 51899, 34141, 20564, 55222, 2457, 45701, 30780, 15022, 63473,
-36617, 8345, 44761, 25170, 54701, 13191, 38838, 22230, 64497, 3421, 32349,
-51624, 14982, 45164, 28037, 6071, 60344, 36749, 20997, 51874, 8741, 42094,
-25638, 62008, 4826, 31967, 45096, 13231, 54712, 24446, 40527, 9569, 62775,
-26810, 38795, 2061, 50707, 17170, 36960, 59351, 5191, 28509, 49341, 16006,
-37763, 65393, 6990, 31787, 53979, 14609, 46488, 25260, 38261, 5395, 58966,
-22034, 46253, 14219, 32334, 55586, 7313, 43869, 27368, 12708, 62309, 37343,
-20863, 54199, 3956, 47705, 26515, 40460, 10543, 52749, 20613, 33580, 64174,
- 7338, 47813, 18169, 34978, 62173, 2038, 46983, 17019, 37148, 59730, 10408,
-29371, 48824, 20922, 56344, 7188, 39183, 26821, 62513, 3921, 48833, 19156,
-34025, 55901, 1129, 39650, 24216, 63964, 14117, 34046, 46817, 8273, 61744,
-24564, 40697, 13200, 54688, 23096, 39297, 9254, 64699, 18534, 34132, 52220,
- 1044, 42705, 24108, 62242, 9353, 39896, 21936, 52536, 14561, 34583, 65083,
- 6632, 44886, 28366, 16492, 51972, 34450, 10745, 58160, 24794, 44145, 3531,
-34041, 55809, 17873, 48836, 10418, 37312, 62890, 14343, 29748, 53831, 7772,
-46339, 27296, 15594, 61452, 36251, 10025, 50559, 25978, 42715, 13418, 54843,
-30501, 2533, 61890, 36046, 18951, 49783, 10479, 31975, 64982, 15616, 45761,
-29001, 5808, 60840, 35920, 17380, 48635, 2721, 58256, 20035, 34423, 47165,
- 9153, 51598, 18337, 35803, 60330, 874, 30095, 47895, 18472, 57448, 9451,
-33294, 46844, 20577, 64416, 6996, 40008, 27147, 52970, 8900, 34421, 62383,
-19526, 43286, 2295, 52684, 28594, 15459, 57636, 37100, 8220, 47540, 22948,
-61493, 12354, 39665, 26190, 51768, 5796, 32791, 55850, 13733, 43035, 23336,
-64628, 3489, 31406, 46891, 17601, 57882, 7911, 38528, 26720, 48855, 11520,
-56141, 24324, 41771, 1517, 59643, 21648, 38849, 13405, 50844, 34842, 6560,
-57311, 20361, 46665, 35835, 9405, 60049, 18198, 35246, 53981, 2298, 29244,
-47303, 20439, 56243, 11251, 39133, 26758, 65087, 5462, 32392, 52084, 10712,
-39785, 26455, 61838, 14219, 36001, 50868, 5022, 31040, 58740, 17667, 45842,
- 2214, 32562, 61054, 20676, 40999, 8326, 54923, 25735, 38735, 10854, 61737,
-22548, 45576, 4820, 36765, 59938, 15540, 29453, 53539, 8567, 45306, 27552,
-14941, 59490, 36531, 4988, 52589, 23278, 46650, 14454, 32826, 60633, 6668,
-43399, 22503, 56104, 9797, 32871, 47836, 19295, 64059, 4898, 39409, 26381,
-51216, 10867, 33682, 62867, 14801, 44067, 35504, 4234, 53891, 23562, 42275,
-12637, 59460, 34672, 4886, 51720, 25416, 44720, 11252, 32037, 63182, 20257,
-48766, 7513, 40581, 26055, 60517, 12811, 49522, 22738, 41175, 2489, 64755,
-31084, 16790, 50101, 36134, 10991, 56688, 23399, 43865, 953, 32085, 60140,
-16368, 43845, 28010, 4075, 58299, 38004, 15377, 30771, 54471, 10901, 43480,
-23287, 60113, 7437, 35730, 50692, 14495, 31094, 56512, 8302, 47225, 24969,
-40256, 12215, 64686, 26546, 39395, 3072, 51441, 17910, 32487, 61263, 9370,
-42028, 24343, 53333, 13792, 32806, 56670, 4601, 41731, 25407, 60262, 12484,
-39538, 24344, 56237, 3999, 47320, 20012, 36357, 65391, 82, 31273, 52482,
-18955, 43920, 4308, 61439, 26399, 39659, 12344, 54258, 21565, 38690, 5248,
-48400, 24111, 56559, 10564, 39630, 21415, 58620, 5896, 33700, 50810, 14350,
-41230, 21632, 24289, 46025, 11328, 40203, 22888, 64387, 1077, 43332, 26892,
-52016, 13732, 34729, 54330, 3509, 42949, 25103, 60687, 13563, 41185, 22226,
-57274, 7406, 39760, 26391, 61835, 11058, 43339, 21325, 52949, 1744, 33899,
-58027, 13270, 42462, 24591, 60063, 3209, 40091, 22121, 52933, 14386, 33581,
-57217, 1344, 46491, 28064, 16485, 59020, 36104, 8522, 47937, 24234, 61449,
-12623, 41178, 22213, 55851, 4360, 32976, 48087, 18366, 58645, 6708, 41892,
-25703, 55803, 11460, 41207, 22029, 62661, 548, 33684, 46268, 18672, 57932,
-10495, 39287, 27143, 53522, 2476, 35008, 59033, 16450, 47725, 28836, 5697,
-57339, 36728, 19806, 52871, 11436, 43456, 25698, 63673, 8332, 33183, 54231,
-20046, 45778, 10400, 41544, 24710, 58269, 2528, 41484, 23333, 49122, 10417,
-62926, 21106, 40873, 603, 54345, 26808, 38741, 10416, 61317, 18185, 31878,
-52500, 2172, 45113, 17600, 31814, 64812, 11642, 43130, 24098, 57972, 77,
-36819, 50243, 15565, 29693, 55694, 4944, 44022, 21140, 31113, 56897, 8832,
-49420, 18909, 33242, 45048, 618, 63706, 17187, 33235, 44143, 11141, 55203,
-25141, 38830, 8320, 46894, 21681, 60614, 12359, 41899, 26318, 54479, 4190,
-30786, 45200, 17894, 59104, 114, 35072, 49597, 15363, 30263, 60977, 4903,
-46922, 27687, 15244, 55544, 38023, 7050, 33083, 57930, 12948, 43731, 24827,
-50157, 4782, 32627, 58538, 19946, 43411, 764, 54660, 26664, 39571, 7998,
-60884, 21866, 48162, 14434, 35369, 64844, 5792, 42503, 24550, 50754, 137,
-31448, 60878, 16792, 44020, 27567, 3213, 52254, 37837, 19281, 63598, 5193,
-33237, 47874, 19008, 53320, 11522, 39814, 26110, 59019, 8236, 47414, 23559,
-40821, 2029, 57346, 19315, 33429, 51115, 9348, 42126, 25371, 64157, 13951,
-31145, 44453, 4283, 54880, 25721, 40809, 11371, 61832, 22093, 45355, 7576,
-35212, 55758, 15100, 44209, 28885, 1967, 59512, 34935, 19090, 51169, 5203,
-42154, 17750, 58485, 30264, 9717, 49343, 37128, 20362, 62880, 3745, 44863,
-29249, 14660, 53376, 35649, 956, 59655, 23638, 46378, 11370, 38992, 21149,
-60983, 7926, 48319, 26573, 40857, 11766, 49238, 22491, 62321, 701, 32735,
-45325, 19950, 53930, 6358, 39306, 26757, 65430, 14514, 32396, 52723, 5409,
-43201, 25018, 62466, 12789, 39678, 22861, 50458, 4616, 31156, 64527, 14132,
-41926, 23368, 50752, 7485, 33933, 60444, 17795, 45597, 1182, 30520, 55187,
-14815, 43183, 22284, 59499, 3134, 30436, 48715, 18956, 64122, 8342, 39944,
-25401, 48672, 11871, 57074, 22211, 42310, 5881, 53235, 30541, 15419, 65483,
-35283, 1687, 49903, 18641, 31691, 57594, 11960, 47380, 25460, 38912, 266,
-64017, 19274, 31555, 47521, 11285, 56769, 17816, 31309, 44628, 1818, 62608,
-27833, 12326, 51241, 37999, 16910, 28965, 54294, 2744, 42152, 23049, 59252,
-14143, 46445, 31095, 1415, 54039, 36577, 18590, 60755, 8582, 30412, 48892,
-18460, 56241, 498, 32128, 45910, 17580, 62486, 14003, 37373, 50260, 3460,
-28942, 56322, 14904, 44176, 34696, 823, 61996, 18508, 32808, 47916, 6655,
-55755, 26576, 38578, 9722, 58368, 19435, 48088, 30242, 3268, 63633, 37496,
-14264, 53614, 22556, 46888, 7561, 31820, 61671, 16984, 48053, 27606, 2429,
-62668, 37287, 14718, 50053, 27631, 4839, 65278, 37452, 20835, 45602, 1728,
-61276, 18436, 32213, 52793, 6208, 43403, 23428, 58430, 11515, 29973, 54498,
-20816, 45943, 353, 35266, 62982, 18273, 42808, 8199, 50996, 21060, 35048,
-63795, 1480, 47678, 17670, 35381, 51965, 9757, 29626, 57798, 13463, 48398,
-24030, 40528, 8396, 59968, 22389, 38254, 10455, 55198, 27284, 43752, 6934,
-64590, 25631, 40650, 11591, 59572, 19423, 32830, 51769, 428, 45857, 28423,
-17018, 65175, 37004, 8523, 54220, 61952, 36629, 17999, 50805, 6309, 33842,
-57585, 17500, 45814, 8727, 31768, 62777, 17191, 40920, 11762, 50564, 31361,
- 5014, 58942, 36796, 17522, 47516, 514, 54187, 22988, 38441, 13600, 64582,
-26977, 44328, 5279, 50474, 17959, 31425, 55466, 10829, 45276, 17555, 36034,
-61707, 5048, 30081, 51445, 12317, 40898, 23973, 63641, 4138, 39247, 18953,
-54044, 29039, 305, 50057, 37231, 19286, 64221, 11443, 40393, 26946, 51333,
- 2223, 34441, 61785, 14444, 44671, 28215, 8464, 52715, 37317, 16875, 56877,
-28881, 5818, 49239, 35320, 20489, 63511, 11589, 43016, 22867, 50328, 8376,
-33645, 64632, 18099, 44660, 3484, 31152, 60596, 13321, 41714, 23498, 50338,
- 356, 30524, 58115, 17581, 47986, 4380, 38956, 26500, 61070, 13178, 38411,
-21620, 47639, 7423, 55780, 27051, 38824, 12945, 64638, 24793, 43992, 6130,
-50840, 19926, 29449, 58358, 9715, 42006, 23006, 55163, 5391, 35508, 51394,
-14894, 29756, 61309, 6892, 47276, 24493, 40225, 10820, 60057, 19238, 33600,
-46111, 3466, 63092, 25672, 40193, 11299, 54595, 27001, 40180, 5691, 58460,
-19226, 47684, 29800, 2574, 61775, 35872, 15577, 53281, 29167, 6233, 49850,
-36162, 19036, 64956, 10170, 35091, 47552, 21066, 56362, 6280, 40139, 26211,
-51511, 10058, 34802, 58499, 19585, 45125, 3808, 29944, 63943, 16265, 47172,
-28446, 2513, 53063, 35898, 16048, 63248, 29186, 8585, 49299, 35913, 17517,
-62477, 11699, 43214, 26015, 56668, 2851, 31812, 46593, 19169, 56277, 10874,
-34087, 52894, 20796, 45820, 6656, 37649, 54802, 13833, 31886, 58090, 9579,
-44722, 27783, 16385, 59711, 38160, 609, 29370, 55882, 17803, 42020, 3815,
-62081, 26730, 48754, 13154, 35410, 53238, 6479, 28448, 61333, 20869, 45574,
- 1, 33907, 57216, 18978, 48393, 8903, 33716, 62759, 17653, 44147, 2304,
-33530, 58326, 16185, 48251, 27650, 4153, 53495, 37736, 16589, 63905, 27498,
-10124, 49466, 36793, 20578, 54927, 316, 43075, 26385, 59903, 13394, 32495,
-51915, 7201, 43779, 34667, 19928, 64781, 10598, 48818, 26898, 40690, 4766,
-58207, 30402, 16426, 50919, 35686, 2536, 63914, 20042, 35367, 50231, 5162,
-29805, 57355, 18586, 42795, 9198, 61499, 29265, 16354, 49894, 36575, 2749,
-56954, 22076, 46754, 11398, 30573, 59013, 1282, 41718, 25778, 55195, 10383,
-38693, 21053, 58036, 3389, 43773, 26723, 52539, 9937, 31838, 62896, 13274,
-42454, 24391, 52549, 6517, 33793, 57313, 17888, 46415, 10348, 39083, 26965,
-54593, 146, 32440, 46712, 16037, 63005, 29491, 4012, 49932, 37301, 18201,
-58174, 11035, 41964, 26214, 48191, 8954, 54604, 24005, 39173, 3764, 60509,
-17875, 33164, 52006, 9842, 43048, 23992, 61644, 3238, 40405, 21722, 52072,
- 8111, 36852, 55235, 15313, 29871, 45611, 6009, 63429, 24112, 40970, 10464,
-56828, 18511, 35703, 50219, 7130, 28880, 64389, 20323, 42910, 10459, 50789,
-21551, 32755, 57911, 5512, 44839, 20568, 35927, 58976, 8524, 29356, 52456,
-19300, 45134, 6528, 32641, 64847, 19037, 49225, 8637, 39462, 26709, 57537,
-11870, 43274, 21443, 51327, 5065, 33494, 62606, 15018, 44322, 27506, 7896,
-51880, 35172, 17757, 57968, 5039, 37907, 49966, 13671, 28734, 56350, 10197,
-42247, 23669, 51239, 5686, 35133, 57644, 16725, 29464, 49318, 10052, 34551,
-55782, 13571, 42165, 24579, 58242, 4303, 38890, 22045, 50146, 14645, 33764,
-63522, 5490, 44317, 33599, 17129, 52339, 9693, 31858, 58798, 20331, 46373,
- 3867, 32063, 55170, 15068, 44810, 27914, 9027, 61684, 37419, 18941, 45893,
- 5885, 58733, 27064, 38597, 2360, 53939, 21158, 44254, 13828, 62413, 25992,
-41310, 1270, 51206, 17734, 31542, 55691, 3734, 44623, 28260, 15450, 61626,
-38055, 7678, 30519, 55573, 15125, 47839, 27974, 2271, 19626, 42389, 8006,
-52714, 21101, 31459, 60973, 5295, 43954, 20701, 34197, 56577, 1590, 48680,
-19493, 35679, 65513, 7883, 29073, 52703, 19237, 42662, 10475, 60143, 26581,
-41206, 7007, 56696, 24096, 39845, 10073, 53366, 19779, 33488, 64094, 931,
-47794, 25452, 39330, 9301, 58057, 21110, 48038, 15077, 34223, 55729, 6643,
-42446, 25928, 59830, 10016, 46920, 17061, 32870, 56216, 5455, 42728, 24000,
-60293, 9185, 30986, 46678, 16267, 53654, 29559, 4006, 64722, 36194, 15653,
-49596, 27609, 1904, 61049, 37844, 14791, 50371, 28306, 4176, 59465, 38051,
-14438, 29337, 54873, 1102, 42848, 24570, 56492, 14551, 33253, 51842, 6998,
-43751, 21953, 64072, 14173, 34497, 53587, 6040, 44399, 32234, 19273, 62253,
- 9671, 49488, 27118, 40193, 3540, 52222, 30123, 15997, 59559, 35503, 1916,
-49395, 29531, 16601, 60605, 37772, 4182, 46783, 24535, 62646, 12015, 38874,
-26908, 48912, 3114, 58816, 19055, 34299, 44537, 12984, 64004, 29275, 1515,
-50582, 37683, 12940, 55227, 23689, 42128, 4628, 60453, 21466, 38755, 14128,
-52206, 32545, 7664, 65281, 36625, 20739, 50341, 11722, 42847, 23434, 55545,
- 1564, 32852, 62295, 14347, 43220, 24863, 51879, 3098, 31529, 59591, 12324,
-44533, 28553, 15908, 63316, 38066, 1683, 31020, 55208, 13533, 48791, 24523,
-41025, 8171, 60645, 22141, 39336, 11573, 55150, 27006, 38847, 4915, 57337,
-20476, 33714, 50782, 1732, 41730, 22587, 60051, 13131, 34301, 53674, 7452,
-44009, 27295, 16022, 59388, 38169, 4052, 28697, 64311, 16498, 48117, 27379,
- 1727, 61975, 37410, 20268, 51404, 5664, 33677, 48556, 20887, 65366, 9832,
-32977, 46256, 20848, 54661, 5501, 38941, 22386, 63926, 14163, 37345, 50601,
- 7619, 31048, 55272, 17963, 41236, 11184, 59885, 26868, 39169, 3541, 53459,
-22582, 48363, 13086, 31440, 65152, 10264, 42427, 23531, 51506, 5787, 36005,
-57846, 14469, 29838, 46740, 7511, 61343, 24392, 40159, 12103, 56354, 22088,
-46233, 4928, 29507, 62047, 16695, 45973, 28036, 1996, 57085, 37990, 16003,
-30839, 55288, 7714, 49161, 22594, 41370, 11093, 60525, 25159, 40020, 6801,
-52385, 17297, 33814, 55431, 12517, 39491, 24869, 59263, 3716, 33187, 51279,
-13772, 42515, 25099, 63471, 7710, 33858, 53161, 19398, 45386, 14569, 33807,
-63236, 6897, 43471, 24149, 54069, 12391, 39953, 21903, 61407, 661, 34536,
-46850, 18402, 56337, 4214, 39724, 27046, 48784, 14115, 64627, 35041, 5354,
-44649, 24885, 61429, 11549, 41471, 21414, 58213, 6318, 38750, 24263, 52629,
-13128, 35621, 61906, 1025, 29994, 46094, 19768, 59276, 7292, 41092, 25461,
-64329, 13199, 43649, 23385, 54038, 4916, 39447, 21432, 57384, 12988, 38418,
-27102, 48295, 10497, 65055, 24519, 40299, 4155, 59742, 20408, 47847, 31377,
- 576, 52972, 36899, 13710, 61603, 23534, 44210, 3580, 32901, 55890, 15260,
-47555, 28449, 1964, 61884, 37243, 17239, 53266, 11967, 42592, 26410, 63623,
- 2832, 40713, 22657, 55006, 12040, 40053, 25706, 58547, 1457, 42692, 22834,
-52447, 13603, 33609, 64081, 3035, 44534, 30343, 13438, 54741, 24294, 41781,
- 321, 61247, 20148, 37896, 49493, 9018, 29166, 65200, 20063, 46103, 1396,
-32703, 60700, 16681, 45919, 28478, 8138, 64185, 36837, 19669, 53717, 139,
-42198, 23091, 62378, 6799, 32715, 48090, 17847, 54745, 9268, 41201, 27010,
-61829, 1009, 30596, 53887, 13899, 48182, 25646, 40439, 3254, 65074, 25021,
-39582, 12388, 56126, 24073, 38745, 6809, 60069, 19366, 31837, 51576, 2982,
-43508, 25813, 64405, 14223, 34022, 50871, 7774, 43289, 24972, 60501, 11293,
-38891, 21792, 56447, 6356, 34814, 46596, 20239, 63323, 9286, 34070, 52326,
-13450, 41401, 25244, 58319, 5082, 40389, 22839, 52145, 10372, 33213, 56795,
-38949, 12345, 59119, 26431, 47137, 134, 37512, 54442, 14964, 29963, 62263,
- 9088, 46829, 24866, 39632, 12216, 55912, 23558, 47208, 3386, 34020, 63265,
-15768, 45607, 29718, 2132, 51600, 35443, 16438, 62119, 29264, 4103, 49367,
-35775, 14293, 56182, 23042, 43703, 8050, 62556, 26973, 41777, 1949, 54408,
-21960, 41108, 13249, 65397, 23479, 38431, 2635, 53118, 26652, 41418, 12144,
-62985, 20430, 34346, 48334, 1416, 54459, 23200, 39725, 12024, 59282, 26161,
-39475, 6985, 51697, 19874, 33086, 55905, 11986, 43208, 24165, 65521, 6845,
-33848, 52824, 17093, 44948, 27598, 7835, 60871, 37339, 19663, 45601, 10841,
-62662, 23269, 38676, 2193, 54435, 26772, 42123, 10087, 56926, 28288, 16181,
-50463, 36834, 1269, 59199, 24133, 45277, 14851, 34151, 63216, 6421, 42792,
-23814, 56613, 11585, 40224, 21711, 53411, 7855, 35841, 57648, 14993, 30198,
-50139, 1069, 42533, 22195, 65455, 14190, 30618, 46666, 7698, 53245, 27958,
-16439, 57262, 36351, 5675, 49492, 27794, 15858, 62045, 36727, 9452, 53485,
-23038, 47382, 1209, 30026, 57811, 15405, 45033, 27667, 5003, 60340, 34642,
-18097, 51498, 7530, 43833, 25941, 58775, 12143, 41048, 21471, 55118, 5934,
-34513, 47774, 18877, 61560, 7829, 41396, 25295, 52842, 11283, 41150, 21587,
-65253, 4197, 30804, 51507, 14345, 35131, 56578, 265, 47708, 23672, 42314,
-12542, 60391, 21332, 41867, 9578, 54000, 28943, 16188, 65420, 37020, 4486,
-49646, 28185, 16703, 51674, 31363, 1313, 62713, 35073, 19932, 50365, 7193,
-34254, 56263, 15040, 44226, 29359, 8169, 53879, 35766, 18132, 60013, 12794,
-43770, 30110, 2342, 57560, 37376, 17315, 44896, 11072, 55989, 27097, 40375,
- 1478, 58173, 27803, 16787, 49450, 37126, 4536, 64801, 23693, 44885, 13395,
-32373, 56389, 8042, 44695, 27591, 17001, 59638, 37714, 708, 54070, 25752,
-41337, 12816, 48941, 22225, 63243, 1641, 34505, 44315, 15227, 51489, 28172,
- 3382, 65309, 38215, 15037, 31393, 49138, 7933, 54323, 23750, 39863, 12003,
-64211, 22246, 47060, 3797, 34339, 59074, 14696, 44872, 29076, 123, 54242,
-36119, 13925, 62573, 25856, 42524, 1801, 48300, 23334, 64919, 8218, 41023,
-26424, 53277, 11918, 38731, 21521, 57909, 396, 44571, 29879, 13539, 60440,
-37722, 4098, 51152, 28193, 16445, 59806, 37940, 4941, 30691, 56738, 14364,
-48689, 24945, 39421, 8414, 63726, 21902, 49300, 11742, 38336, 23118, 58165,
- 1625, 47431, 29819, 15992, 52358, 36667, 3400, 56537, 24839, 45230, 14596,
-33350, 64751, 7634, 44629, 27841, 16370, 55746, 37598, 4585, 50775, 28523,
-16557, 56962, 36316, 1975, 49448, 29625, 16009, 61187, 36701, 8418, 48773,
-24864, 62991, 877, 41806, 17841, 51309, 30224, 6806, 56223, 35958, 18801,
-50416, 9044, 34109, 57843, 16011, 45056, 28553, 6412, 59514, 36886, 18938,
-48750, 10102, 65121, 26315, 40122, 8164, 51188, 19455, 33272, 59982, 5985,
-47586, 25274, 39328, 10456, 57050, 18691, 33752, 47724, 5204, 61368, 18572,
-33769, 47421, 7935, 56450, 24593, 39886, 11173, 59164, 21718, 47669, 4582,
-33872, 60379, 15480, 45514, 28389, 11075, 52863, 35955, 17149, 57334, 4481,
-42300, 26826, 54919, 12526, 41301, 23820, 56853, 3591, 39698, 21847, 50586,
-12901, 32887, 58267, 9189, 46289, 27361, 16405, 59964, 38214, 2838, 30627,
-56906, 20011, 43622, 11107, 51063, 34809, 17682, 57744, 6967, 42525, 21989,
-60655, 10133, 34208, 51436, 17912, 43509, 1162, 54068, 26993, 40893, 8426,
-62007, 24497, 38936, 12020, 54839, 22304, 42423, 538, 57382, 28816, 15856,
-52231, 37951, 3542, 30075, 64967, 13497, 43216, 24241, 53403, 5377, 30069,
-59914, 16106, 44987, 35507, 917, 49130, 21793, 62387, 12821, 34413, 45057,
- 2991, 63974, 24712, 55910, 6899, 45215, 18240, 35605, 64756, 10719, 28111,
-50079, 19656, 41740, 2913, 53562, 33369, 17312, 61193, 6150, 44561, 20111,
-32308, 57148, 8717, 49186, 23527, 38747, 12876, 61077, 25890, 43104, 6139,
-54742, 22110, 40669, 12327, 60230, 27071, 38381, 3342, 51170, 18074, 33214,
-59279, 11741, 48569, 25220, 38681, 4432, 56316, 26924, 43989, 10484, 60883,
-17374, 35510, 50972, 4901, 29676, 58824, 18228, 44914, 9844, 32277, 55717,
-19986, 42148, 2929, 62765, 24639, 48554, 10350, 39435, 21796, 57858, 145,
-31586, 51387, 13269, 42402, 22330, 62082, 2737, 31991, 47854, 15310, 50976,
-28490, 4013, 57045, 35456, 17275, 50037, 9433, 32665, 60153, 20668, 47293,
- 4253, 33151, 65077, 14379, 43938, 29483, 5312, 57716, 36615, 10249, 51517,
-22223, 47144, 13716, 30984, 64392, 243, 43704, 23154, 51479, 13212, 33367,
-61133, 6341, 45178, 28105, 16820, 54018, 37417, 9004, 56327, 23964, 43971,
- 4038, 34711, 63310, 20419, 42733, 9974, 51425, 21255, 32951, 58727, 2880,
-46319, 25209, 40677, 11765, 64552, 18289, 36646, 50604, 8705, 31105, 54940,
-17299, 42418, 354, 63228, 27241, 38532, 10641, 54318, 22252, 38356, 2853,
-64264, 27113, 42824, 13760, 53334, 29085, 817, 57106, 36950, 20334, 49640,
- 5552, 32910, 59010, 14974, 45572, 23542, 40430, 6962, 62301, 29067, 16500,
-50059, 34634, 7728, 64100, 26517, 48472, 2733, 39562, 21904, 52229, 6395,
-32867, 58656, 14033, 45522, 27304, 8190, 54229, 36917, 18461, 57194, 11641,
-46013, 25996, 39374, 4830, 61199, 21673, 49065, 11740, 41117, 26157, 63660,
- 3143, 32215, 46374, 16704, 51935, 27349, 8840, 62461, 36218, 20249, 50311,
- 5025, 33082, 63113, 14984, 46575, 29643, 8108, 60787, 35043, 16193, 50136,
-28724, 1797, 53747, 37221, 20287, 61637, 6020, 36656, 49936, 14839, 30707,
-62386, 9611, 47132, 24175, 38810, 6844, 54676, 19767, 31214, 60487, 5446,
-45959, 29268, 16957, 53841, 37405, 10512, 59644, 24475, 47136, 1079, 35174,
-56022, 15031, 44662, 28683, 5672, 60204, 36820, 16556, 50987, 27799, 8983,
-63717, 37437, 18991, 49607, 5778, 30902, 58429, 17077, 41369, 10450, 51804,
-20715, 34540, 60291, 2995, 43428, 23087, 55935, 9692, 32712, 47373, 16606,
-64328, 27727, 8660, 49665, 35328, 18416, 55774, 1789, 44787, 34749, 20351,
-65381, 9643, 42413, 22551, 52297, 2599, 33816, 55226, 18908, 47842, 4965,
-40532, 27288, 62544, 12613, 39913, 24119, 48887, 7740, 62092, 22393, 38846,
-11957, 55091, 26854, 49023, 2428, 40217, 22422, 59839, 11337, 31432, 47851,
-20565, 63563, 6716, 32752, 44705, 14714, 53010, 28240, 11799, 58891, 35111,
- 5486, 46356, 26719, 54454, 10899, 38248, 22754, 58637, 13713, 34462, 47435,
- 2314, 62277, 22826, 41446, 12098, 48962, 25937, 63912, 3064, 39997, 21877,
-54051, 13246, 45026, 30747, 989, 57600, 35940, 14543, 45448, 23828, 55279,
- 3206, 39383, 22041, 62669, 14136, 35161, 51988, 106, 30216, 65360, 12221,
-44048, 28170, 15991, 54084, 38013, 2609, 30969, 62766, 16549, 45177, 28329,
- 6357, 52369, 37647, 20479, 56093, 8073, 42182, 24977, 64432, 2156, 33991,
-47587, 20516, 61871, 9973, 39004, 25155, 53009, 7089, 33428, 63722, 14287,
-43571, 23078, 52538, 2022, 31162, 62711, 16042, 44314, 28401, 6301, 51808,
-37194, 18703, 64831, 9811, 48684, 26036, 39600, 5167, 62616, 19740, 32564,
-52976, 2195, 45397, 28497, 15876, 57036, 38009, 6062, 29792, 62710, 20202,
-48180, 10679, 34609, 58443, 17840, 43097, 5105, 52034, 29666, 16626, 63023,
-37138, 6745, 49570, 24316, 43520, 11627, 58388, 19021, 31539, 50753, 1862,
-35505, 48070, 19244, 56007, 9014, 40045, 25847, 60853, 14122, 31668, 53873,
- 4572, 41674, 25487, 51203, 14477, 32075, 1974, 30122, 52423, 20615, 42657,
- 4441, 60226, 29525, 14591, 51612, 37293, 7753, 58472, 25228, 41462, 13117,
-48996, 22779, 64913, 866, 39649, 27062, 53491, 5077, 43712, 21572, 58437,
- 9745, 36643, 50120, 15184, 30092, 63453, 43, 43322, 24293, 54118, 11032,
-39038, 21556, 64658, 5526, 31246, 45608, 15589, 53158, 29554, 8170, 63259,
-35714, 19667, 49417, 680, 31493, 55086, 21034, 44007, 8463, 33813, 64113,
-17218, 49278, 5960, 38274, 27214, 59704, 14620, 32426, 46442, 5300, 52432,
-29287, 16801, 63702, 36360, 7587, 48227, 26482, 57054, 11132, 41139, 21434,
-53954, 6045, 34964, 58597, 20210, 42203, 11402, 64513, 26207, 40789, 652,
-55580, 18205, 44920, 30042, 6796, 52119, 36276, 18931, 61532, 11587, 45657,
-20806, 31323, 55341, 2882, 41709, 25476, 58549, 8838, 35712, 49381, 16692,
-28710, 55750, 3702, 41930, 23080, 62249, 13804, 35432, 50382, 2424, 31399,
-60310, 12321, 45265, 28316, 16138, 58426, 37977, 504, 30702, 55602, 17561,
-43723, 7681, 62446, 19788, 36030, 51227, 6172, 29087, 56666, 20498, 44429,
- 3261, 33825, 61269, 19681, 48703, 12892, 41866, 26383, 57236, 6672, 33965,
-47063, 17499, 60196, 11463, 39901, 25247, 50888, 5079, 32305, 63027, 16314,
-44674, 27662, 9023, 61326, 36499, 17948, 53775, 2078, 30175, 48539, 12696,
-58068, 24181, 39955, 5480, 55406, 21422, 39748, 12323, 56809, 24958, 46340,
- 9019, 35668, 63371, 16899, 29868, 49368, 647, 37806, 61401, 15551, 30670,
-47732, 3262, 64772, 22039, 41030, 10177, 47862, 27211, 57823, 355, 38332,
-22670, 54989, 12198, 48231, 28342, 6857, 59345, 37659, 14605, 54326, 29006,
- 909, 49276, 35108, 18714, 58951, 10813, 42103, 23057, 54446, 3340, 40160,
-24094, 56694, 12772, 39726, 21755, 63516, 9267, 35539, 49285, 16345, 28982,
-58613, 2524, 44285, 20589, 32991, 57067, 3928, 49003, 18106, 33390, 64082,
- 9437, 43177, 23236, 50584, 13263, 31667, 57372, 2656, 44883, 20207, 32156,
-61959, 8777, 43839, 20972, 31268, 63283, 6898, 49451, 19588, 33162, 43942,
- 2277, 56793, 17706, 33625, 46252, 11597, 61102, 20862, 32796, 52821, 4544,
-46405, 19279, 31063, 56879, 12886, 44915, 27884, 6520, 61690, 35995, 16040,
-50531, 29120, 4778, 55303, 37069, 19573, 46039, 7171, 62279, 24739, 41142,
-11134, 53230, 17808, 32769, 58862, 6458, 46202, 28067, 16723, 57033, 38139,
- 7512, 30650, 60074, 17523, 43745, 9571, 53555, 20897, 32173, 56286, 830,
-46163, 17717, 33639, 59311, 4899, 45859, 19571, 33786, 62822, 8822, 49330,
-18917, 33735, 45381, 468, 57980, 25250, 38764, 9630, 48532, 21703, 62537,
- 3066, 41243, 24341, 55657, 13601, 39211, 20880, 64503, 3660, 43825, 26637,
-52295, 7737, 32657, 60426, 14960, 45440, 24879, 38893, 4986, 55796, 18157,
-33462, 46243, 7939, 61148, 24950, 39187, 11448, 49291, 21590, 62264, 5135,
-41749, 25980, 48527, 12392, 58793, 29768, 6943, 50297, 37198, 20252, 46599,
-10041, 57799, 26277, 40307, 4156, 49311, 21574, 55592, 10515, 40990, 23999,
-58114, 13122, 48591, 30478, 1109, 63400, 35230, 18105, 50916, 10716, 32055,
-48530, 17619, 58468, 5723, 31473, 44933, 16094, 50774, 28492, 610, 57815,
-36843, 19064, 47429, 8349, 59660, 26178, 40941, 11650, 55239, 22575, 47695,
- 3830, 33131, 61419, 14936, 45589, 28436, 789, 55699, 36943, 17070, 46419,
-11678, 59898, 26807, 38664, 7471, 48623, 23927, 64074, 11748, 41112, 22737,
-55536, 4325, 33604, 52822, 17055, 44656, 1646, 30380, 65441, 21171, 44565,
- 9344, 35417, 54251, 15089, 30560, 60637, 2601, 41585, 22588, 52956, 9573,
-34203, 63646, 15723, 44199, 28661, 6245, 57819, 34280, 17567, 51124, 2586,
-46381, 34859, 20487, 61524, 9387, 45886, 18345, 37140, 63382, 55143, 28615,
- 8408, 49912, 37155, 12520, 56973, 21381, 32643, 47588, 1351, 62955, 18138,
-31295, 45203, 5614, 55181, 25811, 38488, 9792, 59859, 21018, 48858, 14789,
-35771, 62658, 2676, 31938, 52415, 19073, 46041, 6494, 33513, 57908, 20353,
-49184, 7839, 41317, 26557, 55880, 12973, 42960, 23654, 58773, 1251, 39186,
-21463, 51676, 14417, 31573, 59635, 6574, 44942, 27808, 15289, 62315, 37041,
- 2778, 46757, 25770, 57329, 12801, 40892, 21251, 54245, 933, 43122, 25553,
-61692, 12291, 40198, 22915, 54099, 3239, 32546, 46168, 13919, 60493, 23123,
-39230, 1290, 49067, 26007, 63014, 13796, 32438, 44344, 3370, 53261, 18419,
-32361, 46605, 7958, 58335, 25578, 38683, 12879, 62418, 22989, 49151, 1800,
-39275, 26912, 57126, 8446, 48118, 17996, 37270, 60848, 12668, 28793, 52931,
- 4888, 43152, 22016, 63616, 14812, 35879, 50826, 7114, 29703, 57230, 18478,
-47880, 10449, 38977, 26554, 64969, 5542, 33166, 52283, 19164, 48093, 8433,
-41063, 25732, 60911, 12784, 39897, 23877, 54824, 2127, 45845, 17085, 32454,
-63773, 7493, 49028, 24516, 39326, 11438, 59316, 23585, 38989, 4459, 53735,
-18595, 32188, 65057, 2014, 43386, 23239, 52977, 8645, 34043, 59055, 14090,
-43076, 22827, 54784, 3638, 33696, 47186, 13092, 56814, 24801, 38943, 10489,
-52351, 19009, 33673, 64603, 3555, 46739, 28762, 15708, 52224, 35361, 1172,
-62123, 29409, 14949, 50233, 37622, 4819, 57880, 27401, 14700, 53287, 38225,
- 7494, 28928, 59822, 19595, 43584, 12250, 54670, 26702, 38300, 5283, 62221,
-21217, 48667, 13161, 40095, 25855, 65120, 4193, 32730, 45136, 16086, 61018,
-27817, 9755, 51298, 37931, 20490, 64446, 6415, 45104, 29026, 15865, 52739,
-35753, 8932, 60258, 26217, 43470, 270, 51834, 17384, 31709, 59149, 5180,
-42593, 23473, 52650, 12985, 35040, 64589, 7787, 47502, 25459, 40338, 11980,
-55892, 24812, 39455, 420, 60054, 17595, 33618, 52390, 7159, 42378, 22714,
-58928, 11755, 29725, 51444, 17809, 47841, 4050, 33578, 57688, 13758, 42001,
-23940, 55060, 8467, 31403, 48407, 20338, 65254, 3153, 40969, 24938, 55184,
- 9863, 39340, 23934, 58892, 863, 38422, 22547, 64528, 9292, 30580, 48184,
-18184, 54162, 2152, 39370, 25884, 63130, 13032, 44423, 28667, 973, 58658,
-35935, 14052, 51716, 26159, 46449, 3486, 30230, 61581, 15204, 44447, 27330,
- 292, 64274, 35941, 13805, 50957, 24513, 42053, 2846, 63317, 19232, 34242,
-51264, 7141, 42676, 25104, 65044, 9805, 39418, 22046, 53272, 13258, 31200,
-56878, 5768, 44135, 27540, 16769, 54119, 37142, 10547, 65375, 23149, 42608,
- 4863, 51638, 29965, 16323, 60900, 36028, 1303, 50573, 26906, 43157, 10098,
-58091, 22366, 40167, 13134, 55673, 28884, 172, 50112, 36455, 9979, 65321,
-22149, 48243, 13782, 30189, 59181, 1496, 34950, 52496, 16598, 44597, 28056,
- 7051, 56137, 38019, 16211, 32145, 63723, 1866, 41528, 22727, 53639, 13721,
-33340, 61103, 5758, 45008, 28747, 15753, 60139, 36744, 8593, 46035, 25949,
-64286, 2102, 32880, 44138, 20107, 52918, 8706, 33109, 60082, 14225, 42964,
-25312, 55590, 3382, 38686, 24376, 61023, 12626, 41377, 22312, 53840, 6664,
-34444, 63065, 15177, 45295, 27993, 4208, 51683, 35682, 15041, 65517, 28874,
- 5935, 50198, 36261, 19844, 58118, 12351, 41981, 26056, 52091, 7482, 31016,
-61052, 18483, 44183, 3418, 31195, 54750, 14976, 41988, 22220, 59343, 198,
-31863, 50989, 17602, 45354, 10138, 31158, 60710, 20934, 48758, 7166, 33079,
-56934, 13794, 48066, 24447, 40961, 4454, 59083, 18458, 36234, 49897, 8058,
-29213, 61818, 16665, 45899, 27592, 299, 59437, 37886, 19690, 47322, 8150,
-65137, 26291, 41053, 12408, 54778, 26165, 40300, 4905, 57789, 23220, 43498,
-13417, 49270, 692, 33524, 62551, 19104, 44404, 6544, 34407, 60731, 20471,
-42205, 9182, 53787, 26093, 40189, 12776, 64159, 23720, 48261, 3788, 40686,
-22456, 57557, 13259, 30192, 44416, 7624, 55568, 24632, 40168, 12170, 64385,
-22673, 44777, 1897, 37323, 61249, 15214, 30044, 46054, 4030, 62373, 25313,
-40504, 10983, 48691, 22875, 64941, 3552, 33874, 46312, 12589, 56868, 23864,
-41319, 8141, 52624, 19271, 31208, 61195, 4433, 48445, 23965, 39237, 11118,
-65208, 21935, 48769, 7264, 33637, 58413, 17884, 41832, 10807, 55653, 27100,
-38559, 4918, 64224, 18874, 34121, 46246, 10225, 55146, 22464, 39766, 7375,
-61425, 24878, 48424, 12343, 39806, 23902, 63815, 3074, 48438, 21932, 40465,
-11850, 55100, 25499, 42983, 6526, 60129, 17016, 33779, 49599, 807, 30119,
-65227, 18968, 47241, 10557, 39588, 26545, 53920, 1973, 32317, 59877, 12757,
-44410, 24924, 40524, 951, 59183, 21541, 43766, 13187, 55069, 25204, 41299,
- 2704, 62553, 29339, 15172, 53673, 36803, 4268, 48428, 26237, 59944, 12118,
-39086, 22717, 48427, 10277, 57270, 26778, 41165, 835, 52020, 18845, 32241,
-62450, 10212, 41521, 25677, 50747, 7333, 38505, 21417, 58227, 12533, 48787,
-26428, 39618, 1371, 61978, 17755, 36199, 50352, 8201, 29585, 63873, 19058,
-41997, 534, 46250, 26339, 60773, 7268, 35095, 43873, 17474, 54779, 11181,
-40788, 25526, 59789, 6035, 48341, 24369, 39505, 11469, 54514, 18290, 30844,
-64226, 3765, 43746, 22982, 50560, 13285, 33421, 57447, 2121, 42142, 23205,
-52266, 8489, 32912, 59225, 15996, 44940, 29269, 6476, 52188, 36109, 19393,
-57685, 2256, 34574, 50001, 17586, 44044, 5318, 32089, 57195, 21119, 49031,
- 1836, 41229, 24984, 62002, 12551, 48260, 22074, 40853, 6223, 65527, 27190,
-38563, 10975, 51054, 19278, 31533, 56199, 1288, 45197, 27793, 15325, 59479,
-35860, 6263, 51491, 21875, 42004, 12505, 63661, 25874, 48045, 4304, 40455,
-24323, 54507, 13567, 34045, 64907, 1463, 43069, 26202, 52945, 9429, 29888,
-60651, 16284, 46397, 27845, 588, 58969, 36101, 11012, 52398, 26025, 44431,
-14335, 33222, 61766, 6731, 42302, 26266, 49034, 12333, 54517, 18510, 33318,
-46136, 4005, 60904, 24973, 41602, 10185, 55594, 21603, 48846, 14680, 36563,
-57214, 5830, 29731, 48151, 20247, 64121, 8249, 39224, 23131, 56375, 9365,
-33970, 52745, 12764, 42520, 22885, 53664, 5468, 32898, 60740, 14956, 45404,
-27904, 10846, 58627, 36398, 17298, 49535, 3264, 33004, 57894, 14431, 42346,
-25558, 50331, 1729, 36616, 61041, 14786, 29419, 47180, 3917, 60017, 28415,
-12747, 50324, 36845, 20817, 55347, 7092, 33015, 47548, 19153, 59420, 9062,
-38413, 21752, 51646, 5325, 32068, 63476, 16935, 45976, 27493, 8686, 60763,
-38114, 16847, 30907, 54244, 3287, 43659, 24485, 56387, 12546, 41068, 23197,
-64448, 3973, 34390, 50150, 14873, 30211, 59611, 8038, 44714, 28068, 16846,
-56975, 36861, 3820, 50780, 27649, 16892, 64696, 35748, 927, 50166, 20519,
-31129, 55936, 9888, 47640, 17748, 29845, 62049, 6481, 46085, 27983, 15784,
-57250, 35944, 4446, 50259, 21684, 41945, 11968, 65084, 26484, 49237, 1514,
-32587, 44260, 13657, 55893, 23374, 40353, 9076, 60572, 30532, 16679, 49463,
-37254, 1216, 56655, 25243, 46976, 10532, 40549, 22198, 63531, 2345, 34924,
-54048, 20900, 46172, 10452, 34891, 64612, 20672, 47965, 6371, 33140, 57797,
-13525, 43876, 26371, 52570, 7733, 34572, 64349, 19832, 47349, 2793, 41620,
-26747, 62411, 12464, 41487, 23052, 55002, 848, 38872, 26964, 63918, 11500,
-43826, 20520, 51617, 33582, 5623, 56699, 36521, 14910, 49793, 28225, 4081,
-55273, 36601, 14595, 45847, 23924, 58859, 1491, 38499, 17464, 52814, 29484,
- 8931, 64322, 36356, 19212, 41791, 25417, 52053, 12996, 30649, 55474, 3422,
-46866, 27850, 15487, 57485, 36730, 1787, 49658, 20422, 32700, 59231, 8512,
-44206, 19163, 36262, 61715, 552, 33218, 52680, 18565, 46756, 11313, 32664,
-60361, 5254, 48718, 29256, 16865, 56808, 35623, 9097, 50523, 20574, 32367,
-55278, 5789, 47448, 17511, 35366, 57891, 8579, 29983, 51071, 13689, 42989,
-22492, 61660, 1850, 39517, 27196, 50768, 14201, 34903, 58564, 9098, 45072,
-28445, 16420, 55444, 38024, 3694, 29381, 60002, 20416, 47700, 1743, 34732,
-53047, 20076, 43846, 6718, 59370, 25275, 39992, 12662, 52879, 29258, 4119,
-58226, 36920, 16550, 50181, 28077, 1972, 60329, 36097, 17615, 49835, 9232,
-32109, 57446, 16720, 46773, 29834, 4065, 63140, 37609, 21096, 53526, 9584,
-42487, 25909, 54383, 13419, 32760, 59172, 4346, 43327, 24187, 51281, 14512,
-36990, 63101, 6113, 30499, 49044, 17927, 53443, 9519, 38309, 27239, 64325,
- 4724, 38268, 22857, 50684, 10908, 32995, 57572, 20573, 44321, 8766, 31416,
-63158, 20473, 43103, 1736, 53265, 18160, 33209, 65345, 6141, 44844, 17096,
-34530, 54893, 12483, 42993, 23961, 57521, 3720, 34567, 52648, 14065, 42408,
-23910, 64177, 6058, 33081, 46213, 19459, 56563, 9861, 31946, 44191, 21054,
-53948, 4847, 36249, 59191, 15069, 31080, 48265, 10036, 57389, 20781, 32477,
-45222, 2960, 62613, 19846, 32466, 44478, 9965, 57247, 19683, 33537, 51341,
- 1843, 42511, 23659, 60618, 11022, 40685, 17964, 52940, 31100, 6630, 62989,
-35386, 18197, 49701, 11423, 42784, 25227, 64073, 1192, 34333, 53929, 17822,
-47347, 10645, 41424, 21068, 62903, 28803, 8124, 52712, 36621, 19395, 63388,
-11291, 46189, 31015, 15268, 52139, 36058, 4422, 58392, 28286, 15022, 50078,
-36205, 8409, 55095, 25411, 43372, 3582, 61416, 28467, 16017, 50291, 38166,
- 8664, 30970, 62949, 19328, 43861, 2888, 55098, 26940, 38698, 9001, 58484,
-18616, 35845, 50125, 6561, 30001, 61226, 19558, 46790, 11336, 39689, 22487,
-56684, 3554, 34491, 44559, 12868, 62198, 23653, 40049, 9209, 48806, 21895,
-64105, 5157, 30726, 46565, 19178, 57179, 1600, 34190, 45209, 17342, 62410,
- 5390, 34916, 43871, 14656, 57498, 21638, 38328, 7562, 47037, 27176, 65148,
- 2650, 34484, 45031, 18277, 60147, 12004, 40817, 25827, 54158, 4496, 34073,
-45749, 15657, 62135, 27732, 2460, 49669, 37241, 18614, 59202, 8826, 30137,
-48548, 20673, 56397, 1345, 39512, 26559, 51943, 6334, 30908, 62722, 20297,
-43457, 9487, 52042, 18352, 32060, 64144, 6837, 43070, 24607, 52532, 10791,
-35185, 56048, 19776, 45967, 1053, 35229, 62034, 14365, 28789, 44493, 3193,
-64615, 25503, 41000, 13620, 54999, 25424, 44765, 2051, 37554, 57740, 14529,
-29511, 51103, 6169, 42576, 25198, 62772, 11864, 38626, 18463, 52299, 31752,
- 5946, 57910, 36416, 19150, 46794, 9545, 61447, 25764, 40359, 398, 54307,
-21709, 48339, 9749, 31414, 63133, 13346, 43518, 23568, 49562, 7144, 32601,
-58493, 12950, 41883, 24763, 51451, 3310, 34920, 59594, 13531, 42096, 23230,
-51835, 478, 32672, 63738, 19688, 43413, 10428, 55074, 27224, 38294, 7622,
-58770, 20089, 34987, 46967, 5299, 51149, 19414, 31885, 63901, 2712, 43462,
-25273, 58918, 11129, 41198, 21397, 53351, 7056, 34386, 60873, 18678, 45176,
- 9051, 32316, 59431, 17105, 44031, 4139, 31909, 56279, 13967, 49396, 24919,
-40274, 1825, 62186, 23668, 38666, 11951, 54333, 21562, 41489, 4185, 56261,
-25947, 39070, 11131, 59453, 24219, 38898, 6599, 53166, 18575, 32819, 48869,
-10046, 57734, 25792, 38448, 2411, 53439, 17835, 30831, 64819, 9420, 42998,
-23033, 52102, 13443, 32931, 60418, 6502, 43877, 30314, 19678, 63012, 11019,
-42915, 22656, 50634, 3818, 33766, 58145, 10984, 31282, 47030, 5008, 65267,
-23330, 41305, 14328, 58982, 30491, 6997, 50646, 35311, 17504, 63662, 10263,
-41598, 27132, 52097, 4416, 30488, 55917, 15809, 47569, 27612, 8992, 65371,
-38209, 16639, 28384, 54966, 1204, 41765, 23392, 59156, 12780, 32919, 47084,
- 2784, 63942, 24944, 38863, 12660, 60745, 22516, 43575, 489, 53503, 28442,
-16062, 63507, 38230, 5744, 30854, 55647, 17965, 43670, 7055, 53896, 21006,
-32902, 63921, 217, 41269, 22494, 52284, 14024, 34517, 62705, 8299, 44077,
-27755, 16746, 56053, 38153, 9801, 31417, 65008, 18196, 42285, 518, 48409,
-26412, 62176, 14372, 32968, 44658, 6919, 56605, 30894, 18581, 53420, 11040,
-42159, 26246, 64875, 16, 34771, 52921, 14843, 44654, 27838, 8016, 58657,
-35139, 17067, 51752, 2301, 34408, 46468, 21193, 63869, 7443, 38572, 22538,
-55877, 9778, 46782, 28084, 15925, 58288, 34800, 3050, 45962, 23349, 61490,
-11936, 41921, 25725, 56449, 7305, 40481, 17156, 52919, 28269, 176, 61840,
-36022, 17150, 49414, 5047, 33414, 55983, 14440, 46853, 25093, 38522, 8468,
-59241, 20029, 30589, 48229, 2242, 61579, 19793, 30057, 45767, 9539, 63341,
-19479, 31475, 47295, 27, 55259, 25523, 38989, 11659, 61090, 22407, 47838,
- 2728, 37332, 63166, 15771, 28610, 51920, 8812, 41596, 24888, 65497, 1931,
-39104, 23207, 54124, 13727, 48917, 29352, 8371, 58515, 37483, 17242, 47939,
- 4498, 65031, 20968, 31809, 45897, 9441, 56562, 26305, 38537, 947, 48446,
-22342, 58523, 10339, 38965, 27093, 55818, 3096, 35362, 50897, 15499, 30938,
-60825, 9059, 43091, 26542, 58396, 3549, 37333, 51583, 15451, 30268, 47076,
- 558, 59184, 23756, 40502, 7182, 55241, 25806, 40047, 10192, 62283, 19851,
-34985, 53457, 1089, 30124, 47393, 18649, 63865, 9962, 38826, 22710, 56644,
-12740, 34427, 53475, 4675, 42636, 23818, 57617, 10466, 31880, 50659, 13516,
-43492, 22811, 62583, 1819, 34176, 53378, 15605, 43968, 28199, 5214, 58024,
-36348, 14751, 48413, 23848, 63536, 5834, 32031, 47033, 16975, 53669, 29560,
- 1955, 58176, 37815, 12044, 50191, 28222, 15544, 54956, 38131, 7279, 29898,
-59548, 20317, 48859, 11483, 39648, 26776, 63630, 174, 49519, 24206, 40451,
-11219, 53820, 17243, 30829, 58304, 9228, 42845, 24509, 51079, 1261, 31845,
-61342, 19401, 43052, 7802, 55805, 20870, 35580, 51504, 13042, 31464, 64989,
- 4774, 44967, 24899, 40760, 13103, 61749, 34621, 8104, 46446, 22824, 59640,
-12642, 40651, 26086, 54867, 75, 38777, 24805, 57182, 12180, 41423, 21473,
-50882, 2777, 31687, 63357, 15520, 44045, 28071, 7468, 58286, 37840, 20325,
-52705, 10211, 34478, 48418, 18711, 56579, 6064, 34284, 46508, 12374, 60174,
-20388, 33319, 46452, 4389, 52872, 18579, 33843, 58622, 894, 47375, 23425,
-41511, 10132, 48760, 26260, 63876, 2236, 40007, 22258, 55324, 11139, 33143,
-45254, 13610, 60233, 24728, 38668, 5029, 55683, 18364, 35923, 51240, 2315,
-29057, 61995, 14780, 42641, 22693, 53042, 8161, 32091, 61443, 16143, 45205,
-28302, 4695, 56677, 37022, 16740, 49443, 28592, 5816, 60399, 36709, 18354,
-48279, 2260, 62811, 26198, 40071, 10116, 53433, 17102, 29589, 57554, 7398,
-41952, 23944, 55014, 12155, 38462, 22586, 51072, 3693, 31844, 62865, 15730,
-44179, 28030, 413, 52692, 35976, 20068, 57451, 11950, 47161, 26833, 38771,
- 7900, 60490, 21633, 43282, 10973, 55097, 26734, 41774, 5829, 63665, 18291,
-35127, 50669, 9606, 31545, 61123, 18783, 45083, 2006, 36552, 55635, 15621,
-29485, 46224, 3687, 63360, 23860, 41420, 12600, 47298, 22246, 60819, 7673,
-39124, 26589, 48834, 1111, 62361, 21665, 39847, 12298, 56528, 26387, 49250,
- 2898, 34564, 47465, 13848, 55375, 24148, 40838, 7617, 61780, 19899, 57127,
-11646, 32823, 45408, 17612, 54526, 211, 38633, 25442, 61303, 11239, 43676,
-21815, 54105, 2532, 33773, 58652, 13754, 45787, 23451, 41125, 6365, 60554,
-29431, 14428, 53940, 36919, 4003, 49545, 20680, 33435, 62959, 7303, 45476,
-28187, 16701, 53565, 37168, 9613, 57494, 21771, 42350, 6310, 51825, 31441,
-14672, 60192, 35919, 9680, 49078, 27347, 16384, 59015, 36303, 3859, 49628,
-30116, 19703, 60541, 9233, 42115, 25389, 50313, 13000, 35761, 57764, 4523,
-30002, 49829, 15287, 34198, 61725, 2850, 45238, 27642, 14683, 54570, 38018,
- 7722, 30721, 58799, 19543, 49156, 10491, 40741, 23133, 63322, 2830, 35001,
-47308, 20555, 60752, 5643, 33376, 46302, 13646, 55843, 24823, 39116, 4947,
-62707, 19902, 37082, 49539, 10196, 28586, 61224, 19330, 41504, 3637, 56443,
-26432, 41261, 13060, 51995, 30408, 447, 60779, 37729, 20313, 50132, 7809,
-37336, 54832, 16212, 31658, 47159, 1644, 63736, 20916, 33557, 44710, 10500,
-58089, 20184, 37584, 50286, 6805, 29019, 60639, 19417, 41270, 10765, 64069,
-26546, 39969, 3131, 49331, 22552, 55976, 11958, 34965, 43975, 17789, 58592,
- 4545, 33370, 51245, 17200, 44170, 8743, 30064, 60046, 18305, 49120, 5339,
-40462, 26764, 53324, 13302, 33094, 58273, 4533, 45221, 20669, 31932, 55637,
-11039, 47269, 19554, 31847, 59966, 6605, 45449, 17913, 36325, 63119, 210,
-28439, 44295, 18693, 55023, 11706, 40402, 25543, 61706, 6230, 33590, 52080,
-18984, 42777, 12195, 64674, 25545, 41633, 5736, 47606, 21310, 62167, 12887,
-39727, 26479, 54494, 4868, 39525, 23347, 56032, 10296, 43626, 21894, 61540,
-13812, 33216, 54440, 6051, 44068, 27899, 16410, 64705, 36687, 2780, 50396,
-28926, 15979, 57599, 37848, 9517, 45835, 23443, 60083, 6518, 41173, 27142,
-52303, 2352, 43818, 19028, 60933, 30173, 14069, 49284, 37302, 666, 65115,
-27700, 16542, 52221, 38111, 7413, 29899, 56842, 19822, 47450, 10011, 31721,
-64364, 21046, 44637, 59, 32190, 54917, 10695, 42345, 25730, 59337, 13566,
-34791, 51267, 6420, 43809, 27380, 16903, 61260, 35745, 3346, 47078, 23032,
-65022, 10214, 39388, 26962, 51862, 3814, 31223, 55684, 15425, 45025, 29012,
- 7049, 61213, 35840, 18994, 47961, 3136, 62815, 20724, 32943, 52585, 6522,
-39653, 21955, 57064, 10925, 36932, 49825, 16171, 29179, 62554, 614, 47111,
-23825, 40991, 11612, 55003, 21549, 48997, 2154, 33277, 57705, 15189, 43310,
-25758, 50672, 3588, 33201, 65167, 18756, 45403, 7927, 34010, 61375, 16054,
-47417, 29644, 5689, 60272, 37548, 20265, 49836, 8736, 34835, 56779, 18359,
-47342, 4357, 32311, 61526, 16424, 44874, 28432, 364, 63923, 37975, 16422,
-30852, 49013, 8353, 62449, 24310, 40798, 11063, 54563, 21965, 39441, 7380,
-64996, 26647, 49217, 12470, 39040, 21352, 59432, 5728, 33108, 53304, 15985,
-47886, 28473, 4293, 62645, 35562, 19098, 52000, 8632, 43065, 26199, 65491,
-11999, 40826, 22877, 59130, 6261, 31707, 47226, 18648, 56913, 1479, 39451,
-26751, 48451, 10875, 64947, 21302, 39546, 7143, 51133, 34750, 12621, 57495,
-24199, 45158, 8445, 40272, 23798, 54684, 11667, 43583, 20877, 61655, 31420,
- 54, 49765, 36215, 20291, 64585, 4595, 42665, 26889, 60289, 13985, 46656,
-29228, 6608, 56917, 36812, 17898, 47171, 9885, 65172, 25923, 38982, 5385,
-48810, 22584, 63081, 1119, 33972, 46101, 16619, 52201, 29746, 3781, 58989,
-37558, 16218, 49444, 27748, 654, 57400, 37086, 14691, 47733, 25525, 65314,
- 5666, 31897, 44131, 19664, 58643, 8930, 35977, 50566, 15591, 30933, 55685,
- 4841, 42175, 25324, 58661, 11168, 46482, 30539, 16833, 55081, 36178, 5456,
-47967, 22439, 64606, 10272, 31599, 44494, 15894, 60966, 28131, 2074, 51594,
-35693, 17764, 26118, 40410, 4419, 49111, 22833, 60059, 9656, 33247, 46048,
-16080, 52756, 28121, 5908, 62226, 37746, 15209, 50015, 27765, 8229, 64315,
-36483, 20278, 49666, 2065, 31697, 58264, 16995, 44615, 27384, 9756, 53006,
-37655, 18912, 59881, 4456, 31949, 50230, 15046, 44696, 27931, 2167, 65056,
-37413, 16620, 54932, 27632, 4729, 49484, 37904, 19535, 52854, 1507, 32692,
-64704, 17563, 47192, 7971, 33502, 56787, 15610, 46247, 29508, 2155, 64415,
-37454, 19472, 53646, 7959, 46734, 25050, 40688, 11862, 59557, 21924, 49127,
- 5208, 33904, 63628, 16304, 45531, 28317, 1567, 52118, 35836, 15166, 57123,
-27670, 9017, 51429, 38161, 14947, 28735, 54521, 7773, 41591, 23627, 59662,
-11743, 41280, 22131, 52271, 1223, 32766, 58099, 18046, 43020, 7004, 51421,
-30862, 14948, 62154, 35587, 5532, 49386, 20466, 33679, 64759, 10912, 45174,
-18527, 29649, 57424, 4216, 48485, 27969, 14741, 59706, 38094, 8395, 30234,
-54624, 17514, 47784, 3296, 31180, 59629, 14661, 42823, 23171, 51653, 1291,
-34537, 55281, 17470, 45380, 9612, 35790, 57794, 15932, 29216, 47434, 6758,
-62417, 24487, 39930, 11373, 53623, 21093, 35064, 57082, 1563, 45798, 20873,
-33944, 64811, 10193, 43187, 18999, 51283, 30096, 6958, 62039, 36824, 18360,
-50194, 904, 34648, 62741, 17114, 42937, 5320, 56665, 27091, 40264, 10805,
-51464, 20690, 34358, 61039, 7643, 47012, 29757, 15999, 53689, 37295, 2408,
-58999, 28029, 15536, 49277, 36405, 4070, 53632, 29480, 16421, 58274, 35954,
- 8653, 50200, 24913, 41567, 70, 59825, 19632, 36957, 49734, 7750, 30723,
-65355, 18532, 47648, 2514, 39596, 25816, 53079, 10964, 31474, 60337, 18179,
-45853, 7635, 33728, 56026, 20946, 44799, 4092, 31988, 64345, 14373, 42703,
-24600, 54630, 11664, 38271, 21403, 62523, 5418, 32897, 51439, 17926, 43176,
- 9305, 58045, 20884, 30097, 54019, 4118, 44996, 27539, 15072, 61933, 37468,
- 2768, 50741, 27683, 12731, 55903, 36913, 18634, 48745, 7694, 61536, 22153,
-40967, 3046, 52711, 28890, 16609, 63073, 37335, 7966, 48199, 23898, 57278,
-12751, 41029, 21580, 54388, 757, 32164, 45077, 13478, 57929, 21747, 38515,
- 5493, 60142, 25434, 49328, 13872, 32123, 44173, 8528, 55688, 24845, 40843,
-12725, 47178, 23872, 63796, 2244, 31050, 46886, 18932, 59876, 5171, 32500,
-44709, 14300, 57365, 26074, 38489, 6541, 63452, 27228, 38335, 10235, 52668,
-18638, 30016, 62408, 6043, 39943, 22126, 55807, 9843, 30516, 47665, 13307,
-54104, 22866, 40102, 1808, 58142, 26955, 39478, 10340, 53296, 17591, 32629,
-64771, 2196, 43774, 27438, 14647, 53437, 36710, 9830, 58777, 24524, 42404,
- 7258, 54449, 21878, 40723, 3508, 57297, 30012, 16088, 50314, 35296, 1723,
-61373, 23929, 45525, 14490, 33228, 56862, 3688, 42663, 23254, 51549, 13487,
-29922, 62058, 8186, 43908, 27310, 16488, 57421, 37441, 1309, 49536, 28013,
-15919, 53415, 37924, 3654, 31993, 55045, 17553, 48700, 9175, 40551, 26188,
-63224, 12450, 38437, 23019, 54305, 3736, 32832, 58865, 14466, 42866, 23015,
-53140, 834, 32285, 64338, 15923, 47497, 29372, 3482, 59963, 35143, 18163,
-50253, 6421, 34601, 59287, 15964, 45673, 27835, 8872, 57121, 35310, 18486,
-52106, 1631, 41811, 24948, 54634, 11660, 40491, 22732, 60591, 2961, 49348,
-27266, 41232, 11149, 55349, 21077, 39792, 14207, 58112, 28510, 6507, 50002,
-35344, 14091, 64898, 22691, 44479, 7321, 30340, 55072, 13666, 42877, 22470,
-59992, 8581, 33648, 48793, 12993, 54762, 22960, 40197, 22, 62083, 26002,
-48358, 12096, 39634, 21371, 64556, 2764, 38383, 23338, 52010, 8518, 32580,
-60198, 15362, 44096, 29781, 481, 53191, 36500, 19166, 59306, 5991, 33896,
-49694, 20717, 42416, 9987, 64079, 14768, 44603, 28100, 8052, 52817, 35906,
-19197, 63396, 2903, 31375, 50499, 11930, 44219, 31023, 20651, 57822, 1040,
-34352, 44936, 18137, 53690, 10936, 40415, 25661, 61981, 6660, 36369, 50570,
-14243, 30701, 64620, 325, 43987, 27673, 16259, 54297, 37749, 10232, 61302,
-30533, 18828, 51202, 6866, 44085, 30240, 13880, 56226, 35036, 8708, 62193,
-23744, 45283, 12104, 40622, 22206, 55437, 5362, 38780, 27012, 60097, 10801,
-43926, 21790, 50815, 6853, 32365, 61168, 15642, 44237, 28151, 985, 57113,
-37962, 15533, 30150, 47592, 6330, 55017, 24633, 40319, 11121, 60563, 20404,
-37743, 49858, 4663, 29441, 64565, 19587, 45781, 832, 34102, 61291, 16220,
-44789, 27767, 3415, 65398, 36650, 17395, 47546, 8677, 54603, 26574, 39430,
-11565, 64147, 22010, 47307, 1694, 36940, 57508, 16735, 28718, 50808, 9235,
-42704, 23567, 58967, 2582, 33251, 52965, 16547, 44046, 27313, 9736, 65510,
-35069, 19871, 51748, 5164, 42328, 26525, 63416, 13435, 34291, 46791, 7376,
-56647, 25606, 39030, 11989, 64937, 22644, 48702, 5658, 41083, 25818, 59761,
- 651, 33727, 52926, 15060, 44672, 28231, 3373, 64314, 37697, 14707, 50151,
-27646, 7568, 59808, 38036, 16219, 30367, 55432, 2445, 48674, 24426, 40105,
-12651, 57670, 22071, 48894, 8471, 40251, 25693, 54486, 12834, 38715, 22438,
-64209, 3250, 43364, 25795, 52943, 13129, 31366, 56612, 5018, 41783, 22956,
-51125, 13744, 33002, 63627, 8077, 43392, 22122, 55661, 11551, 41288, 24681,
-62842, 2049, 43805, 21730, 52158, 11301, 33211, 63932, 15043, 45376, 28008,
- 6286, 52667, 35024, 12995, 58944, 23186, 44620, 9052, 34449, 57009, 19199,
-48771, 1431, 41016, 25597, 62519, 13408, 48693, 28519, 9007, 52968, 37149,
-19689, 57863, 175, 48360, 26972, 39910, 7793, 59067, 23466, 43964, 13544,
-55471, 26302, 38858, 1997, 63176, 32933, 14547, 49969, 36835, 6077, 56231,
-21072, 33238, 48278, 9361, 60454, 20497, 33454, 45159, 4672, 65374, 25255,
-39603, 9712, 54359, 24706, 45011, 14083, 32827, 55894, 1176, 43874, 27691,
-16197, 60847, 36319, 4474, 50480, 29295, 15927, 64312, 35812, 8188, 48195,
-26478, 60781, 11304, 41200, 22933, 54367, 1584, 34743, 48334, 17492, 65534,
- 4375, 38345, 27254, 59160, 9747, 49205, 17673, 34599, 44912, 7353, 55284,
-25581, 39474, 11965, 64688, 23642, 49030, 1742, 40305, 21856, 53481, 13819,
-32250, 60290, 3307, 42478, 23477, 51211, 13484, 34756, 59069, 943, 44089,
-28122, 16736, 63808, 35249, 4700, 51560, 25801, 42377, 12728, 62879, 22483,
-46294, 6435, 29615, 56159, 20736, 48778, 11289, 41347, 22797, 60899, 2981,
-33075, 46846, 18435, 52244, 10924, 33644, 65225, 15506, 45651, 27929, 5038,
-59716, 36731, 18086, 51393, 6547, 43139, 26883, 63595, 10886, 30567, 52886,
-17953, 46530, 643, 34323, 58999, 15534, 45927, 28893, 6276, 54193, 34861,
-20008, 64042, 7317, 42673, 25736, 56619, 12781, 39762, 22317, 61137, 220,
-31351, 45775, 19327, 57462, 5619, 32893, 44345, 15599, 52062, 30389, 7588,
-61912, 25759, 47285, 11770, 40494, 21958, 56361, 5454, 34144, 51751, 20510,
-42651, 9342, 63468, 26463, 41502, 13366, 55454, 30900, 2941, 50728, 37761,
-17057, 62052, 29393, 9821, 49453, 37139, 20182, 64171, 5879, 32967, 45430,
-14482, 57773, 21407, 38249, 7444, 48216, 26372, 62497, 2054, 34760, 44167,
-19797, 60849, 9435, 40098, 26221, 52913, 2723, 32415, 61945, 12570, 48273,
-25627, 38728, 1587, 51522, 19017, 29502, 63174, 4680, 44493, 28300, 16649,
-57873, 36986, 9527, 53088, 23339, 43513, 6059, 56532, 26915, 41267, 10593,
-61060, 19087, 36952, 49410, 4164, 28127, 62584, 18024, 46457, 9791, 41225,
-26163, 56468, 13637, 36826, 51119, 3314, 29072, 58414, 54337, 36696, 847,
-47305, 24505, 59443, 10106, 40276, 26095, 56024, 13636, 34329, 47977, 5581,
-65098, 24727, 40674, 12748, 48392, 23051, 61130, 3659, 38660, 27073, 54668,
-12336, 43699, 21685, 59150, 5302, 32635, 52437, 19653, 46924, 8182, 33339,
-63353, 20801, 45110, 3943, 33903, 57242, 16969, 47597, 27393, 1045, 60327,
-37589, 17128, 53637, 27564, 3401, 50214, 36849, 13945, 62846, 25386, 43278,
- 444, 53788, 22874, 39797, 12766, 63304, 26588, 39453, 3322, 55115, 20155,
-30954, 48152, 8798, 65323, 25678, 41241, 13148, 49042, 22418, 61406, 2337,
-32974, 44544, 18276, 57801, 9465, 34099, 52544, 13707, 42373, 25400, 58724,
- 6077, 31618, 52202, 18946, 48411, 10203, 31240, 56687, 20584, 43628, 4679,
-59250, 30604, 15511, 50045, 36968, 6182, 60319, 25328, 42007, 13966, 54771,
-30556, 4074, 52445, 37370, 19206, 61924, 12383, 45493, 31250, 6016, 60594,
-37442, 18492, 46811, 700, 55215, 27234, 38319, 11393, 57964, 23691, 49192,
- 1947, 39051, 21693, 61300, 14202, 31437, 53777, 3755, 44376, 20723, 31342,
-60786, 9177, 49428, 20363, 31970, 46456, 6073, 61698, 20169, 33603, 48228,
-10940, 58782, 19969, 31907, 44820, 4036, 53043, 27411, 14161, 62820, 36982,
- 9735, 46747, 25808, 59293, 4323, 33332, 44985, 16109, 61721, 28770, 2178,
-53027, 34356, 17689, 47039, 9222, 59429, 19787, 34769, 45695, 1502, 64888,
-18111, 34079, 45337, 9737, 58024, 24921, 39275, 465, 52472, 30331, 16000,
-60016, 36069, 7133, 49315, 28272, 15911, 55133, 38082, 4333, 30008, 56946,
-17030, 47879, 27346, 1700, 61325, 36429, 16920, 54206, 29548, 4066, 49989,
-37067, 12861, 63210, 23994, 44983, 6637, 34452, 58058, 19319, 44153, 3191,
-34558, 61242, 17807, 44054, 10913, 32488, 55065, 17079, 42064, 3891, 64978,
-26420, 38966, 10870, 48457, 21328, 53254, 6926, 40815, 25802, 59457, 10751,
-46362, 17573, 30457, 64088, 907, 41394, 24212, 52696, 11170, 40137, 17525,
-57702, 30165, 1718, 50743, 36179, 19193, 59929, 6722, 35166, 48843, 20770,
-63883, 9256, 33977, 46802, 13201, 58450, 24891, 40120, 6200, 53099, 18520,
-32837, 56495, 2472, 43081, 21161, 52363, 14553, 36562, 62485, 6867, 29889,
-45974, 19747, 56598, 11723, 40223, 23041, 52882, 455, 31713, 62246, 13393,
-41858, 23444, 52916, 3536, 33335, 56333, 18412, 46836, 10267, 32062, 61724,
-17793, 48379, 7088, 39003, 26467, 57263, 14805, 31862, 47214, 5141, 53769,
-27541, 15799, 61617, 36618, 6983, 47129, 23978, 55135, 11010, 39055, 21409,
-57602, 3570, 37015, 50618, 15182, 31495, 61461, 681, 44894, 28042, 16785,
-55126, 38025, 8359, 29929, 62596, 17195, 49180, 1423, 31518, 44330, 12306,
-58315, 23631, 39545, 8022, 54964, 21393, 38975, 12980, 60323, 27281, 38433,
- 2843, 55291, 19679, 32653, 44487, 8904, 64764, 27460, 14362, 50273, 37725,
- 3169, 56894, 24940, 41647, 10407, 51555, 17272, 31535, 62554, 4673, 47865,
-29300, 14704, 52107, 36875, 8380, 64214, 27736, 16636, 50065, 37268, 1969,
-59834, 21960, 44930, 14027, 35907, 53834, 3211, 30791, 62972, 15174, 44278,
-27787, 7705, 60701, 37342, 17407, 53768, 1078, 36972, 49518, 15151, 28622,
-65358, 7853, 46578, 27314, 14323, 53512, 35854, 4786, 59144, 27840, 16810,
-51675, 35635, 697, 48432, 26395, 63405, 10202, 40514, 22752, 53187, 13800,
-31902, 57160, 5027, 48158, 29025, 16363, 55255, 37250, 10490, 45359, 23774,
-58042, 5974, 41836, 23074, 61353, 14080, 31442, 53530, 7119, 40972, 24126,
-59141, 13615, 46857, 30005, 2280, 51809, 35235, 12409, 63585, 29391, 16214,
-49601, 35533, 1220, 54744, 25081, 42545, 13337, 57851, 29301, 8003, 51110,
-37366, 20906, 65523, 1704, 48163, 23226, 40781, 9327, 61216, 32242, 16992,
-63822, 10932, 40867, 19608, 52039, 31692, 6225, 62861, 37402, 19707, 50954,
- 1765, 45294, 29024, 16909, 58861, 35953, 7260, 51100, 19749, 31828, 56496,
-10425, 42956, 22667, 63761, 2867, 37605, 49302, 15322, 28447, 55854, 11613,
-42169, 24545, 58623, 1798, 30125, 52997, 12471, 41076, 24335, 59589, 7675,
-36879, 49898, 14360, 30734, 65422, 9483, 44625, 28573, 15913, 58540, 35255,
- 4704, 51595, 23810, 41603, 11288, 56990, 18812, 31204, 47068, 6072, 58921,
-17806, 33484, 51608, 11644, 43267, 23840, 59946, 4178, 39035, 21274, 53992,
- 8020, 38691, 27216, 64011, 13934, 30602, 47013, 3899, 55012, 24157, 39251,
- 8118, 62910, 21523, 46594, 12977, 35085, 55420, 2464, 42065, 24301, 63740,
-12421, 39597, 23589, 52406, 338, 32444, 61805, 20391, 44146, 12149, 32112,
-56568, 7769, 46691, 27894, 16247, 64326, 35793, 1161, 49656, 27697, 14967,
-58019, 35637, 8176, 51123, 23890, 42938, 12951, 62854, 21286, 41678, 5875,
-48421, 25963, 59182, 12893, 33725, 45041, 7054, 51376, 19216, 33962, 63874,
-10979, 46116, 17892, 36275, 53494, 2611, 29751, 58447, 17986, 42411, 10285,
-55639, 26569, 39174, 1164, 52157, 17179, 29663, 65306, 8406, 46871, 28722,
-15681, 56567, 35506, 404, 51742, 21504, 42483, 14292, 64033, 30940, 6021,
-50446, 37267, 19229, 60173, 11103, 42406, 26800, 55932, 3992, 32787, 48447,
-21017, 54171, 11224, 40153, 26174, 61825, 6490, 49177, 17420, 31728, 46041,
-12425, 62509, 25511, 40355, 3502, 51659, 19240, 30895, 64531, 8346, 45546,
-27712, 14581, 59604, 34896, 5586, 51114, 38194, 14330, 28440, 63551, 8665,
-45425, 27504, 15492, 55200, 38196, 766, 29150, 59941, 17198, 49106, 8244,
-39039, 26735, 55373, 14178, 48491, 29600, 5099, 63642, 36620, 20655, 49986,
- 8372, 33844, 58583, 19541, 43482, 1221, 55967, 27251, 38304, 12331, 62696,
-21882, 48096, 3198, 33761, 55041, 20051, 42368, 8569, 60050, 30362, 14290,
-53649, 35802, 5261, 49905, 20941, 32857, 62699, 10562, 45313, 17428, 30130,
-56997, 3909, 44261, 27425, 15516, 54465, 38178, 2203, 29728, 61866, 20426,
-48535, 8657, 41565, 25720, 63281, 11143, 39007, 22117, 47873, 3970, 59081,
-25966, 40301, 10069, 52141, 17049, 34135, 63332, 4989, 44280, 28207, 15849,
-58136, 36792, 5893, 49896, 28546, 14966, 61237, 36139, 8652, 44338, 24651,
-59288, 2798, 39864, 22707, 53628, 12655, 33356, 64417, 342, 44236, 29468,
-18143, 60820, 8149, 37803, 52159, 12315, 30942, 45120, 19353, 65365, 1469,
-37005, 49970, 16582, 29035, 59811, 7907, 41798, 25040, 54185, 9513, 40063,
-21921, 64096, 13612, 34446, 51179, 5173, 42654, 25070, 59204, 13454, 48105,
-22144, 40503, 3911, 49688, 25571, 63138, 13778, 34185, 46316, 39, 54025,
-24589, 42279, 9369, 63277, 22465, 47714, 13142, 37465, 58092, 5337, 30643,
-52111, 20587, 43099, 11507, 61639, 21327, 33023, 46636, 1617, 58962, 19671,
-34588, 44554, 11686, 54789, 24319, 41140, 2804, 58904, 19864, 32051, 46270,
-10563, 55385, 25650, 39744, 6485, 65113, 24960, 43096, 10474, 51136, 19598,
-32908, 57034, 1756, 46344, 19063, 35286, 59036, 9920, 29986, 51349, 18920,
-45155, 4369, 33585, 58296, 16807, 44092, 28294, 1948, 56313, 38119, 15651,
-30333, 48723, 7836, 61144, 23909, 40377, 12881, 55147, 21082, 38266, 3024,
-47114, 26824, 62005, 8749, 35234, 44514, 19272, 59865, 257, 40917, 22371,
-64249, 14756, 31829, 52342, 3302, 46333, 19927, 33939, 55629, 9698, 43143,
-17924, 64726, 30330, 3777, 50003, 37404, 20053, 61268, 10341, 42622, 22542,
-56947, 5313, 32763, 51322, 18322, 43395, 9395, 64271, 20294, 36336, 50093,
- 3617, 31935, 59729, 18634, 45305, 6947, 34994, 56965, 15514, 30063, 52064,
- 5635, 43547, 24336, 12752, 35295, 49800, 4064, 29696, 57256, 17143, 45353,
- 9105, 30466, 60533, 13015, 42008, 23246, 54252, 4130, 32469, 61770, 14474,
-45377, 27351, 679, 55330, 36180, 18321, 50094, 9558, 33448, 60891, 21155,
-45487, 5950, 33811, 62723, 9958, 41523, 22659, 51310, 14452, 34315, 64116,
- 5773, 45796, 28444, 16277, 53092, 35419, 2654, 56415, 19919, 46249, 30732,
- 6163, 63214, 37783, 19192, 54017, 8654, 43655, 26363, 62224, 2446, 33633,
-52426, 13609, 41686, 25028, 64289, 1267, 38859, 22133, 52625, 9803, 33459,
-58261, 14918, 43837, 25942, 55484, 126, 41164, 21786, 59220, 10294, 35982,
-50797, 15501, 31477, 60730, 1493, 42811, 23221, 51903, 14388, 32494, 58181,
- 5345, 46660, 19994, 33613, 60877, 8955, 44681, 17251, 35683, 53792, 5052,
-29606, 63326, 18809, 48542, 2128, 40035, 24975, 59308, 10445, 33401, 54426,
-20092, 44334, 4564, 37797, 53753, 16767, 30170, 64510, 2344, 40624, 26328,
-56190, 11088, 38638, 22607, 52187, 2994, 31068, 62207, 14401, 42145, 24484,
-57460, 282, 40513, 22794, 54716, 6595, 39315, 26978, 62655, 12417, 48488,
-24894, 39687, 5016, 63576, 20933, 32596, 45965, 9639, 57731, 19463, 34645,
-43879, 3769, 60829, 22782, 39683, 12159, 54022, 26675, 39514, 7641, 58184,
-22716, 48484, 12173, 40861, 26027, 52232, 1230, 30277, 65133, 14889, 44644,
-28241, 8085, 61021, 38033, 14636, 29314, 55734, 4652, 47728, 20975, 33754,
-60127, 2210, 42630, 23671, 54807, 9226, 38585, 21624, 58676, 14906, 37085,
-49642, 826, 32656, 60646, 19001, 41443, 10494, 55802, 20961, 30645, 49696,
- 2364, 37751, 58231, 17066, 31531, 48940, 5086, 64886, 19907, 32526, 46441,
-10129, 51955, 19799, 32177, 62826, 1670, 43374, 24820, 58316, 12529, 39469,
-22346, 54457, 2689, 30599, 47185, 17335, 62030, 11421, 40191, 25761, 51631,
- 4914, 42932, 23284, 58827, 13066, 37679, 50509, 6355, 29204, 56978, 17045,
-46786, 27399, 2402, 64730, 38210, 16522, 29534, 48108, 8279, 55547, 25600,
-39331, 519, 61415, 20174, 37716, 50969, 8685, 30622, 64842, 19046, 45560,
- 5670, 36722, 56406, 15756, 28765, 51680, 250, 42678, 24018, 57298, 15393,
-35798, 50086, 8858, 30855, 61831, 20384, 46321, 1208, 30534, 54710, 20984,
-49092, 8648, 41384, 25468, 64867, 12048, 40441, 22904, 51841, 1466, 31526,
-56669, 19959, 46396, 9806, 32286, 62734, 16629, 45525, 28374, 6213, 51013,
-36581, 19434, 59213, 9502, 33592, 46117, 20837, 56850, 2702, 39807, 26191,
-58512, 13852, 30420, 52767, 5633, 44531, 34393, 13704, 63559, 22560, 46905,
- 4521, 33534, 58012, 18652, 46566, 2498, 39176, 26982, 55930, 10665, 38396,
-21248, 64434, 6678, 38372, 27204, 56460, 10009, 47113, 18942, 31039, 60907,
- 5556, 41823, 22864, 57091, 14403, 35094, 50699, 3602, 29081, 56062, 16882,
-44847, 27889, 1060, 62426, 36007, 18471, 53814, 8513, 37910, 49721, 14658,
-28531, 65180, 5227, 40022, 22496, 57728, 9534, 36410, 49794, 15426, 29642,
-62278, 4316, 41715, 24185, 51167, 13476, 32018, 57935, 575, 45527, 29021,
-16546, 61398, 37218, 6972, 47968, 25782, 54888, 11543, 40877, 25513, 64384,
- 5236, 39736, 22571, 53467, 13940, 30788, 61898, 8407, 48681, 23781, 41826,
-12352, 62781, 22344, 46543, 4025, 37204, 57321, 16189, 31176, 47829, 5959,
-64800, 23883, 41882, 12162, 56777, 17345, 30820, 51927, 5340, 41808, 25347,
-54261, 13218, 34534, 47969, 7870, 56705, 24825, 40289, 12034, 62956, 26911,
-39977, 1013, 52691, 19854, 33647, 57420, 8092, 45747, 27647, 14643, 55040,
-34910, 747, 45630, 23931, 61554, 13007, 41505, 22157, 52866, 2507, 31405,
-56840, 14241, 42920, 24377, 63093, 8871, 40557, 23503, 54460, 12632, 39728,
-26885, 62103, 2370, 38277, 21123, 56111, 48001, 22564, 64963, 14026, 39945,
-26006, 58681, 105, 43136, 18292, 51290, 34918, 7668, 64501, 28309, 15480,
-49384, 37721, 5506, 53237, 27950, 16230, 64150, 38177, 7919, 28585, 57601,
-17176, 43449, 1368, 51950, 28990, 15957, 57102, 36680, 3559, 49868, 27804,
-16505, 55638, 38015, 67, 31297, 61833, 20740, 47945, 8909, 40060, 25625,
-60093, 10951, 49116, 22124, 41053, 896, 56179, 29966, 16430, 49246, 36481,
-10261, 59507, 29520, 18103, 46160, 6534, 57550, 35178, 20024, 50490, 11158,
-43040, 26878, 61289, 2805, 38460, 22813, 51670, 7442, 38279, 21169, 62543,
-11923, 48348, 26072, 41697, 4785, 57299, 29967, 16962, 49723, 36443, 6629,
-64449, 24628, 41825, 9828, 54961, 17761, 30274, 49018, 2927, 57808, 24966,
-39425, 10122, 49105, 22549, 56956, 13140, 34798, 45058, 8193, 51314, 18647,
-36739, 61043, 6204, 29111, 47283, 15531, 57437, 27503, 8902, 49921, 35880,
-19083, 60263, 5580, 45706, 20857, 34172, 60954, 9213, 44607, 19383, 33956,
-55124, 4982, 47810, 18339, 35195, 65178, 9936, 30222, 50948, 14712, 43288,
-21686, 58152, 1895, 32850, 46330, 17496, 54846, 12006, 38551, 27088, 61459,
- 2946, 49280, 24339, 40311, 11227, 56064, 17544, 48011, 29929, 5541, 63645,
-35017, 18873, 46114, 2807, 61440, 26953, 38608, 10390, 54881, 21253, 48401,
- 7206, 36694, 58378, 16336, 30022, 53313, 711, 44506, 27635, 15765, 63835,
-38189, 7577, 28739, 53573, 18131, 41004, 10685, 63377, 27107, 48454, 5213,
-35496, 57084, 13588, 27985, 53516, 9638, 42840, 24843, 65195, 3326, 33526,
-51652, 13323, 41986, 23827, 60304, 7989, 46776, 25622, 40110, 11971, 55775,
-22003, 39613, 3270, 60967, 25579, 42799, 11879, 56190, 23440, 40571, 6775,
-51409, 18993, 33315, 64521, 9676, 43297, 25408, 51789, 5527, 35015, 57390,
-20858, 44546, 9151, 36158, 65479, 16891, 30013, 53263, 330, 44818, 27624,
-15821, 63349, 38186, 9742, 34953, 51824, 14880, 28480, 57410, 4177, 42617,
-23159, 60682, 12138, 33717, 46921, 15801, 52367, 28168, 4772, 58122, 36063,
-17373, 49554, 11090, 30544, 60588, 21433, 44021, 7140, 37389, 54669, 14288,
-29796, 65212, 3406, 43381, 22539, 53497, 6631, 33567, 58507, 15099, 43764,
-27819, 12523, 56242, 38129, 2904, 33140, 59717, 18023, 46049, 4754, 33919,
-55013, 17258, 42605, 6925, 64156, 29428, 15507, 51080, 37396, 4685, 58400,
-24007, 41979, 13348, 55501, 21640, 39631, 4345, 64912, 27007, 48587, 13108,
-31917, 54208, 6798, 43344, 22736, 61956, 11541, 32552, 47032, 18718, 56275,
- 201, 36350, 50912, 15855, 30228, 62462, 7464, 42002, 23770, 49147, 12231,
-59872, 26085, 41212, 993, 53312, 22621, 48565, 15340, 32754, 62169, 2633,
-43211, 24656, 53493, 12151, 39686, 21636, 59951, 6702, 36465, 49692, 15709,
-31303, 64216, 10251, 42295, 24540, 51158, 6297, 31777, 59323, 15645, 45299,
-29526, 2544, 60369, 35732, 18698, 52380, 11017, 42868, 26527, 54152, 792,
-32499, 59624, 18637, 43465, 6913, 53656, 20820, 34846, 63532, 9516, 47080,
-19354, 34335, 56239, 4653, 49175, 23981, 40329, 12299, 62612, 22329, 38679,
- 3333, 49040, 21330, 57739, 12858, 35169, 44289, 286, 55773, 25245, 39553,
- 5806, 59739, 21230, 38692, 10320, 54840, 32561, 14831, 51480, 28267, 962,
-60154, 35946, 19600, 45097, 10594, 53958, 26192, 39279, 1557, 60885, 20200,
-33191, 46826, 10067, 65392, 18394, 31019, 45169, 2262, 59299, 26231, 38423,
- 6683, 51776, 17292, 31919, 60470, 10307, 44290, 27869, 15693, 62529, 36783,
- 5523, 50924, 29353, 17013, 65182, 37072, 7594, 47903, 25469, 59960, 11649,
-39765, 26776, 55552, 6500, 38821, 21902, 49857, 384, 31103, 58755, 17607,
-46615, 4840, 32705, 49691, 14578, 60239, 25616, 42017, 7396, 11459, 51668,
-30479, 3678, 55404, 35692, 20399, 46028, 10492, 62520, 21153, 32185, 44457,
- 2177, 57039, 24896, 40068, 10876, 59469, 20151, 30640, 50587, 2628, 41624,
-19625, 59924, 30868, 10291, 54057, 36663, 18906, 49580, 7082, 32280, 65025,
-12983, 46702, 23776, 41767, 10511, 60536, 25544, 40479, 7243, 50946, 18551,
-32599, 57613, 3075, 44050, 27984, 12320, 62029, 35418, 14981, 51062, 27442,
- 7378, 64571, 37741, 20767, 49810, 3938, 34014, 55979, 14044, 42339, 24174,
-62938, 5092, 31557, 53275, 18018, 45249, 9393, 32144, 64944, 14426, 43431,
-24610, 56356, 3311, 39903, 22234, 53210, 14244, 35014, 63279, 8548, 46727,
-28001, 15909, 53595, 38022, 735, 31002, 59467, 20727, 47481, 12271, 40660,
-26256, 64860, 7421, 45852, 18363, 34123, 59925, 1003, 41671, 24439, 53305,
-14853, 31340, 65160, 3391, 42583, 24088, 51857, 13649, 34980, 62755, 73,
-45320, 24471, 40031, 11824, 53198, 17161, 31928, 57422, 1456, 47252, 27923,
-15695, 62548, 35928, 7779, 50880, 28312, 15368, 58706, 36836, 4179, 46799,
-25317, 55865, 8411, 40328, 23260, 61241, 11068, 49072, 26279, 41355, 6238,
-57265, 19052, 33422, 47222, 7435, 64660, 20741, 33067, 45247, 1632, 60302,
-20241, 37807, 49965, 9421, 28811, 56087, 14760, 42342, 24204, 56998, 4938,
-32537, 45509, 14124, 63094, 24883, 40435, 5599, 51373, 20827, 34430, 61444,
-10631, 46997, 19143, 36780, 57698, 3672, 30053, 51800, 14641, 43317, 22015,
-59530, 1613, 32854, 46008, 16742, 51166, 29492, 6531, 61740, 37381, 19196,
-46927, 11751, 54791, 26759, 39416, 5873, 63020, 18604, 36122, 50312, 303,
-29843, 62146, 15347, 44489, 28348, 8820, 52673, 36973, 18423, 59077, 5503,
-36025, 49295, 14694, 31307, 59835, 527, 42075, 22957, 55860, 11963, 31538,
-46061, 18937, 59576, 1790, 31688, 52531, 14977, 45479, 27709, 7968, 60205,
-38202, 14727, 31197, 55681, 3443, 47251, 20891, 32058, 61779, 7294, 45127,
-19356, 35746, 54619, 11287, 30407, 44739, 2130, 64419, 24351, 40601, 10096,
-55321, 20773, 32496, 44952, 1360, 63609, 19849, 33743, 52409, 3760, 46467,
-19420, 32289, 58667, 9408, 45881, 25013, 39712, 12206, 60623, 26866, 39148,
- 2520, 48752, 22165, 64396, 9157, 31382, 47101, 16301, 53202, 28328, 7211,
-61508, 37111, 21026, 47258, 9535, 58780, 19287, 33499, 49875, 758, 43189,
-23472, 54175, 11331, 31093, 61559, 2192, 43490, 22941, 51330, 10088, 32681,
-56108, 19824, 42316, 1076, 62987, 29774, 16223, 50759, 35744, 3874, 59321,
-25232, 42277, 9012, 54513, 21740, 41120, 11189, 60600, 26956, 38415, 4999,
-52481, 17450, 31624, 64953, 9083, 44433, 28660, 14171, 54855, 35719, 6279,
-57989, 23767, 41258, 10376, 50679, 18060, 32623, 65415, 1372, 47212, 26272,
-41303, 12746, 57610, 23291, 39476, 2379, 61383, 20216, 33412, 46671, 7912,
-54431, 25300, 38882, 12593, 56023, 22849, 43887, 5995, 63342, 30664, 15715,
-51144, 35695, 7642, 47202, 24621, 64575, 12723, 39573, 26599, 50525, 2491,
-30718, 60163, 14764, 43852, 27577, 8260, 52693, 36474, 18309, 58237, 1326,
-31802, 50705, 13875, 43572, 25140, 63273, 7973, 33092, 47718, 19177, 52510,
-10853, 36240, 65066, 15862, 29764, 50109, 2404, 43131, 24764, 63151, 6761,
-34674, 46844, 17456, 55587, 8998, 39434, 27195, 63937, 4540, 34719, 48679,
-14072, 58863, 23308, 40089, 3695, 54884, 25899, 49157, 8450, 38967, 23696,
-63282, 12504, 43821, 21619, 49992, 4405, 33708, 55438, 20418, 47934, 1881,
-40936, 25838, 57923, 11778, 40562, 22314, 54506, 2874, 44834, 29170, 15073,
-57609, 35445, 4228, 52181, 23821, 43706, 10784, 61905, 18154, 33860, 52503,
- 7596, 42415, 26216, 64655, 11054, 38477, 24374, 48627, 1375, 57727, 21030,
-38463, 46411, 18704, 61507, 12498, 39335, 26529, 48534, 5424, 60480, 17238,
-36828, 52728, 9024, 28897, 47121, 18564, 54515, 6193, 33730, 62267, 13115,
-42718, 24003, 52213, 4817, 32765, 63537, 13913, 41215, 24937, 47466, 5449,
-61164, 20409, 34290, 44957, 2138, 58931, 19128, 33264, 54191, 5055, 46377,
-28929, 15614, 64436, 36683, 10084, 55054, 20544, 47749, 30447, 5451, 52413,
-37891, 19438, 57301, 2028, 32578, 46667, 17043, 60121, 10997, 40388, 26397,
-54437, 658, 30221, 47243, 17205, 60455, 8148, 34152, 48255, 20980, 54434,
- 1702, 40730, 26888, 59734, 13432, 35515, 49686, 5602, 29102, 58530, 18584,
-45245, 1992, 33436, 60469, 20778, 42461, 11099, 54582, 26180, 40725, 6166,
-61445, 33323, 17115, 51093, 3772, 32751, 54854, 20133, 47966, 11495, 31056,
-62531, 17460, 47364, 5412, 39800, 22092, 57883, 12624, 30607, 46410, 6940,
-54626, 19503, 32020, 59190, 10238, 43046, 22720, 50814, 4295, 29682, 64905,
-20990, 42382, 10759, 54445, 23115, 40897, 2824, 47399, 25298, 60657, 11753,
-41398, 21758, 52853, 1039, 33467, 64335, 17768, 44851, 4720, 34952, 52197,
-15016, 31151, 62494, 606, 44538, 28702, 15710, 53758, 37368, 9300, 56531,
-25222, 42027, 13583, 52234, 31031, 6893, 62261, 35837, 18446, 49530, 101,
-34175, 64304, 12974, 43459, 22349, 51938, 2602, 32065, 59994, 17802, 47726,
- 9355, 41786, 26505, 55236, 1909, 41290, 22804, 65416, 13173, 32610, 46823,
- 6719, 54540, 23492, 39758, 12045, 64391, 25094, 43243, 4090, 55344, 22127,
-41291, 13841, 59452, 29758, 1276, 50033, 36340, 17403, 56473, 9312, 43223,
-23132, 53346, 12824, 33423, 57433, 4555, 46165, 27387, 16527, 65337, 35203,
- 1999, 50379, 27726, 16675, 54879, 38167, 8037, 28972, 63100, 16732, 47529,
-27878, 4775, 53177, 37857, 16299, 64065, 28354, 7203, 49807, 37775, 19597,
-62344, 4056, 34905, 47846, 18676, 54015, 9288, 40567, 26726, 58527, 13026,
-36080, 50165, 1001, 28775, 63098, 16573, 47345, 27478, 5537, 58280, 35524,
-15293, 49915, 29349, 6241, 60277, 35441, 14297, 49664, 27594, 7573, 53749,
-37762, 17075, 62284, 12875, 35820, 50307, 999, 30887, 63013, 18268, 47454,
- 7030, 32403, 56952, 20073, 49585, 10958, 32661, 44642, 18764, 62066, 15,
-39288, 24613, 56437, 13491, 31979, 51198, 3069, 40865, 24553, 62314, 12647,
-39817, 22261, 52740, 6720, 33795, 57967, 12249, 44793, 27796, 16914, 63891,
-37987, 3557, 29913, 47278, 17479, 59893, 11057, 39457, 25871, 54902, 7479,
-48740, 21610, 39823, 12666, 64576, 26748, 49142, 3187, 39047, 24515, 57534,
-12956, 43850, 21726, 54986, 1892, 33556, 48830, 20110, 58822, 3753, 41628,
-25881, 50973, 14989, 32067, 62899, 4437, 45578, 27943, 16111, 51798, 36574,
- 8678, 58925, 24223, 43054, 5217, 52074, 17516, 34431, 55082, 9090, 43977,
-29595, 17569, 64833, 335, 49274, 21720, 41177, 10127, 60896, 26976, 40807,
- 3355, 48404, 23718, 55051, 11974, 39932, 21737, 58290, 4117, 33873, 53315,
-17287, 42513, 10698, 56972, 21252, 35487, 47646, 6105, 61887, 20627, 32710,
-44676, 9957, 60599, 28760, 15851, 53329, 38181, 5561, 29140, 56358, 17752,
-41054, 2817, 61255, 21186, 33883, 46682, 7223, 52009, 19099, 35646, 58810,
-11136, 30652, 50978, 20292, 40662, 3113, 61632, 21272, 34165, 52840, 10099,
-45994, 18947, 31592, 56573, 6364, 44894, 18141, 33812, 62232, 10800, 42482,
-17732, 52151, 31789, 574, 57259, 37965, 16279, 28455, 60705, 9425, 43548,
-23467, 62319, 14215, 35992, 50427, 4857, 30156, 63877, 16398, 46693, 28206,
- 7015, 60916, 37436, 12092, 49750, 27854, 16015, 64160, 38054, 1659, 29960,
-48497, 13167, 60370, 23799, 39140, 3196, 54618, 22231, 49215, 13138, 40231,
-27018, 63533, 5931, 32524, 42177, 24828, 58869, 963, 31638, 53961, 13523,
-42092, 23975, 55956, 3150, 40323, 22610, 65362, 14183, 36984, 50459, 1175,
-28960, 45148, 16687, 58009, 28152, 9021, 49809, 35565, 20684, 56479, 415,
-43769, 17616, 53243, 29379, 7684, 57458, 37680, 16691, 49408, 28753, 9810,
-63074, 37457, 18147, 51352, 1450, 44954, 21126, 33205, 60814, 4007, 44907,
-18266, 32674, 63770, 13287, 47527, 27686, 7894, 61531, 36151, 18376, 51750,
- 3548, 33021, 48717, 12457, 65285, 36170, 20165, 44336, 4397, 56755, 26918,
-39812, 11433, 62336, 18599, 36600, 50952, 6735, 30178, 63737, 19752, 47578,
-10736, 40881, 26003, 55961, 7632, 30360, 47438, 15382, 65475, 28259, 3017,
-50145, 36676, 19066, 56213, 11708, 42803, 25440, 63600, 8539, 38927, 22295,
-59113, 2343, 29254, 44442, 20052, 55302, 9522, 38480, 27269, 61606, 1342,
-34467, 50904, 15010, 40859, 23025, 63564, 3139, 30506, 47674, 18424, 56051,
- 8404, 32965, 45961, 17665, 59891, 5996, 38466, 26895, 57052, 13205, 48967,
-23783, 39429, 6786, 62954, 18732, 30696, 50084, 10321, 35468, 57833, 20470,
-42950, 7328, 54378, 25615, 39103, 11566, 59515, 24767, 43673, 5169, 50993,
-17972, 31819, 63040, 2479, 46427, 27930, 15755, 58438, 36994, 4221, 51212,
-22365, 42994, 11236, 55603, 26655, 39064, 6684, 60780, 19350, 34585, 46023,
-10488, 57213, 22862, 38999, 4402, 51711, 30740, 15663, 59239, 36039, 8223,
-50023, 28382, 16396, 62609, 37947, 162, 31061, 57205, 19397, 48710, 10772,
-38984, 26620, 53065, 8063, 34326, 63721, 18109, 45085, 5383, 34083, 58628,
-20830, 47313, 2746, 37599, 64241, 14861, 28689, 50832, 6613, 41617, 23661,
-59318, 9841, 37813, 53951, 15158, 28989, 46683, 3628, 61473, 24256, 41306,
-10493, 56330, 32136, 14814, 49549, 35540, 3109, 58097, 27453, 13932, 48821,
-35425, 9622, 55950, 24183, 43990, 13422, 32070, 61390, 2250, 49252, 24179,
-41902, 6192, 59859, 22254, 41452, 13986, 55788, 33520, 7992, 50828, 37400,
-17925, 61124, 10840, 42190, 23328, 53965, 2999, 41257, 25118, 65102, 11466,
-46469, 20682, 35684, 57836, 4470, 28687, 48080, 20800, 59541, 10008, 40478,
-26293, 54996, 13485, 34343, 44602, 2053, 63947, 24554, 41043, 5814, 54692,
-23112, 43321, 14486, 58890, 29478, 6466, 49925, 35950, 17494, 65454, 10483,
-43088, 27085, 56351, 4108, 35055, 50706, 14146, 41573, 24563, 60924, 4983,
-32168, 48835, 14832, 52523, 28313, 7920, 57467, 35648, 20870, 49981, 4620,
-33386, 61517, 15692, 45333, 29212, 1674, 56963, 36860, 17897, 45950, 8413,
-61794, 30080, 14944, 51138, 35891, 6131, 60686, 25356, 47355, 10007, 39145,
-22303, 63802, 12713, 45173, 29947, 450, 54458, 37162, 19717, 60713, 11547,
-42162, 23088, 53667, 2823, 33889, 63735, 19092, 46478, 10681, 32458, 49248,
-20853, 60490, 4332, 33915, 47133, 14353, 58895, 26235, 38297, 5579, 48922,
-21115, 57147, 13149, 38461, 25840, 61564, 1663, 33612, 47038, 18350, 62840,
-10001, 30750, 45836, 20592, 51554, 125, 32287, 65461, 13528, 44785, 27412,
- 3692, 51780, 37320, 14678, 56702, 27343, 1915, 49568, 36226, 20142, 64469,
- 9225, 42534, 26464, 51565, 14313, 30392, 59912, 4598, 44853, 27716, 16465,
-55393, 38063, 1249, 28534, 64595, 18519, 42430, 8153, 49060, 26388, 57896,
-13553, 32549, 44117, 90, 61209, 24585, 41107, 14459, 51855, 28805, 2516,
-57614, 35537, 20711, 47337, 5605, 63650, 23461, 41854, 13049, 54334, 31043,
- 3449, 50602, 36161, 18996, 56446, 7339, 34158, 47430, 12237, 59030, 21071,
-33867, 43880, 160, 56236, 19811, 33917, 46056, 8243, 59262, 18802, 36091,
-50756, 5905, 28521, 57185, 20026, 44749, 8719, 33595, 62296, 18178, 44384,
- 5154, 35314, 56557, 15192, 29420, 53373, 9187, 33583, 50799, 8256, 44845,
-20551, 34438, 64323, 4987, 47908, 17054, 36138, 52049, 8387, 30158, 60123,
-12576, 42856, 23204, 53070, 7109, 34486, 62611, 19110, 47816, 3490, 41735,
-27056, 64693, 11061, 39412, 23047, 50647, 13472, 31960, 62218, 3785, 43984,
-27363, 15215, 53915, 36018, 6405, 57442, 26338, 42312, 14252, 53409, 29859,
- 8265, 59002, 38035, 15374, 28570, 54300, 261, 42895, 23700, 56607, 9711,
-39646, 22966, 59012, 14730, 30756, 53680, 5582, 43988, 27933, 15733, 61921,
-34921, 9000, 51973, 24862, 46032, 3079, 31770, 58653, 14749, 44193, 27885,
- 407, 54263, 38149, 17004, 31796, 61637, 4157, 43535, 22620, 51651, 10472,
-35066, 57598, 17971, 44329, 5738, 34373, 62162, 20958, 49002, 234, 41074,
-27222, 52088, 10393, 34524, 57284, 16216, 46375, 32934, 4443, 64133, 25628,
-48981, 13020, 41862, 21445, 60253, 6335, 32517, 53630, 12111, 44786, 28264,
-16463, 61323, 36519, 1979, 53810, 26592, 41754, 11445, 63897, 21276, 40170,
- 544, 51805, 31497, 16064, 59349, 37328, 3784, 49424, 27521, 14483, 55210,
-38184, 2267, 28679, 63643, 16803, 47245, 34341, 3607, 56659, 21845, 45291,
-14028, 36389, 60101, 8125, 28862, 53152, 20495, 44223, 6195, 33267, 65396,
-13308, 42085, 24663, 53381, 8061, 32790, 58986, 15574, 47467, 29437, 1489,
-52708, 36844, 16473, 64646, 28153, 7045, 49867, 36942, 18876, 61999, 11956,
-43700, 24693, 56271, 3184, 40608, 21218, 48979, 11702, 60420, 26673, 39153,
- 4922, 51410, 17621, 35226, 62327, 2285, 31259, 46296, 20601, 57366, 12121,
-41233, 26037, 52144, 7293, 32734, 61232, 18441, 44060, 10404, 32441, 60185,
-16049, 47458, 29191, 1094, 52204, 36359, 19428, 63798, 12178, 44324, 30751,
- 6100, 51678, 35291, 18667, 60726, 1459, 43128, 20908, 52571, 30812, 8478,
-62862, 37547, 18462, 50516, 748, 32624, 64502, 16536, 45344, 28537, 6861,
-54477, 35871, 19019, 46737, 10895, 65271, 26936, 39892, 4482, 52937, 19696,
-30976, 63484, 1701, 44228, 19620, 31984, 56314, 7783, 45960, 28540, 16256,
-59667, 37473, 476, 50346, 18481, 31585, 55812, 8121, 44225, 17818, 33496,
-61286, 2718, 46833, 17219, 36671, 53231, 6155, 29173, 58067, 18220, 47232,
-10588, 38601, 27198, 51985, 4851, 34624, 61005, 12810, 42160, 25150, 54215,
- 1395, 30857, 47056, 19863, 59196, 8718, 30849, 46510, 19723, 62981, 1778,
-30503, 53685, 19142, 46010, 9091, 34723, 60175, 18781, 43958, 508, 37490,
-64776, 14819, 29062, 46645, 10055, 53802, 22268, 41070, 6689, 63206, 25819,
-48903, 10361, 34580, 55317, 20118, 44870, 798, 33750, 64242, 19303, 41939,
- 7370, 57240, 30029, 16228, 52355, 38080, 5225, 28331, 62097, 18317, 46713,
- 9467, 33635, 56125, 20737, 48529, 6396, 40288, 26132, 57910, 14034, 30818,
-53205, 864, 40471, 25031, 62869, 15114, 31110, 44719, 7283, 55355, 24337,
-39677, 11734, 47742, 22683, 64035, 4070, 31729, 44717, 14348, 52665, 29844,
- 8165, 57049, 24923, 44034, 6369, 37403, 60437, 14837, 29088, 54965, 5372,
-41872, 22983, 53616, 15674, 31078, 62566, 8428, 44356, 28280, 16399, 60836,
-38067, 6780, 31504, 54475, 18213, 43754, 619, 57934, 34949, 20369, 49832,
- 9521, 31467, 61981, 13854, 43758, 23004, 52583, 6422, 33693, 57100, 14513,
-45817, 23662, 38539, 5076, 63036, 21141, 47651, 12611, 35493, 53695, 6951,
-30809, 65221, 16036, 45454, 27422, 9128, 55103, 37970, 15618, 29444, 59448,
- 7706, 46749, 27339, 16782, 58399, 38213, 1307, 29418, 46077, 16743, 65075,
-27921, 3930, 53285, 36037, 18526, 50242, 9854, 30328, 63356, 21175, 42635,
- 2682, 54617, 26054, 39323, 11848, 65478, 17186, 32100, 47992, 572, 55422,
-25749, 40948, 11669, 59409, 22748, 47778, 2584, 37488, 63257, 17064, 4213,
-54325, 37299, 15549, 58104, 28505, 10671, 49612, 33451, 18068, 61783, 1821,
-45484, 28270, 16254, 57215, 36264, 4356, 46748, 25073, 55230, 11614, 39282,
-22523, 59122, 9434, 38595, 26064, 53913, 2372, 43354, 21756, 60308, 8594,
-36489, 52546, 16942, 29998, 47496, 615, 65462, 24036, 39411, 11235, 48144,
-22247, 62482, 2690, 40583, 25519, 48458, 11341, 51774, 20062, 36337, 64739,
- 6388, 31088, 50515, 20949, 42762, 2239, 63407, 19029, 35114, 47583, 10312,
-58328, 23556, 40953, 1145, 54695, 22138, 42815, 10817, 64064, 34805, 19770,
-49827, 7085, 32529, 60104, 15555, 44999, 27408, 9011, 54816, 37984, 14937,
-28698, 62928, 1394, 41298, 24930, 54306, 13185, 30047, 47109, 7813, 58703,
-24128, 38500, 13195, 55348, 21964, 42725, 5662, 60659, 29581, 14176, 50441,
-35850, 9923, 58511, 22466, 39293, 2893, 47765, 25235, 56164, 10141, 40248,
-23730, 65344, 5231, 39358, 21717, 51908, 9900, 30832, 47482, 14218, 58576,
-24486, 38250, 5352, 48028, 22013, 55752, 11105, 41132, 26511, 64714, 8010,
-32324, 46501, 18285, 61358, 12503, 31067, 45884, 7759, 58964, 25667, 39624,
-12513, 48726, 24034, 64790, 1441, 39990, 22606, 55096, 10435, 37656, 50403,
-16350, 30153, 57040, 802, 46878, 27886, 16967, 61616, 37036, 3888, 45567,
-24121, 62983, 11785, 40910, 22009, 55372, 3446, 31033, 45213, 13921, 58466,
-22173, 39540, 1021, 54036, 27005, 38727, 10309, 64166, 22468, 46382, 6326,
-33753, 56121, 14002, 43004, 24249, 58855, 7183, 41629, 23829, 54659, 9533,
-48860, 17184, 35592, 65047, 632, 30216, 48145, 15956, 55022, 27574, 4021,
-51339, 35936, 19248, 56379, 8995, 43089, 23125, 61001, 4945, 32258, 48165,
-13787, 57184, 22998, 40895, 7794, 64743, 26436, 39799, 12350, 57129, 25566,
-47790, 5280, 41705, 20238, 59743, 29010, 10560, 53310, 37178, 20759, 48102,
- 3686, 60635, 26448, 39670, 12355, 55885, 21395, 38649, 111, 58123, 29576,
-15255, 49789, 37691, 8715, 55299, 23540, 48415, 12658, 39058, 26535, 57658,
- 3378, 48617, 18533, 31622, 64162, 9443, 43026, 24752, 53295, 13751, 34494,
-57470, 5457, 45328, 20349, 30989, 62155, 9142, 43158, 20245, 51462, 30921,
-12718, 59461, 36699, 810, 49025, 22301, 64640, 14911, 30685, 46132, 3578,
-57296, 20109, 33990, 44600, 10779, 63610, 17169, 34685, 53057, 5987, 44246,
-17168, 34815, 56683, 11684, 41908, 25253, 64195, 3168, 39422, 25101, 55084,
-11981, 47463, 20685, 34794, 58463, 5545, 41831, 25580, 56030, 13768, 36179,
-50513, 2550, 29724, 60194, 16452, 43900, 28253, 4574, 58158, 36866, 17652,
-50579, 10578, 32257, 55777, 20633, 46313, 2247, 34679, 60307, 19845, 48665,
- 7323, 37511, 52927, 15262, 28956, 59284, 1662, 45036, 27818, 16471, 64386,
-36399, 7597, 50783, 21969, 42042, 11454, 57076, 26813, 49026, 3049, 41466,
-22623, 62252, 12981, 46226, 29820, 1212, 53570, 35300, 18524, 58617, 9118,
-33930, 50861, 15352, 41886, 21947, 64442, 2162, 32453, 52287, 16175, 46315,
-27828, 8544, 63657, 37506, 19930, 49372, 1038, 33301, 57445, 13123, 48385,
-24315, 40540, 4465, 58806, 22535, 48919, 10075, 40023, 26020, 63788, 13564,
-31943, 53023, 7581, 42687, 23856, 56122, 3752, 39139, 21427, 63599, 12261,
-30823, 48245, 1794, 59497, 24784, 41335, 11122, 48928, 22160, 55915, 3507,
-40365, 25106, 59125, 13588, 37748, 49507, 4509, 29255, 61739, 18971, 41483,
- 1769, 50953, 32099, 14563, 64458, 36551, 4479, 49754, 27604, 15509, 61591,
-37044, 9094, 48958, 24436, 60072, 14318, 32518, 44542, 5098, 55530, 27570,
-15465, 38165, 60467, 8978, 29853, 50545, 21092, 42245, 3766, 53661, 19452,
-34829, 62793, 9884, 45617, 17576, 36657, 52443, 6862, 28517, 61178, 14457,
-45419, 27492, 64045, 19942, 42660, 278, 52277, 21554, 35551, 59553, 6933,
-43961, 20927, 37868, 53139, 9943, 30655, 63230, 14029, 42595, 21706, 51356,
- 795, 33057, 64023, 17880, 43638, 6754, 50931, 30076, 15510, 61745, 36626,
-11487, 46131, 23580, 58421, 6053, 41089, 24674, 54576, 12394, 43441, 21594,
-59188, 7017, 36815, 50465, 16855, 31483, 57221, 9403, 42633, 22825, 55598,
- 3263, 33971, 46307, 17491, 60275, 9273, 39071, 27172, 53244, 14237, 32375,
-55551, 4966, 45417, 28774, 16324, 60355, 35657, 8281, 50426, 31169, 17978,
-57202, 5328, 43610, 26241, 52033, 13697, 37439, 64793, 2563, 29405, 48594,
-20263, 57879, 5232, 31277, 45757, 19249, 59582, 8988, 32820, 44004, 18594,
-63885, 2318, 32419, 51871, 16283, 46095, 29780, 3730, 64736, 36430, 16737,
-49533, 27979, 887, 54447, 37448, 20297, 63186, 8024, 43342, 26958, 52100,
-14030, 33152, 59207, 386, 43249, 25983, 53040, 14833, 33304, 56761, 3525,
-43505, 23395, 60931, 8598, 40872, 27149, 49045, 12480, 60181, 24700, 38671,
- 1664, 54271, 20529, 29376, 50914, 5446, 36291, 56410, 21181, 42218, 194,
-52070, 18858, 34873, 60712, 7076, 31238, 51191, 11836, 45756, 18155, 31595,
-62074, 4743, 45459, 27668, 14686, 60929, 37976, 8604, 31374, 54799, 14194,
-48638, 27730, 5543, 38138, 53221, 16804, 31569, 58183, 9120, 48034, 25880,
-41049, 6154, 62288, 25121, 47530, 11472, 33767, 60669, 17284, 42878, 3883,
-55460, 29528, 15881, 50462, 36682, 1452, 61651, 21761, 47876, 12895, 39489,
-27205, 60371, 3586, 38419, 22294, 56142, 13621, 44419, 28229, 7605, 61988,
-38223, 12466, 31089, 46404, 21057, 63569, 2426, 39751, 26627, 50666, 11155,
-34391, 58882, 17716, 45262, 31, 36802, 55171, 15934, 31128, 48246, 3372,
-53794, 21470, 38614, 13260, 58778, 31219, 2373, 50289, 36048, 17562, 62280,
- 5641, 44984, 30934, 15239, 58153, 36874, 7307, 50929, 24724, 43597, 10048,
-63924, 18403, 31889, 52056, 4884, 44807, 27887, 16072, 61664, 36065, 6470,
-46655, 23649, 62712, 11282, 40837, 22229, 52518, 4278, 33810, 58585, 12494,
-47512, 23390, 39798, 1543, 64788, 25967, 48950, 11390, 41469, 22524, 55334,
- 3096, 39213, 24884, 63437, 6573, 45346, 19974, 32134, 54976, 8760, 42414,
-24205, 61709, 12106, 39024, 22756, 51791, 5438, 30028, 55829, 20588, 41343,
- 279, 60666, 21639, 32026, 47658, 7738, 55557, 18085, 30006, 44443, 9922,
-61387, 17707, 31460, 44382, 6468, 53567, 17360, 32522, 62633, 1263, 47922,
-23701, 40485, 11490, 65127, 20086, 31952, 54074, 7334, 47807, 23766, 40263,
-11937, 62291, 21662, 40156, 5799, 48343, 26659, 65499, 9481, 30576, 43948,
-13001, 55076, 25529, 39510, 3996, 63431, 20526, 33087, 50195, 10966, 42849,
-23344, 61038, 3690, 33741, 54425, 13197, 46029, 24255, 38818, 5021, 65275,
-21455, 38560, 14011, 56154, 30866, 7113, 52621, 36873, 15994, 60096, 27464,
- 6132, 49496, 37778, 20813, 61733, 4843, 46169, 23465, 39130, 11737, 55723,
-26661, 42642, 3856, 58528, 18058, 35375, 50425, 9684, 29608, 61472, 17753,
-43529, 7229, 55633, 34028, 21008, 46124, 2066, 65307, 17270, 35175, 50771,
- 5090, 28773, 45696, 19591, 61069, 2664, 39971, 25305, 51456, 10521, 32457,
-58586, 16322, 44374, 28278, 6116, 53269, 36697, 15607, 64865, 28634, 8775,
-50522, 36714, 16272, 62311, 28541, 921, 50310, 36494, 17578, 57810, 9455,
-34311, 52946, 21259, 43468, 6974, 60044, 26466, 40151, 10545, 52063, 19641,
-32431, 56151, 6199, 44988, 23619, 40184, 2396, 57232, 21682, 38514, 10959,
-49162, 23378, 62642, 995, 34332, 44892, 17598, 53283, 7152, 34501, 61411,
-13831, 45809, 25107, 39856, 5269, 57752, 20783, 34686, 49773, 1581, 30334,
-56786, 20539, 44265, 10105, 32925, 47514, 17487, 55656, 8834, 31328, 45389,
-14224, 65233, 27572, 5212, 49983, 36767, 19816, 58866, 2949, 41859, 26267,
-55541, 8627, 38871, 25894, 60565, 12685, 41878, 21996, 53282, 4561, 34354,
-55312, 16707, 47827, 28441, 1924, 64090, 35555, 15875, 50405, 28073, 4187,
-55825, 38047, 14939, 29203, 63521, 1170, 46958, 27972, 14567, 61456, 35617,
- 5292, 49854, 27750, 16398, 62756, 38172, 7782, 29832, 56885, 19622, 49168,
- 809, 41560, 26308, 61574, 12098, 39902, 23735, 48661, 2800, 65118, 21820,
-39033, 12230, 53941, 27165, 38650, 1612, 61807, 23939, 41803, 9889, 55666,
-17741, 32472, 51430, 7969, 41745, 23366, 62086, 13958, 37446, 50671, 4116,
-28604, 56681, 12254, 46442, 35894, 20289, 60250, 7120, 42114, 26285, 55766,
-12796, 32377, 46066, 6804, 61539, 25402, 39446, 11002, 50698, 18405, 31133,
-57211, 5557, 48122, 24214, 39269, 11316, 61961, 21341, 48949, 7506, 40901,
-25192, 64459, 12684, 38797, 21282, 50977, 1196, 34249, 62402, 17770, 45410,
- 4758, 33898, 56833, 17459, 47523, 8789, 34631, 61669, 15477, 45196, 28126,
- 9484, 63993, 35658, 15210, 54063, 27901, 3873, 49364, 37600, 16369, 63274,
-27941, 2581, 52125, 36674, 19418, 57612, 9868, 42709, 26408, 48956, 2108,
-59476, 23660, 41407, 9820, 63440, 19900, 34110, 50906, 345, 43352, 23595,
-65213, 13157, 38263, 21351, 53683, 2685, 43435, 18115, 57745, 29893, 9178,
-52567, 35887, 21010, 48127, 7439, 63250, 18687, 33112, 44482, 9753, 54293,
-25003, 38378, 5558, 64687, 21209, 48592, 11853, 40687, 25727, 52431, 2007,
-32171, 59236, 16819, 48884, 27318, 5647, 58050, 35583, 17872, 53524, 8549,
-45885, 20556, 36605, 62375, 6347, 29127, 51978, 20328, 42387, 8865, 63215,
-25762, 40295, 11577, 55701, 22942, 46741, 7107, 33662, 65140, 15830, 45474,
-27293, 9003, 56343, 37779, 19527, 53496, 1548, 42927, 22935, 61570, 13836,
-31933, 53078, 3242, 42264, 23355, 59329, 14289, 34125, 53846, 1988, 42638,
-25276, 58659, 12932, 41119, 24714, 56046, 881, 38573, 21329, 50675, 14463,
-29624, 61977, 8614, 43993, 27866, 16436, 53876, 36704, 5897, 59935, 29317,
-15703, 50058, 35727, 8234, 58746, 28788, 13277, 52815, 35763, 17257, 49524,
- 4549, 29323, 58446, 18666, 45612, 2163, 33389, 60114, 15861, 47316, 27416,
- 9191, 62435, 37936, 15330, 29641, 48675, 5011, 64540, 19923, 36645, 52121,
- 1845, 34187, 48511, 20712, 58093, 3995, 41168, 25875, 51532, 8166, 30459,
-56558, 19301, 44848, 9316, 38415, 27177, 58919, 4186, 46306, 18393, 36043,
-51704, 120, 30608, 56756, 15742, 46150, 28420, 3293, 58805, 36764, 14623,
-53748, 24271, 45763, 1099, 32611, 61765, 17743, 43510, 8853, 56592, 28346,
-15718, 53501, 38226, 6027, 29262, 58441, 16784, 47788, 27702, 189, 52736,
-35764, 18884, 58845, 9588, 48704, 27033, 40981, 2268, 61301, 20183, 34089,
-51201, 9682, 42886, 17920, 65054, 29105, 533, 53967, 35694, 14025, 48328,
-23888, 59849, 7625, 38361, 21509, 48426, 12849, 63262, 25972, 40645, 3097,
-54281, 24934, 39078, 12093, 60144, 23587, 39049, 5714, 52300, 19165, 32008,
-56359, 9244, 43365, 23384, 59524, 13983, 33260, 53781, 8017, 47464, 28387,
-15495, 62126, 35603, 343, 47197, 23209, 55788, 12859, 39787, 25690, 60365,
- 2220, 47489, 19837, 33049, 55106, 5459, 45610, 19374, 32753, 60994, 10825,
-44922, 30413, 20725, 48642, 2875, 64028, 27191, 38267, 12885, 54891, 21699,
-43924, 441, 63127, 28558, 16554, 53395, 35380, 8156, 48299, 25572, 63725,
-12635, 41091, 26739, 47385, 5531, 58467, 20396, 37087, 51029, 10530, 29033,
-56317, 20348, 47153, 1917, 32436, 64474, 14745, 48387, 28027, 8083, 59032,
-37065, 17304, 51782, 12851, 36644, 60721, 3402, 30010, 25443, 62397, 11900,
-40763, 22769, 52987, 2311, 34348, 56367, 16044, 45227, 28901, 11048, 62729,
-35099, 17546, 52608, 6338, 45717, 31114, 15760, 56880, 35545, 1638, 46696,
-24818, 62881, 10003, 31388, 44947, 13948, 59669, 24562, 41520, 5606, 56608,
-21971, 47672, 13133, 37235, 60617, 8460, 31296, 53005, 17014, 45028, 27322,
- 7662, 54172, 37264, 18326, 58884, 1745, 36916, 50848, 15136, 31793, 45338,
- 4406, 63934, 24993, 38628, 10662, 48831, 21655, 57406, 7246, 31751, 44436,
-13941, 55029, 25794, 41162, 6621, 59755, 21223, 47680, 11074, 32879, 58095,
-19466, 46040, 3669, 34394, 63156, 15758, 44343, 28216, 594, 55205, 35220,
-10223, 48030, 22425, 64681, 14699, 32013, 44556, 1098, 54121, 24699, 39159,
-11358, 63018, 23184, 48882, 2771, 40028, 21478, 53987, 13912, 33089, 59707,
- 1666, 45047, 27324, 16475, 64169, 38125, 3893, 31126, 55367, 16271, 46147,
-29068, 2381, 58474, 35795, 17291, 53983, 5747, 43707, 26418, 56534, 9548,
-31745, 53208, 13058, 42887, 22973, 65235, 7215, 30409, 53434, 19746, 44239,
- 2686, 32043, 57893, 21108, 48929, 6211, 41762, 23147, 60168, 13538, 30593,
-50632, 8583, 41419, 24617, 55574, 12631, 40943, 25878, 64407, 5785, 39741,
-21405, 53959, 12431, 38534, 26322, 56428, 6321, 46675, 17513, 29603, 60506,
-11081, 41606, 24740, 54749, 7648, 39207, 22810, 61530, 11797, 49154, 26649,
-39718, 5111, 64487, 18921, 31941, 45795, 571, 54657, 25891, 39090, 11893,
-60081, 22681, 48481, 2923, 41026, 26935, 57818, 14356, 36072, 51101, 6767,
-30521, 62951, 20232, 46559, 8881, 34378, 55697, 14924, 44347, 28365, 948,
-65188, 38037, 16276, 29510, 55421, 3539, 43646, 25394, 57852, 13702, 35833,
-50149, 5321, 30177, 60333, 17738, 45515, 1272, 36929, 59320, 14248, 28778,
-52562, 4450, 43899, 28031, 16386, 63517, 35018, 11024, 50203, 23985, 41589,
- 6484, 56823, 19599, 29896, 46763, 10453, 65019, 25540, 38371, 5405, 48980,
-21242, 62430, 10236, 38492, 22056, 51493, 5774, 31185, 63862, 15359, 47169,
-30625, 7165, 53955, 35783, 19869, 57105, 2551, 33017, 45909, 13448, 63291,
-22118, 39152, 191, 47451, 26368, 55695, 12220, 40012, 23609, 63809, 1811,
-46738, 19325, 33312, 55584, 8129, 43083, 24580, 65346, 13591, 30939, 52243,
- 6712, 44222, 34961, 18545, 57831, 2638, 43234, 25815, 54870, 10162, 40032,
-22735, 57203, 13315, 29347, 45147, 6986, 63477, 28725, 16318, 52790, 37059,
-11008, 48185, 22651, 60901, 2842, 33829, 48951, 17501, 63920, 12501, 42105,
-25116, 55159, 7847, 41281, 22567, 62947, 13100, 34044, 52639, 6354, 42444,
-22443, 63729, 11542, 33244, 50824, 19186, 42507, 5342, 57951, 23179, 38836,
-13449, 50926, 30226, 1914, 64653, 35921, 17950, 49307, 9229, 34277, 61431,
-13632, 42682, 25358, 54936, 5548, 32997, 46942, 17478, 63123, 11249, 31851,
-45819, 14965, 57898, 28034, 3770, 49244, 37535, 19964, 56859, 10953, 32228,
-51656, 17855, 43126, 5848, 62905, 27240, 39747, 1518, 52505, 34221, 19062,
-56172, 10323, 44579, 35076, 20782, 64780, 449, 34911, 47635, 13292, 55387,
-25164, 41708, 7800, 62883, 24790, 40643, 1310, 51990, 18636, 30406, 63333,
- 5696, 44752, 34776, 19093, 56530, 9707, 42965, 26827, 64297, 4424, 33219,
-52387, 18904, 46115, 9293, 31302, 56383, 13695, 42940, 25788, 63455, 7330,
-38688, 22185, 53590, 3651, 34870, 56227, 17231, 41186, 11562, 58135, 23148,
-39151, 5971, 50821, 31025, 14931, 58553, 36310, 5109, 50105, 22134, 42870,
-14001, 59326, 29840, 3303, 54450, 36720, 17307, 49706, 7846, 33056, 64980,
-14382, 44212, 27467, 3837, 59973, 38146, 16705, 29875, 54814, 6419, 44616,
-27367, 15906, 61812, 38228, 4471, 29656, 48795, 20002, 55043, 7788, 41716,
-51413, 19575, 36054, 58387, 6473, 28992, 48076, 19396, 60890, 7942, 40038,
-25134, 51064, 642, 31890, 57751, 13617, 48391, 22739, 40258, 5415, 64987,
-28856, 14794, 50381, 37537, 8173, 57988, 23438, 40695, 151, 54248, 26442,
-38815, 9345, 65192, 18223, 31427, 51647, 2503, 44439, 27429, 16372, 62297,
-38218, 4017, 30174, 48935, 19722, 64909, 10536, 30282, 45687, 20743, 55250,
- 5798, 39805, 22618, 58377, 11886, 48027, 29241, 15780, 52599, 37024, 3763,
-62042, 28463, 16431, 49947, 36495, 36, 63527, 28390, 15895, 50737, 36770,
- 4503, 54594, 24282, 42185, 13209, 60860, 29807, 6543, 52910, 36961, 20608,
-47179, 12295, 60269, 25303, 40315, 4742, 56229, 19805, 35279, 51373, 8230,
-29181, 59642, 18535, 45207, 6032, 34153, 56891, 13211, 42999, 24240, 65109,
- 8449, 30417, 52612, 14590, 43936, 28700, 6259, 53883, 35576, 14305, 60732,
-27908, 8500, 50585, 37018, 19484, 63666, 9750, 34296, 51671, 13954, 41329,
-23175, 62709, 3807, 36309, 50081, 15181, 30591, 58148, 763, 41879, 24065,
-50639, 9872, 34069, 62821, 17366, 48221, 11281, 40397, 25362, 54655, 1760,
-32630, 64986, 18567, 42590, 5210, 53529, 34616, 17109, 57878, 523, 47097,
-31106, 16202, 59136, 35462, 3597, 50649, 23144, 42952, 13569, 63998, 34940,
- 1837, 49890, 20732, 33149, 56011, 4735, 45620, 19139, 33663, 57109, 1334,
-46610, 28400, 15416, 58942, 37379, 8385, 52090, 24074, 42293, 12738, 62564,
-21890, 41105, 6589, 56228, 30880, 15720, 51663, 36099, 10186, 63861, 21940,
-45813, 239, 34465, 56594, 15079, 43847, 27674, 4725, 61565, 36124, 19990,
-52628, 12820, 34578, 47260, 6834, 59389, 24307, 39403, 11839, 54484, 21477,
-39290, 1938, 64551, 23190, 47599, 9852, 33661, 57398, 15097, 43017, 22414,
-51102, 6216, 32446, 61950, 16971, 46004, 27342, 390, 57575, 37957, 20458,
-52794, 4085, 43098, 27114, 62901, 14108, 33636, 51626, 1061, 42082, 23011,
-55144, 13712, 39895, 26999, 57011, 2889, 48212, 17421, 33399, 59976, 11924,
-41710, 25564, 55190, 4625, 38785, 22452, 65431, 10928, 47881, 30765, 16857,
-52959, 35652, 6398, 59123, 25112, 42778, 9274, 51664, 17476, 34136, 60486,
- 4275, 43337, 25629, 54052, 9646, 39576, 22031, 60844, 14425, 35029, 50645,
- 543, 40052, 22917, 55441, 10167, 29698, 63244, 13692, 41723, 23423, 52170,
- 7549, 32676, 62122, 17107, 46992, 3427, 33801, 59087, 14725, 40534, 22898,
-54400, 668, 31694, 62473, 13254, 45947, 24024, 40162, 8644, 57430, 21891,
-39341, 1599, 52479, 30463, 16779, 60306, 35253, 5113, 49336, 27925, 16335,
-61219, 35357, 10093, 45784, 24822, 55297, 2483, 40016, 17103, 60869, 34425,
- 6828, 53994, 24831, 42471, 10642, 59574, 20259, 37788, 50073, 4808, 28158,
-55998, 21366, 40828, 2641, 63930, 19741, 31466, 45220, 8816, 59940, 24815,
-39764, 1508, 54386, 19263, 37173, 51463, 8314, 29873, 64101, 15669, 44667,
-27743, 1991, 61075, 36367, 19792, 49910, 9310, 33083, 55034, 13319, 42433,
-23022, 61870, 4892, 31119, 46869, 17300, 59254, 7760, 29814, 52089, 15639,
-44281, 28147, 3566, 58031, 37114, 18388, 50561, 9520, 34737, 60346, 21135,
-46781, 11191, 41250, 25796, 59079, 3102, 39261, 21920, 54380, 11442, 36585,
-50529, 15835, 29835, 61434, 7043, 43925, 27855, 15440, 58055, 35371, 662,
-51285, 23526, 42144, 12390, 60085, 26061, 41618, 8787, 51140, 19872, 32666,
-65429, 1213, 42335, 24795, 48317, 8586, 62574, 22795, 40427, 12406, 53950,
-26661, 39260, 1682, 64683, 18978, 32296, 51658, 9725, 42923, 18675, 61022,
-28361, 215, 51616, 38240, 16176, 30473, 57862, 8631, 49077, 24489, 40869,
-11788, 63713, 21970, 48915, 699, 33866, 54085, 18456, 43039, 12115, 63365,
-26629, 39099, 1433, 45010, 10351, 33821, 64859, 17092, 44459, 2660, 36863,
-53966, 14883, 30035, 63570, 10595, 47064, 23593, 40531, 3926, 61847, 19603,
-36907, 51005, 10279, 30743, 56160, 19982, 45297, 3640, 32254, 61367, 17288,
-43756, 11274, 51039, 20929, 34932, 58679, 6777, 46547, 28371, 15517, 54469,
-36377, 9241, 57959, 23956, 47072, 13489, 34344, 55874, 348, 42136, 24544,
-59915, 13455, 32140, 52463, 8474, 42731, 24555, 64514, 1918, 32920, 45038,
-18962, 55339, 6153, 40976, 25380, 59286, 9946, 33284, 47059, 18348, 56303,
- 7518, 34303, 45534, 14854, 65341, 27746, 2012, 49542, 37130, 17762, 56852,
-10674, 42107, 25858, 64389, 2741, 33349, 53579, 14411, 45722, 27831, 9188,
-62760, 36933, 17484, 49470, 3860, 33103, 61885, 15904, 47713, 28754, 155,
-51258, 37562, 16566, 58021, 27511, 3241, 49281, 36721, 20644, 62352, 11852,
-48425, 26175, 41538, 650, 57786, 22687, 46603, 6895, 30995, 49207, 17582,
-60385, 1782, 32485, 45288, 16024, 53691, 27534, 6955, 61420, 37740, 19228,
-47065, 11775, 60543, 27067, 39295, 5075, 55374, 19901, 45736, 29763, 7725,
-59098, 36290, 13908, 52663, 22832, 46181, 9130, 31942, 61917, 20994, 48822,
-11516, 39882, 26601, 61004, 7645, 43589, 21710, 54438, 11692, 40086, 25754,
-60022, 7185, 47828, 18212, 30385, 62377, 10650, 42577, 23524, 52344, 6661,
-31556, 64902, 12153, 44194, 34273, 16760, 53837, 27680, 2448, 60987, 36077,
-14763, 49469, 28410, 4639, 58334, 37217, 20517, 49847, 1771, 42748, 26361,
-58972, 8047, 31896, 53866, 16252, 44284, 28218, 9628, 60060, 37423, 17887,
-46925, 2747, 54894, 26558, 39366, 10159, 61880, 18807, 32096, 52290, 4107,
-42843, 26137, 60695, 14500, 33072, 50735, 8280, 41757, 25458, 56100, 3731,
-38732, 27112, 64161, 12808, 48136, 28282, 8145, 55737, 37580, 15247, 50831,
-29138, 10033, 61074, 36238, 18189, 47296, 7771, 55186, 23578, 38394, 11420,
-60519, 27037, 43797, 6031, 58577, 19242, 35881, 51737, 9716, 30276, 45863,
-19227, 61339, 434, 34527, 50857, 18719, 43675, 9892, 59573, 26043, 41630,
- 1747, 51860, 28196, 14410, 61497, 37811, 3920, 49769, 21073, 31953, 54921,
-10788, 42330, 20050, 64753, 30017, 6886, 50591, 36400, 20159, 56219, 3604,
-43668, 26332, 62762, 8999, 32314, 53743, 17489, 47716, 4150, 40093, 21129,
-59930, 29160, 1024, 50034, 36985, 20879, 55631, 11496, 42670, 25960, 65296,
- 5970, 31887, 50269, 11364, 44549, 27705, 16567, 58560, 35980, 4968, 53894,
-26032, 47209, 10836, 32739, 64167, 15427, 47058, 28502, 3567, 56623, 37509,
-14858, 51116, 29689, 941, 59304, 37738, 19371, 49438, 7972, 32120, 64882,
-20896, 42899, 11222, 51745, 26840, 39120, 426, 62672, 22870, 47931, 13276,
-35138, 53278, 7646, 31645, 59009, 18385, 43644, 10778, 51482, 28649, 16142,
-56221, 36715, 4490, 49413, 21058, 30129, 60783, 10379, 43219, 24012, 55689,
- 5505, 34409, 47339, 13753, 58204, 24397, 41035, 4031, 52578, 29640, 15502,
-64901, 36659, 8013, 49848, 27856, 15056, 57239, 37641, 2636, 49404, 21130,
-31644, 60680, 10865, 46198, 20345, 31567, 63715, 6592, 45906, 27935, 15395,
-54821, 38075, 2182, 29882, 65099, 17749, 48741, 8248, 33030, 57125, 14210,
-41938, 26201, 48450, 1157, 59864, 19701, 33908, 45064, 3919, 65011, 18310,
-37127, 53901, 10112, 30213, 46981, 18865, 62933, 2642, 36423, 54512, 16811,
-30266, 47318, 6812, 57394, 26120, 39669, 10937, 52669, 18782, 33128, 56804,
- 2590, 45507, 20705, 34054, 61426, 7369, 42591, 23301, 55763, 13576, 35444,
-49509, 4584, 31446, 56518, 21143, 42871, 9585, 63029, 19896, 33541, 52655,
- 2254, 45545, 18080, 33107, 57137, 5840, 43698, 25666, 60422, 10227, 41130,
-22920, 52161, 4891, 34663, 57606, 17230, 59768, 36851, 20580, 50834, 9269,
-31003, 56679, 20167, 43907, 4644, 32192, 58575, 16822, 44424, 27578, 8847,
-54217, 34898, 16663, 59403, 28227, 2095, 49514, 36703, 17823, 64293, 12033,
-41390, 26648, 53028, 6181, 33564, 55853, 19362, 41778, 3366, 63132, 29740,
-14045, 50642, 37798, 1454, 60552, 20582, 32230, 52727, 6317, 44276, 17626,
-29537, 63604, 9134, 40325, 23501, 50107, 3126, 36353, 60995, 15015, 29458,
-51397, 8915, 41283, 25486, 62930, 13051, 39234, 22572, 53444, 3272, 39225,
-26470, 62409, 12303, 42897, 22287, 52808, 5196, 31136, 59518, 16309, 44595,
-28347, 8494, 51971, 34733, 19675, 58644, 5618, 44836, 29951, 16816, 50920,
-36991, 1335, 57252, 23745, 43346, 10822, 51092, 19716, 30083, 58448, 7679,
-44292, 27341, 14914, 54205, 35951, 5761, 63529, 31134, 18151, 52126, 9237,
-43257, 27026, 55986, 4764, 39717, 21476, 65533, 14615, 34360, 53085, 8926,
-40744, 25633, 56883, 11710, 39999, 21492, 63237, 5273, 47768, 29506, 16646,
-52240, 35718, 8945, 57164, 25676, 42606, 3005, 52114, 30979, 15569, 64630,
-36539, 1125, 49718, 27451, 15228, 62384, 37227, 4141, 49433, 19989, 29447,
-58423, 2661, 44502, 35382, 18150, 52641, 4579, 33713, 65470, 15679, 45243,
-28829, 978, 56027, 36241, 14494, 52772, 24771, 45700, 2985, 35867, 57326,
-16330, 28506, 46938, 9601, 59477, 24910, 40002, 4165, 48507, 21529, 56129,
-10860, 31349, 44890, 20097, 63397, 7940, 32927, 44849, 18462, 53423, 10477,
-30231, 60799, 13688, 46862, 23988, 39865, 3479, 65508, 19323, 33034, 48437,
- 6176, 56944, 23969, 40214, 11510, 63389, 20509, 32745, 50514, 1667, 46122,
-28165, 15413, 63949, 36118, 10667, 46672, 22187, 53093, 516, 31537, 62738,
-18430, 45999, 10353, 32339, 54610, 20467, 44486, 2122, 32949, 60636, 19478,
-46977, 4867, 33210, 58470, 20999, 44608, 1776, 34818, 63734, 15939, 31005,
-50650, 3575, 41486, 22511, 64643, 12957, 32732, 45521, 2045, 54315, 24248,
-41279, 7863, 63587, 22725, 42911, 13102, 54553, 26931, 39146, 4131, 57620,
-17680, 35489, 50144, 11575, 29504, 62838, 20641, 45558, 7070, 34876, 58338,
-19082, 45311, 950, 34748, 56661, 13402, 41743, 24655, 59780, 2299, 31443,
-49411, 17440, 41034, 10915, 58393, 20632, 34229, 52502, 6295, 45468, 19786,
-32003, 64861, 10803, 49187, 17957, 34019, 44175, 5859, 58179, 17411, 31333,
-51567, 2394, 41488, 24683, 53650, 14421, 36150, 61552, 7712, 32149, 51236,
-19006, 41339, 3041, 60590, 20746, 34803, 44583, 7139, 58062, 23422, 39172,
-12155, 48287, 25058, 62528, 9388, 41160, 22207, 52642, 5497, 34557, 56633,
-13590, 41769, 25653, 58192, 4238, 31222, 53400, 15039, 46732, 28812, 8681,
-57163, 36395, 18319, 45502, 3234, 65154, 29135, 15216, 49670, 37516, 752,
-62316, 23475, 42066, 6765, 57523, 26243, 40594, 11629, 52371, 17117, 36343,
-63343, 946, 30361, 50364, 19205, 42074, 6666, 62514, 26736, 38703, 10071,
-56380, 18745, 31792, 46483, 3, 60474, 20657, 31927, 44332, 6219, 53868,
-18627, 33170, 62719, 9220, 43229, 23471, 51538, 898, 33931, 55948, 17686,
-43967, 4391, 33189, 61597, 13511, 42502, 24887, 52622, 6424, 37673, 58222,
-15187, 30641, 45734, 4632, 63512, 22340, 38761, 8036, 54811, 25023, 48856,
-11147, 41913, 21489, 57514, 5549, 41612, 26402, 50343, 8330, 32006, 59243,
-14675, 44112, 27788, 5101, 53707, 36467, 13765, 61942, 23446, 44090, 4398,
-37497, 60254, 14239, 29493, 47362, 10224, 54569, 18410, 31655, 46874, 3585,
-58072, 25351, 39890, 11464, 64291, 29361, 15277, 53551, 38109, 5909, 29414,
-48804, 12553, 61275, 23120, 40001, 7656, 54003, 27194, 39506, 13075, 65325,
-21647, 38997, 3027, 56602, 31433, 15446, 50061, 28655, 5849, 46941, 9,
-41482, 26721, 60764, 14316, 34744, 47350, 8284, 63953, 18660, 37188, 50872,
- 1283, 29226, 47773, 15361, 61198, 36136, 7231, 45421, 22402, 56570, 9580,
-34561, 44358, 20634, 60007, 1005, 36311, 49485, 14804, 30355, 61608, 9651,
-45157, 21133, 33096, 56958, 5481, 44053, 19495, 30620, 49098, 11242, 62404,
-21222, 34000, 46480, 4244, 57013, 20286, 34724, 45894, 9976, 54348, 19213,
-33976, 58614, 6665, 46933, 20899, 33985, 56302, 961, 45726, 19757, 34036,
-60570, 8608, 43393, 17217, 51905, 30144, 1472, 58236, 36108, 18887, 49818,
- 9331, 34416, 61293, 20694, 46346, 385, 36681, 63677, 15360, 28826, 54059,
- 7922, 41974, 24691, 60805, 12992, 39377, 26509, 64203, 3357, 41404, 22051,
-52551, 13939, 35491, 62203, 2171, 46568, 28362, 16623, 56499, 37774, 9940,
-50216, 25345, 41742, 1527, 61790, 17365, 32351, 51717, 10682, 42768, 24311,
-59816, 2629, 31488, 47971, 19939, 54871, 4045, 38256, 27286, 48868, 14366,
-59410, 34762, 5, 44587, 23454, 64085, 13213, 38313, 21937, 48603, 6587,
-56073, 26012, 41174, 11701, 59882, 18985, 31038, 44691, 6075, 57158, 17611,
-34371, 51994, 10499, 41634, 24559, 62678, 8381, 31621, 46958, 20140, 57444,
- 6847, 39110, 23258, 51053, 10302, 32127, 63549, 19318, 43316, 6042, 58489,
-22755, 40398, 14792, 51305, 29831, 51, 63849, 36641, 13916, 52973, 23937,
-42774, 7078, 62360, 17319, 33623, 47282, 884, 59459, 27514, 15496, 50842,
-37574, 3152, 64075, 23455, 42465, 6191, 55287, 29655, 15878, 50694, 35784,
-11038, 61019, 25329, 44833, 800, 35196, 53984, 15842, 30554, 57592, 7232,
-42340, 23228, 52877, 9168, 33672, 58404, 19967, 48112, 4541, 40059, 25610,
-56420, 13458, 43762, 22040, 59826, 5637, 35451, 50493, 14902, 29373, 56932,
- 7607, 41916, 25285, 64949, 10785, 30435, 48827, 13900, 54232, 24244, 40884,
- 5554, 57518, 21930, 43804, 14744, 52223, 30398, 7354, 59387, 36133, 18501,
-47636, 11344, 55721, 27080, 38978, 3144, 58906, 17213, 33221, 51288, 6272,
-43330, 24502, 64367, 9205, 32741, 45812, 19533, 55588, 2627, 31258, 44034,
-17314, 60320, 9849, 31079, 52724, 14240, 40997, 23318, 63242, 7649, 33113,
-45828, 18966, 53572, 5858, 34830, 64140, 15659, 29817, 51106, 1287, 41906,
-24196, 59472, 12376, 38291, 23167, 53204, 3080, 30709, 61746, 15026, 45680,
-27789, 8366, 60481, 37504, 19815, 46612, 10518, 63839, 22233, 38987, 1339,
-55972, 26870, 42547, 9727, 48774, 24909, 64925, 13055, 30917, 46608, 360,
-52883, 18686, 32342, 59721, 4694, 45179, 17507, 36797, 54320, 8197, 29083,
-64301, 16043, 46447, 28511, 1471, 50984, 36298, 17995, 63327, 9883, 43917,
-21094, 34243, 60368, 6118, 48933, 20006, 32481, 55125, 11586, 41932, 24615,
-60117, 8436, 36270, 53517, 12771, 31972, 47925, 20227, 64489, 2871, 33718,
-44735, 18965, 54928, 7828, 41260, 25455, 59343, 12335, 43577, 22822, 54089,
- 3119, 34115, 48220, 20729, 59056, 11939, 38935, 26414, 51325, 8726, 36302,
-64248, 16111, 28915, 47558, 4715, 56526, 25392, 38845, 11497, 53355, 19311,
-29822, 64676, 7011, 47843, 20775, 30876, 56771, 10798, 47679, 19830, 34878,
-60436, 173, 28527, 48537, 20080, 54167, 9594, 41046, 26725, 60964, 14697,
-32918, 51405, 2349, 39722, 26360, 62444, 14127, 38518, 22228, 51867, 1487,
-34320, 64390, 18480, 45926, 9790, 33771, 49309, 18293, 58634, 61, 33882,
-45566, 16739, 64783, 28411, 7650, 50453, 35754, 20262, 63045, 850, 44224,
-29155, 15654, 59781, 37185, 8657, 52311, 22451, 45043, 1532, 33905, 61873,
-16357, 44806, 27715, 3180, 56202, 37596, 14881, 46086, 23806, 59606, 1229,
-38296, 21128, 51219, 10826, 33172, 55225, 17874, 45895, 8920, 34031, 62245,
-18959, 30540, 64277, 13421, 48563, 23723, 39091, 2797, 53363, 20540, 29638,
-55741, 6690, 42329, 23340, 62588, 12804, 32579, 51645, 5103, 41770, 25332,
-53621, 13915, 32491, 62132, 4291, 45821, 27679, 16026, 58209, 38170, 7213,
-28935, 54859, 16689, 47360, 27630, 2316, 64822, 37029, 17285, 46271, 8977,
-58075, 26320, 40207, 889, 51998, 17172, 30801, 64287, 11995, 41379, 25304,
-51003, 2362, 31704, 61747, 14407, 44133, 27776, 4546, 52947, 37443, 17834,
-64945, 10571, 47229, 21227, 31872, 55745, 6231, 46290, 20581, 33088, 64129,
-11276, 42338, 24488, 55797, 3727, 39131, 22597, 57568, 13946, 32687, 51282,
- 6982, 47420, 19091, 31794, 59022, 4362, 43582, 21933, 52689, 9257, 34224,
-55593, 16985, 44543, 31109, 6698, 59892, 24325, 44036, 10693, 32029, 64821,
-20735, 42680, 4262, 54787, 23984, 38998, 12999, 58382, 21985, 38408, 5252,
-47845, 26561, 62976, 13814, 34945, 44795, 7532, 57289, 22410, 42192, 12296,
-64839, 24437, 46193, 6033, 32125, 55046, 12242, 43121, 24052, 57907, 3632,
-41334, 21164, 51503, 14272, 32515, 63383, 2307, 43237, 22916, 54234, 9785,
-33550, 47396, 20447, 63845, 291, 30382, 45166, 18929, 54990, 11384, 39132,
-25833, 60349, 2003, 49134, 22006, 42371, 12211, 55196, 26706, 39085, 3676,
-59688, 29134, 13358, 50026, 36756, 7702, 61304, 23801, 42442, 11548, 55671,
-21839, 40576, 3476, 47436, 26829, 58023, 10678, 29813, 44186, 20888, 55148,
- 7495, 31097, 43973, 19458, 57218, 10828, 31797, 49926, 20923, 41415, 1513,
-62852, 26257, 39241, 7653, 58238, 21630, 48893, 12573, 40929, 23044, 51593,
- 4591, 33950, 64557, 14439, 44740, 28749, 2361, 59879, 37112, 17385, 54146,
-11202, 42284, 26920, 65294, 7742, 38862, 19474, 52677, 30054, 2827, 62399,
-37181, 13280, 49352, 20805, 34664, 53808, 885, 44782, 18631, 36590, 62623,
- 6764, 30121, 46199, 12137, 60267, 23987, 39171, 161, 55066, 21390, 43560,
-13703, 62370, 29629, 4217, 49566, 35107, 17831, 61513, 8917, 43433, 26149,
-54046, 12627, 38399, 22023, 60332, 685, 48210, 29908, 15636, 52753, 37595,
- 8184, 65021, 20876, 33983, 50681, 5205, 46672, 20215, 29755, 61132, 3267,
-48430, 28465, 16250, 57566, 37648, 10113, 50305, 25124, 42224, 4439, 61308,
-21198, 38327, 11663, 54037, 27244, 42435, 6931, 63050, 19324, 46681, 35299,
- 9835, 57041, 22362, 40842, 91, 51883, 30719, 15716, 59209, 35752, 4848,
-50395, 24220, 43417, 13306, 59854, 21784, 38259, 5128, 53168, 18278, 34272,
-56138, 8428, 42351, 25157, 63336, 10378, 41093, 20755, 51389, 29250, 2350,
-61527, 35199, 20132, 50040, 11410, 43340, 23424, 59788, 7008, 33802, 53575,
-20045, 45496, 2990, 32773, 61834, 14705, 44279, 28217, 1285, 53094, 37344,
-17571, 58483, 4747, 30673, 50628, 16841, 46407, 28090, 5317, 60496, 36147,
-17262, 49917, 9986, 30434, 61762, 20911, 48449, 3635, 39284, 26782, 65530,
-11033, 32794, 45777, 17542, 56000, 7281, 39982, 25224, 62153, 2309, 43556,
-22480, 52809, 13474, 33658, 57308, 1481, 45191, 22508, 40237, 13979, 62087,
-32209, 3178, 50010, 35627, 13635, 58735, 24917, 45112, 1970, 40693, 23268,
-63115, 7557, 32281, 52379, 18272, 44063, 12844, 34993, 64215, 3445, 31642,
-46059, 18654, 56836, 7254, 41527, 23122, 53149, 12364, 34178, 58324, 4604,
-43224, 25463, 55253, 12560, 39788, 21838, 60720, 3203, 39163, 25858, 55838,
-12558, 42690, 22751, 51577, 3983, 31772, 55461, 14980, 44364, 27775, 8839,
-57556, 37096, 17704, 51556, 5388, 41851, 26877, 63873, 13909, 32577, 46996,
- 6694, 54916, 25320, 41066, 11070, 58975, 18760, 35271, 50041, 5368, 29200,
-64549, 13556, 48422, 26067, 41928, 7158, 61976, 24996, 38689, 2157, 58002,
-20307, 36244, 50399, 7105, 3790, 40240, 21496, 55781, 11503, 42924, 26923,
-58968, 9378, 48944, 17194, 36252, 60352, 3285, 28543, 46297, 14946, 57443,
-21911, 38775, 392, 65359, 27202, 43885, 10795, 50825, 19576, 31653, 54209,
- 2818, 43093, 23218, 63730, 10721, 33666, 51882, 12936, 42565, 24278, 56036,
- 5860, 33007, 48500, 18950, 60997, 10542, 34525, 44989, 20742, 53404, 5260,
-32836, 59390, 15604, 44525, 28069, 7072, 53629, 36951, 18222, 63289, 9037,
-35387, 49501, 15290, 30592, 57785, 2727, 44079, 27757, 14766, 61522, 38141,
- 4752, 29158, 48886, 19617, 54246, 6995, 32958, 45786, 17988, 63255, 9880,
-40627, 26671, 55015, 1869, 38933, 22276, 62552, 12026, 35622, 49711, 15527,
-29577, 65219, 954, 46590, 27576, 13717, 57419, 36516, 5053, 53546, 18775,
-34970, 48799, 464, 57136, 17302, 31864, 46238, 7163, 61279, 26286, 41073,
-11021, 55696, 18885, 36128, 50229, 1020, 29274, 59332, 19259, 41032, 10215,
-53946, 27134, 38478, 1900, 60734, 18591, 36247, 50283, 9338, 30181, 62022,
-14935, 47629, 25601, 38885, 5399, 58993, 25291, 38497, 11157, 55217, 19489,
-37440, 51027, 7298, 29708, 56135, 12923, 42167, 25211, 59485, 5488, 34705,
-53430, 15439, 46261, 29486, 6385, 64553, 36599, 17613, 51801, 7975, 34485,
-62582, 14254, 42062, 23213, 53241, 1649, 31551, 57027, 16840, 45255, 27520,
- 4469, 65168, 35811, 15301, 49815, 28214, 8647, 52729, 35816, 18413, 61843,
- 2194, 35181, 48392, 17131, 64733, 5005, 34448, 46143, 14624, 60180, 28019,
- 6909, 51291, 36718, 18001, 56441, 10749, 42504, 27139, 53641, 2968, 36776,
-62250, 16838, 29798, 46816, 7990, 55844, 22515, 40533, 12207, 48983, 24837,
-62887, 6644, 32482, 44742, 18004, 51829, 1159, 33969, 58694, 17072, 48288,
-10731, 41915, 25645, 54679, 4249, 31318, 61217, 17406, 41221, 9290, 59057,
-26860, 39185, 14776, 55043, 28315, 3880, 50532, 37367, 14406, 65492, 25154,
-42012, 6177, 53759, 26765, 38953, 11966, 57754, 20610, 37435, 50695, 1237,
-29141, 64102, 19577, 46589, 4777, 32271, 56132, 14757, 44650, 27928, 6691,
-62192, 36004, 13596, 44926, 24614, 56426, 1409, 40033, 23079, 58908, 12991,
-33400, 53924, 8980, 43976, 27394, 14916, 65211, 35119, 349, 53082, 22856,
-45719, 14620, 32789, 57099, 9137, 43816, 23764, 60358, 1650, 38610, 22520,
-51486, 13527, 31139, 54651, 5471, 41959, 24295, 64626, 13040, 48033, 26384,
-40412, 7249, 54797, 17787, 30134, 62294, 3258, 48046, 25293, 39310, 11689,
-61433, 25264, 49158, 2015, 39497, 22129, 58933, 13495, 34786, 49338, 6084,
-31069, 55821, 18296, 42326, 9690, 58353, 26533, 39464, 3226, 54769, 24851,
-42118, 12189, 65386, 17152, 30288, 48544, 5638, 57464, 25869, 39197, 12759,
-49123, 23045, 62749, 7336, 34150, 43951, 18838, 63866, 2303, 40596, 25014,
-55380, 12175, 40421, 22069, 58536, 281, 32225, 52275, 14460, 44298, 28704,
- 8232, 57219, 35319, 20315, 51112, 1178, 30396, 60625, 15028, 46964, 28857,
- 9102, 53618, 35216, 18963, 63204, 5276, 37881, 50448, 17025, 31019, 59782,
- 7362, 48368, 25817, 41599, 11837, 60932, 24025, 39987, 6288, 55314, 18960,
-32876, 51654, 10027, 46470, 28094, 16710, 59740, 37427, 5301, 47663, 22705,
-56010, 10123, 40099, 26071, 61622, 13662, 36130, 49744, 529, 30497, 65334,
-18108, 45406, 9043, 32092, 48728, 17229, 62735, 6463, 32727, 44590, 15916,
-52771, 29230, 5711, 63879, 35932, 19106, 46626, 10130, 59955, 20898, 34186,
-52848, 1954, 42348, 24517, 61767, 11138, 32849, 48106, 19890, 54123, 2634,
-40310, 24264, 60343, 12161, 48910, 22164, 39353, 371, 62641, 26624, 43388,
- 9747, 53321, 30710, 16320, 55490, 36079, 4243, 47036, 22531, 60564, 9592,
-40852, 27020, 54107, 12918, 43185, 24565, 59458, 28173, 16203, 52995, 37932,
- 1105, 31635, 65107, 18177, 47071, 5769, 40526, 26052, 52460, 14144, 33566,
-63418, 7066, 48213, 24571, 40724, 11574, 54822, 23903, 38321, 5968, 60662,
-17587, 29909, 46877, 9116, 57118, 24918, 39318, 4698, 59260, 18684, 35275,
-50317, 511, 28988, 62141, 14953, 41688, 24927, 54602, 3334, 38705, 22382,
-65276, 13864, 48604, 29225, 1783, 57695, 37552, 20868, 46532, 11694, 60058,
-23157, 40680, 206, 54196, 26838, 39790, 11065, 60862, 19699, 47666, 30018,
- 7888, 55087, 36529, 18014, 46798, 710, 65477, 26676, 38809, 12997, 58346,
-25288, 42057, 2866, 50964, 20168, 34434, 61320, 11069, 42735, 25084, 53715,
- 4002, 41296, 23117, 58283, 9944, 37445, 50451, 16913, 31496, 61642, 7538,
-48055, 24053, 40125, 11087, 63411, 20407, 30161, 54472, 8924, 41642, 23196,
-51516, 2449, 33127, 64591, 14235, 43324, 23900, 53374, 6659, 32336, 63827,
-17280, 46127, 4447, 32788, 58066, 15025, 49117, 22697, 40154, 7274, 57051,
-27065, 39053, 873, 52513, 18569, 32833, 63096, 8641, 45931, 17674, 33171,
-60804, 1399, 45035, 28345, 15847, 65069, 35459, 3598, 45963, 22692, 61225,
-14138, 32612, 50521, 2458, 42572, 22703, 56304, 12474, 39851, 26745, 58633,
- 639, 32448, 50300, 19439, 46062, 9679, 35121, 60350, 20872, 44391, 7272,
-37764, 51848, 12347, 30439, 58217, 20850, 44105, 1046, 37585, 59896, 16180,
-29164, 54188, 6482, 42022, 25505, 51159, 11618, 29726, 58017, 20079, 42232,
- 427, 52397, 29395, 16610, 61677, 35062, 3954, 47146, 24876, 65061, 14104,
-31233, 45446, 8892, 53036, 27800, 15284, 58788, 37948, 136, 29550, 61496,
-16867, 45596, 27917, 3498, 57309, 35810, 20303, 49743, 9807, 31701, 62038,
-20258, 46800, 5967, 38349, 27218, 63990, 11975, 43741, 21695, 51040, 6937,
-33955, 57206, 19700, 42508, 2431, 48998, 23437, 61465, 12914, 32479, 44229,
- 9015, 57816, 27946, 16417, 49774, 35987, 2684, 62964, 22627, 45968, 9632,
-32420, 56044, 17017, 44058, 7502, 37632, 59802, 15859, 28571, 52376, 10343,
-42067, 23614, 58698, 2987, 33531, 53045, 18857, 47633, 9164, 35278, 63760,
-16397, 28813, 45385, 2403, 52035, 35607, 19168, 61729, 5507, 37885, 49645,
-16580, 30233, 59836, 8293, 41795, 24222, 55477, 3986, 40018, 26823, 63837,
-12141, 48419, 17881, 32729, 56295, 2753, 43502, 26251, 58361, 11404, 38565,
-21290, 51238, 2185, 34289, 63238, 20549, 44899, 9262, 40297, 26547, 54240,
-13703, 33322, 57201, 6509, 45712, 28638, 16503, 65204, 37732, 4280, 54194,
-27876, 15972, 50635, 36188, 829, 61963, 23241, 47280, 13714, 36064, 63644,
- 7567, 31389, 52381, 20533, 46180, 50, 34933, 56112, 21206, 41584, 10434,
-61243, 22256, 40734, 3429, 47177, 26296, 55835, 9899, 30318, 45439, 13645,
-57875, 22172, 38801, 6569, 52702, 27066, 43555, 10448, 64765, 19605, 34532,
-47281, 5668, 61250, 27611, 15387, 37889, 48381, 10444, 63596, 18258, 34620,
-44277, 4105, 57486, 17821, 36640, 49772, 11330, 29442, 58368, 15483, 45565,
-27820, 3574, 54049, 36684, 13526, 64341, 22142, 45933, 718, 33476, 56648,
-15697, 46848, 29335, 3800, 65401, 37961, 14893, 30468, 54972, 1355, 43407,
-24081, 62474, 14121, 35823, 50069, 2663, 29717, 55162, 20106, 42926, 6008,
-59651, 26065, 39993, 10381, 55919, 20435, 35523, 50981, 2037, 29647, 58731,
-19078, 47623, 9632, 40756, 24590, 56737, 1311, 49240, 17083, 32591, 43985,
- 8440, 62726, 27704, 15575, 49662, 36560, 5835, 56163, 22367, 45443, 9668,
-30819, 65453, 14719, 45206, 28703, 4233, 57542, 35938, 16647, 52110, 28443,
- 8910, 56776, 35156, 20436, 45343, 2580, 63588, 25474, 41010, 11969, 52146,
-18787, 31839, 56625, 844, 46840, 17279, 31319, 62703, 7743, 44861, 5249,
-43661, 21987, 54876, 13237, 40574, 25663, 61488, 9729, 38657, 21734, 56636,
- 1805, 45240, 29976, 12754, 59720, 37526, 20318, 52374, 2539, 42628, 26913,
-59224, 13391, 40605, 21811, 64541, 1556, 34404, 51195, 17445, 45044, 9816,
-30888, 63194, 13316, 43586, 25132, 52116, 6558, 31522, 58390, 12442, 47741,
-23881, 41385, 7486, 59762, 26462, 40391, 9721, 51417, 17916, 35322, 55117,
- 5892, 30209, 47979, 14000, 64030, 24826, 42385, 5520, 56610, 17253, 32220,
-51562, 2227, 41909, 23433, 62653, 10149, 35211, 50597, 16078, 31117, 56454,
- 5899, 42996, 23093, 52664, 11868, 30810, 60322, 17232, 46700, 5017, 30847,
-57130, 14846, 44677, 29030, 8259, 63966, 34528, 19773, 54703, 3189, 45562,
-28898, 15505, 38095, 58480, 1795, 30200, 51176, 16379, 45107, 27500, 4736,
-60965, 36142, 17708, 47645, 10382, 58838, 27048, 38724, 3601, 50546, 18100,
-34305, 56545, 9207, 41904, 24926, 51730, 12934, 34937, 62331, 3289, 41980,
-24166, 48344, 9074, 65390, 21375, 41562, 12110, 54756, 26090, 40230, 4383,
-57261, 23549, 49206, 11934, 40715, 21873, 56408, 9253, 49171, 25783, 40804,
- 6278, 58020, 18327, 37284, 52574, 8906, 28846, 64106, 17774, 47148, 4200,
-31576, 61648, 13412, 42223, 23681, 52719, 4929, 30394, 64836, 16525, 47918,
-28085, 2290, 53912, 35859, 18794, 63126, 5096, 33324, 48020, 17817, 50599,
- 9347, 33046, 64339, 13095, 43062, 23695, 55759, 2725, 38817, 21679, 63076,
- 9211, 35177, 49458, 15128, 31973, 55704, 5940, 42151, 23657, 58713, 12039,
-39696, 21350, 52011, 1842, 37068, 60524, 17031, 30454, 50380, 6331, 43138,
-21905, 54857, 9935, 35948, 50967, 15800, 31438, 63793, 7356, 42121, 24789,
-55035, 12826, 39830, 24746, 57945, 2589, 41426, 22774, 53223, 14336, 32889,
-60274, 326, 46827, 24732, 39843, 13171, 63339, 29488, 8321, 54374, 35645,
-20840, 48048, 1354, 64236, 19403, 30967, 45347, 7191, 55486, 24281, 40005,
-11098, 58771, 19628, 35570, 49735, 4981, 28745, 65173, 20181, 45394, 2229,
-33487, 58239, 20131, 48902, 7314, 38823, 26538, 63075, 12290, 42966, 23949,
-54756, 5853, 41099, 22047, 60782, 13911, 32231, 53721, 7408, 47244, 24467,
-39535, 11744, 56116, 22270, 43618, 2945, 64451, 32019, 14155, 49843, 35961,
-10184, 54291, 21990, 44816, 5998, 34388, 61916, 20036, 49197, 10326, 39680,
-22953, 60692, 7445, 43802, 25308, 53012, 13678, 32484, 57943, 4287, 47575,
-18612, 36137, 51402, 573, 30194, 62540, 15687, 44168, 27378, 9470, 52019,
-36273, 19789, 59928, 7709, 45992, 25471, 40536, 10848, 57220, 19283, 30662,
-51550, 4039, 43258, 18669, 59018, 28637, 10544, 50142, 37530, 18224, 60048,
- 6402, 34143, 47998, 16541, 52685, 29681, 8987, 64303, 36977, 19410, 50423,
- 673, 34817, 61047, 16126, 47290, 28515, 3816, 62471, 36318, 14073, 54343,
-23496, 45873, 1848, 37008, 57820, 16367, 30744, 55223, 3338, 42961, 24832,
-51722, 7052, 31627, 59138, 20281, 47888, 8140, 40985, 26817, 65199, 405,
-40199, 22194, 52978, 10175, 32395, 58926, 19476, 44169, 8499, 31174, 49436,
-20500, 59466, 5615, 41292, 23565, 54419, 12677, 43600, 25859, 61238, 5945,
-41657, 19044, 50668, 29157, 8335, 58543, 37285, 18264, 49325, 6975, 32875,
-64558, 12688, 45483, 28438, 15468, 52942, 37462, 3962, 63109, 27971, 14925,
-49538, 37031, 6894, 60416, 26468, 43178, 11648, 51382, 18164, 36857, 64934,
- 6729, 29849, 47649, 20114, 57634, 2879, 41525, 25603, 53297, 14035, 33656,
-60946, 678, 44040, 27617, 16890, 55075, 38191, 8002, 30714, 63438, 19997,
-43642, 5042, 50656, 31026, 15115, 61694, 37397, 7721, 49584, 28098, 15955,
-58190, 37486, 5546, 44715, 24333, 64750, 10538, 39700, 23129, 51527, 14088,
-34204, 58265, 64048, 11672, 35685, 50979, 4016, 30808, 58496, 15933, 45398,
-28980, 6598, 52023, 37208, 15836, 62634, 27548, 4489, 49690, 35890, 17120,
-58065, 10377, 43935, 27289, 56208, 5251, 33289, 47491, 15728, 52963, 29388,
- 7060, 58732, 37514, 20647, 50097, 3155, 41289, 22999, 61283, 14261, 33424,
-46229, 1402, 54078, 27976, 16611, 38057, 62882, 4188, 31201, 47250, 20237,
-56693, 10815, 40922, 26722, 59309, 2976, 39203, 22512, 53449, 11471, 33680,
-48186, 20855, 61273, 7383, 38807, 26786, 53463, 12112, 43568, 21399, 59396,
- 3177, 41011, 26447, 61804, 8731, 34442, 47457, 18721, 64695, 1219, 34988,
-44708, 20998, 55219, 10658, 39923, 22649, 59700, 83, 48885, 25898, 40547,
-10513, 52419, 18098, 32776, 62393, 6880, 43142, 25266, 53022, 9824, 34633,
-64975, 13009, 42180, 23516, 51948, 1180, 32451, 56854, 20015, 46050, 13508,
-36987, 62872, 7224, 29533, 47484, 20275, 58397, 248, 29930, 44185, 16671,
-52868, 28350, 6696, 59694, 36695, 13844, 50562, 23063, 45517, 2855, 33576,
-60667, 16241, 45500, 28669, 7857, 64258, 35853, 19966, 46170, 3199, 59174,
-27120, 38634, 12518, 47122, 23274, 63000, 966, 33963, 44473, 20134, 50218,
- 9604, 34162, 58005, 18954, 44889, 6513, 34630, 55735, 15779, 43932, 27430,
- 8894, 58354, 38199, 14148, 30826, 48918, 7902, 55534, 24142, 41158, 12864,
-61758, 26801, 39240, 3175, 52054, 18853, 31560, 57440, 7210, 46201, 34507,
-14546, 60894, 24237, 43309, 4516, 54360, 24230, 40595, 10082, 63556, 19032,
-31762, 50881, 3572, 43743, 26386, 62687, 13309, 33490, 46158, 5369, 56072,
-23576, 38766, 13015, 64866, 25851, 47832, 3351, 37739, 60357, 13952, 29092,
-46731, 1561, 50588, 18218, 30964, 61294, 5327, 45917, 34606, 18847, 64482,
- 7446, 44945, 34869, 18128, 51586, 9633, 32044, 58602, 20761, 47958, 3343,
-41263, 25908, 52179, 9924, 32098, 57255, 13486, 41812, 23276, 53145, 5410,
-33715, 60098, 15132, 44458, 28230, 553, 52914, 37715, 17985, 60610, 8442,
-37233, 50373, 13012, 29080, 55139, 18270, 44049, 4491, 32011, 60149, 16107,
-48622, 29270, 57, 57642, 35713, 18389, 50485, 3900, 42872, 26611, 58125,
-12472, 41465, 23677, 62656, 1122, 48113, 18182, 35532, 51367, 7817, 28817,
-58955, 16881, 45513, 28047, 631, 63406, 37992, 15929, 29338, 57295, 3775,
-47100, 28863, 15384, 54253, 34796, 1163, 65327, 28181, 15373, 49363, 36296,
- 8012, 60227, 23707, 42390, 12197, 55562, 23278, 40145, 5498, 58464, 20342,
-32800, 46234, 1652, 63743, 29310, 14866, 38100, 52485, 3516, 30746, 62791,
-14674, 44273, 27488, 7157, 55977, 38085, 14540, 31857, 64721, 2535, 41727,
-23753, 53146, 13384, 30383, 61657, 1906, 44337, 28370, 15378, 57197, 38107,
- 4958, 31210, 54279, 12363, 42081, 24086, 56929, 8622, 33466, 50939, 19960,
-42403, 7219, 59991, 26103, 39667, 12786, 51222, 29086, 6370, 64190, 35832,
-19481, 47205, 9794, 54615, 23062, 39889, 2588, 62563, 25836, 38506, 10626,
-49251, 21365, 55376, 14622, 35010, 44804, 5807, 63629, 26394, 41300, 2559,
-55795, 18006, 34868, 47689, 10507, 63072, 25907, 38904, 2047, 49016, 21744,
-57949, 9439, 38451, 25063, 53182, 13179, 32662, 63999, 3309, 43067, 24556,
-54775, 11550, 40691, 23551, 57062, 1075, 47981, 21009, 31463, 60856, 8553,
-46743, 24400, 40731, 12219, 56329, 23858, 39655, 273, 61828, 20319, 31373,
-54106, 4648, 42365, 23835, 59848, 10680, 38921, 21611, 51691, 13265, 31893,
-62392, 4875, 47543, 28919, 16482, 58985, 36477, 10847, 52455, 22925, 47264,
- 2107, 33250, 55926, 13230, 41843, 24154, 59424, 1199, 38952, 22453, 52990,
-14231, 35568, 55298, 3547, 30472, 47297, 19841, 59733, 9031, 33870, 45979,
-17604, 55988, 2509, 38576, 27223, 8126, 41556, 25257, 61030, 12888, 39354,
-23255, 48828, 232, 59921, 26483, 40818, 10938, 55271, 18546, 33123, 44460,
- 9279, 64792, 24964, 39773, 861, 53953, 22723, 38439, 12855, 61002, 21305,
-43523, 2665, 54845, 26787, 39899, 11907, 63385, 18017, 32607, 47771, 7852,
-55472, 25807, 39179, 11777, 64406, 22403, 43775, 6149, 57549, 29593, 14784,
-52001, 35606, 784, 45682, 24045, 61972, 14334, 34269, 44619, 8444, 65142,
-20082, 34915, 46125, 1377, 56921, 17702, 34799, 45181, 5010, 63077, 24257,
-38509, 13474, 55718, 22726, 48125, 5608, 36810, 52022, 15011, 29783, 54620,
-10210, 42349, 23361, 59025, 5357, 32530, 51895, 15345, 45964, 28055, 7497,
-62948, 35354, 14398, 47631, 23713, 55929, 4951, 40846, 22658, 59433, 14081,
-48316, 29236, 3972, 54250, 37212, 20236, 60468, 8310, 44884, 25849, 40196,
-11731, 59572, 24435, 42737, 2700, 54493, 22132, 39973, 12481, 64377, 26639,
-48671, 9515, 34317, 61203, 14958, 45264, 27375, 2050, 56101, 35093, 18814,
-51775, 10549, 30256, 58247, 14626, 43950, 27328, 429, 53173, 38195, 14255,
-30204, 61516, 10182, 49256, 24272, 40286, 7006, 54265, 17135, 31360, 60151,
-11153, 42407, 24093, 54073, 2916, 38979, 22070, 59810, 13827, 47938, 29288,
- 1460, 63526, 36690, 20625, 52148, 4023, 34912, 61131, 17009, 45640, 29415,
- 372, 58934, 35051, 20478, 46762, 8774, 55327, 25206, 41963, 11411, 63741,
-22544, 39968, 1426, 53234, 27247, 38467, 10957, 57659, 18411, 35655, 49902,
- 743, 30142, 59932, 13613, 42900, 23982, 56289, 8503, 39093, 22078, 49149,
-11410, 61186, 26411, 41259, 1070, 54384, 21345, 45858, 11126, 32592, 59008,
-20113, 42558, 6160, 53074, 21402, 34183, 56170, 9614, 41789, 23151, 59197,
-11538, 39265, 25180, 54090, 2966, 30858, 62274, 12694, 42727, 23400, 53121,
- 5802, 34160, 64848, 17744, 45393, 7401, 36830, 61151, 16242, 29721, 46433,
- 3957, 62677, 25936, 40742, 9291, 49022, 22055, 63480, 12575, 41075, 26206,
-55475, 6050, 30601, 44716, 15331, 63852, 34563, 1328, 47472, 25048, 56404,
-11177, 33980, 45128, 19446, 64879, 8628, 39976, 26551, 54393, 11238, 39102,
-24730, 64038, 6307, 46707, 20041, 35991, 53554, 9454, 29501, 61031, 13113,
-42371, 25240, 56713, 5158, 36501, 52618, 15148, 31390, 47860, 9560, 59916,
-22883, 41475, 6641, 52718, 25395, 41060, 9575, 58781, 18804, 36746, 50600,
- 4745, 30067, 62038, 16245, 45361, 27731, 1922, 52255, 35824, 14955, 64495,
-29278, 8897, 51008, 37182, 17943, 48652, 6281, 56726, 26240, 41278, 9904,
-58874, 18041, 36983, 50372, 1331, 29243, 60809, 20652, 47532, 8275, 29854,
-50809, 16479, 35208, 58509, 5175, 45156, 27699, 16876, 50923, 36822, 8618,
-63063, 21676, 42596, 13855, 49202, 23145, 65046, 2810, 30098, 46257, 14573,
-59256, 25217, 39327, 1468, 53778, 18577, 33835, 63150, 9781, 46724, 18010,
-33383, 53944, 600, 42056, 26475, 60664, 12075, 35707, 50483, 15458, 32581,
-56045, 6451, 43299, 24596, 61797, 1579, 32408, 47102, 17603, 57586, 10663,
-38640, 23191, 52360, 7850, 32720, 60507, 15543, 44774, 27968, 6553, 53136,
-36894, 18679, 61852, 11599, 47566, 26881, 40646, 230, 57114, 22361, 40064,
-15170, 50491, 30632, 5056, 62147, 35262, 17531, 49954, 9644, 33593, 58191,
-17254, 43375, 2828, 54223, 20714, 31734, 63931, 5234, 46473, 17618, 36435,
-50339, 8968, 28673, 57169, 15074, 46463, 33993, 1751, 49136, 26571, 63669,
- 6989, 34887, 44822, 18779, 56541, 8942, 39551, 23077, 50356, 3527, 32288,
-64525, 15303, 43916, 28247, 6404, 61366, 37265, 18063, 51374, 11616, 42054,
-26580, 65181, 6078, 48236, 28903, 12459, 62195, 36818, 17560, 52520, 494,
-41990, 26213, 63044, 6871, 32476, 53805, 19536, 47242, 30306, 57795, 18657,
-45614, 5593, 32644, 62076, 18653, 42708, 8431, 54376, 21257, 31827, 48943,
- 2866, 61155, 20100, 30376, 46444, 5539, 57191, 19413, 33419, 52015, 7732,
-42750, 25673, 64245, 10280, 38880, 23065, 48531, 5674, 56765, 25336, 42077,
- 92, 52981, 30055, 15463, 59598, 35339, 3910, 49482, 20329, 32278, 54490,
- 8715, 42289, 24284, 61136, 12543, 39791, 22035, 55498, 7290, 32649, 52346,
-17627, 48444, 3792, 29857, 60500, 13229, 42076, 23899, 51171, 8357, 31006,
-58684, 19175, 48329, 469, 39939, 27087, 64331, 11148, 32940, 45762, 19761,
-57363, 2057, 40433, 26151, 63558, 12869, 48026, 25614, 38816, 2980, 61506,
-20093, 37418, 53848, 12552, 30742, 45935, 2389, 64404, 25346, 38318, 12192,
-46993, 21483, 56590, 612, 33445, 44780, 15428, 63545, 28659, 6260, 49494,
-37892, 18695, 56265, 4880, 47950, 30784, 16644, 62165, 36554, 8018, 51557,
-24360, 44673, 4088, 30351, 56969, 20074, 42344, 5483, 53552, 29494, 16441,
-63213, 37460, 8475, 46685, 25113, 61821, 6328, 37610, 50013, 16885, 31508,
-63485, 5246, 47236, 27696, 15993, 55762, 37991, 2158, 31866, 47735, 20826,
-65259, 4423, 40019, 26855, 51604, 13017, 33805, 55984, 7241, 41996, 24857,
-61846, 11383, 33198, 51306, 19174, 45457, 5976, 32106, 56981, 14639, 44065,
-27415, 10480, 65293, 37143, 18404, 51572, 5215, 44033, 30285, 14933, 60137,
-36468, 4236, 53835, 24692, 42546, 12799, 49099, 21542, 59377, 5060, 31501,
-44713, 12463, 65451, 25181, 39536, 6523, 54677, 19737, 36598, 51475, 2469,
-30905, 64320, 16235, 44377, 29027, 7073, 56631, 34508, 15661, 49862, 28263,
- 4128, 63258, 37524, 15518, 53789, 28053, 8780, 49320, 37122, 17362, 65405,
- 604, 47423, 30374, 15704, 51709, 37816, 8127, 57717, 27999, 16448, 50047,
-38208, 1720, 30004, 59671, 19953, 43595, 11455, 56377, 26626, 39704, 808,
-51528, 18518, 33926, 58961, 11943, 48235, 21389, 38308, 1876, 52274, 31300,
-14990, 57855, 37352, 3600, 48324, 23911, 60928, 10728, 38848, 21442, 52105,
-14167, 35525, 62304, 5622, 40552, 22053, 51470, 3440, 30615, 59565, 15329,
-47093, 29582, 1608, 56018, 35160, 16517, 51369, 28341, 4143, 58580, 38236,
-16927, 32238, 48959, 2111, 65467, 21806, 40537, 11728, 54461, 26552, 43436,
- 4567, 62829, 25325, 39076, 12891, 55268, 21229, 38574, 2553, 63746, 26969,
-48374, 12469, 41038, 22115, 56262, 6771, 37638, 49988, 16873, 31515, 59283,
-10045, 46926, 25097, 41069, 2765, 61330, 20623, 31453, 54949, 11212, 44980,
-20389, 33114, 48201, 4930, 65033, 20014, 33121, 44594, 10362, 54093, 17424,
-34117, 63481, 4347, 42278, 24477, 53561, 9649, 32848, 62592, 12603, 42473,
-23277, 54804, 1134, 39166, 26979, 59450, 6752, 38553, 26597, 56176, 10255,
-44604, 18854, 36925, 51764, 5465, 30477, 61479, 13261, 42963, 23304, 50436,
- 4407, 29968, 58686, 13184, 43253, 23727, 55335, 8492, 38434, 21800, 65010,
- 3879, 30100, 47163, 19579, 59540, 8806, 39125, 26948, 52588, 13853, 41625,
-21535, 60134, 3828, 49070, 27030, 42219, 13180, 54552, 29563, 920, 64958,
-35924, 17352, 49971, 4651, 31596, 55714, 21214, 44141, 8163, 33792, 63654,
-19254, 47439, 6144, 37340, 59937, 12488, 28674, 53862, 20793, 46363, 3825,
-39389, 26767, 63222, 11290, 34840, 49882, 18448, 41078, 7197, 59211, 34703,
-21090, 51968, 10622, 42084, 23208, 65114, 3506, 35023, 52037, 19081, 41410,
- 9796, 58745, 22379, 39827, 14291, 52580, 33845, 1055, 61927, 25426, 42853,
-11830, 53025, 20243, 34975, 58408, 8316, 46007, 19534, 35589, 53594, 3188,
-30378, 59091, 19358, 46876, 8710, 33695, 57860, 18500, 44659, 4078, 31447,
-56258, 20710, 48092, 8481, 34398, 58872, 14876, 42816, 24409, 50362, 1977,
-63509, 8702, 36540, 54138, 14684, 29313, 49512, 3636, 35147, 65368, 17602,
-44582, 10332, 34118, 55713, 17274, 42231, 7161, 63497, 26029, 38701, 11250,
-50118, 17159, 30974, 59697, 1926, 46361, 34618, 19065, 52193, 11733, 32678,
-61723, 17641, 46931, 6877, 38533, 23854, 65531, 9969, 41888, 17678, 52524,
-29842, 1822, 62546, 36642, 18633, 49289, 5132, 32605, 58047, 18297, 44991,
- 2358, 30062, 63369, 20749, 43866, 9713, 33059, 56041, 16931, 48883, 27708,
- 5370, 61475, 38027, 15380, 33111, 54470, 9773, 43238, 24824, 58164, 4495,
-39558, 17132, 51531, 29130, 8251, 60629, 36177, 17145, 50169, 5733, 34302,
-56102, 15982, 45195, 29498, 6908, 58699, 35897, 18642, 52564, 11534, 42907,
-27122, 60532, 5589, 35342, 50682, 16729, 29897, 61735, 9171, 43823, 27308,
-16943, 57611, 35857, 1971, 50497, 28866, 15350, 60084, 34969, 9906, 46701,
-22514, 52967, 770, 33093, 60906, 17796, 46902, 10546, 32733, 65039, 13625,
-41519, 24172, 50778, 1245, 33849, 59027, 15217, 44687, 28588, 3683, 53711,
-36437, 20276, 57682, 9500, 44463, 21212, 33063, 60683, 6638, 43813, 17677,
-57092, 30155, 8289, 49930, 35644, 14634, 62163, 24744, 45582, 157, 31780,
-58510, 15744, 44496, 27865, 3738, 54053, 37672, 17078, 63749, 8818, 29821,
-48493, 21379, 60495, 2592, 40676, 25636, 53706, 8242, 32189, 57868, 16153,
-47711, 27806, 1874, 64397, 38065, 15757, 29919, 47311, 6210, 62683, 25490,
-38247, 13817, 54730, 21211, 48476, 3316, 36953, 58569, 15950, 28721, 49595,
- 8179, 34402, 57867, 14669, 46549, 27608, 4946, 59785, 37773, 20204, 51820,
- 8301, 35305, 58317, 14169, 44274, 27301, 2235, 60999, 35403, 18762, 51204,
- 4666, 32218, 56915, 14646, 44547, 27827, 6135, 61889, 36384, 16651, 49114,
-27316, 4531, 62870, 35581, 15229, 53733, 27689, 6469, 49791, 35331, 18583,
-60938, 10275, 42829, 25146, 54133, 4657, 39786, 26975, 61809, 9123, 32994,
-53970, 16685, 45336, 28481, 6614, 64712, 35257, 19781, 46843, 9162, 54532,
-27235, 41658, 2666, 57832, 23217, 47884, 9853, 30913, 61194, 13999, 42239,
-23794, 53535, 6906, 38774, 21485, 63448, 13988, 36872, 49749, 8352, 30617,
-62269, 15707, 44979, 27409, 6760, 55274, 37251, 13364, 47475, 24618, 58380,
- 7515, 39268, 21337, 51121, 977, 33193, 61183, 14655, 43624, 22577, 51911,
- 7672, 33132, 56801, 18027, 45532, 177, 33245, 64803, 14043, 43144, 24649,
-54953, 3857, 39428, 21670, 62810, 13674, 34295, 53270, 6971, 44113, 28070,
-15781, 60281, 37507, 297, 53945, 24406, 41841, 12440, 58074, 25950, 39585,
- 2710, 48995, 24417, 59359, 12496, 39167, 22025, 50417, 493, 37818, 57489,
-15658, 29738, 47722, 7473, 60209, 24695, 41152, 13289, 53299, 21224, 48104,
- 4231, 35834, 62064, 15826, 30944, 48683, 8969, 57095, 27358, 16491, 38118,
-53179, 2377, 31833, 63896, 14644, 46018, 22392, 39917, 6145, 61866, 26974,
-39562, 11419, 51496, 17648, 33353, 57303, 2021, 42939, 23283, 53762, 12413,
-31371, 64516, 6164, 47867, 25630, 38245, 9977, 62348, 18434, 34457, 51371,
- 7428, 42980, 24893, 58457, 10905, 34464, 45501, 20240, 62654, 2263, 36209,
-49532, 14640, 29959, 59223, 10440, 43537, 23000, 50851, 1840, 35781, 65260,
-15676, 31791, 51864, 8949, 42518, 24024, 53825, 777, 32129, 60373, 12962,
-42947, 25032, 53677, 2135, 32256, 57512, 16937, 45132, 27830, 8191, 60295,
-38101, 16020, 29776, 55452, 4306, 43722, 25086, 60761, 9288, 30798, 50751,
-16144, 45883, 28428, 5139, 63863, 37944, 14325, 30987, 55992, 114, 48100,
-27663, 14282, 63223, 37519, 10646, 44745, 23966, 54862, 1750, 39227, 21598,
-61312, 10037, 33430, 51048, 13359, 43485, 25321, 64922, 4927, 30166, 51999,
-12990, 41336, 22791, 16533, 56547, 37670, 737, 50308, 27861, 16068, 57354,
-38056, 7819, 29635, 59405, 20423, 48115, 1191, 35994, 53665, 15454, 30904,
-58502, 3658, 43350, 23868, 54872, 12244, 40570, 25342, 62398, 8617, 43090,
-22469, 55583, 3448, 40644, 26136, 58794, 12616, 39879, 27079, 57336, 4590,
-44144, 21479, 50761, 13842, 33181, 55668, 7801, 44968, 27752, 15914, 64715,
-37432, 11225, 53722, 25382, 46778, 4701, 35004, 59071, 15224, 45225, 28994,
- 1104, 57723, 35997, 14057, 44751, 23721, 64617, 3077, 29881, 46947, 18795,
-53833, 11524, 31401, 62374, 20890, 44401, 1688, 32399, 54757, 20483, 46137,
- 9660, 31321, 62032, 19114, 48568, 827, 39420, 26619, 65036, 9462, 39170,
-25780, 49011, 1544, 55727, 21907, 40303, 10611, 59043, 23468, 47899, 2973,
-35979, 53029, 13969, 29946, 65261, 7688, 44402, 27398, 11560, 53246, 37687,
-19827, 64218, 5770, 44092, 29187, 16115, 53989, 37630, 8315, 58154, 25533,
-43446, 2937, 52093, 18172, 31650, 60431, 8836, 42438, 23729, 56357, 10083,
-40126, 22684, 64664, 13740, 35071, 50443, 796, 30586, 54502, 18832, 41374,
-10708, 64173, 26834, 38440, 1814, 52780, 18864, 32380, 57838, 9041, 42090,
-22471, 52372, 5753, 34990, 64529, 19512, 46210, 10941, 32001, 48932, 21116,
-57454, 1256, 33703, 44244, 15145, 55855, 27865, 10960, 49722, 35844, 19394,
-62437, 5463, 45080, 20852, 31989, 56549, 10636, 49292, 22347, 39143, 8119,
-58417, 27078, 49657, 96, 40889, 23138, 61806, 9218, 33355, 45256, 13275,
-64001, 22869, 41551, 1336, 53972, 24254, 40287, 10668, 62256, 18685, 35351,
-49247, 300, 29928, 64719, 17942, 46372, 9954, 32176, 57046, 16306, 46260,
-28522, 7874, 63675, 37832, 20048, 49683, 10038, 34979, 59850, 19207, 42333,
- 2064, 53341, 31334, 14491, 56992, 37482, 10005, 49000, 20522, 37421, 63432,
- 3138, 30403, 54737, 14860, 46808, 29185, 7175, 65282, 35799, 13892, 46865,
-22500, 58352, 2772, 41190, 25915, 48595, 11467, 56256, 21768, 40606, 244,
-60414, 25378, 42982, 12803, 53109, 24532, 39291, 7487, 64321, 20333, 33676,
-46173, 836, 56185, 25975, 40656, 11831, 59804, 25172, 48109, 2997, 41330,
-22099, 57371, 12246, 37637, 50299, 302, 29104, 60362, 17027, 44078, 28471,
- 3656, 64143, 37938, 16221, 31674, 55672, 8771, 46525, 27892, 16682, 58672,
-38137, 4937, 29041, 48193, 10262, 62557, 25176, 38718, 13227, 51767, 29119,
- 5963, 60898, 35495, 18976, 51085, 10880, 43607, 26960, 57548, 1081, 31781,
-47405, 19111, 64019, 9174, 40785, 25910, 50936, 13918, 31476, 62366, 5594,
-45850, 21099, 34736, 56616, 8642, 45714, 18245, 36833, 61048, 6133, 28576,
-53861, 17033, 45941, 27340, 3841, 64444, 38050, 16815, 31157, 48879, 2273,
-63296, 25353, 39656, 11715, 55564, 22729, 45922, 208, 37771, 65411, 14131,
-29406, 45746, 6246, 59654, 23665, 39906, 10758, 52013, 17869, 31803, 57153,
- 930, 47611, 35327, 18869, 59801, 4865, 46384, 37939, 15225, 28486, 63070,
- 8033, 35389, 45729, 18247, 51639, 108, 34133, 58675, 14868, 43168, 24054,
-53927, 2678, 39106, 22600, 60953, 14233, 30871, 48225, 3719, 52980, 27581,
-15528, 57314, 37730, 8856, 51031, 27707, 16968, 55079, 38201, 4838, 30227,
-58465, 20209, 42914, 11015, 55819, 25662, 38359, 5547, 62412, 21373, 43997,
-14720, 50664, 35077, 8075, 64455, 27761, 14039, 49467, 37390, 6081, 62073,
-27298, 13917, 53995, 38242, 502, 32815, 48755, 20208, 62965, 11488, 40457,
-23181, 53675, 2731, 34222, 57939, 19676, 48270, 7754, 39769, 25781, 60457,
-11350, 49230, 21698, 41561, 4750, 57635, 29410, 15926, 50353, 35227, 7414,
-64233, 25516, 48521, 12095, 41388, 23886, 60402, 1148, 38717, 21459, 53741,
-14568, 32807, 61649, 3291, 44986, 28048, 6056, 33433, 46401, 19730, 62525,
-11427, 40808, 25144, 53756, 4128, 40413, 22899, 64331, 12584, 49253, 26728,
-39352, 9731, 51904, 20648, 32533, 62988, 6836, 45244, 19728, 36216, 58244,
- 584, 30474, 52827, 14772, 45180, 28177, 9996, 63776, 35870, 19785, 48765,
- 1202, 54643, 23550, 38251, 10675, 60432, 27041, 41662, 6336, 57070, 19929,
-31424, 51269, 323, 42741, 22562, 60842, 7385, 30920, 48709, 19563, 64104,
- 8670, 39654, 24396, 54748, 12569, 47554, 28810, 6061, 59906, 37559, 17182,
-51634, 8074, 34327, 58853, 21154, 45390, 4015, 34826, 48989, 18166, 65332,
-12620, 40200, 26957, 58282, 4730, 43011, 24592, 54013, 11812, 41240, 22766,
-56798, 3610, 47837, 17162, 34463, 62558, 13788, 30537, 45846, 6620, 55094,
-25538, 39502, 11354, 62517, 19945, 37850, 51087, 4067, 33050, 55927, 14951,
-46037, 28412, 1330, 58500, 35245, 14376, 50687, 27980, 3709, 62483, 35638,
-19257, 49961, 10051, 39881, 21348, 63639, 29214, 6126, 53964, 37269, 20087,
-49369, 2331, 32489, 52690, 19568, 41490, 5007, 59880, 25852, 46775, 13098,
-33783, 56257, 4257, 43690, 23610, 58888, 12681, 40956, 21899, 50709, 5140,
-36515, 63083, 16058, 30258, 47568, 10437, 55042, 25790, 40366, 2699, 61044,
-18288, 36859, 51931, 8196, 29149, 62958, 20417, 45880, 6159, 37472, 59258,
-14304, 29605, 52635, 824, 42149, 24668, 61563, 12403, 40253, 24338, 55157,
- 3040, 31775, 45888, 18186, 61007, 10902, 34318, 45689, 14637, 56599, 24382,
-40647, 4771, 52060, 18468, 31778, 60062, 8624, 45327, 34975, 15792, 57048,
-27483, 4399, 50481, 37011, 16457, 55732, 27532, 6457, 49918, 37862, 20078,
-61672, 5277, 43892, 33204, 17133, 53897, 986, 30827, 56378, 15449, 45556,
-28905, 6657, 64078, 36911, 20228, 51242, 8890, 42831, 25812, 59455, 8,
-31708, 52405, 15786, 45129, 28274, 8756, 60119, 36297, 19376, 50773, 1160,
-32447, 54585, 19285, 43064, 8360, 62732, 23502, 39118, 15258, 52113, 30202,
- 5353, 63331, 35013, 17839, 49543, 8861, 32360, 56641, 17551, 43749, 3878,
-59327, 29679, 14940, 49942, 36404, 10502, 54672, 22798, 44509, 6389, 35370,
-62590, 15823, 29735, 53480, 5013, 42909, 24279, 64977, 13726, 31908, 53864,
- 8958, 48175, 23678, 40984, 12502, 57474, 21626, 49119, 2675, 41604, 23341,
-63318, 11572, 36182, 49940, 15203, 31168, 55840, 1575, 43169, 21558, 59657,
-15008, 35654, 49605, 3068, 30997, 56775, 17141, 45803, 6497, 32980, 63181,
-13388, 42332, 23736, 52572, 5209, 33480, 56016, 17973, 46475, 3073, 33927,
-59378, 20518, 42857, 9482, 51890, 17046, 30945, 64354, 1554, 43296, 26275,
-52078, 13718, 33224, 62216, 7755, 43944, 28120, 14968, 58156, 35268, 8452,
-52517, 22205, 44519, 14152, 32894, 59106, 4606, 44188, 29367, 16753, 53957,
-35134, 8086, 57517, 27643, 16565, 49916, 36652, 3454, 62834, 25775, 43759,
- 9181, 50680, 20411, 29851, 64262, 7460, 45232, 28143, 12675, 55742, 35575,
-20886, 50817, 3511, 32053, 60443, 20401, 42400, 11314, 54993, 26210, 39313,
- 4569, 64005, 21525, 46186, 12597, 31799, 56040, 8639, 44680, 28060, 16504,
-64768, 38071, 5349, 30752, 47444, 19531, 61462, 551, 31143, 45681, 15592,
-64168, 27456, 7807, 49711, 36493, 18234, 61205, 1357, 43519, 27116, 52902,
-12037, 40438, 22814, 59818, 2954, 30594, 52153, 16719, 45188, 29152, 4647,
-58410, 38239, 16653, 34009, 51351, 9149, 29392, 63762, 15767, 44383, 27874,
- 5948, 56029, 38010, 15472, 30077, 59478, 7132, 41677, 24491, 52104, 15142,
-32874, 65308, 2164, 44575, 28595, 16387, 55251, 38164, 8989, 31404, 62312,
-19686, 45812, 2970, 37525, 57116, 16480, 29956, 46928, 5176, 55507, 25984,
-40261, 7936, 59776, 25365, 39954, 11910, 48975, 21696, 57913, 63970, 9214,
-42814, 25501, 52002, 2706, 32005, 60699, 15300, 45371, 28353, 9053, 56109,
-35406, 19718, 46709, 5059, 60843, 24871, 41891, 2198, 54369, 34646, 15863,
-49358, 28326, 10684, 64602, 37091, 18823, 49958, 5356, 37870, 56401, 15806,
-29767, 46154, 7475, 61936, 24992, 41210, 13194, 48069, 22017, 63525, 2835,
-34376, 45675, 17786, 58943, 10169, 39100, 26641, 53228, 12911, 34592, 57386,
- 3224, 43996, 28162, 16521, 52722, 32652, 2126, 62577, 36804, 20456, 50070,
-10644, 42684, 23554, 63647, 165, 35969, 49560, 14468, 30120, 61085, 9551,
-42087, 23919, 55499, 2497, 38507, 21266, 52302, 8991, 32725, 60681, 15811,
-46629, 28973, 6282, 63903, 37353, 20628, 52873, 11397, 42775, 24954, 59537,
- 4426, 34875, 50517, 16215, 31370, 56433, 296, 45046, 27764, 15930, 61546,
-30968, 6685, 49907, 36217, 20477, 60522, 10927, 42490, 26766, 55749, 7349,
-46355, 24300, 40024, 11453, 59758, 17104, 33559, 52529, 94, 47151, 17008,
-35661, 61335, 10963, 28325, 54686, 17564, 42969, 7402, 62036, 29290, 16066,
-53985, 37165, 8613, 50189, 28065, 15795, 62900, 35699, 2862, 53839, 26319,
-42594, 11990, 59923, 25681, 40417, 1146, 56250, 21787, 45907, 14400, 33154,
-58988, 6530, 43013, 25595, 50282, 11317, 30783, 56584, 17556, 42366, 3897,
-50690, 21070, 33726, 64870, 9294, 46274, 18713, 36677, 58110, 6011, 29540,
-51340, 18357, 43206, 9155, 65101, 21100, 33160, 54385, 6713, 43842, 19976,
-31257, 49101, 2133, 62997, 26051, 38896, 10783, 54342, 20326, 47692, 29343,
- 2605, 61115, 37841, 13628, 45193, 22634, 63496, 8051, 32523, 53910, 14943,
-45150, 28833, 2881, 58127, 35842, 18320, 50762, 11473, 35090, 62638, 20595,
-48508, 4059, 39984, 25068, 58738, 11637, 32615, 53850, 17441, 45539, 4858,
-34078, 65019, 21052, 41098, 11810, 57380, 25493, 40796, 4174, 48041, 21750,
-63684, 12102, 40964, 26154, 58003, 6108, 36915, 49935, 14145, 30517, 55816,
- 2060, 43494, 24573, 58779, 13067, 39612, 22318, 54794, 3101, 38825, 26731,
-65400, 11804, 42505, 21743, 51468, 5918, 34344, 62922, 19126, 42798, 2487,
-58082, 20795, 31415, 51713, 10080, 43617, 18334, 58935, 32654, 7660, 51757,
-36611, 18498, 45914, 2001, 61910, 26297, 38791, 6205, 59397, 26148, 38353,
- 9702, 52036, 17637, 31125, 60106, 3528, 43252, 23655, 54412, 8375, 39622,
-22777, 64343, 11909, 42467, 26262, 53888, 7655, 39165, 24143, 59162, 11244,
-38484, 21440, 55277, 2136, 48767, 30140, 15508, 58629, 35899, 7488, 44627,
-24787, 65528, 12653, 39580, 23453, 55492, 4175, 33629, 47358, 18843, 58786,
-12270, 38615, 22472, 50551, 4674, 31066, 55767, 16383, 46576, 34697, 891,
-61502, 24147, 46417, 12477, 37209, 54633, 6273, 28503, 60970, 15160, 46581,
-27388, 9825, 52781, 37449, 18432, 61817, 2010, 44868, 38030, 15346, 29350,
-55651, 11408, 41417, 23583, 60245, 5616, 34232, 53239, 13683, 41729, 23833,
-57982, 1381, 32282, 46807, 17364, 61494, 9855, 38725, 26798, 52096, 5707,
-33861, 57848, 14554, 42317, 24847, 50731, 7086, 33775, 62096, 19360, 47804,
- 1095, 40152, 25921, 58356, 12301, 43311, 24163, 54827, 9217, 40733, 23192,
-59670, 12998, 34490, 53609, 3984, 44756, 32707, 21042, 57324, 9744, 47683,
-17204, 35372, 64569, 5969, 31007, 47471, 14154, 57676, 24725, 41665, 8785,
-53422, 34766, 18378, 61484, 1569, 44854, 28397, 14682, 53050, 37536, 3365,
-59996, 23322, 46058, 13169, 33285, 53323, 1284, 43919, 21994, 62156, 12698,
-34942, 47653, 3870, 56898, 24059, 40452, 10790, 52600, 19331, 33833, 59862,
- 919, 43473, 23198, 51919, 10871, 30346, 61037, 15054, 44181, 27627, 6352,
-52417, 36466, 18044, 64648, 10349, 47340, 27283, 38270, 2090, 52856, 17628,
-31528, 39842, 24345, 58819, 12709, 39543, 22028, 54796, 6390, 35096, 47300,
-18262, 61863, 140, 32461, 44180, 15816, 57790, 29375, 7790, 50335, 36363,
-18384, 61717, 8959, 43453, 25309, 56722, 4623, 32200, 51861, 13202, 42237,
-23202, 60770, 2077, 34353, 52698, 19262, 42613, 4272, 59313, 26805, 39026,
-11266, 53996, 21232, 49303, 8211, 41101, 23364, 64858, 5607, 36914, 49741,
-15121, 29311, 62238, 9202, 47690, 23009, 41021, 12002, 59687, 26049, 43692,
- 5421, 55359, 17462, 34926, 51959, 8990, 29271, 57139, 18607, 42599, 5156,
-52975, 28653, 16169, 57746, 36406, 7405, 47460, 25383, 63145, 12328, 41576,
-22803, 51165, 411, 33897, 58162, 18061, 42269, 9798, 50855, 29745, 2165,
-60671, 36527, 15524, 49232, 27557, 7758, 63572, 37324, 13168, 47268, 23097,
-59251, 9652, 34226, 44120, 18428, 63979, 2144, 40819, 25457, 53700, 12670,
-38697, 21537, 63299, 2508, 33865, 48520, 19870, 57176, 5237, 30399, 45375,
-21585, 65440, 7844, 32680, 44386, 20996, 58669, 3793, 33614, 51108, 14511,
-45489, 27494, 1560, 64908, 35315, 19909, 49357, 5467, 34651, 58454, 19500,
-45751, 10943, 39075, 23592, 49226, 5895, 65377, 21099, 38604, 12125, 48696,
-25315, 62367, 4583, 39802, 22400, 53236, 13642, 35765, 64044, 530, 32770,
-46474, 19426, 61414, 11927, 40235, 26271, 55417, 2104, 31856, 50024, 13514,
-41445, 25500, 63242, 3358, 33902, 53571, 13923, 47042, 25359, 39998, 1195,
-60434, 17596, 47812, 28835, 10135, 58189, 36522, 17417, 50032, 5984, 31028,
-64917, 12805, 41121, 23408, 55884, 7462, 34287, 50164, 15545, 30312, 59165,
- 1762, 42580, 22455, 52004, 10534, 33377, 65237, 20867, 47130, 5690, 39928,
-26618, 53097, 9471, 33261, 57226, 16359, 45068, 28336, 1486, 60858, 37668,
-20698, 49435, 9746, 30243, 55345, 19040, 43612, 2258, 61666, 26921, 38407,
- 8136, 53159, 33077, 14140, 55739, 24184, 44611, 3684, 32079, 61313, 16938,
-47152, 27927, 10150, 62326, 37161, 18911, 50437, 5947, 41600, 27182, 60703,
-10426, 48480, 19026, 35673, 53986, 591, 30484, 61463, 15694, 45447, 28479,
-12767, 55306, 37133, 8208, 50429, 27562, 15320, 63842, 38156, 1146, 28343,
-48609, 20649, 60855, 4246, 40321, 23233, 55325, 9771, 32384, 52832, 14909,
-43694, 23892, 55214, 509, 40470, 21860, 65364, 12525, 39449, 26502, 51348,
- 6742, 32284, 57942, 18892, 46884, 4014, 33781, 61850, 17644, 48814, 787,
-41536, 27234, 64942, 13127, 40459, 23474, 46856, 8318, 61734, 25906, 39198,
-11243, 54581, 21669, 47988, 622, 34689, 60748, 18848, 43329, 10413, 53135,
-26586, 40215, 2380, 63492, 26035, 43501, 11123, 53484, 21210, 39010, 6855,
-65186, 25710, 41220, 11625, 56857, 21564, 40573, 3170, 50893, 31034, 16296,
-64579, 38076, 1299, 31059, 49083, 20570, 56841, 5866, 30925, 47655, 20491,
-64828, 7716, 33846, 47315, 20205, 56928, 394, 30542, 44418, 16206, 62626,
-27909, 4173, 50163, 35068, 19979, 65249, 11600, 43292, 25472, 55178, 2673,
-41402, 22630, 63459, 13317, 46263, 30430, 1720, 60663, 36876, 17724, 53408,
-10370, 43047, 21098, 59690, 29356, 6074, 53465, 35878, 18554, 49707, 2849,
-33298, 63825, 20744, 46868, 6921, 39554, 25634, 52256, 14077, 29916, 62919,
- 2569, 41887, 24708, 56017, 12549, 39499, 26454, 54354, 35, 39012, 21759,
-63267, 6624, 33442, 46437, 20116, 56247, 11052, 39821, 23046, 65478, 4976,
-48095, 31532, 17023, 57957, 36196, 8547, 49919, 27395, 16808, 64623, 38134,
- 5472, 28966, 54705, 19269, 46123, 9036, 31986, 58808, 17327, 45250, 5905,
-37249, 64371, 15354, 29044, 50406, 7764, 41387, 25814, 54363, 3451, 34514,
-63303, 12667, 42986, 23337, 51078, 357, 33418, 58730, 20130, 42014, 12596,
-55960, 26622, 48734, 4992, 32970, 60619, 1403, 45622, 18235, 31090, 49412,
-11066, 65218, 24949, 40188, 8264, 49010, 22504, 55622, 11563, 40129, 25723,
-63875, 3062, 32992, 51418, 14357, 40793, 22676, 59328, 1464, 33978, 53566,
-18082, 45668, 7744, 31602, 65094, 15336, 47853, 28139, 9126, 55726, 37897,
-15104, 31524, 48469, 728, 63153, 25148, 38293, 13038, 56524, 26987, 43686,
- 1696, 52569, 19748, 34075, 60341, 4633, 44763, 18878, 33474, 56074, 994,
-49073, 23990, 39407, 11180, 65421, 20842, 32036, 45755, 2787, 61687, 25044,
-38479, 12005, 50730, 20468, 32911, 64769, 1420, 44039, 27654, 14771, 54145,
-37030, 3862, 59273, 29450, 14750, 49957, 36115, 5979, 54548, 21464, 34856,
-64891, 11887, 45121, 19241, 37859, 54075, 6070, 29234, 58345, 17002, 44396,
-27406, 2819, 53642, 37095, 17431, 57662, 4804, 47108, 21277, 36580, 55138,
- 9195, 31239, 47353, 19482, 58230, 6010, 40664, 25916, 53069, 12027, 32391,
-60400, 17574, 42941, 3185, 50540, 19705, 30527, 57527, 10187, 45832, 18367,
-29877, 61126, 6264, 44027, 34650, 17945, 56788, 10342, 42770, 26512, 52633,
-14220, 32371, 61718, 312, 48560, 29380, 16537, 52638, 35475, 9399, 57463,
-26406, 41646, 2217, 51977, 18566, 36675, 60521, 6903, 28727, 47189, 19883,
-54204, 9925, 40899, 26575, 58418, 4501, 35433, 51467, 15470, 29995, 57574,
- 6372, 43262, 21690, 59400, 9983, 31849, 51736, 17864, 42873, 5562, 61500,
-30368, 15668, 55539, 36021, 8439, 52094, 23714, 44614, 3643, 33879, 61929,
-14499, 43477, 24597, 50945, 495, 34739, 58479, 16854, 46870, 27521, 3802,
-52971, 37360, 19388, 62376, 9057, 36607, 49714, 15608, 29667, 55975, 669,
-42802, 23548, 59888, 14061, 31376, 47995, 3033, 64309, 23048, 41721, 13355,
-52679, 30384, 7647, 63039, 35762, 17893, 49998, 5206, 35390, 59053, 16164,
-31202, 51070, 10439, 43786, 22749, 64300, 451, 37145, 50205, 15180, 28991,
-59597, 8778, 42189, 24882, 52788, 1007, 33071, 55085, 13586, 43074, 23822,
-63945, 4799, 36250, 52634, 15371, 33008, 45970, 7756, 59034, 22316, 40621,
- 9968, 47956, 25296, 57436, 2067, 32428, 44858, 19491, 60035, 5333, 36295,
-49636, 16456, 30207, 56792, 8146, 46570, 27792, 13079, 64669, 35709, 19743,
-50431, 4967, 42693, 22417, 62345, 13773, 36582, 49866, 7824, 29412, 56005,
-20611, 46432, 1896, 34230, 61417, 11234, 44480, 28380, 15962, 54761, 38171,
- 9190, 30814, 57516, 20656, 43709, 5639, 52289, 17883, 35293, 60393, 2526,
-29384, 51057, 18605, 42068, 4562, 63683, 32165, 16283, 50246, 28110, 5757,
-56703, 38060, 15086, 31561, 60107, 8347, 48237, 21939, 39523, 3560, 57287,
-26842, 44335, 12827, 59927, 23342, 38290, 5324, 51839, 18307, 33417, 55783,
-10722, 42183, 23176, 58151, 6681, 47443, 25182, 40517, 11221, 59867, 17143,
-35801, 51984, 2732, 29082, 44310, 17333, 60658, 10471, 35233, 52242, 19071,
-46337, 6554, 35614, 59228, 18386, 42409, 9343, 52498, 26674, 39693, 4949,
-58420, 19469, 47864, 31352, 8851, 51449, 37167, 16912, 57428, 27427, 6224,
-49571, 35356, 20322, 65503, 3571, 37810, 49461, 14521, 30977, 62498, 8317,
-42163, 24841, 55361, 11528, 40042, 17315, 59101, 29519, 1593, 54550, 35947,
-19088, 50029, 9397, 33425, 60857, 20187, 45783, 4427, 33966, 60023, 17382,
-48047, 10022, 36930, 51708, 15841, 28740, 60811, 3195, 42790, 23771, 54451,
-13155, 33198, 45312, 7253, 55968, 27373, 15146, 38234, 60544, 2365, 29123,
-52082, 10955, 43525, 22828, 59715, 13789, 33967, 51460, 294, 41667, 26493,
-62783, 12897, 38584, 22081, 53153, 2623, 32631, 57317, 18373, 46102, 9511,
-29686, 59037, 14135, 48394, 23882, 39620, 4678, 57393, 17255, 30936, 46303,
- 6928, 61795, 23815, 38445, 9566, 53349, 18379, 12205, 40659, 26498, 48354,
- 5700, 56276, 20327, 34138, 44069, 2438, 59249, 28918, 16928, 50938, 35566,
- 5218, 60021, 21437, 45491, 13611, 30154, 55489, 6316, 47797, 28145, 16586,
-63575, 37263, 9860, 50222, 21043, 34718, 57694, 5617, 44327, 18365, 33070,
-61556, 3619, 49194, 22222, 39674, 11997, 60099, 26457, 47092, 5216, 39956,
-21724, 59248, 13959, 32694, 47051, 6932, 54452, 23416, 39144, 14351, 62675,
-28572, 8222, 50988, 37172, 16001, 58662, 28911, 5923, 49651, 37180, 18125,
-56635, 10072, 48323, 27199, 41713, 4626, 59333, 17763, 37456, 52575, 10292,
-29571, 48380, 18819, 62631, 6516, 40604, 25986, 47135, 10761, 61824, 17305,
-30724, 44154, 3283, 57738, 27636, 14470, 49940, 35115, 1139, 62727, 23491,
-42984, 12487, 52414, 29116, 8772, 64559, 35594, 19795, 49486, 7135, 29911,
-61357, 15327, 44663, 27744, 536, 64737, 35642, 17878, 51033, 9861, 42812,
-27099, 61970, 1490, 41136, 22765, 51644, 9263, 34122, 56037, 13360, 42202,
-23951, 63102, 684, 32083, 47823, 20572, 54833, 8486, 39619, 25213, 63460,
- 2597, 48749, 22343, 41199, 8065, 57510, 26818, 38707, 10486, 46601, 21543,
-63764, 3844, 32531, 54213, 13216, 42542, 23623, 47789, 10204, 58132, 17037,
-31062, 44148, 3225, 64784, 23760, 38814, 12479, 48626, 21751, 63114, 7394,
-41275, 24685, 48198, 12850, 54455, 22817, 38886, 231, 64581, 27213, 38258,
-12900, 48138, 21412, 57576, 2847, 39226, 26578, 48410, 12069, 63909, 20597,
-31955, 54930, 5444, 39778, 22181, 53200, 9799, 32535, 61046, 15188, 44107,
-29497, 6785, 64554, 35767, 13059, 47598, 24594, 55369, 4109, 40241, 24347,
-60722, 11367, 38883, 19468, 51712, 28894, 8027, 61793, 36839, 19888, 45851,
- 5880, 55234, 26516, 39490, 12179, 58584, 23021, 48232, 3266, 41194, 26170,
-56909, 12196, 40505, 24136, 62385, 6258, 39108, 21284, 53612, 11322, 34085,
-56459, 19551, 45369, 4227, 33406, 64918, 18930, 48417, 11829, 38530, 21982,
-57753, 8564, 31498, 46980, 17981, 59601, 1708, 29329, 44232, 16834, 55030,
-28395, 3491, 62020, 35805, 17938, 50176, 12953, 35128, 65111, 7652, 42540,
-24258, 53186, 12601, 40962, 22854, 63175, 3478, 37357, 52296, 15168, 31186,
-44503, 1443, 59549, 25448, 39137, 11583, 56392, 24800, 41350, 2919, 52776,
-17338, 31882, 63091, 9203, 43986, 27461, 16587, 57174, 36695, 5854, 50838,
-27385, 17059, 63810, 37280, 3398, 46635, 24492, 59760, 10171, 39447, 22202,
-54924, 13505, 48031, 31582, 6850, 58291, 36855, 13492, 54006, 24158, 46426,
- 8373, 34369, 62649, 16520, 45713, 27556, 1241, 53798, 35117, 16041, 61040,
-28849, 10100, 49397, 36456, 17373, 55211, 127, 41950, 27200, 62579, 13694,
-48785, 25197, 39228, 2297, 63632, 17799, 35608, 50488, 8338, 29702, 62131,
-19239, 43002, 5012, 54002, 21287, 33610, 63898, 8390, 46068, 20751, 32470,
-56466, 4478, 41138, 25042, 54287, 14687, 31141, 64431, 1210, 45772, 29048,
-15871, 53886, 35866, 10697, 60240, 17851, 29500, 45160, 655, 63159, 28363,
-15220, 52838, 37918, 8458, 46679, 25027, 55326, 12401, 41575, 23303, 58311,
- 307, 33293, 52594, 20250, 47325, 5058, 31957, 61683, 20246, 48742, 7908,
-41434, 26582, 65193, 11279, 39360, 23216, 48282, 6146, 57928, 26131, 40755,
-11187, 52328, 19829, 31547, 64829, 1960, 41403, 23214, 55280, 9382, 32659,
-47428, 14709, 62530, 25339, 38568, 690, 50554, 20010, 32437, 64003, 11780,
-42903, 23014, 49588, 7997, 32263, 57279, 17868, 39848, 4660, 61310, 25057,
-39188, 10077, 55690, 21358, 42624, 4245, 48960, 25702, 60219, 13434, 39575,
-22527, 51515, 1558, 31755, 62489, 16205, 44490, 28305, 6253, 53604, 35483,
-19630, 65426, 11760, 47935, 27054, 40887, 2570, 49349, 22728, 63748, 59180,
-36490, 17819, 50479, 9285, 31816, 63218, 14779, 46139, 27522, 6803, 55174,
-37654, 13687, 48091, 23413, 64897, 851, 38616, 27232, 52900, 10561, 34996,
-58897, 19636, 44355, 3301, 35534, 55370, 14900, 29463, 47050, 366, 63058,
-24747, 39679, 9955, 54207, 23968, 42884, 13652, 57758, 29962, 2549, 50303,
-35302, 18287, 65157, 7521, 48844, 27203, 38591, 11847, 61742, 25953, 41570,
- 2253, 56345, 21579, 47933, 12630, 32048, 64053, 3644, 44897, 27294, 16412,
-53156, 35470, 607, 62929, 24114, 45115, 13627, 35978, 54308, 8543, 30738,
-63758, 20913, 44778, 2276, 40681, 26183, 56943, 13769, 38482, 22281, 48682,
- 897, 55659, 26695, 39381, 9234, 61153, 20279, 47542, 30883, 7503, 53365,
-37777, 20394, 56873, 3890, 34365, 50935, 14539, 42209, 24120, 58804, 1596,
-39837, 26644, 52004, 10293, 34180, 57186, 13568, 47761, 25228, 39501, 5044,
-59290, 22159, 43788, 12395, 54662, 24817, 38974, 7278, 64334, 18791, 48173,
-29630, 5576, 52601, 37909, 16128, 58796, 27965, 4708, 49581, 36509, 17029,
-59520, 29610, 9859, 53782, 38061, 16900, 31132, 47990, 3444, 62497, 22167,
-40740, 14759, 51599, 28949, 6999, 58714, 37298, 16963, 50168, 27636, 859,
-62094, 35942, 20302, 51024, 8531, 33591, 54838, 15453, 46838, 29110, 1580,
-59551, 36823, 16489, 51018, 27949, 3579, 61000, 36686, 18231, 47312, 10584,
-56709, 26632, 40161, 7436, 49146, 22846, 62611, 10461, 32465, 43902, 17811,
-51535, 970, 34751, 58971, 17419, 41989, 11461, 48315, 26249, 57791, 2694,
-39617, 22895, 49131, 12071, 54427, 25934, 40673, 1364, 60238, 21968, 45788,
-14390, 35350, 53114, 6937, 31124, 63807, 17074, 42441, 2312, 54719, 25660,
-40834, 10907, 58046, 33999, 17675, 50182, 254, 32312, 65145, 15165, 45184,
-28054, 8940, 55009, 36285, 19698, 50616, 1361, 34270, 60278, 15625, 46309,
-24754, 41913, 5316, 58828, 29429, 15839, 49824, 37083, 7991, 60211, 23372,
-42026, 2591, 48930, 26407, 62911, 6935, 39305, 21592, 51368, 12452, 31485,
-64667, 6308, 48865, 24385, 39531, 10855, 53013, 20173, 31625, 56077, 4211,
-46885, 28140, 16014, 59111, 38003, 103, 32748, 55242, 14349, 45506, 27537,
- 8580, 61815, 35194, 20492, 53534, 12744, 34511, 48686, 6703, 64114, 20924,
-34172, 46078, 10300, 59000, 19529, 34058, 44937, 4159, 53260, 29425, 14306,
-61599, 37899, 1211, 49313, 29565, 14229, 55924, 35792, 8510, 50790, 28642,
-16543, 61173, 36431, 19, 45518, 24156, 64247, 11657, 40025, 21474, 52862,
- 1873, 30562, 61145, 14465, 44132, 28827, 4318, 57607, 36712, 19985, 51086,
- 9339, 42486, 22872, 64102, 6423, 33085, 51944, 19436, 42833, 10754, 59238,
-25954, 39633, 4493, 54410, 22391, 46875, 10205, 30688, 60389, 13806, 43418,
-24605, 55569, 579, 36236, 49673, 15680, 29766, 58978, 10034, 40735, 25714,
-51073, 1637, 30168, 61674, 13206, 43367, 22113, 51030, 7058, 34598, 57441,
-12928, 48059, 23746, 40947, 3026, 62105, 20973, 33650, 47140, 7342, 56364,
-20235, 35104, 44102, 11759, 59267, 29413, 2176, 50184, 34825, 18037, 61196,
- 5625, 45341, 34877, 17391, 64305, 10158, 44405, 28763, 14891, 57075, 37822,
- 3230, 44455, 23690, 59615, 13198, 34182, 53208, 828, 42666, 21824, 53997,
-14314, 35755, 62778, 3375, 29257, 50249, 13335, 43233, 24733, 58210, 8143,
-30070, 45081, 19442, 59664, 6018, 41239, 26777, 55036, 10525, 43855, 17692,
-57593, 30336, 5440, 51111, 37001, 18628, 63188, 1201, 42550, 26337, 53991,
-14479, 35289, 49931, 6832, 30950, 65058, 18544, 47378, 11603, 39688, 26949,
-63347, 5148, 46986, 17609, 33699, 56593, 8857, 42656, 22463, 59741, 13023,
-31830, 50528, 1036, 42711, 22890, 58289, 8792, 32873, 54362, 15939, 45098,
-28434, 4048, 13521, 42199, 25000, 61298, 616, 40221, 22441, 51833, 10866,
-36096, 62276, 16104, 31312, 45889, 4554, 57304, 24383, 41568, 12281, 49104,
-22217, 62803, 5815, 31335, 46237, 12634, 60492, 25572, 39989, 8035, 54264,
-22026, 38355, 13345, 59005, 26841, 43978, 6128, 50890, 18723, 34067, 63976,
- 8491, 42267, 24178, 54202, 11089, 38844, 23782, 57491, 45, 43276, 21324,
-50911, 6378, 33178, 60236, 15381, 43843, 27531, 8714, 53969, 36333, 14617,
-57307, 27501, 6838, 49062, 37838, 19996, 60026, 10909, 42918, 22701, 50376,
- 3013, 32395, 58082, 18822, 46961, 7010, 32693, 61589, 12467, 49374, 24552,
-41840, 5130, 64232, 19365, 35876, 53809, 12060, 31513, 50603, 17575, 43110,
- 4692, 65502, 28549, 15038, 49346, 35494, 9384, 62187, 19023, 31603, 46545,
- 5458, 60677, 35089, 13776, 45302, 22044, 55542, 3115, 41118, 23905, 62902,
- 8747, 33800, 53438, 15538, 46770, 29385, 3435, 60568, 35574, 14187, 46911,
-25726, 56419, 2030, 32913, 44247, 14827, 61736, 27423, 8178, 37438, 55576,
-14213, 46553, 27857, 1304, 64486, 35750, 15773, 49678, 28338, 7198, 60909,
-35338, 12515, 55165, 24538, 44578, 1706, 33820, 48389, 15471, 65037, 28646,
- 8159, 38193, 55934, 14542, 29720, 44522, 4297, 60653, 24778, 40671, 10835,
-56321, 20464, 31600, 44706, 6688, 62018, 20126, 30873, 44555, 11418, 55264,
-24531, 40480, 4644, 64189, 17645, 44727, 30007, 1958, 53949, 36504, 20501,
-60133, 6619, 30247, 46577, 13630, 65318, 25225, 39043, 5813, 51501, 19895,
-36424, 62046, 9180, 30183, 46079, 19673, 64111, 4358, 32721, 44634, 19003,
-57285, 9931, 38452, 27255, 48770, 5296, 58534, 20309, 33532, 44824, 9415,
-50492, 19130, 32137, 59618, 3982, 42288, 24146, 48909, 12608, 61233, 22579,
-39759, 4607, 52382, 29514, 16057, 59268, 38175, 7391, 29050, 64678, 14273,
-47581, 28004, 3497, 52017, 35522, 13272, 63268, 23261, 45103, 1540, 35056,
-54161, 14723, 29706, 57171, 10018, 41324, 24139, 53268, 14852, 34591, 61056,
- 4588, 46275, 24833, 40498, 13684, 57937, 23128, 46809, 922, 36532, 63593,
-14788, 28999, 44297, 7190, 60167, 24558, 41747, 11194, 52709, 20144, 30689,
-60750, 5777, 47262, 17585, 37826, 56581, 2059, 28254, 45548, 18715, 59714,
- 4737, 31434, 44242, 16151, 54970, 27505, 365, 50345, 36969, 15827, 65166,
-28184, 6917, 49551, 35301, 20115, 58709, 11813, 46220, 25189, 40886, 2742,
-64694, 19687, 32618, 47490, 6535, 56591, 27639, 15498, 38087, 50571, 5470,
-30675, 57756, 15271, 42383, 25809, 51619, 7827, 34958, 65119, 17570, 48519,
-11608, 39592, 26666, 54282, 3377, 34265, 58370, 15103, 45793, 28032, 1950,
-53622, 35282, 16404, 64762, 29522, 9147, 49728, 36862, 19957, 58711, 4063,
-41982, 26239, 54100, 7361, 39433, 21746, 65283, 12349, 41839, 23270, 52325,
- 4024, 34350, 63139, 17820, 47781, 11113, 40579, 26959, 53852, 3332, 31719,
-60539, 15408, 44931, 27919, 8109, 58864, 37089, 18495, 50816, 5848, 40082,
-27168, 64159, 14208, 32010, 53454, 4396, 46001, 27353, 16502, 62731, 37712,
- 9230, 53148, 24418, 42050, 13755, 58084, 30032, 2751, 51235, 37104, 19390,
-55049, 7448, 35864, 50153, 15968, 28769, 63710, 5783, 45969, 28388, 15311,
-51334, 37510, 4794, 57124, 24574, 45587, 10811, 34382, 61796, 19309, 47326,
- 5004, 36549, 56742, 15787, 33333, 47894, 1444, 64360, 22375, 39427, 13756,
-51485, 28867, 2695, 61008, 35914, 20365, 47626, 7734, 54721, 27226, 38837,
-12311, 61755, 22291, 43772, 3111, 55451, 26186, 40545, 13469, 58899, 29660,
- 626, 51146, 35915, 20650, 55342, 8128, 37880, 49851, 15494, 29171, 64594,
- 3608, 36200, 47394, 19016, 54908, 9804, 40561, 26274, 62859, 4511, 38665,
-21885, 50913, 9695, 34319, 56855, 52506, 5314, 46860, 17390, 35736, 54028,
- 7687, 29552, 59874, 19211, 43116, 1901, 53724, 26088, 39054, 10147, 60776,
-17907, 44711, 31619, 2683, 51819, 36912, 15196, 56887, 23704, 43970, 1158,
-32670, 64368, 19230, 49091, 4122, 41235, 23381, 53531, 12485, 37092, 61167,
- 1545, 28777, 47661, 20600, 56050, 4618, 41149, 22319, 62496, 12877, 43828,
-26145, 52047, 8934, 36672, 63812, 16793, 30395, 46805, 4292, 52276, 29049,
-16795, 59315, 37928, 1495, 50192, 28477, 15328, 64318, 31727, 4395, 53549,
-37930, 14875, 29168, 55962, 7825, 41880, 24704, 60482, 11501, 39156, 21660,
-52993, 1605, 36313, 59766, 15412, 29865, 46745, 8336, 56467, 24424, 40539,
- 2073, 60220, 21188, 34787, 53552, 11220, 42146, 24702, 58113, 18, 39735,
-22359, 54541, 10747, 30089, 48414, 17631, 64103, 6920, 38403, 26997, 51466,
-11651, 32274, 58563, 19714, 45625, 918, 40379, 26143, 65306, 11174, 39663,
-23651, 55077, 6781, 41846, 21517, 63179, 10771, 37305, 50108, 16936, 30011,
-59840, 3587, 42498, 24361, 53216, 11422, 40885, 21753, 58008, 4932, 40703,
-25565, 50660, 14427, 36810, 59255, 5988, 29677, 48936, 18426, 60424, 11424,
-39164, 23028, 54357, 4935, 33697, 47332, 18504, 62827, 9554, 32233, 45645,
-18089, 52785, 2948, 33194, 63370, 13338, 47849, 24043, 40839, 1084, 57914,
-17119, 35259, 52801, 9616, 31256, 48477, 20593, 59483, 5955, 33134, 47224,
-17003, 57248, 9629, 33344, 44389, 18894, 53007, 3955, 32179, 56411, 14923,
-44427, 28191, 1636, 55243, 35157, 17277, 50323, 6566, 34881, 53180, 17211,
-39937, 11180, 61297, 26459, 49219, 3182, 40679, 22979, 65504, 13839, 48008,
-29567, 906, 53892, 36388, 17309, 63108, 10166, 47685, 27245, 38305, 5912,
-55848, 21555, 43402, 9995, 63488, 35022, 18936, 50985, 2525, 43170, 25927,
-57679, 9659, 33388, 53845, 15312, 43302, 24028, 56866, 6961, 40048, 21182,
-61015, 12084, 41868, 25772, 51192, 5588, 33598, 65222, 19483, 46413, 199,
-32784, 56400, 13019, 42611, 23343, 52761, 3281, 34349, 60203, 18770, 42769,
-10319, 52436, 20894, 34236, 56399, 4970, 48167, 30232, 15667, 62748, 37187,
- 2595, 50719, 24155, 42240, 10065, 64555, 19456, 36740, 50060, 7811, 30269,
-62117, 14211, 47932, 28038, 8845, 57330, 37968, 14810, 29127, 60758, 5926,
-34546, 45661, 20203, 54934, 10950, 40767, 25654, 62068, 3639, 36723, 51818,
-13890, 31654, 55423, 8187, 44123, 27947, 11888, 62310, 37573, 19367, 53155,
- 3214, 43567, 26605, 63392, 10762, 38397, 22431, 48367, 5072, 59665, 19317,
-32640, 46055, 446, 56058, 23391, 41692, 9766, 62975, 29602, 16771, 49923,
-37274, 5907, 60484, 22416, 44865, 8167, 32493, 57093, 18521, 42696, 1177,
-53101, 29711, 16325, 61562, 36207, 10769, 47758, 23582, 56535, 2557, 32956,
-46213, 18646, 61003, 9418, 30835, 45292, 20400, 57577, 6103, 38471, 23375,
-62394, 12397, 48898, 25948, 39607, 65, 65131, 20432, 35081, 51930, 11188,
-30629, 55640, 17178, 43041, 1571, 60834, 23575, 39666, 12760, 51226, 28976,
- 6617, 57112, 36572, 19781, 49353, 756, 32775, 64979, 19449, 47541, 8262,
-40242, 26563, 62241, 11772, 39390, 24327, 60079, 1318, 48312, 19068, 37828,
-54301, 10514, 30043, 63067, 18021, 44379, 8623, 31629, 60475, 17634, 42221,
- 438, 54900, 26473, 40179, 13877, 51308, 28733, 7741, 61306, 37935, 16544,
-29137, 53882, 4518, 43448, 24051, 58101, 9895, 33420, 45583, 13895, 65245,
-24103, 40931, 3976, 52038, 19093, 32556, 58349, 9908, 45730, 17848, 35971,
-53476, 6222, 31948, 62184, 18056, 45304, 10221, 38895, 26380, 59501, 2225,
-34542, 53215, 16886, 45697, 28033, 5734, 60991, 32023, 16344, 50965, 36095,
-11394, 55955, 24638, 43369, 2063, 64092, 20392, 30919, 58557, 11359, 43084,
-23351, 65201, 2812, 33670, 50854, 13024, 40100, 23316, 58185, 8886, 33308,
-47776, 19505, 64550, 4874, 38841, 26303, 54847, 13164, 48464, 29309, 7344,
-61904, 36000, 17535, 47329, 10970, 54828, 27150, 38820, 5781, 62648, 24997,
-43697, 10893, 51512, 17987, 31705, 59577, 7785, 44368, 27749, 15970, 53442,
-37906, 3851, 31790, 58648, 15714, 46906, 27703, 2730, 54654, 34997, 13741,
-60673, 24229, 45235, 9058, 34015, 48436, 20017, 61271, 6442, 35153, 45362,
-21044, 57565, 11987, 40009, 23039, 51262, 237, 32985, 65029, 15785, 45641,
-28909, 4959, 50781, 35334, 13650, 57986, 24153, 44421, 6793, 33316, 49085,
-19855, 62939, 10035, 33156, 45242, 18901, 51746, 3722, 31926, 63757, 18244,
-45268, 7878, 32455, 55982, 14209, 42290, 24720, 59219, 1891, 32613, 53358,
-19590, 42991, 4924, 62248, 29078, 15940, 49643, 36420, 7833, 56115, 22066,
-47231, 14793, 33311, 59482, 4597, 45535, 27706, 16435, 53477, 35044, 183,
-57340, 24715, 44956, 9034, 33495, 65067, 16360, 47368, 28437, 6910, 54584,
-35176, 13453, 63670, 23741, 43726, 570, 53541, 19338, 32900, 56968, 9283,
-45804, 25412, 41203, 2624, 64131, 24543, 48895, 12509, 39463, 21812, 58260,
- 38, 38341, 27210, 49126, 11976, 59128, 21851, 41875, 5433, 52069, 34899,
-15631, 65519, 28267, 7658, 50160, 37058, 18578, 60826, 2506, 42562, 25484,
-54818, 11876, 39978, 20989, 62202, 28717, 416, 50000, 35633, 20750, 63337,
-11610, 34914, 47913, 18338, 60719, 8000, 40849, 25623, 57587, 12578, 43848,
-22731, 62600, 72, 31846, 48052, 19672, 56150, 8823, 33776, 44414, 18488,
-55188, 7304, 39521, 25115, 60376, 11782, 43113, 21733, 56413, 2790, 33328,
-52994, 18735, 41834, 13818, 60171, 33704, 1247, 45229, 25271, 54864, 11470,
-38672, 21136, 61586, 5151, 34871, 50284, 18587, 39836, 664, 63846, 26966,
-38781, 10892, 55064, 22219, 47522, 3171, 36117, 58325, 15469, 29923, 52892,
- 8850, 44182, 27658, 16494, 62069, 38113, 7339, 30437, 48351, 17084, 64244,
- 8734, 39138, 27060, 50655, 1643, 32572, 62341, 14098, 43889, 27332, 7837,
-54260, 34811, 19141, 58440, 11881, 43737, 27039, 51684, 3801, 33589, 57807,
-15587, 44165, 27431, 1034, 54195, 38144, 16877, 29669, 64375, 3117, 43596,
-23751, 52458, 12931, 38918, 22204, 63233, 1531, 37297, 50113, 14973, 28764,
-57399, 7275, 44125, 27365, 16945, 60850, 36536, 688, 51344, 23263, 46088,
-14381, 32074, 60136, 9642, 41111, 21645, 56858, 1406, 32119, 52692, 13709,
-43319, 25241, 61902, 6686, 39092, 22018, 51495, 13901, 31925, 59442, 2644,
-43422, 23114, 55469, 10414, 32243, 47976, 14037, 63487, 25064, 38696, 5000,
-49115, 21794, 62369, 12939, 31930, 45395, 3495, 51274, 18939, 31116, 64257,
- 8487, 42517, 24932, 51733, 14585, 34746, 59153, 1017, 42793, 25518, 50683,
-14811, 33516, 55021, 3703, 44527, 30717, 17583, 56606, 9621, 49221, 27164,
-41711, 2905, 59820, 19150, 36376, 50121, 9915, 29790, 56556, 18923, 43653,
- 3680, 63513, 31381, 15825, 52315, 35171, 9858, 59902, 24939, 44353, 6002,
-31489, 56744, 14556, 43469, 21652, 50723, 4352, 31144, 58535, 14729, 43757,
-27875, 6811, 56918, 35316, 20521, 49792, 2041, 34504, 59017, 21047, 48369,
- 7160, 38648, 22764, 63880, 10406, 32354, 48396, 18668, 56425, 2831, 42353,
-26608, 58956, 10797, 48880, 19121, 36103, 62871, 6593, 29862, 50857, 19122,
-42357, 185, 56507, 29129, 16081, 50091, 36175, 8168, 60042, 24736, 48056,
- 1735, 38985, 21674, 63577, 11903, 48896, 25562, 40507, 3810, 56762, 21941,
-48842, 12762, 41698, 27008, 61645, 7079, 33174, 51630, 13400, 42101, 23615,
-58660, 24, 46643, 28927, 14992, 61609, 37330, 7430, 49777, 18759, 33268,
-14835, 56501, 38185, 8829, 30575, 54402, 19607, 43669, 6124, 62075, 30297,
-15473, 49625, 36944, 238, 56174, 22502, 45308, 14301, 33561, 59756, 6447,
-46867, 27836, 16419, 57887, 37801, 3562, 50959, 21038, 31242, 60112, 9605,
-45951, 19981, 30687, 57108, 2902, 41037, 23547, 65481, 13290, 35149, 46970,
- 952, 55519, 25804, 40426, 13803, 64445, 28906, 7806, 50224, 37532, 18797,
-61974, 10657, 42917, 22976, 50633, 762, 32356, 65255, 12976, 42234, 24048,
-54841, 3513, 31160, 47878, 17240, 63252, 9122, 42058, 25316, 47432, 6445,
-56498, 24090, 40309, 10701, 61935, 17937, 30558, 51991, 3743, 34754, 64344,
-18433, 42227, 705, 53128, 28453, 15638, 60980, 37372, 5567, 49785, 27607,
-16559, 59271, 37348, 10061, 52330, 22156, 47369, 3388, 34334, 65159, 15920,
-46207, 28461, 8225, 51091, 36368, 13585, 56463, 24652, 42287, 3605, 61361,
-28579, 13783, 51317, 38158, 2338, 30295, 63929, 16163, 48333, 28873, 7569,
-51081, 36795, 19050, 62575, 12304, 47763, 23090, 40250, 2180, 56651, 30299,
-15161, 49991, 37192, 3324, 61423, 25294, 40113, 12130, 51610, 21566, 39408,
- 4082, 62627, 35012, 17442, 50507, 10628, 34207, 55841, 20777, 44743, 7145,
-32911, 61990, 13685, 48601, 22930, 41429, 6452, 55828, 25470, 38959, 10559,
-60299, 19506, 30411, 46386, 3718, 56293, 22950, 39883, 12357, 54148, 26848,
-39020, 8821, 64703, 17206, 46282, 31111, 4095, 52501, 37054, 17402, 56489,
- 9136, 42500, 26204, 59305, 2944, 30853, 52068, 20425, 43232, 5329, 64817,
-27137, 38334, 9489, 54094, 17917, 34032, 46148, 4627, 59367, 24297, 39195,
-14286, 62885, 29586, 1890, 51986, 35270, 14249, 47367, 26469, 64274, 6438,
-39214, 23108, 50435, 12958, 30860, 62532, 7948, 47410, 28951, 17086, 53318,
-36301, 6640, 64517, 24197, 47840, 12825, 41681, 26433, 60433, 5993, 32175,
-52522, 16124, 44692, 28514, 8676, 62225, 37279, 17134, 49934, 28262, 6549,
-63070, 37734, 13136, 45802, 22886, 59230, 2170, 34091, 52350, 20098, 43129,
- 5408, 54165, 21406, 31696, 56995, 11605, 45009, 17772, 30301, 58722, 4277,
-36013, 51637, 16315, 45462, 28265, 474, 65333, 37952, 14829, 31436, 55605,
- 7204, 43467, 23224, 63540, 10904, 31739, 48514, 19801, 60518, 6538, 33995,
-46431, 20988, 55151, 9438, 40135, 27229, 58894, 4619, 31024, 54211, 17905,
-46486, 9391, 31630, 64080, 15917, 45538, 28651, 4961, 54071, 38093, 15417,
-30603, 65447, 7953, 43667, 22168, 56086, 4670, 33724, 51173, 14962, 42554,
-25376, 64461, 4121, 39935, 22995, 53536, 12783, 31961, 58139, 8690, 46350,
-27825, 16403, 38071, 64923, 4781, 30273, 51357, 19999, 41946, 724, 58490,
-26642, 46144, 9364, 32921, 55546, 14614, 41456, 24039, 60200, 6757, 40419,
-22711, 53593, 13427, 35455, 59783, 5521, 30251, 47796, 12614, 55337, 23621,
-40245, 7150, 63315, 22655, 39413, 11691, 60005, 20738, 32888, 47407, 5551,
-62908, 23049, 38787, 12588, 46780, 25221, 64622, 4661, 40775, 24786, 53853,
- 8158, 38575, 22221, 58607, 13006, 48039, 26729, 40896, 1827, 55113, 22119,
-40324, 12348, 61759, 25976, 48386, 2473, 39768, 22896, 63376, 12444, 34261,
-53392, 8732, 44580, 27326, 16349, 64652, 37628, 4011, 50908, 27600, 15369,
-55491, 36329, 5587, 46515, 26265, 59866, 13172, 41436, 24557, 54288, 4385,
-39813, 23679, 64957, 12275, 38995, 22611, 53176, 1877, 32302, 46957, 17208,
-55322, 9479, 40344, 26421, 63719, 14901, 34300, 47156, 4401, 61528, 22474,
-41666, 9494, 56407, 26943, 41430, 14059, 52400, 29227, 5601, 60719, 36608,
-13963, 47978, 24765, 64172, 1320, 39401, 21283, 54064, 11027, 38531, 26884,
-64981, 3352, 38457, 19532, 55128, 30084, 8669, 50359, 35258, 20808, 59990,
- 3858, 44500, 28299, 914, 33756, 62953, 16481, 47270, 27860, 4073, 60195,
-36447, 17715, 52334, 10710, 42901, 26795, 63701, 7541, 30339, 53257, 12188,
-40283, 23941, 63086, 1831, 39873, 21596, 53195, 11700, 34362, 64807, 18033,
-44008, 485, 35031, 56439, 17039, 48732, 7396, 36726, 54810, 15127, 28633,
-48772, 6407, 61338, 32671, 19225, 45475, 9677, 56982, 20703, 32105, 44532,
- 1847, 55315, 24712, 40069, 5693, 57172, 21203, 38743, 14423, 52839, 29940,
- 7207, 58071, 37534, 18325, 44622, 9738, 59829, 26872, 38931, 1870, 52774,
-30690, 13411, 61094, 35831, 19606, 49592, 2371, 34088, 55028, 20987, 42771,
- 8090, 57280, 26097, 39229, 11171, 51568, 17175, 30848, 57763, 8597, 44171,
-28311, 14342, 55357, 36408, 1292, 44736, 25478, 62816, 13631, 31825, 44099,
- 7325, 57352, 24456, 39870, 11092, 54346, 22819, 39380, 479, 63334, 19159,
-47493, 32550, 9760, 53710, 36897, 20164, 58453, 6268, 43353, 25375, 55436,
-11269, 41090, 22629, 60288, 4241, 38960, 21258, 54743, 9689, 38382, 27002,
-60649, 6293, 32866, 51669, 20075, 42429, 10821, 58997, 27135, 46839, 5360,
-32262, 55804, 13320, 42405, 24200, 60125, 5752, 30600, 46503, 19415, 65229,
- 1108, 31060, 52281, 17922, 42495, 4009, 59475, 26244, 39134, 14800, 51302,
-30003, 1529, 63732, 35615, 17371, 49990, 8683, 33182, 62240, 15123, 44665,
-29365, 709, 60246, 34981, 19222, 50900, 6842, 34700, 57866, 19119, 42691,
-10273, 63692, 23352, 38716, 4770, 50386, 34720, 17303, 55837, 10336, 37864,
-49892, 15546, 30079, 56554, 2434, 43605, 23489, 61573, 12902, 39749, 26343,
-48580, 7016, 56803, 18012, 34239, 46680, 10469, 58323, 23922, 38706, 3530,
-54899, 20982, 38299, 11011, 59363, 26465, 45771, 525, 37337, 56509, 15980,
-27533, 50169, 3740, 37988, 58772, 14678, 29121, 44694, 2161, 55896, 21514,
-38645, 11084, 57515, 22421, 48325, 2917, 33794, 59048, 14334, 46265, 27327,
- 1130, 56561, 35054, 15918, 53508, 27967, 4404, 49424, 35886, 15886, 64498,
-28620, 10802, 49821, 36478, 18016, 61231, 2826, 33857, 47869, 20591, 63991,
- 9787, 40182, 26126, 54612, 6841, 32714, 48429, 20386, 61016, 11377, 41455,
-25987, 53138, 3256, 39445, 21732, 59085, 13414, 34574, 53800, 5159, 43819,
-27682, 16389, 57023, 38096, 2302, 31950, 62757, 17862, 48801, 11917, 42372,
-25230, 51162, 6588, 34306, 59400, 20838, 42788, 1989, 55991, 34691, 20352,
-46634, 11091, 58823, 26077, 40472, 2658, 54786, 25557, 39534, 11984, 62837,
-23323, 49008, 7527, 38621, 21238, 59047, 11894, 43884, 26566, 55282, 1733,
-34596, 48999, 19136, 62115, 6005, 33924, 47344, 18110, 54731, 11457, 38430,
-22635, 61329, 5779, 47730, 28878, 15705, 51765, 37476, 2121, 65474, 25655,
-47577, 12142, 38469, 21216, 57987, 255, 37604, 49946, 16286, 28619, 63944,
- 4305, 44029, 27518, 16684, 51627, 36457, 2236, 57920, 25876, 45981, 10239,
-41135, 17160, 53157, 29824, 1325, 59112, 35414, 17836, 49659, 8948, 32571,
-57192, 15141, 45399, 34531, 425, 62350, 24946, 49079, 7477, 38373, 21413,
-64229, 14692, 47696, 31092, 4202, 53328, 35151, 18369, 60221, 7826, 32394,
-51643, 16959, 45664, 29194, 138, 60986, 35716, 21025, 53682, 9307, 44300,
-19825, 30797, 58147, 11938, 43313, 22148, 64418, 1150, 33675, 52596, 11771,
-45001, 19612, 36222, 57132, 7024, 31311, 45995, 19756, 62071, 9179, 34637,
-44876, 20847, 57008, 3232, 38746, 22648, 58689, 6244, 32187, 53068, 12134,
-44938, 28782, 16802, 55351, 37915, 2924, 30736, 64813, 18995, 46872, 7612,
-32543, 57543, 16857, 45666, 29131, 4948, 55852, 34962, 19002, 46639, 7348,
-60080, 22661, 42011, 12400, 56423, 25456, 48434, 5441, 41569, 17265, 62213,
-31610, 10427, 53730, 37566, 18139, 49236, 14007, 50689, 36593, 8070, 57167,
-23611, 45101, 12448, 40878, 21881, 59232, 1353, 32932, 50513, 14518, 41967,
-22951, 60380, 3927, 34030, 51209, 15882, 44951, 28451, 7851, 58497, 36458,
-19583, 49713, 5401, 29870, 60508, 21267, 45201, 8973, 31305, 63329, 20754,
-44738, 2240, 33195, 58940, 16464, 44016, 27392, 4930, 53211, 35392, 15315,
-62307, 28082, 7151, 49763, 36476, 17650, 63313, 12023, 43796, 27279, 60019,
- 3922, 34415, 46621, 16275, 51457, 27402, 2900, 61853, 34874, 19952, 48482,
-11456, 57207, 22332, 41595, 5626, 51738, 29011, 16168, 63546, 37794, 9119,
-49199, 27613, 16116, 59578, 36801, 5182, 49583, 20925, 33900, 64965, 2698,
-45573, 35665, 20282, 61993, 4617, 32756, 47793, 19613, 58736, 10823, 39300,
-23271, 53001, 2308, 30148, 61697, 17967, 46750, 5069, 33668, 60075, 14530,
-43534, 25348, 55845, 4475, 30223, 45367, 16342, 64782, 27779, 8525, 50148,
-35150, 17919, 61092, 1154, 33305, 52620, 13930, 42078, 25187, 57652, 2992,
-48808, 22214, 41389, 12736, 64661, 26209, 39028, 968, 53080, 17810, 32936,
-64060, 9681, 43335, 23234, 52192, 1833, 34678, 57827, 16904, 44012, 27545,
- 7861, 55292, 37447, 16232, 50011, 28605, 9641, 61006, 35704, 19831, 54058,
- 6080, 34785, 46832, 18730, 57571, 11552, 40515, 23563, 47814, 2792, 54801,
-26344, 40692, 11668, 58469, 21922, 48253, 4691, 41539, 26031, 62915, 13312,
-30525, 48215, 1772, 54763, 25744, 40904, 11849, 60037, 20861, 46918, 29193,
- 1037, 64067, 36466, 20956, 46786, 6240, 60574, 26094, 39833, 10222, 52411,
-18724, 36132, 63482, 786, 29975, 51002, 20354, 40918, 5682, 65016, 22372,
-40779, 12169, 48993, 26990, 61949, 5392, 40795, 21991, 51760, 13898, 32057,
-63948, 6980, 44636, 28458, 16993, 60961, 37326, 8482, 53626, 23376, 41973,
-12380, 48155, 26197, 65329, 7194, 40431, 25892, 54371, 13327, 30342, 44202,
- 5050, 64137, 29142, 16839, 50565, 36655, 7654, 61694, 23946, 42744, 9890,
-57079, 21519, 40260, 767, 58905, 25267, 43674, 8456, 53167, 24569, 39924,
-12749, 59863, 22873, 45923, 1370, 34436, 56233, 15788, 44523, 29169, 5437,
-58077, 35601, 18506, 49891, 9665, 32299, 63056, 17798, 47119, 726, 38645,
-25343, 51796, 14378, 32304, 65093, 7091, 48284, 25337, 41480, 9850, 53906,
-19460, 33090, 61235, 213, 41837, 18399, 53544, 29513, 9818, 61964, 37780,
-16642, 49995, 27980, 5953, 60386, 37071, 17852, 52386, 10145, 34410, 47360,
-17660, 57187, 960, 34496, 45834, 16977, 61568, 29153, 3472, 50050, 36713,
-18165, 60425, 9206, 41246, 26105, 45523, 12412, 56292, 22305, 40611, 2951,
-63127, 26980, 44976, 8783, 35430, 57459, 16726, 31261, 54197, 7071, 42448,
-21874, 56939, 14118, 33404, 53255, 5185, 43215, 25109, 62637, 11357, 33947,
-45720, 19938, 53765, 7579, 34474, 56813, 14234, 46167, 29481, 9029, 64973,
-35465, 19736, 51164, 6239, 34080, 56057, 19680, 42717, 10883, 61519, 26986,
-39591, 3157, 54768, 22715, 47149, 11257, 30262, 60456, 19692, 41937, 9600,
-55448, 26645, 39249, 5863, 59214, 18981, 46022, 28675, 9596, 55949, 37820,
-15339, 49613, 28256, 3517, 65395, 36166, 13731, 48441, 22576, 57603, 6375,
-33751, 46371, 17116, 62501, 2255, 39570, 27074, 54671, 7924, 35739, 49720,
-16416, 29443, 61878, 3682, 46801, 27842, 15308, 60597, 35265, 734, 50536,
-28392, 15270, 54421, 37985, 5117, 30842, 60115, 14563, 49081, 25342, 41776,
-10380, 64272, 21900, 39795, 940, 49053, 25718, 58436, 10053, 40512, 23106,
-51723, 13110, 34215, 60351, 408, 44178, 28133, 15282, 52327, 37802, 11530,
-63088, 25877, 42763, 2522, 52647, 24508, 38244, 10482, 63750, 18229, 34832,
-49394, 1788, 28303, 57996, 20044, 43050, 7109, 64786, 29074, 2530, 53300,
-37795, 16965, 60821, 27369, 3405, 50085, 36901, 18662, 55538, 9917, 43264,
-26340, 65335, 5123, 31179, 53796, 19738, 46611, 10839, 35368, 56697, 20920,
-42479, 3038, 62512, 27098, 38869, 11034, 54077, 17203, 37245, 50389, 4682,
-28644, 58078, 17876, 42024, 12782, 53900, 30449, 8328, 64136, 36848, 20607,
-50961, 186, 42743, 23279, 59331, 11414, 40597, 26756, 54878, 2442, 38301,
-21285, 53488, 9401, 43460, 22796, 63658, 13399, 32528, 54091, 5943, 44019,
-28080, 15194, 64564, 37960, 503, 31468, 55149, 13965, 43635, 24601, 58504,
- 3932, 36751, 50363, 14743, 29727, 62510, 1051, 43665, 23552, 54527, 10672,
-30024, 48062, 17502, 58295, 7840, 40633, 25005, 54212, 12433, 49234, 24321,
-41751, 5994, 64057, 18474, 33642, 50563, 8566, 43641, 23264, 56959, 13296,
-30317, 52239, 7031, 41608, 22350, 62624, 12131, 34669, 52899, 1757, 41159,
-23648, 56871, 11985, 40087, 21741, 47822, 5737, 63801, 26604, 39594, 10179,
-51390, 31184, 15766, 59625, 35959, 7466, 47456, 24364, 54339, 11814, 41516,
-24032, 58375, 6626, 39705, 22109, 50476, 13920, 31597, 63041, 8918, 47075,
-28418, 15253, 61254, 36084, 3564, 48249, 23069, 56912, 12926, 33330, 45003,
- 2004, 64642, 23203, 40395, 14184, 51813, 29299, 5122, 62524, 36365, 19778,
-50281, 8311, 31166, 64464, 18153, 45131, 6063, 35360, 52391, 15688, 31159,
-57476, 7881, 45435, 23874, 41345, 14842, 61134, 29461, 6314, 53937, 36485,
-18092, 49510, 8421, 31559, 58565, 17110, 41287, 11255, 51069, 21340, 31813,
-57439, 3369, 42958, 24707, 50225, 13961, 34414, 60011, 8076, 44250, 28017,
-16311, 53705, 36635, 1449, 60733, 23429, 45117, 14525, 33287, 56336, 3001,
-48337, 25708, 38582, 11901, 57626, 21606, 49235, 1816, 31920, 46454, 15176,
-62980, 29541, 4717, 50750, 36486, 19282, 59713, 122, 33199, 46668, 20537,
-61334, 8327, 35190, 48613, 19921, 55597, 10609, 40768, 25637, 59873, 3039,
-39393, 22106, 51438, 11996, 33058, 55462, 14996, 44704, 29648, 6977, 65449,
-35481, 17256, 48512, 3744, 55331, 21646, 38449, 8106, 63305, 25738, 49124,
-12732, 40312, 22008, 62459, 2296, 43055, 25776, 55038, 7526, 40078, 22189,
-57347, 11278, 43580, 26718, 61474, 3895, 39942, 21321, 54969, 12595, 38740,
-22962, 59871, 4222, 47989, 28580, 15355, 50772, 37879, 7600, 64454, 27477,
-13998, 49373, 36542, 4364, 56882, 22771, 45153, 13656, 32471, 63592, 3782,
-42235, 23841, 53625, 8961, 30429, 64690, 19113, 43974, 11475, 32828, 56552,
- 5746, 42484, 24482, 51844, 13519, 32047, 64034, 164, 48483, 24089, 38776,
- 7692, 58948, 25786, 49617, 13061, 39467, 21865, 49036, 1264, 64207, 25977,
-39878, 11478, 48466, 23016, 62010, 2783, 38910, 26811, 48522, 10423, 55931,
-21914, 41161, 1717, 60691, 28381, 15197, 49366, 37206, 3288, 62179, 27812,
-16532, 50111, 37062, 687, 60427, 28491, 15810, 49454, 36421, 4861, 64393,
-23765, 43748, 14188, 50467, 31076, 7217, 57865, 35757, 17158, 49425, 5100,
-37847, 65305, 15761, 33255, 53056, 2398, 41237, 25322, 51477, 14020, 34476,
-62909, 1004, 42394, 22699, 57625, 10914, 33146, 51878, 19208, 42773, 5425,
-54536, 26994, 41031, 10085, 59481, 18588, 31969, 51892, 4696, 42561, 23980,
-63359, 10220, 40553, 21621, 50827, 13820, 34367, 58342, 5826, 42108, 25436,
-55182, 12107, 40908, 22975, 65290, 7667, 48575, 26028, 40946, 11754, 62469,
-21364, 47637, 2493, 30722, 55715, 14270, 45469, 28251, 7862, 61808, 35236,
-17687, 54439, 3410, 37391, 49445, 16378, 29846, 62550, 9675, 41815, 23448,
-58300, 4307, 32223, 47219, 17633, 59386, 9413, 39911, 27268, 54418, 5972,
-44076, 21515, 60558, 14062, 37787, 50083, 4995, 29344, 55889, 16978, 45490,
-27585, 14693, 63439, 35105, 9056, 54041, 28314, 16039, 49287, 35106, 5661,
-61836, 28058, 15690, 49273, 36564, 8434, 57741, 24785, 41491, 791, 52408,
-17900, 30910, 61139, 8257, 48078, 24599, 41179, 13057, 56218, 24015, 43693,
- 1388, 64698, 20077, 32938, 52694, 10652, 47196, 24906, 39262, 3093, 60010,
-17976, 47574, 29218, 10446, 57415, 36449, 18437, 49489, 6057, 33906, 64892,
-13651, 47479, 24527, 41055, 8202, 59145, 27013, 38625, 1082, 56427, 19609,
-37466, 49844, 7798, 30308, 59014, 18699, 48200, 10173, 40863, 23415, 53327,
- 6616, 33158, 65402, 18964, 45789, 10017, 33621, 55527, 20312, 41189, 7192,
-60824, 34626, 19808, 51271, 5759, 32162, 63414, 14865, 43957, 28116, 274,
-56272, 38032, 16581, 30999, 60135, 3501, 42946, 25233, 55398, 11523, 38699,
-21202, 64649, 992, 35213, 49877, 16677, 32118, 57638, 3811, 42879, 24880,
-50930, 14864, 33273, 62124, 4711, 45212, 29207, 16222, 58712, 37908, 8322,
-30056, 54554, 19910, 43500, 412, 62804, 21079, 33934, 44444, 4656, 61954,
-18618, 35428, 51161, 2607, 30470, 60266, 16010, 47356, 28614, 4154, 54473,
-35479, 20067, 57281, 264, 42291, 25287, 51377, 11009, 34047, 63441, 19922,
-42307, 7100, 51923, 29895, 15819, 55630, 35250, 9150, 45702, 24526, 58907,
- 395, 34094, 43923, 17233, 52521, 10799, 34340, 60038, 20875, 42337, 2106,
-56128, 24980, 48727, 10893, 39115, 21183, 65171, 179, 34001, 51437, 19810,
-45944, 3705, 34002, 62714, 13220, 42581, 24413, 52674, 1980, 34095, 65351,
-19682, 42323, 7539, 54010, 34906, 17549, 62031, 11798, 32186, 47585, 4171,
-56588, 19368, 31290, 45674, 11049, 58139, 25059, 40117, 7644, 52787, 19906,
-31332, 64545, 10386, 42537, 23227, 52258, 6109, 34544, 62290, 17056, 43858,
-27338, 8072, 54280, 37644, 16347, 58348, 27583, 9913, 49332, 37824, 17180,
-56774, 4326, 29825, 52048, 15822, 43822, 28020, 1779, 62813, 34947, 17508,
-47446, 7195, 54943, 37710, 16332, 29031, 63427, 5646, 48143, 34967, 19361,
-57814, 2322, 47310, 26506, 41579, 13294, 61495, 25926, 41368, 10732, 47188,
-23404, 52649, 4796, 32152, 59408, 17226, 46864, 9101, 36963, 52511, 16513,
-29609, 64823, 4709, 44941, 28694, 15891, 53170, 35678, 9907, 56458, 24809,
-46209, 1340, 32914, 62521, 14369, 45356, 29989, 9013, 52992, 35440, 20367,
-58223, 1746, 32717, 45656, 19551, 55212, 10433, 39069, 27063, 60668, 531,
-35901, 50318, 16007, 30909, 58347, 6068, 44748, 27811, 15475, 51642, 37325,
- 1885, 60672, 22613, 47904, 14671, 35950, 53435, 6765, 28832, 56863, 19963,
-44127, 10436, 33073, 61722, 18785, 47719, 4321, 35989, 53975, 15976, 30704,
-56551, 9689, 45279, 19695, 36083, 59650, 5323, 30711, 52640, 20141, 42032,
- 8015, 64645, 30697, 13011, 50430, 35952, 19056, 53116, 6262, 33946, 58749,
-21102, 42296, 10812, 54788, 22952, 40915, 7447, 58266, 24287, 43504, 12465,
-53869, 22080, 41703, 1976, 56438, 27217, 38285, 12145, 62458, 20639, 37220,
-51037, 858, 28814, 59653, 20971, 45710, 8759, 29802, 56212, 12547, 42695,
-22640, 61106, 4950, 32114, 53601, 16224, 45553, 28751, 7009, 63983, 36775,
-14216, 47261, 24208, 61798, 1397, 38386, 22786, 56002, 12341, 35158, 46720,
-20463, 60529, 6740, 38511, 23574, 57559, 381, 32090, 52076, 18528, 43179,
- 9624, 61604, 21774, 38474, 4191, 51234, 30706, 16191, 59070, 35154, 1602,
-45825, 24388, 57288, 9374, 39333, 22334, 52329, 16577, 36636, 59550, 5064,
-31301, 50262, 19437, 43068, 10579, 65520, 27035, 38914, 5884, 52759, 19581,
-34443, 56672, 8480, 45045, 19382, 35400, 55090, 1140, 30281, 48239, 18919,
-65112, 12674, 38669, 26794, 56238, 564, 41148, 23297, 52764, 12410, 32677,
-61752, 6650, 43933, 27297, 30039, 16650, 58293, 37956, 313, 47974, 24357,
-61076, 11796, 42073, 21462, 53532, 2387, 33249, 64014, 18700, 45258, 10247,
-33354, 59817, 15640, 43945, 34936, 6134, 49556, 22394, 63799, 2720, 33012,
-45868, 17751, 58825, 10019, 38792, 26471, 55248, 6501, 43748, 22059, 62429,
-11915, 34214, 52484, 20930, 44370, 4237, 37724, 62833, 14361, 30962, 53175,
- 1647, 42395, 22563, 56084, 14896, 35252, 50800, 4259, 30985, 61409, 17681,
-42509, 10694, 52214, 28925, 14711, 62818, 36032, 3349, 46400, 26215, 61011,
-14296, 36902, 49978, 1566, 29332, 56985, 12925, 42541, 23081, 51609, 3249,
-31684, 59189, 14326, 42176, 25522, 47638, 2031, 56844, 18075, 34702, 46075,
- 8880, 61569, 29422, 15466, 52586, 36153, 6880, 46624, 22848, 53538, 14172,
-32796, 61013, 5306, 42497, 25080, 51450, 14367, 36937, 59705, 8901, 29331,
-48089, 18390, 60688, 7720, 40432, 22680, 55137, 12848, 48705, 25453, 41167,
- 2576, 65456, 22889, 48850, 13303, 36867, 56393, 6944, 30050, 52101, 14898,
-46529, 27877, 9615, 55937, 37377, 13821, 44867, 23485, 65151, 7736, 40422,
-25252, 45987, 10782, 52717, 18203, 36664, 60737, 6524, 29999, 45365, 15998,
-53962, 28012, 2515, 59747, 36649, 18455, 47891, 4654, 58245, 25835, 41222,
-12241, 48888, 21993, 63814, 7770, 32147, 45579, 20162, 55403, 3522, 38742,
-26948, 61867, 13524, 38429, 26685, 53113, 4351, 34104, 59300, 13982, 42658,
-24630, 53343, 6787, 31808, 57168, 16307, 44598, 28169, 7843, 61412, 37481,
-17053, 49627, 4866, 29816, 59886, 15478, 47401, 28617, 473, 52233, 37789,
-20937, 64691, 9468, 42041, 23573, 52930, 2159, 33097, 63120, 15198, 47069,
-28799, 4535, 50390, 36884, 18025, 58609, 289, 32988, 46820, 15389, 53627,
-29202, 3849, 60616, 35228, 14375, 50095, 28532, 1281, 64025, 35409, 20566,
-52210, 7433, 34147, 47277, 21289, 64933, 12952, 34547, 45792, 6114, 58682,
-21112, 32366, 44373, 11270, 52405, 20335, 34048, 60241, 421, 42375, 24386,
-54414, 11352, 39399, 23113, 62502, 8912, 39206, 19053, 56310, 31188, 5891,
-51213, 35110, 20387, 60409, 47, 34049, 44949, 20201, 57166, 10990, 38694,
-22909, 50383, 1236, 32778, 60314, 13190, 48081, 24838, 41672, 2840, 51260,
-18442, 31218, 64196, 7984, 44204, 28045, 16605, 57397, 36892, 5322, 54503,
-24372, 42455, 10554, 62130, 30356, 15081, 51224, 35464, 3379, 65258, 25900,
-43107, 13160, 54177, 21380, 40097, 4828, 62974, 25418, 46212, 14251, 35675,
-54272, 7053, 31140, 62236, 19465, 45925, 10398, 40609, 25715, 58517, 4112,
-46436, 30486, 16071, 65330, 36479, 2374, 52212, 24942, 44024, 13993, 33819,
-61127, 7364, 48694, 23235, 41397, 3282, 63354, 29017, 13080, 49752, 35030,
-17430, 58871, 472, 45017, 28725, 15850, 56875, 37190, 3725, 46134, 23420,
-63779, 8824, 31881, 44790, 17413, 52307, 1565, 33732, 63401, 14142, 47504,
-26112, 39513, 3737, 59981, 21244, 38853, 10553, 63758, 26379, 41543, 5724,
-52309, 18722, 32792, 55577, 10164, 43810, 17923, 35267, 61938, 3356, 49573,
-17404, 31977, 46528, 7296, 58608, 25096, 39694, 11407, 48747, 21972, 55753,
- 2199, 39319, 26669, 58916, 8123, 38861, 21137, 52747, 11356, 43711, 26694,
-64874, 3229, 31087, 48204, 17739, 54795, 8971, 41558, 25741, 48861, 11919,
-64278, 22971, 40279, 2383, 54045, 26938, 43883, 14018, 62720, 28844, 9066,
-53505, 36634, 18915, 49730, 6532, 33500, 64110, 13606, 44035, 27910, 4089,
-53860, 37839, 13106, 61149, 23915, 46418, 1424, 40072, 21651, 58846, 12586,
-48573, 25354, 40265, 2249, 63472, 29399, 15021, 49997, 36808, 10859, 60968,
-24431, 41640, 7038, 52057, 23708, 42618, 11537, 62401, 22176, 47391, 8093,
-30450, 59803, 16599, 35782, 47047, 3758, 50329, 7205, 51873, 36098, 20254,
-56113, 10558, 45876, 26693, 39365, 6504, 58639, 28891, 16371, 52595, 36332,
- 7834, 48258, 24141, 56539, 3796, 29650, 46897, 18961, 61918, 8781, 40229,
-25207, 49004, 12530, 54147, 22166, 41758, 3865, 60751, 31566, 15297, 51095,
-38016, 567, 28507, 57003, 18777, 48049, 8088, 31153, 60774, 16686, 45926,
-27769, 6730, 51318, 35162, 19694, 59897, 8621, 43163, 26045, 64054, 12177,
-39216, 24209, 54520, 2679, 47834, 20117, 33314, 55320, 7291, 42698, 23616,
-58170, 11623, 39733, 21641, 52804, 8694, 34053, 63079, 20354, 47534, 5293,
-40496, 26010, 62368, 11447, 40357, 22244, 54694, 7651, 38398, 27166, 64379,
-12806, 49189, 24014, 39731, 3088, 55550, 23519, 39684, 12030, 65126, 21465,
-38865, 1851, 55733, 26640, 46182, 12066, 39858, 22801, 62300, 2870, 43914,
-21789, 55512, 13752, 33626, 46332, 144, 64285, 25857, 38971, 5374, 52450,
-18445, 32624, 58166, 9360, 44762, 17800, 31968, 61206, 3963, 45721, 28175,
-16848, 58080, 38007, 1935, 31452, 63355, 17974, 49275, 5400, 31283, 47657,
-20020, 57700, 1419, 35849, 50048, 14679, 30157, 63930, 4483, 41724, 23427,
-50883, 9224, 34837, 62109, 13116, 46943, 24465, 40905, 8023, 65435, 29122,
-16391, 50292, 36073, 1411, 53471, 29008, 15600, 59752, 36049, 6699, 50354,
-25175, 43147, 10356, 57178, 22573, 41695, 5812, 64018, 21443, 40882, 12617,
-50895, 28825, 8742, 63122, 37252, 15424, 49259, 27471, 1186, 59280, 36169,
-20733, 49209, 10573, 35046, 56042, 20484, 44287, 6234, 33881, 57796, 12491,
-44214, 27443, 16709, 59402, 35240, 5211, 51452, 26590, 43101, 12680, 55954,
-24481, 39682, 7277, 61363, 19316, 33808, 53824, 9210, 41787, 25120, 63419,
-12212, 39484, 22112, 55470, 7556, 45790, 24963, 41701, 10359, 57170, 18081,
-32959, 46063, 5146, 61579, 29933, 18465, 44301, 2672, 59277, 26520, 40616,
- 9598, 53450, 19051, 37090, 57423, 4145, 28555, 46622, 18557, 64746, 8364,
-31540, 45536, 16602, 51154, 28865, 3474, 59369, 35232, 15314, 49257, 28324,
- 1768, 54011, 36654, 17430, 65027, 9476, 47748, 18689, 36762, 53256, 6162,
-29424, 63568, 14740, 42019, 23880, 54597, 7411, 38913, 21410, 56903, 10638,
-38317, 22592, 61059, 6441, 34526, 53774, 20234, 48506, 11078, 39129, 22489,
-63456, 2478, 32459, 51259, 16179, 46347, 28250, 7400, 58666, 37380, 18758,
-49685, 5359, 40015, 22449, 57520, 9146, 34397, 48494, 12486, 59851, 22272,
-38322, 2583, 48990, 25008, 57692, 9497, 40625, 17543, 51215, 29737, 1124,
-63523, 36525, 15299, 53849, 27481, 7047, 50022, 37786, 18191, 60313, 11902,
-30235, 54239, 771, 45879, 28413, 16897, 57854, 37184, 11086, 53608, 24269,
-43275, 6568, 61753, 19389, 36448, 53375, 8699, 31337, 48074, 13862, 60631,
-24421, 39699, 5699, 55641, 18211, 36042, 50322, 11381, 29628, 61228, 18744,
-44218, 4587, 32151, 57349, 17282, 49178, 9490, 32759, 54906, 14975, 43549,
-25246, 58552, 2735, 35436, 49884, 14932, 30418, 64740, 6539, 47850, 21111,
-32318, 57844, 10748, 43836, 19510, 34292, 48792, 288, 63784, 17857, 34100,
-44052, 8757, 60377, 24144, 41002, 12862, 47876, 22224, 54913, 4215, 41651,
-25457, 59746, 9635, 39906, 21799, 51588, 13473, 33479, 62835, 2674, 44149,
-29196, 16402, 55731, 37925, 5199, 31583, 60087, 18032, 49204, 8172, 34613,
-46087, 17671, 56698, 3298, 40186, 26606, 59895, 14385, 31341, 51590, 84,
-46138, 27300, 16798, 62848, 35281, 8663, 50701, 27717, 16132, 57477, 35435,
- 6449, 53634, 26452, 42800, 11145, 60159, 18957, 37135, 51228, 4990, 28255,
-57369, 19943, 45748, 2769, 31519, 63955, 17415, 39196, 4210, 54950, 32602,
-15019, 50039, 37591, 1607, 56646, 24495, 42362, 13223, 63597, 28279, 54724,
- 2146, 42106, 17623, 65155, 29613, 4055, 49812, 36462, 13451, 62229, 22958,
-46769, 1300, 41077, 26783, 64429, 11387, 38798, 21859, 52778, 14036, 32344,
-58340, 69, 44734, 28103, 16411, 55945, 38049, 5652, 30272, 64968, 19764,
-43358, 9740, 53425, 34597, 21191, 63413, 4862, 37854, 49733, 14797, 28487,
-54718, 2795, 41550, 24561, 65279, 13398, 36908, 49309, 745, 28767, 55579,
-18425, 46511, 6467, 33241, 58188, 14267, 44070, 27349, 5448, 62210, 37039,
-16053, 50641, 27862, 102, 64225, 35118, 17533, 49440, 4284, 30692, 57656,
-16382, 43832, 27616, 9523, 51497, 35538, 18821, 57578, 672, 32475, 50272,
-18788, 42782, 4576, 59894, 20978, 33472, 46544, 10327, 50905, 17432, 32864,
-58829, 5020, 47470, 25683, 41564, 9879, 63055, 18933, 33768, 48722, 6319,
-54605, 26780, 38748, 11676, 59142, 26440, 43515, 7251, 50628, 19519, 36190,
-57290, 10746, 29719, 46988, 20480, 63505, 1316, 39970, 25004, 48558, 11380,
-54249, 21983, 40952, 7999, 60576, 25413, 48131, 13003, 38931, 22248, 54005,
- 6808, 34225, 61826, 15423, 44203, 28307, 8846, 59677, 37720, 20481, 53635,
-11793, 42637, 26259, 55923, 821, 39325, 21897, 58000, 14618, 32139, 52829,
- 3220, 43196, 23603, 57073, 9390, 39985, 21745, 63028, 12770, 33528, 46806,
- 3011, 54935, 23406, 39644, 15001, 61468, 30255, 782, 49952, 35269, 14870,
-55154, 25586, 43689, 2578, 60582, 19195, 35559, 49841, 5264, 30511, 55199,
-18852, 42970, 8536, 64204, 32072, 17308, 51300, 2221, 30252, 62878, 21497,
-46907, 9926, 37617, 55194, 2740, 30869, 47045, 19842, 63771, 10243, 38620,
-22484, 49869, 1114, 33568, 58878, 13385, 42789, 22643, 50867, 2577, 31544,
-56905, 17354, 43148, 4732, 50921, 30856, 16351, 65150, 36496, 2019, 47792,
-22067, 60287, 13267, 38644, 26311, 52682, 6874, 37010, 55296, 15278, 31064,
-48826, 11913, 63626, 22652, 38770, 972, 50718, 30760, 12461, 59115, 35751,
-15627, 49593, 27813, 4787, 61943, 37557, 13048, 53447, 24860, 42343, 7775,
-63767, 20197, 37808, 50158, 12557, 29950, 57533, 3898, 44339, 23989, 39852,
-12019, 61682, 21892, 45619, 1858, 33504, 58774, 13559, 43511, 26623, 52953,
- 3459, 33925, 64604, 14961, 46882, 24453, 40696, 399, 58187, 17617, 33599,
-51783, 4748, 43028, 25604, 59809, 13268, 39652, 22337, 56169, 849, 43542,
-25943, 61324, 9636, 31661, 53419, 14141, 43562, 24776, 63823, 1442, 30682,
-47128, 18928, 55521, 6510, 41359, 27157, 65001, 12367, 38659, 23807, 48196,
- 4487, 59814, 22218, 40150, 9445, 55730, 33705, 13816, 44647, 24988, 57890,
- 2915, 31711, 43859, 20558, 62769, 10033, 40434, 25038, 51408, 5687, 35082,
-64488, 15105, 30135, 49437, 1841, 41036, 24085, 56288, 11920, 40140, 22208,
-65183, 3000, 43348, 26142, 52807, 12883, 29839, 62957, 984, 47343, 23808,
-39402, 6949, 56143, 20791, 34523, 46326, 8371, 65038, 25495, 41522, 169,
-47900, 23831, 61827, 7319, 39951, 21404, 54190, 11540, 43127, 26242, 59229,
- 1418, 34202, 45529, 14333, 54240, 27648, 4361, 62099, 36419, 20706, 50662,
-13165, 30526, 57012, 3894, 47933, 29009, 15503, 65009, 36378, 6489, 50918,
-28356, 16583, 61628, 37966, 611, 31664, 56957, 16579, 45744, 28195, 7327,
-52979, 37361, 19035, 61014, 8575, 47462, 26667, 41738, 12416, 57088, 22553,
-39767, 1022, 64787, 26349, 38772, 12035, 53252, 21807, 43409, 5194, 63309,
-23544, 41510, 12574, 54278, 29090, 6930, 56851, 37528, 20393, 49471, 3350,
-32651, 62322, 14099, 47139, 22336, 38803, 660, 64572, 24060, 43528, 8996,
-55543, 30898, 15699, 49729, 37846, 6663, 59727, 25186, 43420, 10331, 53071,
-19425, 30530, 62012, 5776, 45830, 27826, 16817, 59107, 34713, 8535, 49464,
-20769, 33535, 29238, 9741, 59984, 36725, 14442, 51521, 23430, 43474, 5811,
-56470, 31053, 15326, 50956, 35125, 9060, 60146, 21166, 42283, 3247, 48690,
-26489, 63197, 7289, 35142, 43795, 20009, 60193, 9590, 33712, 52175, 14462,
-46540, 27362, 1764, 57958, 36361, 17318, 50080, 7042, 30897, 59798, 16187,
-46266, 34900, 10744, 62183, 22561, 43334, 5851, 56167, 29562, 16997, 52235,
-37851, 9047, 59679, 22415, 44699, 15309, 30626, 63207, 1933, 48796, 27989,
-16685, 38232, 53049, 7589, 31262, 59672, 20284, 47301, 9340, 41796, 25619,
-54647, 13565, 34605, 64880, 2206, 46677, 29209, 15137, 60908, 37210, 6353,
-53714, 24914, 46175, 10917, 35916, 63888, 15598, 29749, 54072, 1341, 42179,
-24738, 57128, 9371, 39362, 23141, 60868, 14031, 36463, 51126, 555, 29979,
-58108, 17435, 47019, 10485, 41353, 24797, 64846, 2209, 40497, 21461, 53298,
-14236, 31075, 62691, 3336, 44624, 27410, 15559, 55678, 37313, 8454, 51530,
-28635, 15252, 61638, 38127, 4988, 31220, 55301, 20285, 49179, 589, 40753,
-27047, 64825, 12051, 43565, 21511, 50958, 2384, 32398, 56692, 16528, 45307,
-27528, 3286, 62660, 34849, 18768, 49462, 7620, 34313, 64376, 18593, 47928,
-10266, 40420, 26564, 61356, 5888, 32121, 51494, 14393, 43733, 26612, 55856,
- 5266, 39552, 21275, 60960, 14101, 31660, 51541, 7350, 43682, 24228, 64995,
-10974, 40143, 21354, 51705, 6970, 33161, 58310, 16073, 45653, 28108, 9985,
-61510, 36962, 17469, 52476, 4033, 40794, 25800, 58026, 11214, 34283, 49853,
-19233, 41896, 5436, 60515, 29382, 15702, 50847, 36347, 11921, 61668, 24514,
-42813, 3977, 54897, 17463, 36785, 50940, 8810, 29907, 64453, 16099, 46429,
-28287, 6413, 62070, 36737, 19898, 47426, 11077, 59382, 25974, 41187, 7287,
-55131, 24356, 40363, 11480, 48677, 24306, 63211, 598, 40773, 21557, 57628,
-10409, 47594, 25563, 40039, 3438, 60309, 18493, 31906, 46785, 8767, 55869,
-24393, 40484, 2471, 61029, 21524, 46129, 10121, 32878, 56781, 19904, 44633,
- 1193, 35888, 58555, 15630, 31682, 52412, 4975, 45409, 27420, 16392, 61253,
-37513, 7209, 48268, 26100, 56156, 10441, 30304, 47256, 19161, 62801, 5709,
-39404, 22385, 51007, 12302, 30419, 55158, 6878, 42885, 23387, 62054, 13416,
-31122, 45530, 8790, 60670, 23084, 40555, 12160, 55092, 30980, 6284, 49738,
-36056, 19916, 63982, 11425, 41304, 23018, 50327, 3056, 35294, 59503, 16832,
-32838, 49953, 7867, 42188, 25046, 61290, 11693, 38928, 21349, 52383, 333,
-32981, 56935, 15975, 45624, 28150, 8638, 62488, 37560, 18355, 49852, 4943,
-35183, 64745, 17568, 48224, 8135, 34113, 55232, 15343, 46771, 29539, 3673,
-60538, 36975, 19203, 52917, 9054, 42557, 25998, 59522, 13888, 32273, 52227,
- 4738, 47055, 29069, 16433, 57690, 35363, 7136, 49553, 20553, 33329, 59692,
-10032, 42210, 25060, 53548, 13578, 36931, 58873, 2854, 30503, 50702, 18123,
-39303, 11360, 60560, 23020, 38243, 9081, 56680, 27291, 49195, 4643, 33343,
-46420, 19364, 63189, 12372, 39250, 23584, 51379, 7944, 37695, 56118, 15048,
-30761, 46919, 6446, 60513, 25431, 38738, 10540, 55130, 20150, 31985, 45335,
- 1645, 58339, 18406, 30916, 44572, 8546, 53356, 28119, 14665, 64239, 36596,
- 4860, 49775, 20594, 31626, 57675, 1258, 42865, 24196, 63720, 13746, 35702,
-50535, 4018, 30425, 55407, 20057, 45413, 7033, 32418, 61520, 15935, 47720,
-29046, 9565, 58043, 34806, 18563, 50402, 2632, 32348, 65015, 15235, 45118,
-28462, 10256, 53219, 37412, 17956, 56396, 5630, 41856, 27004, 51886, 10392,
-30899, 59140, 14498, 44773, 27414, 1968, 62990, 35308, 20675, 51726, 11817,
-41898, 23259, 58351, 150, 34820, 50413, 20530, 42755, 9829, 64711, 25916,
-40302, 3105, 56980, 18757, 46573, 5381, 63253, 25428, 45379, 628, 31548,
-57881, 18542, 41104, 10856, 61602, 22665, 38877, 4592, 54275, 27276, 38281,
-10696, 57453, 25341, 45092, 13691, 31879, 55476, 2333, 47166, 27359, 16830,
-61636, 37474, 5267, 50428, 28028, 16167, 64235, 38183, 10155, 28668, 45383,
-19859, 56386, 1233, 41047, 25292, 51928, 8891, 35717, 58826, 15306, 31411,
-49798, 2282, 41316, 24642, 64395, 12728, 33631, 51175, 4336, 39638, 23487,
-54157, 9240, 34205, 61230, 12961, 46104, 24138, 40522, 3120, 56204, 18409,
-32585, 61772, 5032, 45300, 28142, 15588, 51850, 37485, 8034, 57059, 24274,
-48086, 13416, 40030, 21498, 62100, 2540, 39872, 26222, 58116, 8625, 48598,
-18142, 36294, 52171, 6480, 30443, 64483, 18374, 43231, 3292, 50141, 20763,
-32583, 56320, 9127, 43117, 20182, 61545, 29551, 5629, 52108, 38048, 15866,
-31572, 56131, 8269, 48252, 24654, 40131, 12073, 60419, 28939, 6461, 50018,
-34928, 16558, 59347, 27485, 2027, 49377, 36841, 18626, 63933, 7582, 44610,
-17082, 31213, 56504, 10608, 42425, 24448, 59338, 5137, 39730, 22821, 52467,
- 8258, 34387, 60489, 12833, 42995, 23242, 52071, 4876, 29803, 58693, 14985,
-45519, 28417, 2257, 56652, 36287, 17661, 54262, 11761, 41905, 25432, 64841,
- 524, 38447, 22215, 48803, 11311, 58649, 26030, 41845, 1886, 54014, 22024,
-38592, 12238, 59228, 26321, 47761, 3359, 30990, 55687, 13595, 43023, 24122,
-64506, 1497, 40500, 23314, 50758, 12184, 32844, 56711, 19998, 43629, 362,
-65122, 28693, 14668, 51799, 37416, 8800, 58369, 23565, 45144, 1436, 34194,
-48790, 19210, 57150, 7593, 39052, 27154, 60827, 11196, 34253, 45571, 18776,
-57408, 3399, 41131, 24953, 55446, 13708, 32872, 45499, 924, 52512, 29175,
-15213, 61708, 35659, 3159, 49732, 18232, 34983, 58807, 8541, 30239, 53311,
-16158, 44129, 28124, 5986, 65532, 35715, 14134, 54040, 23921, 44855, 5414,
-36397, 51979, 15169, 29240, 64282, 11863, 42603, 23002, 54706, 6859, 35896,
-50276, 14850, 29788, 62747, 5961, 47117, 23959, 40443, 11631, 64347, 18733,
-30557, 54982, 657, 42506, 23310, 52440, 13392, 34401, 60534, 2964, 42195,
-24684, 55595, 14174, 31611, 45317, 964, 63911, 24675, 41476, 14260, 52388,
-29826, 3989, 56043, 36024, 18840, 50179, 1912, 29672, 65425, 14632, 41712,
-25201, 52845, 3550, 32690, 58524, 17349, 45049, 8233, 36898, 53064, 15684,
-29467, 56326, 5650, 41833, 22901, 63163, 13885, 31706, 51265, 3806, 43728,
-24608, 55001, 14179, 36546, 61781, 7392, 30500, 51004, 19835, 42230, 2062,
-53547, 21023, 29841, 59495, 11524, 46586, 23709, 39708, 1421, 61446, 22265,
-39180, 12266, 48629, 25888, 57674, 6969, 33885, 45699, 18375, 63574, 41,
-34184, 45504, 20834, 61784, 11228, 41447, 23513, 53693, 2184, 37861, 64046,
-14467, 28135, 51794, 5084, 46523, 19995, 34833, 62088, 9111, 28899, 46873,
-20433, 63688, 5922, 42000, 26710, 54531, 12638, 48475, 20944, 38555, 2305,
-62048, 25502, 41676, 9507, 53380, 17069, 31695, 57640, 3112, 45053, 29239,
-16862, 65450, 35467, 1049, 52497, 22175, 45405, 13949, 33098, 63345, 2978,
-48618, 25554, 38937, 11942, 62190, 22802, 49654, 3733, 35042, 46648, 20119,
-56371, 11292, 41660, 26711, 60661, 6864, 34742, 48009, 18126, 54314, 10589,
-38587, 22085, 59294, 6226, 33118, 46896, 17247, 60778, 10890, 39390, 26704,
-51323, 2069, 34991, 56089, 15070, 43849, 27659, 6576, 60247, 37784, 20660,
-49614, 8217, 34853, 60887, 21237, 43963, 1699, 34124, 58588, 20815, 48267,
-12937, 36745, 61931, 3053, 33177, 47299, 16751, 53816, 28648, 7979, 56936,
-37642, 17258, 47556, 4845, 64292, 26752, 40603, 13784, 52321, 29043, 6456,
-60503, 36724, 12067, 49759, 29446, 15351, 53581, 37232, 10153, 32022, 59414,
-17324, 43171, 7682, 50367, 20455, 34336, 55285, 2625, 42474, 24947, 64570,
-14076, 48965, 21263, 39846, 854, 59026, 22105, 49035, 8831, 37484, 65389,
-15273, 29077, 51151, 3395, 35052, 57161, 20088, 44788, 7875, 34836, 49167,
-18093, 59536, 4384, 32061, 47954, 20985, 61856, 11767, 39181, 26441, 54236,
- 3756, 42196, 21974, 61482, 13580, 46795, 30323, 7426, 56739, 36242, 19944,
-53371, 11729, 42036, 26280, 57359, 1171, 48361, 29761, 16199, 65385, 35808,
- 7057, 50374, 26537, 39307, 11926, 53918, 20218, 31260, 63608, 969, 44235,
-19912, 32452, 60498, 4169, 43298, 25904, 55183, 9376, 32102, 51795, 14129,
-42306, 23506, 62967, 3942, 32142, 45094, 20341, 55909, 11308, 38720, 27034,
-61802, 7765, 46440, 28493, 15117, 52884, 36842, 1630, 57342, 27669, 16742,
-49644, 36231, 3721, 63300, 22188, 43336, 15047, 56996, 32088, 776, 51573,
-36320, 13867, 65347, 23624, 45605, 5533, 40626, 20221, 57469, 29646, 10926,
-50439, 35809, 20893, 61285, 3707, 33992, 48802, 19405, 54644, 9336, 38510,
-27212, 61665, 14383, 46569, 28871, 78, 55764, 38124, 16783, 31680, 63135,
- 7263, 42936, 24620, 51098, 10900, 31263, 62180, 20532, 44621, 3948, 31776,
-49082, 18547, 58126, 9763, 31681, 45218, 15557, 63529, 29762, 6248, 50631,
-35241, 18949, 55951, 4586, 42931, 27250, 62898, 15155, 34623, 51353, 6325,
-39504, 22285, 57619, 9510, 32679, 51989, 20033, 42756, 5883, 62053, 26354,
-39561, 9488, 50277, 30834, 16328, 55340, 35423, 3274, 47943, 25379, 63299,
-10388, 39477, 22087, 52127, 13815, 31289, 64932, 5876, 41998, 23971, 53054,
- 25, 48525, 29304, 15566, 62788, 37943, 6747, 30590, 48746, 20559, 64093,
-11636, 40133, 24659, 56455, 6739, 33041, 51407, 19920, 42453, 10592, 62215,
-27145, 46960, 3761, 34167, 56924, 12499, 42644, 24286, 51343, 1665, 33869,
-61888, 17931, 42354, 10144, 56305, 23486, 47897, 184, 36648, 59800, 16518,
-29334, 47386, 3827, 55702, 25010, 40149, 10580, 59044, 18749, 30896, 52029,
- 3173, 41554, 22568, 58306, 9701, 36606, 49702, 16998, 30481, 65231, 6579,
-44564, 28246, 16079, 51830, 36111, 9398, 58111, 20764, 33364, 48029, 5336,
-60124, 22232, 39801, 11458, 48948, 26378, 62679, 7921, 32780, 44394, 16676,
-57569, 35045, 5868, 50819, 21944, 41970, 11955, 62191, 26631, 47887, 97,
-40636, 23622, 64946, 11776, 43614, 21195, 52209, 2068, 38369, 27230, 57069,
- 9359, 40933, 21507, 60864, 12779, 32082, 50038, 5138, 44953, 27475, 16818,
-64310, 37154, 10298, 54973, 25691, 44791, 6418, 34231, 57377, 13109, 42836,
-25745, 53151, 8674, 33619, 65493, 17512, 41992, 2567, 54522, 31546, 14589,
-50375, 27464, 9972, 56716, 37240, 17423, 49546, 5474, 36705, 58922, 15595,
-31101, 50992, 8451, 44690, 29294, 16451, 61012, 38117, 595, 30675, 54869,
-18249, 42739, 4350, 57760, 31854, 16313, 51042, 35124, 1200, 60067, 24459,
-42783, 11855, 56031, 22240, 47811, 6794, 34587, 64374, 20718, 41380, 11213,
-47589, 25682, 60832, 5634, 40612, 23073, 54639, 12264, 39488, 27076, 59052,
- 5389, 43323, 21308, 53360, 14934, 33886, 56751, 7101, 43860, 30324, 19033,
-48852, 9990, 63068, 25773, 39321, 1994, 55467, 22923, 45461, 13838, 30647,
-65153, 2957, 40766, 25872, 56287, 12227, 48366, 24529, 40614, 334, 53851,
-21233, 33574, 64362, 9246, 44895, 20001, 31096, 62172, 4289, 48274, 17490,
-35988, 53474, 825, 29457, 56580, 17657, 46689, 9392, 31191, 64148, 17095,
-45464, 4827, 30143, 55293, 15554, 44174, 28257, 8629, 65339, 37141, 18924,
-51183, 3469, 33616, 45432, 20947, 60925, 9762, 34130, 54092, 18707, 46485,
- 3847, 34468, 57969, 16688, 45073, 28236, 1183, 56114, 35448, 19475, 50301,
-65468, 3330, 39771, 23173, 54519, 11897, 38580, 27197, 62916, 6759, 30404,
-51459, 17858, 41354, 9768, 56248, 27025, 47447, 5495, 33787, 60036, 13177,
-41581, 24164, 54336, 6646, 33125, 46403, 18560, 60410, 11827, 39061, 26617,
-62809, 431, 32452, 52602, 13182, 42621, 24494, 57257, 5676, 33446, 45199,
-14566, 65043, 29096, 8662, 51017, 35136, 16786, 60025, 27957, 253, 50569,
-37684, 17727, 63667, 5153, 31767, 46084, 17497, 60648, 9833, 40926, 25237,
-52616, 14017, 32158, 59510, 2116, 42492, 24403, 57350, 10352, 46286, 34902,
-17357, 49059, 6762, 58842, 27103, 41172, 12312, 50742, 19154, 36556, 65234,
- 317, 29299, 47830, 19140, 58641, 7880, 34635, 47709, 13295, 53367, 24395,
-40598, 1144, 59375, 29961, 16091, 51465, 37750, 6066, 65202, 24595, 44908,
-13572, 31732, 60354, 8045, 46354, 28155, 13302, 54203, 38008, 6119, 28962,
-61886, 12245, 47779, 24193, 40833, 3059, 58937, 17584, 31562, 53576, 9085,
-42933, 24161, 59953, 1179, 30549, 46279, 17990, 55654, 11658, 39781, 26327,
-64280, 2560, 47508, 17597, 35847, 51628, 6275, 31456, 65322, 19275, 47671,
-11192, 40620, 22462, 53364, 1673, 35210, 59307, 17269, 46688, 6094, 37576,
-52617, 15486, 28474, 61236, 7453, 42379, 24673, 52152, 2883, 36277, 57200,
-16861, 28367, 44929, 8635, 61757, 24931, 39520, 12016, 48707, 21828, 54800,
- 116, 41493, 27061, 60318, 11732, 47617, 17812, 30631, 63501, 2264, 47067,
-27678, 16496, 58477, 36228, 3833, 53251, 22996, 43061, 11399, 61839, 26530,
-39518, 6825, 56591, 18861, 32056, 46091, 4110, 55707, 24672, 40429, 12702,
-60148, 21487, 38538, 8185, 55776, 22959, 43710, 10079, 59051, 26117, 40275,
- 2187, 51792, 17164, 35905, 57562, 4315, 28589, 45021, 13764, 60004, 23085,
-39715, 1475, 54406, 25747, 38520, 13599, 64509, 21583, 48395, 7174, 31823,
-60808, 19507, 41500, 11595, 56864, 26941, 38524, 4594, 51255, 18741, 31230,
-62503, 7550, 44238, 28043, 13436, 52915, 36653, 20152, 64824, 1592, 34471,
-49937, 13207, 43608, 24985, 61135, 7626, 31521, 54491, 14659, 45000, 27319,
- 1961, 53048, 36267, 14610, 59555, 27400, 4223, 49600, 37424, 18621, 61922,
- 7848, 44501, 28631, 16908, 57379, 36735, 2701, 45988, 24359, 54856, 12739,
-39094, 21701, 60286, 1135, 30245, 48015, 13655, 56003, 25701, 38420, 7167,
-59744, 17679, 31347, 48985, 4550, 55808, 26306, 38713, 13304, 59086, 23317,
-48289, 6307, 33122, 64145, 15928, 45867, 28095, 1294, 54549, 37539, 15065,
-59583, 33437, 3344, 51832, 22327, 43939, 13532, 31348, 63256, 602, 48994,
-29089, 15867, 59983, 36433, 4751, 49945, 21189, 31266, 56820, 10373, 44434,
-20099, 33394, 63168, 6312, 43120, 20004, 60070, 29252, 3875, 52979, 34901,
-19103, 46331, 10216, 64881, 25366, 41670, 3243, 54407, 22108, 43564, 13677,
-58678, 28252, 9276, 52348, 37564, 12944, 48177, 24211, 65226, 7832, 40836,
-22271, 53737, 12871, 40560, 26932, 62567, 5432, 39258, 17447, 52881, 30208,
- 401, 58996, 36255, 18129, 49351, 9323, 32276, 56773, 19977, 42199, 1993,
-48276, 25952, 62630, 9453, 39254, 22892, 51766, 12522, 31584, 64535, 12,
-45733, 27391, 16262, 61082, 37146, 4962, 53885, 29515, 15774, 49603, 37197,
- 7797, 59970, 20332, 34156, 51199, 5801, 43291, 17844, 62589, 31512, 9172,
-50678, 36214, 18891, 58757, 4913, 31358, 47896, 17908, 55201, 11582, 40219,
-26119, 59100, 7352, 33374, 51313, 19812, 43114, 11372, 62920, 26295, 40446,
- 6215, 54289, 19547, 35088, 48849, 11116, 60514, 22968, 40347, 456, 48631,
-26549, 58551, 10026, 41849, 24362, 53280, 13099, 29990, 59374, 1363, 44521,
-25171, 39789, 10703, 63479, 19947, 32702, 48794, 7415, 61491, 22557, 40913,
-11880, 48154, 25873, 8239, 33640, 58832, 13334, 43590, 23789, 53033, 1505,
-40218, 21540, 60301, 13672, 33062, 46000, 3321, 62318, 24210, 39215, 11045,
-51326, 17646, 31018, 63856, 1640, 44256, 28712, 15745, 56791, 36662, 4086,
-51596, 23852, 42584, 10756, 55093, 21893, 39587, 8367, 63543, 29964, 16052,
-50450, 37105, 1936, 55823, 27791, 15833, 49426, 37597, 3387, 57144, 23508,
-45002, 11176, 32252, 48440, 20882, 58449, 8094, 40118, 26833, 54525, 2750,
-38458, 21359, 62505, 5824, 34018, 50732, 17958, 40164, 8551, 64463, 21040,
-33065, 52347, 3611, 40860, 24449, 63015, 11489, 38881, 22583, 53008, 5351,
-33431, 55700, 17636, 45059, 10151, 34889, 62363, 20822, 43929, 2659, 30779,
-55362, 17503, 42556, 9921, 63707, 34792, 21088, 49564, 4161, 34081, 55738,
-12678, 41828, 22250, 58965, 4800, 36517, 50208, 16980, 30405, 63996, 2151,
-43863, 23569, 51249, 15432, 34661, 57641, 7181, 43363, 22249, 52185, 11653,
-33536, 64457, 19351, 47291, 5031, 33006, 62217, 13336, 42142, 23037, 53486,
- 4196, 38395, 27158, 58753, 13696, 38324, 21863, 55966, 8555, 43613, 25421,
-57616, 3868, 36716, 50087, 15652, 29657, 60846, 8453, 42532, 25414, 56152,
-12539, 39121, 22541, 64598, 872, 34228, 46971, 19025, 55244, 9275, 38253,
-22590, 62614, 13460, 47911, 31606, 1346, 53126, 37409, 17737, 59427, 5006,
-32527, 46043, 14627, 63829, 23907, 38276, 8198, 53811, 22781, 44669, 5445,
-37699, 55650, 14748, 28936, 45066, 8014, 61212, 24749, 39859, 12929, 54310,
-21836, 45856, 733, 33643, 59794, 15783, 44282, 28394, 8981, 53398, 37453,
-17427, 63583, 1611, 46899, 26684, 41690, 14544, 51536, 31449, 3625, 61394,
-36015, 18328, 50213, 10757, 43744, 27120, 65244, 7879, 33746, 53394, 16280,
-47408, 30397, 6097, 63097, 36511, 20308, 52041, 9823, 42250, 26680, 58220,
- 4917, 37216, 50114, 15218, 28917, 55109, 2754, 43133, 24525, 64089, 9422,
-33714, 47376, 14354, 58491, 24363, 40416, 4226, 48954, 22641, 56430, 9261,
-29675, 45253, 16643, 61894, 27851, 6148, 53002, 37949, 16334, 28783, 64022,
- 4649, 47605, 28000, 16853, 57588, 38005, 8365, 31102, 63298, 16761, 46166,
-28174, 228, 55294, 38059, 15513, 31291, 64708, 9065, 47417, 27942, 15094,
-51912, 36373, 6575, 64107, 23155, 47044, 11102, 32681, 53613, 18467, 42860,
- 3215, 61601, 20985, 32853, 45204, 7982, 54311, 24370, 41951, 10911, 46982,
-21396, 62610, 2950, 40281, 26375, 54023, 10148, 43060, 22406, 58117, 13541,
-30874, 50593, 5585, 44311, 27352, 16972, 61141, 37776, 9705, 54537, 24496,
-47022, 6029, 40243, 22637, 62079, 9950, 31487, 45901, 17969, 52395, 3475,
-34662, 59401, 16295, 46910, 27780, 915, 54963, 38186, 16097, 33302, 48927,
- 9315, 62522, 24438, 40747, 1317, 55365, 21502, 39311, 11807, 60620, 26785,
-38868, 5819, 50693, 19539, 33200, 62790, 1758, 45170, 27651, 15965, 57152,
-37967, 4010, 30215, 48914, 17696, 61058, 2546, 33345, 46291, 21050, 56948,
- 8517, 33144, 50822, 20105, 42804, 13248, 64040, 28818, 4199, 51650, 37363,
-15232, 61340, 28066, 8131, 50744, 35778, 18083, 58143, 2681, 46358, 26205,
-40879, 14630, 56052, 30027, 6611, 50412, 35690, 20678, 58883, 12514, 43281,
-26236, 52768, 856, 32364, 56676, 10888, 42257, 25069, 61065, 14058, 37213,
-49799, 2275, 28910, 55450, 17044, 42809, 7943, 63085, 20810, 37113, 52938,
- 1338, 29328, 46651, 14185, 65427, 22585, 39400, 3467, 55473, 30555, 15012,
-50177, 36678, 1923, 61486, 23812, 44158, 14078, 32547, 56355, 3925, 43111,
-24498, 62898, 13904, 39036, 21754, 54560, 5485, 32597, 46477, 19400, 63961,
- 8263, 36366, 50576, 16150, 30914, 56222, 2687, 44296, 27626, 16493, 54772,
-38130, 5680, 31175, 57107, 18380, 46216, 30197, 52261, 5149, 41399, 25739,
-62000, 14597, 34435, 48731, 6151, 57351, 26364, 38368, 11865, 53276, 18896,
-36800, 58545, 6026, 28995, 46380, 19348, 52645, 7680, 34498, 59218, 18989,
-45552, 9352, 32598, 61939, 13868, 41450, 25269, 58442, 2977, 47314, 19379,
-35768, 53165, 6778, 28416, 60739, 19448, 44718, 9871, 32340, 62986, 18664,
-48097, 8177, 34057, 61969, 17108, 41700, 4571, 52285, 19386, 36113, 64665,
-13082, 29848, 47681, 8803, 55663, 23952, 41798, 12415, 58990, 22698, 46847,
- 454, 37670, 54166, 12802, 30250, 56658, 18531, 46901, 9625, 33505, 61104,
- 1796, 42030, 25454, 57778, 13065, 39547, 26789, 52208, 3726, 32855, 59523,
-12692, 46217, 21319, 34146, 58014, 6249, 49022, 19404, 31730, 44866, 8913,
-53729, 18910, 30683, 62536, 55, 46777, 28439, 15978, 52272, 37867, 8656,
-58336, 24995, 41195, 11580, 55941, 21456, 38866, 4570, 63035, 29811, 16983,
-49802, 35450, 337, 56195, 26432, 43794, 9739, 37756, 52773, 16526, 28597,
-58254, 7315, 48208, 24903, 40858, 10059, 63269, 23541, 49265, 912, 40202,
-26784, 53384, 10240, 32000, 62832, 14070, 42186, 24643, 51370, 2036, 33554,
-63664, 18067, 45727, 5160, 33159, 54098, 14558, 44172, 30099, 8400, 60336,
-25409, 48646, 3577, 41885, 25117, 56269, 10103, 40233, 20013, 65418, 29742,
- 7365, 50156, 35669, 19971, 57998, 10707, 34196, 48098, 2908, 56445, 25864,
-41128, 10686, 65072, 18808, 35619, 50556, 1052, 31702, 56856, 15726, 46979,
-28538, 6250, 63059, 37953, 14908, 30019, 49089, 10844, 65383, 24890, 40056,
- 2766, 50611, 20969, 32953, 59253, 9866, 43870, 19524, 36472, 54404, 5800,
-29474, 57081, 13537, 42707, 24798, 62356, 565, 38436, 21423, 54831, 12863,
-41768, 25045, 60679, 2545, 40810, 22356, 48637, 11083, 56197, 17690, 31112,
-46735, 324, 62702, 20563, 34417, 45948, 9528, 51854, 19167, 35492, 59974,
- 6391, 30357, 45946, 19084, 54076, 1010, 41830, 26503, 63520, 12040, 38784,
-21336, 60339, 2752, 32851, 51601, 12836, 42445, 23725, 58870, 507, 39316,
-21809, 50903, 9324, 34727, 59956, 13555, 43217, 25307, 55254, 2504, 41064,
-22961, 50575, 10015, 31009, 60347, 13663, 47819, 24425, 41409, 4978, 53763,
-18451, 33116, 60875, 2072, 44758, 29115, 16067, 57031, 36002, 5310, 45709,
-24679, 63247, 10023, 39980, 23188, 55381, 13119, 34783, 48220, 1509, 64561,
-22381, 38288, 14414, 56280, 31104, 8374, 50388, 36759, 17541, 61270, 750,
-34096, 47249, 20907, 59838, 8100, 33707, 46082, 16290, 53773, 29178, 2320,
-64430, 35383, 19513, 49547, 11203, 33325, 58010, 20534, 42452, 1693, 55618,
-23518, 40370, 12954, 64006, 28970, 7952, 50487, 36035, 12867, 61688, 24586,
-44703, 6609, 29993, 57869, 12148, 47052, 28590, 16919, 51605, 35578, 4669,
-57417, 23288, 45387, 14276, 36206, 61714, 7357, 29773, 53790, 17936, 44151,
-12337, 31744, 64441, 6679, 49550, 25445, 38945, 10922, 52860, 18948, 30260,
-59167, 4900, 44047, 28711, 15959, 60478, 36941, 1588, 53490, 22806, 45623,
-10468, 34023, 57661, 19406, 44388, 5941, 34201, 49220, 20849, 63412, 8946,
-38377, 27273, 53019, 4722, 35016, 60259, 18792, 46126, 11535, 31994, 65324,
- 3431, 41626, 22574, 51020, 9591, 34429, 62780, 16625, 44871, 29235, 3809,
-52936, 35498, 18574, 64697, 9840, 45516, 21122, 32944, 59878, 4455, 42038,
-25576, 50653, 10738, 34400, 57490, 19109, 44352, 5703, 32235, 60294, 12077,
-47336, 28296, 16914, 58107, 35239, 9640, 47573, 25724, 59695, 5187, 38712,
-21387, 54992, 12714, 30421, 50511, 6748, 35116, 61280, 17468, 48362, 2450,
-40544, 27043, 57328, 14579, 32370, 45929, 6583, 62328, 28310, 15397, 51145,
-35708, 9306, 61089, 24113, 47563, 389, 35486, 64134, 15988, 49233, 21748,
-59703, 2415, 32689, 45996, 18020, 54815, 10363, 41947, 22413, 64906, 187,
-43715, 23950, 50466, 14014, 32124, 63137, 2580, 42364, 22955, 54415, 11726,
-39045, 26677, 64363, 1029, 49254, 22074, 43079, 5729, 53596, 34293, 15319,
-65197, 27998, 8993, 49459, 37636, 17065, 56235, 719, 36191, 46690, 21495,
-58229, 5238, 30515, 43793, 20785, 54809, 1752, 38711, 27140, 59346, 12010,
-43654, 22868, 51519, 888, 34470, 60270, 17005, 45078, 28460, 3824, 52435,
-36140, 15710, 61897, 28234, 7697, 49290, 35484, 20788, 64041, 3361, 42116,
-26116, 51134, 11928, 31254, 60111, 17952, 43575, 7456, 50508, 21177, 30091,
-56522, 9532, 42757, 18048, 64532, 29389, 1490, 50889, 36870, 15586, 62917,
-28375, 3160, 54959, 36610, 17181, 49870, 10125, 34707, 60483, 14277, 43946,
-27482, 6590, 64283, 35103, 20145, 50776, 1349, 42874, 26998, 53520, 13540,
-34260, 60201, 7590, 46901, 23837, 40675, 13126, 59531, 22505, 47877, 3221,
-34297, 63687, 13984, 45183, 31918, 2080, 55434, 21362, 44513, 12386, 32554,
-59773, 17729, 43226, 6143, 50613, 21005, 29545, 58621, 3167, 45286, 20434,
-31228, 54792, 7701, 43451, 24412, 59807, 11482, 30904, 48753, 20977, 57552,
- 2475, 39898, 26444, 63977, 11175, 38508, 22130, 50852, 13722, 32178, 58812,
- 4281, 44842, 27386, 16113, 53738, 37912, 1610, 62337, 25078, 42297, 13745,
-51672, 19060, 35800, 57407, 4290, 29866, 46851, 13156, 60502, 24398, 40011,
- 7431, 52259, 19467, 32856, 59131, 3156, 43304, 24503, 52750, 5592, 33126,
-56764, 18341, 47603, 8028, 36752, 62414, 14770, 29674, 53151, 4357, 47910,
-27629, 16683, 64767, 35457, 7388, 48063, 22174, 52955, 11896, 39844, 27028,
-59339, 5174, 48111, 32310, 15334, 52199, 36074, 8383, 63857, 26435, 44678,
- 3551, 34412, 59842, 15721, 44064, 27515, 7623, 54508, 38203, 16316, 29812,
-65090, 2147, 43648, 24091, 55395, 10556, 38759, 21481, 58035, 14850, 35839,
-50227, 4693, 30291, 54817, 13825, 46628, 25427, 40665, 7226, 65442, 35201,
-17454, 53606, 11781, 42003, 26184, 56049, 3715, 40085, 23629, 62737, 12262,
-38593, 21372, 52040, 6604, 33916, 65073, 18751, 43182, 3750, 54889, 26933,
-38521, 11854, 57225, 24075, 48763, 7434, 41437, 21121, 62863, 12385, 40823,
-26426, 55019, 562, 48244, 17614, 36524, 58121, 5927, 29637, 46325, 18070,
-60545, 9428, 40487, 27049, 51566, 4728, 32928, 62286, 16377, 45598, 27559,
- 6687, 52928, 35509, 19424, 65291, 11154, 40771, 26434, 56094, 4232, 35026,
-52365, 13818, 43931, 27566, 7467, 59170, 37675, 15194, 51320, 28607, 4485,
-62966, 35102, 14285, 47321, 26129, 54413, 5516, 32540, 44213, 15211, 58717,
-23747, 40550, 4250, 52194, 18972, 32174, 64533, 2070, 43995, 27315, 14653,
-53780, 37693, 9865, 63936, 24755, 48128, 275, 40761, 21798, 56487, 11125,
-33841, 47335, 3419, 59847, 24870, 40206, 14150, 55643, 22022, 47070, 772,
-35882, 63500, 14803, 32512, 47083, 7103, 52257, 27593, 12152, 63024, 38237,
-15261, 29333, 55424, 3464, 41196, 25334, 65079, 14113, 31205, 47338, 934,
-55387, 24941, 42156, 10501, 47596, 22633, 62138, 13423, 32742, 44071, 1573,
-52280, 28014, 16490, 56475, 38028, 8026, 29112, 48373, 20030, 59175, 5499,
-39109, 26390, 48850, 11916, 56120, 22507, 40330, 646, 57981, 26905, 39087,
-12500, 51969, 18530, 31641, 61689, 2878, 47195, 27963, 16501, 63494, 37735,
- 8587, 51428, 25695, 43371, 225, 54793, 21819, 39346, 7683, 64609, 23199,
-49263, 11626, 40862, 26799, 48762, 1093, 63804, 18803, 33755, 44741, 7962,
-56708, 24854, 39016, 12009, 48908, 23013, 65059, 806, 34919, 43835, 13605,
-55238, 24967, 40778, 4042, 59216, 21486, 43570, 10377, 54467, 26528, 41308,
-12715, 7245, 47157, 26369, 40238, 11635, 63678, 25179, 39350, 4671, 56247,
-27192, 38729, 13093, 51785, 30401, 7855, 55888, 35413, 19968, 49523, 5268,
-30754, 61471, 14195, 48013, 24346, 40489, 8577, 57884, 21234, 38289, 12214,
-47738, 24245, 55578, 2510, 40220, 19858, 61190, 29690, 11110, 50932, 34726,
-17797, 63941, 6515, 32975, 52752, 17289, 45252, 10633, 34774, 64914, 21219,
-48976, 5732, 39671, 26541, 54116, 13910, 31552, 63478, 7177, 48307, 22871,
-39867, 12629, 56838, 26127, 43550, 5088, 59458, 17493, 36733, 51332, 9068,
-29327, 58270, 16248, 45591, 27590, 5920, 53407, 36827, 20104, 65076, 781,
-32219, 46318, 17101, 61480, 4684, 38808, 26887, 47487, 11004, 54971, 22004,
-39933, 7332, 59676, 24041, 48166, 12209, 41218, 22647, 53456, 5085, 31876,
-57643, 20449, 45066, 2482, 37081, 54086, 15323, 30785, 61676, 10259, 45866,
-19151, 31931, 56876, 3653, 44270, 27751, 15590, 64990, 36869, 6738, 50942,
-30613, 20385, 57465, 5656, 43909, 28249, 15945, 60708, 36798, 9025, 48992,
-26099, 65103, 4069, 39068, 19631, 52841, 30759, 8137, 62492, 35931, 18237,
-49511, 10723, 34235, 57809, 17537, 41656, 256, 52226, 20375, 34715, 62289,
- 9793, 44972, 17486, 36594, 53130, 6959, 31170, 56789, 17846, 42890, 467,
-52561, 34804, 15251, 62067, 28180, 8031, 49490, 36711, 18893, 59861, 12387,
-31357, 46890, 5571, 55161, 24735, 41687, 8966, 64175, 28359, 16258, 49913,
-36766, 2453, 62506, 22298, 41838, 11933, 55439, 26792, 39242, 9255, 61643,
-22253, 46142, 13995, 35092, 58427, 1793, 43100, 23010, 51200, 11326, 33710,
-59607, 18349, 45486, 879, 33548, 56066, 14355, 42213, 25991, 60401, 2801,
-32372, 46119, 17721, 56147, 9992, 38811, 22399, 60881, 1374, 30975, 46652,
-19014, 55129, 9231, 39126, 22787, 57856, 12899, 48452, 29032, 5259, 61140,
-36441, 20222, 48085, 11899, 57488, 26670, 40823, 7795, 47802, 22461, 63111,
- 5427, 32223, 45634, 19751, 61512, 10228, 40940, 20909, 57597, 34619, 1358,
-49660, 19308, 31843, 59723, 5344, 46304, 19108, 32586, 49019, 9160, 60801,
-32490, 18665, 46231, 1091, 55711, 27082, 39991, 8212, 58305, 25611, 38602,
-12434, 48294, 22377, 61883, 818, 40094, 26367, 59942, 10297, 38641, 21616,
-52112, 3697, 33438, 58708, 19202, 44747, 9389, 34061, 64346, 13457, 48968,
-24769, 40813, 2719, 56900, 20709, 33709, 53265, 11000, 42485, 18553, 58604,
-29401, 3483, 50204, 37836, 12904, 56933, 24872, 43636, 1983, 51474, 18650,
-31699, 62684, 9141, 46466, 28587, 16923, 60767, 36009, 154, 49340, 27435,
-16780, 56718, 37872, 8607, 45670, 24366, 58297, 11028, 38833, 21360, 65134,
- 497, 47785, 29869, 12224, 53655, 37318, 21083, 61098, 7895, 37019, 49776,
-16495, 29572, 58329, 5384, 44407, 34480, 19715, 60001, 8174, 43007, 27249,
-52446, 15147, 36788, 59001, 6392, 28938, 51364, 19179, 42501, 9911, 61521,
-27110, 39539, 6019, 49074, 24709, 58168, 9978, 39017, 19291, 50419, 30345,
- 3798, 57249, 35963, 20883, 49361, 8976, 32131, 58696, 18806, 48866, 6394,
-39285, 26925, 61550, 12722, 38562, 21344, 59353, 3197, 36407, 53619, 15452,
-28807, 47279, 7123, 63860, 23834, 40827, 10531, 58032, 18670, 32818, 53671,
- 1773, 43009, 23024, 63671, 13343, 33549, 52410, 8235, 45698, 29568, 16446,
-64184, 37046, 5228, 54012, 23737, 45007, 8960, 37291, 56421, 14907, 30837,
-52755, 4855, 42093, 23895, 59413, 10687, 39887, 23383, 56839, 13801, 33498,
-52611, 3176, 46476, 28934, 16672, 61855, 35903, 9026, 53540, 24027, 42164,
-13488, 59247, 29936, 4083, 50995, 36288, 17970, 60384, 8911, 29645, 53871,
-20508, 47026, 6112, 31336, 58105, 17745, 48660, 11351, 38632, 27162, 62844,
- 3043, 38360, 21107, 56724, 60948, 22328, 48970, 1324, 31011, 53890, 18443,
-43800, 9653, 60451, 20251, 32502, 47010, 3939, 62541, 27529, 15292, 37887,
-58759, 8938, 45551, 27496, 16477, 55382, 37945, 2000, 30102, 60207, 18057,
-49500, 4667, 39627, 27215, 62346, 13372, 33366, 51870, 7696, 42765, 23763,
-57455, 3850, 40868, 22374, 47604, 12699, 60251, 26501, 40269, 3127, 55213,
-18774, 47028, 28920, 8751, 61265, 35325, 17720, 49924, 4207, 33757, 58284,
-15864, 44712, 29117, 2399, 52007, 35074, 11079, 63220, 20198, 30875, 50287,
- 1226, 42672, 23350, 54777, 13971, 37234, 61980, 2822, 30465, 49939, 13437,
-42214, 24849, 56014, 6627, 34255, 48611, 20561, 59110, 12025, 40851, 25760,
-51725, 3434, 32298, 63613, 14165, 46584, 25475, 39190, 624, 61381, 17669,
-29754, 47442, 7918, 65489, 24390, 40146, 12081, 48292, 23826, 58069, 4313,
-40190, 22934, 51523, 7823, 29403, 60807, 12785, 47646, 34801, 20700, 55401,
- 1684, 45391, 18617, 33789, 61525, 10165, 49388, 17610, 33577, 45892, 499,
-56034, 23844, 40340, 9982, 47120, 22043, 57487, 14629, 34593, 46230, 1380,
-53696, 27977, 15474, 60161, 37757, 4466, 47676, 25043, 64940, 12955, 38596,
-26678, 55209, 3428, 43150, 19665, 59068, 29521, 5309, 50234, 35057, 21076,
-64777, 10276, 45246, 19882, 31271, 57461, 6448, 46406, 20940, 31167, 55366,
- 2587, 42734, 23913, 63391, 11429, 38819, 21552, 50240, 648, 34181, 58723,
-20722, 41412, 11137, 54489, 26048, 45488, 7945, 33547, 58322, 18204, 48453,
- 203, 36314, 51248, 16140, 29114, 64428, 4662, 44081, 27771, 16497, 56180,
-38041, 6479, 28840, 63841, 20127, 42867, 10487, 53931, 27005, 38552, 4955,
-62962, 21918, 47459, 11406, 40428, 26316, 52590, 7037, 33257, 64426, 13955,
-43025, 24473, 56945, 5937, 33690, 50856, 14481, 42063, 24097, 64840, 1132,
-31396, 53132, 14836, 46215, 28409, 3961, 62166, 37289, 14677, 53662, 28349,
- 706, 49956, 37255, 14009, 59411, 25131, 43210, 3054, 51954, 17946, 31821,
-55307, 8219, 42988, 24662, 62050, 11185, 39742, 22311, 57146, 2341, 30036,
-53822, 15365, 44495, 28144, 6237, 63619, 35238, 17295, 51177, 10700, 43604,
-24283, 62995, 2972, 40144, 21368, 52349, 14897, 33359, 56457, 6157, 43015,
-23795, 50811, 14584, 35656, 63566, 8465, 29977, 49944, 20807, 42820, 1676,
-54103, 28676, 16699, 61359, 36189, 8807, 49681, 28233, 15683, 65064, 36243,
- 319, 49272, 20803, 34112, 63011, 9067, 44266, 27821, 15814, 60854, 38040,
- 6911, 29012, 48971, 12441, 58206, 23960, 40776, 5447, 55267, 21830, 43493,
-12927, 64654, 30841, 6161, 50349, 36165, 19147, 61026, 2416, 33449, 53150,
-14907, 42242, 24530, 51250, 6981, 34237, 59975, 18332, 45458, 3390, 31469,
-55560, 10742, 42906, 22882, 63121, 13365, 31677, 48506, 2716, 54728, 25481,
-38828, 12164, 65004, 23762, 48904, 1430, 40492, 21984, 62454, 13239, 33031,
-45986, 2891, 54524, 25688, 38312, 13238, 65485, 21391, 43729, 2093, 54751,
-26859, 40930, 11368, 62666, 17651, 32253, 52563, 205, 44303, 27512, 13813,
-64319, 37459, 10146, 46390, 23967, 56519, 5181, 41432, 17767, 51181, 29861,
- 9704, 57435, 37812, 20357, 49790, 453, 34111, 58582, 14503, 44195, 27455,
- 4542, 50674, 37276, 14109, 60446, 24604, 47077, 6704, 39756, 24441, 62104,
- 2511, 39280, 21854, 56743, 11468, 35097, 49379, 16268, 29184, 60609, 1167,
-44177, 27468, 12506, 64920, 35588, 20139, 49359, 2522, 31037, 62739, 18813,
-45270, 7019, 31454, 60685, 15987, 44018, 27437, 5870, 56388, 37727, 20716,
-50209, 2561, 37629, 63278, 15353, 28520, 47115, 10244, 55237, 19937, 31274,
-43960, 3339, 61653, 35640, 13286, 51424, 25742, 42650, 1642, 64692, 34600,
-19582, 53658, 8448, 48256, 26140, 39952, 13072, 55616, 38132, 14657, 33299,
-65280, 8558, 42967, 23500, 52528, 2779, 34325, 57083, 12063, 44882, 28475,
-16667, 54235, 38081, 773, 32382, 63368, 12800, 43632, 23023, 52644, 7276,
-33529, 64600, 19860, 42374, 10664, 48383, 26047, 56572, 308, 31486, 46430,
-16674, 63690, 27666, 10142, 50350, 36742, 18078, 58625, 1378, 35347, 49874,
-14516, 29700, 62504, 11310, 42091, 24410, 56704, 2, 40975, 25684, 54650,
-11803, 40445, 21801, 65529, 7748, 43455, 24941, 55379, 13112, 41414, 22397,
-58018, 5718, 39608, 26781, 48938, 10656, 63826, 19852, 33115, 44372, 7379,
-54247, 20821, 34555, 59636, 9993, 44483, 18515, 35893, 64200, 2300, 30416,
-53090, 18269, 44316, 8950, 34453, 57629, 17363, 43033, 5930, 55827, 20636,
-34027, 48955, 10435, 59099, 19712, 33859, 43808, 1813, 53003, 29103, 16768,
-63302, 36557, 9645, 49726, 20316, 34671, 62431, 744, 42347, 24349, 54142,
- 8485, 38793, 27084, 63421, 12163, 48599, 25066, 39849, 4508, 55099, 23229,
-39122, 8659, 62698, 31135, 15154, 50716, 35159, 2907, 61378, 24816, 44017,
-12659, 33011, 63935, 6434, 43466, 22057, 51828, 11391, 32232, 56301, 18116,
-44569, 5949, 33129, 61428, 15305, 47510, 27843, 8907, 51613, 37555, 16225,
-60128, 28159, 1919, 49589, 37021, 15882, 53428, 28658, 3864, 62704, 36282,
-17174, 49885, 9386, 33683, 60765, 14079, 43538, 25299, 52660, 4547, 30609,
-56117, 18712, 43153, 6606, 61960, 30305, 14611, 49497, 35100, 4994, 64850,
-23863, 46328, 12430, 40829, 21795, 60728, 6521, 32588, 53724, 20244, 46881,
-12460, 40335, 25861, 60325, 3374, 35452, 49786, 15488, 32332, 57916, 7700,
-47536, 24239, 40663, 13352, 58887, 21024, 49015, 1855, 36571, 58039, 15649,
-29710, 50652, 4566, 41351, 23238, 61803, 12716, 30280, 54395, 3492, 35058,
-46526, 19544, 58216, 9964, 33943, 44220, 20748, 59558, 6905, 39810, 26017,
-51922, 10906, 32126, 64254, 20542, 42249, 8319, 56621, 28902, 15838, 49768,
-36893, 6782, 63780, 22768, 46963, 14408, 29714, 52149, 4341, 34758, 64546,
-13728, 42716, 23637, 51526, 8483, 34294, 60156, 19265, 47370, 4740, 41824,
-26583, 53884, 14164, 31322, 57971, 5572, 43019, 23431, 50409, 9770, 31192,
-65331, 13641, 45172, 28875, 2496, 54136, 37294, 16356, 59245, 27510, 5217,
-52425, 38173, 14706, 31788, 59614, 7235, 43387, 23656, 51692, 4034, 32066,
-55426, 13887, 41827, 25135, 59668, 7234, 30611, 52396, 19856, 46069, 3706,
-32620, 54939, 13781, 42079, 23510, 64785, 1190, 34941, 47875, 16348, 53164,
-29837, 3741, 38128, 58742, 16101, 29091, 47105, 8296, 54863, 24031, 40613,
-12636, 62511, 21526, 48492, 3794, 30510, 56178, 13479, 41071, 24011, 63806,
- 8438, 37819, 50332, 15571, 29163, 57133, 974, 34682, 46646, 18925, 60942,
- 9733, 33607, 45099, 17498, 56370, 5610, 32442, 44823, 16131, 57872, 28146,
- 7510, 50201, 36755, 19758, 60523, 10737, 47795, 23083, 40805, 4765, 57618,
-31310, 16087, 50089, 35957, 6382, 58860, 24582, 45468, 8661, 34747, 60717,
-19731, 42292, 4162, 54883, 30617, 16317, 51540, 34541, 1871, 62578, 23640,
-45165, 13562, 33380, 60833, 5649, 44977, 27603, 16658, 64827, 36918, 8386,
-51826, 20643, 31044, 62891, 12185, 45890, 33929, 3553, 54836, 19611, 32433,
-58218, 9368, 43218, 22865, 51335, 13774, 31722, 61185, 4248, 43300, 25053,
-53533, 8462, 34247, 57766, 15609, 46342, 28882, 6167, 55100, 36717, 17245,
-51695, 9358, 34219, 57564, 14217, 41704, 24131, 51360, 1504, 32582, 65224,
-12949, 45315, 30767, 17961, 52487, 7233, 34259, 58462, 21080, 45015, 40,
-33949, 64294, 13757, 49063, 24566, 40178, 7752, 59623, 22084, 39371, 12113,
-53207, 23329, 45794, 4926, 32574, 62201, 15276, 44733, 28708, 6183, 16974,
-47007, 28006, 4265, 58131, 36121, 15824, 50228, 28364, 10510, 64149, 37498,
-20974, 48653, 5089, 61086, 25697, 40331, 10750, 51589, 20343, 30487, 58977,
- 3771, 47204, 25270, 39334, 11911, 57779, 21602, 38651, 5165, 53640, 34954,
-13715, 61036, 23140, 43856, 6034, 30729, 55031, 14487, 48075, 28961, 8696,
-64536, 37480, 19891, 52598, 4013, 34016, 46455, 19445, 60951, 7604, 35700,
-49672, 16251, 29769, 59610, 5442, 46939, 28205, 16982, 53431, 38014, 1536,
-31507, 61572, 18398, 48263, 8835, 33190, 60364, 17214, 44973, 3158, 36078,
-57775, 15418, 29852, 51074, 178, 46395, 28088, 16590, 61299, 37703, 5093,
-48254, 22517, 54631, 12710, 40314, 26309, 60598, 1065, 49319, 22636, 40371,
-12841, 64855, 26227, 39783, 2909, 53247, 17011, 30882, 57237, 8570, 45263,
-27476, 14871, 60160, 38039, 3147, 30426, 56348, 11842, 46422, 18543, 30428,
-58936, 5804, 41936, 22373, 51205, 14344, 32709, 57946, 2465, 44197, 20039,
-32767, 64629, 11346, 43255, 19726, 51894, 29201, 7148, 58954, 37278, 18397,
-48764, 5040, 54997, 37898, 16278, 29246, 58691, 9475, 48423, 23174, 39672,
- 2313, 63089, 26252, 49243, 12346, 39032, 22495, 53271, 1032, 31865, 64423,
-13618, 42749, 24371, 54825, 5828, 41320, 22279, 63221, 8964, 39537, 26278,
-48615, 12283, 58677, 22401, 39103, 1205, 54081, 27221, 38269, 7286, 65289,
-17527, 47127, 35083, 9819, 51277, 27723, 15626, 57944, 37385, 3045, 51827,
-27867, 16508, 54844, 37902, 1483, 30658, 57155, 17642, 48782, 9524, 40641,
-25641, 63312, 2169, 30903, 54392, 9506, 48377, 22259, 39965, 13593, 60957,
-28136, 437, 53440, 36269, 19031, 45301, 4001, 65486, 23439, 39147, 10947,
-54568, 24549, 43396, 8633, 63544, 18225, 34246, 53754, 130, 45754, 27665,
-16298, 52461, 37487, 7983, 63395, 27961, 16560, 50135, 37311, 1660, 55744,
-23058, 43478, 13159, 60530, 29654, 5710, 49615, 36396, 17726, 54423, 2454,
-32924, 62382, 13410, 41764, 24796, 52865, 80, 33796, 60612, 17827, 43245,
-10760, 50471, 20609, 31490, 59234, 1680, 41931, 25821, 54638, 12168, 38850,
-22604, 64316, 373, 33403, 48605, 19796, 59391, 8729, 32957, 46524, 16466,
-53072, 29354, 1386, 60575, 37455, 16889, 49326, 27417, 7559, 62354, 38219,
-12556, 30959, 48420, 20462, 56297, 3290, 30163, 46071, 21125, 63925, 10295,
-39473, 26273, 57535, 12473, 43927, 22210, 51295, 2585, 33605, 63759, 17418,
-42575, 10779, 56710, 21215, 34939, 48159, 5902, 59631, 18254, 32962, 45811,
- 8599, 56253, 22860, 39492, 12058, 61756, 25504, 44860, 1559, 37040, 63636,
-14703, 30040, 51579, 5257, 43486, 22877, 57925, 9647, 34745, 45089, 15953,
-58938, 28529, 1925, 52545, 35530, 19637, 46998, 11441, 62443, 26070, 41082,
- 7472, 53617, 25837, 39753, 3565, 48931, 22033, 63591, 12572, 39252, 26287,
-52279, 4198, 31181, 63162, 14816, 44608, 29198, 458, 53511, 35858, 17199,
-64234, 8589, 48552, 26218, 40109, 12070, 61719, 21826, 43414, 1533, 56008,
-30433, 16863, 49883, 37152, 10714, 63927, 22913, 47170, 6102, 41553, 26247,
-58205, 10647, 40308, 19601, 50812, 28780, 2657, 55873, 37093, 20055, 49455,
- 6618, 33736, 60102, 15134, 44639, 28074, 1391, 52766, 37571, 17911, 61915,
- 8923, 37942, 49830, 15689, 28860, 46687, 100, 65052, 28166, 17010, 54755,
-35922, 10982, 50016, 22014, 42060, 1984, 61788, 25756, 39979, 11931, 48448,
-22914, 63813, 554, 29383, 46694, 19933, 61240, 4641, 38618, 26995, 55169,
-10627, 40103, 21576, 57396, 3767, 34331, 48044, 19750, 62157, 8559, 40040,
-26176, 56284, 11499, 39369, 21934, 52508, 4502, 31929, 60917, 15066, 46197,
-29394, 2052, 54516, 37028, 17532, 58458, 10029, 41453, 26474, 51951, 483,
-31873, 60549, 7345, 40983, 23359, 62479, 11800, 40848, 21653, 55270, 1100,
-31870, 47535, 17635, 58411, 7432, 30271, 44136, 14475, 56232, 29161, 2437,
-50055, 37000, 18175, 65484, 9473, 42563, 27179, 51581, 1516, 33080, 60555,
-16257, 45248, 28685, 7898, 52120, 36970, 18183, 63148, 2088, 34173, 45234,
-21109, 57992, 4768, 39387, 27027, 54201, 10180, 42443, 22686, 57857, 12971,
-31224, 51293, 2554, 42745, 22984, 62921, 13725, 37399, 50595, 3609, 30482,
-64194, 12085, 45324, 28117, 16172, 57016, 36910, 4825, 46030, 26038, 53344,
-11745, 40712, 21721, 65301, 6869, 43522, 23302, 52962, 12497, 33630, 57361,
- 8584, 43969, 27331, 14802, 62560, 38145, 6220, 31171, 46595, 18815, 58085,
-10020, 38605, 27287, 48322, 4885, 61771, 20917, 34493, 45444, 10930, 51547,
-20839, 37661, 62652, 4524, 31491, 47272, 13499, 54690, 24461, 40958, 7069,
-48825, 22488, 65129, 13241, 32740, 47565, 3436, 55800, 24690, 39871, 10508,
-60366, 18107, 48891, 29003, 5797, 53417, 36322, 17414, 57183, 1619, 46267,
-20955, 34076, 60589, 9812, 44981, 19847, 33601, 65466, 630, 43002, 25712,
-53188, 13972, 33227, 57720, 5651, 45182, 18771, 32155, 60595, 9457, 43172,
-26250, 56405, 4393, 38630, 21713, 50676, 10600, 31604, 60806, 13404, 43778,
-23546, 56907, 3255, 33470, 46322, 18555, 54998, 8469, 41621, 26150, 59502,
-12750, 40559, 23007, 52246, 2153, 32113, 60152, 20264, 44898, 6110, 31832,
-63766, 19727, 47868, 8350, 41813, 25169, 59528, 13120, 38948, 22761, 62353,
- 5740, 38778, 26917, 52028, 13050, 35263, 56139, 19654, 42305, 5253, 64128,
-29452, 16964, 51307, 38001, 8563, 30846, 62247, 15233, 48134, 28737, 6883,
-53294, 35986, 16929, 61088, 27959, 5422, 49401, 35650, 20256, 59421, 10992,
-42428, 25280, 50495, 6652, 32410, 60282, 13367, 42987, 24701, 54572, 4883,
-34516, 46985, 14259, 65356, 25396, 39493, 3259, 52891, 19924, 33196, 58670,
- 9411, 45139, 19207, 30152, 48630, 6313, 60109, 18497, 29833, 45816, 9896,
-56328, 24483, 39568, 3329, 61773, 27183, 38298, 9077, 55906, 17281, 35877,
-49927, 5861, 29374, 57056, 15629, 44814, 35011, 10872, 62013, 24077, 41949,
- 3432, 55142, 26607, 38733, 10519, 56586, 18609, 35277, 51570, 5805, 29364,
-57623, 15356, 46425, 28297, 0, 64795, 37009, 17783, 50320, 8615, 34775,
-59933, 17157, 42655, 1266, 54353, 27185, 38384, 6586, 61930, 18849, 35164,
-50025, 9686, 40830, 23494, 59049, 871, 31761, 52906, 20295, 42470, 11544,
-63372, 26705, 39958, 2691, 51023, 34639, 19157, 57680, 5688, 47697, 20832,
-31962, 54608, 9135, 45928, 27555, 16600, 60435, 37954, 698, 29558, 54538,
-19173, 47240, 5900, 33106, 65406, 17296, 42919, 9320, 54942, 27152, 38834,
- 5155, 58532, 21146, 38333, 10233, 55482, 23397, 43488, 14458, 60421, 29411,
- 1903, 49855, 37467, 18702, 58875, 8530, 41166, 26446, 55522, 12193, 40135,
-24276, 56967, 5822, 32626, 45831, 19915, 60237, 3141, 38412, 27208, 52770,
-13720, 34316, 62884, 7236, 46098, 27571, 15126, 54169, 32683, 1042, 59285,
-36840, 20431, 49929, 12975, 35696, 62282, 7489, 31760, 52154, 18090, 43308,
- 9952, 63117, 21265, 31412, 47009, 4260, 55063, 24541, 40158, 10989, 58330,
-20836, 47253, 29248, 5115, 53980, 35610, 20069, 59422, 7592, 37765, 51847,
-14821, 32180, 45903, 3294, 63203, 26497, 38622, 13118, 55548, 21273, 43652,
- 5535, 58671, 31672, 16694, 50801, 37758, 7830, 44648, 24703, 56984, 13273,
-41058, 22690, 50685, 6036, 30972, 63414, 12243, 44780, 28079, 16055, 53909,
-37978, 2869, 31568, 59093, 18509, 46705, 6339, 34469, 63002, 16192, 44485,
-27823, 9099, 51836, 35552, 16427, 64480, 28211, 3748, 49242, 35188, 20402,
-63292, 11409, 42627, 25239, 54056, 49846, 15036, 29363, 56941, 3712, 35560,
-51571, 13950, 42222, 24408, 63025, 9412, 33310, 45920, 19819, 61611, 4822,
-33770, 52267, 15860, 44094, 27487, 7096, 56902, 35244, 17369, 47419, 11449,
-62143, 23418, 40332, 4142, 55166, 25256, 39533, 11334, 56991, 19893, 48780,
-29747, 7417, 60203, 37157, 18522, 51160, 12402, 43443, 25897, 63387, 955,
-34694, 47352, 18088, 61553, 8041, 39034, 26822, 55383, 10921, 32684, 46259,
-18466, 58914, 8640, 41818, 26603, 54681, 597, 43684, 21668, 60578, 9683,
-32516, 47755, 18778, 62212, 2033, 38374, 27124, 56090, 13675, 37791, 49231,
- 3589, 29799, 63446, 16922, 45585, 35264, 1719, 56244, 27805, 16721, 51400,
-35337, 3843, 61080, 24071, 45568, 14523, 35852, 54135, 7173, 29279, 59270,
-17408, 43867, 226, 30179, 55985, 16375, 43790, 27345, 8304, 63899, 36402,
-16932, 50748, 27987, 1240, 56950, 37926, 16868, 28872, 61292, 8870, 45140,
-28565, 15685, 54628, 37956, 132, 31669, 62140, 20626, 47551, 8876, 40317,
-26769, 64228, 12671, 40175, 23445, 50870, 3481, 30583, 56890, 13255, 47098,
-23613, 40987, 7403, 62334, 21428, 38919, 11114, 48899, 26907, 54766, 1605,
-40508, 23646, 63625, 11576, 48515, 19292, 32669, 59468, 7917, 41987, 25573,
-54355, 13, 38802, 21301, 61535, 14520, 36787, 50915, 6332, 29716, 64252,
-20355, 45054, 4824, 33220, 62121, 15736, 46241, 29148, 8791, 55582, 36924,
-15078, 50547, 28425, 331, 60714, 37993, 16859, 31543, 48854, 4414, 55839,
-26366, 41728, 10421, 49125, 21560, 61176, 3554, 33936, 45278, 17765, 58169,
-11571, 33136, 50397, 1244, 43727, 22532, 59855, 12446, 41226, 25400, 56342,
- 3055, 40201, 22038, 50630, 13144, 33935, 57508, 1654, 44142, 30388, 16765,
-64275, 37290, 3652, 51975, 28210, 16917, 57479, 36284, 2334, 48071, 23331,
-62744, 11983, 38958, 21975, 57669, 7273, 31455, 51514, 18592, 43173, 11295,
-61365, 25805, 39604, 1227, 49279, 22262, 64659, 13183, 34008, 43934, 5051,
-58327, 21019, 36274, 49911, 6635, 30087, 53772, 19221, 42299, 12358, 65248,
-25137, 48051, 3904, 40619, 21506, 62619, 13440, 36612, 52183, 2461, 29653,
-47682, 19107, 57824, 7625, 34638, 44319, 13282, 64618, 23925, 41691, 3803,
-46697, 22700, 60897, 8001, 35192, 44529, 19807, 55455, 11713, 41102, 25036,
-61362, 4603, 32333, 52974, 20096, 46753, 9776, 32520, 58901, 14443, 42543,
-24587, 52716, 3231, 31689, 65376, 14681, 46310, 27790, 8634, 51058, 37326,
-14097, 61405, 30180, 4833, 46642, 23785, 54026, 14294, 31150, 60949, 7980,
-44346, 28104, 15500, 62864, 37804, 3103, 52357, 23630, 43273, 11261, 64253,
-21436, 39347, 8096, 49090, 26042, 59416, 11774, 40448, 22545, 51052, 3172,
-33884, 62065, 13932, 42109, 24173, 48687, 85, 64794, 26897, 40418, 6567,
-52923, 18914, 31617, 54892, 10734, 42311, 22969, 61958, 5224, 33270, 51026,
-18421, 46409, 2281, 34159, 61138, 18130, 49141, 7520, 41079, 24943, 55529,
-12435, 42369, 21292, 49054, 4538, 57204, 29670, 16591, 38229, 51728, 9623,
-28771, 65082, 17656, 46113, 4906, 30778, 54082, 18817, 43006, 2357, 58939,
-26814, 38465, 13471, 56721, 28699, 714, 50542, 36027, 19504, 65445, 12915,
-43904, 32279, 7162, 60851, 37053, 15219, 50280, 27738, 2652, 64123, 37955,
-16702, 30578, 56414, 10091, 48699, 23722, 39840, 6168, 60028, 21707, 48006,
- 8758, 35312, 52132, 15263, 29863, 62572, 3657, 42700, 21787, 53197, 11670,
-30653, 64568, 2291, 47392, 18233, 32825, 59971, 9460, 43266, 24217, 54805,
- 860, 40381, 21992, 61537, 9556, 49218, 25087, 42308, 14497, 52954, 28705,
- 1255, 57101, 37499, 20196, 47288, 5426, 58959, 23586, 40729, 14139, 55240,
-29685, 8091, 50140, 37163, 18330, 59592, 2191, 36698, 61258, 9777, 33615,
-45269, 17038, 65014, 27584, 5677, 53081, 36537, 18257, 48570, 1883, 59732,
-26762, 41645, 10688, 55442, 20865, 35038, 46026, 76, 63887, 20514, 32130,
-44994, 5624, 52758, 19508, 32202, 58435, 9427, 44562, 17266, 31276, 62585,
- 569, 44291, 28468, 14928, 52493, 35741, 3526, 65252, 22924, 45694, 9537,
-32834, 54962, 14203, 40262, 24908, 59186, 4996, 32153, 52969, 19877, 42976,
- 1928, 64847, 26377, 39135, 6563, 53716, 22554, 38278, 11286, 62441, 18113,
-36185, 50173, 3944, 30225, 53828, 13875, 43410, 24019, 58813, 5867, 35261,
-49872, 16604, 28568, 60012, 9227, 41535, 24521, 55283, 13073, 33484, 47348,
- 7571, 64317, 25357, 39231, 11247, 48969, 21438, 57302, 2115, 32942, 44588,
-20103, 64621, 9831, 34872, 52710, 21419, 47824, 6550, 34503, 60559, 14587,
-45542, 28061, 2572, 55158, 38155, 15366, 31743, 59869, 6147, 46834, 27645,
-14670, 51502, 37374, 4124, 63180, 22116, 47914, 12946, 39232, 26837, 58004,
- 4790, 36089, 51128, 15101, 29987, 59365, 6788, 44398, 27890, 16572, 54256,
-37611, 6087, 60822, 27656, 16664, 50199, 35490, 3020, 55914, 24078, 42975,
-14489, 61215, 29683, 6960, 52021, 38011, 15171, 29094, 56837, 2492, 43078,
-23738, 51913, 13846, 33772, 65006, 7184, 47374, 23936, 41622, 11207, 56315,
-17356, 32890, 47942, 923, 57687, 24902, 38916, 13021, 54675, 21852, 49094,
- 3397, 41124, 24873, 65105, 11944, 40239, 22844, 57401, 7029, 40155, 21482,
-52782, 11639, 33923, 64503, 18656, 44826, 916, 32478, 58626, 15578, 48133,
-29084, 6179, 53350, 37545, 21021, 64679, 9780, 41761, 26046, 54126, 4716,
-38906, 23957, 61830, 9997, 48789, 18207, 36924, 63183, 7496, 28854, 52059,
-15110, 46657, 27389, 8944, 56565, 38174, 14721, 29948, 47461, 5951, 61751,
-25867, 38994, 9603, 51492, 18066, 31910, 56527, 535, 45837, 27601, 15706,
-63973, 38126, 3679, 30712, 55249, 14315, 43701, 23891, 57107, 8079, 35193,
-47193, 17520, 63013, 1894, 31733, 45334, 17173, 55585, 11353, 41020, 26144,
-58949, 875, 39008, 22614, 51488, 14616, 32663, 60367, 6662, 43421, 24118,
-54882, 9914, 39745, 21938, 63586, 14507, 32002, 53401, 746, 47975, 28386,
-16835, 58605, 35794, 10882, 49871, 30796, 18346, 63144, 1781, 42942, 26269,
-51088, 9971, 34345, 57322, 15729, 44925, 28081, 2355, 62725, 36630, 17784,
-48286, 5620, 55152, 22919, 38736, 12128, 60131, 26514, 41433, 5274, 53956,
-18176, 32989, 57726, 1812, 44243, 27497, 15677, 64337, 37383, 9976, 50627,
-21816, 40875, 258, 56989, 35078, 18136, 49873, 9400, 33765, 59291, 13293,
-40835, 25326, 55412, 4622, 32696, 46592, 18570, 56678, 1448, 38710, 27261,
-60702, 13242, 43765, 21765, 52797, 4514, 32675, 57402, 15872, 45822, 30107,
- 8606, 59769, 37315, 20851, 49429, 12930, 34487, 64422, 1118, 45915, 27751,
-16612, 58177, 37623, 11120, 52864, 23252, 41375, 9148, 65269, 29885, 15900,
-51328, 35346, 742, 62120, 25798, 46561, 11570, 39162, 22387, 63321, 2573,
-45316, 34959, 20065, 57800, 6287, 34943, 44651, 21334, 55613, 8646, 39312,
-23407, 63490, 11652, 49029, 24696, 41895, 6351, 53881, 17350, 37620, 59637,
- 8089, 29004, 47608, 17515, 57005, 1761, 30325, 51648, 21162, 41052, 11811,
-55127, 23405, 39480, 8534, 62178, 26167, 43677, 936, 58503, 18767, 33656,
-50734, 10796, 43461, 25491, 65277, 1461, 40864, 24657, 56543, 14120, 34328,
-45898, 7285, 55634, 23748, 40320, 13626, 58598, 22073, 38391, 3981, 51859,
-29561, 13462, 64388, 35411, 18301, 47017, 4697, 55743, 27242, 38425, 12721,
-62507, 30708, 6923, 50434, 35586, 18558, 65174, 11124, 42883, 26593, 52706,
- 738, 34245, 61437, 13063, 43022, 24407, 56569, 4792, 29927, 47388, 19892,
-41381, 25599, 58952, 322, 31272, 49481, 13558, 34466, 57845, 8343, 42491,
-24979, 54198, 13186, 38888, 23130, 63294, 3903, 30833, 48132, 14662, 53037,
-28452, 8429, 60110, 37191, 15713, 49914, 27846, 2921, 64456, 37440, 20885,
-48311, 8066, 54396, 25658, 41254, 12146, 59529, 24100, 40358, 6498, 56536,
-17639, 34982, 50098, 2776, 30727, 61222, 18601, 43844, 6667, 50991, 29426,
-15673, 56484, 36992, 9332, 47499, 23529, 58422, 14963, 33847, 51539, 4458,
-42844, 25466, 56304, 12555, 40259, 24330, 63697, 7686, 39482, 21909, 55191,
-11978, 42573, 25774, 64808, 886, 33044, 51729, 18846, 43085, 4779, 61967,
-29398, 15740, 50688, 36887, 432, 54397, 23194, 42244, 14049, 62851, 29884,
- 8194, 50720, 37078, 17113, 56626, 4755, 31924, 46460, 13314, 62273, 24773,
-39793, 4113, 57115, 19897, 30294, 52032, 7745, 43377, 23682, 64466, 12222,
-41627, 21512, 53323, 2809, 33519, 58802, 16773, 44005, 30458, 7727, 56515,
-25122, 49505, 11053, 41574, 21635, 63789, 2040, 34515, 52579, 18611, 47327,
-11162, 33588, 63390, 997, 44360, 29671, 14713, 52929, 37175, 8412, 64680,
-25449, 40738, 11768, 48574, 22170, 58384, 4047, 33074, 46360, 18308, 64164,
- 9169, 33671, 46176, 18219, 60449, 5450, 30553, 44472, 15951, 53259, 27981,
- 3063, 59621, 35737, 19450, 51735, 9808, 41864, 22019, 63538, 6207, 32511,
-46627, 17438, 60634, 9478, 39079, 26658, 56394, 2016, 34286, 51575, 14238,
-42553, 26417, 62784, 2953, 46698, 28900, 15966, 56534, 37387, 7368, 53518,
-25136, 42564, 10808, 63124, 24318, 40408, 2075, 50887, 17166, 30186, 57672,
-12916, 45087, 28947, 8215, 55973, 35670, 17263, 52356, 621, 31990, 44955,
-21207, 54482, 5603, 35892, 60547, 17139, 31193, 48636, 1057, 65207, 23639,
-41750, 11231, 55032, 20231, 33851, 46504, 4551, 60394, 23955, 40128, 13597,
-50941, 29684, 6023, 59718, 36051, 18899, 50501, 9938, 42147, 27209, 53509,
- 4615, 31945, 59995, 20175, 42384, 10516, 50619, 21306, 33507, 60930, 4166,
-47206, 18256, 32594, 63910, 7404, 44200, 25674, 55000, 10119, 38687, 21225,
-56629, 1754, 35722, 49999, 16217, 30535, 59796, 4836, 45791, 25007, 39271,
- 8811, 62262, 30273, 15221, 50763, 37651, 2858, 56047, 23528, 45563, 9346,
-33943, 58033, 13873, 42095, 22704, 63648, 6004, 31123, 52205, 20612, 41977,
- 8189, 56105, 26312, 39379, 11736, 64153, 25530, 43361, 488, 51147, 19614,
-33478, 55872, 10229, 44821, 30390, 20833, 60494, 7087, 48736, 34658, 19012,
-52614, 3975, 32799, 58157, 13989, 43200, 24989, 65116, 7167, 31131, 51956,
-20176, 42510, 2081, 61908, 30538, 15157, 50129, 35676, 7322, 63457, 24026,
-41702, 11323, 53478, 21064, 38303, 6251, 62516, 26646, 48355, 10630, 39515,
-18837, 63907, 28385, 2626, 50046, 34824, 17473, 56601, 5730, 44488, 30366,
-14650, 60652, 35829, 7778, 53647, 24689, 45126, 2651, 30616, 57457, 14429,
-44400, 27945, 4329, 59103, 37700, 17977, 50444, 6721, 33878, 59641, 20935,
-41472, 8384, 54349, 25605, 48716, 11041, 31601, 60187, 18243, 46661, 142,
-32343, 61661, 15307, 45609, 29217, 3953, 57714, 35394, 14441, 45937, 24010,
-64276, 4636, 32909, 44766, 19763, 52656, 10318, 34011, 61235, 19652, 45424,
- 6607, 33840, 63503, 18077, 48465, 4578, 41580, 22354, 52140, 12456, 34565,
-54727, 17094, 41344, 5286, 60417, 27022, 38314, 13279, 54125, 21120, 43862,
- 4760, 59681, 29456, 16766, 50193, 37578, 280, 62244, 25918, 43573, 10207,
-50180, 19302, 36392, 57755, 7122, 31753, 45492, 20645, 59350, 10324, 41680,
-25951, 54079, 2241, 40816, 21503, 57795, 13406, 37205, 49370, 3140, 29266,
-59731, 20954, 41313, 9809, 50837, 18576, 31685, 63781, 6578, 46292, 17260,
-31978, 54835, 8802, 62841, 10286, 32860, 46814, 15364, 55453, 23870, 40192,
- 3083, 64199, 20180, 33809, 47413, 6440, 57258, 18117, 33100, 44313, 11294,
-61150, 25123, 40337, 2205, 57438, 20753, 34209, 45989, 10039, 56266, 18371,
-33055, 43937, 6283, 61385, 27923, 15296, 51432, 38072, 2186, 32593, 63792,
-19783, 43592, 10948, 53771, 25743, 41019, 8933, 57404, 24480, 39212, 11374,
-62476, 23294, 39182, 387, 48926, 21249, 60442, 12176, 31922, 44944, 2895,
-63938, 24416, 38796, 10676, 48991, 21256, 59588, 1618, 33855, 46280, 16916,
-51987, 29538, 3348, 61180, 36547, 18265, 47215, 7551, 55820, 26540, 39046,
-11606, 59192, 21612, 46451, 7002, 32728, 57120, 19666, 43213, 10218, 60158,
-27207, 38583, 2841, 55523, 25234, 47123, 11628, 29715, 61503, 19494, 42612,
- 1453, 54335, 29894, 14983, 49865, 37259, 9006, 62841, 18148, 34627, 47357,
- 547, 57531, 25062, 39803, 8737, 61760, 26476, 39791, 11166, 49057, 22432,
-65270, 1512, 34510, 46465, 17853, 60914, 5406, 32971, 45855, 14352, 54806,
-25170, 41583, 7792, 60086, 22030, 39796, 12186, 58088, 25055, 47476, 5045,
-32157, 56728, 15525, 46074, 28581, 293, 61555, 37074, 19542, 52651, 8162,
-41722, 26830, 54219, 13104, 40591, 23300, 57532, 1117, 48214, 34976, 19759,
-63007, 9200, 37551, 50008, 15191, 31083, 61877, 5063, 43650, 25990, 54370,
-11949, 40246, 24394, 59237, 4127, 34298, 52941, 19991, 44393, 10478, 32236,
-61207, 19094, 48819, 6582, 38800, 23410, 59828, 10552, 34984, 49909, 14212,
-30665, 61610, 4093, 40966, 22599, 51636, 12519, 31041, 59394, 20482, 46099,
- 7360, 33346, 62185, 20266, 48487, 2655, 39223, 26853, 64974, 11366, 29806,
-47003, 19236, 61197, 3826, 39611, 26229, 51246, 12839, 37355, 59399, 6978,
-28457, 45273, 13866, 57017, 25129, 40106, 2885, 51957, 17073, 29910, 62940,
-10916, 42719, 25514, 56267, 7797, 33790, 47564, 20986, 64955, 2390, 39716,
-25238, 48157, 12126, 56268, 21658, 39855, 347, 62730, 29527, 14862, 51914,
-37199, 7954, 57267, 23817, 42122, 12090, 54237, 23705, 39868, 3037, 61489,
-19670, 31798, 45801, 11428, 65012, 24877, 40411, 7420, 52492, 18969, 32616,
-56444, 12011, 43362, 22286, 51945, 4051, 32414, 60071, 16991, 43956, 27982,
- 6714, 65514, 37707, 15570, 53815, 28319, 4261, 49680, 35778, 18059, 54877,
- 1066, 33839, 61533, 14253, 42616, 22490, 51806, 3633, 33139, 57060, 14878,
-44757, 27973, 8062, 61928, 37662, 15563, 50197, 27637, 2465, 62876, 38190,
-15411, 30725, 47043, 8573, 55378, 25229, 38680, 12120, 60179, 23193, 46563,
- 3246, 29330, 55189, 15798, 48596, 27484, 6001, 57984, 37681, 20679, 53977,
-10013, 43151, 26336, 59533, 3148, 34157, 47488, 14783, 54664, 23272, 40820,
- 959, 58817, 29566, 16156, 50865, 36440, 7602, 54698, 25258, 42647, 10509,
-59006, 19951, 37383, 50044, 4418, 28831, 62305, 20066, 42112, 10031, 52065,
-34363, 18830, 64095, 6028, 46548, 20910, 36444, 53688, 9564, 29144, 61481,
-20135, 44385, 1350, 32575, 56294, 14813, 43972, 27745, 3599, 63768, 37709,
-13271, 52597, 24588, 41366, 7841, 53938, 22408, 40378, 12194, 60998, 26172,
-38947, 1206, 48372, 21623, 56432, 12482, 40004, 23482, 62934, 3318, 36391,
-49504, 14685, 28720, 58129, 358, 41962, 24743, 55430, 11200, 38432, 27237,
-64869, 2809, 46684, 19214, 30257, 61623, 9304, 42760, 24238, 57621, 2117,
-39595, 22682, 51433, 12414, 32538, 64083, 8107, 46496, 28086, 16051, 54347,
-34803, 5712, 60189, 24476, 42251, 13025, 53580, 28167, 1583, 63010, 36543,
-17392, 49837, 5504, 32505, 60252, 14206, 43645, 22845, 53432, 7601, 33954,
-63246, 17640, 45838, 8707, 32774, 56748, 15024, 45434, 28402, 4115, 57871,
-37538, 20667, 53359, 2354, 43351, 23050, 58197, 24951, 39378, 5865, 51251,
-19030, 35517, 59438, 9143, 29097, 53115, 14952, 44902, 27829, 974, 62405,
-35973, 19509, 50486, 7831, 37790, 54754, 16462, 29277, 44440, 4920, 65149,
-28408, 15324, 51925, 36006, 1181, 46546, 23180, 57374, 9618, 31581, 45149,
-16714, 58572, 27760, 5120, 50506, 35353, 18003, 62108, 1414, 33274, 47073,
-19961, 55428, 4266, 33560, 45707, 13886, 65028, 25757, 41609, 7453, 53893,
-24507, 40766, 13005, 57387, 22212, 46323, 4921, 35215, 62860, 14619, 29664,
-54302, 7046, 44609, 27733, 14537, 58381, 34890, 9994, 44567, 20731, 52654,
-31203, 2378, 63314, 35343, 16027, 49629, 28291, 4043, 53030, 36321, 13233,
-65423, 23618, 47745, 5540, 40938, 21927, 52681, 13643, 34741, 58419, 6344,
-41231, 23449, 52128, 10431, 33774, 64943, 20780, 45954, 3627, 33124, 59737,
-21235, 41532, 10136, 51296, 30236, 16177, 55904, 36047, 5511, 49770, 19742,
-31841, 57529, 7126, 44272, 19256, 31577, 55057, 8432, 41844, 24150, 58514,
-12052, 39080, 22501, 62037, 3789, 31484, 50385, 15400, 45823, 28051, 2190,
-54586, 36790, 18036, 62629, 7490, 44055, 20695, 31983, 47766, 12114, 56245,
-17401, 33465, 44770, 2653, 62515, 24334, 38607, 6152, 59325, 17241, 31164,
-51632, 11929, 42436, 25512, 55207, 2215, 39375, 26696, 58212, 11055, 38637,
-22902, 51254, 1510, 34206, 64408, 18550, 48352, 12571, 39834, 23517, 57582,
- 592, 33877, 46391, 14767, 64070, 29052, 3913, 54060, 36464, 16358, 50787,
-28091, 1405, 57345, 36754, 19370, 49465, 8852, 35000, 65228, 18514, 44813,
- 64, 37398, 54304, 15045, 28578, 56564, 4539, 42314, 23358, 53201, 14504,
-33309, 58196, 6795, 42274, 22790, 53000, 10303, 33255, 63915, 18800, 43376,
- 2129, 55088, 32183, 16973, 50538, 35090, 8382, 63352, 20665, 32950, 45808,
- 5705, 58640, 18596, 32839, 44971, 1445, 54708, 17127, 31138, 44062, 10438,
-60718, 28842, 14792, 51434, 37277, 5379, 59065, 23273, 45833, 13441, 34279,
-54861, 6269, 44227, 27834, 16562, 64826, 34721, 2087, 49427, 28945, 16352,
-58624, 37292, 8370, 49779, 27568, 16461, 57323, 37420, 4140, 49423, 28688,
-14722, 60918, 36732, 1222, 46956, 24087, 64269, 9784, 41294, 21429, 55384,
-13535, 46368, 29387, 423, 51699, 36245, 19345, 61764, 8565, 46324, 26774,
-39077, 12404, 60606, 23591, 49196, 6902, 30283, 46365, 18122, 64993, 10463,
-29891, 46245, 18053, 60055, 4701, 32358, 48226, 20966, 58834, 6381, 31553,
-45639, 20178, 56760, 11818, 39496, 26863, 63689, 1110, 48907, 21065, 41586,
- 6436, 52427, 34807, 18552, 62308, 8520, 44631, 37894, 12384, 30049, 64062,
-19277, 46183, 424, 34938, 51324, 12274, 29878, 64939, 16809, 45108, 28606,
- 6891, 55943, 35218, 12682, 46225, 23724, 63019, 4815, 41376, 21916, 60298,
-13589, 36010, 51354, 1710, 29858, 64757, 12087, 45494, 27382, 15383, 55720,
-37362, 318, 47754, 25497, 60141, 12086, 39200, 22353, 51611, 2113, 33913,
-56878, 17337, 47806, 10457, 34660, 64849, 16288, 47287, 29325, 5510, 53391,
-36248, 15921, 58760, 28806, 6873, 50137, 36036, 19380, 65354, 2988, 31383,
-48736, 20274, 54592, 9761, 40772, 26942, 59988, 5478, 36127, 50807, 16194,
-29125, 54931, 9158, 43175, 22843, 60550, 5903, 34573, 52786, 20192, 43263,
- 7884, 59508, 25810, 40586, 12837, 49080, 21822, 56127, 6305, 32345, 45547,
-18343, 53031, 9893, 33468, 62084, 17047, 44426, 27547, 3529, 57327, 37121,
-20474, 51022, 11047, 43347, 22419, 65505, 3009, 37842, 49268, 16136, 30949,
-53342, 8424, 42476, 22510, 56255, 11834, 39278, 26451, 64885, 129, 32409,
-50360, 14809, 44879, 27870, 4650, 60744, 36692, 19691, 53880, 1655, 36171,
-49663, 15938, 30546, 64818, 7666, 47620, 25801, 40114, 12507, 14303, 35970,
-61699, 1408, 29611, 49716, 13793, 43333, 24267, 65417, 5243, 37160, 49804,
-16824, 31211, 59980, 9477, 42263, 23411, 56452, 4189, 33886, 48656, 13767,
-58980, 25387, 40965, 7331, 55055, 24405, 39900, 13396, 62484, 21494, 48586,
- 3596, 34052, 54614, 13029, 42887, 23813, 64778, 7227, 37899, 49337, 12548,
-29887, 59073, 20967, 42321, 8399, 52359, 29815, 16569, 58250, 35851, 5110,
-50227, 28293, 15805, 55994, 38043, 1074, 30025, 61028, 16516, 48248, 27781,
- 8854, 51144, 37120, 16141, 61751, 30845, 119, 49975, 37103, 19635, 64519,
- 5168, 46793, 29306, 14969, 56763, 36707, 8441, 51185, 22478, 43518, 12001,
-61248, 25973, 39919, 1651, 56618, 18030, 35140, 50284, 8746, 30444, 63172,
-18052, 45402, 774, 31400, 61006, 16155, 44331, 27405, 7480, 57738, 37594,
-18516, 50606, 12373, 31605, 54715, 3137, 43162, 22762, 63579, 13368, 32603,
-44952, 1152, 60428, 27922, 16095, 53607, 36595, 4463, 47505, 26109, 62442,
-14126, 33447, 44510, 400, 52052, 19987, 33759, 56482, 9919, 43356, 19125,
-65338, 29860, 6406, 52180, 35020, 20194, 48168, 10832, 59907, 26665, 39658,
- 3710, 49801, 22136, 65065, 6881, 38773, 27148, 48768, 10614, 55790, 19011,
-33248, 45742, 3854, 61116, 22688, 40003, 8351, 48839, 24536, 65535, 12994,
-41673, 21376, 56059, 5475, 31871, 45260, 15091, 58830, 30094, 6964, 44207,
-26490, 53895, 11062, 30766, 60411, 18313, 48202, 7901, 39828, 25072, 58383,
- 9270, 48408, 21510, 41312, 12756, 62695, 26004, 43124, 4734, 52535, 17062,
-31612, 58487, 10287, 41794, 19349, 50721, 31747, 6115, 63409, 36362, 19719,
-49476, 10090, 43521, 25664, 60622, 1387, 37415, 49761, 15937, 31030, 57080,
- 5142, 46517, 23447, 38873, 11392, 60210, 29432, 15431, 53036, 37643, 219,
-48378, 26158, 61257, 12882, 41405, 24840, 52559, 9325, 29530, 63708, 20663,
-47901, 4100, 35009, 55646, 16955, 44688, 27350, 8739, 64372, 35407, 18881,
-49980, 2969, 30490, 61547, 15568, 46489, 27323, 9069, 56210, 36475, 19027,
-50760, 4890, 33102, 63357, 14959, 44939, 29991, 168, 54016, 35059, 12967,
-62151, 23206, 43010, 6737, 50849, 29282, 16656, 57482, 35065, 8134, 49889,
-26518, 39470, 5720, 62481, 18420, 32292, 48021, 7534, 59127, 25368, 39625,
-11430, 56390, 21518, 48616, 3393, 32161, 59088, 14899, 44245, 27509, 2197,
-53898, 36427, 20546, 58275, 8605, 35122, 49951, 20157, 39811, 783, 54663,
-25791, 41876, 9559, 64636, 17399, 35007, 52830, 4505, 42055, 23697, 55173,
- 9667, 38426, 22307, 60834, 14484, 32536, 47519, 1626, 55999, 20799, 33269,
-47379, 4758, 58868, 17436, 31398, 52626, 9208, 42527, 24603, 57409, 5358,
-39050, 22097, 49001, 10504, 61738, 25841, 41779, 3018, 51411, 19557, 33084,
-56230, 11754, 42104, 26345, 47616, 7028, 57310, 18755, 34310, 43920, 3621,
-61105, 18347, 33638, 51582, 9663, 45998, 17899, 32945, 58243, 7095, 43066,
-25843, 62955, 13928, 31502, 45692, 3907, 53253, 25679, 39243, 7676, 57724,
-23315, 49005, 10313, 40661, 26254, 61859, 1792, 44589, 20957, 33952, 55305,
-10387, 44080, 17895, 33910, 59527, 6680, 43427, 22595, 52867, 11003, 32589,
-61909, 19137, 47176, 1929, 40648, 25848, 64707, 10012, 30441, 51120, 15898,
-45281, 28243, 1379, 56281, 37905, 15144, 31221, 63855, 3936, 47474, 28194,
-16468, 61252, 36545, 578, 50006, 28897, 15476, 55500, 37997, 5375, 30329,
-63420, 14905, 48365, 28695, 1867, 53455, 35572, 16443, 56810, 29124, 6800,
-50096, 35292, 14075, 62721, 24758, 46187, 3615, 33961, 57405, 18049, 42962,
- 9444, 51706, 29614, 16319, 59105, 37523, 6715, 51189, 24367, 43325, 11491,
-62420, 26359, 39628, 9033, 52336, 19724, 34761, 59439, 4543, 41821, 22036,
-52109, 38790, 26487, 56548, 11789, 41943, 21912, 52176, 4032, 32240, 57570,
-12673, 42059, 22361, 54691, 1981, 37012, 51355, 14341, 29730, 62830, 11060,
-46912, 24423, 38558, 656, 63553, 21356, 47963, 11832, 34191, 53181, 5760,
-43307, 26000, 57874, 10246, 40594, 19146, 60866, 29574, 212, 50875, 35848,
-15846, 56889, 27596, 3881, 49974, 36669, 14535, 61879, 27623, 1998, 49304,
-37282, 12832, 59728, 22876, 46171, 9176, 34821, 64223, 20122, 45543, 6743,
-33974, 55016, 21007, 42341, 2645, 56976, 25302, 41028, 11671, 59425, 22037,
-40700, 7977, 54150, 25608, 40474, 11725, 60757, 24861, 39962, 1128, 58715,
-19247, 35681, 52268, 6625, 31421, 46722, 19334, 63782, 9758, 41668, 25492,
-55304, 3595, 40050, 21196, 59494, 14295, 33539, 51620, 4687, 47717, 28794,
-15302, 55121, 35616, 1715, 64108, 27773, 16627, 49390, 37179, 6397, 59066,
-27915, 15746, 52263, 37154, 9108, 47703, 23979, 64798, 11746, 41919, 21845,
-56203, 3010, 37408, 50510, 16308, 29914, 64263, 6673, 46522, 28213, 14405,
-53473, 36508, 4719, 59080, 27334, 16390, 49572, 37875, 1235, 63493, 27713,
-15973, 53854, 37853, 9212, 31237, 49097, 14246, 59169, 24782, 42412, 804,
-53316, 22910, 41213, 12280, 63850, 26864, 38723, 7081, 53779, 18304, 35243,
-60280, 417, 30316, 46637, 16613, 52430, 28334, 8888, 63173, 36734, 19826,
-49561, 2420, 34520, 62460, 20979, 45647, 5833, 40476, 26080, 52530, 1905,
-32567, 64904, 16634, 44558, 28728, 5763, 59269, 36220, 20260, 54055, 8521,
-33514, 45990, 21118, 63828, 2755, 38765, 26325, 48304, 12365, 55765, 25404,
-41284, 2211, 59683, 17451, 34617, 51578, 13520, 30141, 64478, 7306, 44910,
-28072, 13420, 52495, 35584, 17859, 62189, 4040, 48230, 26742, 40369, 7509,
-64583, 21268, 39105, 10213, 54210, 22333, 38860, 4286, 57394, 33632, 17313,
-50072, 7187, 32560, 59246, 14021, 45774, 28015, 736, 61170, 38074, 15749,
-31549, 54466, 4805, 43359, 24127, 57742, 12828, 33722, 52662, 1112, 42742,
-24534, 62436, 10128, 40313, 23146, 48148, 13545, 56521, 28508, 5809, 50131,
-37760, 18629, 59602, 9362, 46641, 20525, 33804, 63906, 3325, 41328, 22251,
-52196, 13968, 32697, 60839, 2447, 42785, 25462, 56273, 12276, 40399, 23367,
-52031, 1697, 31516, 64547, 16162, 44596, 27610, 6433, 52730, 36794, 19725,
-62688, 9236, 33655, 50250, 13680, 42033, 25364, 63535, 5702, 32704, 52964,
-17209, 43616, 10879, 61529, 21213, 32895, 51237, 2922, 46012, 19791, 30635,
-62581, 11206, 43696, 25333, 58979, 5305, 36203, 49594, 16105, 29713, 65494,
- 8867, 44098, 27530, 12813, 54065, 36761, 20602, 62937, 2518, 35476, 49457,
-13071, 30372, 61020, 19373, 42211, 1369, 53189, 31209, 16633, 57131, 38070,
- 7996, 30363, 65363, 18055, 48619, 585, 39219, 23417, 53636, 10806, 32647,
-63380, 20768, 48250, 8843, 40523, 26429, 54820, 4251, 31367, 63819, 13008,
-42031, 24775, 51060, 5326, 34571, 55708, 19266, 42130, 10969, 60735, 21097,
-33291, 45382, 663, 63602, 18011, 33371, 46932, 12017, 56398, 17481, 31996,
-46204, 4676, 62445, 28560, 15641, 51487, 35929, 557, 64518, 29139, 15414,
-50172, 36446, 3795, 57332, 24912, 44924, 14522, 35773, 55940, 4854, 32804,
-47387, 17728, 61208, 11494, 40871, 26480, 58867, 5508, 43588, 22243, 50934,
-13480, 34764, 55570, 7519, 40610, 24974, 58646, 11467, 48501, 21738, 41816,
- 7200, 59868, 24584, 45691, 12775, 33994, 55047, 8753, 42021, 23935, 58797,
-12068, 40021, 25670, 60792, 715, 39088, 21323, 54922, 12639, 43801, 27003,
-61380, 7124, 31408, 46692, 20359, 63571, 1389, 39752, 22639, 55907, 13785,
-34850, 49431, 3070, 30073, 59845, 13622, 42602, 23962, 56021, 581, 31899,
-46717, 17311, 63350, 7149, 19416, 42863, 2547, 53731, 30253, 16444, 63751,
-37814, 7633, 46336, 25142, 62072, 10555, 30254, 45887, 16593, 60580, 27952,
- 3663, 49996, 35770, 20306, 55554, 7516, 42646, 26796, 58193, 15183, 31055,
-45368, 2594, 61284, 22241, 38547, 14598, 54865, 30793, 6768, 49540, 37174,
-13682, 63363, 23059, 44593, 8795, 34759, 59911, 16944, 31154, 46388, 7580,
-53250, 28489, 16770, 63227, 38152, 6218, 29312, 55411, 18562, 41428, 3364,
-51759, 29022, 15481, 61951, 37147, 9546, 49762, 28076, 16762, 65104, 36345,
- 5765, 53348, 23564, 47524, 15179, 35543, 63082, 3523, 30364, 47912, 17377,
-54539, 9354, 30462, 46813, 13624, 62062, 24308, 41017, 2608, 53095, 29302,
-15512, 58843, 35437, 11941, 47265, 26701, 54591, 6633, 38887, 24450, 65132,
-12259, 43294, 22476, 58150, 5659, 31107, 53406, 20616, 45592, 8306, 33512,
-62395, 12835, 42600, 23250, 55332, 2463, 33493, 45904, 18050, 58550, 5197,
-38684, 27108, 52308, 12641, 31378, 61178, 7565, 48101, 22125, 40516, 11841,
-59949, 24830, 40501, 1908, 56009, 19572, 47580, 30978, 7238, 57849, 36371,
-19560, 46831, 10134, 61009, 26233, 40866, 3086, 47983, 23189, 56500, 5886,
-38262, 17126, 62116, 31471, 9089, 50615, 35287, 18505, 58029, 3142, 47235,
-25931, 40751, 10625, 49708, 22050, 57769, 13759, 34643, 44091, 3470, 60935,
-24646, 41003, 13163, 52364, 28686, 8005, 56826, 37214, 17210, 50612, 9975,
-33982, 61633, 14038, 42381, 23187, 55810, 3500, 32224, 51453, 15206, 46764,
-28641, 833, 61800, 35747, 18073, 51263, 9847, 32430, 56706, 19935, 42481,
- 6773, 61067, 22758, 39193, 9662, 54068, 27105, 41015, 4829, 58687, 21910,
-40181, 11030, 48459, 24203, 57581, 820, 39417, 21628, 58537, 9902, 42764,
-25510, 52537, 14116, 34071, 55706, 2353, 43326, 25444, 60526, 12136, 34790,
-47511, 18753, 65444, 1748, 35511, 44189, 21127, 53418, 9049, 32069, 57475,
-19261, 43647, 6429, 50980, 29921, 16781, 63562, 37671, 8348, 49391, 27684,
-16988, 59206, 37354, 7098, 51363, 20674, 32032, 60794, 2565, 44184, 20376,
-34684, 65378, 11532, 42486, 25119, 51244, 1621, 31058, 56834, 13301, 42157,
-25713, 53936, 5489, 29827, 58876, 16047, 45652, 34632, 9450, 49153, 21577,
-62888, 4420, 33989, 45014, 19615, 55067, 9266, 34007, 43805, 12965, 60892,
-23285, 41184, 214, 57545, 28547, 16065, 52701, 35485, 3057, 47331, 23221,
-60395, 12308, 40458, 26790, 55020, 1763, 47371, 29823, 15291, 58570, 37406,
- 7871, 54299, 28220, 16483, 49963, 38020, 62, 30371, 56220, 13512, 42973,
-24462, 58149, 3319, 35554, 51346, 18315, 42391, 6766, 59910, 29547, 15295,
-50438, 37582, 5733, 56153, 23012, 44881, 9873, 36192, 63733, 14593, 27997,
-50432, 4125, 43491, 23075, 58803, 11265, 37737, 50548, 14895, 31045, 62161,
- 5121, 44104, 28258, 16083, 58495, 36784, 2024, 52951, 24192, 42598, 14394,
-57947, 21848, 38292, 1254, 54102, 23457, 43895, 14419, 62673, 29292, 2836,
-49700, 36614, 17122, 58559, 8292, 30424, 53858, 20637, 39643, 3711, 49430,
-23267, 61157, 9525, 41438, 26869, 49148, 7220, 57418, 22049, 41042, 12815,
-54189, 25489, 46493, 6217, 41652, 22048, 62659, 13146, 31510, 51964, 7845,
-42450, 20874, 63325, 29308, 3004, 53734, 36364, 19765, 49481, 8514, 36211,
-65139, 16103, 29734, 52818, 2393, 42810, 23061, 62853, 14545, 33232, 52178,
- 3312, 45913, 28224, 16640, 64637, 36586, 1101, 51686, 27446, 16016, 62027,
-37821, 4517, 46045, 21929, 53914, 7994, 41999, 27264, 64268, 10845, 49169,
-25549, 38799, 2612, 52889, 17545, 34892, 54819, 10605, 42137, 24415, 58040,
- 5762, 31032, 52816, 18680, 42977, 9637, 65303, 20571, 33517, 53971, 5136,
-45143, 19231, 36087, 58809, 10612, 29579, 51484, 33259, 45952, 21016, 59545,
- 8658, 34974, 50220, 15367, 28557, 58337, 156, 42677, 21957, 52864, 5843,
-34418, 57022, 19200, 43897, 9139, 37502, 64055, 16429, 29440, 53865, 3337,
-34913, 48588, 11493, 64962, 24859, 41103, 8801, 56456, 26937, 39270, 1692,
-52823, 18279, 32695, 58533, 4506, 46278, 28783, 15093, 54080, 37159, 2630,
-64668, 24619, 44508, 13428, 34288, 57238, 560, 43280, 22143, 50975, 9562,
-34066, 57955, 13151, 43184, 23249, 59950, 1434, 32660, 52991, 18300, 45618,
- 4611, 32521, 58056, 14257, 44128, 28003, 1844, 52384, 37407, 13078, 57030,
-24008, 44960, 6439, 33948, 64718, 20346, 43250, 4953, 55532, 29969, 16529,
-49887, 36352, 8084, 60879, 24302, 45296, 328, 41061, 21569, 62542, 11190,
-49064, 26532, 40607, 2444, 51289, 19144, 33410, 61940, 11302, 42601, 17130,
-50393, 29627, 34, 57507, 36031, 14268, 48335, 24961, 61454, 7261, 40112,
-22201, 50743, 13997, 33654, 62618, 892, 45916, 23846, 40565, 15122, 57331,
-29069, 3583, 52454, 37959, 16038, 30218, 63099, 8837, 45274, 27711, 14736,
-54200, 38110, 2722, 29145, 59418, 14726, 42376, 23752, 53559, 7974, 38409,
-21298, 64468, 13452, 49183, 27188, 39485, 2386, 54944, 21951, 39442, 12966,
-60777, 27173, 42085, 8666, 49100, 23170, 64758, 4849, 38909, 26679, 48668,
-10282, 55425, 18736, 35318, 49985, 4434, 30799, 64526, 16310, 46513, 27549,
- 170, 60581, 36279, 20272, 47086, 4936, 54268, 25903, 39149, 11822, 63404,
-22335, 42424, 7685, 56977, 25711, 40689, 11823, 48523, 25158, 59922, 3465,
-34039, 45198, 15884, 52407, 28809, 433, 65419, 36183, 20027, 50392, 11819,
-43768, 26289, 63060, 2899, 32952, 52769, 13893, 43000, 25989, 53718, 8506,
-33321, 64056, 19054, 45865, 3240, 31477, 49155, 17529, 62664, 8247, 30951,
-45392, 20932, 58248, 6093, 39337, 23389, 51304, 11675, 31420, 62014, 17891,
-48162, 2873, 41361, 26123, 62814, 12866, 39244, 22616, 53218, 1828, 35843,
-56637, 15062, 30764, 45636, 3700, 64584, 28664, 16186, 49895, 36088, 9377,
-53785, 18368, 31748, 58054, 5108, 47517, 29133, 16032, 53073, 36401, 7244,
-62690, 23643, 43716, 10290, 50553, 18101, 31313, 64797, 635, 42197, 23914,
-53397, 14464, 37546, 57019, 6552, 28656, 50082, 15747, 35731, 63754, 3561,
-46073, 27880, 16954, 55516, 38046, 7808, 31637, 48518, 18833, 65156, 10157,
-39155, 27186, 56033, 5230, 38273, 21468, 48897, 14149, 61189, 34960, 4355,
-44686, 25639, 64871, 12229, 40668, 22775, 52340, 6221, 34433, 63187, 14577,
-45190, 27372, 7671, 52245, 34275, 19648, 63379, 9491, 32542, 48320, 21124,
-55514, 843, 39073, 23530, 64624, 14162, 47736, 28690, 3341, 58406, 37543,
-16511, 49715, 29322, 7358, 53968, 36673, 15762, 60798, 27737, 2417, 49288,
-35384, 20067, 55879, 8358, 46434, 25226, 40832, 11750, 61629, 21791, 48911,
- 6835, 38889, 27220, 65187, 10939, 49252, 21184, 40759, 6212, 56306, 26687,
-40590, 11486, 59832, 20794, 30547, 52014, 4689, 43164, 25054, 65230, 10946,
-33731, 46301, 13843, 55105, 23816, 38450, 2141, 59126, 21144, 38400, 11076,
-47266, 27189, 63989, 2813, 38358, 21241, 59215, 11296, 48654, 26264, 40043,
- 1054, 60378, 34822, 19634, 47008, 9219, 56596, 23055, 41272, 13973, 52799,
-33739, 60, 57668, 23522, 45471, 11434, 33734, 60439, 19043, 47953, 6856,
-41470, 25919, 54600, 13252, 37351, 57684, 8007, 30926, 49667, 19709, 43192,
- 9505, 58196, 29810, 16794, 50237, 35237, 2709, 59952, 23688, 45241, 13192,
-38350, 22730, 58331, 6491, 47909, 20428, 33217, 60334, 4686, 45936, 27489,
-16510, 64084, 35474, 11994, 49928, 26106, 40228, 2085, 60913, 22384, 48067,
-11861, 40483, 25272, 57426, 7904, 33236, 48141, 18170, 64578, 4718, 28870,
-60976, 10965, 43857, 25560, 55660, 5371, 36979, 49339, 16898, 33231, 64760,
- 8228, 48035, 25559, 39363, 11756, 59143, 23156, 49434, 1356, 32817, 46097,
-13711, 60014, 24783, 39111, 6348, 52789, 18726, 31784, 47173, 12267, 59554,
-23943, 41933, 5338, 48137, 22458, 64327, 10670, 40249, 25024, 52251, 12123,
-39452, 21614, 56471, 5574, 41356, 22745, 52008, 10317, 31194, 60727, 15003,
-47664, 25536, 40711, 4655, 65464, 28454, 15936, 49590, 36679, 7786, 54403,
-25744, 42796, 12182, 63691, 19769, 36927, 50421, 6733, 30350, 62587, 16749,
-46385, 29113, 8809, 59617, 35466, 18029, 50541, 689, 40721, 27040, 58482,
-11477, 38972, 23035, 63962, 3154, 48018, 31021, 12294, 57412, 36315, 16376,
-50185, 28663, 5915, 59833, 36023, 17336, 46262, 9061, 55675, 26018, 40635,
- 4413, 58896, 24901, 38900, 9330, 51941, 19502, 32389, 63818, 4910, 44832,
-18780, 36293, 53999, 8495, 29040, 57995, 20138, 42434, 12022, 51677, 30105,
- 6235, 63470, 35720, 20095, 49727, 11347, 41889, 26565, 60796, 665, 34337,
-50711, 20771, 41442, 10818, 64952, 25447, 48000, 4435, 32148, 61504, 12307,
-43601, 25422, 54590, 109, 40706, 23878, 58531, 11199, 45827, 19867, 33000,
-62875, 6556, 43429, 24134, 53293, 1474, 38421, 21250, 56935, 11873, 34129,
-46966, 17742, 61534, 1068, 38495, 27253, 58234, 9252, 43593, 22257, 53286,
-13639, 35209, 55667, 6255, 44150, 28160, 14954, 57275, 37995, 9449, 30518,
-58739, 20450, 48349, 1633, 36995, 53336, 15777, 30106, 64382, 5570, 42896,
-21559, 51900, 14312, 30128, 62463, 8307, 46450, 23963, 40400, 13665, 56260,
-29678, 6015, 38092, 60212, 16366, 29007, 47930, 9901, 56746, 23152, 40777,
- 4382, 59547, 30565, 14869, 50391, 37489, 6734, 61051, 24455, 42124, 11993,
-56634, 19321, 35035, 50274, 1002, 29535, 55323, 13737, 43018, 23803, 59843,
- 5274, 39276, 22098, 55612, 10770, 38535, 27262, 58428, 6922, 49121, 21247,
-40998, 11553, 61658, 25002, 48662, 5636, 41503, 22011, 54428, 12319, 33327,
-59943, 546, 46507, 24340, 41144, 11111, 58844, 24224, 39522, 3130, 46353,
-21377, 60300, 13749, 40509, 26985, 55414, 4258, 38619, 21908, 57782, 13153,
-36964, 49967, 7740, 30703, 61891, 11795, 44553, 20640, 31958, 58811, 1498,
-42174, 23769, 52465, 13681, 31725, 61614, 5563, 47492, 29281, 15735, 58501,
-37211, 1312, 51909, 22788, 43400, 11476, 63057, 26351, 39548, 6807, 52174,
-17991, 32268, 57595, 9951, 43141, 21762, 54642, 2294, 32368, 46975, 15794,
-60397, 29315, 3877, 50134, 37411, 16744, 61695, 28283, 1823, 38238, 54850,
-16229, 30199, 46162, 10649, 60249, 25537, 40811, 6454, 52734, 19000, 32513,
-62139, 10935, 43140, 24442, 54666, 188, 40101, 22060, 63231, 10091, 46752,
-29326, 16476, 52298, 37271, 4613, 64566, 28731, 16340, 49596, 35395, 814,
-56307, 24631, 44783, 13942, 33834, 58912, 2986, 43008, 25283, 54557, 12550,
-38829, 22555, 63464, 28, 34189, 51247, 18538, 46458, 9864, 32642, 58011,
-17815, 40511, 1482, 50873, 19711, 31662, 63006, 7300, 42320, 26193, 48536,
-12181, 61630, 23164, 39775, 5222, 48720, 25166, 55619, 14106, 33481, 45237,
- 7131, 57940, 27863, 15763, 52421, 38135, 5030, 29778, 61989, 12938, 49048,
-25147, 39101, 6256, 64302, 19190, 30994, 47987, 9493, 55108, 24451, 38767,
- 4519, 61971, 34784, 17776, 49822, 1547, 32350, 59488, 15173, 45061, 27573,
- 5223, 63611, 36173, 14089, 53582, 27690, 6380, 49188, 37096, 19642, 64727,
- 9557, 47809, 27009, 40912, 1672, 54127, 18934, 30445, 62015, 8862, 44454,
-28985, 15129, 51960, 37856, 351, 56464, 22341, 43221, 8422, 58847, 32004,
-16160, 52198, 37963, 3573, 30699, 62924, 15961, 46314, 27472, 935, 54429,
-37979, 15550, 24368, 56720, 2947, 40054, 21451, 52922, 13534, 29912, 61895,
- 1838, 41362, 23296, 55156, 13461, 31769, 45130, 3099, 61391, 21664, 38346,
-12649, 49088, 26330, 56290, 4335, 41114, 22086, 62745, 14276, 44768, 28433,
- 460, 61458, 37014, 15832, 50714, 28368, 8231, 57208, 35376, 20661, 47066,
- 1028, 61946, 26697, 41855, 9125, 59379, 25477, 47520, 14192, 34728, 62742,
- 3630, 41752, 22540, 51286, 8545, 35422, 56674, 16561, 30471, 46479, 3030,
-62134, 23742, 39774, 10234, 55997, 21915, 39529, 295, 58995, 26091, 48816,
-11271, 39042, 21295, 55555, 3014, 43405, 26555, 61624, 12599, 38612, 21567,
-52813, 4515, 34248, 56657, 14638, 46328, 21663, 39853, 8804, 54391, 25882,
-42127, 4457, 62979, 18316, 30935, 53519, 10148, 42331, 24897, 64520, 1033,
-35758, 50739, 13359, 32033, 60969, 17722, 43450, 2971, 54331, 22936, 40449,
-12007, 60041, 26334, 42951, 1585, 51992, 17592, 32386, 64399, 4273, 46714,
-27524, 17007, 54020, 37616, 2289, 56872, 25393, 43056, 9648, 53279, 18209,
-31308, 58616, 7595, 43145, 17505, 53212, 30303, 5653, 57468, 36904, 15308,
-50833, 22990, 41311, 6819, 57071, 18400, 33258, 47449, 9710, 64026, 25717,
-38569, 3535, 54636, 17684, 47946, 29757, 9547, 59659, 36122, 14586, 48559,
-24803, 63378, 4136, 32239, 44958, 14339, 54224, 23716, 40521, 7640, 63958,
-21355, 39949, 2820, 50879, 33003, 18842, 59977, 8568, 30792, 49160, 18180,
-65343, 3776, 40840, 26409, 45760, 10265, 61841, 17713, 32899, 44750, 3006,
-55754, 24500, 38663, 10944, 58784, 22884, 47494, 1347, 35861, 60696, 16981,
-31921, 48847, 4366, 54653, 19342, 33678, 45374, 1815, 62358, 19172, 33922,
-44208, 7865, 51649, 27978, 16540, 63590, 35945, 306, 49609, 28601, 15899,
-52920, 36075, 4908, 65086, 23161, 46072, 9334, 36831, 52604, 16233, 31571,
-63785, 3558, 42044, 25652, 54556, 13170, 34375, 52291, 32, 43032, 23703,
-64948, 13991, 33348, 45124, 3394, 57086, 28429, 16509, 52012, 38163, 7988,
-29109, 63681, 19550, 41820, 13340, 52134, 28781, 6929, 63034, 36488, 17593,
-48347, 9876, 54967, 22853, 38577, 975, 64355, 24469, 43581, 9726, 51440,
-18859, 33024, 61234, 2269, 44779, 27355, 15931, 55620, 36817, 5070, 50697,
-27795, 15344, 65257, 36883, 7424, 48017, 21680, 57068, 10810, 39572, 25979,
-54625, 4733, 41566, 21231, 62211, 14359, 31306, 48342, 3276, 55712, 34384,
-13659, 46053, 23912, 60078, 559, 39583, 26494, 63816, 12672, 38525, 25083,
-53339, 7416, 43197, 21715, 58776, 11912, 40566, 25620, 52846, 6030, 31765,
-56481, 12663, 43161, 22807, 64365, 2897, 36609, 50858, 15080, 30614, 45642,
- 4907, 59050, 27507, 14820, 38231, 50894, 7703, 31786, 56727, 19369, 42426,
-12585, 59155, 34454, 5749, 44451, 22513, 55408, 9416, 41515, 24215, 59948,
-12562, 37253, 51014, 6192, 29378, 64206, 19713, 46557, 8507, 31431, 60353,
-19525, 46179, 5078, 35204, 52550, 15379, 31235, 60577, 8695, 42208, 23324,
-53362, 6711, 34533, 64124, 13377, 42817, 24046, 54222, 5559, 39419, 22075,
-58548, 14130, 35541, 51299, 269, 30667, 56753, 17778, 42578, 10763, 64994,
-26716, 39221, 2439, 50686, 18329, 31795, 63469, 9815, 46311, 18094, 32498,
-57096, 1882, 43512, 23706, 51902, 14752, 33035, 59235, 3612, 44585, 32724,
-17495, 58146, 12676, 43284, 26185, 51633, 8680, 30864, 65223, 19132, 41181,
- 4058, 56097, 30206, 16987, 50994, 37719, 209, 61403, 23757, 42243, 14872,
-56778, 29433, 3787, 50845, 35631, 17625, 62570, 10597, 35426, 50288, 15581,
-32747, 56916, 4123, 42902, 25145, 63225, 11640, 33043, 54067, 16874, 37835,
-49301, 6474, 28859, 61515, 12989, 43403, 22937, 56533, 5619, 36806, 49920,
-14625, 30529, 62388, 8944, 42270, 18362, 48072, 10230, 38337, 27259, 58599,
- 7337, 32503, 51524, 16173, 45289, 28904, 6117, 63192, 36923, 18344, 54137,
- 9862, 48382, 27032, 41219, 5560, 65106, 17630, 47474, 32265, 8175, 54760,
-37288, 11254, 51278, 20293, 32393, 55736, 3994, 46768, 19537, 33022, 63165,
-10068, 41793, 17379, 51082, 30634, 7021, 55709, 36344, 19100, 49766, 2079,
-32805, 57828, 18193, 46588, 11452, 39555, 27062, 63836, 925, 43881, 21961,
-52657, 11345, 32862, 58600, 14855, 44540, 28292, 6090, 52293, 36149, 13964,
-60974, 24198, 45352, 7715, 40881, 22773, 64049, 14005, 32831, 48353, 5525,
-54941, 24865, 41965, 9658, 65352, 24711, 48584, 13054, 32841, 59702, 1437,
-42898, 23231, 61274, 12056, 33596, 46242, 20233, 51744, 2278, 33365, 58366,
-17837, 45423, 10896, 30415, 57244, 21151, 48455, 5604, 39359, 26880, 65526,
- 9967, 47951, 29765, 15448, 56893, 35321, 6622, 46632, 23923, 55862, 10691,
-34370, 44139, 15460, 59682, 29176, 7134, 49955, 35148, 14032, 65198, 22435,
-45438, 3950, 34862, 61600, 13386, 48878, 24612, 39027, 2575, 63679, 23232,
-45896, 12544, 34211, 55389, 1306, 43434, 25997, 61932, 13693, 31325, 52438,
- 5281, 42216, 23499, 57718, 13506, 36520, 50321, 7657, 31738, 62017, 19005,
-46109, 2505, 40111, 26967, 55864, 9414, 39714, 18427, 60052, 30988, 5429,
-51229, 36157, 10660, 56974, 23243, 45261, 13957, 34966, 62043, 1253, 43882,
-21508, 33973, 47707, 11437, 55409, 19644, 36017, 52253, 6345, 28969, 59791,
-12706, 47955, 35075, 19039, 62855, 4798, 42539, 26793, 50558, 13014, 37207,
-57087, 7147, 28171, 44550, 12830, 64832, 24402, 41013, 8877, 48555, 22114,
-58852, 12332, 40010, 25085, 55719, 3520, 32761, 46923, 19313, 58355, 9095,
-40906, 26141, 55863, 11514, 44923, 18655, 32021, 57072, 1921, 43044, 24546,
-59486, 10887, 39857, 21631, 50878, 7044, 33010, 61523, 14799, 48650, 24577,
-38376, 5821, 58833, 18615, 48375, 30289, 9440, 52805, 36567, 18940, 62332,
- 1499, 35636, 50119, 15264, 30668, 56910, 4298, 45378, 21067, 30828, 54377,
- 2243, 42530, 25001, 61557, 14258, 33307, 51781, 5764, 41683, 26189, 58631,
-12919, 31913, 46065, 6492, 54170, 28052, 16814, 63226, 38151, 9988, 30009,
-48743, 19521, 60215, 2791, 41371, 24999, 53712, 12686, 40147, 26738, 63381,
- 688, 43383, 23142, 51574, 13236, 34004, 60228, 7335, 46462, 23523, 40974,
-11791, 64477, 25956, 38986, 5530, 51454, 18697, 31541, 55123, 8768, 45549,
-17643, 33634, 57181, 4791, 47515, 28957, 16146, 65265, 35855, 987, 50999,
-21586, 45829, 14773, 36752, 61154, 7247, 28963, 52519, 13373, 41881, 24132,
-54648, 8323, 33458, 61567, 19850, 47473, 2025, 35663, 65030, 16576, 28612,
-47099, 3946, 53226, 27364, 16750, 64000, 35706, 1574, 49621, 28016, 16724,
-62061, 38103, 3546, 30111, 48099, 15256, 57159, 24042, 41467, 2202, 54904,
-17422, 35926, 51184, 9561, 29917, 62359, 17861, 42685, 4194, 56436, 27036,
-38344, 13698, 50056, 29699, 1864, 61165, 37048, 20085, 47274, 10320, 55928,
-26832, 41400, 2931, 60285, 24990, 43657, 10154, 54696, 20108, 33373, 46287,
- 6427, 60790, 19604, 32648, 53154, 8830, 43186, 24040, 55338, 4235, 40955,
-23101, 60068, 11735, 39738, 26850, 54621, 6884, 38714, 21199, 63777, 10809,
-29604, 47437, 20683, 54635, 867, 39123, 27045, 60785, 5944, 41848, 22911,
-54024, 12453, 34090, 46118, 20604, 63046, 5725, 40748, 23003, 49893, 12399,
-30884, 58725, 7533, 46352, 22304, 40142, 11596, 60583, 26900, 43734, 971,
-55831, 25391, 39875, 7449, 47289, 22609, 59568, 9894, 39023, 21441, 50836,
- 3423, 29445, 64926, 14838, 46093, 27325, 1268, 54387, 38157, 17021, 29925,
-64295, 10861, 43717, 24058, 52807, 4492, 32854, 59775, 26187, 41192, 391,
-53932, 22705, 39041, 12097, 65409, 21311, 48583, 3381, 39750, 22940, 56780,
-14278, 32929, 46031, 803, 60642, 24310, 39161, 13445, 53273, 21499, 38472,
- 2413, 59310, 29665, 16121, 49699, 35480, 6770, 63928, 23158, 44156, 13974,
-37572, 58879, 3031, 28726, 53781, 20970, 45693, 4812, 33687, 65256, 16731,
-44000, 28684, 9599, 61464, 37394, 21056, 52811, 4353, 42779, 25885, 55761,
-12618, 38544, 21163, 61311, 7504, 40409, 26630, 50708, 2232, 30480, 63146,
-16953, 46424, 29013, 4311, 54298, 35349, 18799, 57584, 1322, 47004, 26449,
-39283, 10889, 59985, 19337, 32255, 52189, 2286, 45020, 17849, 37070, 58790,
- 7389, 29029, 46818, 16747, 55478, 27739, 5131, 50800, 37586, 14435, 63474,
-28097, 7102, 49402, 37533, 20824, 62239, 3306, 43106, 17190, 52373, 30068,
- 8476, 56465, 35558, 20526, 46305, 516, 62866, 25930, 39710, 12628, 49342,
-23116, 61786, 2756, 39918, 21861, 49066, 9586, 62740, 26890, 38934, 236,
-55509, 18872, 37395, 51180, 10311, 29066, 56181, 20631, 44006, 7012, 34673,
-59939, 13859, 49076, 21962, 40623, 8697, 62792, 29303, 16843, 49565, 36706,
- 3200, 55987, 21484, 45984, 15275, 30679, 64837, 860, 47411, 27881, 16442,
-53874, 35531, 5041, 59166, 24354, 42859, 11297, 52264, 19954, 35585, 65050,
- 521, 28830, 49630, 15088, 42521, 25733, 62795, 3345, 30241, 52643, 16028,
-47715, 28101, 7763, 56575, 36471, 17106, 63601, 2596, 31643, 50384, 13644,
-42574, 23894, 57471, 271, 40890, 22236, 52444, 9597, 31012, 54925, 15035,
-41459, 22123, 64031, 3698, 33360, 53380, 16717, 46539, 29789, 727, 56474,
-36070, 14922, 50394, 28289, 6584, 63116, 38112, 14363, 30923, 54637, 10834,
-43149, 23996, 64685, 2782, 38517, 21766, 51321, 7281, 34179, 60952, 14806,
-46630, 28040, 5980, 53783, 35274, 18988, 63107, 12201, 45581, 26989, 40078,
- 2631, 52911, 20154, 32882, 64066, 11633, 41968, 24159, 54957, 4534, 39664,
-22308, 57885, 11851, 47821, 26323, 40506, 7216, 60694, 18882, 35374, 48405,
-10624, 65125, 17223, 35453, 50190, 4923, 29462, 57686, 19149, 45737, 10520,
-34338, 63960, 20364, 48211, 3661, 36257, 51142, 15095, 29636, 58141, 115,
-42653, 22615, 52401, 8761, 33664, 56816, 16082, 45414, 29341, 6277, 61169,
-35513, 20038, 46900, 9918, 55947, 18217, 31407, 44115, 3749, 57362, 28200,
-16950, 51472, 38068, 2118, 30386, 58840, 17429, 43738, 7256, 61350, 34895,
-14012, 48043, 25467, 62323, 1550, 38879, 21394, 52452, 13310, 34309, 57899,
- 7985, 41572, 25056, 54496, 10522, 40061, 23172, 56736, 4132, 47625, 19096,
-32685, 62650, 361, 44196, 28322, 16238, 51961, 37503, 9839, 58001, 23511,
-41578, 6294, 51838, 30612, 14473, 61163, 37753, 8496, 44809, 23779, 56904,
-13379, 31118, 53143, 7218, 43423, 23401, 58405, 13791, 32821, 44993, 5332,
-62825, 22430, 38427, 12838, 48259, 25548, 57119, 1026, 39804, 23293, 48551,
-12270, 64951, 21589, 41321, 3493, 54914, 24956, 43472, 14389, 57713, 29147,
- 6462, 50064, 36143, 12289, 62159, 28654, 16755, 49618, 36838, 3974, 63693,
-22674, 41766, 13074, 51921, 29643, 1295, 58568, 36292, 16531, 49637, 28786,
-10396, 62281, 36888, 18798, 50574, 482, 43119, 25617, 61282, 13640, 33279,
-51544, 2859, 42135, 24634, 58750, 7930, 33733, 48701, 19284, 62657, 11277,
-33212, 46647, 17332, 56829, 1775, 39498, 26234, 59061, 9223, 31700, 53709,
-14409, 43397, 25896, 55177, 2145, 34377, 65436, 13882, 42738, 23683, 53469,
- 6197, 38556, 21278, 64192, 12133, 48913, 31054, 16234, 53345, 35889, 1853,
-61166, 25479, 45429, 13906, 31525, 55778, 5398, 44155, 27953, 16346, 60076,
-35933, 9544, 48881, 25707, 56194, 2406, 40367, 21919, 46711, 12896, 63659,
-17826, 44893, 11211, 33276, 61583, 4887, 42669, 26353, 54571, 13284, 33815,
-46674, 6557, 59777, 24853, 38763, 10328, 52555, 18921, 33941, 62491, 4677,
-43014, 24280, 55464, 9407, 40945, 22922, 60956, 12819, 31648, 46308, 1133,
-57434, 25067, 39904, 10993, 51606, 18886, 30973, 61100, 8716, 44025, 27620,
-15490, 59193, 37652, 46, 50232, 27618, 14527, 54951, 38122, 6726, 28797,
-64170, 13761, 49087, 24140, 41341, 3915, 58903, 23237, 48655, 9518, 36647,
-56908, 15941, 33996, 51688, 6966, 43244, 26260, 64916, 9804, 41540, 22147,
-51303, 14781, 34722, 62114, 4852, 47762, 23185, 41497, 14785, 63266, 30327,
- 5852, 54130, 35405, 18888, 50355, 9113, 34368, 64361, 15391, 45079, 28801,
- 590, 57043, 34880, 19392, 47041, 8612, 58754, 25607, 41726, 12014, 54994,
-25352, 40070, 5073, 59462, 18512, 31963, 44249, 10569, 53386, 18236, 33545,
-60374, 4022, 45615, 28035, 16090, 58516, 38044, 6178, 30461, 54474, 20253,
-42023, 11908, 48298, 25740, 60975, 5087, 32604, 44829, 17510, 64076, 1422,
-32052, 52323, 16208, 44815, 27742, 4494, 56807, 35471, 16125, 51270, 27486,
- 6270, 58893, 35222, 11959, 48920, 25932, 59784, 7164, 34458, 43959, 12535,
-55024, 23728, 40900, 8497, 63191, 22082, 45161, 13425, 36702, 50933, 6830,
-30467, 57806, 13052, 41753, 22369, 51891, 5963, 34852, 58461, 18850, 46729,
-11365, 40227, 25969, 61121, 4658, 32208, 54115, 20585, 46670, 10945, 40252,
-23382, 60316, 5419, 46825, 29599, 16551, 65085, 35925, 8819, 46552, 25535,
-61221, 2452, 33384, 45754, 13397, 58201, 24895, 39266, 8102, 48986, 22325,
-59266, 11906, 39743, 25483, 61991, 4252, 32028, 53004, 16887, 45635, 28959,
- 1520, 59823, 37073, 20299, 48310, 8443, 54255, 26835, 41842, 12292, 62251,
-22997, 40130, 3901, 58333, 29438, 16364, 51471, 36949, 1297, 48262, 23884,
-60073, 7611, 38501, 26033, 56723, 9709, 47786, 17185, 31270, 59519, 853,
-43651, 25753, 50624, 14320, 34177, 64505, 5476, 42619, 22993, 52420, 13750,
-32519, 56339, 383, 44689, 23796, 40273, 9242, 59221, 21844, 40138, 13653,
-51431, 30637, 1410, 56098, 38026, 15724, 29221, 60886, 7138, 43024, 22929,
-53598, 11622, 33803, 64684, 18382, 46090, 4621, 39440, 26347, 59208, 11405,
-43355, 23572, 53393, 1804, 38857, 22184, 62602, 5731, 36959, 50036, 15288,
-29553, 64938, 8282, 47147, 27542, 12717, 53732, 35814, 20960, 56733, 9553,
-42469, 23086, 50740, 3941, 32859, 58030, 18408, 41971, 10659, 49133, 27106,
-63008, 5308, 32191, 46156, 16894, 60874, 28391, 2367, 49516, 37492, 13826,
-63978, 24814, 44722, 7970, 34908, 57234, 17766, 48247, 11342, 34611, 60788,
- 3471, 43506, 21749, 55902, 13658, 33016, 46542, 1031, 58707, 28046, 16842,
-49406, 37064, 3426, 62465, 22072, 41976, 12165, 51505, 29516, 496, 65515,
-36763, 18414, 48571, 10740, 55308, 27227, 40582, 6772, 59998, 18597, 33203,
-45723, 10395, 58612, 26352, 39006, 5767, 53144, 30442, 15109, 60169, 36225,
- 8884, 46619, 22525, 64250, 785, 32701, 44934, 19457, 53352, 6038, 32108,
-58053, 14358, 47498, 24422, 39436, 5491, 60528, 23737, 48751, 12210, 40769,
-21864, 65524, 3305, 31980, 47095, 20567, 54108, 8361, 32012, 57973, 16447,
-47302, 28755, 5784, 64796, 34860, 17982, 53337, 9754, 44240, 35070, 17076,
-55457, 3735, 42117, 25970, 60284, 7564, 34998, 51232, 19818, 46631, 11828,
-37569, 63515, 3163, 28892, 50609, 20845, 41268, 10140, 52306, 18104, 31875,
-61093, 3568, 47641, 25429, 41006, 10462, 57787, 24935, 40349, 4593, 46821,
-21318, 62812, 11197, 40079, 26577, 48442, 6988, 58163, 19387, 34927, 53292,
- 8869, 42309, 24182, 61782, 4203, 40682, 21291, 51846, 14147, 35759, 59118,
- 7129, 29417, 51220, 5648, 47415, 25508, 55571, 13938, 39301, 24095, 59133,
- 1174, 49193, 22020, 40351, 12475, 64152, 26405, 49479, 2248, 31147, 44108,
-15064, 57974, 27844, 7455, 49833, 36338, 15700, 64439, 28987, 4255, 50524,
-36637, 14606, 55295, 23545, 43878, 6274, 34843, 64799, 17189, 48659, 2325,
-37766, 55891, 14247, 29855, 53514, 5673, 45016, 20599, 30867, 62533, 9948,
-46984, 19914, 32614, 57647, 1572, 44772, 34828, 18716, 54578, 10897, 32504,
-64567, 20619, 44869, 599, 29584, 61776, 13633, 48443, 23901, 38721, 2803,
-53653, 17725, 33443, 59473, 7914, 44450, 28378, 13594, 53372, 36159, 88,
-57847, 27508, 12199, 49529, 37744, 20734, 61575, 2845, 42566, 26376, 52488,
-10357, 35019, 60404, 18181, 43202, 4340, 53745, 27144, 40757, 14082, 65002,
-31426, 1861, 50075, 35556, 14056, 61245, 23178, 47213, 2543, 37698, 64284,
-15136, 28932, 51753, 7932, 41659, 24718, 55558, 11362, 33744, 48065, 17458,
-64611, 2009, 33342, 44721, 13786, 57198, 23265, 39616, 8098, 54729, 25709,
-49037, 11617, 40361, 21825, 59609, 6359, 47948, 30169, 14724, 65243, 37310,
- 380, 46845, 23733, 54444, 12913, 40801, 22339, 63830, 2125, 29779, 45280,
-15670, 61350, 28743, 4077, 51749, 37883, 15402, 30930, 58518, 1553, 48648,
-28235, 16552, 62407, 37754, 3669, 53819, 25531, 47053, 13891, 33397, 64562,
- 1721, 41935, 22757, 55674, 8799, 37257, 50030, 15560, 28908, 64193, 755,
-43940, 27906, 16513, 53024, 36624, 7525, 56476, 27397, 14228, 49653, 37874,
- 4212, 59334, 23830, 43082, 11361, 55920, 18034, 30290, 51473, 6136, 34656,
-63514, 18970, 44361, 2140, 36627, 54732, 15750, 29402, 46880, 5793, 60915,
-25797, 41814, 10583, 51564, 18323, 35477, 63264, 6012, 30212, 46157, 15248,
-56510, 29237, 477, 49984, 35306, 19347, 54926, 8410, 42336, 25971, 65220,
- 9877, 40525, 22052, 55114, 14004, 45034, 30981, 3202, 63424, 36592, 20693,
-51779, 7288, 41411, 22891, 60584, 10329, 31951, 54584, 19447, 45779, 3146,
-34781, 62620, 11352, 48823, 28602, 16297, 61027, 35005, 8029, 48079, 25689,
-63261, 3521, 34499, 44406, 16976, 53214, 27450, 8963, 58991, 38224, 17235,
-31675, 48614, 2688, 61983, 26416, 39556, 9447, 49075, 23441, 57733, 13834,
-34529, 47025, 3275, 63844, 18095, 32783, 51016, 8692, 43042, 25955, 57631,
-11925, 39011, 21808, 52428, 1116, 34767, 60459, 18464, 44471, 4973, 32955,
-63442, 17124, 46607, 245, 36271, 52908, 15901, 29697, 64163, 8928, 46512,
-23928, 38475, 2829, 55535, 22274, 43606, 14311, 58255, 30937, 8939, 50424,
-35365, 19565, 59535, 4552, 31591, 47158, 21031, 54173, 1675, 40554, 26681,
-65158, 14509, 31923, 48840, 6941, 54178, 25218, 40870, 11108, 63578, 18889,
-34653, 52751, 5924, 42187, 24826, 54736, 14227, 30184, 59770, 6585, 46098,
-27883, 16440, 53611, 35101, 8879, 60741, 24978, 45690, 2566, 35469, 52683,
-14738, 29588, 63656, 4629, 47544, 23811, 40780, 11764, 62625, 19643, 33649,
-51127, 2376, 44819, 27664, 16089, 58704, 35691, 10987, 54952, 25541, 41143,
- 8205, 51066, 17699, 36342, 64723, 1985, 28790, 45939, 18967, 56308, 8227,
-39065, 26929, 54518, 11389, 43385, 22987, 59417, 6122, 35129, 51893, 14023,
-44030, 27381, 1707, 60479, 37237, 19880, 45924, 11161, 56013, 26040, 40270,
- 2233, 62977, 20993, 32294, 51701, 10894, 45739, 18620, 30642, 64936, 682,
-44511, 27772, 16117, 52477, 35141, 5452, 59857, 19076, 31693, 47782, 7866,
-57834, 25398, 39136, 11843, 54752, 21480, 43785, 537, 63297, 30391, 14755,
-51385, 35288, 9341, 56574, 23557, 44808, 2485, 32954, 60627, 14492, 43036,
-23099, 50478, 17, 30870, 65216, 18194, 47767, 11569, 39057, 27057, 57499,
- 1591, 47737, 30893, 16030, 61024, 36769, 22150, 64701, 2703, 31756, 51015,
-18295, 44862, 9851, 32165, 62243, 15055, 44086, 28057, 5201, 55779, 36286,
-19881, 47699, 11253, 60324, 20936, 30349, 45216, 262, 54984, 24982, 39703,
-10923, 57906, 20040, 32107, 47528, 1937, 62144, 19782, 31757, 45322, 10284,
-56695, 21300, 32244, 44435, 7262, 63033, 18311, 32259, 47483, 11801, 56368,
-25485, 39505, 2857, 60317, 17935, 30400, 53556, 8828, 47704, 28414, 15479,
-59393, 37567, 5378, 51866, 25902, 42410, 11674, 53817, 19918, 32337, 57286,
- 5790, 42781, 23319, 61091, 11517, 30353, 48156, 20726, 56103, 3855, 40530,
-25281, 65177, 15840, 33486, 51947, 6487, 44700, 28921, 15226, 59139, 34883,
- 8287, 49525, 19973, 32341, 56366, 5569, 40176, 25403, 62044, 11643, 38662,
-21849, 51662, 6360, 36700, 56949, 16754, 28837, 45192, 7780, 54131, 25149,
-39647, 11634, 56225, 20983, 31905, 48557, 1262, 63232, 20028, 31465, 45005,
- 5420, 57654, 24680, 40718, 9351, 51814, 19020, 30191, 61396, 3773, 46200,
-28186, 15438, 63328, 35280, 2363, 46494, 23887, 57693, 12325, 39431, 22903,
-53500, 7854, 32456, 60893, 15902, 44474, 28421, 3896, 57922, 37755, 19470,
-52905, 10412, 35152, 48620, 20485, 56899, 6623, 42010, 26634, 65458, 10274,
-46557, 19980, 33868, 56299, 6203, 44432, 19473, 33763, 59380, 10705, 42134,
-23356, 54433, 7910, 38851, 27081, 61730, 11898, 43702, 21625, 52888, 4279,
-32768, 57057, 18259, 45659, 9800, 31817, 62994, 14927, 44683, 28298, 1887,
-61427, 36758, 16952, 53736, 29496, 9284, 49174, 37858, 20515, 61997, 1059,
-46618, 25938, 40341, 11101, 57524, 20469, 31338, 48241, 7598, 65407, 23726,
-40791, 13105, 55185, 22534, 38498, 2422, 57300, 27201, 47624, 13936, 33426,
-59117, 4436, 44430, 27657, 16930, 64261, 37540, 10603, 47330, 22315, 57852,
- 5513, 32525, 45332, 15696, 61477, 29058, 4373, 50534, 35993, 17558, 56207,
-10081, 47124, 28967, 15457, 61703, 36044, 2340, 53504, 17904, 37575, 49472,
- 8199, 28730, 59330, 16666, 44221, 27676, 6542, 57425, 37150, 19431, 46673,
- 2131, 55245, 27050, 39009, 13145, 57319, 21643, 48314, 4780, 32227, 65487,
-14013, 45667, 27292, 5925, 53184, 35514, 13723, 56523, 21739, 45065, 1278,
-33105, 49648, 19834, 60326, 7566, 40709, 25829, 54577, 12724, 39826, 21886,
-59632, 3892, 33511, 47960, 13894, 62472, 23947, 41775, 7093, 54420, 20128,
-31001, 48851, 10996, 59179, 26124, 41395, 6753, 48670, 24288, 55939, 11738,
-41018, 21416, 59317, 5609, 40770, 26744, 52613, 11492, 38453, 21190, 64539,
- 716, 43941, 26708, 54711, 11263, 41593, 17090, 60628, 29612, 8735, 50255,
-36351, 17244, 57623, 5250, 46273, 25534, 40982, 12622, 61926, 23790, 38944,
- 3087, 48553, 22445, 57780, 9941, 30034, 45109, 18818, 64492, 1785, 32417,
-50892, 12978, 43059, 24067, 59200, 3866, 40707, 21649, 50951, 12256, 31686,
-61522, 20569, 42217, 8064, 56615, 31234, 15666, 50793, 36484, 374, 55265,
-25704, 42830, 9587, 60759, 18440, 36928, 52389, 5290, 30660, 48608, 18789,
-62287, 3047, 33254, 45309, 20828, 59515, 9298, 41008, 26060, 53163, 13189,
-36480, 61083, 4390, 30332, 47757, 17710, 63235, 939, 31163, 44408, 15407,
-55449, 27948, 9010, 38217, 64063, 16622, 30794, 52725, 4776, 44267, 28141,
-15294, 59163, 37882, 8504, 30065, 49014, 17792, 61032, 4374, 40592, 26828,
-53416, 14041, 33981, 58360, 8776, 42184, 24576, 55680, 12809, 40577, 22706,
-62427, 1404, 33818, 45758, 15185, 60231, 28623, 5997, 50051, 35180, 16850,
-53643, 27586, 5119, 59198, 37493, 16940, 49460, 28888, 7693, 64420, 36164,
-17683, 49407, 3852, 34285, 59491, 13370, 40935, 25589, 55360, 4993, 31911,
-46555, 17443, 63141, 8313, 38744, 25879, 54910, 11945, 43640, 53388, 20441,
-34765, 56201, 8274, 42080, 24813, 58562, 3979, 37358, 53262, 16519, 29242,
-48781, 8515, 62715, 24648, 38951, 2983, 50907, 18145, 35918, 63239, 8927,
-33491, 47275, 18559, 60674, 5413, 34281, 44294, 15250, 52252, 27621, 8030,
-59633, 37349, 14557, 49787, 27479, 4706, 57938, 36507, 20438, 52338, 1319,
-42178, 22747, 65048, 10443, 33552, 51141, 15672, 44438, 27882, 7034, 62260,
-36786, 21104, 49676, 3462, 33940, 63603, 13350, 47292, 23555, 39819, 2096,
-60261, 34789, 17930, 52556, 9945, 45472, 34986, 19868, 63847, 1188, 32353,
-51614, 14332, 46057, 29556, 9093, 57097, 35780, 19657, 47031, 2149, 62432,
-23067, 41067, 11554, 55276, 25868, 40316, 1120, 64804, 21853, 46699, 13175,
-32275, 54746, 2696, 43619, 24734, 60335, 12591, 39192, 21604, 63882, 196,
-32207, 48463, 19048, 58302, 5791, 34307, 44613, 17121, 59663, 7104, 34665,
-43991, 12099, 53034, 28223, 16514, 62419, 35548, 707, 46587, 23001, 55993,
-13097, 34581, 43798, 5756, 52960, 29298, 16696, 60184, 36409, 9318, 50358,
-27014, 43527, 3019, 62035, 19958, 36736, 50504, 10010, 29926, 55405, 20579,
-46338, 7584, 33051, 63129, 18241, 44640, 693, 40046, 25769, 55693, 13729,
-38842, 21926, 54054, 2811, 36453, 51660, 12753, 30201, 61404, 17361, 46729,
- 48, 31712, 63502, 19219, 46110, 5144, 32307, 49528, 18582, 59092, 2328,
-40067, 26329, 48688, 12884, 60910, 25644, 40919, 5719, 51868, 19487, 37084,
-58281, 8416, 30836, 51458, 15358, 45187, 28132, 4869, 64732, 35098, 14508,
-54324, 28536, 7704, 50035, 36753, 17136, 60408, 3805, 43896, 28821, 16183,
-52030, 37331, 89, 59406, 25360, 43001, 10972, 52796, 21167, 40208, 6783,
-63705, 26092, 38579, 9933, 54667, 18619, 35966, 51157, 3251, 30292, 60089,
-14110, 42715, 24512, 54432, 2005, 39621, 26419, 48908, 11018, 58232, 20677,
-32443, 44325, 259, 64353, 19215, 32746, 51148, 6824, 43378, 26147, 55549,
-10849, 32869, 65315, 20058, 45266, 1023, 35202, 54798, 13810, 42729, 25284,
-64212, 5823, 41610, 23345, 52449, 12059, 32205, 60031, 6472, 44038, 27634,
-16698, 52593, 37193, 583, 61331, 28501, 16806, 49578, 37037, 7484, 64115,
-24719, 43767, 12890, 30956, 62255, 5036, 43739, 27891, 16326, 52027, 36773,
- 403, 65210, 25626, 45985, 9577, 30410, 55606, 16273, 44737, 27848, 2359,
-60015, 37196, 13311, 45632, 24380, 57010, 3085, 39189, 21000, 65437, 13660,
-38280, 27115, 53498, 1451, 36491, 62782, 14834, 31086, 47400, 7542, 61287,
-24322, 40599, 13354, 56849, 24285, 38494, 5855, 51641, 21063, 34278, 63635,
- 2762, 45582, 20195, 33876, 55402, 11615, 39761, 21692, 59261, 637, 33893,
-53584, 15778, 45766, 28978, 9040, 59919, 36589, 17326, 52119, 4997, 35388,
-47361, 14841, 60587, 25917, 38946, 7614, 54241, 21214, 38786, 10385, 64187,
-27094, 43782, 1470, 54814, 17340, 36789, 49347, 6343, 28221, 65097, 20461,
-44927, 13039, 31392, 57546, 4239, 48541, 24687, 39367, 12564, 64508, 22326,
-41632, 7438, 54640, 25051, 40185, 12050, 57188, 22789, 48370, 118, 34904,
-62607, 16907, 31649, 51221, 5842, 45599, 20965, 33338, 58233, 9357, 49208,
-20320, 33951, 46789, 3713, 61388, 19485, 33288, 45940, 7458, 57608, 27303,
-12455, 50909, 35512, 18905, 64494, 290, 46402, 25570, 41861, 12117, 55591,
-23839, 38856, 6488, 62016, 19375, 36569, 50333, 2474, 31888, 64179, 17455,
-45364, 6987, 36628, 52135, 16281, 29585, 56334, 3965, 42841, 23926, 63946,
-13561, 37458, 49293, 8704, 31956, 56012, 19432, 42985, 1187, 60116, 25089,
-41790, 9514, 54707, 21842, 41137, 15341, 57759, 29465, 6252, 51319, 36996,
-18895, 62101, 10995, 43021, 23106, 52087, 3161, 32378, 58695, 17437, 42466,
- 5933, 23459, 47801, 573, 32435, 61319, 17250, 46393, 11519, 31657, 65236,
-20606, 46044, 1551, 41383, 25959, 57344, 9356, 40764, 21735, 52907, 13243,
-29284, 56434, 6300, 42668, 24268, 53446, 13760, 30031, 64625, 3385, 46190,
-35297, 17024, 53405, 28756, 629, 63495, 38207, 16161, 30654, 47944, 7768,
-61845, 25592, 39160, 12377, 48547, 23976, 56653, 5827, 41182, 22002, 60870,
- 831, 33586, 53112, 18475, 42648, 10107, 58350, 20344, 31679, 54143, 6383,
-45685, 17249, 31384, 62478, 8391, 41451, 24713, 50270, 4057, 32462, 58452,
-15113, 44097, 27778, 7663, 54589, 36825, 18047, 62968, 5081, 42585, 26591,
-53586, 14279, 31915, 58257, 6831, 48040, 29505, 16596, 51758, 35609, 7627,
-59454, 27474, 16748, 49283, 37319, 9898, 57961, 23182, 45824, 6779, 33312,
-55290, 16059, 44445, 35965, 9775, 61450, 24602, 42083, 3245, 54995, 18541,
-30438, 47000, 10195, 65342, 23053, 39946, 4368, 56325, 25618, 43269, 10492,
-52249, 18539, 29386, 59028, 7324, 47547, 36020, 19070, 64910, 1041, 42912,
-25441, 55313, 12964, 38393, 21339, 56730, 5836, 34256, 47533, 18324, 64671,
- 1724, 34788, 43824, 14200, 59556, 31299, 4367, 47902, 22733, 61057, 12741,
-32416, 46583, 5655, 63980, 24317, 41614, 11556, 58752, 26041, 40702, 7127,
-50610, 20280, 36144, 57712, 9718, 29529, 53370, 14666, 44397, 28023, 6900,
-56335, 36272, 14391, 44573, 24169, 65348, 9084, 39089, 22200, 55363, 2998,
-31091, 47363, 13809, 63892, 24842, 39410, 466, 48725, 22094, 55710, 12043,
-40752, 24177, 58076, 3162, 43724, 19955, 52837, 30821, 10028, 64213, 34584,
-18623, 50498, 6829, 32781, 55878, 14571, 43750, 23538, 61045, 3417, 38286,
-26594, 49061, 12807, 57888, 22324, 41224, 1224, 61801, 25985, 46968, 13226,
-34459, 53812, 6682, 39681, 21361, 62686, 11992, 34058, 46889, 17386, 59674,
- 5698, 39277, 26413, 54285, 12845, 41942, 25200, 60122, 4168, 39494, 24320,
-53035, 12423, 39322, 22007, 58119, 5091, 42440, 25973, 51443, 12567, 32214,
-61613, 3780, 39755, 21946, 56209, 14565, 33791, 50866, 1639, 40518, 22596,
-63486, 15063, 31879, 47183, 7781, 58278, 24116, 40774, 10702, 56312, 19306,
-32081, 46654, 2537, 54955, 18062, 34675, 48218, 10429, 58795, 20938, 30830,
-45703, 7905, 56766, 23788, 40268, 12396, 58556, 21599, 39574, 6512, 51939,
-32024, 17112, 63217, 35688, 8601, 47668, 22799, 55102, 11724, 38265, 27271,
-48083, 6082, 59748, 21843, 43343, 10024, 50533, 29272, 16860, 57706, 35598,
- 3898, 49611, 20193, 32034, 54168, 2200, 43444, 17790, 62090, 31877, 7630,
-49399, 37066, 17439, 58542, 10355, 42819, 25420, 52623, 6437, 31146, 63241,
-13424, 42649, 22713, 51500, 7554, 32159, 64856, 20090, 42359, 2606, 53766,
-32501, 21012, 62640, 10190, 41597, 23362, 57180, 153, 33562, 47871, 14162,
-58635, 24808, 41297, 5887, 51591, 19618, 32359, 62056, 10283, 41605, 18851,
-54317, 33225, 2930, 50377, 36955, 17842, 61318, 8616, 44299, 34604, 17236,
-59210, 1204, 45456, 29404, 14754, 53083, 36779, 3998, 63550, 26809, 44233,
-14436, 36750, 52732, 7629, 29583, 55785, 13546, 41910, 23972, 65063, 2527,
-39929, 17221, 52469, 28952, 10610, 56988, 37782, 14877, 50115, 27454, 1476,
-62593, 38123, 14368, 32184, 48110, 4282, 55768, 24050, 39662, 10250, 60003,
-18796, 33110, 51831, 3409, 43380, 23295, 59062, 9998, 29620, 46990, 13467,
-55228, 24207, 39905, 4553, 58839, 26362, 48775, 10044, 40194, 22064, 61211,
-12693, 35626, 50544, 2724, 29047, 58596, 16539, 45764, 27895, 7026, 65041,
-35822, 18439, 51019, 11513, 39619, 27263, 63434, 2815, 35109, 53588, 12703,
-45524, 24275, 41479, 876, 60183, 28716, 15156, 50210, 35863, 7373, 64016,
-25165, 40529, 11385, 51618, 21642, 38571, 9383, 54417, 27225, 43499, 5019,
-58202, 23153, 40651, 10163, 55136, 29939, 15829, 51490, 35446, 3396, 64227,
-23332, 45869, 14448, 37229, 59428, 1012, 30716, 50138, 17740, 41477, 10766,
-58595, 25613, 39841, 7451, 56188, 21475, 48281, 13433, 33469, 58526, 3960,
-41607, 22696, 52898, 13466, 33396, 59173, 2410, 44417, 28113, 16406, 54611,
-37123, 7890, 47167, 25439, 57729, 12489, 39348, 22612, 51388, 3051, 34717,
-65340, 13670, 42037, 23930, 50661, 350, 34972, 56323, 18251, 43955, 11264,
-64673, 29984, 16637, 53445, 36858, 2926, 48016, 24309, 60157, 10768, 32383,
-44201, 19047, 51700, 725, 39960, 25323, 63694, 12793, 45185, 27996, 3125,
-61810, 37478, 15521, 53558, 28636, 4149, 50257, 35404, 19131, 64496, 1755,
-42360, 27275, 51982, 13990, 30315, 62685, 3848, 46653, 29136, 12652, 53284,
-36584, 20762, 60033, 1462, 48797, 26760, 41588, 13482, 52577, 30878, 8333,
-61571, 35964, 20719, 49354, 2521, 32132, 62188, 16074, 44369, 27374, 10257,
-57497, 37258, 20766, 51359, 4195, 42155, 26477, 62946, 11707, 40959, 23071,
-53077, 8425, 31479, 58483, 16659, 45861, 27354, 7299, 55731, 35974, 16986,
-51569, 27939, 8825, 57903, 36254, 16933, 49838, 28245, 1385, 62026, 37917,
-15562, 29482, 54483, 3988, 45849, 27762, 16243, 64298, 38079, 2119, 32983,
-48982, 20003, 62268, 12330, 34139, 46917, 1006, 51312, 19814, 33138, 59648,
- 6821, 45482, 28937, 16227, 57624, 35597, 9379, 53361, 21226, 42586, 6505,
-62670, 29692, 16373, 51603, 36523, 8693, 62136, 27376, 16231, 49432, 37690,
- 1265, 57117, 23850, 44906, 12598, 39938, 25765, 62671, 5332, 38875, 21322,
-53379, 9121, 33037, 64530, 16152, 45993, 28407, 5114, 55510, 37200, 20149,
-50268, 7946, 32829, 65179, 14890, 43532, 24911, 55861, 630, 41512, 22949,
-51889, 9231, 31579, 64013, 20185, 45470, 2604, 33477, 57245, 18187, 46852,
- 8733, 34549, 62164, 18076, 45679, 1835, 35634, 63436, 16135, 31004, 53974,
- 8769, 46135, 23311, 41509, 15162, 58606, 29421, 7027, 49647, 36197, 10632,
-60972, 26288, 42888, 13041, 55061, 28707, 3110, 50298, 37518, 15887, 64614,
-28914, 4428, 49782, 37464, 13638, 60024, 25210, 44477, 6890, 39926, 24328,
-61678, 2082, 49317, 17774, 32539, 44072, 4229, 53899, 29247, 15789, 63704,
-36212, 1604, 49355, 27436, 14461, 56391, 38179, 4568, 30847, 61272, 17697,
-49306, 794, 40236, 23409, 63972, 14774, 33053, 52061, 4575, 41649, 24881,
-54598, 13542, 32313, 64741, 8008, 45162, 27685, 16467, 60118, 37973, 10347,
-28912, 54981, 19693, 42822, 74, 65311, 29427, 15238, 50658, 36434, 3817,
-56643, 28399, 16394, 50068, 36523, 2097, 60516, 25668, 46492, 10585, 34042,
-57358, 13992, 40437, 23536, 50470, 5683, 34060, 56300, 17885, 46649, 11309,
-40216, 22642, 63200, 4314, 35309, 49742, 15731, 30422, 56079, 2150, 43432,
-25425, 59456, 8925, 29536, 46021, 14299, 63052, 25494, 38758, 4904, 52320,
-20453, 31895, 56911, 10607, 47079, 19975, 33518, 61595, 7814, 49269, 32622,
-19097, 46208, 10281, 57781, 22390, 40390, 1892, 62089, 26857, 43621, 10424,
-50722, 19494, 32117, 59634, 7242, 47239, 21062, 32460, 63864, 4933, 44253,
-20814, 35461, 53479, 10014, 28624, 58820, 20064, 43155, 6209, 51937, 29459,
-14979, 61712, 35047, 7906, 47917, 24717, 55247, 13739, 34668, 44643, 1225,
-63136, 20081, 32413, 51488, 7812, 44657, 28804, 15686, 65353, 35385, 149,
-49784, 18263, 30644, 54842, 7412, 41756, 23505, 62663, 14526, 34641, 52825,
- 4525, 42132, 23403, 54230, 14086, 32301, 61410, 5207, 43496, 22522, 50330,
-14022, 33806, 60889, 7170, 48206, 20760, 34068, 56620, 10360, 45326, 20047,
-37520, 55496, 2216, 29784, 45711, 14689, 62451, 41197, 26128, 59513, 12873,
-39838, 21520, 51483, 2579, 32883, 63254, 14884, 44995, 28024, 7084, 60448,
-38017, 16939, 32326, 48658, 4934, 61288, 21156, 32960, 44446, 9670, 52738,
-20429, 34734, 62448, 2391, 45175, 28332, 15874, 51551, 36891, 5061, 65443,
-25488, 42460, 10814, 55246, 19297, 46518, 29471, 5473, 63868, 36208, 19569,
-50670, 10000, 32688, 62736, 19381, 45114, 3728, 33001, 61371, 15907, 45082,
-30886, 9706, 56714, 25546, 43261, 5975, 52932, 19102, 33175, 61923, 8808,
-40637, 23470, 51747, 5263, 39948, 26173, 56925, 9259, 39920, 22263, 61467,
-13225, 46726, 28729, 4795, 55134, 37615, 20445, 59526, 8929, 36871, 50447,
-16924, 31013, 55083, 6175, 42555, 22331, 60630, 13795, 33706, 46516, 7969,
-56075, 26401, 41123, 12795, 59813, 24533, 48280, 5928, 41264, 22306, 57699,
-14950, 33036, 51542, 7536, 41494, 24468, 63586, 11450, 38831, 22412, 58109,
- 3631, 48566, 29075, 15242, 59831, 37922, 6901, 50555, 27469, 14245, 55286,
-38154, 4879, 30775, 63483, 17694, 48510, 8241, 34845, 54312, 14964, 30117,
-60321, 147, 46706, 28128, 15622, 51731, 37176, 3668, 64222, 28564, 14635,
-49717, 37495, 1959, 60632, 27320, 15436, 49297, 37568, 4873, 55883, 23974,
-43268, 10581, 57196, 18944, 32406, 48130, 7777, 60312, 23602, 40727, 11193,
-54978, 21656, 39825, 6444, 56503, 25822, 41871, 9563, 60413, 17325, 29904,
-53545, 4134, 42432, 23755, 63410, 13088, 33215, 50901, 1524, 43442, 25498,
-60835, 13219, 40075, 21779, 50264, 2237, 31998, 58298, 14746, 45063, 28083,
- 5929, 53928, 35402, 17889, 61364, 10816, 47856, 26891, 41819, 2639, 58225,
-22297, 48905, 12339, 41322, 27130, 57145, 822, 39734, 21725, 52270, 11844,
-33188, 60412, 17526, 44255, 2571, 30033, 57212, 21091, 41760, 10752, 58728,
-27111, 38446, 6302, 61152, 17984, 34894, 48024, 11216, 56165, 24235, 40250,
- 5112, 49333, 22974, 59395, 11133, 31574, 44157, 15298, 55435, 27858, 5978,
-50261, 37266, 18806, 59899, 2852, 33681, 48077, 12109, 64893, 24804, 40385,
- 159, 52957, 20160, 31835, 58060, 5311, 45141, 19359, 33895, 62526, 8689,
-43998, 27441, 12442, 54083, 35168, 19972, 61171, 913, 33336, 48621, 17118,
-55621, 11135, 32708, 46946, 15266, 64373, 29557, 6299, 50055, 36613, 20161,
-57645, 11043, 42681, 24848, 50963, 5845, 31470, 62060, 19363, 47234, 11215,
-39772, 26472, 53041, 7517, 30648, 58343, 18943, 43174, 3237, 54954, 26307,
-39450, 11198, 62258, 21139, 47142, 991, 36954, 51763, 15441, 30284, 57243,
- 3277, 43708, 23325, 52186, 6728, 33142, 58195, 21087, 47560, 8048, 40617,
-23169, 61640, 12737, 40600, 25092, 46024, 5916, 62824, 18280, 30843, 43966,
- 8649, 53387, 29905, 18275, 64119, 899, 45918, 26358, 41993, 13224, 62177,
-29165, 2936, 49977, 35625, 18900, 54499, 8117, 43479, 26934, 65250, 11859,
-40447, 22741, 52843, 7156, 37170, 57633, 16971, 32563, 47855, 659, 55769,
-22355, 41773, 11509, 64820, 26156, 40081, 3584, 51316, 17091, 30686, 58303,
- 2500, 43830, 27413, 15186, 64421, 36102, 5889, 53926, 24671, 48957, 11872,
-38702, 21469, 60466, 3675, 34858, 53672, 15138, 43894, 28393, 520, 54678,
-36757, 17457, 57449, 8011, 30901, 50461, 17267, 41616, 3036, 65184, 31430,
-16915, 53624, 36814, 845, 49687, 28377, 16266, 63854, 38031, 5057, 31074,
-57403, 15912, 48275, 28137, 9116, 53803, 37119, 18429, 59471, 5676, 41468,
-26107, 55644, 9498, 39002, 21411, 61498, 12478, 32968, 51755, 2002, 43295,
-24606, 57737, 11046, 39893, 21708, 47825, 458, 59505, 26984, 40392, 10689,
-52025, 18973, 31298, 57376, 1852, 45067, 27740, 16092, 62726, 38021, 4452,
-29126, 48974, 17273, 64500, 8752, 33729, 47991, 20575, 56874, 6180, 1080,
-53659, 36076, 20242, 61590, 8142, 48129, 26425, 39255, 12080, 56983, 22180,
-49080, 117, 41792, 25344, 58259, 12695, 45373, 28530, 8794, 54295, 37051,
-18302, 63992, 4099, 31457, 50673, 14550, 36505, 57991, 8560, 42258, 24454,
-53943, 12439, 39372, 23667, 60647, 1623, 38516, 17353, 51773, 31369, 8110,
-57378, 38034, 15084, 28598, 48170, 190, 59562, 24129, 40226, 12903, 54134,
-29828, 5247, 50401, 36355, 18810, 63450, 1455, 36265, 49329, 15660, 30246,
-59790, 10537, 43691, 26122, 55316, 2440, 38252, 21513, 59148, 14395, 46893,
-29454, 990, 51885, 37601, 20698, 65476, 8313, 33295, 49649, 15675, 45743,
-28554, 2327, 64132, 35701, 19594, 47366, 10903, 58098, 26365, 39015, 369,
-48877, 23836, 63375, 10567, 38955, 20878, 53960, 2996, 38364, 21444, 65096,
-12046, 37633, 50456, 865, 28383, 61837, 19706, 44759, 4814, 36029, 56491,
-15813, 31750, 45541, 9589, 54645, 20397, 33441, 44126, 459, 64476, 20016,
-31253, 51719, 9966, 45152, 19646, 34813, 59383, 1648, 28851, 51682, 20543,
-42519, 10078, 56931, 34688, 21316, 44846, 6039, 62423, 19650, 33266, 44043,
-11417, 57282, 24627, 39405, 5502, 53993, 18738, 29988, 63047, 7956, 41860,
-22473, 52292, 14197, 33473, 65163, 3376, 44638, 27527, 16635, 53098, 37619,
- 802, 62724, 24751, 44932, 13504, 31966, 48474, 3015, 64889, 20846, 33748,
-45445, 10910, 50874, 18982, 32160, 58425, 5956, 41619, 26164, 55604, 10664,
-38491, 19158, 58950, 32086, 4783, 49419, 37469, 11632, 65251, 23289, 41788,
- 4114, 52671, 33909, 19201, 59779, 9326, 46472, 23136, 38647, 4832, 64911,
-30911, 15831, 50188, 36604, 6645, 63340, 25151, 45259, 10289, 34059, 61538,
-18444, 49200, 5632, 30190, 45455, 20904, 62993, 8276, 34548, 53319, 17359,
-47191, 3488, 34379, 49344, 14093, 54125, 24898, 41914, 1552, 62597, 28551,
-14823, 51790, 37972, 7872, 29782, 64635, 20153, 48061, 768, 36974, 57525,
-14159, 29972, 47403, 8472, 61307, 24762, 40096, 13091, 49050, 22444, 56435,
- 7766, 32101, 45633, 17294, 62106, 9216, 38643, 27184, 51777, 14688, 31177,
-56015, 1859, 47959, 20784, 31666, 58851, 4952, 45840, 17449, 36665, 51741,
- 9117, 29146, 63064, 20812, 42069, 2989, 57066, 25665, 39479, 9703, 53678,
-18377, 33501, 60861, 21, 45412, 28672, 15163, 59778, 37056, 9927, 54267,
-22677, 44367, 2064, 33163, 64851, 13496, 48561, 23628, 41413, 9145, 61675,
-30229, 15837, 50043, 35307, 5460, 58902, 23107, 43080, 13037, 55990, 26300,
-39641, 6098, 62897, 24855, 41654, 11805, 50746, 17220, 30038, 64237, 4181,
-44164, 27718, 15772, 52471, 35602, 1286, 57977, 23685, 47947, 10994, 38839,
-21347, 56901, 3104, 34951, 47365, 14329, 59736, 25384, 38675, 6950, 51415,
-19790, 34579, 58946, 8764, 42417, 24443, 55826, 12268, 39661, 23636, 60876,
- 1246, 39060, 21240, 50543, 14105, 32203, 59837, 3367, 44641, 27426, 12091,
-62152, 37224, 15437, 53521, 29143, 7711, 49737, 35313, 18290, 60155, 6669,
-45040, 20864, 37645, 55504, 9196, 28696, 47634, 13245, 59361, 22096, 39908,
- 1035, 47513, 26219, 56749, 13878, 30354, 44963, 7976, 61561, 25205, 40394,
-12829, 48964, 22519, 63524, 5403, 34608, 46370, 20378, 61159, 10410, 34131,
-44946, 19220, 56173, 6776, 40210, 24511, 59357, 9046, 43174, 21879, 54332,
-11685, 41431, 23034, 60305, 3208, 39564, 25598, 64409, 12150, 42904, 22275,
-51049, 1586, 33522, 62527, 14071, 47687, 24757, 41817, 3515, 54351, 22396,
-39397, 14112, 63984, 32322, 6813, 50100, 29253, 16076, 62984, 36334, 9055,
-53813, 24635, 44349, 4004, 34553, 65161, 15193, 47643, 29829, 6099, 52352,
-36566, 18997, 59627, 11709, 43305, 25968, 52083, 3510, 31439, 60656, 14338,
-44014, 28007, 18643, 32051, 46533, 5772, 52802, 28645, 15877, 63651, 37845,
- 4392, 31418, 48105, 16478, 53224, 29156, 7937, 65068, 36638, 18494, 49820,
- 2042, 33611, 56772, 17041, 45606, 10591, 29319, 49152, 21383, 60092, 430,
-29659, 46718, 20007, 61864, 6337, 41183, 26614, 48676, 13158, 58138, 22296,
-40278, 4377, 64774, 25587, 44163, 11564, 55662, 17915, 35664, 50302, 6285,
-32290, 64290, 14602, 43087, 24770, 55502, 8271, 41277, 24434, 58508, 12541,
-39550, 26653, 54720, 3576, 38603, 21778, 64485, 13210, 42489, 25259, 48966,
- 7067, 63001, 18396, 34506, 44103, 10639, 54088, 17125, 30943, 57272, 3412,
-43231, 24233, 60640, 13602, 33069, 52584, 9311, 43167, 23450, 56166, 5416,
-33208, 45870, 14739, 61182, 25911, 38243, 6580, 55698, 22776, 47601, 14263,
-32397, 58900, 7271, 43780, 23307, 55394, 14420, 36174, 49409, 8435, 29590,
-60571, 16654, 47324, 27849, 2011, 63765, 37964, 14987, 28691, 57294, 7524,
-47985, 27994, 14731, 58363, 36492, 4097, 53390, 24353, 46987, 13790, 36982,
-65428, 7547, 31000, 45319, 17201, 61469, 3217, 39448, 26753, 54702, 12860,
-49267, 25033, 40667, 1168, 59645, 23386, 48815, 9767, 41027, 21539, 50955,
-13351, 34216, 58308, 341, 46527, 24624, 39640, 11273, 59680, 21802, 41759,
- 6791, 50607, 31077, 14942, 56993, 35662, 5464, 49604, 27801, 16553, 58642,
-36428, 8485, 53667, 26396, 41961, 197, 62447, 24678, 48577, 13481, 39382,
-21978, 51807, 3190, 30139, 64231, 13587, 42399, 23857, 52851, 7558, 30889,
-56080, 12730, 46141, 28627, 15396, 62927, 37027, 344, 51187, 25370, 43625,
-11784, 56632, 18347, 35689, 51513, 1846, 29439, 59029, 14180, 47660, 22005,
-40841, 3723, 52982, 31564, 14972, 58611, 36294, 1690, 49638, 27754, 16401,
-56283, 38090, 10160, 30672, 63821, 18992, 45528, 5118, 32822, 59552, 18784,
-44753, 9555, 33688, 54920, 20829, 44363, 2886, 32993, 58726, 17148, 41537,
- 9886, 51762, 20902, 33018, 62718, 4054, 45495, 19408, 32891, 53708, 1477,
-42818, 17688, 63811, 29408, 4703, 50342, 36771, 18880, 54328, 2477, 42569,
-24810, 60264, 12568, 34359, 44557, 7699, 65287, 23954, 40495, 11922, 53599,
-20223, 31314, 59856, 3985, 45298, 18450, 31008, 53103, 8290, 34753, 59324,
-14845, 46258, 27588, 4889, 51529, 37450, 20804, 65078, 8493, 34233, 50241,
-18651, 41014, 3840, 59003, 30113, 15593, 51817, 36947, 6000, 56149, 27912,
-15245, 50885, 36811, 418, 57312, 23775, 46531, 11889, 40638, 21546, 63753,
- 2552, 33290, 51342, 17731, 42955, 8590, 54276, 20811, 35123, 61161, 1849,
-46704, 20662, 34420, 55974, 8875, 42645, 22558, 59567, 12370, 39891, 25999,
-53288, 6674, 32388, 64962, 12843, 42099, 23166, 52699, 5287, 32473, 54991,
-12458, 41966, 24081, 61627, 1863, 47572, 28639, 16021, 50982, 35189, 4763,
-57985, 29231, 16568, 49334, 35817, 6751, 62895, 26115, 43105, 10367, 56690,
-20112, 34244, 51396, 5116, 47532, 19965, 32247, 63185, 2218, 42601, 24002,
-54781, 12200, 38961, 22894, 64047, 235, 36114, 52247, 16031, 31868, 45662,
- 4773, 62839, 28516, 15844, 38058, 51875, 6725, 32892, 65292, 16756, 47805,
-28099, 2259, 58800, 36390, 10206, 52098, 25367, 41251, 13823, 58070, 29570,
- 1568, 53902, 36971, 14698, 49499, 27960, 3505, 62992, 36235, 13929, 46796,
-26152, 61397, 2110, 30369, 46744, 17293, 52024, 8277, 33957, 55970, 17137,
-46774, 5348, 34867, 58203, 15286, 45595, 28188, 7570, 60065, 36436, 18748,
-48456, 10201, 56234, 26491, 41496, 5411, 58374, 19720, 34481, 52018, 2529,
-44965, 19651, 32915, 60766, 12247, 48876, 23076, 39218, 7310, 57025, 24578,
-43623, 12240, 62223, 22169, 40510, 222, 54352, 27236, 38835, 9626, 58022,
-19419, 34569, 46804, 7757, 65512, 17020, 59969, 11539, 44803, 26692, 40618,
- 2814, 58957, 24807, 43049, 11787, 54947, 21374, 39770, 5692, 59366, 24686,
-43447, 11146, 60812, 20220, 30293, 47882, 7214, 62771, 19833, 32404, 44066,
- 5717, 52952, 17466, 33239, 56472, 10217, 44252, 33039, 17649, 63286, 3799,
-32632, 50971, 19564, 42273, 10623, 54008, 27161, 38606, 2617, 62128, 20255,
-30066, 45460, 9329, 58081, 23759, 38548, 1951, 49808, 19668, 32979, 63017,
- 4462, 42978, 22061, 50399, 10933, 32138, 60108, 19593, 47723, 8181, 41425,
-26968, 53742, 1731, 31594, 57870, 20189, 45672, 4559, 32699, 61854, 19917,
-48817, 7804, 39142, 26587, 55508, 10977, 42248, 21522, 62783, 1539, 40088,
-25716, 48581, 12468, 58591, 22077, 40519, 2775, 53058, 21165, 39439, 11884,
-64182, 25528, 42934, 1365, 51771, 19820, 33960, 62329, 3980, 42589, 24737,
-59274, 13033, 31947, 50970, 5755, 42419, 23758, 56056, 12082, 40541, 21607,
-51297, 3403, 34770, 62889, 19264, 45569, 8588, 39975, 26536, 60488, 11518,
-39329, 21704, 53603, 2692, 32998, 56123, 19471, 47468, 10720, 30577, 58144,
-17781, 44413, 6946, 32750, 64890, 18987, 46194, 9072, 35221, 61542, 16145,
-30639, 53061, 3923, 42301, 24829, 64462, 8797, 32080, 54734, 16655, 47907,
-27766, 2407, 63634, 37422, 19639, 52474, 9247, 42905, 25297, 61947, 13994,
-37577, 51075, 4573, 29476, 63772, 18710, 47769, 11376, 38901, 22772, 60772,
- 5350, 32698, 54341, 17886, 46178, 9719, 33555, 57190, 16888, 45013, 28011,
- 945, 61345, 35697, 19516, 50710, 5285, 34772, 58276, 20918, 42396, 9161,
-54958, 26771, 39593, 3935, 62222, 21615, 46710, 13502, 33464, 55358, 7599,
-43209, 24125, 60797, 11164, 38490, 21029, 55388, 7117, 43366, 24959, 64805,
-13575, 33771, 47924, 6202, 59821, 22850, 41282, 141, 49071, 26585, 55008,
-12704, 40232, 24329, 65482, 6727, 30114, 48649, 17695, 56884, 11932, 39384,
-26660, 63581, 4488, 43660, 24528, 54329, 12528, 39963, 22770, 56686, 6956,
-38387, 27219, 60784, 11578, 47500, 19948, 33297, 58768, 6822, 43315, 22837,
-57271, 10305, 36093, 49503, 16209, 29357, 61982, 5841, 46580, 28093, 14532,
-51976, 37805, 439, 57210, 24788, 44263, 9783, 34863, 64493, 12880, 48313,
-23865, 41208, 1734, 62400, 19499, 31527, 44887, 10863, 54183, 17472, 30014,
-56987, 2614, 46730, 20752, 33028, 62342, 7371, 49145, 23698, 41639, 11878,
-47384, 21530, 64178, 4126, 33206, 44371, 16946, 61096, 28504, 6651, 52741,
-37006, 18261, 48449, 9688, 60433, 26831, 39095, 4409, 49012, 22475, 59436,
-11130, 32195, 44306, 15195, 53525, 28640, 6290, 62415, 37359, 18525, 49350,
- 4612, 34038, 61430, 16858, 44800, 28208, 287, 56252, 35611, 15843, 48502,
-26485, 61122, 3593, 38315, 21797, 52043, 14177, 34973, 64051, 7465, 42661,
-24022, 55044, 11584, 40629, 21833, 64662, 3747, 32421, 54112, 14505, 41427,
-23327, 52345, 870, 31108, 61156, 14761, 44259, 28115, 9042, 58587, 36579,
-17933, 51802, 5780, 43419, 27277, 60949, 14067, 31764, 48019, 7297, 55799,
-24124, 41012, 10794, 58763, 19828, 33040, 53830, 8849, 43181, 23932, 57367,
- 3871, 40934, 21714, 55356, 12233, 34455, 46574, 18333, 60225, 4556, 33326,
-45331, 19310, 64586, 6979, 41005, 26284, 52924, 10843, 32269, 57842, 19887,
-42315, 5275, 52652, 21178, 33571, 56193, 10419, 44001, 20146, 37211, 63475,
- 436, 29981, 44422, 20951, 56824, 10793, 31763, 43760, 19949, 65000, 4041,
-32514, 52075, 16455, 44982, 28123, 880, 61893, 38014, 15647, 28701, 48988,
- 8344, 64748, 25575, 38892, 11275, 56480, 21850, 47237, 1447, 31535, 55176,
-16821, 45441, 28556, 3295, 59264, 38102, 16302, 30872, 48813, 6992, 63831,
-23168, 41511, 13661, 54907, 29348, 2098, 50473, 37612, 18230, 53602, 5125,
-33701, 48309, 20022, 57375, 9961, 38932, 22685, 61913, 1239, 47650, 30782,
-15905, 52138, 35126, 3487, 54803, 26130, 44320, 14221, 35323, 57904, 1467,
-48889, 24225, 40021, 11835, 64475, 22446, 47613, 2834, 31284, 60941, 20704,
-41893, 9322, 54579, 26258, 39342, 1090, 57020, 23645, 43906, 9133, 60047,
-17068, 33921, 48318, 4784, 54866, 24875, 41454, 11940, 61578, 17397, 35567,
-51050, 7674, 30700, 56649, 16122, 45372, 27810, 515, 62011, 36651, 15124,
-54399, 28869, 6393, 49619, 35431, 17063, 60971, 8957, 34148, 51272, 14702,
-41153, 24705, 53441, 143, 31779, 64675, 15111, 45019, 28157, 6346, 53052,
-36386, 16355, 59371, 29259, 4744, 49938, 35205, 17215, 63087, 9827, 42634,
-26875, 55218, 4529, 46903, 29377, 15067, 58386, 35873, 5982, 49567, 18135,
-29750, 56538, 10956, 41169, 23143, 53249, 20, 36156, 64834, 15576, 30838,
-46742, 9080, 61214, 25799, 39029, 13329, 54975, 25077, 47453, 1217, 31853,
-62024, 18630, 49203, 6254, 41498, 26138, 63917, 12490, 40444, 22980, 51137,
- 596, 33653, 60817, 20382, 46359, 4614, 35827, 55900, 15318, 30020, 51673,
- 2441, 43248, 24983, 54042, 7616, 32198, 59292, 17947, 45323, 12986, 36057,
-51414, 4761, 30638, 57492, 15879, 44409, 28626, 7459, 60789, 34628, 17691,
-49475, 1166, 32846, 58161, 12735, 44425, 24066, 40205, 2705, 56161, 29318,
-15442, 50407, 35895, 8860, 59301, 26539, 42797, 2166, 51294, 29340, 14921,
-62023, 36633, 8101, 48120, 23040, 54587, 9981, 30452, 45451, 16070, 64587,
-28261, 2760, 49559, 35806, 18773, 60372, 11241, 48257, 26609, 39343, 5479,
-64098, 30579, 16879, 52557, 35571, 540, 48330, 25962, 62796, 12449, 39732,
-21956, 51810, 2618, 31766, 54693, 18977, 42529, 8508, 61925, 27153, 38590,
-11388, 47905, 21736, 58877, 3987, 32211, 45353, 17051, 52606, 1203, 31558,
-60777, 21270, 46121, 8027, 35379, 51214, 15650, 30915, 58973, 363, 43012,
-23904, 64964, 10729, 39578, 21832, 52305, 3201, 30552, 54977, 14008, 41439,
-25567, 64324, 976, 30745, 52278, 13962, 42212, 24104, 58215, 2865, 37479,
-50896, 16958, 29958, 63399, 8889, 45977, 28998, 16261, 60810, 37153, 5198,
-51118, 27434, 16207, 55494, 38086, 7065, 29195, 57660, 20892, 48786, 4301,
-40352, 26283, 63605, 12726, 34851, 51881, 8986, 43981, 28618, 16738, 60638,
-36223, 1153, 52631, 27784, 16458, 57892, 37793, 8937, 46951, 24474, 55153,
-12559, 34424, 45349, 1519, 65357, 29055, 15748, 53698, 35298, 10575, 47263,
-25520, 56485, 541, 34142, 45776, 18069, 64631, 9394, 39191, 22926, 51422,
- 2501, 30795, 58268, 14919, 46317, 27396, 8561, 52237, 36768, 11979, 63171,
-24433, 45728, 7511, 40115, 21208, 57776, 11051, 47027, 26996, 41460, 5901,
-56955, 30126, 15164, 49534, 37189, 443, 59354, 23875, 44707, 13299, 30731,
-47787, 7659, 61851, 34780, 18613, 44835, 11071, 54462, 25965, 40916, 4144,
-65465, 20339, 33169, 47993, 10405, 55740, 25278, 39444, 1616, 58321, 21435,
-42928, 15542, 51917, 29351, 3404, 64639, 35769, 17685, 50454, 1714, 46746,
-30564, 15139, 62480, 35472, 10101, 53169, 25657, 42567, 739, 63209, 20102,
-30455, 51698, 8556, 42298, 24660, 56550, 12648, 39157, 21449, 50974, 53,
-29942, 62170, 15790, 45559, 27692, 8636, 65414, 36881, 18002, 49641, 4147,
-31245, 58787, 14317, 46295, 27370, 7683, 52903, 37491, 17813, 60802, 2201,
-44566, 29662, 14988, 54214, 37461, 6603, 56757, 23647, 47087, 11256, 34276,
-59593, 19155, 44635, 3003, 34925, 54319, 17712, 42380, 6006, 62389, 28792,
-14945, 50876, 36253, 7751, 64205, 27317, 14570, 49839, 35200, 10205, 55963,
-24753, 45550, 4256, 30657, 58761, 15743, 47110, 27816, 9928, 62495, 35723,
-42150, 20992, 64749, 29023, 12606, 50278, 37365, 6916, 55849, 25719, 46345,
-13735, 33275, 64342, 8974, 42786, 24057, 57370, 12225, 40116, 21834, 63384,
- 5389, 31115, 51907, 13401, 41706, 26034, 54129, 4431, 37702, 57122, 14892,
-28327, 49879, 6840, 35535, 58910, 13332, 47390, 28228, 16673, 63712, 37833,
- 5235, 31081, 53190, 21045, 43461, 11006, 65319, 19732, 31410, 46428, 901,
-59846, 22893, 40937, 14092, 53761, 28671, 5642, 63969, 37386, 12842, 51926,
-23245, 42746, 9602, 58372, 25102, 40657, 4102, 65128, 21898, 40593, 12917,
-56319, 26819, 47800, 5423, 33780, 59686, 13288, 42697, 22881, 56847, 3524,
-30693, 47416, 18918, 64015, 8154, 39235, 24792, 47677, 11679, 56318, 21446,
-39657, 653, 61483, 29932, 15995, 52576, 36781, 8019, 45030, 23719, 65299,
-12419, 39302, 22352, 50410, 3100, 33379, 62952, 14701, 45704, 27782, 7341,
-57042, 37658, 18890, 52895, 2436, 43228, 22762, 59120, 6571, 33738, 52754,
-17647, 43761, 9184, 34461, 56196, 13947, 43108, 22364, 59024, 5256, 35067,
-49764, 16244, 29555, 62758, 7719, 42694, 25913, 53306, 13215, 38930, 23060,
-63584, 6570, 48388, 26268, 38677, 10881, 62080, 19377, 37049, 49684, 910,
-28464, 62893, 19936, 42070, 10375, 52874, 21180, 34778, 59504, 3473, 47230,
-20506, 36289, 54218, 10869, 28785, 61711, 20214, 46192, 6291, 32645, 64700,
-20060, 49039, 9942, 41577, 25863, 62598, 4061, 40384, 21303, 54747, 12187,
-38923, 24072, 57505, 5575, 46937, 18401, 32557, 63275, 1913, 42674, 25350,
-59078, 12288, 40750, 22722, 52509, 8040, 34026, 57276, 17036, 42892, 1425,
-55833, 29101, 15246, 49982, 36900, 8105, 59449, 22426, 45415, 14501, 30571,
-56476, 4000, 43165, 25377, 59426, 9552, 34917, 47103, 13322, 57539, 23938,
-40737, 4527, 52760, 29978, 15803, 62973, 35975, 8200, 50226, 21037, 34782,
-62206, 10724, 44149, 19908, 36921, 54529, 3768, 29208, 63288, 20688, 44797,
- 9328, 33737, 55903, 13960, 42061, 25696, 50738, 6324, 34545, 62292, 19298,
-45171, 12556, 34654, 59500, 8673, 46604, 20681, 34127, 56189, 4979, 45357,
-19095, 32390, 60441, 7508, 43814, 27447, 14903, 56815, 37338, 3674, 52806,
-23201, 41855, 14151, 58590, 28742, 1238, 49796, 36154, 17506, 62761, 9299,
-33485, 52582, 13937, 43484, 23292, 58769, 623, 31252, 54782, 15662, 45575,
-27348, 4810, 56486, 34944, 14818, 50519, 29060, 7981, 63344, 35317, 18868,
-49758, 3183, 31536, 61844, 16711, 43777, 27814, 8157, 58178, 36439, 20915,
-44469, 5665, 63037, 19252, 30713, 43811, 12310, 60793, 24852, 41051, 5104,
-55262, 27233, 40736, 11998, 63859, 20310, 37663, 50196, 3905, 31445, 59889,
-14170, 42119, 22946, 54495, 1582, 34072, 48190, 13513, 65438, 24305, 39702,
- 2430, 53307, 18926, 33692, 62628, 9678, 45930, 28276, 16921, 53856, 35618,
- 5192, 63685, 27701, 16123, 49845, 37303, 1749, 57963, 25006, 47150, 8611,
-35968, 59699, 16716, 28766, 45934, 2774, 54179, 22418, 41085, 13439, 63853,
-30816, 6096, 50054, 35647, 13010, 61261, 23897, 45437, 8324, 40121, 21868,
-56035, 11809, 43401, 25514, 60375, 4288, 39610, 21261, 50518, 13387, 33553,
-57761, 6400, 45844, 27986, 16530, 61704, 37728, 2868, 46788, 23684, 59795,
-11661, 41506, 22238, 55415, 7255, 36639, 49904, 14601, 30741, 57481, 2670,
-44775, 27653, 15974, 60504, 37426, 5832, 53952, 28847, 16459, 49569, 35550,
-11230, 64117, 25277, 46498, 4823, 33402, 49027, 18491, 62561, 9109, 30822,
-44118, 17339, 53681, 4342, 31316, 63643, 20945, 47602, 9333, 31937, 56004,
-13447, 41707, 24478, 59620, 625, 39916, 20702, 52958, 28958, 4813, 58554,
-37731, 19077, 50445, 1678, 33331, 61874, 18190, 40850, 7407, 52540, 21490,
-31944, 55953, 696, 17329, 51845, 4185, 33068, 57697, 15678, 44271, 27698,
- 2336, 61081, 35500, 19260, 53460, 6140, 41458, 23313, 51009, 346, 31807,
-55859, 18133, 44891, 9264, 33853, 61200, 20772, 46130, 7343, 34712, 59744,
-16813, 30370, 52136, 712, 42689, 22191, 64992, 11262, 33457, 44732, 2486,
-55615, 22530, 40802, 12300, 61118, 26686, 39299, 2974, 51732, 17331, 34698,
-56184, 8602, 47857, 26357, 38435, 11555, 57921, 21673, 49212, 3440, 33797,
-45997, 16925, 60604, 28692, 2292, 51043, 35613, 17903, 47440, 11096, 54928,
-27278, 38362, 1234, 61395, 21117, 43077, 11526, 52904, 29189, 7269, 63417,
-36693, 18084, 50267, 10503, 42629, 23402, 53703, 2039, 32785, 60762, 16574,
-45233, 28526, 5226, 51395, 36148, 18549, 59585, 9540, 33405, 47759, 20642,
-56797, 2103, 41546, 26839, 59446, 10172, 30859, 52988, 20757, 42259, 8770,
-60611, 29183, 16584, 49834, 35145, 6054, 63988, 24265, 41365, 11815, 50927,
-18834, 30960, 61035, 4379, 44878, 27672, 15386, 65170, 36328, 1878, 51253,
-28748, 14737, 55328, 36561, 3353, 46733, 23866, 56585, 11504, 39820, 21452,
-59959, 1427, 42609, 27119, 54469, 12375, 40169, 21858, 56663, 4919, 47591,
-29760, 14549, 60382, 35892, 8405, 53704, 25435, 46083, 1943, 31936, 65480,
-14430, 44992, 27553, 8437, 52184, 37873, 18635, 56566, 5145, 37108, 49653,
-16759, 30300, 57649, 1824, 45210, 28178, 16035, 52378, 35345, 11037, 60165,
-25020, 47134, 634, 34576, 65191, 14010, 43404, 26096, 53821, 7222, 40714,
-21597, 56409, 14119, 36120, 50152, 4872, 31499, 61594, 19674, 45911, 6366,
-31243, 64998, 21160, 40655, 10629, 54035, 26179, 43102, 4400, 63443, 24537,
-39931, 10049, 54160, 17941, 36550, 50279, 6879, 28759, 61073, 16979, 45401,
-27335, 1315, 64230, 35285, 20125, 50864, 10596, 42726, 25831, 55716, 2143,
-30483, 47255, 17838, 56707, 6127, 39894, 26374, 60032, 11505, 48188, 17608,
-36204, 51933, 2425, 29071, 61777, 18600, 47826, 5124, 30572, 60271, 15537,
-47002, 28109, 1767, 56835, 36541, 17889, 49610, 4274, 29886, 62799, 13426,
-41245, 25090, 54422, 11064, 38806, 23163, 64020, 749, 49051, 19022, 35521,
-55614, 13044, 29601, 47539, 7186, 65020, 20689, 30753, 46343, 10551, 59544,
-24504, 39884, 3078, 56099, 21950, 39063, 8112, 50455, 34168, 14453, 65522,
-27988, 6265, 49382, 37350, 20061, 62214, 11512, 46716, 26194, 39309, 1910,
-57028, 22608, 42233, 13775, 53308, 28800, 6232, 60056, 36760, 13121, 48733,
-24135, 54528, 3430, 32573, 46064, 14651, 58994, 27597, 2251, 52182, 37635,
-18417, 48669, 10063, 58426, 26504, 38464, 1058, 53123, 18303, 35577, 55871,
- 9714, 28744, 45765, 19685, 62773, 7048, 31070, 44769, 16693, 59096, 28750,
- 5184, 51812, 37893, 16029, 29661, 61438, 8626, 43799, 22675, 51001, 3135,
-33832, 58240, 13016, 42807, 22664, 52504, 6565, 32686, 60551, 19540, 42930,
-12202, 55980, 23462, 40280, 5439, 61662, 30219, 14472, 50792, 37541, 7761,
-57506, 24021, 46222, 11592, 41683, 21823, 59021, 1103, 33463, 54097, 16255,
-47433, 28129, 5177, 63430, 37950, 16133, 31196, 56667, 9289, 44134, 25168,
-52230, 2401, 31014, 64884, 16063, 43962, 27321, 8962, 54613, 36487, 15655,
-51816, 28469, 4451, 64356, 37865, 16432, 28584, 48277, 1791, 61551, 24729,
-39839, 11609, 54588, 19245, 30187, 50472, 7450, 34857, 63301, 19346, 43199,
- 1273, 55589, 26914, 38855, 7903, 57429, 21584, 43390, 12922, 58880, 26202,
-39936, 246, 53051, 20535, 34607, 61188, 11601, 46443, 25035, 41084, 1799,
-53174, 29346, 15903, 61635, 36383, 5262, 49661, 18009, 32619, 55670, 9431,
-46006, 18005, 36239, 64900, 11232, 28876, 48060, 20901, 56582, 5382, 34595,
-44857, 19357, 61147, 11016, 34304, 44725, 63981, 21159, 47227, 28427, 7266,
-59887, 36999, 13298, 51131, 24017, 43134, 8272, 62205, 23805, 39566, 11144,
-58263, 21501, 46940, 4878, 37321, 64895, 15445, 29794, 48022, 2531, 56282,
-28163, 16388, 49705, 37871, 8300, 62362, 24213, 47021, 13557, 39368, 23588,
-58473, 5939, 30824, 52762, 18922, 48048, 8160, 33240, 59319, 13560, 44010,
-23797, 63105, 6907, 39922, 21979, 53124, 1711, 31326, 62325, 20049, 47271,
- 6559, 40123, 26134, 64728, 9874, 40017, 22628, 53877, 13550, 31652, 57456,
- 3786, 42723, 24427, 63699, 8339, 39988, 23150, 50788, 15140, 34519, 59039,
- 2708, 47001, 24246, 41810, 13863, 54725, 34220, 6591, 61372, 27777, 15020,
-49591, 37222, 8754, 55447, 23594, 42388, 12356, 64720, 21928, 40932, 3416,
-54303, 31324, 12894, 50820, 35231, 18585, 61673, 5129, 44921, 35147, 17252,
-55608, 1085, 46824, 20000, 37025, 58332, 3908, 31098, 51665, 14266, 42398,
-26852, 60166, 759, 46484, 35025, 20624, 57663, 9485, 30493, 48496, 19660,
-54227, 7390, 40124, 25446, 62340, 9934, 43603, 18271, 52810, 30574, 6189,
-64470, 35324, 17979, 49817, 8921, 34610, 56259, 19501, 46341, 3089, 33646,
-63881, 13582, 42791, 22780, 51186, 6514, 31161, 57053, 19086, 48002, 11696,
-39468, 26456, 58364, 4387, 37079, 49899, 16300, 29732, 63184, 484, 46849,
-27480, 15637, 60613, 37866, 8379, 50344, 27462, 14319, 64077, 38180, 4873,
-29953, 55908, 20314, 44653, 7481, 33076, 53119, 19775, 42193, 11059, 60984,
-23426, 38652, 2876, 48744, 26584, 62468, 10986, 39983, 21516, 55269, 6,
-39256, 26861, 49112, 11877, 58792, 18484, 34234, 47694, 2668, 60837, 22095,
-38561, 12316, 48647, 26874, 56768, 908, 41693, 23008, 65298, 13143, 34355,
-52607, 3620, 44073, 27872, 15285, 56157, 38069, 5434, 31354, 60138, 17700,
-46145, 9282, 35219, 65035, 13858, 42035, 24641, 53818, 695, 36146, 50285,
-15321, 29639, 64573, 4756, 42200, 24291, 53470, 11382, 35050, 58211, 21061,
-43901, 7340, 34029, 54573, 20413, 42220, 11312, 65350, 26508, 39415, 8192,
-52721, 19127, 32325, 61055, 2562, 46112, 18663, 31859, 58953, 7899, 47893,
-23732, 39862, 10718, 49508, 22216, 61120, 2055, 34968, 43868, 18855, 54905,
- 5898, 37063, 50475, 12787, 29700, 63755, 15922, 46887, 28075, 4091, 61050,
-36799, 19522, 54448, 11008, 42615, 23478, 51910, 2864, 32407, 59696, 17760,
-42496, 7018, 48972, 27011, 64677, 10097, 33837, 45978, 20021, 56028, 204,
-33393, 45841, 19170, 64197, 10967, 40466, 26139, 57305, 7799, 48179, 29224,
-16484, 59884, 36112, 6954, 46490, 23687, 65194, 14137, 32035, 44321, 5766,
-51006, 27638, 15385, 61987, 38098, 2738, 32744, 56642, 13851, 49271, 26023,
-41039, 617, 55676, 22209, 43574, 11991, 60438, 25866, 40957, 6430, 54764,
-25022, 39443, 11703, 60100, 18043, 30108, 49495, 1008, 41238, 25268, 64467,
-10473, 39273, 21678, 51135, 3532, 32509, 54887, 16200, 45095, 27305, 4,
-64954, 35590, 16414, 49693, 28050, 3496, 62700, 36414, 17672, 52314, 10263,
-42861, 25125, 61900, 7762, 30776, 51597, 19721, 41444, 410, 59724, 27077,
-38700, 13623, 54545, 21192, 47404, 7108, 36896, 59303, 14912, 29924, 47848,
- 1143, 56205, 23497, 40883, 11245, 58930, 26125, 39530, 5847, 51718, 18453,
-32206, 58401, 9363, 45708, 17268, 32246, 62324, 4580, 41367, 24138, 53353,
-10110, 38541, 21776, 59815, 13094, 48301, 24677, 40374, 3061, 54463, 27019,
-38468, 9666, 64641, 22273, 43725, 14166, 50862, 29872, 5028, 58253, 37075,
-16449, 49768, 28106, 7986, 65452, 38143, 12438, 31085, 48194, 20273, 57580,
- 6648, 41863, 26014, 60415, 2409, 31758, 52176, 17097, 44275, 7169, 37498,
-62797, 14787, 28840, 47614, 3034, 55352, 24115, 39645, 8956, 19809, 49816,
- 1383, 32507, 55627, 19181, 42047, 4881, 65117, 30149, 16408, 53829, 36661,
- 1990, 48503, 26089, 60485, 12924, 38554, 25355, 54405, 7730, 49213, 21716,
-40652, 11568, 62057, 25143, 44340, 4148, 36816, 53147, 15190, 29162, 60045,
- 2017, 34779, 51208, 12122, 45168, 28340, 16305, 62706, 37983, 7, 29618,
-54559, 18161, 41282, 5396, 56820, 27089, 38530, 10399, 50309, 17100, 33506,
-59146, 7947, 44452, 28242, 15547, 56065, 37888, 310, 31716, 59590, 16289,
-45921, 27735, 6092, 52568, 37131, 20499, 58307, 12008, 43683, 26553, 55427,
- 4317, 39874, 21338, 62438, 12038, 38546, 25729, 51021, 549, 31717, 56249,
-19488, 41917, 4425, 63622, 30681, 16263, 50779, 34827, 1465, 57859, 25825,
-44552, 7882, 37685, 62487, 14971, 27896, 45370, 6865, 56145, 25138, 39697,
-11044, 64307, 21014, 31801, 51036, 8081, 43430, 23495, 62422, 11481, 40404,
-25423, 56376, 7574, 38878, 21804, 53217, 10774, 32025, 63335, 17949, 44528,
- 3804, 33186, 56240, 13442, 43289, 23030, 59517, 286, 38540, 26803, 48057,
-12129, 58475, 25265, 40403, 2392, 47675, 22395, 60919, 14830, 32595, 44241,
- 7410, 58389, 28197, 16621, 50067, 36506, 99, 61328, 25830, 44830, 15231,
-33013, 64359, 5519, 41363, 22139, 53935, 10713, 32868, 61369, 18298, 44492,
- 6924, 34217, 55561, 14284, 43912, 32331, 3116, 59445, 20856, 32030, 53793,
- 9297, 44802, 17934, 33542, 57861, 1548, 48433, 27579, 16034, 63555, 38064,
- 3951, 30543, 55830, 17565, 47610, 8403, 35251, 58540, 15403, 30768, 52055,
- 4484, 43569, 25319, 63747, 14193, 32450, 45540, 6938, 56664, 24761, 39808,
-10089, 54372, 17717, 46357, 30676, 6003, 61944, 34823, 18610, 49731, 8529,
-31216, 58285, 16174, 47923, 29192, 6368, 53842, 36213, 18816, 61686, 12257,
-43740, 26844, 51347, 3371, 33782, 58365, 19983, 47589, 7708, 32362, 61634,
-18829, 45251, 6529, 33045, 57143, 18645, 45219, 8887, 32858, 61143, 17378,
-49227, 1071, 31894, 45953, 17183, 63149, 3968, 35680, 50256, 15943, 31057,
-59275, 57, 43406, 23777, 50850, 10539, 34701, 56951, 15971, 43910, 27786,
- 5914, 52627, 36658, 12619, 64724, 26314, 44990, 5364, 30278, 57637, 16050,
-44905, 33822, 11167, 61763, 25846, 44801, 276, 32824, 56542, 18742, 42773,
- 9258, 50159, 21001, 32713, 58394, 1629, 45797, 18452, 34051, 63032, 8700,
-40822, 24247, 54225, 12972, 38272, 21168, 57709, 4334, 34989, 52835, 14997,
-43979, 27563, 8786, 61421, 37583, 17343, 51603, 3842, 43994, 30957, 15793,
-53125, 36219, 1250, 63361, 23373, 43905, 12968, 33938, 55078, 3751, 48973,
-27671, 16570, 60356, 37625, 7859, 53801, 25188, 47615, 11727, 40267, 23918,
-63374, 5443, 38840, 21245, 50537, 10115, 35449, 64706, 16996, 32757, 47654,
- 2008, 57504, 20267, 32197, 51715, 4864, 43306, 25935, 62333, 9463, 37242,
-51256, 15102, 30983, 57583, 7125, 44970, 28369, 15032, 62868, 37327, 5754,
-50127, 28318, 17028, 58379, 38222, 9448, 31127, 55155, 18690, 43094, 6612,
-60172, 29038, 15767, 38116, 50295, 4160, 32569, 55526, 17278, 42141, 10365,
-65384, 26057, 48147, 4821, 40277, 22964, 58015, 11335, 39210, 26415, 63701,
- 5183, 41804, 22203, 50915, 13459, 35962, 62499, 3646, 31248, 50239, 13257,
-42846, 22981, 63968, 7637, 34440, 53357, 20697, 41954, 605, 56018, 25912,
-47619, 13552, 32795, 64744, 3362, 43637, 25635, 51084, 8941, 34037, 62914,
-19515, 45686, 6327, 32039, 60945, 19320, 48685, 2089, 41247, 26373, 56927,
-12580, 39757, 22434, 60311, 3121, 32116, 52166, 14583, 42759, 25464, 59041,
- 1126, 40584, 23286, 54029, 8668, 34956, 48142, 20421, 63465, 10411, 34266,
-47116, 21131, 58221, 71, 32103, 44161, 16594, 53429, 30082, 10269, 59089,
-36152, 28787, 14451, 53110, 37689, 8473, 47770, 25236, 58636, 12462, 39861,
-22378, 49863, 9302, 29874, 56640, 18507, 44481, 3739, 32655, 63908, 16763,
-44011, 28657, 932, 59147, 35672, 19255, 54673, 9903, 32801, 46034, 20512,
-63547, 6953, 39706, 27016, 55122, 10301, 38587, 21460, 49128, 4472, 57915,
-24970, 42089, 9953, 47143, 22708, 63615, 14402, 34192, 52422, 3612, 43820,
-23336, 64427, 12499, 41571, 25183, 54813, 4312, 40705, 22017, 49055, 12094,
-62806, 26133, 41276, 9372, 50614, 17216, 33005, 64383, 1000, 46579, 28652,
-15802, 52131, 36544, 10040, 59999, 22570, 43531, 6165, 52615, 30375, 15893,
-65242, 37026, 9140, 47644, 24998, 58789, 12898, 39208, 24250, 47892, 5775,
-55089, 21654, 40401, 11085, 60020, 30755, 16789, 50009, 36105, 221, 59102,
-29095, 16056, 49383, 37666, 3662, 54144, 27377, 16425, 58619, 38227, 1686,
-29691, 53660, 18820, 44187, 4925, 65060, 30164, 16282, 49949, 37076, 2109,
-58680, 24266, 42253, 11716, 51156, 20373, 35967, 64709, 5037, 30963, 50005,
-14915, 41340, 21369, 54649, 5578, 33091, 63022, 9814, 43345, 26438, 52591,
-13090, 29982, 65379, 4271, 40993, 24750, 52603, 10338, 31976, 55353, 12536,
-41934, 22269, 59114, 3223, 35373, 50839, 13510, 42806, 24168, 57701, 1305,
-40173, 23068, 52934, 13256, 30912, 64997, 7915, 46264, 27852, 16474, 52463,
-37017, 5553, 61436, 24160, 47783, 12920, 39676, 22858, 59157, 6600, 36330,
-49881, 14488, 28975, 60624, 10776, 42922, 22815, 54284, 1064, 39519, 25651,
-65506, 11348, 46556, 18998, 33830, 57853, 8571, 41912, 22943, 52332, 3503,
-33918, 62751, 16453, 44827, 28268, 1656, 58889, 37494, 20023, 52217, 9572,
-42393, 26392, 63212, 2423, 34126, 45032, 20513, 59793, 10878, 40291, 26238,
-52996, 233, 39635, 22482, 63890, 9929, 42173, 24745, 55465, 12905, 30302,
-52581, 1725, 43346, 25049, 54656, 13362, 41141, 23535, 63686, 2938, 47859,
-25583, 39940, 10852, 57730, 20405, 36229, 51431, 7631, 29215, 58665, 20687,
-43031, 10574, 53413, 25988, 38424, 7225, 61592, 19592, 48174, 30381, 3425,
-63489, 37901, 13570, 46929, 24326, 60164, 1083, 40386, 21342, 54622, 13667,
-32049, 49110, 3297, 63196, 23916, 39286, 8651, 48947, 22345, 60423, 12451,
-40486, 26282, 52177, 5482, 30548, 64366, 13204, 41533, 24916, 55495, 4557,
-35904, 49563, 15112, 29830, 60130, 729, 47734, 26374, 41741, 10709, 63280,
-23508, 48390, 2785, 31267, 58309, 15910, 44570, 29177, 7208, 54895, 35629,
-20059, 62257, 10156, 46861, 26633, 40365, 6329, 56745, 19649, 31494, 48005,
- 9708, 61476, 19183, 30550, 43742, 112, 57926, 34264, 19176, 51276, 4415,
-42625, 22300, 59628, 14450, 34193, 53482, 8097, 42842, 25162, 58618, 3614,
-30770, 52944, 14882, 45665, 28330, 7578, 63803, 37055, 19018, 49709, 14060,
-31288, 56092, 3328, 46582, 28450, 16607, 61408, 36094, 1875, 47940, 25507,
-56502, 10792, 34893, 44192, 13905, 60512, 27516, 2598, 53523, 36926, 13832,
-47273, 25397, 56870, 1301, 31634, 46461, 19085, 63975, 11186, 39495, 26628,
-57500, 2615, 38366, 21617, 52833, 12369, 34040, 61259, 17547, 46239, 1911,
-31698, 55419, 20411, 45146, 7636, 32150, 60383, 19270, 43408, 9073, 56656,
-28993, 16285, 53919, 36782, 2455, 46803, 24176, 57960, 9788, 38635, 21980,
-50785, 14309, 34195, 60704, 6639, 41785, 22863, 53633, 11444, 32073, 58455,
-18072, 41127, 957, 56346, 28647, 15269, 51061, 37109, 8687, 55665, 28611,
-15960, 49819, 35563, 5596, 63557, 25361, 46348, 10618, 39332, 21152, 55479,
- 6428, 43918, 22283, 64357, 11721, 33334, 45874, 17425, 59726, 4630, 30891,
-43787, 15200, 56085, 28025, 6007, 50677, 37183, 17992, 60388, 8221, 48297,
-26389, 41309, 3452, 63251, 33937, 56914, 18114, 44975, 4349, 31992, 62347,
-18039, 43160, 517, 52219, 34864, 20381, 62912, 6818, 37900, 50440, 14476,
-29818, 57667, 11857, 47267, 27299, 6228, 51761, 37369, 15251, 60715, 28430,
- 3164, 49823, 35599, 14175, 57090, 22880, 43545, 1242, 65432, 26212, 41829,
-14068, 53560, 30322, 7568, 61654, 35170, 19774, 50206, 2287, 32216, 58701,
-19191, 42367, 9287, 54021, 26754, 39119, 1413, 61382, 17317, 32042, 45806,
- 8878, 58096, 24358, 38416, 2770, 54373, 19753, 36513, 60445, 7864, 29652,
-44520, 19204, 56961, 6695, 39082, 26963, 50411, 1817, 30566, 61588, 14762,
-46227, 28405, 3887, 55160, 35396, 18986, 44911, 2222, 60464, 20776, 31959,
-44121, 8363, 52130, 29276, 15098, 63284, 37521, 4172, 46133, 24253, 54890,
- 9887, 41072, 22199, 65448, 6362, 31344, 52812, 14380, 46140, 28406, 8600,
-63219, 35772, 17224, 49767, 6615, 32923, 60815, 13700, 39885, 24105, 55192,
- 8630, 46623, 28802, 14054, 61857, 37592, 5917, 53615, 25263, 41920, 10104,
-57664, 18916, 32884, 52453, 2935, 43227, 24768, 60660, 13676, 38730, 21148,
-50408, 944, 33719, 57558, 19993, 44584, 8427, 34065, 59750, 21011, 48498,
- 1780, 39081, 27069, 63306, 8103, 30636, 53631, 16264, 46248, 28203, 6190,
-61966, 34946, 19777, 50422, 9910, 43092, 27171, 59023, 2385, 35358, 51587,
-19343, 41582, 10401, 62970, 22900, 40475, 241, 56830, 26950, 38564, 9802,
-51858, 19189, 30965, 64401, 2366, 45296, 18233, 36110, 57058, 9096, 29694,
-50247, 19171, 43318, 5133, 60430, 32468, 17322, 53953, 1987, 36638, 49286,
-15150, 29260, 59649, 9271, 43254, 24299, 54785, 13330, 34482, 47538, 5152,
-64605, 21095, 31482, 46276, 11645, 53978, 17453, 36998, 57173, 4151, 29607,
-47187, 19209, 62259, 8245, 31715, 46606, 16226, 57018, 28335, 2959, 50265,
-36201, 17854, 59373, 9050, 40749, 26882, 60690, 5466, 38624, 22083, 56246,
- 9504, 36882, 50583, 14673, 31587, 62428, 4328, 44670, 27404, 14111, 55817,
-38150, 1932, 31678, 64380, 18477, 47286, 5233, 32797, 57177, 15584, 45321,
-28357, 9166, 53786, 35949, 19034, 56424, 7023, 30932, 49968, 14986, 34575,
-59487, 4609, 46497, 24029, 39437, 10371, 56628, 18127, 35262, 51534, 6425,
-30112, 57933, 19462, 45167, 2488, 34735, 54141, 17860, 42551, 6697, 60725,
-28954, 15984, 50803, 37669, 7913, 56770, 23804, 42753, 12625, 62009, 22809,
-39304, 6417, 54566, 19430, 32926, 45465, 11904, 64806, 24682, 40058, 1488,
-48848, 23017, 59244, 12277, 38894, 25012, 51953, 4856, 31999, 65017, 13896,
-46281, 25110, 40013, 2646, 49375, 22820, 64061, 13363, 32777, 46067, 8430,
-54987, 25993, 39044, 12322, 63589, 24667, 43753, 1343, 56966, 29509, 15648,
-49602, 35908, 9124, 61814, 23847, 42751, 11412, 54355, 21742, 39941, 277,
-58566, 34714, 12493, 45290, 23933, 65239, 8144, 40422, 23442, 54567, 12979,
-43424, 21467, 52377, 4816, 31178, 63351, 19218, 45683, 8882, 32376, 49198,
-20797, 64336, 7000, 32682, 44776, 12791, 61061, 23909, 40558, 4831, 54501,
-22744, 48176, 13634, 33587, 62539, 8267, 43598, 25025, 50928, 4049, 32558,
-56869, 19276, 44468, 8773, 34364, 63042, 14753, 48606, 28134, 311, 52635,
-36805, 16852, 62028, 27652, 6647, 49608, 37852, 19666, 65317, 11545, 42358,
-26657, 59852, 5330, 30992, 52757, 19440, 45860, 1826, 36090, 61819, 16190,
-29722, 50174, 7146, 42869, 24099, 60224, 11811, 33471, 46969, 18708, 64037,
- 2816, 39025, 24551, 47495, 11150, 59222, 19802, 32245, 51629, 501, 43212,
-23784, 62500, 13262, 33141, 48712, 3924, 56715, 26450, 39398, 10725, 52742,
-19629, 34383, 62001, 2806, 45478, 19265, 33665, 65297, 12368, 41975, 23388,
-52850, 5166, 32638, 61451, 18747, 45194, 10949, 31365, 64663, 20831, 42225,
- 7563, 55141, 26562, 39168, 12963, 60743, 22992, 47525, 4634, 31247, 55493,
-15491, 46218, 27913, 1830, 61566, 38083, 16866, 29785, 48641, 8084, 64542,
-22565, 41211, 12565, 55969, 26078, 47238, 5361, 31523, 59539, 17316, 40333,
- 9461, 50869, 20229, 34005, 60527, 3071, 46387, 23348, 39888, 11272, 57318,
-30048, 15548, 49449, 35999, 5862, 60531, 20745, 33271, 46944, 11163, 56373,
-19861, 35595, 51113, 4762, 30568, 65272, 17536, 42171, 12865, 47181, 26650,
-52225, 5126, 33606, 63164, 17080, 46161, 11720, 33395, 58992, 21174, 42236,
- 8401, 54340, 26707, 39001, 13147, 62547, 21425, 49185, 7111, 32628, 48032,
-17944, 64479, 11465, 40710, 26062, 56970, 900, 48721, 19312, 35549, 61063,
-13087, 29787, 52099, 2918, 47024, 19546, 33979, 56349, 11324, 43191, 22991,
-61392, 2332, 32999, 44817, 20586, 55018, 11280, 41193, 23137, 57792, 414,
-48135, 30928, 15852, 59934, 35488, 3313, 51934, 22759, 45238, 15977, 32449,
-63797, 1089, 47576, 27853, 15585, 59749, 37434, 9156, 46376, 23601, 55798,
- 6706, 41228, 21999, 64045, 11050, 31428, 48331, 17759, 55540, 3701, 30735,
-45769, 17155, 61700, 9609, 31670, 51094, 14205, 42052, 23458, 58200, 4381,
-34992, 52310, 18749, 42397, 11127, 64146, 26427, 39376, 4087, 55789, 21923,
-48007, 14541, 33558, 59875, 6486, 43379, 25648, 54937, 12167, 31265, 46228,
-17367, 61693, 3563, 41901, 26333, 53412, 11462, 34459, 59812, 20921, 41852,
- 5936, 52403, 31435, 14346, 61816, 35491, 7707, 51122, 25019, 42166, 12049,
-57007, 24653, 40634, 5477, 64120, 18661, 36011, 50846, 506, 30807, 61716,
-15815, 44323, 27951, 7876, 56682, 36349, 19299, 50997, 1151, 41638, 25621,
-60922, 9751, 32038, 51412, 13975, 42766, 24654, 54004, 5869, 34212, 64876,
-13456, 45287, 20747, 32576, 48579, 4940, 62786, 19336, 34154, 46254, 11533,
-51442, 17433, 31368, 65457, 339, 45076, 27440, 16380, 55258, 38192, 6741,
-28853, 48643, 19853, 60243, 8947, 41110, 26602, 54583, 11773, 39194, 21500,
-62518, 1321, 41156, 23484, 51545, 12987, 32877, 65123, 2637, 44612, 27579,
-16641, 61679, 37097, 8392, 52688, 26768, 42256, 12314, 64548, 21988, 48673,
- 1501, 41884, 25108, 61968, 12960, 32347, 47233, 8213, 63952, 25216, 38667,
-11226, 56352, 22289, 46620, 1138, 33551, 65144, 16631, 45024, 27859, 3714,
-51958, 35182, 16023, 59298, 29744, 2443, 49760, 35797, 17620, 56589, 5679,
-46841, 19385, 35167, 60199, 8965, 30476, 54164, 18683, 42447, 677, 50418,
-34287, 21002, 57772, 9442, 44437, 18336, 35144, 59185, 7454, 28548, 53421,
-15223, 44268, 34816, 3194, 60491, 21782, 47341, 6676, 32221, 52429, 18975,
-39849, 10389, 65042, 26121, 38812, 2306, 51259, 18159, 35620, 57320, 6188,
-30319, 48116, 15153, 63049, 24971, 39349, 4608, 51851, 18688, 33357, 56964,
- 1412, 42588, 24242, 60760, 9474, 39626, 22750, 55652, 14275, 37080, 50665,
- 532, 29390, 57839, 16293, 43943, 27428, 3819, 55410, 36877, 20583, 50477,
- 9281, 32861, 59612, 14652, 43190, 25686, 52067, 780, 31723, 55952, 19341,
-44724, 9932, 36965, 64770, 16437, 28768, 52885, 5346, 41391, 23282, 58199,
- 9836, 33455, 50727, 13018, 42204, 23353, 58598, 3384, 33817, 46399, 14808,
-52156, 27759, 1015, 56825, 36738, 18008, 48161, 8952, 62800, 26595, 39677,
-10599, 56214, 22000, 47885, 3742, 36106, 65164, 15082, 28997, 52632, 5080,
-42458, 23280, 54087, 8368, 33452, 57528, 14515, 44475, 27641, 4645, 60621,
-37563, 18381, 54511, 7842, 46913, 27274, 38454, 14455, 61432, 21400, 38311,
- 1440, 47354, 25415, 58037, 7868, 39128, 26788, 49021, 10606, 55459, 21896,
-39461, 1766, 48645, 25748, 58685, 11875, 39866, 22101, 51710, 982, 28376,
-59463, 9248, 46421, 34931, 17521, 52836, 2462, 37137, 57967, 16147, 29307,
-44357, 7951, 65232, 24137, 40090, 10830, 52779, 19762, 33456, 58134, 3902,
-44794, 27868, 14608, 53797, 38006, 240, 31726, 63167, 18340, 43156, 10620,
-52526, 21547, 32973, 62785, 6187, 44448, 27756, 16680, 55596, 37309, 9039,
-48664, 26404, 64779, 542, 41529, 18065, 52697, 29651, 13036, 63783, 37166,
- 2555, 49682, 27575, 15624, 62098, 37444, 8043, 47201, 25349, 55722, 730,
-39084, 21705, 61063, 11237, 48862, 24998, 41041, 2348, 57710, 20125, 30781,
-47579, 4499, 65062, 18168, 33351, 50685, 79, 42143, 25105, 56076, 10739,
-39563, 27090, 59492, 5190, 46120, 28784, 16608, 54441, 36452, 9272, 46658,
-22559, 58702, 6170, 31588, 44837, 14528, 63886, 23056, 41441, 4998, 57681,
-29918, 15553, 50902, 36061, 9020, 59738, 24886, 46952, 4240, 35204, 64481,
-12900, 29261, 45773, 20511, 54149, 5844, 41202, 26104, 61455, 12700, 36809,
-50099, 8155, 28819, 56025, 14310, 44056, 27307, 6137, 62667, 35779, 16926,
-51038, 28373, 2032, 58915, 37927, 15701, 28611, 51693, 4681, 36470, 62343,
-13389, 42086, 23851, 53458, 6386, 34602, 56382, 19007, 43073, 2715, 65051,
-20638, 31646, 47130, 11821, 60463, 28776, 740, 51426, 36853, 17966, 46240,
- 9045, 61078, 26005, 38783, 12840, 52375, 30267, 1722, 64607, 36283, 20370,
-49579, 5289, 33432, 55607, 21003, 40380, 8240, 63451, 32104, 17237, 50764,
- 4269, 47073, 28372, 16239, 64816, 37392, 720, 54689, 28062, 16660, 49323,
-36299, 3299, 63003, 23432, 46299, 13690, 37304, 53046, 7964, 28677, 57736,
-20211, 46047, 11123, 38939, 22103, 60472, 3076, 33337, 53462, 17099, 43585,
-12018, 64299, 27160, 38709, 5067, 57605, 17624, 35553, 49864, 2114, 29906,
-60641, 11165, 43639, 23394, 53322, 852, 40971, 26988, 56846, 13072, 30758,
-53942, 3411, 42761, 24856, 58007, 10050, 40282, 20671, 53111, 30427, 8325,
-59754, 37219, 18691, 51223, 3441, 33167, 62113, 14790, 39500, 24510, 51068,
- 4642, 33413, 56001, 14496, 42570, 26775, 60678, 6709, 46676, 29564, 16851,
-55443, 37531, 10715, 47820, 22879, 57965, 491, 30101, 44962, 18589, 55145,
- 6642, 38295, 27177, 60053, 14384, 34199, 52499, 4408, 41342, 21357, 55263,
-14917, 34097, 48359, 4956, 59525, 21264, 38629, 14331, 52542, 29532, 7575,
-56168, 37246, 19553, 47607, 11295, 61618, 26022, 40994, 7849, 55110, 22027,
-40065, 11073, 63995, 26523, 39046, 4008, 48146, 22186, 62647, 14250, 34622,
-45410, 7889, 61111, 28021, 16108, 53686, 37718, 3618, 49880, 27407, 16588,
-62171, 38140, 1662, 30961, 48639, 19619, 55377, 9319, 40670, 26568, 62961,
-13802, 35028, 53857, 5595, 43517, 23110, 59954, 12654, 41065, 27178, 55336,
- 4184, 40589, 24616, 60602, 12691, 34164, 46092, 7382, 55104, 22255, 41045,
-11747, 59356, 26076, 39005, 6464, 50724, 17398, 33029, 64738, 2844, 48139,
-25374, 41552, 11106, 62470, 19766, 37705, 52707, 8116, 29345, 61470, 14418,
-46364, 28219, 1986, 64619, 35804, 18454, 53605, 6483, 34263, 46936, 17730,
-62133, 10934, 41295, 26443, 57748, 3205, 31997, 50539, 13053, 42794, 25515,
-61607, 1578, 37007, 53751, 15485, 29490, 47621, 6088, 64240, 20621, 31232,
-54153, 9795, 44668, 18040, 32017, 63358, 4688, 44100, 28552, 15552, 51622,
-35726, 6247, 57615, 24432, 41214, 12657, 51182, 19823, 32739, 58262, 167,
-46177, 19735, 36570, 62303, 10862, 29107, 51533, 19895, 41853, 1620, 63154,
-29524, 16075, 53550, 36007, 9999, 48805, 24047, 65070, 2548, 41474, 22128,
-57269, 9194, 49296, 27174, 40856, 12139, 60818, 21773, 47952, 4438, 33020,
-59342, 15620, 45050, 28154, 9593, 63674, 34854, 17528, 53925, 3991, 46414,
-37849, 15820, 33509, 54871, 5667, 48478, 24190, 40368, 11403, 63858, 25766,
-43576, 5319, 51010, 17831, 31860, 56381, 1302, 45533, 28204, 16046, 60177,
-36172, 5864, 50104, 20629, 32154, 61789, 9048, 43554, 20622, 56506, 28682,
- 4746, 49558, 37262, 20383, 58558, 1658, 37911, 53317, 15076, 30971, 47549,
- 4129, 61861, 24623, 38874, 10831, 59054, 19934, 33095, 47057, 6597, 55623,
-24290, 40336, 10004, 58970, 19134, 30335, 52847, 5453, 41530, 22965, 60029,
-10076, 31804, 52795, 15207, 45848, 29098, 5942, 63539, 35335, 17552, 50950,
- 9071, 34999, 55070, 14064, 43888, 27589, 6965, 60088, 37565, 19733, 53267,
-12213, 43053, 22120, 64009, 3228, 35815, 50629, 15212, 30737, 56347, 2397,
-42401, 24389, 63062, 10786, 32982, 51045, 18839, 42201, 1857, 55329, 27117,
-38379, 12191, 47972, 24109, 62615, 815, 41435, 19101, 52448, 30492, 10139,
-56821, 37347, 18603, 49650, 2662, 34171, 62728, 17434, 44392, 9038, 33197,
-54723, 19339, 43265, 1635, 64970, 31278, 17081, 51884, 37614, 4062, 46950,
-24070, 57771, 11179, 40615, 23983, 47999, 7259, 64647, 18750, 30850, 45537,
- 9249, 56971, 18405, 29876, 50767, 556, 41157, 25593, 61162, 10109, 38636,
-22591, 50526, 13297, 33958, 55346, 5726, 44539, 27390, 16061, 56309, 38220,
- 6744, 30698, 63614, 21028, 49308, 3044, 34473, 45600, 15892, 57948, 27560,
- 8701, 50400, 37834, 17026, 60923, 11711, 47029, 18863, 34812, 58748, 1298,
-45740, 20330, 36708, 57936, 8887, 31774, 51853, 13111, 43260, 25496, 58963,
- 6350, 41358, 22313, 53369, 10345, 32863, 60921, 20143, 42913, 1485, 55870,
-31199, 16127, 51435, 35724, 5846, 65034, 25114, 48807, 12797, 40382, 23248,
-57804, 4445, 34888, 52050, 20213, 42009, 8724, 48406, 24955, 62998, 12407,
-41679, 22107, 54646, 7320, 39355, 26851, 58038, 13798, 38655, 21228, 63504,
- 6055, 35086, 50841, 14548, 40034, 22967, 60992, 7429, 32095, 50154, 18415,
-42740, 2293, 63205, 29286, 15484, 49811, 35544, 11023, 57357, 25591, 42304,
- 644, 47627, 21870, 64672, 12253, 39642, 25577, 54110, 5522, 38414, 21236,
-59114, 13669, 35729, 50794, 3958, 29020, 62752, 19596, 43789, 9265, 31811,
-48777, 13344, 63471, 23675, 40678, 2975, 46973, 21553, 56200, 11474, 39113,
-25893, 61129, 98, 42929, 22954, 52553, 13125, 31578, 63449, 9834, 42280,
-23100, 50520, 2035, 32903, 62591, 17718, 45735, 4596, 33427, 58294, 15143,
-44530, 28583, 370, 52984, 36988, 20507, 57975, 12158, 43349, 27270, 51174,
- 1963, 33052, 56081, 12969, 41685, 23066, 58546, 5973, 31836, 45400, 14471,
-64400, 29210, 6870, 51615, 35473, 17606, 56794, 11598, 43247, 23483, 61079,
- 4135, 33827, 50691, 16563, 46320, 28563, 487, 58690, 34847, 18740, 50777,
- 8337, 44015, 21917, 62604, 14649, 32306, 50594, 1207, 41326, 26290, 64220,
-14437, 30522, 50223, 3512, 34403, 62055, 15644, 45807, 27837, 8488, 53330,
-35998, 20686, 58432, 12774, 34500, 46538, 6303, 59564, 21179, 33262, 43783,
- 4464, 51476, 19739, 36305, 58246, 9608, 29729, 49623, 13305, 41925, 24420,
-59691, 2943, 38599, 22189, 54007, 7955, 34808, 48219, 15107, 63769, 23346,
-39154, 6572, 55319, 21447, 46560, 10528, 33984, 60537, 19704, 44652, 2288,
-34169, 57241, 12853, 41623, 24925, 51117, 6851, 30287, 59076, 20547, 47740,
-11977, 40572, 25527, 61478, 2100, 32427, 53451, 17735, 42752, 4264, 63763,
-26816, 39298, 9335, 55996, 17163, 35155, 49740, 5727, 31207, 59712, 17866,
-43720, 9100, 50552, 34884, 19511, 58476, 5188, 45724, 22763, 39605, 12203,
-55206, 26927, 45022, 6020, 34119, 63817, 14265, 42664, 24482, 54488, 284,
-40542, 18331, 62643, 29436, 8600, 51338, 36867, 18831, 56805, 6047, 44679,
-26570, 38884, 10621, 62456, 19464, 49143, 13845, 31155, 44665, 3331, 59987,
-29251, 13629, 53610, 35254, 19124, 46904, 6948, 62549, 20931, 36263, 54186,
- 9460, 30093, 46965, 13244, 64308, 23991, 41227, 2934, 54776, 17197, 36064,
-50704, 11484, 30147, 61160, 17921, 45231, 7068, 30948, 65138, 16098, 45102,
-27448, 8479, 56511, 36597, 13706, 51906, 22897, 42610, 2020, 54409, 28666,
-15075, 38108, 63193, 3624, 31481, 50637, 14016, 43239, 23754, 55252, 1271,
-34631, 46514, 18871, 64183, 11892, 35137, 44166, 18119, 56133, 2848, 41234,
-25870, 59646, 11874, 45208, 20790, 31805, 57063, 1438, 48054, 29034, 15178,
-63031, 36413, 4739, 48223, 25905, 57802, 10200, 38751, 24130, 47486, 6548,
-62158, 21697, 39385, 12476, 54032, 26226, 43230, 5565, 60375, 23739, 39615,
-11546, 64852, 21538, 49166, 8256, 40520, 26153, 58767, 5663, 36743, 49631,
-15033, 28922, 61920, 6784, 43721, 24076, 51558, 10988, 31731, 58520, 20043,
-48376, 4853, 39549, 27169, 60190, 11140, 41822, 24697, 56505, 6790, 40602,
-22042, 54366, 13266, 31916, 61580, 171, 43112, 22743, 53396, 13507, 34405,
-55007, 2979, 42139, 24567, 61953, 11611, 33026, 47081, 20528, 58758, 6833,
-32506, 52670, 18673, 43425, 1523, 63080, 26075, 40027, 14047, 59978, 29512,
- 3729, 52552, 35671, 17545, 46830, 9674, 58827, 20166, 32320, 44111, 7397,
-53684, 17805, 30815, 63201, 440, 44032, 30523, 21271, 56461, 4713, 42276,
-25862, 51703, 10465, 30551, 62493, 13981, 42767, 24303, 55440, 2967, 39373,
-22719, 49170, 11204, 63951, 19454, 33911, 44754, 4659, 51257, 17381, 30074,
-59613, 7608, 41349, 23692, 48533, 11704, 58651, 21304, 40812, 2086, 47389,
-26507, 60218, 9743, 31172, 45644, 15597, 61876, 28986, 397, 54114, 37921,
-15390, 31212, 56700, 3869, 47545, 28044, 15317, 61584, 36045, 2523, 52720,
-24404, 42658, 11885, 48977, 21835, 59774, 1535, 32606, 45731, 15868, 64438,
-28484, 4480, 51657, 36067, 13522, 55813, 24313, 47595, 5877, 41534, 21817,
-61351, 9492, 36906, 53452, 16148, 29741, 48735, 3081, 56254, 23958, 41847,
- 9570, 63867, 23054, 41541, 1703, 48602, 26700, 57151, 15240, 33543, 45272,
- 5095, 59584, 27602, 16524, 50972, 37451, 6079, 58431, 28823, 16018, 49876,
-35478, 8447, 64903, 28192, 16413, 50420, 35547, 7427, 58932, 24650, 44701,
- 3325, 35454, 54257, 16129, 30448, 57917, 10726, 43118, 22907, 53192, 6885,
-39777, 26732, 65413, 9878, 49229, 17375, 32474, 47188, 6562, 62182, 25167,
-38737, 9446, 53086, 19520, 29892, 63696, 4624, 46564, 28424, 16837, 54738,
-36003, 2346, 47927, 22267, 59719, 12284, 41956, 25009, 48264, 967, 58663,
-26919, 39876, 10651, 51993, 20469, 30769, 64538, 7316, 42370, 22235, 55010,
-11833, 40499, 26668, 61264, 2911, 38983, 26013, 54658, 11318, 43792, 21294,
-58785, 7022, 33148, 52215, 19821, 43051, 10241, 55846, 26610, 38704, 846,
-60182, 18836, 37682, 49634, 4991, 28815, 56124, 14735, 44518, 27449, 1503,
-65124, 35838, 18200, 46725, 11415, 55026, 25705, 41372, 218, 63518, 18860,
-36176, 51076, 5965, 31372, 61799, 18358, 42153, 11838, 56296, 25889, 46152,
- 1156, 33019, 58917, 14327, 44122, 29358, 4444, 64927, 37626, 16970, 49849,
-27693, 7961, 54505, 36380, 21085, 63157, 4060, 44198, 18537, 34848, 55626,
- 694, 43241, 22666, 65024, 8291, 37678, 49541, 16535, 28845, 58578, 6732,
-46151, 34535, 19135, 54316, 12083, 42131, 25509, 61262, 2375, 40790, 23515,
-54683, 12064, 38570, 26439, 64507, 3132, 30892, 47217, 13978, 61128, 26317,
-38354, 862, 49477, 21200, 62306, 15241, 31656, 47184, 3260, 59059, 21299,
-38367, 13326, 52168, 30509, 5561, 55981, 37612, 20451, 49502, 2538, 33627,
-64238, 13543, 47106, 24162, 40854, 754, 57749, 22905, 6602, 58856, 35591,
-18523, 49901, 9367, 42043, 22151, 63311, 104, 48435, 27151, 41492, 10971,
-58312, 24850, 41056, 2175, 51740, 17902, 35412, 57199, 6373, 31226, 46448,
-19794, 63394, 8226, 41732, 26763, 53032, 2459, 35197, 57953, 12889, 42437,
-24221, 51821, 842, 30423, 58885, 18729, 43222, 5071, 63965, 29320, 16722,
-49480, 36580, 7805, 57665, 22237, 43658, 11662, 60684, 25961, 40782, 7039,
-51840, 17228, 32196, 59561, 8216, 42957, 25088, 57478, 3831, 30941, 47844,
-20163, 54050, 8711, 38926, 26981, 64810, 5307, 48756, 18856, 35348, 60882,
- 7931, 43285, 23195, 51365, 11284, 32544, 55399, 18824, 45027, 1115, 32293,
-61370, 16195, 48698, 29245, 8484, 57735, 35499, 18091, 52478, 378, 33624,
-48192, 14168, 57110, 25202, 41890, 3832, 52912, 18786, 35458, 61598, 11097,
-30993, 51218, 20304, 42720, 2230, 56136, 25152, 41167, 13130, 63618, 21803,
-39117, 670, 53832, 25582, 38402, 13214, 64154, 21448, 49224, 3091, 32432,
-45433, 15538, 62078, 28308, 8388, 49886, 36155, 16434, 59063, 29219, 5341,
-49360, 37050, 15944, 63402, 28275, 7877, 49745, 36946, 17993, 55786, 4026,
-43875, 28984, 15316, 64789, 37627, 9186, 49842, 27937, 16486, 56673, 36905,
- 7284, 46423, 23596, 54945, 12610, 40765, 22196, 65326, 1995, 29707, 48576,
-13022, 56440, 25632, 41590, 5708, 59586, 19391, 34366, 46572, 11183, 53020,
-18248, 34056, 65110, 7112, 41145, 22742, 50348, 2099, 34372, 61227, 15628,
-46609, 30088, 7318, 60235, 38029, 15595, 28916, 48612, 121, 56119, 23873,
-40387, 12157, 63293, 19188, 33597, 44888, 4068, 55397, 25410, 38753, 9087,
-63542, 32885, 16575, 50621, 36066, 5373, 56516, 21977, 47970, 11369, 40628,
-26200, 65382, 6156, 48946, 22654, 40453, 13130, 59844, 29368, 7718, 50949,
-38147, 16512, 30061, 64181, 5613, 40318, 25958, 56019, 10451, 39248, 25647,
-49150, 6403, 54849, 19433, 33176, 44693, 9991, 59095, 22292, 38813, 1113,
-65023, 26845, 46070, 13811, 32291, 58412, 3934, 44828, 20552, 33888, 63048,
-11067, 44415, 18112, 32946, 49385, 6120, 58167, 21862, 38260, 12604, 52073,
-30133, 7591, 65205, 37706, 20659, 49367, 996, 33243, 60895, 13002, 41327,
-23977, 54885, 2252, 43771, 19580, 57140, 29980, 4640, 49249, 37230, 18765,
-61741, 11218, 47872, 26890, 40174, 8748, 64490, 24298, 48340, 903, 40285,
-21051, 60959, 13857, 38307, 25128, 56372, 3133, 30946, 45570, 13547, 55918,
-23670, 41545, 1376, 59362, 17946, 31840, 50102, 11005, 42523, 24399, 61543,
- 7552, 34615, 44581, 20129, 56061, 10314, 39639, 26643, 65313, 5706, 38899,
-18306, 53740, 30485, 8842, 61393, 36588, 17909, 49282, 2179, 34704, 56920,
-15989, 46858, 29042, 5981, 59511, 36071, 17879, 50306, 9845, 41897, 23305,
-65424, 4394, 37110, 49483, 15958, 28680, 61042, 2091, 46471, 35242, 17654,
-63408, 11961, 42456, 25160, 51000, 7638, 33282, 63997, 17736, 42954, 10057,
-52462, 29934, 16791, 57154, 37549, 3437, 50254, 27644, 14991, 59158, 38062,
- 8721, 28544, 54216, 12769, 43685, 23658, 57466, 2382, 38405, 21702, 50795,
- 8972, 36308, 62434, 15915, 28500, 52353, 6083, 47372, 27465, 15727, 57432,
-35355, 86, 52852, 23908, 42522, 11205, 58710, 17165, 30861, 47220, 8863,
-52304, 27595, 15130, 60593, 37980, 4896, 28482, 52605, 14879, 34866, 60202,
- 9567, 41801, 22760, 55107, 1155, 38549, 27136, 64332, 8021, 43807, 21770,
-52273, 14564, 32966, 58705, 6060, 43270, 21888, 52348, 14913, 33145, 57655,
- 7212, 43203, 24929, 55842, 13228, 34145, 44545, 8266, 54062, 25223, 39754,
-11338, 56517, 22460, 48853, 7377, 33685, 64935, 15159, 44950, 27312, 9103,
-57817, 35225, 16149, 51635, 28559, 7713, 60947, 34693, 15274, 50017, 29705,
-28148, 12664, 52354, 37767, 3032, 60556, 26160, 39524, 13980, 53368, 25314,
-38443, 4793, 61881, 21667, 38357, 12665, 48517, 26253, 60736, 10181, 40077,
-24506, 54443, 641, 38917, 22104, 59958, 10137, 48160, 25011, 40463, 14340,
-54564, 28403, 5492, 62594, 37107, 20358, 49616, 10258, 33363, 54948, 13013,
-41109, 24348, 59675, 3280, 34411, 52341, 13353, 39869, 24821, 56162, 148,
-38854, 19602, 65421, 28202, 4690, 49405, 37688, 20390, 61842, 9517, 41273,
-22793, 52046, 14042, 34024, 62208, 463, 44959, 21059, 32984, 56796, 10587,
-41746, 17276, 53424, 29867, 2137, 58456, 35336, 17788, 47082, 7540, 64931,
-26422, 40076, 12615, 56622, 25327, 39780, 3504, 51361, 20212, 37770, 60094,
- 9541, 30388, 46188, 20437, 63653, 7090, 38726, 27068, 50572, 13607, 36993,
-57805, 1314, 28931, 45485, 17480, 65404, 9131, 38915, 26945, 54358, 4757,
-33409, 47772, 17346, 59364, 9654, 42281, 27053, 57037, 5397, 47561, 29786,
-14795, 59038, 36008, 9730, 52819, 20696, 31613, 47257, 2323, 65264, 25185,
-40044, 11868, 52319, 20440, 33608, 57353, 1279, 43188, 23082, 51876, 10727,
-34495, 61424, 16253, 44928, 27444, 2105, 53075, 36461, 19843, 58974, 4510,
-45084, 31231, 15493, 62665, 35273, 42, 48412, 26712, 57138, 8378, 33831,
-44378, 14576, 61293, 23734, 38779, 2761, 54565, 21769, 38287, 9905, 48350,
-27055, 62233, 3455, 31593, 44560, 15335, 58513, 27934, 8712, 53044, 38211,
-16778, 28351, 56754, 9837, 41929, 23164, 53638, 5404, 36502, 65288, 16902,
-30387, 45561, 9409, 58171, 26625, 38363, 2564, 54321, 22442, 49041, 10330,
-30777, 61418, 18706, 45137, 801, 29943, 54266, 13132, 42005, 24312, 60955,
- 2667, 32327, 44916, 18314, 58272, 10117, 32059, 53340, 20720, 44366, 1348,
-33054, 62406, 19838, 43251, 10526, 54492, 21260, 34560, 47973, 81, 60407,
-19072, 33749, 45074, 12286, 58594, 23290, 40716, 2860, 62330, 25842, 43328,
-11840, 54290, 17693, 35985, 50623, 8059, 30172, 54901, 17705, 41802, 6432,
-60146, 30597, 15333, 50626, 37529, 195, 61344, 25369, 47622, 13431, 40211,
-24957, 62285, 2925, 47746, 18054, 35579, 56431, 10470, 29267, 53657, 19118,
-43533, 6763, 64126, 30118, 14825, 50578, 36553, 9173, 62464, 23532, 42392,
-13581, 52155, 29100, 1522, 55648, 36939, 19684, 46255, 4079, 58579, 27167,
-38504, 11536, 54974, 22054, 49182, 4753, 41611, 27175, 63009, 11529, 38749,
-21243, 51059, 5964, 33226, 64313, 14517, 43679, 23480, 51822, 3876, 35796,
-58376, 15092, 30563, 51372, 44, 47223, 27940, 14849, 59563, 36510, 3519,
-52190, 22631, 47764, 12773, 41719, 25865, 56083, 4974, 41001, 22546, 63147,
-13064, 31912, 52737, 3884, 41360, 24760, 63794, 13444, 33920, 52869, 765,
-43195, 25231, 56790, 12454, 40172, 21884, 53448, 6540, 32567, 57721, 18974,
-42597, 9251, 53127, 21027, 31898, 56363, 4309, 41850, 19645, 58756, 31149,
- 2231, 49312, 35734, 20217, 62254, 7329, 44903, 31027, 12420, 60465, 34860,
-20664, 47323, 4707, 62805, 37842, 16534, 30052, 48845, 7003, 64472, 25883,
-40292, 11307, 53059, 20248, 37674, 59474, 3629, 30279, 50062, 19480, 41955,
-11182, 62733, 23521, 43999, 7476, 50749, 28877, 15617, 61822, 37238, 2616,
-49262, 21367, 34479, 64523, 6046, 45759, 21015, 33570, 56604, 11594, 42968,
-24401, 50505, 2993, 31822, 63528, 18536, 45070, 10961, 32402, 57431, 17475,
-49335, 3592, 34262, 45211, 13333, 62746, 25330, 39544, 568, 48293, 24355,
-60499, 10354, 38920, 21593, 51044, 3937, 31659, 65203, 17997, 46435, 1555,
-32847, 61754, 17142, 44114, 4300, 34841, 60103, 16856, 44042, 28709, 1047,
-53791, 36312, 16592, 61670, 27724, 3872, 49781, 37515, 21197, 54980, 2134,
-42241, 20536, 65509, 30570, 46392, 19329, 56183, 10420, 41286, 24082, 48953,
- 6017, 64682, 17321, 31187, 46644, 8805, 56960, 24107, 40334, 3494, 52480,
-17589, 34062, 65007, 6875, 47775, 29342, 13719, 56706, 35643, 18763, 50442,
- 3964, 33014, 64433, 18227, 45799, 9531, 33439, 49093, 17192, 60927, 2757,
-29549, 45584, 21150, 64830, 8982, 30674, 50860, 19067, 45655, 6340, 33362,
-62636, 16013, 45508, 29015, 8793, 53568, 35529, 15954, 56675, 28861, 1946,
-49997, 35984, 12711, 59302, 24466, 42261, 6756, 55261, 28650, 15023, 50340,
-36956, 3212, 62743, 24444, 46662, 12524, 40732, 24277, 61713, 4158, 39927,
-22816, 51940, 14416, 33945, 59201, 5536, 42832, 22161, 53142, 10442, 31632,
-64443, 15812, 44318, 27357, 1726, 54886, 37974, 16333, 31364, 60863, 4638,
-43664, 22859, 54509, 10454, 34271, 48402, 19640, 59470, 5906, 34432, 46638,
-18913, 56419, 11169, 38459, 27231, 62227, 2920, 41097, 22436, 51107, 11396,
-33959, 55565, 18392, 44037, 1142, 33880, 63038, 16661, 44698, 27871, 5045,
-57526, 35224, 17779, 54753, 6820, 46721, 26613, 39324, 10188, 63714, 17348,
-31869, 53227, 4811, 41151, 24379, 58064, 13509, 32169, 47691, 8519, 64050,
-24933, 39532, 12108, 54338, 22753, 43643, 6455, 59722, 24583, 39914, 11688,
-51966, 17856, 30347, 63519, 4842, 46412, 34677, 18548, 49137, 12255, 57388,
-26066, 40704, 6376, 60547, 22712, 48978, 13860, 36280, 55080, 839, 29631,
-47889, 20452, 64440, 4365, 31671, 45163, 14690, 59608, 27768, 1606, 51423,
-37809, 13313, 48150, 24035, 61875, 6707, 41664, 21550, 55664, 11325, 32193,
-47107, 17668, 59116, 5681, 39339, 26604, 53193, 14887, 31831, 64733, 6701,
-45023, 35049, 15986, 55679, 27439, 8309, 50183, 37667, 19876, 63731, 3477,
-34886, 46602, 13944, 55944, 25212, 40041, 5195, 59046, 17444, 31330, 51981,
- 8329, 42355, 17144, 65176, 29002, 3834, 51225, 37300, 15257, 56442, 28183,
- 9183, 49400, 36980, 20420, 63680, 4960, 32412, 46719, 20037, 60985, 1576,
-39222, 26068, 56843, 13579, 47018, 28525, 8457, 54381, 35628, 19633, 59484,
- 4327, 32374, 45877, 11895, 55275, 23469, 40141, 8817, 60132, 26398, 43005,
- 1941, 51391, 30619, 15854, 58052, 35721, 4224, 49294, 27839, 17012, 54561,
-38052, 5303, 31707, 59753, 18140, 46521, 9464, 31746, 62925, 14214, 41734,
-23625, 52459, 6089, 33579, 61192, 15764, 45111, 29580, 8505, 59240, 35698,
-18731, 53502, 2219, 42801, 26039, 60693, 8855, 40234, 23896, 55517, 11619,
-39220, 21615, 47980, 5376, 63125, 25823, 40722, 11561, 52897, 19117, 32812,
-63884, 8533, 44904, 28779, 15952, 54758, 36081, 1542, 60592, 19010, 35653,
-49574, 9503, 30311, 57536, 15116, 43301, 21945, 50983, 5890, 32045, 56362,
-16182, 45339, 28582, 9436, 62266, 35256, 19075, 50110, 2649, 43690, 27170,
-64130, 10764, 38567, 26317, 50304, 131, 34093, 62639, 15029, 45741, 27457,
- 8905, 53844, 37401, 16362, 61010, 27536, 5795, 49626, 37226, 16002, 55921,
-28593, 704, 49521, 36981, 18835, 56822, 10242, 43341, 23298, 52228, 1603,
-32667, 56429, 15006, 45588, 29759, 5107, 55609, 35187, 17344, 45818, 10064,
-65516, 25895, 40758, 1888, 56741, 21627, 38957, 14283, 53492, 31047, 5239,
-59997, 35364, 17780, 50215, 9536, 30261, 54238, 17123, 42420, 1458, 62200,
-19057, 30671, 48222, 8252, 59581, 22162, 38903, 13124, 55386, 25629, 48399,
- 4600, 40254, 20562, 62019, 28741, 8537, 51446, 37035, 11620, 56146, 19561,
-36326, 50117, 6912, 30046, 63454, 19616, 42528, 12065, 54430, 26894, 39098,
- 5750, 59372, 20010, 35981, 51316, 9661, 29872, 57193, 18529, 47359, 6257,
-32793, 63444, 12447, 46659, 23772, 41517, 7064, 53178, 18038, 32133, 62942,
-11100, 45718, 17261, 35813, 57392, 5178, 51889, 13278, 33391, 61360, 1562,
-44380, 28295, 12362, 55050, 36163, 19988, 51287, 1073, 37800, 59546, 14432,
-31663, 46558, 11210, 55875, 20919, 31514, 44512, 1810, 62228, 23393, 40894,
- 7492, 47480, 26952, 59094, 11426, 39107, 21887, 53220, 376, 31320, 57451,
-20792, 43812, 8039, 35821, 53453, 14777, 32226, 56689, 1382, 42133, 22985,
-52896, 13835, 30763, 61246, 3717, 48757, 23663, 41958, 11964, 58451, 21694,
-46293, 6037, 33370, 63423, 16948, 44852, 28841, 3959, 53383, 36300, 18239,
-64208, 8303, 44515, 29777, 15888, 52961, 34923, 5660, 59509, 20713, 30851,
-50433, 9813, 43611, 19562, 54309, 31120, 242, 63245, 35725, 13374, 50258,
-23997, 45878, 3065, 36573, 58271, 14422, 29063, 47198, 6125, 62692, 24061,
-39824, 11690, 51661, 17994, 30678, 56175, 3108, 41302, 25261, 63084, 12790,
-40746, 22963, 52744, 66, 32270, 60458, 14269, 43384, 24777, 53592, 8278,
-34731, 64266, 19443, 46879, 6129, 31609, 60675, 14133, 46534, 27333, 7949,
-53723, 37781, 19477, 61256, 11400, 42265, 22672, 51772, 2717, 32905, 60186,
-20025, 43394, 8255, 50126, 21013, 30051, 62091, 608, 45956, 19314, 29949,
-56417, 5367, 42088, 17929, 51849, 30733, 2490, 62382, 36059, 18608, 49620,
- 9314, 33066, 58051, 20786, 47920, 1657, 39599, 25820, 59647, 10254, 41248,
-22163, 51561, 1127, 32321, 64243, 15366, 45732, 29061, 8095, 56818, 37792,
-18598, 46495, 5611, 59957, 26113, 41978, 12078, 54837, 19080, 37283, 49689,
- 8122, 30451, 62960, 16112, 45267, 28732, 3236, 53528, 35760, 14449, 58415,
-24900, 45239, 1147, 41800, 22190, 64333, 13500, 34839, 47921, 3414, 57381,
-22309, 40350, 12140, 51336, 28791, 1884, 62317, 36865, 16730, 49305, 28496,
- 6564, 59295, 36160, 16758, 53744, 27523, 8970, 49976, 36041, 20524, 62963,
- 2745, 45826, 21421, 34258, 57316, 10152, 44702, 20372, 32907, 48719, 7083,
-61896, 18632, 30958, 44880, 790, 53468, 27962, 14994, 57632, 35501, 6854,
-49962, 24232, 43287, 10568, 62886, 19194, 33252, 51172, 2821, 41393, 23275,
-64491, 9848, 30205, 51284, 14863, 41253, 24056, 54061, 4977, 38702, 21457,
-63364, 14156, 32743, 46385, 7531, 55524, 24501, 40925, 11026, 60654, 21534,
-46883, 327, 34428, 65403, 15682, 45388, 28381, 7061, 56806, 36583, 20091,
-51035, 2350, 43495, 25929, 63745, 12076, 38988, 21420, 48713, 513, 57014,
-26717, 38973, 12852, 49137, 22179, 64735, 7074, 32172, 46439, 15857, 57793,
-29434, 797, 49960, 35378, 17212, 60318, 7950, 32634, 54140, 15392, 45202,
-28355, 2071, 57646, 37745, 20787, 50765, 6198, 42422, 24384, 62234, 13748,
-31275, 51384, 7729, 42732, 24661, 64921, 298, 38876, 26815, 48543, 11604,
-61680, 24055, 40726, 3022, 48233, 22277, 58737, 7366, 39465, 25768, 55197,
-13646, 41736, 22994, 59257, 5402, 39822, 21296, 55520, 12742, 39486, 23537,
-59587, 7013, 30677, 50130, 14230, 37986, 56999, 3845, 29569, 46185, 19427,
-65328, 9001, 39818, 24350, 52777, 13369, 31534, 63682, 3839, 45593, 28850,
-16270, 61114, 36518, 7821, 48114, 23095, 63295, 12581, 40944, 26856, 60150,
- 545, 48916, 20448, 35846, 53847, 8738, 31462, 47016, 17896, 61485, 3315,
-41448, 25789, 47425, 12338, 56639, 24171, 41416, 6723, 62950, 20614, 33894,
-52115, 10918, 40911, 25779, 57277, 4372, 32939, 45631, 17658, 61346, 332,
-40537, 26797, 51967, 9909, 36082, 59161, 15963, 30475, 46100, 1786, 64835,
-20927, 29594, 44217, 4980, 59134, 17188, 33686, 52516, 2265, 41957, 23633,
-57228, 10174, 49172, 22499, 41217, 13347, 63104, 25957, 48729, 2677, 40787,
-21757, 55725, 13738, 38752, 23396, 59444, 4816, 29996, 48837, 14050, 58314,
-26403, 39598, 475, 48934, 22338, 60268, 9501, 40257, 25075, 20206, 63467,
-28358, 8498, 49994, 37088, 14600, 57540, 23089, 46203, 4448, 31771, 64099,
-16454, 44348, 28087, 5817, 61379, 37556, 19038, 51381, 9167, 42015, 26146,
-58445, 12763, 38473, 21288, 53499, 3128, 34137, 60601, 13614, 42229, 24080,
-50917, 8813, 34140, 63640, 15572, 48338, 27722, 4376, 62160, 37701, 12727,
-47049, 25098, 60095, 5803, 32906, 44350, 18391, 55505, 9782, 38832, 27163,
-64537, 1136, 36666, 53096, 15249, 29903, 48711, 9664, 60091, 23360, 40473,
-14232, 51217, 31072, 869, 58747, 35520, 20230, 47673, 10804, 55756, 26636,
-38963, 1570, 65361, 17058, 36268, 49537, 8420, 28820, 57335, 16312, 44333,
-27879, 6194, 60689, 38204, 16966, 30196, 55616, 8056, 48925, 22617, 40346,
-13250, 59710, 26255, 48550, 938, 41256, 22058, 52983, 9949, 33119, 58941,
-19074, 47609, 7367, 38550, 27038, 64616, 11687, 48937, 22322, 38674, 4322,
-51811, 17769, 32194, 58258, 1537, 44563, 28344, 16119, 52661, 37057, 3993,
-59159, 28796, 15808, 51032, 36086, 359, 46335, 24922, 64515, 9759, 31345,
-44964, 14856, 55599, 23853, 39695, 5820, 60816, 18644, 32835, 53564, 9882,
-42512, 23845, 65488, 12768, 35526, 50648, 7062, 29079, 57077, 20403, 41406,
-10952, 60926, 25763, 41094, 3696, 54030, 23104, 44646, 13808, 31867, 65032,
- 5255, 47686, 29305, 16499, 53060, 37430, 11435, 55748, 25506, 44084, 3966,
-31353, 63051, 15949, 43893, 28164, 10056, 52520, 35660, 17410, 62693, 2499,
-34422, 46369, 20948, 58849, 5555, 40442, 25850, 52203, 11439, 32266, 64118,
-20590, 47424, 4969, 39158, 27138, 60292, 12765, 33101, 52577, 7267, 45555,
-28494, 16828, 62828, 35869, 8730, 45738, 23436, 53106, 13970, 33042, 58654,
- 4080, 43615, 24049, 51266, 12516, 30825, 64864, 645, 44632, 29053, 16210,
-57829, 38091, 7178, 29324, 54043, 14621, 47090, 27907, 1952, 63425, 36587,
-13501, 53767, 24904, 42138, 4205, 60126, 20730, 34716, 51190, 8308, 42908,
-23029, 64814, 13531, 41518, 26621, 56384, 4526, 34516, 53770, 13085, 42161,
-24457, 60662, 6792, 34640, 46935, 18284, 57825, 2174, 42363, 27092, 61033,
-13247, 48303, 30203, 799, 57055, 36832, 19905, 50175, 12012, 31855, 63834,
- 3253, 42514, 23335, 52489, 11860, 39614, 25208, 56088, 3774, 43458, 21532,
-62365, 10268, 39692, 23043, 53904, 14433, 30684, 57757, 4895, 42255, 22831,
-52783, 11036, 32181, 61923, 17901, 43125, 3940, 54379, 26727, 39466, 12223,
-60000, 24191, 38739, 6185, 55111, 20219, 32737, 46792, 10850, 62599, 22812,
-39586, 4330, 51797, 34389, 17389, 65214, 9724, 31294, 46751, 15009, 53248,
-29283, 3002, 58279, 35260, 17487, 46959, 9201, 54456, 19839, 34582, 59064,
- 5430, 44626, 19061, 36016, 54174, 8725, 30176, 64592, 18766, 42974, 12436,
-53018, 30732, 1362, 63069, 35173, 18087, 50830, 9308, 43930, 27133, 52587,
- 3192, 32996, 64985, 15489, 44998, 27918, 1689, 52653, 35910, 18470, 61663,
-10827, 43391, 26423, 51602, 2558, 33489, 58130, 15410, 43965, 27526, 6363,
-59974, 36778, 21004, 51543, 10868, 42318, 25388, 57956, 2884, 38908, 21401,
-54139, 6670, 32802, 47011, 18026, 58120, 10604, 40104, 26909, 64021, 4801,
-38275, 22529, 55572, 10430, 49310, 27252, 38385, 857, 59272, 18210, 31703,
-49888, 3835, 43713, 22663, 64141, 13874, 35518, 54674, 7885, 42623, 22931,
-50960, 11233, 31429, 65363, 18743, 42850, 4972, 56520, 24952, 41594, 13850,
-52831, 32553, 7470, 55333, 35756, 18120, 47455, 10613, 60950, 37914, 15281,
-28738, 48516, 8044, 64135, 24756, 38392, 23, 47141, 21454, 58573, 7784,
-39238, 26862, 54704, 11117, 43398, 25784, 64670, 1332, 31818, 45715, 15751,
-55062, 35666, 9691, 45088, 23377, 64348, 8285, 38682, 27070, 54652, 4180,
-43483, 36346, 53084, 2408, 31649, 58603, 17906, 43983, 6243, 34666, 60473,
-15237, 48589, 27459, 8113, 52998, 35519, 21326, 56412, 2274, 46206, 17089,
-30489, 63142, 5229, 43671, 24194, 50898, 8466, 30661, 65387, 16825, 44812,
-27628, 6041, 54274, 36382, 19453, 58697, 3606, 46235, 26196, 41252, 13777,
-52143, 29070, 7609, 58632, 36385, 15596, 49861, 27660, 2324, 63095, 37281,
-20841, 51366, 12327, 41464, 26069, 54968, 8268, 40204, 22310, 61696, 2494,
-47507, 26166, 38852, 7347, 57164, 21418, 43851, 12405, 61322, 26820, 40414,
- 4371, 50745, 17594, 33184, 58106, 7040, 43439, 22388, 52236, 13871, 33120,
-61998, 3912, 46149, 27306, 14999, 51898, 35191, 1944, 63916, 23579, 42604,
-12217, 52791, 31806, 4028, 65215, 36422, 18372, 50147, 8814, 37933, 58186,
-15526, 28352, 45342, 5147, 61064, 23871, 41293, 1889, 53240, 19290, 31492,
-57683, 8713, 46191, 24079, 41421, 12521, 62669, 21777, 40464, 7363, 48872,
-26499, 65146, 12074, 40440, 23225, 56068, 6315, 33416, 48545, 17998, 58371,
- 8679, 40306, 26276, 52826, 4120, 34268, 59430, 13780, 44630, 27554, 1705,
-51243, 37236, 15828, 57691, 27936, 3514, 49418, 37428, 14885, 60222, 23852,
-45350, 1030, 33641, 55468, 16060, 46787, 29220, 6106, 62847, 37829, 18134,
-51392, 8943, 37286, 56497, 14716, 28041, 45275, 2347, 57905, 23855, 38722,
- 9296, 60698, 21837, 48037, 14204, 37429, 55429, 283, 30348, 48050, 20758,
-61348, 6942, 40587, 26865, 52404, 10773, 31304, 56270, 18681, 44684, 613,
-34437, 60830, 17509, 42828, 9350, 55792, 19198, 37696, 50700, 3784, 28621,
-62210, 14074, 43027, 24202, 55794, 202, 32422, 48593, 19305, 59489, 4871,
-40187, 26281, 54898, 9723, 39994, 21591, 61774, 13705, 34710, 48332, 5782,
-54543, 23876, 40467, 11935, 61386, 22851, 48657, 4837, 37653, 58471, 16260,
-29723, 50725, 10458, 40803, 22302, 61413, 6477, 32108, 46915, 17465, 58344,
-11305, 39338, 26690, 54933, 1820, 38473, 21582, 61656, 11416, 31182, 51980,
-17629, 46016, 550, 31520, 57098, 20635, 49069, 8643, 39267, 26169, 65266,
-11602, 38627, 22450, 52265, 6888, 34502, 62904, 14840, 45285, 28495, 5270,
-53998, 36168, 17138, 59075, 13673, 31740, 45971, 5831, 53911, 29472, 16400,
-61034, 35429, 8490, 47412, 26749, 50202, 1289, 33192, 59658, 16951, 45358,
-32896, 9063, 64862, 24868, 47919, 2739, 40036, 21805, 58488, 8655, 33758,
-51109, 18958, 43566, 1777, 63957, 26991, 41514, 13470, 53436, 24626, 40290,
- 2767, 57103, 18449, 30326, 49739, 8237, 35401, 58765, 20347, 42721, 911,
-55515, 25737, 39963, 12340, 62794, 25113, 39202, 4170, 50021, 21049, 29544,
-63638, 10288, 46060, 28321, 14758, 51331, 37711, 1978, 57707, 27675, 14562,
-49704, 36976, 4803, 60257, 28323, 16548, 49416, 36774, 6896, 57360, 25034,
-40968, 11386, 61352, 19677, 30705, 47798, 4902, 55911, 22852, 40683, 11654,
-58444, 26616, 39423, 5504, 54685, 21563, 38708, 11590, 62379, 22767, 49165,
- 8578, 32329, 47096, 19326, 55559, 1056, 40284, 26904, 64878, 13933, 34757,
-52464, 8377, 43117, 23509, 62150, 13077, 40212, 26331, 55310, 2427, 38455,
-21307, 49024, 12334, 60279, 25340, 40195, 6973, 48082, 21570, 65191, 13062,
-41865, 26488, 57293, 8501, 37102, 50891, 16096, 28864, 59900, 1898, 46930,
-28470, 16712, 53694, 36829, 6024, 58416, 25091, 44507, 13357, 30659, 49095,
- 2694, 63249, 22260, 38734, 12166, 49032, 24658, 61691, 819, 30651, 45716,
-19089, 57770, 3647, 32323, 44106, 18568, 55119, 9321, 40255, 26544, 61068,
-14717, 31974, 53515, 3106, 45557, 19992, 32303, 60403, 9192, 48461, 19911,
-34570, 61244, 5671, 43898, 19379, 33150, 56448, 1940, 46760, 18622, 34475,
-59656, 11952, 45463, 17328, 19409, 47328, 7893, 39567, 26733, 65268, 10661,
-47698, 20136, 30582, 54896, 309, 42893, 18841, 63617, 29197, 9458, 50049,
-37118, 20505, 59385, 11973, 41699, 26698, 54699, 905, 40630, 21876, 57496,
-10506, 37603, 50092, 14424, 31884, 61984, 1594, 44541, 24835, 39294, 11303,
-64296, 21039, 34426, 54641, 620, 44152, 20620, 33453, 56986, 9173, 47302,
-17801, 35217, 60912, 6693, 31251, 47815, 17396, 59040, 4560, 43246, 26714,
-51398, 10333, 33135, 65026, 15059, 42706, 24965, 54852, 3269, 38545, 24378,
-48242, 9826, 64352, 19180, 31735, 52282, 12272, 42571, 24609, 62595, 2603,
-38827, 26102, 54985, 11820, 42702, 21966, 59419, 7077, 37378, 50052, 16775,
-31285, 58028, 5202, 45577, 27753, 16523, 55938, 38104, 7491, 29622, 60283,
-20366, 47085, 2481, 34568, 56324, 16829, 48788, 29489, 9423, 62006, 36895,
-15739, 50415, 27366, 6416, 60031, 38216, 15370, 30628, 49144, 3380, 55770,
-24314, 38964, 10619, 60008, 21335, 46955, 1966, 31183, 53990, 14502, 40396,
-25995, 62802, 3420, 38342, 21727, 46842, 11914, 63939, 30352, 16578, 50004,
-37717, 6322, 61544, 21201, 34577, 46329, 9022, 63229, 20350, 33651, 44312,
- 5161, 53338, 27569, 14053, 64608, 35786, 8082, 50178, 27640, 12720, 58301,
-36528, 20120, 49552, 505, 30598, 59542, 21086, 44205, 6533, 33427, 63959,
-19538, 48923, 8283, 40914, 27072, 52394, 3257, 34218, 64790, 17412, 46096,
- 8873, 41542, 25184, 57544, 13046, 38922, 21901, 50966, 3812, 33762, 65412,
-14262, 43862, 27582, 8331, 52560, 37047, 20914, 59464, 1939, 35032, 49442,
-15711, 31724, 57783, 5573, 41171, 21931, 52122, 11378, 34240, 63902, 15573,
-44216, 28095, 6827, 61175, 35885, 17659, 50294, 1275, 32636, 56763, 15643,
-45340, 27990, 7873, 64058, 36632, 17882, 46502, 1716, 55815, 20311, 31017,
-44491, 8527, 65518, 34865, 18503, 52318, 285, 43558, 27104, 57157, 14337,
-37124, 50351, 3235, 29093, 63870, 18174, 43591, 9617, 50910, 27265, 39541,
- 4035, 58610, 18844, 36936, 49624, 10060, 28706, 63963, 15770, 44359, 28130,
- 4971, 56075, 35247, 18827, 50530, 2613, 31826, 58837, 16648, 44093, 27558,
- 9260, 60363, 37742, 20895, 51520, 1428, 29771, 48505, 20699, 64716, 10054,
-38864, 24479, 52985, 2556, 43791, 22183, 56942, 9309, 38822, 21187, 61667,
-12970, 29795, 53687, 6506, 40888, 21880, 51261, 15106, 33296, 60562, 5186,
-46219, 28189, 16700, 56110, 36131, 10364, 47883, 22293, 57993, 4721, 32249,
-45932, 17698, 61384, 9769, 32015, 52418, 13221, 43587, 23673, 64125, 4646,
-38600, 22424, 52439, 14377, 33378, 60902, 6849, 42880, 23092, 51786, 11413,
-33533, 55957, 17071, 41874, 1086, 60018, 21346, 33777, 53076, 7923, 45752,
-20072, 33542, 61400, 9193, 47333, 27551, 15254, 52424, 37884, 3914, 64412,
-23135, 46765, 14055, 33788, 55120, 979, 43815, 27720, 16469, 62858, 36129,
- 7856, 51386, 25399, 42048, 12947, 64563, 23240, 47319, 379, 33061, 56095,
-16823, 45051, 27888, 4204, 63894, 37203, 17557, 53483, 10368, 45843, 20583,
-31385, 57175, 5331, 47174, 28839, 17006, 59281, 35902, 4254, 51823, 24936,
-42747, 9538, 63506, 27044, 40568, 13869, 57325, 29617, 1329, 51455, 35641,
-17358, 54765, 4897, 35330, 49487, 15083, 31052, 62603, 5684, 45980, 23244,
-40177, 12683, 56861, 27445, 7180, 50337, 35080, 20032, 61914, 1257, 33798,
-54228, 21020, 46298, 10836, 41155, 26335, 58741, 5786, 33292, 53495, 14663,
-44075, 27902, 9786, 62559, 37038, 20905, 53291, 6736, 47752, 30432, 16008,
-65473, 36415, 5046, 50503, 28569, 12527, 59132, 36181, 17814, 49679, 4209,
-30310, 57021, 13244, 41755, 25746, 51887, 6968, 29596, 63985, 20708, 48283,
-10653, 40006, 26208, 62237, 5001, 30259, 53982, 837, 42100, 23612, 57149,
-13824, 33525, 52792, 3433, 41682, 24387, 62127, 13376, 37136, 51150, 6976,
-31329, 57231, 17659, 45637, 2758, 33234, 62390, 19307, 49201, 7257, 38486,
-27095, 64029, 15394, 35791, 52123, 4386, 28758, 46614, 20410, 57104, 9959,
-30512, 52525, 18935, 46999, 6527, 31215, 60546, 17863, 48277, 10570, 39296,
-26691, 65302, 3179, 43236, 22368, 54243, 11355, 40739, 25194, 56298, 267,
-38673, 21613, 60345, 13779, 37664, 53644, 6493, 30341, 47168, 13281, 56650,
-22526, 41641, 8815, 59693, 26495, 39711, 582, 55048, 21386, 38255, 7796,
-58924, 27206, 43718, 10161, 50598, 19335, 36850, 64729, 1096, 29709, 45071,
-19549, 54735, 9576, 41397, 25994, 61174, 13830, 33702, 50829, 402, 43415,
-23102, 63393, 10523, 33137, 53426, 14574, 43776, 27403, 6581, 64976, 38148,
-14519, 31530, 54868, 4084, 46819, 27964, 16728, 63871, 37023, 526, 54132,
-26135, 47294, 13953, 36558, 58783, 4806, 31580, 51852, 13235, 43166, 22887,
-61267, 7020, 34752, 47818, 18606, 57841, 9499, 40973, 26030, 48468, 841,
-57279, 24069, 40844, 10655, 52162, 19708, 31073, 56469, 2405, 42125, 18007,
-52216, 28848, 10384, 59151, 37692, 16989, 49675, 28575, 2786, 60511, 38097,
-15376, 30656, 55058, 4403, 45505, 27721, 16409, 61732, 37723, 9734, 53988,
-27725, 15796, 50696, 36085, 4417, 61355, 22486, 45418, 12154, 32094, 59097,
-20368, 49129, 5999, 39199, 26812, 60872, 2204, 31458, 53875, 15737, 46810,
-28059, 9005, 58498, 36945, 19129, 49544, 5315, 31049, 63510, 14226, 45949,
-23476, 41717, 7014, 54682, 29633, 16545, 64991, 36417, 8511, 50325, 26382,
-40855, 3207, 57135, 20031, 31217, 47506, 9059, 54375, 22841, 41110, 12079,
-59799, 25574, 40786, 3641, 52554, 19437, 33968, 60548, 10189, 42944, 26313,
-51268, 13976, 32917, 59348, 4106, 43207, 24766, 54599, 11588, 39114, 24411,
-62767, 6048, 46244, 19069, 33303, 54714, 10673, 41725, 24458, 59580, 5514,
-33975, 52765, 13380, 42712, 24006, 62508, 7507, 40136, 22065, 53589, 1432,
-32621, 59579, 12583, 47590, 23098, 41113, 7938, 62112, 26101, 40880, 12062,
-48126, 22145, 56540, 3841, 32309, 47104, 17758, 62701, 10775, 34314, 44462,
-17416, 58402, 6601, 40831, 26522, 55005, 12874, 40057, 25331, 64165, 4029,
-43154, 23577, 51916, 14930, 34017, 56177, 166, 42894, 23262, 62175, 9303,
-30513, 53301, 12511, 42526, 23800, 65511, 1097, 33032, 50943, 14664, 41969,
-25079, 62943, 8286, 34955, 50550, 20819, 42325, 409, 59322, 26084, 40479,
- 7032, 56494, 25685, 40423, 10548, 50315, 18361, 29997, 57803, 2671, 45782,
-18173, 35600, 61811, 4893, 30090, 53427, 18252, 45029, 6984, 30991, 65135,
-14271, 44110, 27470, 4320, 55396, 38120, 16872, 30496, 62708, 500, 43678,
-22152, 58124, 12921, 30248, 44666, 5741, 53199, 28542, 16102, 60724, 37225,
-10541, 48209, 24145, 54726, 2270, 38417, 21392, 58815, 6872, 36230, 49712,
-15455, 28907, 60586, 7993, 42579, 23177, 50736, 13573, 31940, 56039, 2123,
-42758, 25922, 60859, 9419, 34322, 51210, 15057, 44470, 27741, 158, 64534,
-37364, 13577, 47612, 22320, 53472, 5621, 32814, 46506, 19627, 61084, 7789,
-34282, 45628, 19429, 56477, 11298, 40376, 25785, 61548, 388, 42943, 21764,
-53107, 13736, 32509, 64306, 3300, 44969, 29503, 16423, 60650, 37704, 8552,
-49582, 27519, 15338, 64657, 37920, 4183, 29190, 56020, 16734, 48014, 27970,
- 8782, 64068, 37463, 19798, 50823, 2863, 42226, 25318, 59767, 13381, 33988,
-44919, 1137, 57024, 22363, 40874, 13598, 46779, 24920, 62776, 2056, 39096,
-21981, 51832, 10837, 33932, 64887, 18811, 47632, 393, 38756, 22695, 53464,
-11806, 33987, 58850, 3268, 43454, 22808, 51028, 15133, 33133, 60880, 12719,
-55959, 24811, 39112, 5748, 50484, 18208, 31444, 59233, 9581, 44497, 34395,
-18418, 47863, 4027, 61062, 26806, 41033, 12437, 53437, 22376, 38631, 9869,
-55946, 25177, 45725, 3759, 31616, 57901, 12602, 42830, 22785, 54709, 7886,
-35021, 59936, 17471, 44041, 2224, 34929, 61791, 17042, 41559, 4789, 53620,
-21343, 30086, 59412, 12847, 46221, 29064, 6196, 52457, 35733, 18573, 62275,
-13251, 43705, 27129, 50608, 5170, 31936, 63919, 17000, 44484, 27694, 1521,
-52731, 35391, 18754, 60944, 5394, 35120, 49586, 15889, 30998, 63263, 11826,
-48183, 23998, 41314, 3480, 54031, 18031, 32803, 61142, 6555, 46509, 27774,
-15817, 56758, 36729, 8554, 47334, 24062, 62918, 3534, 39784, 21426, 53764,
- 7934, 39602, 26437, 58409, 13536, 47531, 29037, 4942, 51427, 36167, 20576,
-57264, 1063, 48269, 26489, 39746, 10643, 59570, 19925, 30338, 52137, 7441,
-44798, 35039, 12361, 56603, 22089, 42451, 6634, 63319, 29206, 16690, 49703,
-35438, 1218, 55724, 25214, 41995, 13771, 64742, 28843, 2981, 50798, 36100,
-12285, 54546, 29273, 16864, 62455, 35720, 5524, 49587, 28955, 14391, 64340,
-36198, 8419, 47567, 23488, 61315, 252, 32961, 45616, 12594, 56953, 22947,
-41501, 7717, 47501, 25588, 63308, 11582, 41216, 21841, 53171, 7387, 32843,
-47477, 18980, 62770, 1770, 31190, 45905, 18677, 57047, 10942, 40062, 25767,
-54476, 882, 39959, 18283, 56597, 29687, 10199, 49788, 36381, 19873, 63778,
- 6610, 35341, 44746, 21185, 55628, 1366, 40684, 23525, 61625, 13483, 33104,
-53513, 3058, 48119, 26011, 39344, 12089, 61442, 24414, 47964, 902, 41635,
-21297, 53663, 10851, 32076, 63016, 14560, 44943, 27544, 2293, 61460, 36688,
-17264, 51509, 5566, 31982, 64656, 14604, 46211, 29815, 8415, 57038, 24636,
-45217, 2962, 40084, 21712, 62452, 7474, 42102, 26773, 56888, 12701, 38406,
-21281, 48779, 2620, 60447, 26556, 40092, 12190, 48906, 22239, 64381, 1027,
-32201, 45603, 14531, 57315, 21254, 38325, 2726, 55400, 29864, 15230, 49878,
-37341, 8985, 63491, 23867, 42548, 14066, 52399, 30159, 4294, 57472, 36935,
-15443, 50884, 28285, 14, 64896, 36772, 19105, 53332, 8516, 43838, 21329,
-31450, 56264, 4807, 47866, 19838, 36281, 61407, 721, 30414, 52312, 20486,
-47145, 8046, 31423, 58821, 16340, 45640, 28983, 5977, 63541, 35911, 13935,
-50580, 25451, 44395, 3265, 36934, 57950, 15535, 28761, 52026, 6677, 41057,
-21581, 59212, 12908, 30379, 54034, 3648, 45649, 28596, 12510, 62298, 35460,
-17201, 52921, 9381, 30955, 46019, 19444, 64634, 1679, 32726, 52066, 12745,
-41531, 24273, 62906, 7628, 40720, 20261, 50703, 32400, 9657, 58561, 37544,
-20943, 49527, 2369, 38042, 60905, 15722, 31286, 48692, 10692, 59368, 25127,
-40909, 6649, 54095, 32716, 16130, 50733, 35749, 8994, 62033, 21780, 46081,
- 3007, 34251, 57812, 19224, 44116, 6069, 34589, 63199, 20881, 42322, 12101,
-53855, 26355, 41116, 1446, 62148, 31714, 14592, 52129, 36341, 4532, 59435,
-24463, 47254, 12172, 41080, 22178, 63155, 3623, 39204, 25254, 53739, 7572,
-31883, 58630, 16184, 45650, 28518, 8979, 54739, 36374, 17632, 62894, 2094,
-42713, 25731, 51936, 14189, 31736, 59603, 3665, 43633, 22358, 51178, 10042,
-31550, 58836, 17534, 47040, 7523, 38925, 25163, 55876, 11431, 49163, 23371,
-40345, 2861, 57696, 19514, 31229, 52262, 10535, 43463, 22467, 59135, 193,
-37077, 52735, 14274, 30885, 45467, 5347, 60607, 28944, 16796, 54468, 37307,
- 7381, 49813, 29970, 17771, 61868, 10704, 48582, 31607, 5913, 52749, 34777,
-17246, 55300, 9016, 42034, 26220, 60178, 5265, 39947, 24231, 54436, 13924,
-34012, 61399, 7639, 45869, 31010, 18199, 54478, 13176, 37817, 62764, 6401,
-29229, 46027, 63786, 2622, 48164, 19638, 34128, 57561, 11315, 43256, 23223,
-64471, 1685, 29804, 48945, 14160, 55164, 23520, 39414, 8750, 64961, 26083,
-49020, 1407, 41507, 21424, 60039, 11080, 33928, 48572, 18720, 63428, 49,
-32758, 45477, 16585, 51163, 27905, 5469, 64843, 37876, 20823, 49260, 9406,
-32771, 57651, 18149, 44617, 988, 33964, 49009, 19621, 63652, 9673, 39995,
-26326, 54535, 2178, 38375, 21315, 59605, 10111, 46815, 29688, 15691, 57821,
-37132, 6995, 47936, 23435, 62107, 11655, 40127, 27059, 54562, 2173, 38996,
-21575, 57483, 6876, 46005, 25542, 39233, 12566, 60260, 22479, 43109, 4767,
-52402, 30265, 14100, 63791, 35006, 1907, 48901, 21634, 55179, 13403, 38444,
-27257, 59701, 9881, 47729, 18580, 31279, 64424, 2924, 45091, 27802, 16137,
-54500, 37733, 8132, 60769, 23680, 46379, 12424, 41805, 22847, 62439, 2283,
-32731, 53838, 14580, 42851, 24262, 65500, 3667, 31315, 52547, 15342, 45330,
-27677, 8592, 61576, 37248, 18431, 53222, 5694, 36535, 49606, 16708, 31317,
-59908, 10334, 46046, 24774, 41655, 4319, 58987, 22091, 46953, 12218, 41748,
-24575, 53609, 3746, 32963, 58137, 19340, 41911, 9402, 51399, 29362, 16395,
-64905, 36375, 5640, 50404, 20324, 36019, 53905, 1189, 31683, 57622, 15759,
-44966, 28977, 3822, 59415, 36909, 13068, 52335, 23832, 43840, 5704, 34838,
-64351, 16428, 48625, 29293, 7818, 61937, 37784, 13114, 52646, 22921, 43314,
- 3581, 58228, 33694, 17918, 50638, 10168, 30023, 62750, 16077, 46334, 28002,
- 5894, 51756, 37384, 18121, 58886, 10226, 43602, 22370, 54159, 5097, 32738,
-59916, 14536, 39074, 25372, 56054, 4137, 35912, 50027, 16871, 30344, 58486,
- 8099, 41454, 25289, 48439, 10566, 58063, 19817, 34086, 43980, 486, 53026,
-18013, 36224, 61907, 9508, 30132, 48706, 15199, 53553, 23650, 39066, 883,
-63560, 22537, 49228, 8935, 32865, 45145, 15601, 53668, 28201, 6774, 58721,
-38198, 16741, 30569, 49371, 7690, 62021, 25640, 41265, 11119, 48189, 22619,
-60940, 6323, 34380, 45613, 16343, 56867, 27955, 2356, 49380, 36068, 20406,
-61374, 8763, 34200, 47182, 19344, 55433, 6596, 33691, 45942, 15118, 60729,
-28979, 2084, 49993, 37177, 14493, 62174, 24907, 45214, 7199, 33914, 55611,
-17088, 44781, 9669, 34963, 63090, 18879, 49047, 2188, 40266, 25669, 55458,
-12360, 40037, 21618, 60406, 7422, 47702, 30789, 17086, 64273, 37869, 10208,
-54713, 23215, 45497, 2238, 33381, 63234, 18457, 43115, 10043, 53104, 25602,
-41422, 6511, 57348, 19517, 33482, 48169, 3279, 59931, 23715, 38843, 11525,
-56070, 21533, 48171, 5794, 36460, 58960, 14708, 29360, 47485, 182, 55553,
-24721, 40578, 11808, 63567, 19659, 34730, 53863, 7723, 28889, 45042, 20598,
-56896, 3218, 38389, 22878, 48564, 12228, 63790, 26346, 40927, 1614, 56215,
-23512, 40107, 12278, 49033, 26019, 65388, 9700, 30621, 45966, 17483, 51962,
- 3861, 31718, 59824, 18727, 46146, 9549, 34074, 55518, 16911, 45226, 28499,
- 7265, 65273, 38121, 15423, 31029, 54909, 5919, 48489, 19878, 33027, 56638,
-11579, 46327, 18490, 35352, 62004, 1597, 30453, 51419, 19045, 42252, 5026,
-57630, 30790, 16249, 49415, 37550, 8115, 65100, 23553, 42140, 12282, 54534,
-26324, 39528, 5517, 63631, 19894, 35830, 50464, 2006, 31241, 62694, 15205,
-45770, 27995, 8896, 60170, 37306, 14929, 49948, 27911, 5034, 61087, 38200,
-16159, 28591, 48921, 7965, 63624, 24016, 40213, 12029, 48874, 22032, 55898,
- 1661, 40708, 24117, 64394, 13747, 33230, 45908, 4354, 56038, 25787, 41741,
-13996, 63672, 24260, 43853, 2912, 58743, 19352, 32625, 46613, 10253, 51315,
-18175, 30922, 63362, 3971, 44428, 27383, 15983, 50713, 36186, 1398, 57292,
-24991, 47984, 11082, 39921, 22550, 53264, 14857, 30663, 61549, 9002, 45473,
-25065, 40066, 4727, 53011, 19610, 32217, 61882, 7295, 44088, 27714, 16157,
-58791, 37916, 4954, 30296, 54327, 15430, 47593, 28941, 5742, 61612, 36327,
-13797, 53335, 24110, 41857, 7094, 59176, 29470, 12124, 53921, 35630, 15775,
-49806, 28281, 2896, 62941, 37677, 19875, 53055, 11593, 41225, 26928, 58909,
- 5591, 30929, 51727, 14019, 42990, 24261, 56865, 7978, 39361, 22566, 64702,
- 3569, 33527, 52313, 12251, 45004, 29296, 16799, 56251, 35972, 4835, 46761,
-22721, 63663, 9582, 41147, 26951, 51499, 14040, 32972, 65469, 29, 47582,
-30800, 16139, 50944, 37316, 8893, 57566, 23306, 45345, 12239, 39701, 26761,
-60553, 6364, 42945, 22650, 52434, 1494, 34050, 55846, 13076, 42303, 22740,
-61768, 6963, 31903, 50717, 16990, 44283, 28404, 3838, 64142, 35397, 18407,
-49826, 8908, 34562, 57877, 17663, 41331, 7221, 50755, 34385, 13107, 60676,
-23354, 44082, 2026, 32764, 57886, 20283, 48633, 10954, 30877, 54979, 19461,
-43524, 133, 63703, 26916, 38523, 7302, 48708, 21317, 55857, 11557, 38613,
-27126, 60396, 1484, 34472, 48961, 17196, 62971, 6700, 30131, 46367, 13324,
-55791, 24001, 39779, 2266, 58674, 18979, 31359, 45384, 8997, 60626, 24332,
-40348, 12031, 49132, 21408, 65434, 6858, 39281, 25700, 54834, 10194, 48266,
-20177, 33387, 55669, 2940, 45018, 27502, 14886, 59901, 35135, 1945, 50617,
-28320, 16727, 65136, 38206, 9243, 30749, 56198, 20545, 42855, 401, 52909,
-31741, 14397, 60208, 35561, 9380, 50398, 23966, 41869, 2083, 64560, 21048,
-38306, 10929, 51743, 27024, 42659, 7560, 60962, 21657, 48473, 11953, 41133,
-25596, 65246, 1634, 33411, 52775, 15375, 45426, 28600, 4111, 63700, 37125,
-13956, 47200, 24033, 55625, 4870, 38942, 21320, 59109, 13468, 33747, 46155,
- 6184, 56148, 25982, 41088, 10873, 59108, 18206, 35930, 50886, 4577, 31133,
-64928, 19862, 44119, 2043, 33850, 55330, 15834, 46153, 28933, 3889, 59792,
-36565, 16895, 50452, 30695, 452, 65380, 24779, 42040, 10505, 53302, 18482,
-37470, 58692, 5518, 29668, 45366, 17845, 64288, 9779, 30298, 44262, 20560,
-59296, 3649, 40847, 26294, 52061, 12579, 35548, 57223, 9138, 29880, 48296,
-18602, 65336, 2906, 38685, 27031, 51329, 14559, 32722, 58194, 5590, 43293,
-22598, 52713, 11319, 32969, 59543, 1435, 46106, 28078, 16204, 54221, 36092,
- 4520, 50252, 27344, 14456, 61587, 37195, 7384, 48103, 24836, 56211, 13876,
-39426, 21637, 60697, 1390, 37431, 50076, 15120, 28599, 63582, 8650, 44130,
-34676, 14415, 54485, 25156, 44978, 3967, 32251, 65472, 16880, 44728, 27798,
- 8246, 52490, 36425, 16120, 59440, 29263, 4586, 49753, 36233, 17824, 52451,
- 1228, 33173, 64543, 17791, 47346, 9980, 41653, 25642, 60331, 4699, 38929,
-21239, 54740, 13943, 47750, 30504, 6311, 59905, 37631, 20554, 53757, 30,
-33828, 47744, 13187, 56490, 25844, 39966, 8393, 64086, 25338, 39456, 2734,
-48306, 22227, 57725, 12429, 41364, 25550, 52659, 722, 35789, 59745, 16757,
-29808, 44592, 3166, 64279, 24037, 41022, 10397, 47751, 22497, 59626, 8120,
-32566, 53563, 20866, 40799, 12733, 62302, 28524, 3252, 53713, 36450, 14920,
-49698, 28955, 1048, 60644, 38002, 16196, 29495, 55525, 10985, 48010, 23823,
-40461, 6085, 57501, 20270, 34381, 52857, 745, 42652, 22671, 65263, 11339,
-33461, 53839, 20446, 45006, 2433, 32719, 57452, 16772, 44206, 28968, 4530,
-62168, 38053, 16365, 30321, 53976, 7892, 43240, 25419, 58224, 11446, 39209,
-21772, 53067, 640, 38476, 23031, 57941, 8609, 36227, 50012, 15990, 29952,
-62085, 1598, 43193, 25981, 53206, 14524, 34995, 58544, 7155, 42018, 22348,
-52763, 9875, 32608, 60061, 19421, 44760, 5435, 35569, 49539, 37606, 128,
-56685, 27693, 15896, 50806, 36324, 10219, 59967, 22784, 45678, 13498, 36747,
-56752, 702, 30633, 51721, 20603, 43043, 8054, 62913, 27123, 41126, 13031,
-57254, 25532, 40649, 3363, 50769, 29518, 16327, 61201, 37223, 1740, 48172,
-24331, 56525, 10735, 40454, 23247, 60747, 7941, 35788, 50527, 14844, 29528,
-55868, 3791, 43373, 21846, 62538, 15606, 35132, 50494, 1232, 31517, 55642,
-12870, 41944, 23879, 48549, 8755, 57579, 21430, 40468, 751, 62935, 26341,
-42858, 11031, 52362, 19258, 33382, 59242, 2932, 45138, 18242, 36514, 53102,
- 8334, 28858, 58567, 17022, 44362, 27605, 2680, 62555, 35909, 18019, 53907,
- 5334, 47203, 30666, 15969, 64877, 36748, 11013, 46270, 25430, 51153, 4410,
-29739, 57680, 14396, 41323, 24666, 53089, 200, 36498, 59177, 14404, 31350,
-52486, 10066, 42468, 25082, 55655, 1433, 38642, 20728, 60217, 29241, 4964,
-49517, 37013, 19771, 53233, 9163, 34439, 63103, 17524, 47406, 3538, 41461,
-26223, 61820, 8919, 39581, 23622, 56583, 12554, 43864, 22580, 52687, 2794,
-32749, 64988, 19288, 47402, 9165, 41249, 25041, 55801, 10999, 32261, 44591,
-20844, 60936, 4558, 41262, 26248, 54480, 13881, 34552, 47731, 6746, 63695,
-27619, 16896, 51132, 35276, 3210, 55958, 22678, 45360, 14308, 33117, 60841,
- 87, 44309, 28138, 16085, 63580, 38188, 8540, 30138, 59004, 20493, 47509,
-10654, 41870, 23504, 55289, 4797, 34230, 47126, 14807, 61184, 28009, 7731,
-49695, 36576, 17372, 63956, 4300, 44257, 28953, 16878, 54497, 36591, 7586,
-58102, 26087, 46695, 12532, 40548, 21719, 62807, 33, 34035, 53347, 16287,
-45520, 28238, 6459, 57251, 34930, 19530, 54122, 5343, 41983, 23257, 60756,
-13096, 34347, 51130, 7311, 42494, 23605, 62681, 10864, 41382, 22653, 51481,
- 1525, 31506, 65141, 14824, 42334, 24195, 54128, 3317, 38283, 22155, 61305,
-13574, 46759, 28808, 8055, 56940, 37334, 13030, 48644, 24381, 63112, 8603,
-40546, 21536, 52361, 12445, 33862, 55221, 7202, 43198, 22264, 57519, 12712,
-32718, 50251, 3392, 41188, 22581, 62355, 13493, 32779, 53908, 928, 48509,
-25547, 41739, 12943, 55751, 23676, 38438, 7987, 63739, 18162, 32786, 53510,
- 1107, 42710, 24522, 59265, 12032, 40653, 21818, 55311, 4476, 43921, 25286,
-61965, 13331, 39351, 21081, 50947, 6374, 29955, 65081, 14087, 41613, 23666,
-56624, 8502, 32609, 44682, 19322, 58734, 566, 32357, 44536, 16777, 53719,
-28301, 4152, 64924, 37895, 11260, 30585, 48526, 20503, 56186, 5645, 32337,
-46600, 21246, 60540, 731, 39509, 26779, 58006, 9697, 48776, 22192, 40014,
-13647, 59661, 34692, 1807, 50162, 23740, 41991, 9459, 63053, 22734, 48107,
-12846, 41940, 26737, 55649, 5568, 39511, 25853, 61066, 14302, 35198, 51592,
- 8224, 29451, 57765, 16353, 44140, 28419, 2610, 64270, 36331, 17865, 50155,
- 8180, 29733, 58041, 14826, 41440, 23598, 60891, 5102, 38594, 21204, 49210,
-14448, 53752, 30927, 6750, 62545, 35421, 18118, 50187, 9748, 42046, 22842,
-61848, 6138, 47630, 28333, 12643, 52527, 37356, 15558, 57788, 28948, 4602,
-49719, 36038, 17719, 64966, 563, 43663, 26926, 50998, 9857, 33824, 59195,
-16645, 44577, 27458, 7237, 58103, 36012, 18395, 51545, 9221, 42667, 26195,
-64350, 2647, 35416, 51197, 15717, 30494, 61702, 9916, 44784, 28681, 16515,
-56067, 36813, 5484, 50557, 29623, 15623, 63066, 37346, 6945, 48403, 23533,
-56395, 10310, 33510, 45303, 13977, 59124, 27565, 3456, 50167, 37694, 13139,
-61327, 22938, 46995, 6367, 34274, 64710, 18202, 43426, 11825, 54574, 26543,
-41271, 4818, 57246, 23711, 38981, 11970, 49109, 21558, 65238, 3153, 32387,
-46914, 11845, 60795, 27944, 16845, 50212, 37527, 3613, 64410, 28396, 16774,
-13549, 61025, 38205, 6882, 29578, 47445, 18907, 65349, 2799, 40490, 26567,
-55318, 6104, 47074, 28757, 14817, 64176, 37314, 10047, 48094, 23869, 58320,
- 2228, 38351, 22477, 52322, 11259, 44251, 21363, 64330, 8576, 34460, 46536,
-20137, 58481, 13375, 31800, 45123, 5701, 55488, 20239, 29937, 46835, 435,
-65134, 24694, 38969, 10717, 47962, 23162, 60232, 6426, 40694, 25196, 47422,
-10981, 64265, 19586, 30059, 44843, 3151, 60256, 25306, 38907, 10030, 54389,
-22321, 48621, 13883, 36459, 60823, 6361, 30545, 48305, 13083, 55567, 24759,
-39245, 4378, 61849, 22079, 48124, 13203, 34105, 54632, 7137, 42215, 23699,
-56895, 10789, 33025, 50581, 19745, 42472, 805, 58079, 21069, 30307, 48460,
- 9424, 62836, 20147, 32986, 44095, 7393, 59965, 34793, 18897, 50244, 10857,
-42679, 24834, 63134, 4296, 39406, 21353, 48479, 12761, 62102, 26699, 41675,
- 9245, 51856, 17048, 32283, 64651, 761, 42560, 24470, 55528, 12705, 38284,
-21943, 59289, 6860, 32464, 46416, 15656, 52855, 29108, 4714, 60791, 36578,
-17347, 49255, 8398, 30193, 58655, 14828, 44645, 27832, 5054, 52211, 36354,
-20172, 64043, 683, 47218, 18152, 36473, 53209, 9277, 28895, 59685, 15924,
-44028, 28290, 1622, 55073, 38089, 14734, 30715, 62293, 6142, 47662, 24611,
-40171, 10415, 58277, 19624, 48564, 27360, 7176, 52875, 37045, 18793, 56831,
- 3929, 36497, 49498, 15981, 31783, 63285, 7080, 44436, 27622, 16949, 57826,
-37215, 1595, 53750, 20950, 32916, 46663, 11621, 56938, 19497, 32809, 45580,
- 2892, 62380, 28284, 15752, 49506, 36438, 6409, 55610, 24884, 43503, 13724,
-58571, 30952, 3757, 50090, 37602, 13701, 63458, 23617, 43475, 8788, 51714,
-17579, 31142, 57553, 1072, 46003, 27898, 16269, 59652, 31099, 3545, 53784,
-35248, 17538, 47997, 11677, 57750, 27109, 38654, 7386, 59883, 21262, 49043,
-11558, 39606, 26873, 52748, 152, 31964, 61957, 16668, 44729, 28539, 4276,
-55881, 37929, 16618, 29712, 47701, 1713, 58854, 24218, 40026, 15027, 63840,
-30313, 4664, 52260, 35424, 14478, 60303, 25405, 43272, 7553, 52686, 24227,
-40304, 11109, 58235, 21571, 39201, 2984, 62601, 26849, 49007, 5644, 41392,
-21385, 58049, 11395, 38759, 22411, 50786, 6214, 31500, 64435, 17785, 42531,
- 9960, 52870, 27193, 38352, 314, 57830, 23026, 46772, 11718, 33711, 54717,
- 3622, 45648, 27466, 16407, 62095, 35705, 6111, 51660, 27932, 15030, 61210,
-36445, 8049, 50170, 24092, 42881, 13217, 59341, 23126, 39048, 2468, 52784,
-17746, 34819, 64398, 10108, 42631, 17087, 55172, 30030, 5957, 50457, 36379,
-18267, 61511, 2910, 33265, 54027, 18061, 43662, 11639, 60561, 26947, 39964,
- 3681, 56614, 21205, 38940, 7399, 49084, 25016, 57999, 11527, 42916, 22090,
-50042, 633, 37590, 63208, 17227, 31764, 48336, 6675, 55224, 20395, 31749,
-44974, 10824, 61582, 19372, 33361, 51129, 3645, 43544, 24598, 54903, 12778,
-33179, 63021, 1252, 44877, 22840, 38695, 11506, 59335, 27029, 43817, 2339,
-54783, 26008, 39062, 11104, 57291, 18990, 33667, 46002, 1774, 63716, 23702,
-40271, 9426, 54607, 21883, 39579, 12495, 56546, 26059, 38678, 5825, 47584,
-19253, 61281, 29366, 2284, 50020, 37855, 20321, 54120, 4343, 33347, 62063,
-20903, 45800, 11698, 32706, 59168, 18383, 42266, 6349, 54487, 26524, 38656,
- 3463, 60460, 21220, 47014, 13664, 33875, 57840, 1526, 44517, 28198, 13475,
-59735, 35329, 19013, 53039, 490, 31461, 47154, 20962, 65049, 8671, 33286,
-44574, 19658, 56508, 2018, 30587, 52441, 14413, 42158, 24742, 58945, 3165,
-38257, 21488, 51580, 9480, 33341, 63043, 15634, 44723, 28574, 6817, 54988,
-36880, 14051, 44516, 25219, 56338, 965, 30446, 43854, 14103, 58059, 27587,
- 8397, 51350, 33358, 4429, 48793, 23211, 55866, 14603, 33375, 46036, 8526,
-58858, 22021, 38365, 11521, 51416, 34021, 18370, 60716, 3666, 33147, 45236,
-17983, 54601, 11962, 40307, 26741, 62265, 7483, 39660, 24647, 56274, 1062,
-32816, 51724, 18250, 42246, 4467, 62697, 26301, 41122, 11128, 52081, 17590,
-33280, 59355, 7301, 42475, 17290, 52834, 30220, 13166, 57336, 37164, 2435,
-50071, 28037, 15236, 53120, 37151, 7440, 57156, 18035, 35463, 49757, 13490,
-30159, 65095, 4363, 45912, 27661, 16994, 38241, 57952, 1712, 28834, 46300,
-20190, 63177, 9064, 32167, 44524, 15415, 51252, 28026, 1333, 59961, 36411,
-14778, 45955, 25126, 64087, 3499, 39150, 21831, 52858, 13743, 34586, 62145,
- 7196, 44341, 18071, 34740, 49316, 2534, 55581, 17171, 30730, 46837, 5335,
-64960, 26600, 38589, 9032, 57333, 30739, 16827, 50663, 37239, 2788, 56130,
-23105, 45154, 6121, 34082, 59480, 18705, 48546, 10402, 38609, 26983, 58395,
- 5143, 44351, 21269, 54398, 11379, 41941, 26145, 65316, 1730, 34399, 50863,
-20269, 42620, 10602, 63463, 33871, 20976, 55272, 1293, 37890, 49674, 16788,
-30505, 61453, 7621, 41650, 26177, 56732, 12607, 39391, 23414, 51090, 4201,
-33202, 65247, 12729, 47094, 23680, 40978, 7860, 58407, 26521, 39835, 11696,
-54011, 21544, 49068, 4668, 32077, 64561, 15050, 45643, 28566, 2421, 50962,
-35340, 17351, 62621, 10299, 43279, 26703, 52294, 788, 36116, 54915, 14198,
-30249, 47600, 8509, 64929, 24186, 40903, 10565, 49103, 21588, 61761, 5739,
-40709, 23450, 52726, 9897, 34351, 55025, 13870, 42959, 21942, 65460, 1806,
-31570, 52045, 18335, 40891, 8895, 61728, 28838, 16555, 49403, 36412, 2432,
-59121, 26638, 41478, 11531, 50316, 20472, 34768, 64450, 7677, 47670, 22102,
-39217, 12287, 61992, 26310, 45638, 5932, 40845, 21600, 55354, 2234, 33415,
-47710, 17830, 64158, 5163, 33033, 44837, 14102, 57704, 23590, 41086, 7505,
-49321, 25901, 64601, 11749, 39854, 21810, 51901, 6654, 34155, 61108, 14063,
-45466, 27926, 8295, 49805, 37501, 20442, 58219, 1318, 44304, 29172, 16624,
-65053, 36454, 5911, 50326, 28513, 15564, 61119, 35807, 9159, 44997, 24013,
-54722, 13730, 38954, 23464, 60585, 1739, 32170, 46277, 13604, 54642, 23761,
-39734, 3671, 56992, 23607, 39707, 12232, 62931, 21683, 48416, 7359, 31225,
-59434, 19223, 42272, 12857, 63848, 28868, 1860, 49973, 37425, 20191, 57411,
-11240, 47418, 22601, 40672, 2901, 63366, 34092, 17756, 54183, 6067, 47721,
-27267, 42071, 11581, 61787, 19803, 47248, 30045, 3327, 51685, 35528, 20170,
-57555, 7869, 46991, 27101, 41684, 12910, 64127, 25203, 47929, 5033, 38788,
-21568, 53162, 10095, 32492, 65018, 15890, 46562, 29616, 2208, 61955, 35516,
-19049, 51012, 9086, 30953, 59516, 15017, 46042, 27688, 3779, 56660, 37268,
-13339, 46859, 24236, 59259, 958, 40825, 22476, 52880, 9250, 31387, 65080,
-15583, 45329, 29059, 6499, 53232, 35593, 14822, 57994, 24986, 47441, 4133,
-41081, 21527, 64791, 15061, 32338, 50835, 5528, 42839, 24676, 61278, 13897,
-31563, 51621, 8691, 43338, 25521, 60216, 3442, 33828, 48012, 19661, 58615,
- 7822, 41737, 24152, 52637, 10706, 33398, 63106, 15532, 45436, 28039, 7546,
-57604, 38233, 15079, 30162, 48666, 63, 56600, 25826, 38905, 8141, 48838,
-22448, 64574, 11792, 40949, 25687, 48952, 7355, 54109, 24892, 39141, 10617,
-63971, 21528, 48987, 6076, 40950, 26245, 62433, 11095, 39609, 17605, 51997,
-29291, 4046, 57990, 36741, 17733, 49468, 9575, 33628, 63346, 19574, 47890,
- 6749, 38911, 27285, 61518, 12590, 48486, 25886, 39357, 260, 57689, 18118,
-32027, 48590, 5428, 61865, 23641, 40298, 11321, 59084, 22829, 49389, 6101,
-34554, 46394, 15579, 63552, 23945, 41204, 58529, 10980, 43030, 21386, 62996,
- 1106, 34909, 52301, 13232, 42168, 23849, 62196, 1899, 47559, 20465, 37768,
-56285, 9078, 31148, 48538, 20424, 60273, 4705, 33229, 45688, 15897, 52878,
-28209, 5874, 65490, 38073, 15712, 30188, 48567, 9765, 56994, 24020, 38543,
- 2048, 47667, 22912, 64024, 13770, 31589, 45684, 3439, 50853, 21113, 33368,
-63398, 9607, 44909, 19886, 32381, 62051, 5074, 44403, 34687, 20654, 61097,
- 181, 42891, 26009, 55364, 9526, 36997, 51337, 15522, 31901, 61620, 7816,
-44248, 27329, 16294, 51946, 37676, 5878, 57094, 23791, 42111, 11485, 64633,
-21728, 40450, 5094, 55027, 23566, 47756, 12959, 32425, 60888, 9035, 43559,
-25465, 55502, 3931, 31665, 47739, 20670, 58884, 9104, 41106, 25649, 61349,
-13361, 40364, 23859, 54533, 1698, 40132, 21450, 51793, 14094, 35939, 61621,
- 7820, 28713, 48864, 19570, 64403, 11559, 39396, 25777, 54277, 2400, 43687,
-21963, 62586, 13240, 39709, 27243, 52828, 3084, 38527, 22158, 57356, 13415,
-45862, 28630, 7583, 59751, 36033, 18469, 53870, 4167, 41984, 25854, 53015,
- 9817, 33575, 59344, 13762, 43412, 23212, 53289, 2519, 33856, 62823, 17676,
-42837, 8709, 55487, 29543, 16337, 49972, 37260, 3457, 61501, 22638, 45854,
-13990, 33652, 62808, 981, 44307, 27815, 16597, 59226, 37475, 8209, 53569,
-23743, 42257, 12279, 57165, 23134, 40108, 5871, 59771, 21671, 38646, 12366,
-62194, 25803, 41481, 5288, 50843, 19402, 33892, 58958, 2418, 45431, 25832,
-38487, 13829, 57511, 27141, 48634, 703, 42194, 18866, 60852, 30021, 5278,
-49635, 35835, 13034, 59819, 26230, 43086, 4337, 56422, 20071, 33408, 50990,
-10733, 42997, 23694, 62576, 6636, 39459, 21609, 52541, 3174, 31785, 56513,
-14374, 42825, 25191, 52044, 329, 32568, 57427, 15885, 48513, 35606, 10586,
-62845, 25609, 42736, 8069, 54368, 22977, 40640, 12116, 61251, 25946, 48759,
- 3689, 39018, 21491, 60145, 14765, 32987, 46617, 949, 57222, 24844, 41922,
-15582, 53574, 29680, 2839, 62475, 35774, 18701, 51051, 9631, 32346, 55601,
-17871, 46038, 3853, 33165, 56701, 13616, 41549, 24622, 52999, 227, 31850,
-57596, 18216, 47194, 4370, 33503, 64191, 17146, 49216, 10669, 38529, 26896,
-62111, 7059, 48820, 18351, 32650, 60105, 8765, 43578, 24858, 51447, 2619,
-33320, 56055, 15948, 44109, 29369, 4411, 52393, 20475, 34006, 55787, 8898,
-44387, 17409, 31198, 60934, 5240, 42945, 25047, 52533, 9619, 30802, 56453,
-14182, 41096, 23686, 58911, 58, 38323, 22433, 54826, 8827, 43695, 25612,
-59708, 12545, 40699, 24748, 63110, 1280, 38760, 22278, 53331, 8967, 36256,
-57484, 15404, 29793, 50456, 344, 43259, 25076, 58818, 12309, 38805, 21573,
-51843, 6918, 31615, 55824, 16004, 44124, 28092, 4563, 64731, 36530, 12000,
-52887, 22146, 42614, 7270, 63415, 29797, 15279, 54269, 35787, 11094, 49747,
-25722, 41696, 3021, 59993, 22137, 40296, 11152, 48308, 26825, 55772, 5721,
-39637, 21134, 61973, 12127, 35033, 51679, 8238, 39925, 22405, 54192, 229,
-34250, 58983, 19545, 47861, 6577, 39458, 23380, 62789, 11300, 31082, 53389,
-15135, 44918, 28190, 942, 63986, 38142, 14387, 30104, 56155, 5106, 43204,
-22778, 51974, 12687, 34084, 65370, 3783, 43357, 23419, 52935, 12226, 34456,
-62209, 18903, 44449, 1965, 36442, 57004, 15497, 30000, 46453, 4468, 61191,
-23731, 40954, 13234, 55747, 22590, 46236, 3092, 35785, 53577, 13926, 30508,
-59352, 6810, 47618, 20123, 32782, 61710, 12269, 42780, 25624, 54151, 1018,
-39317, 26954, 59709, 11223, 43627, 21370, 56402, 4599, 32295, 52700, 13742,
-42559, 23514, 64815, 9070, 34361, 53923, 19866, 45511, 1868, 33689, 48462,
-19123, 62490, 10432, 40166, 21995, 54313, 2330, 39019, 26724, 17773, 50074,
- 3969, 30840, 54912, 15234, 41782, 25242, 57813, 5291, 34755, 50066, 15005,
-30015, 63922, 6936, 44467, 27550, 14747, 57673, 38159, 229, 29182, 49006,
-19523, 61792, 9530, 30669, 44378, 13902, 54918, 23127, 39794, 3916, 60579,
-27015, 49241, 12318, 39996, 21689, 61347, 6671, 34948, 54382, 19268, 42110,
-10976, 56134, 26350, 40074, 1376, 59802, 17098, 29413, 48290, 8779, 53583,
-27599, 14742, 58744, 35868, 6993, 50217, 27966, 16614, 63954, 38084, 2600,
-29901, 54851, 14538, 47160, 27916, 3726, 62831, 35667, 16800, 53648, 28643,
- 471, 49491, 35740, 15883, 58923, 28723, 8183, 49908, 37099, 19160, 57227,
- 1759, 42049, 22908, 52316, 11680, 34003, 65274, 14728, 45314, 28237, 636,
-55167, 35738, 17588, 50019, 6377, 32964, 63913, 12612, 43541, 23490, 56729,
- 4882, 33130, 47125, 18487, 58373, 340, 32264, 44308, 16338, 52470, 29297,
- 8703, 60831, 36126, 18144, 49943, 6536, 42072, 24905, 64112, 9512, 48203,
-32007, 16947, 61457, 37665, 480, 52191, 23124, 43382, 11268, 62299, 30145,
-14970, 50088, 35856, 6431, 64512, 22171, 48042, 3724, 39907, 26743, 58061,
-10877, 49223, 19697, 32204, 45186, 320, 60342, 24741, 39934, 10637, 57530,
-20056, 35875, 53651, 7308, 29016, 48327, 20798, 56060, 12234, 34566, 43736,
- 3704, 63752, 29188, 15388, 51784, 38012, 1400, 31046, 58539, 14084, 43732,
-24962, 51087, 3273, 32355, 55483, 18299, 43526, 11479, 60775, 26492, 39950,
- 7957, 55256, 21976, 48064, 4610, 32379, 64138, 12982, 39527, 25310, 52331,
- 8305, 37593, 62945, 16638, 28562, 47020, 7282, 54322, 22498, 39776, 14769,
-63900, 28550, 587, 53382, 38182, 14281, 31690, 55463, 8591, 43755, 24889,
-61220, 12147, 39831, 21561, 59058, 5962, 38410, 27187, 64618, 9430, 44190,
-18867, 29695, 52798, 4101, 34509, 59498, 15734, 44551, 28152, 1384, 56937,
-36864, 17825, 53133, 9574, 43438, 27238, 54547, 6289, 39013, 20939, 63004,
-13554, 31121, 51046, 5716, 43631, 23606, 58359, 12100, 40995, 23493, 48499,
- 5220, 64452, 27146, 41373, 11607, 49176, 21644, 61701, 7110, 34213, 47016,
-20188, 63330, 11763, 40134, 22932, 51888, 8356, 31422, 56091, 18883, 45872,
- 3304, 32762, 58683, 15357, 44293, 28613, 811, 53795, 36193, 16303, 63367,
-28913, 10316, 49441, 35900, 20360, 60963, 6887, 34556, 47383, 13530, 58998,
-23768, 39809, 713, 64593, 19857, 33563, 47982, 12418, 57897, 23652, 39569,
- 1695, 50796, 17147, 32087, 65284, 7463, 47138, 26510, 39557, 10962, 62534,
-19138, 35983, 50378, 4072, 29517, 56365, 18826, 43553, 10517, 50577, 20721,
-31451, 60359, 3485, 45805, 19556, 32559, 62535, 10721, 42282, 23412, 53760,
- 5657, 32016, 63967, 13799, 47210, 25433, 40800, 1401, 58541, 22459, 49049,
-12422, 40719, 24781, 61204, 2412, 33078, 51089, 16960, 45627, 28277, 5189,
-61862, 37923, 20356, 55132, 7097, 37033, 51311, 16237, 30789, 63950, 462,
-49056, 22111, 38358, 13529, 58655, 26348, 48285, 2759, 31280, 55728, 17804,
-43536, 10270, 63498, 26263, 41062, 13283, 50784, 29316, 2213, 56731, 35742,
-18952, 49526, 4912, 37843, 60476, 17035, 30805, 47557, 8620, 52117, 27808,
-16670, 60982, 37477, 1681, 49245, 27734, 16168, 55116, 38115, 9373, 28670,
-59858, 17355, 40923, 5600, 49086, 25363, 54394, 8744, 33483, 62877, 19296,
-43123, 12305, 51970, 29336, 838, 58249, 36304, 19498, 49840, 9672, 32115,
-65525, 20596, 44586, 1784, 40824, 25933, 57209, 10369, 39713, 21871, 51139,
- 5584, 32570, 64473, 13349, 42386, 23121, 55168, 2640, 37201, 49725, 15243,
-29180, 60348, 7767, 45810, 28422, 15034, 58251, 37228, 4053, 50859, 27543,
-16331, 59904, 38088, 6957, 30559, 55368, 15071, 47089, 28239, 9115, 65092,
-35960, 22428, 61377, 14107, 32600, 46520, 7063, 59560, 30773, 19035, 44465,
-10550, 54812, 25834, 40244, 3186, 60006, 22820, 39623, 10549, 52370, 31620,
-16715, 59227, 35284, 6249, 50726, 22689, 46351, 2517, 33584, 63271, 17914,
-47659, 8253, 33009, 57589, 15167, 45705, 28971, 586, 51694, 37414, 16274,
-58831, 27920, 5271, 49392, 36317, 20653, 64188, 11891, 34885, 51863, 21279,
-43886, 3603, 36847, 56886, 12656, 30890, 46398, 19116, 60188, 4877, 41720,
-26871, 47395, 12174, 57000, 23309, 41408, 7041, 59786, 31965, 15175, 49856,
-37796, 8477, 55895, 25095, 42587, 11983, 62041, 22266, 39487, 3025, 52195,
-30171, 12119, 63594, 34834, 16472, 49452, 27770, 4507, 58638, 37500, 19492,
-51739, 8354, 40658, 26715, 62231, 11779, 29954, 52925, 19041, 46205, 3008,
-36854, 60276, 16292, 29469, 52573, 8389, 42025, 24802, 61146, 13987, 34357,
-47048, 5387, 55180, 24644, 40995, 14123, 58848, 30863, 1169, 51667, 36246,
-15515, 56717, 27719, 4421, 49671, 36187, 15002, 58947, 29479, 8068, 49181,
-37640, 20083, 57653, 2044, 45093, 28483, 16752, 55556, 37969, 8672, 31509,
-61903, 15804, 46972, 29065, 5431, 52619, 36202, 15467, 64358, 28107, 6242,
-49261, 37769, 17968, 51362, 2148, 32248, 63373, 17426, 45116, 5043, 32548,
-60768, 16776, 44900, 27424, 7689, 55053, 35862, 19836, 47427, 10919, 64868,
-27000, 41569, 6939, 53326, 17193, 34603, 62932, 10006, 39675, 22454, 51754,
- 216, 32146, 64650, 16025, 44726, 28879, 9583, 56654, 36958, 17989, 51041,
- 2748, 43132, 23111, 58841, 14242, 35112, 49959, 1500, 31861, 57547, 12260,
-43551, 24068, 50489, 5882, 32111, 60520, 16764, 45697, 27490, 3949, 64894,
-37981, 15873, 30078, 48346, 1669, 54770, 24806, 41689, 13699, 49118, 22783,
-55511, 2808, 34033, 46633, 13356, 63554, 24518, 39739, 7001, 50625, 19623,
-32445, 62338, 12707, 48272, 25215, 40585, 2956, 65394, 21659, 38329, 12577,
-58700, 23561, 41244, 2120, 54946, 27042, 38340, 11020, 63620, 17829, 31995,
-46664, 528, 54606, 21731, 38611, 13822, 59684, 26534, 38513, 2245, 51559,
-17709, 31269, 57864, 4512, 44286, 28715, 15845, 59972, 35333, 1834, 50818,
-26598, 43225, 12878, 65286, 22012, 40928, 5856, 55215, 24874, 49135, 12843,
-41115, 22068, 57962, 5304, 32300, 53225, 17703, 42181, 2034, 64097, 29847,
-15561, 50103, 36232, 10884, 54575, 26560, 46052, 5654, 39542, 17202, 62676,
-29704, 10467, 49622, 37043, 20860, 60557, 4310, 43539, 25555, 52095, 13047,
-33155, 57050, 2160, 45768, 27824, 16201, 61316, 38235, 8214, 31821, 49096,
-17283, 65077, 5242, 38301, 27290, 52167, 14095, 37639, 56800, 6710, 28456,
-49478, 15602, 34879, 60643, 2711, 42172, 22986, 52704, 8784, 37144, 62335,
-15619, 29591, 46954, 6044, 53557, 28950, 15399, 57502, 35632, 7548, 49515,
-27356, 14796, 58433, 35146, 1624, 49190, 29791, 17850, 62680, 12088, 46272,
-25692, 39161, 8762, 54665, 27131, 43552, 5221, 61376, 18734, 33784, 46159,
- 9496, 60296, 22830, 38817, 4731, 53137, 30787, 16198, 58254, 36014, 7099,
-47006, 25755, 64447, 9610, 41631, 23183, 52844, 12854, 33385, 57768, 2693,
-44023, 21055, 33823, 64763, 10118, 42862, 19903, 51537, 30238, 6171, 58521,
-36668, 19848, 50334, 1337, 32617, 63800, 19294, 47317, 11246, 38581, 26460,
-58688, 3347, 41100, 22420, 50123, 13884, 32633, 63348, 7179, 45318, 27924,
-15447, 59853, 36259, 4635, 54259, 22906, 46551, 14447, 31631, 62077, 3670,
-43803, 26531, 52939, 15096, 30109, 56171, 7121, 45503, 28209, 16595, 62605,
-35326, 10176, 52416, 24023, 41242, 1231, 63742, 19184, 32272, 47284, 6306,
-55858, 18571, 30331, 44838, 9789, 64180, 25793, 39560, 422, 57538, 18215,
-30210, 52165, 5597, 43370, 2541, 54154, 27180, 38512, 12057, 62425, 22694,
-48812, 667, 36394, 51778, 16110, 30377, 64950, 8312, 45105, 19813, 32842,
-55485, 1709, 47306, 27517, 14199, 64504, 37613, 8298, 53354, 23953, 41784,
-12013, 55391, 21723, 40575, 3543, 59989, 26261, 43135, 10891, 53229, 20124,
-31036, 65189, 8885, 46797, 23717, 41557, 3082, 58159, 18000, 30460, 54176,
- 6658, 46033, 17452, 30881, 62562, 10577, 49258, 22992, 40754, 1856, 64984,
-25133, 49473, 11248, 39345, 21788, 52676, 893, 35874, 63287, 12786, 29233,
-50571, 19004, 43037, 2414, 65369, 21089, 31386, 47693, 6717, 56627, 18625,
-31981, 44234, 9846, 55257, 22242, 40456, 6267, 61321, 26228, 46892, 10590,
-31914, 54504, 17225, 43159, 2329, 59759, 20459, 36053, 49598, 5509, 31824,
-63534, 10634, 41637, 22429, 55202, 13503, 33836, 46487, 1528, 65088, 22648,
-39031, 11267, 56385, 26519, 49164, 3244, 38769, 21378, 63774, 11769, 48714,
-26458, 40701, 7036, 61109, 19889, 31292, 44841, 11306, 55175, 24548, 40436,
- 2887, 65143, 18051, 34844, 51952, 10131, 29772, 62717, 13162, 42262, 22589,
-52675, 868, 41508, 25939, 58494, 11440, 38897, 25473, 55266, 3149, 42671,
-22280, 59407, 11705, 31339, 53922, 20617, 43543, 7815, 58505, 26903, 39292,
-11066, 52077, 20070, 37747, 57283, 448, 30879, 48470, 13734, 62003, 26098,
-40642, 4263, 55913, 18790, 35943, 50357, 2226, 30146, 60244, 20377, 42013,
- 7395, 48875, 25111, 57591, 12531, 39584, 23570, 52636, 3978, 33497, 61441,
-20802, 44499, 12679, 35061, 62644, 6802, 30151, 52800, 19243, 42449, 10252,
-65162, 26791, 39438, 3181, 53038, 19655, 34629, 58650, 10070, 44326, 19399,
-33281, 56311, 6823, 49222, 24252, 41555, 10767, 62270, 17928, 32429, 44859,
- 4809, 58133, 25643, 38870, 10998, 60865, 17638, 30071, 51949, 813, 42457,
-23398, 58712, 11890, 29935, 53903, 5544, 46128, 22823, 38588, 10753, 56403,
-26899, 44051, 6823, 50640, 18171, 32483, 62272, 9495, 48084, 22423, 40806,
- 4802, 55811, 25940, 40080, 10391, 60723, 25052, 47949, 6095, 33573, 55886,
-12958, 43312, 23773, 64802, 8032, 34647, 46625, 19304, 54401, 10640, 41485,
-25193, 61647, 5068, 38343, 21041, 53290, 9079, 38246, 27260, 59827, 11508,
-47858, 21105, 38428, 3533, 64713, 26893, 43872, 12382, 51097, 19378, 34034,
-56462, 7858, 43180, 25026, 58180, 3947, 40698, 23094, 61681, 9410, 48357,
-20454, 34227, 56740, 3323, 43514, 19246, 53377, 28822, 8402, 58668, 35818,
-18312, 49324, 7118, 29945, 64186, 15013, 44002, 27302, 6443, 52948, 35434,
-20005, 57032, 812, 46020, 26971, 41191, 11195, 55645, 24629, 43666, 1920,
-63727, 19280, 36619, 51105, 10344, 30561, 57722, 16906, 46107, 28244, 5219,
-56106, 35272, 19913, 44685, 10260, 60176, 26114, 39912, 251, 55392, 21650,
-43680, 13101, 65399, 30536, 9112, 51717, 37618, 21157, 59689, 4859, 44258,
-19734, 32532, 56571, 2139, 42875, 21312, 64838, 11717, 36260, 50605, 15523,
-29673, 57134, 1173, 48761, 24440, 40797, 12633, 65501, 21857, 48123, 2942,
-40327, 24597, 61466, 12563, 38754, 21331, 55503, 691, 36503, 50028, 16849,
-27893, 62364, 7929, 46080, 27614, 15420, 53823, 34831, 4702, 59698, 28114,
-15208, 49322, 35003, 7925, 61809, 25569, 45780, 13648, 41809, 22927, 54033,
- 5066, 32810, 61125, 15652, 46015, 28156, 8261, 52433, 37032, 17794, 56374,
- 2512, 33997, 51301, 12389, 44162, 28940, 16460, 60707, 37158, 7351, 53134,
-24342, 48632, 11320, 38586, 21172, 64032, 110, 34392, 47706, 13686, 60711,
-24645, 39097, 3918, 54733, 18422, 46283, 32668, 8720, 57416, 25675, 42120,
-11332, 52890, 20818, 33887, 62110, 2877, 41970, 23632, 48739, 12132, 54609,
-20605, 34098, 45363, 8207, 60452, 24640, 39961, 63838, 13608, 47571, 21453,
-40792, 4504, 57268, 26162, 39386, 11638, 55444, 21675, 46723, 6025, 34636,
-61172, 17833, 41636, 9696, 57162, 26445, 39850, 4339, 51478, 30680, 16934,
-60746, 36052, 1032, 48178, 25671, 63744, 13188, 38390, 21078, 50592, 6651,
-34161, 61720, 18064, 45135, 1872, 35728, 59312, 15014, 30774, 52658, 10325,
-43891, 21173, 34312, 61107, 769, 47656, 18863, 34064, 55925, 9028, 45086,
-28535, 15719, 59072, 37919, 5298, 31737, 48364, 17488, 61295, 9082, 33838,
-45526, 20912, 57997, 4759, 38617, 27075, 52337, 9947, 33572, 59082, 17477,
-45420, 1088, 34709, 64139, 16178, 48238, 28125, 4206, 59441, 35207, 19518,
-51196, 113, 44215, 35303, 20995, 64597, 11451, 41799, 25914, 57235, 7739,
-41285, 22978, 51201, 14104, 33659, 56483, 3945, 43029, 25385, 59376, 9655,
-31636, 51983, 15807, 44764, 29397, 5966, 61705, 35546, 14926, 46051, 25734,
-57395, 7498, 31505, 44606, 18640, 53699, 2189, 34518, 63143, 15996, 46535,
-28795, 9009, 56493, 37329, 20952, 50590, 6519, 42459, 25751, 59599, 3450,
-33444, 47247, 14446, 54808, 23948, 39059, 5751, 64845, 21661, 44464, 14191,
-51687, 32881, 8455, 61685, 35612, 17320, 49211, 1067, 33283, 56529, 14594,
-42051, 24180, 65373, 3122, 34795, 50248, 15741, 29045, 59918, 8057, 41924,
-23674, 52473, 11697, 38496, 21677, 61229, 6410, 32163, 46505, 17540, 56725,
-11954, 38264, 27282, 47259, 5035, 63711, 18540, 32646, 46269, 9110, 50502,
-17566, 30906, 59203, 1197, 46640, 28512, 15732, 55413, 36568, 4285, 46767,
-24292, 59945, 13465, 38483, 22062, 55806, 6236, 37261, 49513, 14480, 30214,
-60993, 1274, 47570, 23481, 40247, 14572, 63270, 29289, 2568, 53917, 36393,
-21309, 51837, 8914, 47304, 19755, 32222, 65262, 5722, 45062, 19584, 32166,
-56291, 8864, 48036, 18674, 31852, 60461, 3123, 43038, 24428, 52695, 14628,
-31673, 62040, 375, 46974, 28855, 16069, 59630, 37016, 4218, 53676, 24637,
-43915, 12212, 33223, 58083, 19235, 49421, 3042, 32411, 45669, 18624, 64007,
-11327, 40907, 23365, 52248, 4019, 37116, 57006, 14534, 29477, 48345, 674,
-62753, 22605, 39022, 7543, 48504, 27280, 57743, 13847, 43481, 24296, 63118,
- 1214, 39394, 22533, 55559, 8004, 49314, 26063, 40743, 10819, 61659, 22543,
-38924, 135, 54117, 27086, 38348, 9772, 60605, 21132, 48798, 13069, 38388,
-27246, 52164, 1296, 36403, 65003, 15044, 30085, 50366, 11869, 42313, 24201,
-62137, 461, 40938, 21872, 52558, 13383, 31939, 55771, 4985, 47478, 28339,
-16652, 62689, 37570, 7545, 48397, 23842, 59360, 12041, 39067, 22934, 61177,
- 6271, 47753, 17951, 31293, 54364, 7967, 42254, 24270, 61731, 676, 39690,
-21973, 49108, 12540, 64857, 25887, 40209, 2963, 51518, 17664, 33450, 62819,
-11142, 48371, 24994, 38542, 3453, 52743, 28662, 16033, 61641, 36339, 6387,
-49474, 27992, 15529, 53017, 35990, 8067, 60477, 26453, 47652, 9891, 40979,
-23219, 53385, 4270, 34680, 62220, 16905, 44264, 28772, 5788, 53859, 37275,
-18294, 56785, 10447, 43242, 26683, 52003, 7478, 32463, 59596, 15504, 46708,
-28930, 6227, 54558, 38105, 14612, 32541, 56923, 3354, 41927, 23560, 63240,
-13181, 35865, 51193, 304, 42640, 23906, 55784, 11867, 38526, 21271, 65196,
- 2743, 36123, 50657, 12605, 29900, 57551, 20290, 44160, 419, 33912, 64219,
-21293, 42431, 11498, 58318, 23363, 40360, 6342, 48181, 24429, 64915, 1165,
-33942, 43922, 19152, 55537, 5258, 40469, 27127, 59056, 12538, 43489, 21439,
-52133, 6292, 32947, 58391, 19800, 41960, 11502, 48610, 22836, 65372, 2319,
-34406, 45055, 17467, 60800, 5200, 37471, 51623, 15519, 28498, 46898, 7776,
-61181, 25301, 38661, 3821, 56488, 17828, 30982, 50336, 9466, 34670, 14867,
-53804, 25584, 44917, 6863, 33306, 63290, 15633, 47803, 28883, 2183, 59447,
-37042, 16630, 49950, 28063, 3616, 52548, 36526, 20538, 62403, 11816, 42536,
-23005, 55760, 7749, 45984, 29000, 15348, 58984, 34934, 9030, 52218, 24572,
-42876, 4220, 57229, 22944, 39782, 13378, 55658, 26496, 38990, 7912, 51168,
-19059, 33047, 64580, 4683, 45122, 27897, 14715, 58367, 38162, 6174, 29856,
-53755, 20527, 48857, 2894, 33064, 63815, 18671, 43672, 11730, 53410, 21036,
-30358, 56071, 3762, 44061, 17405, 31397, 62118, 11752, 43271, 23809, 54596,
- 5612, 39740, 21827, 61492, 12818, 46616, 29036, 7665, 53129, 36938, 18022,
-57480, 11794, 42854, 26750, 62779, 8723, 33998, 53542, 18096, 47211, 5127,
-34971, 61113, 15754, 29499, 53826, 895, 45654, 28149, 16745, 61962, 38136,
- 7661, 29321, 48724, 18246, 63198, 2456, 39829, 25524, 55575, 12384, 43487,
-21997, 53141, 717, 33740, 64775, 14506, 47054, 33256, 9939, 58044, 24542,
-42675, 5363, 51067, 18447, 34512, 59187, 11, 45554, 17151, 34957, 63994,
-11712, 30373, 46164, 20488, 57784, 7309, 41163, 26713, 60573, 12042, 38302,
-21075, 50014, 2326, 30286, 57233, 16627, 44412, 27419, 4769, 63272, 37171,
-19710, 52466, 6495, 45604, 29801, 11866, 60989, 37202, 19333, 53325, 5534,
-33660, 46766, 13193, 64109, 25594, 41007, 1809, 54350, 22679, 45009, 9404,
-34238, 65295, 19162, 49356, 929, 42722, 26073, 59297, 13931, 35214, 53896,
- 3129, 42260, 22918, 62372, 11682, 41780, 25686, 53194, 7838, 40564, 22521,
-58086, 11858, 39289, 26961, 63445, 368, 47957, 17662, 34810, 52085, 7544,
-28896, 64370, 20224, 42714, 12909, 54938, 34625, 5407, 49697, 20550, 33723,
-58913, 10086, 44441, 17060, 35053, 61354, 107, 29466, 53591, 13141, 42294,
-24083, 59772, 3882, 34746, 53507, 14732, 44365, 27625, 9867, 63078, 37561,
-18561, 50387, 7280, 33492, 57413, 13028, 42480, 23917, 52368, 8936, 34107,
-64773, 19407, 46554, 1243, 34897, 61631, 16154, 44599, 28459, 7887, 59870,
-37581, 17154, 54001, 1534, 36210, 49398, 16713, 31503, 61239, 8288, 44550,
-27371, 16826, 59381, 36878, 11042, 52250, 24084, 42238, 2833, 54983, 21840,
-40588, 9543, 48240, 26770, 58835, 13584, 34170, 45982, 2669, 60510, 19578,
-33168, 51947, 6496, 43806, 25480, 59595, 13253, 41524, 23539, 50596, 3023,
-31651, 62569, 18513, 42286, 7606, 58492, 26079, 40631, 10635, 55193, 21775,
-39178, 5857, 60034, 31478, 15853, 49748, 37831, 3699, 63805, 23072, 44618,
-12235, 34445, 59805, 1492, 41563, 21760, 54411, 13081, 30694, 45453, 3248,
-57338, 29051, 15942, 50161, 35687, 2593, 64460, 23251, 46383, 14533, 32335,
-59336, 8899, 45480, 19145, 36040, 54273, 4219, 31362, 58719, 20412, 45498,
- 9366, 30584, 57035, 20277, 43953, 5669, 32584, 60706, 18772, 47381, 9627,
-32467, 56930, 18146, 45891, 840, 33617, 63889, 13856, 42016, 24170, 54911,
- 3335, 38331, 21821, 59622, 13889, 45564, 32046, 7529, 57711, 27538, 12258,
-50496, 36026, 20871, 62565, 1530, 34977, 49456, 16361, 29118, 63561, 3708,
-35037, 44792, 12263, 57919, 24304, 41357, 1934, 64155, 20337, 36145, 51787,
-10335, 29542, 48073, 20374, 61435, 6815, 31419, 46184, 18717, 58048, 4440,
-40639, 27023, 48628, 10931, 54767, 25174, 39763, 6173, 60429, 17754, 47747,
-29471, 9199, 54830, 35710, 18192, 48624, 3038, 62149, 27248, 38456, 10527,
-52333, 17890, 32084, 57924, 8745, 47155, 28996, 16213, 63461, 35883, 2837,
-50802, 24968, 41499, 10337, 55632, 23543, 39719, 1392, 62320, 28924, 15848,
-51034, 36236, 8053, 56555, 25029, 47926, 12378, 39860, 22481, 59340, 753,
-34396, 54180, 18156, 44498, 10781, 32711, 64752, 15152, 47351, 28049, 1123,
-58601, 36533, 21147, 38804, 3048, 48697, 27017, 55686, 9144, 40362, 24540,
-60838, 12393, 39668, 22360, 53727, 7555, 31206, 64267, 15108, 45677, 29151,
- 377, 58292, 35420, 18658, 50370, 5150, 34522, 64883, 20548, 42206, 2714,
-54623, 27052, 39392, 9956, 62396, 18902, 35079, 49633, 93, 29473, 63178,
-12645, 42544, 23597, 56799, 2637, 36660, 50211, 16084, 30160, 61615, 8543,
-48207, 24460, 40477, 11714, 62763, 25920, 39720, 7610, 56595, 20121, 34188,
-50925, 336, 42207, 24769, 60990, 10498, 34402, 52966, 20494, 46541, 1627,
-34559, 64854, 14324, 41318, 26298, 57513, 3383, 32811, 51065, 14186, 41797,
-23995, 60749, 1541, 40980, 22792, 50236, 6816, 30058, 56451, 14599, 45223,
-27695, 2207, 59152, 37799, 20774, 50186, 9170, 34013, 65507, 12912, 43735,
-22140, 51681, 4963, 34882, 58920, 20034, 45106, 10677, 34210, 57567, 21145,
-48963, 4453, 38719, 26922, 60567, 11151, 29460, 51025, 20288, 41648, 3537,
-62357, 26393, 39236, 12426, 55922, 22533, 47712, 7239, 32110, 60981, 19412,
-43452, 9337, 54986, 27121, 39816, 4548, 51231, 17234, 32639, 53670, 1511,
-43688, 24375, 63403, 10476, 41266, 22457, 52494, 7669, 37646, 58729, 14775,
-29621, 50245, 9238, 41807, 24981, 59571, 15280, 35937, 49555, 1506, 28577,
-55867, 14798, 42327, 22506, 58751, 3447, 37098, 50369, 15880, 30195, 62204,
- 7522, 48540, 24472, 38794, 13070, 58198, 24106, 38536, 4834, 51233, 19024,
-30813, 61332, 8796, 45671, 28545, 15000, 56278, 37989, 5494, 32199, 64484,
-19962, 47791, 2643, 32978, 54066, 20789, 42607, 8595, 56418, 25438, 40745,
-11258, 58140, 22660, 46934, 3906, 31640, 60315, 9919, 41129, 25282, 56006,
-13903, 37134, 50791, 3029, 30244, 64039, 18639, 46614, 7461, 36903, 57065,
-15664, 31327, 50620, 6296, 45945, 28018, 16538, 64256, 37322, 1615, 49803,
-20557, 30947, 56140, 4712, 44535, 28161, 16415, 63833, 37934, 2368, 29931,
-47941, 17400, 56691, 6952, 31331, 44850, 15042, 53066, 27580, 5695, 56096,
-36426, 19760, 47162, 9694, 57876, 21032, 30185, 44901, 5355, 65495, 28426,
-15349, 51508, 38077, 2168, 32423, 55481, 20658, 43781, 6022, 63878, 26836,
-39364, 12381, 56662, 18353, 35502, 51461, 4344, 31281, 64369, 18226, 44101,
- 9752, 31264, 54542, 13300, 41985, 23749, 63607, 3863, 39880, 21501, 57473,
- 9295, 33153, 53807, 14485, 43557, 25335, 51380, 5009, 33048, 63676, 17559,
-46669, 2076, 36868, 53062, 14445, 28603, 58013, 7909, 46500, 27407, 16603,
-53172, 35415, 8868, 57927, 25039, 46519, 14555, 32772, 65498, 6014, 43634,
-24419, 51401, 14371, 34763, 62381, 8417, 42538, 24373, 55039, 11926, 40163,
-21608, 57837, 3691, 38976, 26656, 53122, 11343, 29915, 63054, 17714, 44013,
- 7670, 34447, 49393, 17140, 63612, 1737, 34644, 45012, 14046, 54416, 26486,
-39184, 2707, 64499, 24499, 43445, 10777, 52442, 20813, 29992, 57777, 7075,
-44856, 35304, 17622, 62856, 10951, 42754, 26270, 52169, 124, 33986, 64246,
-16118, 46591, 28379, 3886, 55418, 38168, 15049, 29743, 58857, 8369, 46076,
-27433, 13196, 55822, 37686, 20300, 51378, 5179, 31608, 60709, 18496, 46389,
- 8204, 31554, 55692, 17383, 44476, 3836, 34521, 59011, 14006, 40960, 25728,
-51897, 8667, 33313, 59451, 17747, 45512, 1277, 32319, 62768, 13922, 42493,
-23608, 53093, 3933, 36821, 61652, 14607, 28472, 46285, 7514, 57509, 22702,
-41087, 12171, 47409, 25290, 56187, 2058, 39516, 22299, 60450, 6797, 42834,
-26224, 53585, 11695, 31848, 61585, 18003, 46854, 4846, 34695, 59600, 20765,
-48832, 11905, 41352, 25945, 54283, 3012, 30931, 63447, 17052, 42699, 6546,
-51207, 29005, 15085, 62267, 38187, 8459, 29890, 49107, 19978, 55836, 5380,
-40942, 23843, 45646, 11238, 61934, 47799, 12689, 41146, 21867, 65439, 5015,
-34241, 52475, 17940, 45052, 1323, 33460, 58525, 13668, 43146, 25437, 50512,
- 5791, 34134, 61402, 17577, 47526, 12690, 41661, 26802, 53160, 6904, 32041,
-57273, 12822, 47005, 28981, 16093, 59566, 36372, 4741, 51056, 25199, 43563,
-11567, 60261, 17388, 34330, 53697, 7346, 47990, 26171, 39472, 10858, 59534,
-20156, 33508, 54365, 1260, 44576, 19251, 35711, 51996, 4513, 31189, 58814,
-15090, 46863, 27903, 8572, 64378, 36885, 17177, 54111, 6086, 37877, 49378,
-15283, 30103, 58574, 6843, 42549, 22945, 52058, 10304, 34659, 55531, 18752,
-43034, 5921, 64002, 29416, 16617, 53600, 37941, 10074, 31892, 63260, 18737,
-43137, 3754, 52286, 29775, 16246, 62453, 36555, 7154, 49362, 27495, 15464,
-55887, 37994, 3413, 30514, 60066, 14633, 41918, 25130, 54823, 268, 31236,
-47553, 17334, 64281, 8916, 40996, 19422, 56206, 35027, 5771, 49439, 17330,
-37903, 59016, 8355, 29941, 54155, 18124, 44697, 1834, 33602, 63668, 14114,
-40563, 26526, 54163, 3028, 38782, 23139, 62787, 12798, 43320, 24698, 55942,
- 7535, 39915, 21949, 59909, 13446, 39601, 26910, 56671, 5241, 29752, 47190,
-18875, 64596, 180, 34477, 46089, 18761, 53666, 3732, 32424, 62907, 12614,
-43045, 23320, 51942, 8538, 35408, 63895, 11329, 29174, 45481, 20460, 57061,
- 5958, 34000, 44767, 19496, 59398, 2697, 41473, 26858, 55004, 11683, 40939,
-22132, 63131, 6868, 33157, 53108, 16329, 43913, 27561, 1671, 54270, 36055,
-16706, 60242, 27309, 9732, 49987, 37608, 17962, 61577, 5838, 44771, 30606,
-15824, 62978, 35651, 2272, 51273, 26111, 40556, 12297, 53776, 18517, 36889,
-61985, 980, 28567, 47833, 20094, 59532, 8423, 40425, 25659, 54424, 12734,
-40343, 24867, 60229, 3626, 39636, 22380, 52592, 12650, 32330, 57954, 8210,
-43059, 22724, 60297, 10920, 33669, 52861, 18158, 48356, 6414, 41223, 23312,
-60753, 11982, 48984, 26024, 41170, 9345, 62580, 19879, 36602, 50271, 2939,
-30507, 63508, 12831, 41378, 24452, 51865, 68, 33440, 62093, 13592, 42356,
-23109, 53105, 8550, 34342, 56811, 18502, 43290, 5628, 60867, 29106, 15265,
-53537, 35113, 8698, 47397, 23456, 61448, 367, 30072, 44875, 15567, 57341,
-27809, 7172, 49900, 36807, 20523, 61422, 1601, 46195, 29902, 16455, 55847,
-37958, 7618, 30115, 48058, 19112, 65408, 855, 40119, 24009, 54580, 8362,
-39481, 22440, 57666, 12644, 43540, 25964, 51083, 4472, 32658, 63061, 15422,
-44873, 29435, 1092, 61053, 37375, 19567, 51775, 5272, 42477, 22578, 55497,
-10496, 38370, 27272, 60665, 4020, 41972, 20296, 54009, 32182, 95, 49376,
-17376, 34688, 61596, 7115, 43630, 25279, 50589, 13766, 34543, 59787, 1194,
-46812, 20926, 37785, 56416, 6201, 29634, 46500, 20756, 59171, 11029, 40029,
-24365, 48023, 7374, 55705, 21781, 40986, 12640, 59947, 26688, 39021, 4044,
-50500, 19289, 32135, 61223, 1930, 46784, 20541, 31395, 56802, 6135, 49102,
-17960, 30275, 44605, 8461, 60542, 22972, 39691, 11972, 52269, 26081, 43763,
- 5678, 61117, 19555, 37052, 50468, 522, 30588, 64675, 17448, 44059, 10346,
-34488, 49422, 21035, 57364, 1016, 39454, 26930, 48495, 11647, 65040, 18188,
-32267, 44305, 2419, 54853, 22625, 39356, 10607, 64414, 29099, 15818, 50968,
-36966, 6914, 45271, 24539, 58094, 9822, 40326, 19441, 51553, 31815, 926,
-64644, 37186, 17485, 50654, 4850, 34652, 62857, 15725, 45586, 29400, 9154,
-51563, 35427, 18079, 64255, 671, 44211, 35087, 14153, 49139, 25585, 57414,
- 8341, 31022, 45257, 17394, 64613, 5810, 34614, 46945, 20666, 58981, 9486,
-34114, 45590, 21493, 53916, 3518, 33540, 57889, 16657, 45181, 27491, 1942,
-63169, 36469, 15603, 51896, 31165, 7372, 58087, 24664
diff --git a/src/main/sequence.c b/src/main/sequence.c
new file mode 100644
index 0000000..f51a6ed
--- /dev/null
+++ b/src/main/sequence.c
@@ -0,0 +1,533 @@
+/*
+ * "$Id: sequence.c,v 1.21 2005/06/30 02:11:49 rlk Exp $"
+ *
+ * Sequence data type. This type is designed to be derived from by
+ * the curve and dither matrix types.
+ *
+ * Copyright 2002-2003 Robert Krawitz (rlk@alum.mit.edu)
+ * Copyright 2003 Roger Leigh (rleigh@debian.org)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include <gutenprint/sequence.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <math.h>
+#ifdef sun
+#include <ieeefp.h>
+#endif
+#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <errno.h>
+#include <ctype.h>
+
+struct stp_sequence
+{
+ int recompute_range; /* Do we need to recompute the min and max? */
+ double blo; /* Lower bound */
+ double bhi; /* Upper bound */
+ double rlo; /* Lower range limit */
+ double rhi; /* Upper range limit */
+ size_t size; /* Number of points */
+ double *data; /* Array of doubles */
+ float *float_data; /* Data converted to other form */
+ long *long_data;
+ unsigned long *ulong_data;
+ int *int_data;
+ unsigned *uint_data;
+ short *short_data;
+ unsigned short *ushort_data;
+};
+
+/*
+ * We could do more sanity checks here if we want.
+ */
+static inline void
+check_sequence(const stp_sequence_t *v)
+{
+ if (v == NULL)
+ {
+ stp_erprintf("Null stp_sequence_t! Please report this bug.\n");
+ stp_abort();
+ }
+}
+
+static stp_sequence_t *
+deconst_sequence(const stp_sequence_t *sequence)
+{
+ return (stp_sequence_t *) sequence;
+}
+
+static void
+sequence_ctor(stp_sequence_t *sequence)
+{
+ sequence->rlo = sequence->blo = 0.0;
+ sequence->rhi = sequence->bhi = 1.0;
+ sequence->recompute_range = 1;
+ sequence->size = 0;
+ sequence->data = NULL;
+}
+
+stp_sequence_t *
+stp_sequence_create(void)
+{
+ stp_sequence_t *ret;
+ ret = stp_zalloc(sizeof(stp_sequence_t));
+ sequence_ctor(ret);
+ return ret;
+}
+
+static void
+invalidate_auxilliary_data(stp_sequence_t *sequence)
+{
+ STP_SAFE_FREE(sequence->float_data);
+ STP_SAFE_FREE(sequence->long_data);
+ STP_SAFE_FREE(sequence->ulong_data);
+ STP_SAFE_FREE(sequence->int_data);
+ STP_SAFE_FREE(sequence->uint_data);
+ STP_SAFE_FREE(sequence->short_data);
+ STP_SAFE_FREE(sequence->ushort_data);
+}
+
+static void
+sequence_dtor(stp_sequence_t *sequence)
+{
+ invalidate_auxilliary_data(sequence);
+ if (sequence->data)
+ stp_free(sequence->data);
+ memset(sequence, 0, sizeof(stp_sequence_t));
+}
+
+void
+stp_sequence_destroy(stp_sequence_t *sequence)
+{
+ check_sequence(sequence);
+ sequence_dtor(sequence);
+ stp_free(sequence);
+}
+
+void
+stp_sequence_copy(stp_sequence_t *dest, const stp_sequence_t *source)
+{
+ check_sequence(dest);
+ check_sequence(source);
+
+ dest->recompute_range = source->recompute_range;
+ dest->blo = source->blo;
+ dest->bhi = source->bhi;
+ dest->rlo = source->rlo;
+ dest->rhi = source->rhi;
+ dest->size = source->size;
+ dest->data = stp_zalloc(sizeof(double) * source->size);
+ memcpy(dest->data, source->data, (sizeof(double) * source->size));
+}
+
+stp_sequence_t *
+stp_sequence_create_copy(const stp_sequence_t *sequence)
+{
+ stp_sequence_t *ret;
+ check_sequence(sequence);
+ ret = stp_sequence_create();
+ stp_sequence_copy(ret, sequence);
+ return ret;
+}
+
+int
+stp_sequence_set_bounds(stp_sequence_t *sequence, double low, double high)
+{
+ check_sequence(sequence);
+ if (low > high)
+ return 0;
+ sequence->rlo = sequence->blo = low;
+ sequence->rhi = sequence->bhi = high;
+ sequence->recompute_range = 1;
+ return 1;
+}
+
+void
+stp_sequence_get_bounds(const stp_sequence_t *sequence,
+ double *low, double *high)
+{
+ check_sequence(sequence);
+ *low = sequence->blo;
+ *high = sequence->bhi;
+}
+
+
+/*
+ * Find the minimum and maximum points on the curve.
+ */
+static void
+scan_sequence_range(stp_sequence_t *sequence)
+{
+ int i;
+ sequence->rlo = sequence->bhi;
+ sequence->rhi = sequence->blo;
+ if (sequence->size)
+ for (i = 0; i < sequence->size; i++)
+ {
+ if (sequence->data[i] < sequence->rlo)
+ sequence->rlo = sequence->data[i];
+ if (sequence->data[i] > sequence->rhi)
+ sequence->rhi = sequence->data[i];
+ }
+ sequence->recompute_range = 0; /* Don't recompute unless the data changes */
+}
+
+void
+stp_sequence_get_range(const stp_sequence_t *sequence,
+ double *low, double *high)
+{
+ if (sequence->recompute_range) /* Don't recompute the range if we don't
+ need to. */
+ scan_sequence_range(deconst_sequence(sequence));
+ *low = sequence->rlo;
+ *high = sequence->rhi;
+}
+
+
+int
+stp_sequence_set_size(stp_sequence_t *sequence, size_t size)
+{
+ check_sequence(sequence);
+ if (sequence->data) /* Free old data */
+ {
+ stp_free(sequence->data);
+ sequence->data = NULL;
+ }
+ sequence->size = size;
+ sequence->recompute_range = 1; /* Always recompute on change */
+ if (size == 0)
+ return 1;
+ invalidate_auxilliary_data(sequence);
+ sequence->data = stp_zalloc(sizeof(double) * size);
+ return 1;
+}
+
+
+size_t
+stp_sequence_get_size(const stp_sequence_t *sequence)
+{
+ check_sequence(sequence);
+ return sequence->size;
+}
+
+
+
+int
+stp_sequence_set_data(stp_sequence_t *sequence,
+ size_t size, const double *data)
+{
+ check_sequence(sequence);
+ sequence->size = size;
+ if (sequence->data)
+ stp_free(sequence->data);
+ sequence->data = stp_zalloc(sizeof(double) * size);
+ memcpy(sequence->data, data, (sizeof(double) * size));
+ invalidate_auxilliary_data(sequence);
+ sequence->recompute_range = 1;
+ return 1;
+}
+
+int
+stp_sequence_set_subrange(stp_sequence_t *sequence, size_t where,
+ size_t size, const double *data)
+{
+ check_sequence(sequence);
+ if (where + size > sequence->size) /* Exceeds data size */
+ return 0;
+ memcpy(sequence->data+where, data, (sizeof(double) * size));
+ invalidate_auxilliary_data(sequence);
+ sequence->recompute_range = 1;
+ return 1;
+}
+
+
+void
+stp_sequence_get_data(const stp_sequence_t *sequence, size_t *size,
+ const double **data)
+{
+ check_sequence(sequence);
+ *size = sequence->size;
+ *data = sequence->data;
+}
+
+
+int
+stp_sequence_set_point(stp_sequence_t *sequence, size_t where,
+ double data)
+{
+ check_sequence(sequence);
+
+ if (where >= sequence->size || ! finite(data) ||
+ data < sequence->blo || data > sequence->bhi)
+ return 0;
+
+ if (sequence->recompute_range == 0 && (data < sequence->rlo ||
+ data > sequence->rhi ||
+ sequence->data[where] == sequence->rhi ||
+ sequence->data[where] == sequence->rlo))
+ sequence->recompute_range = 1;
+
+ sequence->data[where] = data;
+ invalidate_auxilliary_data(sequence);
+ return 1;
+}
+
+int
+stp_sequence_get_point(const stp_sequence_t *sequence, size_t where,
+ double *data)
+{
+ check_sequence(sequence);
+
+ if (where >= sequence->size)
+ return 0;
+ *data = sequence->data[where];
+ return 1;
+}
+
+stp_sequence_t *
+stp_sequence_create_from_xmltree(stp_mxml_node_t *da)
+{
+ const char *stmp;
+ stp_sequence_t *ret = NULL;
+ size_t point_count;
+ double low, high;
+ int i;
+
+ ret = stp_sequence_create();
+
+ /* Get curve point count */
+ stmp = stp_mxmlElementGetAttr(da, "count");
+ if (stmp)
+ {
+ point_count = (size_t) stp_xmlstrtoul(stmp);
+ if ((stp_xmlstrtol(stmp)) < 0)
+ {
+ stp_erprintf("stp_sequence_create_from_xmltree: \"count\" is less than zero\n");
+ goto error;
+ }
+ }
+ else
+ {
+ stp_erprintf("stp_sequence_create_from_xmltree: \"count\" missing\n");
+ goto error;
+ }
+ /* Get lower bound */
+ stmp = stp_mxmlElementGetAttr(da, "lower-bound");
+ if (stmp)
+ {
+ low = stp_xmlstrtod(stmp);
+ }
+ else
+ {
+ stp_erprintf("stp_sequence_create_from_xmltree: \"lower-bound\" missing\n");
+ goto error;
+ }
+ /* Get upper bound */
+ stmp = stp_mxmlElementGetAttr(da, "upper-bound");
+ if (stmp)
+ {
+ high = stp_xmlstrtod(stmp);
+ }
+ else
+ {
+ stp_erprintf("stp_sequence_create_from_xmltree: \"upper-bound\" missing\n");
+ goto error;
+ }
+
+ stp_deprintf(STP_DBG_XML,
+ "stp_sequence_create_from_xmltree: stp_sequence_set_size: %d\n",
+ point_count);
+ stp_sequence_set_size(ret, point_count);
+ stp_sequence_set_bounds(ret, low, high);
+
+ /* Now read in the data points */
+ if (point_count)
+ {
+ stp_mxml_node_t *child = da->child;
+ i = 0;
+ while (child && i < point_count)
+ {
+ if (child->type == STP_MXML_TEXT)
+ {
+ char *endptr;
+ double tmpval = strtod(child->value.text.string, &endptr);
+ if (endptr == child->value.text.string)
+ {
+ stp_erprintf
+ ("stp_sequence_create_from_xmltree: bad data %s\n",
+ child->value.text.string);
+ goto error;
+ }
+ if (! finite(tmpval)
+ || ( tmpval == 0 && errno == ERANGE )
+ || tmpval < low
+ || tmpval > high)
+ {
+ stp_erprintf("stp_sequence_create_from_xmltree: "
+ "read aborted: datum out of bounds: "
+ "%g (require %g <= x <= %g), n = %d\n",
+ tmpval, low, high, i);
+ goto error;
+ }
+ /* Datum was valid, so now add to the sequence */
+ stp_sequence_set_point(ret, i, tmpval);
+ i++;
+ child = child->next;
+ }
+ }
+ if (i < point_count)
+ {
+ stp_erprintf("stp_sequence_create_from_xmltree: "
+ "read aborted: too little data "
+ "(n=%d, needed %d)\n", i, point_count);
+ goto error;
+ }
+ }
+
+ return ret;
+
+ error:
+ stp_erprintf("stp_sequence_create_from_xmltree: error during sequence read\n");
+ if (ret)
+ stp_sequence_destroy(ret);
+ return NULL;
+}
+
+stp_mxml_node_t *
+stp_xmltree_create_from_sequence(const stp_sequence_t *seq) /* The sequence */
+{
+ size_t pointcount;
+ double low;
+ double high;
+
+ char *count;
+ char *lower_bound;
+ char *upper_bound;
+
+ stp_mxml_node_t *seqnode;
+
+ int i; /* loop counter */
+
+ pointcount = stp_sequence_get_size(seq);
+ stp_sequence_get_bounds(seq, &low, &high);
+
+ /* should count be of greater precision? */
+ stp_asprintf(&count, "%lu", (unsigned long) pointcount);
+ stp_asprintf(&lower_bound, "%g", low);
+ stp_asprintf(&upper_bound, "%g", high);
+
+ seqnode = stp_mxmlNewElement(NULL, "sequence");
+ (void) stp_mxmlElementSetAttr(seqnode, "count", count);
+ (void) stp_mxmlElementSetAttr(seqnode, "lower-bound", lower_bound);
+ (void) stp_mxmlElementSetAttr(seqnode, "upper-bound", upper_bound);
+
+ stp_free(count);
+ stp_free(lower_bound);
+ stp_free(upper_bound);
+
+ /* Write the curve points into the node content */
+ if (pointcount) /* Is there any data to write? */
+ {
+ for (i = 0; i < pointcount; i++)
+ {
+ double dval;
+ char *sval;
+
+ if ((stp_sequence_get_point(seq, i, &dval)) != 1)
+ goto error;
+
+ stp_asprintf(&sval, "%g", dval);
+ stp_mxmlNewText(seqnode, 1, sval);
+ stp_free(sval);
+ }
+ }
+ return seqnode;
+
+ error:
+ if (seqnode)
+ stp_mxmlDelete(seqnode);
+ return NULL;
+}
+
+
+/* "Overloaded" functions */
+
+#define DEFINE_DATA_SETTER(t, name) \
+int \
+stp_sequence_set_##name##_data(stp_sequence_t *sequence, \
+ size_t count, const t *data) \
+{ \
+ int i; \
+ check_sequence(sequence); \
+ if (count < 2) \
+ return 0; \
+ \
+ /* Validate the data before we commit to it. */ \
+ for (i = 0; i < count; i++) \
+ if (! finite(data[i]) || \
+ data[i] < sequence->blo || \
+ data[i] > sequence->bhi) \
+ return 0; \
+ stp_sequence_set_size(sequence, count); \
+ for (i = 0; i < count; i++) \
+ stp_sequence_set_point(sequence, i, (double) data[i]); \
+ return 1; \
+}
+
+DEFINE_DATA_SETTER(float, float)
+DEFINE_DATA_SETTER(long, long)
+DEFINE_DATA_SETTER(unsigned long, ulong)
+DEFINE_DATA_SETTER(int, int)
+DEFINE_DATA_SETTER(unsigned int, uint)
+DEFINE_DATA_SETTER(short, short)
+DEFINE_DATA_SETTER(unsigned short, ushort)
+
+#define DEFINE_DATA_ACCESSOR(t, lb, ub, name) \
+const t * \
+stp_sequence_get_##name##_data(const stp_sequence_t *sequence, size_t *count) \
+{ \
+ int i; \
+ if (sequence->blo < (double) lb || sequence->bhi > (double) ub) \
+ return NULL; \
+ if (!sequence->name##_data) \
+ { \
+ stp_sequence_t *seq = deconst_sequence(sequence); \
+ seq->name##_data = stp_zalloc(sizeof(t) * sequence->size); \
+ for (i = 0; i < sequence->size; i++) \
+ seq->name##_data[i] = (t) sequence->data[i]; \
+ } \
+ *count = sequence->size; \
+ return sequence->name##_data; \
+}
+
+#ifndef HUGE_VALF /* ISO constant, from <math.h> */
+#define HUGE_VALF 3.402823466E+38F
+#endif
+
+DEFINE_DATA_ACCESSOR(float, -HUGE_VALF, HUGE_VALF, float)
+DEFINE_DATA_ACCESSOR(long, LONG_MIN, LONG_MAX, long)
+DEFINE_DATA_ACCESSOR(unsigned long, 0, ULONG_MAX, ulong)
+DEFINE_DATA_ACCESSOR(int, INT_MIN, INT_MAX, int)
+DEFINE_DATA_ACCESSOR(unsigned int, 0, UINT_MAX, uint)
+DEFINE_DATA_ACCESSOR(short, SHRT_MIN, SHRT_MAX, short)
+DEFINE_DATA_ACCESSOR(unsigned short, 0, USHRT_MAX, ushort)
diff --git a/src/main/string-list.c b/src/main/string-list.c
new file mode 100644
index 0000000..8d7ac3c
--- /dev/null
+++ b/src/main/string-list.c
@@ -0,0 +1,157 @@
+/*
+ * "$Id: string-list.c,v 1.19 2005/06/15 01:13:41 rlk Exp $"
+ *
+ * Print plug-in driver utility functions for the GIMP.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <string.h>
+
+static void
+free_list_element(void *item)
+{
+ stp_param_string_t *string = (stp_param_string_t *) (item);
+ stp_free((char *) string->name);
+ stp_free((char *) string->text);
+ stp_free(string);
+}
+
+static const char *
+namefunc(const void *item)
+{
+ const stp_param_string_t *string = (const stp_param_string_t *) (item);
+ return string->name;
+}
+
+static void *
+copyfunc(const void *item)
+{
+ const stp_param_string_t *string = (const stp_param_string_t *) (item);
+ stp_param_string_t *new_string = stp_malloc(sizeof(stp_param_string_t));
+ new_string->name = stp_strdup(string->name);
+ new_string->text = stp_strdup(string->text);
+ return new_string;
+}
+
+static const char *
+long_namefunc(const void *item)
+{
+ const stp_param_string_t *string = (const stp_param_string_t *) (item);
+ return string->text;
+}
+
+stp_string_list_t *
+stp_string_list_create(void)
+{
+ stp_list_t *ret = stp_list_create();
+ stp_list_set_freefunc(ret, free_list_element);
+ stp_list_set_namefunc(ret, namefunc);
+ stp_list_set_copyfunc(ret, copyfunc);
+ stp_list_set_long_namefunc(ret, long_namefunc);
+ return (stp_string_list_t *) ret;
+}
+
+void
+stp_string_list_destroy(stp_string_list_t *list)
+{
+ stp_list_destroy((stp_list_t *) list);
+}
+
+stp_param_string_t *
+stp_string_list_param(const stp_string_list_t *list, size_t element)
+{
+ stp_list_item_t *answer =
+ stp_list_get_item_by_index((const stp_list_t *)list, element);
+ if (answer)
+ return (stp_param_string_t *) stp_list_item_get_data(answer);
+ else
+ return NULL;
+}
+
+stp_param_string_t *
+stp_string_list_find(const stp_string_list_t *list, const char *name)
+{
+ stp_list_item_t *answer =
+ stp_list_get_item_by_name((const stp_list_t *)list, name);
+ if (answer)
+ return (stp_param_string_t *) stp_list_item_get_data(answer);
+ else
+ return NULL;
+}
+
+size_t
+stp_string_list_count(const stp_string_list_t *list)
+{
+ return stp_list_get_length((const stp_list_t *)list);
+}
+
+stp_string_list_t *
+stp_string_list_create_copy(const stp_string_list_t *list)
+{
+ return (stp_string_list_t *) stp_list_copy((const stp_list_t *)list);
+}
+
+stp_string_list_t *
+stp_string_list_create_from_params(const stp_param_string_t *list,
+ size_t count)
+{
+ size_t i = 0;
+ stp_string_list_t *retval = stp_string_list_create();
+ for (i = 0; i < count; i++)
+ stp_string_list_add_string(retval, list[i].name, list[i].text);
+ return retval;
+}
+
+void
+stp_string_list_add_string(stp_string_list_t *list,
+ const char *name,
+ const char *text)
+{
+ stp_param_string_t *new_string = stp_malloc(sizeof(stp_param_string_t));
+ new_string->name = stp_strdup(name);
+ new_string->text = stp_strdup(text);
+ stp_list_item_create((stp_list_t *) list, NULL, new_string);
+}
+
+void
+stp_string_list_remove_string(stp_string_list_t *list,
+ const char *name)
+{
+ stp_list_item_t *item =
+ stp_list_get_item_by_name((const stp_list_t *) list, name);
+ if (item)
+ stp_list_item_destroy((stp_list_t *) list, item);
+}
+
+int
+stp_string_list_is_present(const stp_string_list_t *list,
+ const char *value)
+{
+ if (list && value &&
+ stp_list_get_item_by_name((const stp_list_t *) list, value))
+ return 1;
+ else
+ return 0;
+}
diff --git a/src/main/util.h b/src/main/util.h
new file mode 100644
index 0000000..5b3e01b
--- /dev/null
+++ b/src/main/util.h
@@ -0,0 +1,77 @@
+/*
+ * "$Id: util.h,v 1.32 2004/09/17 18:38:27 rleigh Exp $"
+ *
+ * Gutenprint header.
+ *
+ * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
+ * Robert Krawitz (rlk@alum.mit.edu)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Revision History:
+ *
+ * See ChangeLog
+ */
+
+/**
+ * @file src/main/util.h
+ * @brief Utility functions (internal).
+ */
+
+/*
+ * This file must include only standard C header files. The core code must
+ * compile on generic platforms that don't support glib, gimp, gtk, etc.
+ */
+
+#ifndef GUTENPRINT_INTERNAL_UTIL_H
+#define GUTENPRINT_INTERNAL_UTIL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef __GNUC__
+#ifndef __attribute__
+#define __attribute__(ignore)
+#endif
+#endif
+
+/**
+ * Utility functions (internal).
+ *
+ * @defgroup util_internal util-internal
+ * @{
+ */
+
+
+/*
+ * FIXME Need somewhere else to put these initialization routines
+ * which users shouldn't call.
+ */
+
+extern void stpi_init_paper(void);
+extern void stpi_init_dither(void);
+extern void stpi_init_printer(void);
+
+/** @} */
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* GUTENPRINT_INTERNAL_UTIL_H */
+/*
+ * End of "$Id: util.h,v 1.32 2004/09/17 18:38:27 rleigh Exp $".
+ */
diff --git a/src/main/xml.c b/src/main/xml.c
new file mode 100644
index 0000000..ac64537
--- /dev/null
+++ b/src/main/xml.c
@@ -0,0 +1,429 @@
+/*
+ * "$Id: xml.c,v 1.33 2004/09/17 18:38:27 rleigh Exp $"
+ *
+ * XML parser - process Gutenprint XML data with mxml.
+ *
+ * Copyright 2002-2003 Roger Leigh (rleigh@debian.org)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <gutenprint/gutenprint.h>
+#include "gutenprint-internal.h"
+#include <gutenprint/gutenprint-intl-internal.h>
+#include <assert.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <errno.h>
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#if defined(HAVE_VARARGS_H) && !defined(HAVE_STDARG_H)
+#include <varargs.h>
+#else
+#include <stdarg.h>
+#endif
+
+typedef struct
+{
+ char *name;
+ stp_xml_parse_func parse_func;
+} stpi_xml_parse_registry;
+
+static stp_list_t *stpi_xml_registry;
+
+static stp_list_t *stpi_xml_preloads;
+
+static const char *
+xml_registry_namefunc(const void *item)
+{
+ const stpi_xml_parse_registry *xmlp = (const stpi_xml_parse_registry *) item;
+ return xmlp->name;
+}
+
+static void
+xml_registry_freefunc(void *item)
+{
+ stpi_xml_parse_registry *xmlp = (stpi_xml_parse_registry *) item;
+ stp_free(xmlp->name);
+ stp_free(xmlp);
+}
+
+static const char *
+xml_preload_namefunc(const void *item)
+{
+ return (const char *) item;
+}
+
+static void
+xml_preload_freefunc(void *item)
+{
+ stp_free(item);
+}
+
+void
+stp_register_xml_parser(const char *name, stp_xml_parse_func parse_func)
+{
+ stpi_xml_parse_registry *xmlp;
+ stp_list_item_t *item = stp_list_get_item_by_name(stpi_xml_registry, name);
+ if (item)
+ xmlp = (stpi_xml_parse_registry *) stp_list_item_get_data(item);
+ else
+ {
+ xmlp = stp_malloc(sizeof(stpi_xml_parse_registry));
+ xmlp->name = stp_strdup(name);
+ stp_list_item_create(stpi_xml_registry, NULL, xmlp);
+ }
+ xmlp->parse_func = parse_func;
+}
+
+void
+stp_unregister_xml_parser(const char *name)
+{
+ stp_list_item_t *item = stp_list_get_item_by_name(stpi_xml_registry, name);
+ if (item)
+ stp_list_item_destroy(stpi_xml_registry, item);
+}
+
+void
+stp_register_xml_preload(const char *filename)
+{
+ stp_list_item_t *item = stp_list_get_item_by_name(stpi_xml_preloads, filename);
+ if (!item)
+ {
+ char *the_filename = stp_strdup(filename);
+ stp_list_item_create(stpi_xml_preloads, NULL, the_filename);
+ }
+}
+
+void
+stp_unregister_xml_preload(const char *name)
+{
+ stp_list_item_t *item = stp_list_get_item_by_name(stpi_xml_preloads, name);
+ if (item)
+ stp_list_item_destroy(stpi_xml_preloads, item);
+}
+
+
+static void stpi_xml_process_gutenprint(stp_mxml_node_t *gutenprint, const char *file);
+
+static char *saved_lc_collate; /* Saved LC_COLLATE */
+static char *saved_lc_ctype; /* Saved LC_CTYPE */
+static char *saved_lc_numeric; /* Saved LC_NUMERIC */
+static int xml_is_initialised; /* Flag for init */
+
+void
+stp_xml_preinit(void)
+{
+ static int xml_is_preinitialized = 0;
+ if (!xml_is_preinitialized)
+ {
+ stpi_xml_registry = stp_list_create();
+ stp_list_set_freefunc(stpi_xml_registry, xml_registry_freefunc);
+ stp_list_set_namefunc(stpi_xml_registry, xml_registry_namefunc);
+ stpi_xml_preloads = stp_list_create();
+ stp_list_set_freefunc(stpi_xml_preloads, xml_preload_freefunc);
+ stp_list_set_namefunc(stpi_xml_preloads, xml_preload_namefunc);
+ }
+}
+
+/*
+ * Call before using any of the static functions in this file. All
+ * public functions should call this before using any mxml
+ * functions.
+ */
+void
+stp_xml_init(void)
+{
+ if (xml_is_initialised >= 1)
+ {
+ xml_is_initialised++;
+ return;
+ }
+
+ /* Set some locale facets to "C" */
+ saved_lc_collate = setlocale(LC_COLLATE, "C");
+ saved_lc_ctype = setlocale(LC_CTYPE, "C");
+ saved_lc_numeric = setlocale(LC_NUMERIC, "C");
+
+ xml_is_initialised = 1;
+}
+
+/*
+ * Call after using any of the static functions in this file. All
+ * public functions should call this after using any mxml functions.
+ */
+void
+stp_xml_exit(void)
+{
+ if (xml_is_initialised > 1) /* don't restore original state */
+ {
+ xml_is_initialised--;
+ return;
+ }
+ else if (xml_is_initialised < 1)
+ return;
+
+ /* Restore locale */
+ setlocale(LC_COLLATE, saved_lc_collate);
+ setlocale(LC_CTYPE, saved_lc_ctype);
+ setlocale(LC_NUMERIC, saved_lc_numeric);
+ xml_is_initialised = 0;
+}
+
+void
+stp_xml_parse_file_named(const char *name)
+{
+ stp_list_t *dir_list; /* List of directories to scan */
+ stp_list_t *file_list; /* List of XML files */
+ stp_list_item_t *item; /* Pointer to current list item */
+ if (!(dir_list = stp_list_create()))
+ return;
+ stp_list_set_freefunc(dir_list, stp_list_node_free_data);
+ if (getenv("STP_DATA_PATH"))
+ stp_path_split(dir_list, getenv("STP_DATA_PATH"));
+ else
+ stp_path_split(dir_list, PKGXMLDATADIR);
+ file_list = stp_path_search(dir_list, name);
+ stp_list_destroy(dir_list);
+ item = stp_list_get_start(file_list);
+ while (item)
+ {
+ stp_deprintf(STP_DBG_XML,
+ "stp_xml_parse_file_named: source file: %s\n",
+ (const char *) stp_list_item_get_data(item));
+ stp_xml_parse_file((const char *) stp_list_item_get_data(item));
+ item = stp_list_item_next(item);
+ }
+ stp_list_destroy(file_list);
+}
+
+
+/*
+ * Read all available XML files.
+ */
+int
+stp_xml_init_defaults(void)
+{
+ stp_list_item_t *item; /* Pointer to current list item */
+
+ stp_xml_init();
+
+ /* Parse each XML file */
+ item = stp_list_get_start(stpi_xml_preloads);
+ while (item)
+ {
+ stp_deprintf(STP_DBG_XML, "stp_xml_init_defaults: source file: %s\n",
+ (const char *) stp_list_item_get_data(item));
+ stp_xml_parse_file_named((const char *) stp_list_item_get_data(item));
+ item = stp_list_item_next(item);
+ }
+ stp_list_destroy(stpi_xml_preloads);
+
+ stp_xml_exit();
+
+ return 0;
+}
+
+
+/*
+ * Parse a single XML file.
+ */
+int
+stp_xml_parse_file(const char *file) /* File to parse */
+{
+ stp_mxml_node_t *doc;
+ stp_mxml_node_t *cur;
+ FILE *fp;
+
+ stp_deprintf(STP_DBG_XML, "stp_xml_parse_file: reading `%s'...\n", file);
+
+ fp = fopen(file, "r");
+ if (!fp)
+ {
+ stp_erprintf("stp_xml_parse_file: unable to open %s: %s\n", file,
+ strerror(errno));
+ return 1;
+ }
+
+ stp_xml_init();
+
+ doc = stp_mxmlLoadFile(NULL, fp, STP_MXML_NO_CALLBACK);
+ fclose(fp);
+
+ cur = doc->child;
+ while (cur &&
+ (cur->type != STP_MXML_ELEMENT ||
+ (strcmp(cur->value.element.name, "gutenprint") != 0 &&
+ strcmp(cur->value.element.name, "gimp-print") != 0)))
+ cur = cur->next;
+
+ if (cur == NULL || cur->type != STP_MXML_ELEMENT)
+ {
+ stp_erprintf("stp_xml_parse_file: %s: parse error\n", file);
+ stp_mxmlDelete(doc);
+ return 1;
+ }
+
+ if (strcmp(cur->value.element.name, "gutenprint") != 0 &&
+ strcmp(cur->value.element.name, "gimp-print") != 0)
+ {
+ stp_erprintf
+ ("XML file of the wrong type, root node is %s != (gutenprint || gimp-print)",
+ cur->value.element.name);
+ stp_mxmlDelete(doc);
+ return 1;
+ }
+
+ /* The XML file was read and is the right format */
+
+ stpi_xml_process_gutenprint(cur, file);
+ stp_mxmlDelete(doc);
+
+ stp_xml_exit();
+
+ return 0;
+}
+
+/*
+ * Convert a text string into an integer.
+ */
+long
+stp_xmlstrtol(const char *textval)
+{
+ long val; /* The value to return */
+ val = strtol(textval, (char **)NULL, 10);
+
+ return val;
+}
+
+/*
+ * Convert a text string into an unsigned int.
+ */
+unsigned long
+stp_xmlstrtoul(const char *textval)
+{
+ unsigned long val; /* The value to return */
+ val = strtoul(textval, (char **)NULL, 10);
+
+ return val;
+}
+
+/*
+ * Convert a text string into a double.
+ */
+double
+stp_xmlstrtod(const char *textval)
+{
+ double val; /* The value to return */
+ val = strtod(textval, (char **)NULL);
+
+ return val;
+}
+
+
+/*
+ * Find a node in an XML tree. This function takes an xmlNodePtr,
+ * followed by a NULL-terminated list of nodes which are required.
+ * For example stp_xml_get_node(myroot, "gutenprint", "dither") will
+ * return the first dither node in the tree. Additional dither nodes
+ * cannot be accessed with this function.
+ */
+stp_mxml_node_t *
+stp_xml_get_node(stp_mxml_node_t *xmlroot, ...)
+{
+ stp_mxml_node_t *child;
+ va_list ap;
+ const char *target = NULL;
+
+ va_start(ap, xmlroot);
+
+ child = xmlroot;
+ target = va_arg(ap, const char *);
+
+ while (target && child)
+ {
+ child = stp_mxmlFindElement(child, child, target, NULL, NULL, STP_MXML_DESCEND);
+ target = va_arg(ap, const char *);
+ }
+ va_end(ap);
+ return child;
+}
+
+static void
+stpi_xml_process_node(stp_mxml_node_t *node, const char *file)
+{
+ stp_list_item_t *item =
+ stp_list_get_item_by_name(stpi_xml_registry, node->value.element.name);
+ if (item)
+ {
+ stpi_xml_parse_registry *xmlp =
+ (stpi_xml_parse_registry *) stp_list_item_get_data(item);
+ (xmlp->parse_func)(node, file);
+ }
+}
+
+/*
+ * Parse the <gutenprint> root node.
+ */
+static void
+stpi_xml_process_gutenprint(stp_mxml_node_t *cur, const char *file) /* The node to parse */
+{
+ stp_mxml_node_t *child; /* Child node pointer */
+
+ child = cur->child;
+ while (child)
+ {
+ /* process nodes with corresponding parser */
+ if (child->type == STP_MXML_ELEMENT)
+ stpi_xml_process_node(child, file);
+ child = child->next;
+ }
+}
+
+/*
+ * Create a basic gutenprint XML document tree root
+ */
+stp_mxml_node_t *
+stp_xmldoc_create_generic(void)
+{
+ stp_mxml_node_t *doc;
+ stp_mxml_node_t *rootnode;
+
+ /* Create the XML tree */
+ doc = stp_mxmlNewElement(NULL, "?xml");
+ stp_mxmlElementSetAttr(doc, "version", "1.0");
+
+ rootnode = stp_mxmlNewElement(doc, "gutenprint");
+ stp_mxmlElementSetAttr
+ (rootnode, "xmlns", "http://gimp-print.sourceforge.net/xsd/gp.xsd-1.0");
+ stp_mxmlElementSetAttr
+ (rootnode, "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
+ stp_mxmlElementSetAttr
+ (rootnode, "xsi:schemaLocation",
+ "http://gimp-print.sourceforge.net/xsd/gp.xsd-1.0 gutenprint.xsd");
+
+ return doc;
+}
+
+
+