diff options
-rw-r--r-- | Build/source/texk/ps2pkm/ChangeLog | 11 | ||||
-rw-r--r-- | Build/source/texk/ps2pkm/Makefile.am | 24 | ||||
-rw-r--r-- | Build/source/texk/ps2pkm/Makefile.in | 192 | ||||
-rw-r--r-- | Build/source/texk/ps2pkm/pk2bm.c | 27 | ||||
-rw-r--r-- | Build/source/texk/ps2pkm/pkin.c | 43 | ||||
-rw-r--r-- | Build/source/texk/ps2pkm/pkin.h | 2 | ||||
-rw-r--r-- | Build/source/texk/ps2pkm/tests/Symbol.afm | 209 | ||||
-rw-r--r-- | Build/source/texk/ps2pkm/tests/Symbol.alpha.hex | 29 | ||||
-rw-r--r-- | Build/source/texk/ps2pkm/tests/Symbol.alpha.pix | 29 | ||||
-rw-r--r-- | Build/source/texk/ps2pkm/tests/Symbol.pfa | 1099 | ||||
-rw-r--r-- | Build/source/texk/ps2pkm/tests/Symbol.pfb | bin | 0 -> 31586 bytes | |||
-rw-r--r-- | Build/source/texk/ps2pkm/tests/Symbol10.300pk | bin | 0 -> 9216 bytes | |||
-rwxr-xr-x | Build/source/texk/ps2pkm/tests/ps2pk.test | 33 |
13 files changed, 1622 insertions, 76 deletions
diff --git a/Build/source/texk/ps2pkm/ChangeLog b/Build/source/texk/ps2pkm/ChangeLog index ba910f4e3ec..030b8f0a923 100644 --- a/Build/source/texk/ps2pkm/ChangeLog +++ b/Build/source/texk/ps2pkm/ChangeLog @@ -1,9 +1,20 @@ +2012-07-11 Peter Breitenlohner <peb@mppmu.mpg.de> + + * tests/ps2pk.test (new): Shell script for a test case. + * tests/Symbol.afm, tests/Symbol.pfb (new): Test input. + * tests/Symbol.pfa, tests/Symbol.alpha.{hex,pix}, + tests/Symbol10.300pk (new): Expected output. + * Makefile.am: Adapted. + 2012-07-10 Peter Breitenlohner <peb@mppmu.mpg.de> * mag.c, pk2bm.c: Use binary mode for output files (from W32TeX). * pfb2pfa.c: Drop unused ambiguous code. + * Makefile.am: Pk2bm does not use KPATHSEA. + * pk2bm.c, pkin.[ch]: ANSI C function prototypes and definitions. + 2011-07-19 Peter Breitenlohner <peb@mppmu.mpg.de> * type1.c [FABS, CEIL, FLOOR]: Use routines from libm, the diff --git a/Build/source/texk/ps2pkm/Makefile.am b/Build/source/texk/ps2pkm/Makefile.am index bc8d5da2cf6..61e45497f28 100644 --- a/Build/source/texk/ps2pkm/Makefile.am +++ b/Build/source/texk/ps2pkm/Makefile.am @@ -1,15 +1,20 @@ ## Makefile.am for the TeX Live subdirectory texk/ps2pkm/ ## -## Copyright (C) 2009-2011 Peter Breitenlohner <tex-live@tug.org> +## Copyright (C) 2009-2012 Peter Breitenlohner <tex-live@tug.org> ## You may freely use, modify and/or distribute this file. ## ACLOCAL_AMFLAGS = -I ../../m4 +bin_PROGRAMS = mag pfb2pfa pk2bm ps2pk + INCLUDES = $(KPATHSEA_INCLUDES) AM_CPPFLAGS = -DUNIX -DKPATHSEA AM_CFLAGS = #$(WARNING_CFLAGS) +LDADD = $(KPATHSEA_LIBS) -bin_PROGRAMS = mag pfb2pfa pk2bm ps2pk +pk2bm_CPPFLAGS = +pk2bm_CFLAGS = $(WARNING_CFLAGS) +pk2bm_LDADD = mag_SOURCES = \ basics.c \ @@ -91,18 +96,25 @@ ps2pk_SOURCES = \ util.c \ util.h -$(mag_OBJECTS) $(pfb2pfa_OBJECTS) $(pk2bm_OBJECTS) $(ps2pk_OBJECTS): $(KPATHSEA_DEPEND) - -LDADD = $(KPATHSEA_LIBS) +$(mag_OBJECTS) $(pfb2pfa_OBJECTS) $(ps2pk_OBJECTS): $(KPATHSEA_DEPEND) ## Rebuild libkpathsea @KPATHSEA_RULE@ dist_man1_MANS = mag.1 pfb2pfa.1 pk2bm.1 ps2pk.1 +## Tests. +## +TESTS = tests/ps2pk.test +EXTRA_DIST = $(TESTS) +## tests/ps2pk.test +EXTRA_DIST += tests/Symbol.afm tests/Symbol.alpha.hex tests/Symbol.alpha.pix \ + tests/Symbol.pfa tests/Symbol.pfb tests/Symbol10.300pk +DISTCLEANFILES = Symbol* + ## Not used ## -EXTRA_DIST = \ +EXTRA_DIST += \ CHANGES.type1 \ INSTALLATION \ README.14m \ diff --git a/Build/source/texk/ps2pkm/Makefile.in b/Build/source/texk/ps2pkm/Makefile.in index 97bd3ae56f2..dfc6fe199d9 100644 --- a/Build/source/texk/ps2pkm/Makefile.in +++ b/Build/source/texk/ps2pkm/Makefile.in @@ -95,10 +95,12 @@ am_pfb2pfa_OBJECTS = basics.$(OBJEXT) filenames.$(OBJEXT) \ pfb2pfa_OBJECTS = $(am_pfb2pfa_OBJECTS) pfb2pfa_LDADD = $(LDADD) pfb2pfa_DEPENDENCIES = $(am__DEPENDENCIES_1) -am_pk2bm_OBJECTS = pk2bm.$(OBJEXT) pkin.$(OBJEXT) +am_pk2bm_OBJECTS = pk2bm-pk2bm.$(OBJEXT) pk2bm-pkin.$(OBJEXT) pk2bm_OBJECTS = $(am_pk2bm_OBJECTS) -pk2bm_LDADD = $(LDADD) -pk2bm_DEPENDENCIES = $(am__DEPENDENCIES_1) +pk2bm_DEPENDENCIES = +pk2bm_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(pk2bm_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ am_ps2pk_OBJECTS = arith.$(OBJEXT) basics.$(OBJEXT) bstring.$(OBJEXT) \ curves.$(OBJEXT) encoding.$(OBJEXT) filenames.$(OBJEXT) \ fontfcn.$(OBJEXT) hints.$(OBJEXT) lines.$(OBJEXT) \ @@ -166,6 +168,10 @@ ETAGS = etags CTAGS = ctags CSCOPE = cscope AM_RECURSIVE_TARGETS = cscope +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = $(am__tty_colors_dummy) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) @@ -306,6 +312,10 @@ ACLOCAL_AMFLAGS = -I ../../m4 INCLUDES = $(KPATHSEA_INCLUDES) AM_CPPFLAGS = -DUNIX -DKPATHSEA AM_CFLAGS = #$(WARNING_CFLAGS) +LDADD = $(KPATHSEA_LIBS) +pk2bm_CPPFLAGS = +pk2bm_CFLAGS = $(WARNING_CFLAGS) +pk2bm_LDADD = mag_SOURCES = \ basics.c \ basics.h \ @@ -386,26 +396,15 @@ ps2pk_SOURCES = \ util.c \ util.h -LDADD = $(KPATHSEA_LIBS) dist_man1_MANS = mag.1 pfb2pfa.1 pk2bm.1 ps2pk.1 -EXTRA_DIST = \ - CHANGES.type1 \ - INSTALLATION \ - README.14m \ - README.type1 \ - basename.c \ - flisearch.c \ - pktest.c \ - protos.h \ - psearch.c \ - sexpr.c \ - strexpr.c \ - strexpr.h \ - t1test.c \ - texfiles.c \ - texfiles.h \ - usenet - +TESTS = tests/ps2pk.test +EXTRA_DIST = $(TESTS) tests/Symbol.afm tests/Symbol.alpha.hex \ + tests/Symbol.alpha.pix tests/Symbol.pfa tests/Symbol.pfb \ + tests/Symbol10.300pk CHANGES.type1 INSTALLATION README.14m \ + README.type1 basename.c flisearch.c pktest.c protos.h \ + psearch.c sexpr.c strexpr.c strexpr.h t1test.c texfiles.c \ + texfiles.h usenet +DISTCLEANFILES = Symbol* all: c-auto.h $(MAKE) $(AM_MAKEFLAGS) all-am @@ -514,7 +513,7 @@ pfb2pfa$(EXEEXT): $(pfb2pfa_OBJECTS) $(pfb2pfa_DEPENDENCIES) $(EXTRA_pfb2pfa_DEP $(LINK) $(pfb2pfa_OBJECTS) $(pfb2pfa_LDADD) $(LIBS) pk2bm$(EXEEXT): $(pk2bm_OBJECTS) $(pk2bm_DEPENDENCIES) $(EXTRA_pk2bm_DEPENDENCIES) @rm -f pk2bm$(EXEEXT) - $(LINK) $(pk2bm_OBJECTS) $(pk2bm_LDADD) $(LIBS) + $(pk2bm_LINK) $(pk2bm_OBJECTS) $(pk2bm_LDADD) $(LIBS) ps2pk$(EXEEXT): $(ps2pk_OBJECTS) $(ps2pk_DEPENDENCIES) $(EXTRA_ps2pk_DEPENDENCIES) @rm -f ps2pk$(EXEEXT) $(LINK) $(ps2pk_OBJECTS) $(ps2pk_LDADD) $(LIBS) @@ -538,8 +537,8 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/objects.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paths.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfb2pfa.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pk2bm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pk2bm-pk2bm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pk2bm-pkin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkout.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ps2pk.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regions.Po@am__quote@ @@ -575,6 +574,34 @@ distclean-compile: @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< +pk2bm-pk2bm.o: pk2bm.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pk2bm_CPPFLAGS) $(CPPFLAGS) $(pk2bm_CFLAGS) $(CFLAGS) -MT pk2bm-pk2bm.o -MD -MP -MF $(DEPDIR)/pk2bm-pk2bm.Tpo -c -o pk2bm-pk2bm.o `test -f 'pk2bm.c' || echo '$(srcdir)/'`pk2bm.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pk2bm-pk2bm.Tpo $(DEPDIR)/pk2bm-pk2bm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pk2bm.c' object='pk2bm-pk2bm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pk2bm_CPPFLAGS) $(CPPFLAGS) $(pk2bm_CFLAGS) $(CFLAGS) -c -o pk2bm-pk2bm.o `test -f 'pk2bm.c' || echo '$(srcdir)/'`pk2bm.c + +pk2bm-pk2bm.obj: pk2bm.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pk2bm_CPPFLAGS) $(CPPFLAGS) $(pk2bm_CFLAGS) $(CFLAGS) -MT pk2bm-pk2bm.obj -MD -MP -MF $(DEPDIR)/pk2bm-pk2bm.Tpo -c -o pk2bm-pk2bm.obj `if test -f 'pk2bm.c'; then $(CYGPATH_W) 'pk2bm.c'; else $(CYGPATH_W) '$(srcdir)/pk2bm.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pk2bm-pk2bm.Tpo $(DEPDIR)/pk2bm-pk2bm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pk2bm.c' object='pk2bm-pk2bm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pk2bm_CPPFLAGS) $(CPPFLAGS) $(pk2bm_CFLAGS) $(CFLAGS) -c -o pk2bm-pk2bm.obj `if test -f 'pk2bm.c'; then $(CYGPATH_W) 'pk2bm.c'; else $(CYGPATH_W) '$(srcdir)/pk2bm.c'; fi` + +pk2bm-pkin.o: pkin.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pk2bm_CPPFLAGS) $(CPPFLAGS) $(pk2bm_CFLAGS) $(CFLAGS) -MT pk2bm-pkin.o -MD -MP -MF $(DEPDIR)/pk2bm-pkin.Tpo -c -o pk2bm-pkin.o `test -f 'pkin.c' || echo '$(srcdir)/'`pkin.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pk2bm-pkin.Tpo $(DEPDIR)/pk2bm-pkin.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pkin.c' object='pk2bm-pkin.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pk2bm_CPPFLAGS) $(CPPFLAGS) $(pk2bm_CFLAGS) $(CFLAGS) -c -o pk2bm-pkin.o `test -f 'pkin.c' || echo '$(srcdir)/'`pkin.c + +pk2bm-pkin.obj: pkin.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pk2bm_CPPFLAGS) $(CPPFLAGS) $(pk2bm_CFLAGS) $(CFLAGS) -MT pk2bm-pkin.obj -MD -MP -MF $(DEPDIR)/pk2bm-pkin.Tpo -c -o pk2bm-pkin.obj `if test -f 'pkin.c'; then $(CYGPATH_W) 'pkin.c'; else $(CYGPATH_W) '$(srcdir)/pkin.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pk2bm-pkin.Tpo $(DEPDIR)/pk2bm-pkin.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pkin.c' object='pk2bm-pkin.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pk2bm_CPPFLAGS) $(CPPFLAGS) $(pk2bm_CFLAGS) $(CFLAGS) -c -o pk2bm-pkin.obj `if test -f 'pkin.c'; then $(CYGPATH_W) 'pkin.c'; else $(CYGPATH_W) '$(srcdir)/pkin.c'; fi` + mostlyclean-libtool: -rm -f *.lo @@ -701,6 +728,99 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi + distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ @@ -871,6 +991,7 @@ distcleancheck: distclean $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) $(MANS) c-auto.h installdirs: @@ -903,6 +1024,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -982,16 +1104,16 @@ uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 -.MAKE: all install-am install-strip +.MAKE: all check-am install-am install-strip -.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \ - clean-binPROGRAMS clean-cscope clean-generic clean-libtool \ - cscope cscopelist ctags dist dist-all dist-bzip2 dist-gzip \ - dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ - distclean distclean-compile distclean-generic distclean-hdr \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-binPROGRAMS install-data \ +.PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \ + clean clean-binPROGRAMS clean-cscope clean-generic \ + clean-libtool cscope cscopelist ctags dist dist-all dist-bzip2 \ + dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-man1 install-pdf \ @@ -1003,7 +1125,7 @@ uninstall-man: uninstall-man1 uninstall-man uninstall-man1 -$(mag_OBJECTS) $(pfb2pfa_OBJECTS) $(pk2bm_OBJECTS) $(ps2pk_OBJECTS): $(KPATHSEA_DEPEND) +$(mag_OBJECTS) $(pfb2pfa_OBJECTS) $(ps2pk_OBJECTS): $(KPATHSEA_DEPEND) @KPATHSEA_RULE@ diff --git a/Build/source/texk/ps2pkm/pk2bm.c b/Build/source/texk/ps2pkm/pk2bm.c index efc334616e1..63b36d520b6 100644 --- a/Build/source/texk/ps2pkm/pk2bm.c +++ b/Build/source/texk/ps2pkm/pk2bm.c @@ -37,16 +37,18 @@ #include <fcntl.h> #endif +static quarterword lsbf(quarterword u); +static void dots(quarterword u, int n); +static int atoo(char *oct); + int main(int argc, char *argv[]) { int done, C = 0, c, h = 0, w = 0, row, col; unsigned int bitmap = 0, hexmap = 0; halfword *word; - quarterword lsbf(); - void dots(); chardesc cd; - char *myname = "pk2bm", *pkname; - int atoo(char *); + const char *myname = "pk2bm"; + char *pkname; while (--argc > 0 && (*++argv)[0] == '-') { done=0; @@ -179,8 +181,8 @@ int main(int argc, char *argv[]) /* * lsbf() transforms a byte (least significant bit first). */ -quarterword lsbf(u) -quarterword u; +static quarterword +lsbf(quarterword u) { int i; quarterword bit, result = 0; @@ -195,9 +197,10 @@ quarterword u; /* * dots() print byte: `*' for a black and `.' for a white pixel */ -void dots(u, n) -quarterword u; int n; -{ unsigned int bit; +static void +dots(quarterword u, int n) +{ + unsigned int bit; bit=1<<7; for ( ;n>0 ;n--) { @@ -207,8 +210,10 @@ quarterword u; int n; } } -int atoo(char *oct) -{ int octal = 0; +static int +atoo(char *oct) +{ + int octal = 0; while (*oct != '\0') octal = 8*octal + (*oct++) - '0'; return octal & 0xff; } diff --git a/Build/source/texk/ps2pkm/pkin.c b/Build/source/texk/ps2pkm/pkin.c index a539b1de5b0..45083b3cf50 100644 --- a/Build/source/texk/ps2pkm/pkin.c +++ b/Build/source/texk/ps2pkm/pkin.c @@ -25,7 +25,7 @@ /* * Forward declaration */ -static void error(); +static void error(const char *s); /* * Now we have some routines to get stuff from the pk file. pkbyte returns @@ -35,7 +35,7 @@ static void error(); static FILE *pkfile ; static shalfword -pkbyte() +pkbyte(void) { register shalfword i ; @@ -45,7 +45,7 @@ pkbyte() } static integer -pkquad() +pkquad(void) { register integer i ; @@ -59,7 +59,7 @@ pkquad() } static integer -pktrio() +pktrio(void) { register integer i ; @@ -70,7 +70,7 @@ pktrio() } static integer -pkpair() +pkpair(void) { register integer i ; @@ -80,7 +80,7 @@ pkpair() } static integer -pkspair() +pkspair(void) { register integer i ; @@ -97,8 +97,7 @@ static char errbuf[80] ; */ static Boolean -pkopen(name) - char name[] ; +pkopen(const char *name) { if ((pkfile=fopen(name, RB))==NULL) { (void)sprintf(errbuf, "Could not open %s", name) ; @@ -123,7 +122,7 @@ static halfword dynf ; static halfword repeatcount ; static shalfword -getnyb () +getnyb (void) { halfword temp; if ( bitweight == 0 ) { bitweight = 16 ; @@ -137,7 +136,7 @@ getnyb () } static Boolean -getbit () +getbit (void) { bitweight >>= 1 ; if ( bitweight == 0 ) @@ -149,9 +148,11 @@ getbit () static halfword (*realfunc)() ; long PKremainder ; -static halfword handlehuge() ; +static halfword handlehuge(halfword i, halfword k) ; -static halfword pkpackednum () { +static halfword +pkpackednum (void) +{ register halfword i, j ; i = getnyb () ; if ( i == 0 ) @@ -185,7 +186,7 @@ register halfword i, j ; } } -static halfword rest () +static halfword rest (void) { halfword i ; @@ -210,8 +211,8 @@ static halfword rest () return 0; } -static halfword handlehuge ( i , k ) -halfword i , k ; +static halfword +handlehuge (halfword i, halfword k) { register long j = k ; @@ -232,8 +233,7 @@ static halfword gpower[17] = { 0 , 1 , 3 , 7 , 15 , 31 , 63 , 127 , 255 , 511 , 1023 , 2047 , 4095 , 8191 , 16383 , 32767 , 65535 } ; static void -unpack(cd) -chardesc *cd; +unpack(chardesc *cd) { register integer i, j ; register halfword word, wordweight ; @@ -334,10 +334,7 @@ chardesc *cd; * return FALSE (0) otherwise. */ int -readchar(name, c, cd) -char name[]; -shalfword c; -chardesc *cd; +readchar(char *name, shalfword c, chardesc *cd) { register shalfword i ; register integer k ; @@ -446,8 +443,8 @@ default: return(0); /* character not found */ } -static void error(s) -char s[]; +static void +error(const char *s) { fprintf(stderr, "%s\n", s); exit(1); diff --git a/Build/source/texk/ps2pkm/pkin.h b/Build/source/texk/ps2pkm/pkin.h index 3bc9279a7cb..ce5db039554 100644 --- a/Build/source/texk/ps2pkm/pkin.h +++ b/Build/source/texk/ps2pkm/pkin.h @@ -58,4 +58,4 @@ typedef struct { halfword *raster ; } chardesc ; -int readchar(); +int readchar(char *name, shalfword c, chardesc *cd); diff --git a/Build/source/texk/ps2pkm/tests/Symbol.afm b/Build/source/texk/ps2pkm/tests/Symbol.afm new file mode 100644 index 00000000000..1cdbdae695f --- /dev/null +++ b/Build/source/texk/ps2pkm/tests/Symbol.afm @@ -0,0 +1,209 @@ +StartFontMetrics 2.0 +Comment Copyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All rights reserved. +Comment Creation Date: Wed Jan 17 21:48:26 1990 +Comment UniqueID 27004 +Comment VMusage 28489 37622 +FontName Symbol +FullName Symbol +FamilyName Symbol +Weight Medium +ItalicAngle 0 +IsFixedPitch false +FontBBox -180 -293 1090 1010 +UnderlinePosition -98 +UnderlineThickness 54 +Version 001.007 +Notice Copyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All rights reserved. +EncodingScheme FontSpecific +StartCharMetrics 189 +C 32 ; WX 250 ; N space ; B 0 0 0 0 ; +C 33 ; WX 333 ; N exclam ; B 128 -17 240 672 ; +C 34 ; WX 713 ; N universal ; B 31 0 681 705 ; +C 35 ; WX 500 ; N numbersign ; B 20 -16 481 673 ; +C 36 ; WX 549 ; N existential ; B 25 0 478 707 ; +C 37 ; WX 833 ; N percent ; B 63 -36 771 655 ; +C 38 ; WX 778 ; N ampersand ; B 41 -18 750 661 ; +C 39 ; WX 439 ; N suchthat ; B 48 -17 414 500 ; +C 40 ; WX 333 ; N parenleft ; B 53 -191 300 673 ; +C 41 ; WX 333 ; N parenright ; B 30 -191 277 673 ; +C 42 ; WX 500 ; N asteriskmath ; B 65 134 427 551 ; +C 43 ; WX 549 ; N plus ; B 10 0 539 533 ; +C 44 ; WX 250 ; N comma ; B 56 -152 194 104 ; +C 45 ; WX 549 ; N minus ; B 11 233 535 288 ; +C 46 ; WX 250 ; N period ; B 69 -17 181 95 ; +C 47 ; WX 278 ; N slash ; B 0 -18 254 646 ; +C 48 ; WX 500 ; N zero ; B 23 -17 471 685 ; +C 49 ; WX 500 ; N one ; B 117 0 390 673 ; +C 50 ; WX 500 ; N two ; B 25 0 475 686 ; +C 51 ; WX 500 ; N three ; B 39 -17 435 685 ; +C 52 ; WX 500 ; N four ; B 16 0 469 685 ; +C 53 ; WX 500 ; N five ; B 29 -17 443 685 ; +C 54 ; WX 500 ; N six ; B 36 -17 467 685 ; +C 55 ; WX 500 ; N seven ; B 24 -16 448 673 ; +C 56 ; WX 500 ; N eight ; B 54 -18 440 685 ; +C 57 ; WX 500 ; N nine ; B 31 -18 460 685 ; +C 58 ; WX 278 ; N colon ; B 81 -17 193 460 ; +C 59 ; WX 278 ; N semicolon ; B 83 -152 221 460 ; +C 60 ; WX 549 ; N less ; B 26 0 523 522 ; +C 61 ; WX 549 ; N equal ; B 11 141 537 390 ; +C 62 ; WX 549 ; N greater ; B 26 0 523 522 ; +C 63 ; WX 444 ; N question ; B 70 -17 412 686 ; +C 64 ; WX 549 ; N congruent ; B 11 0 537 475 ; +C 65 ; WX 722 ; N Alpha ; B 4 0 684 673 ; +C 66 ; WX 667 ; N Beta ; B 29 0 592 673 ; +C 67 ; WX 722 ; N Chi ; B -9 0 704 673 ; +C 68 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C 69 ; WX 611 ; N Epsilon ; B 32 0 617 673 ; +C 70 ; WX 763 ; N Phi ; B 26 0 741 673 ; +C 71 ; WX 603 ; N Gamma ; B 24 0 609 673 ; +C 72 ; WX 722 ; N Eta ; B 39 0 729 673 ; +C 73 ; WX 333 ; N Iota ; B 32 0 316 673 ; +C 74 ; WX 631 ; N theta1 ; B 18 -18 623 689 ; +C 75 ; WX 722 ; N Kappa ; B 35 0 722 673 ; +C 76 ; WX 686 ; N Lambda ; B 6 0 680 688 ; +C 77 ; WX 889 ; N Mu ; B 28 0 887 673 ; +C 78 ; WX 722 ; N Nu ; B 29 -8 720 673 ; +C 79 ; WX 722 ; N Omicron ; B 41 -17 715 685 ; +C 80 ; WX 768 ; N Pi ; B 25 0 745 673 ; +C 81 ; WX 741 ; N Theta ; B 41 -17 715 685 ; +C 82 ; WX 556 ; N Rho ; B 28 0 563 673 ; +C 83 ; WX 592 ; N Sigma ; B 5 0 589 673 ; +C 84 ; WX 611 ; N Tau ; B 33 0 607 673 ; +C 85 ; WX 690 ; N Upsilon ; B -8 0 694 673 ; +C 86 ; WX 439 ; N sigma1 ; B 40 -233 436 500 ; +C 87 ; WX 768 ; N Omega ; B 34 0 736 688 ; +C 88 ; WX 645 ; N Xi ; B 40 0 599 673 ; +C 89 ; WX 795 ; N Psi ; B 15 0 781 684 ; +C 90 ; WX 611 ; N Zeta ; B 44 0 636 673 ; +C 91 ; WX 333 ; N bracketleft ; B 86 -155 299 674 ; +C 92 ; WX 863 ; N therefore ; B 163 0 701 478 ; +C 93 ; WX 333 ; N bracketright ; B 33 -155 246 674 ; +C 94 ; WX 658 ; N perpendicular ; B 15 0 652 674 ; +C 95 ; WX 500 ; N underscore ; B -2 -252 502 -206 ; +C 96 ; WX 500 ; N radicalex ; B 480 881 1090 917 ; +C 97 ; WX 631 ; N alpha ; B 41 -18 622 500 ; +C 98 ; WX 549 ; N beta ; B 61 -223 515 741 ; +C 99 ; WX 549 ; N chi ; B 12 -231 522 499 ; +C 100 ; WX 494 ; N delta ; B 40 -19 481 740 ; +C 101 ; WX 439 ; N epsilon ; B 22 -19 427 502 ; +C 102 ; WX 521 ; N phi ; B 27 -224 490 671 ; +C 103 ; WX 411 ; N gamma ; B 5 -225 484 499 ; +C 104 ; WX 603 ; N eta ; B 0 -202 527 514 ; +C 105 ; WX 329 ; N iota ; B 0 -17 301 503 ; +C 106 ; WX 603 ; N phi1 ; B 36 -224 587 499 ; +C 107 ; WX 549 ; N kappa ; B 33 0 558 501 ; +C 108 ; WX 549 ; N lambda ; B 24 -17 548 739 ; +C 109 ; WX 576 ; N mu ; B 33 -223 567 500 ; +C 110 ; WX 521 ; N nu ; B -9 -16 475 507 ; +C 111 ; WX 549 ; N omicron ; B 35 -19 501 499 ; +C 112 ; WX 549 ; N pi ; B 10 -19 530 487 ; +C 113 ; WX 521 ; N theta ; B 43 -17 485 690 ; +C 114 ; WX 549 ; N rho ; B 50 -230 490 499 ; +C 115 ; WX 603 ; N sigma ; B 30 -21 588 500 ; +C 116 ; WX 439 ; N tau ; B 10 -19 418 500 ; +C 117 ; WX 576 ; N upsilon ; B 7 -18 535 507 ; +C 118 ; WX 713 ; N omega1 ; B 12 -18 671 583 ; +C 119 ; WX 686 ; N omega ; B 42 -17 684 500 ; +C 120 ; WX 493 ; N xi ; B 27 -224 469 766 ; +C 121 ; WX 686 ; N psi ; B 12 -228 701 500 ; +C 122 ; WX 494 ; N zeta ; B 60 -225 467 756 ; +C 123 ; WX 480 ; N braceleft ; B 58 -183 397 673 ; +C 124 ; WX 200 ; N bar ; B 65 -177 135 673 ; +C 125 ; WX 480 ; N braceright ; B 79 -183 418 673 ; +C 126 ; WX 549 ; N similar ; B 17 203 529 307 ; +C 161 ; WX 620 ; N Upsilon1 ; B -2 0 610 685 ; +C 162 ; WX 247 ; N minute ; B 27 459 228 735 ; +C 163 ; WX 549 ; N lessequal ; B 29 0 526 639 ; +C 164 ; WX 167 ; N fraction ; B -180 -12 340 677 ; +C 165 ; WX 713 ; N infinity ; B 26 124 688 404 ; +C 166 ; WX 500 ; N florin ; B 2 -193 494 686 ; +C 167 ; WX 753 ; N club ; B 86 -26 660 533 ; +C 168 ; WX 753 ; N diamond ; B 142 -36 600 550 ; +C 169 ; WX 753 ; N heart ; B 117 -33 631 532 ; +C 170 ; WX 753 ; N spade ; B 113 -36 629 548 ; +C 171 ; WX 1042 ; N arrowboth ; B 24 -15 1024 511 ; +C 172 ; WX 987 ; N arrowleft ; B 32 -15 942 511 ; +C 173 ; WX 603 ; N arrowup ; B 45 0 571 910 ; +C 174 ; WX 987 ; N arrowright ; B 49 -15 959 511 ; +C 175 ; WX 603 ; N arrowdown ; B 45 -22 571 888 ; +C 176 ; WX 400 ; N degree ; B 50 385 350 685 ; +C 177 ; WX 549 ; N plusminus ; B 10 0 539 645 ; +C 178 ; WX 411 ; N second ; B 20 459 413 737 ; +C 179 ; WX 549 ; N greaterequal ; B 29 0 526 639 ; +C 180 ; WX 549 ; N multiply ; B 17 8 533 524 ; +C 181 ; WX 713 ; N proportional ; B 27 123 639 404 ; +C 182 ; WX 494 ; N partialdiff ; B 26 -20 462 746 ; +C 183 ; WX 460 ; N bullet ; B 50 113 410 473 ; +C 184 ; WX 549 ; N divide ; B 10 71 536 456 ; +C 185 ; WX 549 ; N notequal ; B 15 -25 540 549 ; +C 186 ; WX 549 ; N equivalence ; B 14 82 538 443 ; +C 187 ; WX 549 ; N approxequal ; B 14 135 527 394 ; +C 188 ; WX 1000 ; N ellipsis ; B 111 -17 889 95 ; +C 189 ; WX 603 ; N arrowvertex ; B 280 -120 336 1010 ; +C 190 ; WX 1000 ; N arrowhorizex ; B -60 220 1050 276 ; +C 191 ; WX 658 ; N carriagereturn ; B 15 -16 602 629 ; +C 192 ; WX 823 ; N aleph ; B 175 -18 661 658 ; +C 193 ; WX 686 ; N Ifraktur ; B 10 -53 578 740 ; +C 194 ; WX 795 ; N Rfraktur ; B 26 -15 759 734 ; +C 195 ; WX 987 ; N weierstrass ; B 159 -211 870 573 ; +C 196 ; WX 768 ; N circlemultiply ; B 43 -17 733 673 ; +C 197 ; WX 768 ; N circleplus ; B 43 -15 733 675 ; +C 198 ; WX 823 ; N emptyset ; B 39 -24 781 719 ; +C 199 ; WX 768 ; N intersection ; B 40 0 732 509 ; +C 200 ; WX 768 ; N union ; B 40 -17 732 492 ; +C 201 ; WX 713 ; N propersuperset ; B 20 0 673 470 ; +C 202 ; WX 713 ; N reflexsuperset ; B 20 -125 673 470 ; +C 203 ; WX 713 ; N notsubset ; B 36 -70 690 540 ; +C 204 ; WX 713 ; N propersubset ; B 37 0 690 470 ; +C 205 ; WX 713 ; N reflexsubset ; B 37 -125 690 470 ; +C 206 ; WX 713 ; N element ; B 45 0 505 468 ; +C 207 ; WX 713 ; N notelement ; B 45 -58 505 555 ; +C 208 ; WX 768 ; N angle ; B 26 0 738 673 ; +C 209 ; WX 713 ; N gradient ; B 36 -19 681 718 ; +C 210 ; WX 790 ; N registerserif ; B 50 -17 740 673 ; +C 211 ; WX 790 ; N copyrightserif ; B 51 -15 741 675 ; +C 212 ; WX 890 ; N trademarkserif ; B 18 293 855 673 ; +C 213 ; WX 823 ; N product ; B 25 -101 803 751 ; +C 214 ; WX 549 ; N radical ; B 10 -38 515 917 ; +C 215 ; WX 250 ; N dotmath ; B 69 210 169 310 ; +C 216 ; WX 713 ; N logicalnot ; B 15 0 680 288 ; +C 217 ; WX 603 ; N logicaland ; B 23 0 583 454 ; +C 218 ; WX 603 ; N logicalor ; B 30 0 578 477 ; +C 219 ; WX 1042 ; N arrowdblboth ; B 27 -20 1023 510 ; +C 220 ; WX 987 ; N arrowdblleft ; B 30 -15 939 513 ; +C 221 ; WX 603 ; N arrowdblup ; B 39 2 567 911 ; +C 222 ; WX 987 ; N arrowdblright ; B 45 -20 954 508 ; +C 223 ; WX 603 ; N arrowdbldown ; B 44 -19 572 890 ; +C 224 ; WX 494 ; N lozenge ; B 18 0 466 745 ; +C 225 ; WX 329 ; N angleleft ; B 25 -198 306 746 ; +C 226 ; WX 790 ; N registersans ; B 50 -20 740 670 ; +C 227 ; WX 790 ; N copyrightsans ; B 49 -15 739 675 ; +C 228 ; WX 786 ; N trademarksans ; B 5 293 725 673 ; +C 229 ; WX 713 ; N summation ; B 14 -108 695 752 ; +C 230 ; WX 384 ; N parenlefttp ; B 40 -293 436 926 ; +C 231 ; WX 384 ; N parenleftex ; B 40 -85 92 925 ; +C 232 ; WX 384 ; N parenleftbt ; B 40 -293 436 926 ; +C 233 ; WX 384 ; N bracketlefttp ; B 0 -80 341 926 ; +C 234 ; WX 384 ; N bracketleftex ; B 0 -79 55 925 ; +C 235 ; WX 384 ; N bracketleftbt ; B 0 -80 340 926 ; +C 236 ; WX 494 ; N bracelefttp ; B 201 -75 439 926 ; +C 237 ; WX 494 ; N braceleftmid ; B 14 -85 255 935 ; +C 238 ; WX 494 ; N braceleftbt ; B 201 -70 439 926 ; +C 239 ; WX 494 ; N braceex ; B 201 -80 255 935 ; +C 241 ; WX 329 ; N angleright ; B 21 -198 302 746 ; +C 242 ; WX 274 ; N integral ; B 2 -107 291 916 ; +C 243 ; WX 686 ; N integraltp ; B 332 -83 715 921 ; +C 244 ; WX 686 ; N integralex ; B 332 -88 415 975 ; +C 245 ; WX 686 ; N integralbt ; B 39 -81 415 921 ; +C 246 ; WX 384 ; N parenrighttp ; B 54 -293 450 926 ; +C 247 ; WX 384 ; N parenrightex ; B 398 -85 450 925 ; +C 248 ; WX 384 ; N parenrightbt ; B 54 -293 450 926 ; +C 249 ; WX 384 ; N bracketrighttp ; B 22 -80 360 926 ; +C 250 ; WX 384 ; N bracketrightex ; B 305 -79 360 925 ; +C 251 ; WX 384 ; N bracketrightbt ; B 20 -80 360 926 ; +C 252 ; WX 494 ; N bracerighttp ; B 17 -75 255 926 ; +C 253 ; WX 494 ; N bracerightmid ; B 201 -85 442 935 ; +C 254 ; WX 494 ; N bracerightbt ; B 17 -70 255 926 ; +C -1 ; WX 790 ; N apple ; B 56 -3 733 808 ; +EndCharMetrics +EndFontMetrics diff --git a/Build/source/texk/ps2pkm/tests/Symbol.alpha.hex b/Build/source/texk/ps2pkm/tests/Symbol.alpha.hex new file mode 100644 index 00000000000..53999742d7c --- /dev/null +++ b/Build/source/texk/ps2pkm/tests/Symbol.alpha.hex @@ -0,0 +1,29 @@ + +character : 97 (a) + height : 22 + width : 24 + xoff : -2 + yoff : 21 + + 03f000 + 0ff81c + 1e1c3c + 3c0e3c + 780638 + 780378 + 780378 + f003f0 + f001f0 + f001e0 + f001e0 + f001e0 + f001c0 + f003c0 + f003c0 + 7803c1 + 7807e1 + 780721 + 3c0e3b + 1e1e3f + 0f381e + 07e00c diff --git a/Build/source/texk/ps2pkm/tests/Symbol.alpha.pix b/Build/source/texk/ps2pkm/tests/Symbol.alpha.pix new file mode 100644 index 00000000000..fe8cbb32c6d --- /dev/null +++ b/Build/source/texk/ps2pkm/tests/Symbol.alpha.pix @@ -0,0 +1,29 @@ + +character : 97 (a) + height : 22 + width : 24 + xoff : -2 + yoff : 21 + + ......******............ + ....*********......***.. + ...****....***....****.. + ..****......***...****.. + .****........**...***... + .****.........**.****... + .****.........**.****... + ****..........******.... + ****...........*****.... + ****...........****..... + ****...........****..... + ****...........****..... + ****...........***...... + ****..........****...... + ****..........****...... + .****.........****.....* + .****........******....* + .****........***..*....* + ..****......***...***.** + ...****....****...****** + ....****..***......****. + .....******.........**.. diff --git a/Build/source/texk/ps2pkm/tests/Symbol.pfa b/Build/source/texk/ps2pkm/tests/Symbol.pfa new file mode 100644 index 00000000000..f8671f45af1 --- /dev/null +++ b/Build/source/texk/ps2pkm/tests/Symbol.pfa @@ -0,0 +1,1099 @@ +%!PS-AdobeFont-1.0: Symbol 001.007 +%%CreationDate: Wed Jan 17 21:48:17 1990 +%%VMusage: 28489 37622 +11 dict begin +/FontInfo 10 dict dup begin +/version (001.007) readonly def +/Notice (Copyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All rights reserved.) readonly def +/FullName (Symbol) readonly def +/FamilyName (Symbol) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -98 def +/UnderlineThickness 54 def +end readonly def +/FontName /Symbol def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 32 /space put +dup 33 /exclam put +dup 34 /universal put +dup 35 /numbersign put +dup 36 /existential put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /suchthat put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asteriskmath put +dup 43 /plus put +dup 44 /comma put +dup 45 /minus put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 63 /question put +dup 64 /congruent put +dup 65 /Alpha put +dup 66 /Beta put +dup 67 /Chi put +dup 68 /Delta put +dup 69 /Epsilon put +dup 70 /Phi put +dup 71 /Gamma put +dup 72 /Eta put +dup 73 /Iota put +dup 74 /theta1 put +dup 75 /Kappa put +dup 76 /Lambda put +dup 77 /Mu put +dup 78 /Nu put +dup 79 /Omicron put +dup 80 /Pi put +dup 81 /Theta put +dup 82 /Rho put +dup 83 /Sigma put +dup 84 /Tau put +dup 85 /Upsilon put +dup 86 /sigma1 put +dup 87 /Omega put +dup 88 /Xi put +dup 89 /Psi put +dup 90 /Zeta put +dup 91 /bracketleft put +dup 92 /therefore put +dup 93 /bracketright put +dup 94 /perpendicular put +dup 95 /underscore put +dup 96 /radicalex put +dup 97 /alpha put +dup 98 /beta put +dup 99 /chi put +dup 100 /delta put +dup 101 /epsilon put +dup 102 /phi put +dup 103 /gamma put +dup 104 /eta put +dup 105 /iota put +dup 106 /phi1 put +dup 107 /kappa put +dup 108 /lambda put +dup 109 /mu put +dup 110 /nu put +dup 111 /omicron put +dup 112 /pi put +dup 113 /theta put +dup 114 /rho put +dup 115 /sigma put +dup 116 /tau put +dup 117 /upsilon put +dup 118 /omega1 put +dup 119 /omega put +dup 120 /xi put +dup 121 /psi put +dup 122 /zeta put +dup 123 /braceleft put +dup 124 /bar put +dup 125 /braceright put +dup 126 /similar put +dup 161 /Upsilon1 put +dup 162 /minute put +dup 163 /lessequal put +dup 164 /fraction put +dup 165 /infinity put +dup 166 /florin put +dup 167 /club put +dup 168 /diamond put +dup 169 /heart put +dup 170 /spade put +dup 171 /arrowboth put +dup 172 /arrowleft put +dup 173 /arrowup put +dup 174 /arrowright put +dup 175 /arrowdown put +dup 176 /degree put +dup 177 /plusminus put +dup 178 /second put +dup 179 /greaterequal put +dup 180 /multiply put +dup 181 /proportional put +dup 182 /partialdiff put +dup 183 /bullet put +dup 184 /divide put +dup 185 /notequal put +dup 186 /equivalence put +dup 187 /approxequal put +dup 188 /ellipsis put +dup 189 /arrowvertex put +dup 190 /arrowhorizex put +dup 191 /carriagereturn put +dup 192 /aleph put +dup 193 /Ifraktur put +dup 194 /Rfraktur put +dup 195 /weierstrass put +dup 196 /circlemultiply put +dup 197 /circleplus put +dup 198 /emptyset put +dup 199 /intersection put +dup 200 /union put +dup 201 /propersuperset put +dup 202 /reflexsuperset put +dup 203 /notsubset put +dup 204 /propersubset put +dup 205 /reflexsubset put +dup 206 /element put +dup 207 /notelement put +dup 208 /angle put +dup 209 /gradient put +dup 210 /registerserif put +dup 211 /copyrightserif put +dup 212 /trademarkserif put +dup 213 /product put +dup 214 /radical put +dup 215 /dotmath put +dup 216 /logicalnot put +dup 217 /logicaland put +dup 218 /logicalor put +dup 219 /arrowdblboth put +dup 220 /arrowdblleft put +dup 221 /arrowdblup put +dup 222 /arrowdblright put +dup 223 /arrowdbldown put +dup 224 /lozenge put +dup 225 /angleleft put +dup 226 /registersans put +dup 227 /copyrightsans put +dup 228 /trademarksans put +dup 229 /summation put +dup 230 /parenlefttp put +dup 231 /parenleftex put +dup 232 /parenleftbt put +dup 233 /bracketlefttp put +dup 234 /bracketleftex put +dup 235 /bracketleftbt put +dup 236 /bracelefttp put +dup 237 /braceleftmid put +dup 238 /braceleftbt put +dup 239 /braceex put +dup 241 /angleright put +dup 242 /integral put +dup 243 /integraltp put +dup 244 /integralex put +dup 245 /integralbt put +dup 246 /parenrighttp put +dup 247 /parenrightex put +dup 248 /parenrightbt put +dup 249 /bracketrighttp put +dup 250 /bracketrightex put +dup 251 /bracketrightbt put +dup 252 /bracerighttp put +dup 253 /bracerightmid put +dup 254 /bracerightbt put +readonly def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/UniqueID 27004 def +/FontBBox{-180 -293 1090 1010}readonly def +currentdict end +currentfile eexec +a8686bfddf470dd119f86e1b8e5b290ae7d910e9317a36f6768d8de89e7e +d5b845166db0e18e3fca77c6e789f2ac61e3ba2248c0c4ccdb4c50344889 +3c2a909c36546b763088822eb34d1051d0ac662d8098db11f0a527a679e4 +ac03347df4319a689d7d65239e8502b5db9aef94cd6cebd07cee5af22db4 +c8c628a982cdd10c4e3b04736d073f90eb0b840b42ace3798961326b5fea +769b604e99b2d79dadb8b7ab2e769c4efa129084478f38eb206f8fec149b +0b6e326fc4c76c32fe3ea5164f588b21cf83c0dcb1548e4dbc4192fa8187 +5d1968283f0a8974422b2af5ccb6cfe6097902c0355e57be4514166ff58f +ff2b47cbda355099fb31aa17e4e857dc0df1b653b9cc8a9a45292d41e3c8 +8ffe4036018811bf2fc55980ce1a4fa5161e167769c4e289627a8d3083cd +52b08be6b1531c322f863631069f3a3ada3e2076bab4d62374eab5672cbc +8537bbd7ed92c12f05909c25dd36e05b289b91b1fec65dc210e67c167de0 +44de197b03df0817a5f3faddc8d16ceb8b1be53b6765b6e659bf54d91981 +57c966649a774ee195c10eb3659115d7ad8bb83114beea798c45dc84db92 +b20e757059ab45e275c23f1be30b619ac8486127cc0bad1eed3eea4b7e86 +4e58fdb2a98ecf8b0380d25e481a4304e232e4e346ba781e0e68b0cea3f1 +0ee7b2fce0b144ffae9bd297b2506c7da44474845893e06c490f0eb2ffeb +034a75292e59cc038e75e1dd9ad080719647fea7dd00f7c8913d92b9282a +1765a2d357557cb0de7c0da979954cbd77694f99ba39246adb7495766058 +fb8a8d4151a4a0d0f740d776fa13c0ae11be76ec06f9b367b3006ea681f6 +1f640c3640a78d0c7ff521d477981e23e5956baf42252463fdbec49bb560 +a9428d248b0c5250cfa2a49cd9dbcef73123c13ba382d3cf6a7b8a8ca319 +1d379a659f0e2c6e9cafe9da2ac074f622e397a2f7c73347364ae249b11a +e2c34aa7f0d27b5f35d548d5ad1228597dd16a478c901d3a34d82c32da87 +78486072ad36d8b1903689123f99be020d41cfa9ff521d1eef52a83f4b6f +daecaeb404e3cab31da47ebe2cc011e458d64a6e2c5c1348b91c0ae0d799 +9c35ed72eef0db90ff2ec2c242328ace7bbc5ccc5ee7998e27d365ec0937 +b6a1d0581d6a28cecd8cfde5aaa0ab1d43ee1629ae7a70cc0171ca2f3d2b +becc6cd9ffd9858f4767cd3338250c3e467d21efd5d365d7b28d3106dea9 +c0b68a52ebabf4b463cae58656a0c6cd0d56cb1e9a2faab1dc4696600ffb +c2039816785e3dfe868e181378031bb9e8c502cc2ff6a457c458ee19b123 +a175c89ef640111781540cd9df8903ee6fa23d54262274559148057e9adc +e2cc011470c1c168128822ac4f22b2b37ce77a358c9a7730a948b9d9bad1 +3f78e1d2cd986d9807d720243dfd898657943cefbce545ee38325e803c5c +d2b755fa168ad5390b54cb33b9e0762fd22b13aa21643c022d40e697c8d2 +1d8c44d89f32a2ecd1992acb064881c5ebaa138d05ee0b4d302dff6f5bf1 +271174f933bf4f7162e0f80833dce8059bdbd626ab7e6d7498554fe49190 +43bb14842d91c888c0a68354c5c5539a82079e393710d408ec09dea09f95 +cb8fc26260f2c49ecf4a2f64c34b6ee86521f313326f38d12578f96b85c2 +649725bd3457eb8b156f4c991022e9d3b1e3c07e9519dbdb3032e90445b6 +e7e377278a37c589fb9b4cbf72a100dc7ffab7cbac93f3f648007948aaf6 +ab06d371f10ba0f9240b1a24c9c3f89c29fdc5b57dd99799ff4f68274159 +9d406456eb64e2cd4e02d80cdf90f0a7df99214b1111ca43a98301ab543d +25084c6e7a4442aaf6f599fd0e3a02996c15700eb2e8389f33a7479d991e +c67abd43893d113472b19972ef0550084f40a3e49cbc85c29b1ba3834e81 +ed3c553ce6727ccc5d0a0b2e0fc9a61624d916cfbf803360b278a8a9c4e4 +5fe435fd830daeb63879cd7ebe6bd5e3c4f6e516b24ba18038b3a936f74e +2430149a0ffdc466bc93b4b8e9d7df66d6d09c2301085aa2e37f75728e29 +1e3557000ffeb9a47657d6b01e3f24386e45d356fd6eb98599b611d73cbe +88c899e8e60efa6f99fe7e12d3039aac12f385081e4e95c8d833867a8666 +d5bd2153cfcc12187d7aabd79203e914ea680b4c977cdc9c2286f9a47d8f +0378a687d1d48c9bee2ca64806a93961d644b4d70da7c173d5bc3213f8eb +d3cffce79f20deb618299724865c5d594b7086b5fbba9d68f365aea313fc +2d7c0af3dfcc007cf7c2b7647287f4e8be8255f2532796b42e8ef17c74a5 +921763696c8236f7902969a664ddcf185c3bda785c108fc48bd6b7d4dd17 +bf4964caebcc06392fda130c67d2b5dfaadf7c727a947e61725fcb8452dd +33819fa3debd761a1769d3b186911b7927c0d49d5e7a2b53e044c784060d +9600c2801a8095bc9985586564b28fbd26870ee6c0dafbc40857a44a606d +dd95ed837e5799730f9d5246e3eaf6be8a37dff0901b065753d3d4d3a68b +7a87af6b0e137e1cc4f7125479fc7ce782cbf663c7b858dfaf98c3f53957 +15de7e2d6a620e29234da977490ceed8cb72b49e2b5bca3acbddf342e184 +bcc24b3da9a1c234919e35d9cf53621f383f85c28655044ce05191ab0cd8 +7ca61e2dcf787237a162a93816bf7c5139d16ee799efcbf3386bcb9dbbe2 +3b5c52cb34eb7207aa39403001c86122f5b32ab35b32d4bc391955a3c84e +896e1fa498aa99cb980316851de4fd4c5884d8c55ea10b791c68bd908d4f +aa1f641a982bee3ecc433f311e28b4ba46b10fb9450061d5074509640a2c +6e3bd08c10f4dc99ee2679700fdb3074e493e8b9ca673cf12f336b85521f +c81f904afce3e03446bd8d4ddb4cd33bf24cf9443709b94aa6ff54809baf +42eb9966d68f64d1958d36e170189462c484decc1a9aee047aff84a75296 +de9f230992046462a9a3d821f31924f6e063b23edf20590c2271ea26f96f +5c8234ff0f2656506710d15387dfe9402a35fac32ce9bd709736adb09802 +239e6dccf3bb89e677e7fa2347f693a47ddbb82f6ab50796227f74a1687c +d405e590389a2fa3a12494e637d69798722a4629f29d5f8ec0c28cd6a9d6 +c3613b06a9b48170dfb844290618452fdaf4258fc231836fa07eb842f496 +3d7f4baec587f7f8e1aa1ef70d02fce05d72b987639f416fb6d18abca742 +976bb4ae3cfb9bd8ab03fd01a267d2ca968014e648d68bf195855ad77bc9 +97f33dc586892d270f7df2671868be008921d9bab6f6cb2d3e2909f1ceef +7f62586c44ff027c28d1b285d1c409c0a6f68e33684bcb04ddd8e8d338cd +ecfc68488e9bcd337047c2135d66b24644a4fcd8578fa7d21001773db210 +6e989597faae907aa2d58b28357e6e2478bed2d0660947227ca40e089050 +14401885bb6d04fb705bd7ef86e51437f0f01aecc60f1bd71d480504aa20 +2d31e1e3de1f1103c68ae43948d25a4c34bc8f274fc38b4b1785a8e5bb55 +c458b4399b817db03be9a37c4f93cb04cb3d96e2ff74cca331de6080da74 +57eb89b94a67334119f33abd1273a16a440bf2503c7f412706743e880531 +43048517dccc0f0659d9fcb65808f260c9cee906c80262ee2a9f9e6c2aad +b36cec10145e641a0b1240584bd2e082b404778a8f335cdc4d2523e67fc2 +7b7a9f4e91eff110ff727d2af7cc179188fe799197ea65527e8a763e289a +8752072d43b427f86bb7b4a6395f9d787d34ca8fde4fb9a9b140a343a9a6 +3f7af293ce1a6f54f5bdfca90b7a30714ccb880b6676b50c5e3547a383a5 +1528157a06c8dbecd116885e5d3690d454b0495d14ae65ddb7d0ea5778bd +90311442970aaf33f262a13bf86ba493fe947d27603651ac8b1d04ca5fae +8f28cdf53203b3e691675407254ef6275a6da6ce9dc274c3cd492ee4d846 +ffcab2d2d35c1401727b0dcb170c77546e0d79823a26d2c5e14d1f6d1319 +f4435b76fc3891d7c30ef28b0a16ddabac526f3b51f8b89708b27014a84f +5920f23e6a13e8c06aa5692c01d38872aaced2a0410e865619348b96d153 +a51d41c62f1d1206f422ba739299333656d32791195c9b87eefb1abc2bff +3ea3af85cce2c3df1d6d7b0e01ebdbb0bac3033a5252ca06aea1c21201b0 +7fd8e5f7fda300de7c7f689836aaaed413b5114e0e87ad0d8f236382f388 +dc7a6e0d05369713388a2fcabd1b98468be00618077a00a4a359374cb8ed +22513b15304cac497830a9a4b6c5f16f6b3130043db3d7367166e455fc5f +ffa2f27d832015fbc432db0776953fc30771dfaf50995a60e0cea496759f +f4260f807e9fb4a9e8e0292d714eb61d820a1c9c67ef0b08d5a52d362c12 +4a75112bbf2b9189f3a605ec592012abd7a3c27f907f2d521cb9eb27768d +eb8388f1e872591ad29b41053db67ca08713497dba053be52d997b5ed0f0 +bd1246b0fe4f13695138f3ab7646782174647a7f27d88b0368cd81dc0531 +93b1daf6036e4e6be7c846bf0f5350c414629b45aba11c62b5d5e9adae9b +57474271636efd71446bb26a275bb208f698bdc2d9905e30e920326297eb +f6ba9092ac2000b5c937edcf0c8c79835ab722a951325867c4f17115a821 +4241b658d4aeea5d4026747c789f84b60e532d30ef8d8712b8e20439e78e +b40f6153076b572816da799a60f4ec00220d3c111c695e58d005e4a64279 +f33e5a28f4e0a366e5490469cb7632a6be0b5f087ef7c08bb801f66d29a1 +8e2b8b107d4c8aaf2d4875d97c085e771e2e864fb0055ee292eb53b07834 +eaa8b71e6c0b1c65df3b864e2014022e88816e38a5629559893fecfefd8b +fac67bb993a30a42d9c124f66c296294f26ba316b5a7093c3439c0e1d096 +e45dae1a6c747daf9edee56a0bed1f95e0f7470080614245c1d59830f075 +4448718ce6810d8631f2e072802d66fab9f9d52ff1f1de8a695dcd371c90 +85fd5f465befe96c894e8ac0cb58836e9bc3e3f3f0d78404c84b91533f61 +bff9d0aedca8511d9bc30554e043f307d4360e371d2fde541f77b6b415f0 +54d257980975602b6df53bd99dc3923b96d3f9e4b3d1b29865931093a73d +3b2fb7aa6cc6f5c3db794c6909faa3e83673e4d94b506f33ca6a9e5b797e +c486f9bb84106a4a85b3e850def844550c7eb5c128117da5e8da50ddbc3f +41dba4d7b8a2945850f164d71dfd95f65fa980c2887d9da47fd4fa0dbd00 +5b5e677e969dec3860ad63781645dd8dbfed960d59d56994665ebf62e152 +4e6c12a6958d92bb156243e204368e13f406084be068d594fdf21774a1f9 +c3d3fea9ad298ee7c9ff47e27064cbaf84d7fe2265e953cd353da669ef14 +482029840a776f9d0afa8bebd2a636717e7eba08688d93e44e161a696d70 +c9ae0f702268f3a13b58db17ece7a3dd600cb6493c7a1684c3ad66044d52 +912421c39f6136471afbbfbde4cdffb5f1ff72ce1ecb208a236392f5b62e +f92bc2271c5fb8504b386cb60b9b1b9e3699b2c1b53a4b92b492818bd004 +f17db76dc85bd164a96a77ad5a1a263d6affa10264fd17334f1cc89c4f95 +9345c182765f60135a4589093b45d0ce523645ca4b9103e9679b264c0602 +e5bad2d6e03b1d520bae2f4b8f06e50352032445f790b021a44aef0e16d5 +06dce9251834ea125177b46a37cc3c856b94ebe362de717e8b8fc6ab3c88 +d4c618115e56d3e8e4e9f68f816807f1e06b2c9ac53e44c938d3026492b5 +3e5489f328ef410e46b817ce3649ad8046ffd2c163c4ee6491ddac639877 +3f82fe4b0c55a695bbd98414b42e03dfcb152a1590802e518b3bb31364b9 +7f95cc993c08c53ea8b3c0826a468a61ffc8134db155874c5166f5bae260 +e6d8cea4aa701d8c33ed4c9a04761b2e51a865a9ff88fdb67e9dac28029d +4438c38ce12e0e697b68b75200147589599ce8a5706355e2a952b58c1a77 +5b1733323a14b591bf7f67ac5746ed1064c7a0a507eba49d161bdd06a3fa +6c82e40188119661121732722d1926f836a7f54db2928ead28c9e10d3995 +9c98245c8002edf97735c4a8fdb6abbf8fa2a2374d46553f964d6a1fe112 +9929dcfbfcaec32a22e535a78376168436231cf19323e4fced6ba2e00c07 +e38120cca376d42ac150c47d00b62a3159a6164a5d0cb6aee490fd31f7bf +0676d582e55e6f5a119c1a2b5aed0f79e941b98e45aeef9df57395994aa2 +2682603ad7f4f4b4e6dfa9f1b7dcbf8b516566115191112a9d03a835be9f +cd7f6c165431e3583e9548d7ec93d5de800a12651e83780030421de60be8 +9f35edf14cc8f44b384d3b60cf1dc0c6bee7510de78a074099cbaf218cfe +74780fdbad5dfd1e611fc553d85c4f95dfdc13021d8cdd1aa3c2862b1352 +81c25b9032240ffd6c346699b7aac0dce23c71032dba631948586c102b96 +10371a2cdfef7e4c29f266c013678c8a5803a3060c76e4ac7d39b633f13e +4f53ba8eae2006fe1eae01ca235f5a62119871dd78560131218cabb47f53 +862cc5c0fd6962fc3eb0cc4bac7fdedb4aa80748dad4941e7663628397c3 +0329efc42c9818eafa8dd6b71d1236635cb73fa8e6a245643a2fc5436b20 +0993293b062d409497d2983a2e3e8ac1f02debdafc87a1f428e2c2029ef4 +53dec66f9d71e80e2105a3f0750375c54a35edec553934ccf6a21f6c0ec6 +42f89b66f7275facac47364cc288ecb4af118fc7d431836531e4162cfb02 +328d43cc6d5cee04d7966b5e3580ba5ce14e2d0f763c4c3eae5664351415 +ad48e4c36c2d94b935a57c96841857f920234a9b371c9649bdb29692964f +c370ba384810420bb538ef4ff3cbe4f770898c9496229cc5cba246f38b07 +3f94904ed3f00a3e478668930b7f77819c73905310c9b8dcf76150055458 +8fe9e3a36acc59e433e52ed6d7e0fc9f850695c9c569fc00b3201e685887 +8be41d4de89375ff51d7b0c727178bf99a3ac56aa8ab328beb140755e4ed +cf7457688c673d43d81d108ecd6472153d35286c9b015d4bf4ceb52fc945 +b0d0353c1bfc3138f22eebda1258d4a772c9f6047a241a38e2889cfc4336 +9d60450a021b7d1a57305f652b6860b43f72f89136ccc3cc817f5ef2cb65 +3e149481c75e4051d770358cc5c14c9e5449333129ea5ab70b73919b2eaa +94851b83e17adf1b0937e1623383ac461dd61f853bb2a19148cf1741b8d2 +261815705f6ae9313e9a5a7aba0a893265c8732c4a80218113f5a7623685 +f0d475f4b7488a7cc54867c6f4269f21ae484f6ed719e917f1b412c69bc8 +b48120c7044c32b0c844309d2ae90f43c7940b3d5261eeb2ebaeca757b89 +640ee3effbbaff2877cf311a180de67f0a8df934aad92a7eace8c6efc4f0 +9cbc06ed609c96cf891473abe1362a4d9f95a5d37d789d76325eebcba638 +e6fb891f9d7413217fe184dc2218577fce1f22e5d40b55ada7cfd71b1eec +39231456df20ec121d6f4fa4e8ab3b291fdfce7286c10b774cb1ce7db9b2 +3c9c8322881641e3c6019e31334f2cc1d665cc479ad36c8ca694302cb574 +10bd789166ed99df4ded2ca40612b2a68c49b6ffc4c2c4ed667023711748 +a5baeeeaa20a1ab463c09c87b6f7f3901ecb0984cc23c24b66e89424eebe +4f07f811cae8b3136abcdc64f0319d4cce4f8f2cacfc44109d3ea2890d11 +802e6bc28bfb0adf428e92f8c8e302908e1d7791358fd3f5e02ae3a7f50e +ec45fa0f28091572c528fbaabbcdfcad65d66d8a7be76ecc58d5cb263430 +31d61a0d94e11dda5aaf9c4f66e4af19a31d29326ca2189cb61edfd36e98 +cc7e67aebcbff6befa0691f3f4cece202224d4d824884b845f664114b915 +1044df7b8f23c9cfc17127aef763f528360dbae912b49f194ea48b337c85 +bed117fe164030e19ed3ed6650ec283bc9b90a6702e719aaf72e3c79edee +6eb5cf68ccf74cac3747484809d3c8a1e8993cb543e7bf7b2dbec7e996c4 +5b6326095c2938cf3fa05453c7787095a236fcb854d39935ba4e1cd90db8 +1a871fa058165b045ed582109ad90c2092dfbf376d3f43523ac2cc336cca +d3dae039e02ddaed85e1d1428c58ecff2f1e969eaa1658330eb155ab33a9 +524ed336d1ad1b4ad4f09f25af25e2da4cca590f14fd18f1bf2de6649318 +5b54fa7db4c1b425f8a91af562895795746e8cfaee57f247ecb949924c26 +966145b848874a5c2731b8905136e8599ade111001a33b455105f4681eff +6186070ed30e43454ed39c80b2720b77572de8a977329d2dcdffce6ba302 +740cc1f4fa5b804644b0283a7e783238e1832d6de3e6d8a1b2834cfaceb5 +62ae004d98b7deb05436f547e189e3529cde322ae38b38be6be02cefb389 +c7b9432711c0b528b7516a8d9a416a112b1cc51a2adc8d96b0bd098e80b5 +d6ca55953591fbaf29ca90ff480fb9a8b11589cfe2a8f52f76e03cfd7f2c +eb497d2d51a4ef853dc69eec6c73ddf8acb29aee0167e103e8e0f0a070fd +ade75354b85b722d56fe6a8a4a827fa17e8f9b7e7282f85d03ed13dd9adb +40a3572188be0d269ca5574915012a6596604f77a730bfc7a10243379e55 +e0f155a002f0280f0bf8507c5439e33872e61eb21b1b90fa91a263475509 +1deb6b50774f0b3000acf9e6597ab7394d55feffbe319feddad4d7c5fa8c +2240ff827cbd391934e32c5c6933218eb33fe11dc5c27a5067cdcc434510 +8801f15e5b9339e654382eefe167926869f5b09e004c3d4478990f4df71f +3e500ba8782387819df65b7241d4f8e91c016399ce427bf970c135373ff2 +3320761fac67862a5a3eaff5d149fca9632445017e82ee8435b1f5205ebc +a0d86c5bd0fdafd794b5b4906684eedde0f75236a3cc78faf940723334d6 +d4807b4b84ec78149e3d70293b8b8a6e5b37cf09f9b955507003d4333a8b +b2e445962a326007d7cc23d17ae70e4eb3ceffd18eed2b9c1097b80b75f7 +eac6f9d34a7eb4ef04cbd02c60f0bcd72794562333dff3f94484cb7bc1e1 +b6ca1af53a8432ea8b4ffb87fd2f0cadf71931a6ed19fc8bc6d914b1a8b2 +633bf49929446174e580f5186099635c605dc1d4030b4e4019df73e796e8 +e41cfc84e0916e2ec637b4a86166e6fab41ac8750e2396641d9bdf1ceec3 +f448dc3d0b89a8bd33c0134fbb2c2e0395bb65c5fb243bbe2b22ed8f55c8 +bb8aaac2543f3352343717d97b71cdb22b5bf6fd62076fc41e1146533d73 +093dd421025e5b2e4225a9e47235fb30328774f0fd76b1362c85e69baec8 +7af39d8dfa4b3ae82ebe1bdf21f9cd1c20edee7ae5a17a48f84d5c5d28ca +a3a18a0408d8420071c9eca26b71dc618881bbce3d0968aae3762934261f +4cb03f26efeca6188177d804acfd250234474181de94fd711dbff420123e +db91df92997cba49f726b8a4ba43a3f2f6f040bed8e370afe031556999bc +9ca5a553effd814f1bf4f640cdea3406e34f65cfd625d9729701dbf02a03 +f7787e8c95dd08719c58e3b8a92c573381dc1392a7c49c2a72e796364d3d +117e927be69f9bb70b53e450797503b1f8fb400c580f3e4ed94863747099 +dc3a102c29b013655e06e8d0bfe5e12f5d8b8b909f886bc9910eb42e7b62 +d1218bd94d8a5b20e03950c0a5887d6729937bcea0679fb52ad29514685e +3e64c9e82e9c82c04f810cb5e86dae4cd7eea14041f1d27adf00526fde35 +9379ed1d0b7e06244ff354f343453fcf21514d8ebc5dfc005dfb9ca4e698 +dcdba07d0f79b129f2b71a8bf488ebf90e6ae748bc438fa5492e239dd4ea +fd79f8b52408a4f244efbba527e131e6ebf6da23fb43186dfd414ab02344 +76dcf1c1ddf06e58b5ce5d5677740b4e285d8b87cd04f6011b54c4d5c322 +3c17ca906e90dc6271c103b4a49cf2f89896987e96484b45fefc41b04c00 +d9a8de774d861fae63f8bc9cc2fba2317a5e951ecbccaba5aad95ea61329 +3f1da5e3042ac4ba95837fc844eccbb76cbca769ee049d9c3f90f5d687b0 +97379bb7679a9a12eabf3ef0036300b90f0722807f81a871118418db0dac +ffe28aae0c1031fdffeee2d3b831103fbbea005058b243be116dcc9729cd +6d088d0f9cb9364f89e942177ef74d0643db9c3301155db0a9ec75829673 +922b1560e69c151fa9325a00c84a202eb41b134203b092736ee61cf1bd5c +95532ed88d5b9b71e14accbc3dae675b52e49e4cf4c7580d13ddfbde33aa +91f1aa4ccd64af5a5475f24553e339389c8dfbc14a6dad602cb23feb06e8 +aa30dff60f3aa223bf5ab110688326a72e543f0d17a2bd5d33ba449e1b2c +6c4eaa0bc276a160c2a07a385ce22caff5c3aa7a5551196c48aebba6a3f4 +afd1cf8566eb6542a1ef37794ff98737ceefc0bb772d7cd07ad5a4302072 +bb172a5e82065e61d2aabc5411cc35a79cc0a63f29d7f62c09fa98b1e703 +825b2a9fe735c296dcf5d16adf235cf9a252e9538a30e38f67836cdca7c2 +a75c1b2657017c16f5ed7d125a3354289eaf233d52f082bb5d8f80389e8e +9d5e50e4ab869f8f29734aa2d3c06b11dcc569351d446e9e45408e41a969 +9fc3a7c0116b8a6603949de556a52ad218272f497251f281fcdd2a71ceaa +c2e9bfdb4c891e2d4a1b3423e9a8c30e3379756ee7e196cbc76affc12021 +a58d78151394692dd830c6ee1bd29149a37d9a45303a2ea3339b3bad881f +ad6aa15b9e7aed09c4fb27fdbb859d6ce02d1a1d3ea90f2939ed801beb0f +28f367ff5616f5b033970d040a411747ab706733752bf0c11217126324ce +ab6530e67324e516b56a0b80977a395211e1a7f32db114d1b621f7669b23 +a8a53fc327a8ca38592ed16715c6d782503d7c2973fb4d4cb11e2ea3cc8b +5df0dc8fcdf0af4ad28f18ddea460de623bb4f79e3d7a9345f47d555746a +c1d9eca2f8ebe594fe42164a8970c20aa4440d4e9a6cae89845edbc74583 +edcd312b4fd93911e8c9c5c4e0a127d1ca4a78f6f8ce93a4a6c571fb72ee +c0a73a194e246e5f9b6b8019be7ef975b3956ad798c64a580654943d6192 +d4b4f05172b7064e2c4782e7215265c5ee0c4f3e0331765a94273708830c +fa0aa2cb6a5bb230f433abd5aef8aab8f91603eb59c29b9ce5b54d8548ca +e59ad6e3609668094077006883d52967bfc43213ee7504d366bd6ab0fb3c +295c3adceae4803b8d723d78f6bb53d6391f68b5a76f17d15ef40987c3b8 +b1b3fef926a9690ce2147b648792f250d2db8ee80455cea46ada1ddda0fe +bf1b6fb4022fefa0c519b1d9793c5ed7dc0b0aa59c61a4cf3336679deca9 +9c4f2bb39b348b6bdd98bba8dc2d015255fa2684385cbafc8e7c2d82db00 +10b220d38fedb4255bfd65138bbb1016b53b04051a4c2d757ce0af776c58 +5313fc9888b79fe7341c271df06400b6a95edb836c45cf59d3faf312e015 +2278835e430e4b42aebf48a293ed6b789bf67edc92010fcc0fc9f5dae346 +18903f7b1251fc3f2d5eb5fde66f0ec1630e640568b1109eab8ca9f84617 +f30d4b5897c959db430132540cd1379f5dcb17658aa1c59dc6f509aec5c6 +24d225ef96194a075d9ab67011f10fd21d07434e7f101534e57247994d9c +16a7fec8416e59ec750027be6e2ac9258dd30147146c3048c9c93d16f8fb +b062ecf10f9e54b418a1fcf4ab24521bb27453ca57b5cc9b72c4e175edbc +8a876db42aebafacc33ba6ab66f028ce8d29198781870a7120de21eaeebb +aed44b65b24b837059ead5c5205d68d51a1506de9b51440774b57de55915 +fe05ba2e740c37ff24a077659b9fbb4a394a069c1fb33c50836287a28226 +c31f75903b44b25d3bccba417f46a8433da7744dc56113ace4a12c87cffa +60fee38cd9643cec30b1aee59d18e508e944c53dba216345f133513e9329 +9fa822780b39d049a3f3ab235314b4a361866a8957b3e4fc3991f2e76d80 +7e16d9dd47a6de200c036d3ab6567175251f6c8769dd0519d53434b98bb5 +e7051d83592febfcfec038d4265963be24aac1d495c4df853bbcca5ac937 +843ede788ca0e73249a06f7227c04796e86282572318f185226173d3a347 +b548368afaf2b80b1857848be4e7092e38a2b01360e3066dc9517840ec06 +89e93b4ac163d778556f67268034e5658aa79c2ad79d474118f29e146753 +bac0b74456787d73f19d2bd96b017c9a270d3bec637a666f8d08c63d1fc4 +1480bf974c50ef693cc995f92bfc61646ed34bb3bfa262dd8e6bb548584a +f3a73a4835ba8dc1059dec2083660b63356e30fb63f2b88e38bdab96199b +9730b28b51092cf9677247562cb407230ed9cf30f89d7556d0b8eb22979a +c7835f90a982ce70aa7b45d52cfbe97b434a077aa24d4aaaf674fe71ffb9 +0dfc5f18eea5a533c3cab25b5dcf08565447a4e09485513fe2347434b0be +57b79e8eae0e1a01dfc7222002c7a364223250b08a3f378447582edaa55f +bbb26a096542ee42adcea469ac07b728f33de035e3f5f1850dd772d75486 +220d731af6d26c41f4afdebe24caec68bbcb6d3c45b2ba3b1d961d2eb7c1 +404388865dc57d7fdbfc2edf5bf2b3f1b07dcb47837878abc49846e359c5 +73cc53ebbcb66e48e625dafed81f6548f17709705f513a7d0f34623f81b3 +6c28ee3f66f2c211427a1f0261faa0c5717a2f48b538fc79a40fba8dc99a +94e01d754d64ce6c03e299ddd366801e87446b9c263734e559aa8b84e82b +8d352cbd31c43705af067fe793b2572014ef5ebb7d4bd550aba0c65849f7 +9d958f225d85d29f40804518230abc0aeda63a594c7fb53e132e3f34475a +16b5a5903f210db4e88dcd27120cd8d7c4e1009bc75796ae2bff4de7ceef +7a15888afcc60903524c01cb4a905a0d40878202d381dcfb1a5adeed0f5d +ace0f724e120649f94a508c8af92417a88522f67176985626d5d80904c51 +60809063ff4283d029e8ae00a748f5a87b47558e2454185e1c6e6e8deb72 +d50793625f0012fe530b499532e6a099eb188378ff2031058d2c03ce54cb +15aa73fb9b43ac365d0437d9d738e4246e0d3b49d8471d360b2cf6963e72 +7c29cd37317bd5e49f0339976f5e9dedd1ce3c6838a6bc632cb3f3b87946 +39ebe5f5c76a7fea93142907ee6e70c404f89b5948904e531b8d2d1ede3f +3e495e110a850df56535bdeabaa476acbb05bea4d2ac4d1165f057bc40bf +bbbf7a3ddefa700d63531613d6cedf2ec5a6c99c83f2da1fe8d158e9c441 +a38059f327d17fad51f5976c7b27fc48cc3a179c414cbae5bf819abe5ac4 +ea5da1febf135cabc6a49f8078db4a6c64ed0fda651990151260eeae1d0a +a17bc1f1f95ab368572f1f742e6150028ed8d6232d2ee9650afb384de052 +6114497d10f994bf388cf16e8cebbb62334f9ffeaf0df3a89c50bc6a88d2 +7021d296e7920ebf10bdbeae0bf1fa6a0ef3b7c9ff1ace94d39bc2374789 +09788432a7c826e329dfd1fe2e05c7f36fcd9d41b16145e3c4aae1d08f12 +9643e8797e81ddc38e18ff6793bd44fd1f62fdf30e0902c99a8b4ac58bb1 +e2349dbe1866b5be28a47973645d7b3f3629175e324d50f3783e35bc0119 +bc11a38a8472a1c534daaf25f5b4072432252d5ded842be4b1ad5ea57db0 +964867457849162d5335e8c86562365fd833b7ae84535ba53c4db95b0ff7 +bc61122e0eccd8af40c3e17cffe0ea4fa12e1438feeb67e8d530cb0811b3 +54955e947a92be3d753428ff010a2a1c746461bc8ec2bf78a76cca0f75ac +0d65625712915ef3d18967962b8993082256214c408ea41866558b636ce0 +b453df438ee2642ce35a0c1f736c2788d98aab85992f842c492b3c7c11dd +646de00b0ae62a269f2a50854f2aba06a06e3e3ee42c1c65217bbe11db79 +3580fffe2f57968ac21b095bcd9fbb3d2756bf6231226fe63a2abf321dbf +b74b65c86ef514df6292c885a461e0e9db19eb2d153c0fb7960780de473c +0e672515f592a4836f62188c11508fa593d1f5f9e5682d258e723cb7f068 +1b83ccf0c14b4b789da54a747f892086d58eb2da4618d86898f5125fed03 +1c3e7fdc0856e12c65fcdb9f34f052b0f416be940c99853d77a89a136dfe +fa4d315125d05150c6d7755c66e6a84d0737074aed40104177149e8a2862 +1117f07ee708e71cbeda23673447e7e2ecc84ded1c2fdf40945cae38522c +4316c75706f52f2dba1a9d43e97babab6f9157b7d8cd08ff409024889216 +27b3e8a94cdff1de0aa7cd30029f7ef45a41902a8297256de2b91aded584 +d098019bae6e763078e9e7634fce21359e074006aacc89a1c8c6199da648 +dc880002ddae31f5a3d2594d41803bc86475884658bee7c7691726fc61b5 +5385fbd5ca9fab4142e3c765e568d42e8e358aeb6406d3e31c1659e89b0c +87f71bb7cdadd56d1aae187168231e375e8737e17c05208d5ffc3737a893 +fefd4da6f095e8de9340cbfd21bea1b0027afd7313a6d188315ef4d3caa2 +18b7dcc6dd4de6d569a0652f6115ab7cec90679da2735501f982a3d98cd0 +ec6ea48b449863f1ffff347523d3766bb67305d20bf0492eb2334a2c7320 +9935f4f35de5fc172cbb9431ab371c7f69e11f9fc69c9f0ad5780ddebc20 +3bf4275be7bf05c8801de5b4e5d007250346b4e159263031666571f87ce7 +411cc1d94ec0a4c65b2ee9f67f2ee39f70b3abab8e9911a38a014c4e839f +47d2bc47cf0a5c88a1da47c6f47cfa2000b0f5f36f9f7a182d6998c37308 +3df1c4beb464643b7bcd26056efdd43fd7d90f15992f3ae6fc00a080f1dc +d11bbb610a9809869f3712880ae4574d7de52c25fb8d56627e03acb055a1 +7e50f5862d3309ddb88353a85bccf98e203167107d8a631f1fbe87631718 +41e891b1cdedf9438c18264f9d014c0a99fba6c12974fe029d016b200a56 +ba8e67b5b4121de96f2141abe0338d0a1121fb389f3b7c38794e64cd5458 +e8ac4ead27c1aaf01d6e4f90713328249c8a35050d0c57c92c68615047ed +607bb0b2e01dafb143567159ee43013f7b51ad57bdf4c0e42e56029940f0 +d65d9a408a9d0d57d91e4fc6ae2b7061482ec4fdd62f842494e8b8a1c4a1 +4a65d4dfe80a8e12346e37a8ef583a034b1096dc0dce0498b464c0e3e6fa +902f805e2f620ad1cdee95d566d37754036c669fba48bcbf5a1e178720ef +3afc4499ab001afff896b3c2e5b4d691578ca26e1b7c9bc2caf84aab60e4 +1ee5c91559c7e1ea5f7f5e49f32a9eb00bfa1a5ba53b7ad7ff25a97ec81a +c3d6157941b69ce2e8d3c057d355874e85e626df6e0be7f5bd1d6034e571 +274302767ebeb3f362dd5e50fd850e7542fa920b015f276c5063eae79597 +0445431aea0987239853e77530b83d1ba630f003d0960f40388ac23f5445 +31e221b8b982352f6015b3e027d691fb7eb68b360d6846029dc69e6d9c5a +885781a9ff40968799b46493f675cf4455b1c4abf6ddef65a20adc5ebe0d +631a6018560df33eabbfd3fee26b2c4a158502978bbb70885f36c7b5f226 +f3183e8f978c7cb27094a947f4063106b3807c916ff00a6b488edeaa8c51 +9d4951e81e3c04cad9dfc80e882021978231f02816771baedf04eb25724b +901ff4d73d024f2c47684f09068e1c9137f0a2f5de2891ff1c02fd59f447 +f793536eb41bbba5fb1caf6185f6a7256b847f7c4c562b981e9d2fb06029 +8d16b7bc55ebde4ec18f48caa85a08eb0c24fc8f54922b774acd2dc50660 +9da8d87b76def4c69562c175bb77b5e2b21436692445fed298003382afb1 +1ee906908b3ea15f766ed5317360935c0cb9a83d5a25c5bdd7d4c9c89f1e +26b129f10cd26160e8b208aaffa5aa24f8e95af40e66077a4079d347f136 +7b943541c2d89542a78dc8731c195b5086bfa5cc8741ceb0c786e28a2a79 +768be51b726626a337d07021e4e662e3d88c93763a66cbb90452b28fd046 +ce6c4ac6e125c37b20fcc9de34f9697974603387bf6c6b0b800f00bff5cd +a260efcc62818f5866b0d917984c79e4f394e54117915eaad55b01dc6b3f +aee7c97ca5b55ab277532fcf8caee6e09b05f400022d8e84be366c2d18f0 +045677c5ccc98eb674e92dc13f0ef7e86e64c7928a8aa20e937eecb4ca31 +04a7244220d3ba68ac70066ffbf6a63f639f6830e34aa78f73d0d6a1a88d +aba0283f2382223c4527d447fa7997477194bbb673ab25071335384c849f +654ab0345af53d7c96f5c2ad635a9f1704158c4a69cc9037f74f83c1588a +321403a06e09956a4dd863a2a77399f4dd13abe0cdb7a4cace56d5526974 +291da8012c26558bfbad653f29efa176a2d9d75e067d3e62d62e46ee4eb4 +cd7596654ead0a57fe6b80294fc8f7414df81d09258ded8c4928818f7e31 +14bc99c93ee1b8a4b955d66f268556970964f462738dd33454e8ae8d397c +28e2871c2745ddb891b2fb43c881a043902e9aa0c6e2e049b090a04d744d +2bc3ac5673fea830691b036a3f7881a175cfb771076676081a50227f086a +27dc149a84ceb522e16a54a3669f00a02e6ae52a0b037ee0ee4b3c9a6f8e +4d9b1ca74efa2e29669fe3141b3d9d5e15e08d534e798241c8ceaa466796 +1261e7c7d7502f8fc6be415d18b5ff6334ca3817ba5478debb3b80cd89c3 +966b5416b8e52b062942746f0306d05d80b14de7955a0df79e88d65d02a1 +b6c36b238e44e86aad035bc8a0cd08acdf69831acb83b7d8a05db9ee80f2 +042ddcf1bf5eb388848061138bc6f08e100d1371eeee171542f649fc8f45 +a94bb8df4d0803cd51c0b2aeae6c203ee6acdaa2fd6696b46d99a564d397 +2d05a6262f16353fb549ac735537c616ffcc18141a456b4333b0d1f38aa5 +f48fdd2a10162010f35ca5af6d12d60bc67902bfe26f4bc5e7462ef42400 +df06fbadb6886cc29d45e431805cf86cda8d4a5f23c295f118790bc64ecf +9740ea83dc22a5e257ddff33e47fb9ba559fb4c7eeff0dba8692c5ccfcb9 +4d91ecdc1ced2d4474f1c4dfb969eb75abbe27b36fa47c0797b5cced1fab +d1589bd823737d2350d562d241bd266d3e488f2c1de700ec07eb5ffe52dc +9a7284314e5600eb812fc948874b08118c3143efa79442196ec391591ea0 +d01ffd1fa3a51908feaad02b402830ac414c26da1a0e15190872eeb8f163 +8da716486f1914fe6353b2487548ea30fdd14fc9b7a6b25a2c949d8ab5e6 +de8d21ef0c795e5fa28a7c6fabea50aedc95b66b7074d97ec409916e4631 +726738dea0d4d66c9df0a79680caf3b351ef95d4888e104cccdb9ee97160 +ae14c96b71be94896b4d290419bc9b0301729b22237289ef54620ee5e445 +08867b50a3128b2e8a53d33a501f466ae75b3fe05d47b073f8b57afbb3f1 +4326ab29bbde4d9e8954c7f99113cf766104dbae067ba02b702da3393e9d +7d236c92bbd5637d4863ec6545e8827cf8f094f23f5369974f1e296c14ef +4a1742abaee9995e3dc7a8e8c469df3b392b716c3a4aaacd801d17fa0c72 +d089b9e275f8cd065bcd3bcfe6875a03ee56ac64e1fe10307dbb2522fec9 +2eb25c296cc942360b38399591519c67aad6fbe733639bda24841588b04f +4cae97237055906a8e8b7962e1f1f89d68ebc30fcdc598a322be4e471751 +8a07efc28efc59119d5fec75fe2e7b6066627fc957c8c4265d0f497cc32b +b5342621fd58887c5ef6ecae52b1f137bfbcf6ec422c4148113dedf2b685 +71494034cb2ae19466123c60f9d651320bf6b3556017e58d73572c0b1983 +c6a2905e4c1e97b7b7ca6bc703eeb216a0ed382f375ea69af2a34bdcb296 +d4944992d6cfc10315e33e64fb7bd76d9b2bc48b7ddd6e84071e501c9663 +f8745473f74149d05dc9a3ebe1beababd8f776066e3b50cd58bcb93ff901 +365a62a28b65c7db8f0717563ef743637206d16d8d08b3b41da45e30b4b2 +3c10287f13c03426a55cab4c20054890d74ff74e917458313910aba8fd75 +78823f6437435d324b3f22f1ba509143af39f07fc1278310df068c0c52fc +d5d8be0b19718f0c975dbc2f3d217884d8e22b17d1fcfc8ce3305e25db8f +3bf0da80a564d51d227fd895f6131397b93d34d88027c1b96102b22df106 +b96b82346fb0b6814b56fb00957dab25aef8cfc08f34cfedae6dab39ffbe +1a34e35695f2b3c061f5f8ebbc2999e579867b2add78712a8c0f8d9ba80c +d0a013bab8ce12352d66e694071d25f68a314d35d71e020f2df6e465dbf5 +c9b2ce35f68e06a3da16eeb6ed9c9f7d59e822dc87e066c18e41e2c976e3 +1cc14ad6833298fc00494c494da1335572a69806c7f302fb62b3212acd42 +32e5bd732be9733c1e8ffab05fe671cbe302599ad14972cfcad413f2ddf6 +adc786815f4b884c537619722ea3371304a902d2f0041f7159bc079a4636 +d70125b0f63429c901530dab3c99ad7f1b07132d4051ca543c578a9fc20b +1b5fe1d5a2bde2b2665a4030d1d3deaca3b4b2484c73bfe3ff38edc1ec24 +cf7c9cbdb208da62eb0ab921d1833dec9005251181125d1b4ae35a8c7e42 +5cfc523f649c9699a916747bdf6f299ca914446943f5ff2087288ced2f0d +e486b761f1f8cd0e05f0ec2b5011a60d0b1001a1281de32d9facb15b0064 +c1d9e29a8dd04e8d721c3c499ea8283161213e4ae2a2712ca2c1820caba7 +dafe076d94488b625c2caf76de56b7684342156758656236cba122eefce4 +009fffa5e4fb66345c1f3c574aff543ae6bd0990fe7f7b55b5d2fb9e01a5 +405b0e125ac24c5205afba4f5bf091cbd3b71a5716a55e72dfa5044decd2 +0f26e18f143f51727806c9f34a8fcb32020cd41400f7f068b332e993af72 +57ea6c49c04bdfc7ebeaa09958eac5fbcdd367eabdf5b23689d0fdba5230 +091824139d362e484baaf7cda2a50b849df3842eee52254ebe957f03d81d +cc3ce52d999a162252cfc5a6e45fd7b72179229dec5144c304c059274048 +a0e03bfcbe449abdb7b96a8620ef9691bf75c6ad40bfd454a465713fb670 +05cae613fcfb8fc4ec29ff3c5f8b5612492329f7965e77f6295e209de448 +d2a117baf2b8b5414442c8c3d9d8c64710288aed628c0078466551888849 +7e0fb1d09b5200585f8e453af16c7ef0496be96cf5a3c0049ea7f5571c20 +d29590db168bdc2909c2c5890b876a142cba5ba3401bb9e43de8eadff7e9 +261b3acfa13a12562eea1554b112aae29c1eefbca3d500ce88622fcd7e8c +9e1f6f18bee5c8953d53260329e5362365836ddeceef3270eb6120e2566a +ac43935f3ac71810852e05a514b5818697363e3dfe272315899dc6fb9b75 +7623bb4f529726d0a5051be3953d1f4fd34a97e1533fbe50ef1242aa7c7a +12c75f9ad9e25995a57ce60e683ac14327a8ede099dcbe6385c2e7f39fbf +431dd03d20f0fe86b585fb1233cb0a05abb00d3cff450d5852bb4da032b8 +b393c04886b904ded16f80032944a55d1c3f5b74b93bc43989a31cd88cb2 +b1d41a3b97cf4bd67c366c85fdaf088fe0e7169c6027ed2c084966972b47 +bb229b1c1b97a80661dfd5ddf40495984c015fff111c286c93dce15b2ff6 +2b7b84943784d9c7eadd8acd16e6c5228a48e41c985e6a8741a59de42003 +0819e38c82795040022ff264125d5d7baeee6304ab5899e6fbb16991a3a1 +20beadd0cf5bdea470063c338012fd96e71d836621e073f47fe8cc8638b4 +8d38a55c5efb752bc53a104ae3053c12e8570e820bcada8e7fec871be81c +aaeefa45065f1ac0a6cf00c42a50b038e67d5d7143d15ba7507d62637332 +d23c5813820115183241969cc05290d3af8b27a487a9c1f9364b69c958c1 +b1071905fee7ac1ccef5fba9d33ff266fc27cd59489b352f8634d2bb900c +ad14f4716f26c3421d39292ea926be6000870ca5325620ad3b1d8593011f +ebecadb881c187b73fd4b1e53d5edac00738d55e17cd40347a3bd648f799 +4a1d9f170a7887353a0ac7097ffbb8b215ffd63acb8b294d24b44cf84e92 +abee700b8334ff826c952f019f81f62d9982185d48b34dd1568909eaf031 +8c1cd0c1da64eed3993c0ae0251e1b165950d1e734564e062c35ad393fac +58d488d6825c9e20551d211837f93b833876bc055ad0ff49405e5d960a49 +e98d3ebb097cd1b5c31253b573f0ef5287a01f91a4c34549971e37948c82 +02f2b7e5c98ada831e67ea8c0d5693da3588f72e6c961e083c98218eca46 +b37fba941deda7123bd1a0e92ca2a1dbc20d369d19350bdb4a44da25f947 +470a1a5e053c2fba22e99fa32e0e74bdd51e69882fd2a43350761951176c +67412389d41279a1c7a4e9f995b09930dc28a1d75359e5acad9c5a703544 +ce4961c39755d94db1c74d845869b78be8bf6dc97cfd2ed0bd187290abb7 +7fa806c8aaa2fe46c17c05ebc6141adbe4efe456743ea5672cd946ac45f2 +fd74712b4f36f962db5fc54afdad2e71ec2b034b6dd69f39f0acfe5c2c18 +07e4c60856b79931975f87020151ad0c05f2c6cff5a5bb7489f8cb6e8118 +6c0ad85881a4c159943fb53990cab8914a0d096a14bff414e2e9a31648c3 +d7dac80142aadfc3295f9cdaeb84cc5ac885f475acf94e6cca268a9d23cd +705cfb4c1a14e1069d449967f58051f3bf54d19a310afcefc1d9a3242c9f +bcaf5d7793faefb08214fff4535f646aa7f1596378fd86136b4c08c3a863 +6a2a5ebaace6e99390201f9ded66507e76a6f031fe1c3f81b6d9f7a59ba8 +c70c964e1583ea48460ec7dee4b738b28b6f3a03614554d9ef7b9f6b7202 +36e5d449747799a242ef96fd9de4bdb7059ce3053e02c7aa9e24536bd3d2 +1aaaa5884f7064937fa48653ea39a3e6e1401fd96e97d6aa15eed15d77e5 +80679eb37f36f9bd5736a036a308cb06ee20cf32de82a3cc4dbfae50c296 +642963acd7adbe3eff9463f69f976aa47eeaba0e88258a4ffc4f0933af5c +8b5b5ccf51a5cfd83f96defaa217f5b4450492b146a0e1bba99664b7f484 +cc1a13c5d31779ef3598ce57a7f2f98851711d3447dcf54bf98aa2851be0 +1bb5372601e5986e6c7af78ed12642418c3a126db1157355f3a9e757d9a9 +27109466de9f4cefa15be737e6fee85313e4ab2522b8590dfc9136c10353 +cef0f76faaed3bce8617438a6ebc81db83e948d85bb231cda96710ea8db3 +fd406900bcdc73a75a78cb281ce0af94e574d6135ef05bbedff72a333ef6 +7e1cd73f1655e4c445919d87baab3cc1805691e80c3a16546d9b78357a60 +d516a53c084fa1b044c7b98e5a749e609e565b38231e6082d82e0f503936 +1afa972be4edd7eb44fff1b2c2e62e43d4e9b867a753cf9437b540f81905 +c0700f33c390fb06cea8a5b5cf8ea3a059e70dc1ffcd5b984beb34522ffb +6b8e139d3c65aeaf10ee4510687f6f444b2eeefa7a9230eda603b20d5ab0 +9bd4ed89c94cfd636a40e19fef5f9cffc021e328753a4d94657f26041266 +e57b2f616e3ba924edd21ab5e0c112d50094df4953740857ffb9a528d92e +a2a82c128394a6ceeed3b0eefae0d56ba1257cf423cee9f5b6e44a31d92e +d17cca0ae2f59680dcc6ffe5402d4224de2c46731e9b431246e8caa84678 +cb8f88154805eb8afa1d643688056535471ffbe69021f8c14640705ff8a3 +ace43c6b8e6cd7a392d4dd587ed63b0d7556a509b1a04b057e2b64388b7d +b8883fd1fea4957bf1efae7eaf60b6cc51915d8469f4413900dd810adc6f +5454e7b23aca799d17f86fc6a940d72203099344101275c016e64ffcbdcb +0fc05207fee7dd3efcf8e229a91d1ebf848e35ea739756100730e52f1bc1 +08e4132ea49e67d72e5611c57fbef7016ea1e54778cbf78994355b8ce81a +cd4c73e242b7d1a047929dfbe50a005de1941b4da749a3ae9240610e1a22 +10fe35231fee309ad0dfb0c3fb7f37fc7388b10b9e0f94ebef8c1b371a3b +ae1ad137928431d7cfa80df52db47e3287e4490df35effe46b9953beea19 +e3f96058a7c9adb2f10b36ef37d68c77d8e8bf4381500acdab38c78b3bd2 +5cd1a24faa406c599970447c8286ae0ec57916948e609287aa930ae24453 +da1a159a797eefaa166ed9a7240b66247833a3518f3f95420a0b3d09116e +4c3b98e4efd8605ac502e4f905e575237153264b84511ffbe4072869737c +738fe243e487ef6e22f74116eebf09aa2aaf63ff491a3a31d72dd908599c +e9752a45671f74821e5acbb29aa871c0ea78a0c52a19d7280276156586ed +59b61b715b7bba3195df8d0fe404d35a27d4a024eac9a7dbdbe3e2f60492 +17f5eb6c513aa42badbeb632f61375b2f51bc2cdb6902973b33e41b1924b +2ebc1bb21ad24989d572b72c4a8c094f66b26a2f3c515782a285cab173a5 +901cf8a7c520c352e66006cb9ddd4f513886ad9041f5eca06edc316c378d +8cd37ebee64c4af3e0093361e4e1b490c14eab48282d06e443729399c0c3 +e82423cae476393d203448a3a66567068a6b9f7a59d950113a39684f7472 +d5633aaf0d1eae46cbbb4452e35d5bd9ff31671b7ad333834aa66201d008 +0397f60831c62a157b54db32f2bd616a9d06a64bec27449e46b5a0a7de1c +5753a48b1d78f7f3a08afe638519c9f9e35143c19664d07f879e305b3add +34a1784cce04ce12f1d207e8a6e6dc2e96e15bb4847b0c1fb126560912c4 +510c2bac1b97b453b63b2ef06c4013ab3a036c83367535699d38523fa142 +5fa884b9c4496d310381018ad155ae8a9776a60860a1a142aa6a08fcb298 +f41d9c09e80639f17322299de0afbb66008e3de68b870b14db13585c93af +a7a7453f103d934f3d97f26d1219203084161d3b5f0cd476b94734f24775 +5c1c537b3dcd97377bdf36b011070c185566890a4d94a5c2dac0f7a8b303 +a63a20a9c69bae5be9ef175e32d71ab9ea3b84a70b5aca09164e8ad904d8 +56537b464d84e0fda12bc3d704bc175ce278d5864dcf6f70ee0dd7a01eea +5fb5500c4c8e70cb536c3fd74303b9036804360f08d511382e9c24c607b7 +721f2d10b5b2da52d05c3e3197b20ca67335278312aff8a78a984d539cc1 +ad1283d79e1a26fd94272527acf786ddd470b839e725c8964f156a47bfa7 +8f39f09b8e66a27d68cf1813b87c4a53f68ede700f465fecbf1dcb4671e6 +8882d65917f6c5eb5d6872d20674a7afe1809ade875f1ca99e7e946b7ffa +cf55ba919901be74bcb76701ddb805e79f74fd9ab948e1743ce4b1928534 +dea3085d5cd3b810370b1c10bdcd6422133bfa5970599f7d6f0d345057d1 +1dd969a1caf29b540c509a7235b241fd54d180a126a22260bce48c6bc13a +5a2628643648c3de80db360c3cda13f242cb7d951cb125cf15e25a811b00 +fd462ce46256d79b0f76c3e17b136ff34c0396ebef6794c2cb8b5c8f77e9 +1ec0d38110d871d2d3016982c7569e979b65e272ff63c5fcecb615cc1e51 +8c4f1ad4bd3c5c111d78bfecde89e7cf39e3fd9e1e96da91ce67d84d0f21 +f07a4633229ef928fb3a1e0057672ec81488873471cba85db82622b66b7f +552ca4d5a8eaca181dcaeb1688075614260da43275b5ff9d3b1b857ff112 +ac1e4e23ce7cd023de78fc86658b970337be6f76d8f9b8cc004cab5ef459 +e45dc097c6ac28ffd024416348dcaf2465dc78737cd96ae9320fdd66204b +b3ef22a7c03b893deb1319fee64ccbca911274dc067d81765212d93c4a19 +b3556985bb8ca78ed6242a741c7b989b9b9758a14db667993d1bb771a96e +fcd8e11212e42238294b953acf9afbd043425107fe3be48f9dbe42fa4f56 +181b57c0f5775d21587ba02802abb04983e3a9505c90292488b5b67b20c1 +2f929046209df6e1ebc7c75d9d1ec0099f24c087c6ddd9d75e492618c137 +53ac1e0cf7f891eebbd132757ea250bbf083654ed84ead7d61c0d39d3836 +f6c61a19af3d3defef09075dd33902db9d1373ae1ba9736bbd2fd0f03fbb +cfd56979ec616dffbbc9dd3be31d1966739e4734fd9687b0dd8dfe28c460 +69c2c49407fb1a97b77784b859d5458cd73b999e886c22dec444a1bb6f25 +23ec42de9809b6b3bb667a7f152e0acfcde4dfed0618f62b3056980c7026 +2021a18e0370be209adc1b535ed034181962c3aae8f3b0594379f329862c +0b7fcd8a084fd92b09cb5ca092fcd31f1c79de205da08f09a2025cb60cc5 +c1ab1626beada762cb617cea852ab8009ee428be58e465761c8fba889282 +4328c5e6b4437d9e0171a4e64934a711af10e6999a0dd4013beaa89ec00e +2b93549b602b99e78bac467f23b6c360c2a912c19cd0b05ba37dee185f04 +f35aa98cd0cafce7f04df9c9fd8e7ed397f67bdd09a5a10ad1fe78b5817e +981470fc8006f3a8a25fe3ed3034a833d31d56df7af22247d18c4c62fd12 +3e18c958fed1f4af293fab1ccc17f80888e7702807254de89a71e0d75c98 +4b58c7fc2e405f48f339bc1b552d5efcde68ffe3390c0defc17cea9e075f +8eceb401f8e0025a2e6aefca5b2a16c1d84df8aa9e95ec0bb1e6ea672fd1 +84cfad89a779df6430d775a30b6c1877480b23d14bc3fe1153896a11104a +aaac146e386482b05baa5e200c206941fc9911115e3e9bc274f585a35c0e +97c6836c21d7cef4ddbbdafa455c25f4bba41e11c925f9d4fe94078cce89 +0a7585f58ecb1ae850a1b2da8644987286a3e7495d7b4978e57e5e2741f9 +77e0caf22030b67c2f8ad794e12511eb1915b9553bdc26a6cdf0e35b1968 +cb80e8db6d2a2e97db63f4795357020c2bc3ca1837ab1e1c2fb3380fe0b0 +537dfba3945358dae2905772691786c3e3f475b5072b0e6413c8ad2d4cea +006b630568961212fe907830c6a91f7718ff86febc0adbe1d3d8242145d7 +092a7e204ae34cc528bcc7b67baa6d4c1917c5bd39eee47fcc073aabcb93 +27c63bbb4017fba149837278895d06fa12d0085c19fd2164015fb6e7822a +8994309a6afd9156b7d8a6a2239a2084c0a05b05d8bdf91171b9c840018f +b23d0d28f5360a0bcca1e94e3c3a9de7451b033114ae73fe06d73891ed40 +65aa13581a464ebc84bee4bd0d081b8ba8546ddbb709735f23205b31f106 +0a1307d0de1bf1f8ca9c2c1dc5cbc7232c7627b48c37b1f5204b1179a934 +373a588f48dd1b50f9732855ebf0cbe96810b284009fc82860523c54f105 +063f6a73defce9f17c2c9d3379d77389666db5cd9e691714ba7b2f24c539 +02016e49e99c7849e89591ebf2902ef5cad9350d3f18ac7fd5eac076916b +cc731d5a71704565881c0b68200e5614b1054e248eb894027bdc3c57a3a2 +0337b7e895e3e8f2e974ea33a01880cfa9858b0d2820092865fab5caff15 +79b62236f13276a02f458c35aabcaade56f1b2c7ab5a348e5545034d5431 +ec4d2a7a5a661cba46673971db0c769f7fb5144c7ab0c9ef1ea66e4a1f40 +a0e7842ca6b2bec0a17c9bce50c5deed9dd7bb2cf5c508d4646672d17c83 +0a0a83d613e0987bd7fc4100182e846ab45f7b175d0d35c635dafeb268bb +cff34b020768b49d350e7a3e05000a8c1908c8fd8c5aaec284e41854a0fc +72dc0c7f4133e16366be75afdecb7cbc2f47c0b8fa622c6a06d1c958c083 +2591f9c50a750364bc045e0062382d6263628620a9ca5a3a39cb97ab9450 +d9e839e57d327c65d8995242db5da370aa38a718704d91376ecda02a88fd +cd663856666d6210714bc6489070a161eea4c3fd56f912515ea04ff6fa86 +41f735643ac42023596595f4864270314fe25cf928f58db399bc8b1f8949 +05d44901083204efa84ca557cb069398bfd15387028cfa5c2265849b5091 +997ed75d92870c347308cc5fe6fc13502d805bf21c3529b9a788410d5799 +81fdbc3929ae808ec0aede49afcc34cdfcb2826e20ae8e5d55253a5112a2 +838aaad0342a28b2fe40958af964dcc6682279ce5f5a971244ac8d9965bb +30f0b4d1af25afadc7a3be40c168eb738c35a0795d37c62009d7a2592724 +7adc065dfcb416d1dffad3b54071e5958e13df684c48a5cee90eb7e0f166 +f688a3214e6bda46f06ffb0cab609de2309850d4a0ce12c9733439ba1187 +9d0e051ed8fa8962180f4cd6b38626a6065a8425ca360180d368f9734b21 +c0ffc9e8155f92d75382d096e894260c749d460466c2f866c335e23bf442 +4ad9875ef61ab14275fbc7dedec3d06bb3ba03581c8c330cfc30dbbd1e9d +c92401a291f0c5eb5b4028aad99e5617f726531a422559db24ddf0bccc99 +f081dce48bbb731d91e06d2237c495ebd5b477afc744a8f17ba775630a2e +90176e4e5e1c3f60b87112187f12e13d7880671aca68a24bf979fd4c790f +09e477592571a105260eb97f062eb60273372c1bab4c4c6791bf9a45e1df +d1e728cc5ca3ebba3b4fb96f8af68710b099ac2b5b0474634ea258d1b11b +4b13be12fec7c5c193cd90be653063222469f13e2a4c77743b9fb0083d76 +64007c18ac981a7d9950dd97a3ceee037cdcc01e231a913de0a3ecddb871 +f20b4962e5847f87e3b41b52000d20d0031affad94d2aca4df047f3ba245 +5baf141cb493df6cca147fa3932d06a68f60598584dd4437fa16c32e9821 +082eb7fb11c5fb8cc0db33dbce8910bb26a7fe3deb515b06dffa37b12c91 +526eec637375ce1cd945046fa8793d2b7fea09aa573076e0de6a4ae83c0f +1b7cde73a7f357b6acc6e41747f977637c5422f37926a2e26d646c1a7084 +ca157e28a75511a91de9f12d9df50950a22d3136c64f1e76db3134862738 +7e490000b8d76e688d18ca2b69c11da8a24866070d8b37e95a3eab084e11 +73570a54e21bb68f5b511c520e8211328355b96eec2c5e46f3281b415b6b +d47d72e1d675231e2710599df129b3a4b859d77ae0be5a6750a73bef64e7 +4d4e09475d4067b26f4f77a72c00a9382826e1b5cde6f494809df9806ff8 +52efe0e7671fe9148afeaa63e1aa416c5998fde86fbb076a699e6062f1b0 +a7bb8a40b9c7470ee9d346736ce2536e8409be8845754e06bcb834a4a992 +5376e228f1e6b2ac37917379331a0af60a28771480fdbb3919a08a21ba58 +71d0ddc3aabdb186a80100eec21b2f847bdd24e75fefd5cfffbba60128e3 +541a77fc2ae46e0679e7d9f9a01f24b60bbc360ceb7c7d40f2dee7b98671 +09777f4d10668b5ceb2765dadb659bdab3f650e5c54009e40b66ecc1d46b +4832afd2c75a79e11bd0d99ed7f9b38ede3b15c4a0fe86230870a5a1c762 +38f774cafdca5a6f89c42030333d486f68e85048a8d47aed82cbc8d42ac8 +e00915d1d99276d0de9f14965be6b50f325366b20f83f68d202286a62b89 +f4d866fd95b65b3228222aca3a61dc208f6aad2dca550adc0f6006d40f5f +d352dce5bc7d50614794a9fdf62314e67afb3091d52b65ae0b6c49bcf86f +3df5ed5912ab1212e706bf1964c6d8f56c608cccaa3b615a1b442fc95a18 +0d612791e4731c379fa09b30d01d72f167019e064b54c6967aaa73f91a3d +d6ca39c3c256867dd8510bec55ae1bf70100bc4da31013724b35d8eafd91 +0c36b4cce0a23ae88f00c18fffc5f0b42af04d7f1f3395adedbf2f1167a6 +4ee33d311f0e7ba0bdb299c9e84db08c3aaa943c4155644987a9caa931e6 +429cbdb7c2181633fd60abfb0a0162aa9a3cf7902dabe7a15c21c6d5c0a7 +98933af01ce1e8586dc495d31894777a521c4df671837863df800f3eda6d +ff691fd84dac4b4455250e80236a158c7f12a2611fb6643dfd2874f45740 +0950e899bdf61efc6b92223b1767f4726c0d1fc48188ad41880f3564dece +3a71d318d2b728783360165494041af38d7a08b956e5ccdb4e0ceab31f67 +5ecc37c6e80cc69ea564f683e6ca41421bbabbaced13f9c4edb0bc7a7bea +de9cf086f052d0efc6b510cc29a079d3137dc085757b89beae29ca372eed +d334ab9eadfe9adcf40209ea9b7106aaeccc4f7c5064e9b1ef03a161dec0 +49ab0494966f312ff65c11582d2b213310eeaa04493bf663aef625d0a346 +017e734bac4d75056405e5b56bba89c9847d5bc32fe80bbe21905d9b037c +fe1b007bd40db660a353b9887aa94fb50741d0dcbf4737429a362561b149 +cb4c4656884289f08bcc11a95d99d8746682ce0830d6a7ef0a0fa5d4f33f +3c3f1cc13e0d3ddd44867d87f1b43a9add96ef2cc5b566fcedfff9933bb7 +522e5465aa5b83fdfaa36dacd17365d90183bee8367657d215b08fa01cc4 +cd75c1a328d321646a553d8bcac20e143ef018a788235193c0adf7908d05 +13a2e71c3dde6399b554970b44c9d085ca14db424afab61f33b6d1db2f19 +dabec03a92bdcae9bcd67d218498c43bd7cc75145ca4f88c49f55c0c00ba +3d6fe75838dca4883eff7fcd39dbdba3488eb97e25dd449c8b3312863d07 +1cb2d0d77895733edafe6e0fec1534cdd1a21a991cf59291a9eb10d887e8 +a30a69c993305cdd2a6e953e9ecc992ff88617e9d374314958c2918cba34 +868099c16946d2ea1ff14697622f2f100bb680576df96dde0c1f2e4e33ac +02d7ee2ae5a05d77f11683d271f2bb33432559aeb4b2fa18a6152076ad1b +f415727bffc8962b58bb3d21e5916c85aea872e287d89a54c9f22cb3d3d5 +3fe094d881e9d972a5930976504f97fc7f496b29d3c6c7e74b840bc8da01 +c87a354a7ec46157816098ebf348b1dc4dee64c45bac4869f7b0bd77e9bf +2b299f8c272ae57f5f8bf458e576a9efbd2f46cbfaa98e643f01ef4f7526 +34d8cdd724fb8d390bc9b66848157629134488ebaece3a60181d54d430e9 +bd2a98c52bf5b71c6c6097fc33420ccd7ba08a1ab1961cf04773bc3b0027 +465c6fb99c4fdc742d886acf122df963f92fb0e58538d1eae7c001532533 +17a92fdc63ec6c942c82457048dcfdd96c5dd71e54c892817892adec3098 +512b7f8d1ad020993b61018d32de244079425962d2a3f9a20d540e160407 +bc9ca63f6dc15ad408f2f20b0ca3762e6c5940100c3b23bcbcdcb13ed331 +8c7d43d4bf1f38c647592a3bbc4d5c2934fedc7d7d7022fb16274a5aba94 +b1ffcea6b94d390e97093db09bf4e8e3e5f0090326e92c20b6393cee7e5b +1f52e50e82c532aa06d84789d3e1a30d4fbd4c23f96c76fa905020f30d4e +b3fb8775ff97018d63be0afd799a888d0639c8c16a9bd808db1944fb76db +0f7a15a3893a88209d9a291aa0d3dbd62520430fca052f45cded9adb03ce +8590c7ba82739c46d92055809781c113cdf71cb395c2b5eefb807e52c621 +8f7e0c5f1ca5557a16bb7242af53ef182cdf9c5bc3962a86097482078c31 +93a854581c6473ea738086490e14ed5fa358daea43386991cd38ebad878f +ab7713f0e31835681c26995375f2bbffe6e3aed7051f53c47bb1ee0fa258 +e1c4366764c1e460eb1d2fecddc58be23067122483e35b89ab583559ad58 +6048d401eb979ac134a90675496f1153f7e116c0b468db98fffe0581f939 +773d8830d2a7ff8a5e0d1e2ce0195b941ac983461bed5dfc6c141e1f814d +244d40b512fbef72af2d0d6a0d52cab9e5da42f6714fd600a39bb007006b +8567a0db724a576f3775ed2b8528117113adbfb2a76417c1b5d1f2213383 +fb4ca75fe49fdb060ecd2a2628aa798a76556daa082b419d31a19a5e70fc +c68c824e00caeced378ebee62d0af03811ded8632f5f2745efb1f9d24768 +c69ade96e055bcfcc5d96752d96c0748ef653f8be91004ca14fe3561bbe5 +7d2135c2410e9f6c83bd0eeae2f071f28853b5d9fbb5fdd91bf0505c7a59 +1965f555270fbb48e90524575fd2cf50e325239bf9c184f9843a1008621f +6f6f20cc8960c500ae600d3e2ba36da9c91ae2fd1a9efb1e55749c5920c2 +d13ffa390cbf4fe1e8bbddbc329bf30b1766c50fe0f714f8e21e562dd92a +ae644774e04418b9698bfa1e7d74b60573862b0076016884da86dab655fe +55b27db183f01b8a946c451b1cfa848a423c7e5e63cc0d0816e2d26b92a5 +0638dbe0d9eb68d1eb6049972ca0eb816de5d908a85420679cd87a539d7f +81d3c5d865ee619f7cab188e84b3e281e374297d20b48f9c05b67364fd23 +12bc769289734c49a245d635d3246e91ccd1bf050c31e71bdeafca463552 +bab58b33f716fb8c484db217ae9cc1b7c57f9138cfbaf39c62cb4723cd4a +85222610c639d5700eff6d0e07166a4cf27a749166580e5926c2496876bf +9b0cfac6a6069ad45b0ae75c47150492b49625f4a862c12d7de81deafce6 +f8f869fd7bbcadcd60afaf00730ddad0b40c01b6590055aedece7f72d329 +db9585459b94ed3429cf1daa3e7bd4db54f9c9d69d7e0685b8e96589c9ff +7f259a5d1b08a36cf7a57988b0b22a80547fc2a7f5d7a2fecb873195914a +c7781d14b39b38a7e5bd1eb3e36db08cddf9f3d0d7d52cbc134af253d4fd +640f0faa0668815975d36bae8ae6dcde20505e48df3505b02bf4159f1264 +d47f2f073cc9c4e15541f06385ed4889376f8ca26b2836b8831efa962f47 +02ce6fc0d13b1641c3b2b2a09692ebec091e2b8da489f9eda0e9e83b670e +a70a63916b5934cfac9221aeda0a17d1d6e5ad459d29beb8c04c45c00561 +6a8a1a1755de39425c7999d04ed7b37fc6b8380a5a010809c909d22a6646 +8901953068c7ef52432782ff285d1263c18b04adaa0b0dbfcd938a35cacc +3fd5110e7c18c76caf0bcb3f1c49f3eeb024e55e754223ba9501c287b367 +d037b5469c0f5eeaa9ebef41df5f736d0d352d07e285abfa1efe9df11925 +6252e5274bf361130efd2b3258bc01fbbf8ef89bce0412fa41e7308e146a +30e1b0abc45615548c2b2b3512c8f505e24d937ff07d3379a72993b570c4 +4e156f98a84394eb3ea15808cbc77fe69276fd7f6a8c7e9589f1e9dd0f7d +80ca2c06b8a654bdccac7517dd5acef2cc0ff887b7b6236ca8e5eba068e7 +fde83d763653985795891fd898197225fc94ab77defec4876af0576f6040 +0928dbe79403ce4aee10fa051139699a0067f19901bf6ecc5a8d732c8e87 +f27457639bca63abc0f7319dbdd66f1340d459ff5855de0967c6ee42b3aa +e4746f377edd74d7480d7c56f5a275609cad8a335a309814a071e9948d1d +e3cc9fbafd0268560e7e12379c956d165f618db68cbf1db33b6ec3483050 +1bf6e537e00118fc84cf6302098c9fc1841bb076f471bf80770d72898924 +21df74c93f8b765bc0261a186cf9bc561109e7674c9d6b8cb0f6bb29e0ad +da7cda78cbcb86a4a858560df143a533c420241272346330d366d7aac8a8 +678204bfdfd15e49b46a703f2bce4affeafb26b2f76e2b21d34a5d71948f +71c5d78c776483bb09341f800bbe786065fff786afc450aed3a2abc1e3f2 +5d2577271a12f2c5f5bc852662a19655bbc2ebeb24c6dccf28978fc52913 +dce655cb21576373bf33c740b324d8dfa745ac044f094ae7a14ec1b3e6cd +08e03841833852f0779dc37a8e1617c21bfb7a824728db74d5023f839e50 +cd44126da917e643050c2f60fac3b411b857329c601548b493e202b77c14 +f4cb6ab08ba2aa727ebfd5bb40b66eec12f43c2759606f5ef2eba9010942 +d3d2b532ee0ddaff8269adeb75a12b00830918d30e4ebfa1a6aebb0dcdf7 +edfd3679ecfc6b283f11c30c98acc79a2ae311f016964b045ccb4c66c6c4 +34849aea17b02735481756437fe92abd575887506c7e4522dc6f7a6961e8 +24000bb68e8c7871ac1b704dffad8e04df8e814e93d0eb7503c1315dfa00 +f8b9341f478ac907d475ef650ae80587780f71e7f65550755b8e0a2963dc +c86eb72f22ee87c16bcfc2ccfd0da6d811f52ad064c4ddd7aa375a2cd474 +df5e8bffb02df24c3c16998bd8294dbef8ad0dce209a7464eb7acd40d0d9 +a4678d159b9b1937d82c5cfb9029009c56e429e1e3d23f1522e91cd1f276 +025d75195883c43537b3fef47a841b672d49f63140c14a7cc1318768b76c +a9850f49aa7ac9da33679f43986bc69e2c9610a6fddd044ff00240bc09a6 +e25681eba705e55621d33d04d1a041a639a577d584e60110720cb96af250 +c076dcc38197adaceea7eb0e0175788f5b71347c79277f3cda414683ce26 +4b7b64dc3af7d710d8790ccf0a61a9fe4bcfad32eefea3372fd924ae3be5 +ba738eea455df3912db0c2f3cbd6f2cf2b39365cbd5dcea69e79a7953a22 +698bc3a20bf6627bfcd0bd53fe1233b1dc428874fe84cfbebfb2ac04b1c4 +546edf0cd51ee85197841ec4e55830d03db9fcdbd97f63b44a95407399ed +f69e0c14634ffb3cab9630e22a7665fcec4e493b7ae4d7769e71df76602c +8daab61ca2f03a8376be6103a81448c3fb266f7cfeb8a6b1f6f7632484ed +8603b99562942d09644bd9eb3890b5c0d62cd7797501a702f6a12daa54e2 +0300519a40c248f6c12d6cccaf8173f5bd985673b6884d7a1a41486be38f +9229b6f930d8b98f892f457bd008a5bc354d9e2c5acb748381bca0ed2a1e +0891f492c489bbb365938c80ce8eb82de271d351efefd394a791d9ab22e2 +7bef611803b087e84e12849808579369b9f0ec1c08cd1ea72eebc288f0b3 +cccaa240e430387ecee0e567ba431074223226ca222d8324dc706aa51aa2 +79fecc280429cd243cf56822a720fbb88a92d5d6f37363ab2edc5bc053ab +ceb752a2ca80b78a9518059de8b1624ab90ccabb63a89422ab4f78ee3b94 +1d49e1caea3fa59f4b2e925d5d92d331d96412e133306980878c3614cb9c +d99d644b4772a0470d2e1cfd7975e37179035ca5bc64d2d2a148e2d8f5d2 +c4a894ffcae6725d88552470cd3393f79c8b31aaf46b1790152aeb1865a9 +25af135b30f0ab01ab72534d0137e831e65787367301cb478d62f623c763 +7882a729eda0241b553cf31e51623af66a841482485c3a1287342da71916 +060a46e37e37a30dc99f3f524ae3cbe3dd075c8c38d187695c5e559bfbb7 +b7d94fac98f7ab7d94d615a8a22d6842dd09f995454666724a15efea104d +f85626e9e6db009ce1805be05a29bdf063cb4cbd9f27f05a6f3d03353147 +e86f05390629a04c88bef21d2892b4b68cde132e631be2076e5867430f87 +8c57d3eedab592ffbf1f8c12dd7a6022d9a286469e6b6a181a58822d9587 +c457941da28c466ad86bbd7e9fbf2c6539f1cc5bb4a16ef65bbb0db5237a +0f28925532d5fd394ea9267babd451ce56ad4d983172060237898a504ba4 +7cc4f3c43c2f6bab090534505c9a6c4609c19657177f9720de4529883dca +9fd8c8cc0b217f1a8fe6c11b4d9782974f1872a6131ad0efbf5be03977bb +625ca5c83fb60284aa6f4c31e50417ee21e3dda2a69ff6984925654198be +41fc4c9fd11d635e1e3fe367191877b593440078c200abc78cfe822a78f2 +c6127f70caed225150ed8a185a7d2b247a18dfd63967af0420f9df2e7905 +0681c00b95493b97b5353ff0db28169af7e2270fa28dc208314652d59207 +168de1aa523e9f50abb42e68fe7399ac4f1839b43e41429e337947851391 +7d43463e623fb2502bc3d477e525d0c6e8aa5dedaff575337c0e499b7d12 +3edcf05ed0f494ede88769f188f8a4134f53cfc850362d9017dfb0f2a611 +e22ce4f18ff6d78559ca0092e7756320ed34fa849a56163a4236ba8940da +6f9fde0eb3e2e71eebfa8d37ec8dac8b0cf6ea21a97ab3b30934ba8ac209 +9ec89085e15f42b6196dcedb9b775a066062346da41692b9d7e69d794215 +6e0f55241ff6f4f653caa58d29acd106c0b2863a2ae8c71366b929475713 +6d45234b208fb30c1c453e05e68c9a35712986c0eb5161592667dcf85fac +37be40e947238a08f48cd294f453cc94a9417c9f211680074aa91bdb32fd +bc0ad75251944001c0e3779fb03fa474f69743de8d160747e1bab93fbb23 +e75fb3bf3cd85e48cbaa2090c5398a4dbe174b9d98bd6cc056b067eee625 +44ef416db590d244728c488581710e3cf9c8874502f581884bd1d839d111 +5f1f77028d98977d83971ff0d2f242f74c108c5c4e98dfd28bcf4262afb5 +739ff804d54cbd8a0bf7d65bcc312c28bd5af696b97eb4f5b39ace5c742f +342681f98f8bab16c959d6a16ef5368bd711c201a895f0971b26baf6ff7a +9c635134983a54d2b49f5bced91010996994909648564344479e11e7589a +603206110b90a3e6eb8eb089f3ce49b911b316be83209d7b6aa903d931a1 +12d42421c99a8ab0192325723019e31250cb5f130959b26687cd3ab0751c +9ad02e20cd96820fd36e8dd97f9b3fa2f21d9436b62074e2e3a09ed74ba6 +847868b768482b44ddc6eb79add9655be334197532f3d978b94e667e51ff +c5b6521e0ef83706b20147f5edf54549e5a505cc22917a613cf7617ed104 +c26c225ffc39ef7e30cafe37aab34ccf71a1c610a288d5038e481bead3d7 +364c646e4158659ace5f448dae82c18cb13ef42762c8269a107bccbdc8da +44d4e3265e8b62aae6d70a4c14e8564adfed450fb7ae9057d661724a5aaf +0eb818791004eecae762d4281231a91b3733efd99f35c2b222d1417ab81d +fd64568840022c6be13632bf8a3eabd754d0d7979d70488b44b32abcb6d9 +e9ec65e227ea3b8391b66346f4d428c4fabe9927485f8891f677acdd7d8a +4f58763af0f9ca3343d608ec13ee639ddb18a1f09f3038f65afbbc2f5eb1 +7c26befd7e57118952857acfeea1a8d65880778aefa626e4acda8232ee9b +b8085ceec2f845be9ea4b0c1715a04ec166ddeff6108b2f30d05a38120e5 +91a650a942ffa49fe8cf7cf6572652be94953556d3bc1344779efc1b9f9c +66278d614747d16bdc069ecab758c341a13e10a63556edf13a562ab27af5 +bc57242af4e708af899a0ae345e8251557eda3f15558f7f4aad4626edeb5 +e1e7f16160bd8940f02448a462b1e0648613388a9d3b6c0f2965e2b34e2b +0bfead1df63667ebae172d58487b3c2ae07403ecc022f3317570e85e0a96 +053b32957fb6bef1f91bb6bf283f626954e712cea564110ce9a4c88edb28 +d87a8c32ade55a79bbe68cf93501110f59a020c02b0359f50a4aed99df4a +069daba42eec26b132a2fcb2964dc73a5f0f123041b38ca854112a03a3cb +a297a6fa4b045d658d291264495b6d1eacd8c683b5a44193747831182518 +27305c1a74945d3dd8eaa5943a74b7825c2030e3a8233a40046dd9446633 +52d6af102f737878091714621795368327c2d35d8907695acca5206862a1 +7804e1cf7fbd1fae40071d43e6e2cf101eccdf81f25ec91cb057321b8204 +60706a4f990f5d0a5e40fa2c3a07bee8af0100bdcf4298e8cfdf68932838 +6c525f06c125a4998a015db3a4cb96825015f4569183bf2e9d2745951de6 +c53ef9f1fd193781bad0897f1a5ea004510e815a90c6c957ec7577fd2652 +df67ce4efb3f8c30304d356509cc01fead119448b5983413a3c398e1fa98 +beba5e97dd9c7bc4ca825d8771cd1b8b8206892aee39cf9fca7511e301e2 +fd61754e2c36b3b9801cb123623b16c00dc15510a2c16c7dfb39d271acf3 +7f9b4d3709169c4e460b5752a2663e3b24fd6d6e23097ad38917b36993cd +d5f1543ddd39167f72ab544823e02c0282f34876f4498b12a07ccfd9cc15 +4c96c4fbee226906f45de971027be08f78ab0b93b530db1f374a85b3ab16 +b123add1ce4ff1f39bbb5b1b80668afba767f2aa947073af88be267a21e7 +2c6d8d62585fbb7cfca3238639a017c3eb9e8335061f9f53cf7af75442e7 +2f8df88fbe8c06465cf9469692a57711e1d8a6d4b2b8bdd56957175888cf +f2b56c2c7b1f4ed085864e8031f8bc7bfe708af06d7920da144678731584 +9e315c01b363be9f4841d255cb9c978c5dbe53b63b9c133bd41d9fe9b5ce +fe685662bbaafce39c13c26136b0d19b8579d8e2be61f1e158851476e431 +63c31ef71dbef1b7de4696346d4be168944b1148fcf3220eeeb1b3a1b845 +fc5f4c55ea17b6644c277637f834766fcaf68f1f173c8784ae648624744f +a07837e686fbf9b9845fa0d66a082cf8afd89e7b2393f8e2c299b656b09e +3b960c369557f0b7736000603f4f9aafef291f7100cc1378216f808b06f8 +4f1797ed54bafb693d82a8133ade22edd3e06f7aa5f624f7823aa46cee9a +59d48e84c53062b6f54744063847fbd79dad395ca365c635a5c93cdc9a56 +02a1e8d07a2734a5bb83b47f9642e918d6f848556e0c176b22142b2930c1 +c4753fe6377ad3967d9cdd718fd80eafbd6d4e51d4a641752fbce144f802 +bf5a89096128b725f577da8937e439404119ace13f3622be5e8f019acf3e +15fffd271b9ba0f510e92e04f2638cd8c01ce389077ffcce1f23647eac11 +5095e56d625fa670cc1ccd42b9d785536793ad84d2772eab0be639d0c1d8 +3e12eeceba5ba8d2927e1e35a3eeee5c196ba9ebf69b72b2fddaa907032e +4a77e4dad4b44e357d733819597de78b2eb52ffdd8f520791c67469c1fb5 +32f11f6cfbcc5605a40ca49553160b720189c1840c0f647795881496a4fb +ba5fb1399577af150d7a2381db41d11f3de795a2239494cb434a97430eca +e9600d8b3e23d1990c5fd55f2aedef7ed633bb3d3745f40f06d059dc5fae +57d7d99c4be5da150d995f86c7ed928088fbe8ae45807531e9fea6c812c3 +66bfe43cd3858f8d479491c3d3c1c0efe22a1d7f5b7178b085f33c1bddcf +7359a253dbac7f208bdbe359adc47dda6456e9e9e6da4193eeedcea7e1bf +72a371dae857540032d2f8e8f5a16f647c07636e2c7a618933e95c609248 +7f3ed15f78c6cc25162513f3731fd125becc806a92c133036ae711b9bf62 +6ac52263c94150c9ea75cb77145fef1b2e01cc4f4fca08573e8f5a31718c +e8277c4d685daa390eec5ec461e32e401188c14d7ad2909a70823b314730 +45549ee65c1142331880fdcd0a8fd511889b05692de6f932a1f700213a08 +d6f1b06abb6410d3ba1305cfbe9fb86fc47d82c092a927f07e7a4b163519 +f7dd9c4fd0658a442b318ddd44a79f0ff4e19f96c9df9c98d8b350978554 +97a0363e5aef9bdab0712547bfa8654749603332a4f18015c9ac8067a4fa +66ca1d81cefe7bacb899e70529b785b2d03e565f7475484827476c1eb1c8 +add1648c3e41fd21e4fae0546aaba41ad528bed418f684c320971ff24218 +a0acb587b1531ad505ee5922bb7823140d70f54ec065419e7661b520484f +14f737675b9e90135d872671ad819d63c2e3c22902c1640880877e04340e +15ecf930069dacd15558a3de1be8ab83ceee18ea8cbe4d00129ff7e3d829 +59c4d25232afdfc5c56ffa2e0a9edab1b83b4edaaabaab1806c3aa90a955 +fc9596ab5ec9dc8e48b20729f9821855abdb3f7c0d533b690ba211be869b +0d714478f6ac0124258f3b654b84ebd4453afa8164d0b1b3ec21b2b462f9 +b501cb7f8443070cec740f05fbf784ba236d851c9cb24819a7ec19fde67e +35df0625f2212cddef4fe01c2b9f195346cdef6b7e7eebf1385ab3988a15 +7e6476b97c93e08471d5dd2cad24d028d40e5875e688911213f5ece58537 +9f2939cea04f8cf727acb15c186cdecc5c10794a92c9bfcdf47e85db06fd +acf631f8f5980bacddac0eca5cdcbd3efc773e62af1d970c0134ba7374a9 +ef32aa06ad7955ea4638 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark diff --git a/Build/source/texk/ps2pkm/tests/Symbol.pfb b/Build/source/texk/ps2pkm/tests/Symbol.pfb Binary files differnew file mode 100644 index 00000000000..ff00dde4481 --- /dev/null +++ b/Build/source/texk/ps2pkm/tests/Symbol.pfb diff --git a/Build/source/texk/ps2pkm/tests/Symbol10.300pk b/Build/source/texk/ps2pkm/tests/Symbol10.300pk Binary files differnew file mode 100644 index 00000000000..f4c2aa9ccd1 --- /dev/null +++ b/Build/source/texk/ps2pkm/tests/Symbol10.300pk diff --git a/Build/source/texk/ps2pkm/tests/ps2pk.test b/Build/source/texk/ps2pkm/tests/ps2pk.test new file mode 100755 index 00000000000..103b717273c --- /dev/null +++ b/Build/source/texk/ps2pkm/tests/ps2pk.test @@ -0,0 +1,33 @@ +#! /bin/sh + +# Copyright (C) 2012 Peter Breitenlohner <tex-live@tug.org> +# You may freely use, modify and/or distribute this file. + +rm -f Symbol* + +cp $srcdir/tests/Symbol.afm $srcdir/tests/Symbol.pfb . + +./pfb2pfa -v Symbol.pfb || exit 1 +diff $srcdir/tests/Symbol.pfa Symbol.pfa || exit 1 + +./ps2pk -v Symbol.pfa || exit 1 +diff $srcdir/tests/Symbol10.300pk Symbol10.300pk || exit 1 + +rm -f Symbol10.300pk +./ps2pk -v Symbol.pfb || exit 1 +diff $srcdir/tests/Symbol10.300pk Symbol10.300pk || exit 1 + +./pk2bm -h -ca Symbol10.300pk >Symbol.alpha.hex || exit 1 +diff $srcdir/tests/Symbol.alpha.hex Symbol.alpha.hex || exit 1 + +./pk2bm -b -o141 Symbol10.300pk >Symbol.alpha.pix || exit 1 +diff $srcdir/tests/Symbol.alpha.pix Symbol.alpha.pix || exit 1 + +val1='167 240 263 288' +val2=`./mag -r -R240 $val1` || exit 1 +val3=`./mag -R240 $val2` || exit 1 + +echo "./mag -r -R240 $val1 => $val2" +echo "./mag -R240 $val2 => $val3" +test "x$val1" = "x$val3" || exit 1 + |