From 3b0566ea0a807dd38b89d11d40a5fb975df187b2 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 6 Jul 2013 12:52:17 -0600 Subject: [PATCH] add `filesystem-change-evt' The `filesystem-change-evt' function takes a path to a file or directory and returns an event that becomes ready when the file or directory changes (conservatively, so false positives are possible). These events are supported on Linux, Mac OS X and other BSD variants with kqueue(), and Windows. --- .../scribblings/reference/filesystem.scrbl | 67 + .../racket-test/tests/racket/file.rktl | 87 + racket/lib/collects/racket/HISTORY.txt | 4 + racket/src/configure | 56 + racket/src/racket/configure.ac | 21 + racket/src/racket/include/scheme.h | 2 + racket/src/racket/mzconfig.h.in | 3 +- racket/src/racket/src/cstartup.inc | 1496 ++++++++--------- racket/src/racket/src/mzmark_port.inc | 25 + racket/src/racket/src/mzmarksrc.c | 9 + racket/src/racket/src/port.c | 259 +++ racket/src/racket/src/portfun.c | 42 + racket/src/racket/src/schminc.h | 2 +- racket/src/racket/src/schpriv.h | 6 + racket/src/racket/src/schvers.h | 4 +- racket/src/racket/src/stypes.h | 147 +- racket/src/racket/src/thread.c | 39 +- racket/src/racket/src/type.c | 3 +- 18 files changed, 1436 insertions(+), 836 deletions(-) diff --git a/pkgs/racket-pkgs/racket-doc/scribblings/reference/filesystem.scrbl b/pkgs/racket-pkgs/racket-doc/scribblings/reference/filesystem.scrbl index 5a3b567548..0b292e3bde 100644 --- a/pkgs/racket-pkgs/racket-doc/scribblings/reference/filesystem.scrbl +++ b/pkgs/racket-pkgs/racket-doc/scribblings/reference/filesystem.scrbl @@ -473,6 +473,73 @@ On Windows, an element of the result list may start with Returns a list of all current root directories. Obtaining this list can be particularly slow on Windows.} +@;------------------------------------------------------------------------ +@section[#:tag "filesystem-change"]{Detecting Filesystem Changes} + +Many operating systems provide notifications for filesystem changes, +and those notifications are reflected in Racket by @tech{filesystem +change events}. + +@defproc[(filesystem-change-evt? [v any/c]) boolean?]{ + +Returns @racket[#f] if @racket[v] is a @tech{filesystem change +event}, @racket[#f] otherwise.} + + +@defproc*[([(filesystem-change-evt [path path-string?]) + filesystem-change-evt?] + [(filesystem-change-evt [path path-string?] + [failure-thunk (-> any)]) + any])]{ + +Creates a @deftech{filesystem change event}, which is +@tech{synchronizable event} that becomes @tech{ready for +synchronization} after a change to @racket[path]: + +@itemlist[ + + @item{If @racket[path] refers to a file, the event becomes + @tech{ready for synchronization} when the file's content or + attributes change, or when the file is deleted.} + + @item{If @racket[path] refers to a directory, the event becomes + @tech{ready for synchronization} if a file or subdirectory is + added, renamed, or removed within the directory.} + +] + +The event also becomes @tech{ready for synchronization} if +it is passed to @racket[filesystem-change-evt-cancel]. + +Finally, depending on the precision of information available from the +operating system, the event may become @tech{ready for +synchronization} under other circumstances. For example, on +Windows, an event for a file becomes ready when any file changes +within in the same directory as the file. + +If the current platform does not support filesystem-change +notifications, then the @exnraise[exn:fail:unsupported] if +@racket[failure-thunk] is not provided, or @racket[failure-thunk] is +called in tail position if provided. Similarly, if there is any +operating-system error when creating the event (such as a non-existent +file), then the @exnraise[exn:fail:filesystem] or @racket[failure-thunk] +is called. + +A @tech{filesystem change event} is placed under the management of the +@tech{current custodian} when it is created. If the @tech{custodian} +is shut down, @racket[filesystem-change-evt-cancel] is applied to the +event.} + + +@defproc[(filesystem-change-evt-cancel [evt filesystem-change-evt?]) + void?]{ + +Causes @racket[evt] to become immediately @tech{ready for +synchronization}, whether it was ready or before not, and releases and +resources (at the operating system level) for tracking filesystem +changes.} + + @;------------------------------------------------------------------------ @section[#:tag "runtime-path"]{Declaring Paths Needed at Run Time} diff --git a/pkgs/racket-pkgs/racket-test/tests/racket/file.rktl b/pkgs/racket-pkgs/racket-test/tests/racket/file.rktl index 3a07fd4674..03257c5dac 100644 --- a/pkgs/racket-pkgs/racket-test/tests/racket/file.rktl +++ b/pkgs/racket-pkgs/racket-test/tests/racket/file.rktl @@ -1378,6 +1378,93 @@ '(close-input-port r2)))) (tcp-close l)) +;;---------------------------------------------------------------------- +;; Filesystem-change events + +(test #f filesystem-change-evt? 'evt) + +(let ([dir (make-temporary-file "change~a" 'directory)]) + (define known-file-supported? + (case (system-type) + [(macosx) #t] + [else #f])) + (define known-supported? + (or known-file-supported? + (case (system-type) + [(windows) #t] + [else #f]))) + (define (check-supported evt file?) + (when (if file? + known-file-supported? + known-supported?) + (test #t filesystem-change-evt? evt))) + + (define (check f1-name f2-name as-file? known-x-supported?) + (printf "checking ~s, ~s as ~a\n" f1-name f2-name (if as-file? "file" "dir")) + (define f1 (build-path dir f1-name)) + (define f2 (build-path dir f2-name)) + + (define dir-e (filesystem-change-evt dir (lambda () #f))) + (check-supported dir-e #f) + (if as-file? + (call-with-output-file* f1 (lambda (o) (fprintf o "1\n"))) + (make-directory f1)) + (when dir-e + (test dir-e sync dir-e) + (test dir-e sync dir-e)) + (if as-file? + (call-with-output-file* f2 (lambda (o) (fprintf o "2\n"))) + (make-directory f2)) + + (define f1-e (filesystem-change-evt f1 (lambda () #f))) + (define f2-e (filesystem-change-evt f2 (lambda () #f))) + (check-supported f1-e #t) + (check-supported f2-e #t) + + (when f1-e + (test #f sync/timeout 0 f1-e) + (test #f sync/timeout 0 f2-e) + + (call-with-output-file (if as-file? + f1 + (build-path f1 "x")) + #:exists 'append + (lambda (o) (newline o))) + (test f1-e sync f1-e) + (when known-x-supported? + (test #f sync/timeout 0 f2-e)) + + (call-with-output-file (if as-file? + f2 + (build-path f2 "y")) + #:exists 'append + (lambda (o) (newline o))) + (test f2-e sync/timeout 0 f2-e) + (test f2-e sync f2-e) + (test f1-e sync f1-e) + + (define f1-e2 (filesystem-change-evt f1 (lambda () #f))) + (when known-x-supported? + (test #f sync/timeout 0 f1-e2)) + (test f1-e sync/timeout 0 f1-e) + (test f1-e sync f1-e) + + (filesystem-change-evt-cancel f1-e2) + (test f1-e2 sync/timeout 0 f1-e2) + + (define cust (make-custodian)) + (define f1-e3 (parameterize ([current-custodian cust]) + (filesystem-change-evt f2 (lambda () #f)))) + (when known-x-supported? + (test #f sync/timeout 0 f1-e3)) + (custodian-shutdown-all cust) + (test f1-e3 sync/timeout 0 f1-e3))) + + (check "f1" "f2" #t known-file-supported?) + (check "f1d" "f2d" #f known-supported?) + + (delete-directory/files dir)) + ;;---------------------------------------------------------------------- ;; TCP diff --git a/racket/lib/collects/racket/HISTORY.txt b/racket/lib/collects/racket/HISTORY.txt index 73580e2d6e..e016045068 100644 --- a/racket/lib/collects/racket/HISTORY.txt +++ b/racket/lib/collects/racket/HISTORY.txt @@ -1,3 +1,7 @@ +Version 5.3.900.4 +Added filesystem-change-evt, filesystem-change-evt?, and + filesystem-change-evt-cancel + Version 5.3.900.2 Changed link-file handling to separate "user" and "shared" modes; removed 'links-file mode for find-system-path, PLTLINKSFILE diff --git a/racket/src/configure b/racket/src/configure index 61b956b56e..36e0c66d07 100755 --- a/racket/src/configure +++ b/racket/src/configure @@ -4080,6 +4080,7 @@ case "$host_os" in DYN_CFLAGS="-fPIC" try_poll_syscall=yes try_epoll_syscall=yes + try_inotify_syscall=yes case "$host_cpu" in #Required for CentOS 4.6 x86_64) @@ -5473,6 +5474,61 @@ _ACEOF fi fi +if test "${try_inotify_syscall}" = "yes" ; then + msg="for inotify" + { echo "$as_me:$LINENO: checking $msg" >&5 +echo $ECHO_N "checking $msg... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + #include + int main() { + int fd; + int wd; + fd = inotify_init(); + wd = inotify_add_watch(fd, "/tmp", + (IN_CREATE | IN_DELETE | IN_DELETE_SELF + | IN_MODIFY | IN_MOVE_SELF | IN_MOVED_TO)); + return 0; + } +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + use_inotify=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + use_inotify=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + { echo "$as_me:$LINENO: result: $use_inotify" >&5 +echo "${ECHO_T}$use_inotify" >&6; } + if test "${use_inotify}" = "yes" ; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_INOTIFY_SYSCALL 1 +_ACEOF + + fi +fi + if test "${try_kqueue_syscall}" = "yes" ; then msg="for kqueue" { echo "$as_me:$LINENO: checking $msg" >&5 diff --git a/racket/src/racket/configure.ac b/racket/src/racket/configure.ac index 6e8d8b8320..ff72473484 100644 --- a/racket/src/racket/configure.ac +++ b/racket/src/racket/configure.ac @@ -579,6 +579,7 @@ case "$host_os" in DYN_CFLAGS="-fPIC" try_poll_syscall=yes try_epoll_syscall=yes + try_inotify_syscall=yes case "$host_cpu" in #Required for CentOS 4.6 x86_64) @@ -964,6 +965,26 @@ if test "${try_epoll_syscall}" = "yes" ; then fi fi +if test "${try_inotify_syscall}" = "yes" ; then + [ msg="for inotify" ] + AC_MSG_CHECKING($msg) + AC_LINK_IFELSE( + [ #include ] + int main() { + int fd; + int wd; + fd = inotify_init(); + wd = inotify_add_watch(fd, "/tmp", + (IN_CREATE | IN_DELETE | IN_DELETE_SELF + | IN_MODIFY | IN_MOVE_SELF | IN_MOVED_TO)); + return 0; + }, use_inotify=yes, use_inotify=no) + AC_MSG_RESULT($use_inotify) + if test "${use_inotify}" = "yes" ; then + AC_DEFINE(HAVE_INOTIFY_SYSCALL,1,[Have inotify]) + fi +fi + if test "${try_kqueue_syscall}" = "yes" ; then [ msg="for kqueue" ] AC_MSG_CHECKING($msg) diff --git a/racket/src/racket/include/scheme.h b/racket/src/racket/include/scheme.h index 43ed4110f7..439c12f91e 100644 --- a/racket/src/racket/include/scheme.h +++ b/racket/src/racket/include/scheme.h @@ -2105,6 +2105,8 @@ extern Scheme_Extension_Table *scheme_extension_table; #define MZFD_CHECK_READ 3 #define MZFD_CHECK_WRITE 4 #define MZFD_REMOVE 5 +#define MZFD_CREATE_VNODE 6 +#define MZFD_CHECK_VNODE 7 /*========================================================================*/ diff --git a/racket/src/racket/mzconfig.h.in b/racket/src/racket/mzconfig.h.in index f63ee741e4..969252aedc 100644 --- a/racket/src/racket/mzconfig.h.in +++ b/racket/src/racket/mzconfig.h.in @@ -56,9 +56,10 @@ typedef unsigned long uintptr_t; /* Whether pthread_rwlock is available. */ #undef HAVE_PTHREAD_RWLOCK -/* When poll(), epoll(), and/or kqueue() is available: */ +/* When poll(), epoll(), kqueue(), etc. is available: */ #undef HAVE_POLL_SYSCALL #undef HAVE_EPOLL_SYSCALL +#undef HAVE_INOTIFY_SYSCALL #undef HAVE_KQUEUE_SYSCALL /* When mmap() and mprotect() are available: */ diff --git a/racket/src/racket/src/cstartup.inc b/racket/src/racket/src/cstartup.inc index 89cf492f37..acbc56917d 100644 --- a/racket/src/racket/src/cstartup.inc +++ b/racket/src/racket/src/cstartup.inc @@ -1,5 +1,5 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,51,84,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,52,84,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0, 14,0,19,0,32,0,37,0,40,0,47,0,54,0,59,0,63,0,67,0,74, 0,83,0,87,0,93,0,107,0,121,0,124,0,130,0,134,0,136,0,147,0, @@ -27,32 +27,32 @@ 2,19,248,22,103,201,27,248,22,161,4,195,249,22,154,4,80,158,39,36,251, 22,89,2,18,248,22,101,199,249,22,79,2,19,248,22,103,201,12,27,248,22, 81,248,22,161,4,196,28,248,22,87,193,20,14,159,37,36,37,28,248,22,87, -248,22,81,194,248,22,132,18,193,249,22,154,4,80,158,39,36,251,22,89,2, -18,248,22,132,18,199,249,22,79,2,11,248,22,133,18,201,11,18,100,10,13, +248,22,81,194,248,22,135,18,193,249,22,154,4,80,158,39,36,251,22,89,2, +18,248,22,135,18,199,249,22,79,2,11,248,22,136,18,201,11,18,100,10,13, 16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,16,4,11, 11,2,20,3,1,8,101,110,118,49,55,52,50,56,16,4,11,11,2,21,3, 1,8,101,110,118,49,55,52,50,57,27,248,22,81,248,22,161,4,196,28,248, -22,87,193,20,14,159,37,36,37,28,248,22,87,248,22,81,194,248,22,132,18, +22,87,193,20,14,159,37,36,37,28,248,22,87,248,22,81,194,248,22,135,18, 193,249,22,154,4,80,158,39,36,250,22,89,2,22,248,22,89,249,22,89,248, -22,89,2,23,248,22,132,18,201,251,22,89,2,18,2,23,2,23,249,22,79, -2,6,248,22,133,18,204,18,100,11,13,16,6,36,2,14,2,2,11,11,11, +22,89,2,23,248,22,135,18,201,251,22,89,2,18,2,23,2,23,249,22,79, +2,6,248,22,136,18,204,18,100,11,13,16,6,36,2,14,2,2,11,11,11, 8,32,8,31,8,30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49, 55,52,51,49,16,4,11,11,2,21,3,1,8,101,110,118,49,55,52,51,50, 248,22,161,4,193,27,248,22,161,4,194,249,22,79,248,22,89,248,22,80,196, -248,22,133,18,195,27,248,22,81,248,22,161,4,23,197,1,249,22,154,4,80, +248,22,136,18,195,27,248,22,81,248,22,161,4,23,197,1,249,22,154,4,80, 158,39,36,28,248,22,64,248,22,155,4,248,22,80,23,198,2,27,249,22,2, 32,0,88,163,8,36,37,43,11,9,222,33,40,248,22,161,4,248,22,101,23, -200,2,250,22,89,2,24,248,22,89,249,22,89,248,22,89,248,22,132,18,23, +200,2,250,22,89,2,24,248,22,89,249,22,89,248,22,89,248,22,135,18,23, 204,2,250,22,90,2,25,249,22,2,22,80,23,204,2,248,22,103,23,206,2, -249,22,79,248,22,132,18,23,202,1,249,22,2,22,101,23,200,1,250,22,90, +249,22,79,248,22,135,18,23,202,1,249,22,2,22,101,23,200,1,250,22,90, 2,22,249,22,2,32,0,88,163,8,36,37,47,11,9,222,33,41,248,22,161, -4,248,22,132,18,201,248,22,133,18,198,27,248,22,161,4,194,249,22,79,248, -22,89,248,22,80,196,248,22,133,18,195,27,248,22,81,248,22,161,4,23,197, +4,248,22,135,18,201,248,22,136,18,198,27,248,22,161,4,194,249,22,79,248, +22,89,248,22,80,196,248,22,136,18,195,27,248,22,81,248,22,161,4,23,197, 1,249,22,154,4,80,158,39,36,250,22,90,2,24,249,22,2,32,0,88,163, -8,36,37,47,11,9,222,33,43,248,22,161,4,248,22,80,201,248,22,133,18, +8,36,37,47,11,9,222,33,43,248,22,161,4,248,22,80,201,248,22,136,18, 198,27,248,22,81,248,22,161,4,196,27,248,22,161,4,248,22,80,195,249,22, 154,4,80,158,40,36,28,248,22,87,195,250,22,90,2,22,9,248,22,81,199, -250,22,89,2,10,248,22,89,248,22,80,199,250,22,90,2,9,248,22,133,18, +250,22,89,2,10,248,22,89,248,22,80,199,250,22,90,2,9,248,22,136,18, 201,248,22,81,202,27,248,22,81,248,22,161,4,23,197,1,27,249,22,1,22, 93,249,22,2,22,161,4,248,22,161,4,248,22,80,199,248,22,181,4,249,22, 154,4,80,158,41,36,251,22,89,1,22,119,105,116,104,45,99,111,110,116,105, @@ -62,18 +62,18 @@ 45,115,101,116,45,102,105,114,115,116,11,2,26,202,250,22,90,2,22,9,248, 22,81,204,27,248,22,81,248,22,161,4,196,28,248,22,87,193,20,14,159,37, 36,37,249,22,154,4,80,158,39,36,27,248,22,161,4,248,22,80,197,28,249, -22,159,9,62,61,62,248,22,155,4,248,22,101,196,250,22,89,2,22,248,22, +22,162,9,62,61,62,248,22,155,4,248,22,101,196,250,22,89,2,22,248,22, 89,249,22,89,21,93,2,27,248,22,80,199,250,22,90,2,5,249,22,89,2, 27,249,22,89,248,22,110,203,2,27,248,22,81,202,251,22,89,2,18,28,249, -22,159,9,248,22,155,4,248,22,80,200,64,101,108,115,101,10,248,22,132,18, -197,250,22,90,2,22,9,248,22,133,18,200,249,22,79,2,5,248,22,81,202, +22,162,9,248,22,155,4,248,22,80,200,64,101,108,115,101,10,248,22,135,18, +197,250,22,90,2,22,9,248,22,136,18,200,249,22,79,2,5,248,22,81,202, 99,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,16, 4,11,11,2,20,3,1,8,101,110,118,49,55,52,53,52,16,4,11,11,2, 21,3,1,8,101,110,118,49,55,52,53,53,18,158,94,10,64,118,111,105,100, 8,48,27,248,22,81,248,22,161,4,196,249,22,154,4,80,158,39,36,28,248, -22,64,248,22,155,4,248,22,80,197,250,22,89,2,28,248,22,89,248,22,132, -18,199,248,22,101,198,27,248,22,155,4,248,22,132,18,197,250,22,89,2,28, -248,22,89,248,22,80,197,250,22,90,2,25,248,22,133,18,199,248,22,133,18, +22,64,248,22,155,4,248,22,80,197,250,22,89,2,28,248,22,89,248,22,135, +18,199,248,22,101,198,27,248,22,155,4,248,22,135,18,197,250,22,89,2,28, +248,22,89,248,22,80,197,250,22,90,2,25,248,22,136,18,199,248,22,136,18, 202,159,36,20,114,159,36,16,1,11,16,0,20,26,150,9,2,1,2,1,2, 2,11,9,9,11,11,11,10,36,80,158,36,36,20,114,159,36,16,0,16,0, 38,39,36,16,0,36,16,0,36,11,11,11,16,10,2,3,2,4,2,5,2, @@ -100,7 +100,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 2051); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,51,84,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,52,84,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,166,0,0,0,1,0,0,8,0, 21,0,26,0,43,0,55,0,77,0,106,0,121,0,139,0,151,0,167,0,181, 0,203,0,219,0,236,0,253,0,15,1,34,1,53,1,69,1,75,1,84,1, @@ -174,662 +174,662 @@ 105,120,32,116,111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,5,1, 95,5,11,80,76,84,67,79,76,76,69,67,84,83,1,20,99,111,108,108,101, 99,116,115,45,115,101,97,114,99,104,45,100,105,114,115,6,8,8,99,111,108, -108,101,99,116,115,27,248,22,150,15,23,195,2,28,23,193,2,192,86,94,23, -193,1,28,248,22,144,7,23,195,2,27,248,22,173,15,23,196,2,28,23,193, -2,192,86,94,23,193,1,248,22,174,15,23,196,1,11,0,21,35,114,120,34, +108,101,99,116,115,27,248,22,153,15,23,195,2,28,23,193,2,192,86,94,23, +193,1,28,248,22,147,7,23,195,2,27,248,22,176,15,23,196,2,28,23,193, +2,192,86,94,23,193,1,248,22,177,15,23,196,1,11,0,21,35,114,120,34, 94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34,0,6,35,114, 120,34,47,34,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91, 47,92,92,93,42,36,34,0,19,35,114,120,34,91,32,46,93,43,40,91,47, -92,92,93,42,41,36,34,86,94,28,28,248,22,151,15,23,195,2,10,28,248, -22,150,15,23,195,2,10,28,248,22,144,7,23,195,2,28,248,22,173,15,23, -195,2,10,248,22,174,15,23,195,2,11,12,250,22,168,11,2,44,2,45,23, -197,2,28,28,248,22,151,15,23,195,2,249,22,159,9,248,22,152,15,23,197, -2,2,46,249,22,159,9,247,22,171,8,2,46,27,28,248,22,144,7,23,196, -2,23,195,2,248,22,156,8,248,22,155,15,23,197,2,28,249,22,145,16,2, -74,23,195,2,86,94,23,193,1,28,248,22,144,7,23,196,2,248,22,158,15, -23,196,1,194,27,248,22,183,7,23,195,1,249,22,159,15,248,22,159,8,250, -22,153,16,2,75,28,249,22,145,16,2,76,23,201,2,23,199,1,250,22,153, -16,2,77,23,202,1,2,47,80,159,44,37,38,2,46,28,248,22,144,7,23, -195,2,248,22,158,15,23,195,1,193,0,28,35,114,120,34,94,92,92,92,92, +92,92,93,42,41,36,34,86,94,28,28,248,22,154,15,23,195,2,10,28,248, +22,153,15,23,195,2,10,28,248,22,147,7,23,195,2,28,248,22,176,15,23, +195,2,10,248,22,177,15,23,195,2,11,12,250,22,171,11,2,44,2,45,23, +197,2,28,28,248,22,154,15,23,195,2,249,22,162,9,248,22,155,15,23,197, +2,2,46,249,22,162,9,247,22,174,8,2,46,27,28,248,22,147,7,23,196, +2,23,195,2,248,22,159,8,248,22,158,15,23,197,2,28,249,22,148,16,2, +74,23,195,2,86,94,23,193,1,28,248,22,147,7,23,196,2,248,22,161,15, +23,196,1,194,27,248,22,186,7,23,195,1,249,22,162,15,248,22,162,8,250, +22,156,16,2,75,28,249,22,148,16,2,76,23,201,2,23,199,1,250,22,156, +16,2,77,23,202,1,2,47,80,159,44,37,38,2,46,28,248,22,147,7,23, +195,2,248,22,161,15,23,195,1,193,0,28,35,114,120,34,94,92,92,92,92, 92,92,92,92,91,63,93,92,92,92,92,85,78,67,92,92,92,92,34,86,95, -28,28,28,248,22,150,15,23,195,2,10,28,248,22,144,7,23,195,2,28,248, -22,173,15,23,195,2,10,248,22,174,15,23,195,2,11,10,248,22,151,15,23, -195,2,12,252,22,168,11,2,5,2,48,36,23,199,2,23,200,2,28,28,28, -248,22,150,15,23,196,2,10,28,248,22,144,7,23,196,2,28,248,22,173,15, -23,196,2,10,248,22,174,15,23,196,2,11,10,248,22,151,15,23,196,2,12, -252,22,168,11,2,5,2,48,37,23,199,2,23,200,2,27,28,248,22,151,15, -23,196,2,248,22,152,15,23,196,2,247,22,153,15,86,95,28,28,248,22,175, -15,23,196,2,10,249,22,159,9,247,22,153,15,23,195,2,12,253,22,170,11, +28,28,28,248,22,153,15,23,195,2,10,28,248,22,147,7,23,195,2,28,248, +22,176,15,23,195,2,10,248,22,177,15,23,195,2,11,10,248,22,154,15,23, +195,2,12,252,22,171,11,2,5,2,48,36,23,199,2,23,200,2,28,28,28, +248,22,153,15,23,196,2,10,28,248,22,147,7,23,196,2,28,248,22,176,15, +23,196,2,10,248,22,177,15,23,196,2,11,10,248,22,154,15,23,196,2,12, +252,22,171,11,2,5,2,48,37,23,199,2,23,200,2,27,28,248,22,154,15, +23,196,2,248,22,155,15,23,196,2,247,22,156,15,86,95,28,28,248,22,178, +15,23,196,2,10,249,22,162,9,247,22,156,15,23,195,2,12,253,22,173,11, 2,5,6,54,54,112,97,116,104,32,105,115,32,110,111,116,32,99,111,109,112, 108,101,116,101,32,97,110,100,32,110,111,116,32,116,104,101,32,112,108,97,116, 102,111,114,109,39,115,32,99,111,110,118,101,110,116,105,111,110,2,49,23,201, 2,6,24,24,112,108,97,116,102,111,114,109,32,99,111,110,118,101,110,116,105, -111,110,32,116,121,112,101,247,22,153,15,28,249,22,159,9,28,248,22,151,15, -23,199,2,248,22,152,15,23,199,2,247,22,153,15,23,195,2,12,253,22,170, +111,110,32,116,121,112,101,247,22,156,15,28,249,22,162,9,28,248,22,154,15, +23,199,2,248,22,155,15,23,199,2,247,22,156,15,23,195,2,12,253,22,173, 11,2,5,6,37,37,103,105,118,101,110,32,112,97,116,104,115,32,117,115,101, 32,100,105,102,102,101,114,101,110,116,32,99,111,110,118,101,110,116,105,111,110, 115,2,49,23,201,2,6,9,9,114,111,111,116,32,112,97,116,104,23,202,2, -27,27,248,22,179,15,28,248,22,175,15,23,199,2,23,198,1,248,22,176,15, -23,199,1,86,94,28,28,248,22,151,15,23,194,2,10,28,248,22,150,15,23, -194,2,10,28,248,22,144,7,23,194,2,28,248,22,173,15,23,194,2,10,248, -22,174,15,23,194,2,11,12,250,22,168,11,2,44,2,45,23,196,2,28,28, -248,22,151,15,23,194,2,249,22,159,9,248,22,152,15,23,196,2,2,46,249, -22,159,9,247,22,171,8,2,46,27,28,248,22,144,7,23,195,2,23,194,2, -248,22,156,8,248,22,155,15,23,196,2,28,249,22,145,16,2,74,23,195,2, -86,94,23,193,1,28,248,22,144,7,23,195,2,248,22,158,15,23,195,1,193, -27,248,22,183,7,23,195,1,249,22,159,15,248,22,159,8,250,22,153,16,2, -75,28,249,22,145,16,2,76,23,201,2,23,199,1,250,22,153,16,2,77,23, -202,1,2,47,80,159,47,37,38,2,46,28,248,22,144,7,23,194,2,248,22, -158,15,23,194,1,192,27,248,22,155,15,23,195,2,28,249,22,159,9,23,197, -2,64,117,110,105,120,28,249,22,141,8,23,195,1,5,1,47,86,95,23,195, -1,23,194,1,28,248,22,151,15,23,199,2,197,248,22,158,15,23,199,1,249, -22,168,15,23,200,1,249,22,159,15,249,22,144,8,248,22,155,15,23,201,1, -37,23,199,1,28,249,22,159,9,23,197,2,2,46,249,22,168,15,23,200,1, -249,22,159,15,28,249,22,145,16,0,27,35,114,120,34,94,92,92,92,92,92, +27,27,248,22,182,15,28,248,22,178,15,23,199,2,23,198,1,248,22,179,15, +23,199,1,86,94,28,28,248,22,154,15,23,194,2,10,28,248,22,153,15,23, +194,2,10,28,248,22,147,7,23,194,2,28,248,22,176,15,23,194,2,10,248, +22,177,15,23,194,2,11,12,250,22,171,11,2,44,2,45,23,196,2,28,28, +248,22,154,15,23,194,2,249,22,162,9,248,22,155,15,23,196,2,2,46,249, +22,162,9,247,22,174,8,2,46,27,28,248,22,147,7,23,195,2,23,194,2, +248,22,159,8,248,22,158,15,23,196,2,28,249,22,148,16,2,74,23,195,2, +86,94,23,193,1,28,248,22,147,7,23,195,2,248,22,161,15,23,195,1,193, +27,248,22,186,7,23,195,1,249,22,162,15,248,22,162,8,250,22,156,16,2, +75,28,249,22,148,16,2,76,23,201,2,23,199,1,250,22,156,16,2,77,23, +202,1,2,47,80,159,47,37,38,2,46,28,248,22,147,7,23,194,2,248,22, +161,15,23,194,1,192,27,248,22,158,15,23,195,2,28,249,22,162,9,23,197, +2,64,117,110,105,120,28,249,22,144,8,23,195,1,5,1,47,86,95,23,195, +1,23,194,1,28,248,22,154,15,23,199,2,197,248,22,161,15,23,199,1,249, +22,171,15,23,200,1,249,22,162,15,249,22,147,8,248,22,158,15,23,201,1, +37,23,199,1,28,249,22,162,9,23,197,2,2,46,249,22,171,15,23,200,1, +249,22,162,15,28,249,22,148,16,0,27,35,114,120,34,94,92,92,92,92,92, 92,92,92,91,63,93,92,92,92,92,91,97,45,122,93,58,34,23,199,2,251, -22,145,8,2,50,250,22,144,8,23,204,2,40,41,5,1,92,249,22,144,8, -23,203,1,42,28,249,22,145,16,2,79,23,199,2,249,22,145,8,2,50,249, -22,144,8,23,201,1,40,28,249,22,145,16,2,79,23,199,2,249,22,145,8, -2,50,249,22,144,8,23,201,1,40,28,249,22,145,16,0,14,35,114,120,34, -94,92,92,92,92,92,92,92,92,34,23,199,2,249,22,145,8,5,4,85,78, -67,92,249,22,144,8,23,201,1,38,28,249,22,145,16,0,12,35,114,120,34, -94,91,97,45,122,93,58,34,23,199,2,249,22,145,8,250,22,144,8,23,202, -2,36,37,249,22,144,8,23,201,1,38,86,94,23,197,1,12,23,199,1,12, +22,148,8,2,50,250,22,147,8,23,204,2,40,41,5,1,92,249,22,147,8, +23,203,1,42,28,249,22,148,16,2,79,23,199,2,249,22,148,8,2,50,249, +22,147,8,23,201,1,40,28,249,22,148,16,2,79,23,199,2,249,22,148,8, +2,50,249,22,147,8,23,201,1,40,28,249,22,148,16,0,14,35,114,120,34, +94,92,92,92,92,92,92,92,92,34,23,199,2,249,22,148,8,5,4,85,78, +67,92,249,22,147,8,23,201,1,38,28,249,22,148,16,0,12,35,114,120,34, +94,91,97,45,122,93,58,34,23,199,2,249,22,148,8,250,22,147,8,23,202, +2,36,37,249,22,147,8,23,201,1,38,86,94,23,197,1,12,23,199,1,12, 32,81,88,163,8,36,39,53,11,70,102,111,117,110,100,45,101,120,101,99,222, 33,84,32,82,88,163,8,36,40,58,11,64,110,101,120,116,222,33,83,27,248, -22,177,15,23,196,2,28,249,22,161,9,23,195,2,23,197,1,11,28,248,22, -173,15,23,194,2,27,249,22,168,15,23,197,1,23,196,1,28,23,197,2,90, -159,39,11,89,161,39,36,11,248,22,171,15,23,197,2,86,95,23,195,1,23, -194,1,27,28,23,202,2,27,248,22,177,15,23,199,2,28,249,22,161,9,23, -195,2,23,200,2,11,28,248,22,173,15,23,194,2,250,2,81,23,205,2,23, -206,2,249,22,168,15,23,200,2,23,198,1,250,2,81,23,205,2,23,206,2, -23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,150,15,23, -196,2,27,249,22,168,15,23,198,2,23,205,2,28,28,248,22,163,15,193,10, -248,22,162,15,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,203, -2,11,27,248,22,177,15,23,200,2,28,249,22,161,9,23,195,2,23,201,1, -11,28,248,22,173,15,23,194,2,250,2,81,23,206,1,23,207,1,249,22,168, +22,180,15,23,196,2,28,249,22,164,9,23,195,2,23,197,1,11,28,248,22, +176,15,23,194,2,27,249,22,171,15,23,197,1,23,196,1,28,23,197,2,90, +159,39,11,89,161,39,36,11,248,22,174,15,23,197,2,86,95,23,195,1,23, +194,1,27,28,23,202,2,27,248,22,180,15,23,199,2,28,249,22,164,9,23, +195,2,23,200,2,11,28,248,22,176,15,23,194,2,250,2,81,23,205,2,23, +206,2,249,22,171,15,23,200,2,23,198,1,250,2,81,23,205,2,23,206,2, +23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,153,15,23, +196,2,27,249,22,171,15,23,198,2,23,205,2,28,28,248,22,166,15,193,10, +248,22,165,15,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,203, +2,11,27,248,22,180,15,23,200,2,28,249,22,164,9,23,195,2,23,201,1, +11,28,248,22,176,15,23,194,2,250,2,81,23,206,1,23,207,1,249,22,171, 15,23,201,1,23,198,1,250,2,81,205,206,195,192,86,94,23,194,1,28,23, -196,2,90,159,39,11,89,161,39,36,11,248,22,171,15,23,197,2,86,95,23, -195,1,23,194,1,27,28,23,201,2,27,248,22,177,15,23,199,2,28,249,22, -161,9,23,195,2,23,200,2,11,28,248,22,173,15,23,194,2,250,2,81,23, -204,2,23,205,2,249,22,168,15,23,200,2,23,198,1,250,2,81,23,204,2, +196,2,90,159,39,11,89,161,39,36,11,248,22,174,15,23,197,2,86,95,23, +195,1,23,194,1,27,28,23,201,2,27,248,22,180,15,23,199,2,28,249,22, +164,9,23,195,2,23,200,2,11,28,248,22,176,15,23,194,2,250,2,81,23, +204,2,23,205,2,249,22,171,15,23,200,2,23,198,1,250,2,81,23,204,2, 23,205,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22, -150,15,23,196,2,27,249,22,168,15,23,198,2,23,204,2,28,28,248,22,163, -15,193,10,248,22,162,15,193,192,11,11,28,23,193,2,192,86,94,23,193,1, -28,23,202,2,11,27,248,22,177,15,23,200,2,28,249,22,161,9,23,195,2, -23,201,1,11,28,248,22,173,15,23,194,2,250,2,81,23,205,1,23,206,1, -249,22,168,15,23,201,1,23,198,1,250,2,81,204,205,195,192,28,23,193,2, -90,159,39,11,89,161,39,36,11,248,22,171,15,23,199,2,86,95,23,195,1, +153,15,23,196,2,27,249,22,171,15,23,198,2,23,204,2,28,28,248,22,166, +15,193,10,248,22,165,15,193,192,11,11,28,23,193,2,192,86,94,23,193,1, +28,23,202,2,11,27,248,22,180,15,23,200,2,28,249,22,164,9,23,195,2, +23,201,1,11,28,248,22,176,15,23,194,2,250,2,81,23,205,1,23,206,1, +249,22,171,15,23,201,1,23,198,1,250,2,81,204,205,195,192,28,23,193,2, +90,159,39,11,89,161,39,36,11,248,22,174,15,23,199,2,86,95,23,195,1, 23,194,1,27,28,23,198,2,251,2,82,23,198,2,23,203,2,23,201,2,23, -202,2,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,150,15,195,27, -249,22,168,15,197,200,28,28,248,22,163,15,193,10,248,22,162,15,193,192,11, +202,2,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,153,15,195,27, +249,22,171,15,197,200,28,28,248,22,166,15,193,10,248,22,165,15,193,192,11, 11,28,192,192,28,198,11,251,2,82,198,203,201,202,194,32,85,88,163,8,36, -40,58,11,2,53,222,33,86,28,248,22,87,23,197,2,11,27,248,22,176,15, -248,22,80,23,199,2,27,249,22,168,15,23,196,1,23,197,2,28,248,22,162, +40,58,11,2,53,222,33,86,28,248,22,87,23,197,2,11,27,248,22,179,15, +248,22,80,23,199,2,27,249,22,171,15,23,196,1,23,197,2,28,248,22,165, 15,23,194,2,250,2,81,198,199,195,86,94,23,193,1,27,248,22,81,23,200, -1,28,248,22,87,23,194,2,11,27,248,22,176,15,248,22,80,23,196,2,27, -249,22,168,15,23,196,1,23,200,2,28,248,22,162,15,23,194,2,250,2,81, +1,28,248,22,87,23,194,2,11,27,248,22,179,15,248,22,80,23,196,2,27, +249,22,171,15,23,196,1,23,200,2,28,248,22,165,15,23,194,2,250,2,81, 201,202,195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,194, -2,11,27,248,22,176,15,248,22,80,195,27,249,22,168,15,23,196,1,202,28, -248,22,162,15,193,250,2,81,204,205,195,251,2,85,204,205,206,248,22,81,199, -86,95,28,28,248,22,150,15,23,195,2,10,28,248,22,144,7,23,195,2,28, -248,22,173,15,23,195,2,10,248,22,174,15,23,195,2,11,12,250,22,168,11, -2,6,2,51,23,197,2,28,28,23,195,2,28,28,248,22,150,15,23,196,2, -10,28,248,22,144,7,23,196,2,28,248,22,173,15,23,196,2,10,248,22,174, -15,23,196,2,11,248,22,173,15,23,196,2,11,10,12,250,22,168,11,2,6, +2,11,27,248,22,179,15,248,22,80,195,27,249,22,171,15,23,196,1,202,28, +248,22,165,15,193,250,2,81,204,205,195,251,2,85,204,205,206,248,22,81,199, +86,95,28,28,248,22,153,15,23,195,2,10,28,248,22,147,7,23,195,2,28, +248,22,176,15,23,195,2,10,248,22,177,15,23,195,2,11,12,250,22,171,11, +2,6,2,51,23,197,2,28,28,23,195,2,28,28,248,22,153,15,23,196,2, +10,28,248,22,147,7,23,196,2,28,248,22,176,15,23,196,2,10,248,22,177, +15,23,196,2,11,248,22,176,15,23,196,2,11,10,12,250,22,171,11,2,6, 6,45,45,40,111,114,47,99,32,35,102,32,40,97,110,100,47,99,32,112,97, 116,104,45,115,116,114,105,110,103,63,32,114,101,108,97,116,105,118,101,45,112, -97,116,104,63,41,41,23,198,2,28,28,248,22,173,15,23,195,2,90,159,39, -11,89,161,39,36,11,248,22,171,15,23,198,2,249,22,159,9,194,2,52,11, -27,249,22,166,8,247,22,165,8,5,4,80,65,84,72,27,28,23,194,2,249, -80,158,40,41,249,22,156,8,23,198,1,7,63,9,86,94,23,194,1,9,27, -28,249,22,159,9,247,22,171,8,2,46,249,22,79,248,22,159,15,5,1,46, -23,196,1,23,194,1,28,248,22,87,23,194,2,11,27,248,22,176,15,248,22, -80,23,196,2,27,249,22,168,15,23,196,1,23,201,2,28,248,22,162,15,23, +97,116,104,63,41,41,23,198,2,28,28,248,22,176,15,23,195,2,90,159,39, +11,89,161,39,36,11,248,22,174,15,23,198,2,249,22,162,9,194,2,52,11, +27,249,22,169,8,247,22,168,8,5,4,80,65,84,72,27,28,23,194,2,249, +80,158,40,41,249,22,159,8,23,198,1,7,63,9,86,94,23,194,1,9,27, +28,249,22,162,9,247,22,174,8,2,46,249,22,79,248,22,162,15,5,1,46, +23,196,1,23,194,1,28,248,22,87,23,194,2,11,27,248,22,179,15,248,22, +80,23,196,2,27,249,22,171,15,23,196,1,23,201,2,28,248,22,165,15,23, 194,2,250,2,81,202,203,195,86,94,23,193,1,27,248,22,81,23,197,1,28, -248,22,87,23,194,2,11,27,248,22,176,15,248,22,80,23,196,2,27,249,22, -168,15,23,196,1,23,204,2,28,248,22,162,15,23,194,2,250,2,81,205,206, +248,22,87,23,194,2,11,27,248,22,179,15,248,22,80,23,196,2,27,249,22, +171,15,23,196,1,23,204,2,28,248,22,165,15,23,194,2,250,2,81,205,206, 195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,194,2,11, -27,248,22,176,15,248,22,80,195,27,249,22,168,15,23,196,1,206,28,248,22, -162,15,193,250,2,81,23,16,23,17,195,251,2,85,23,16,23,17,23,18,248, -22,81,199,27,248,22,176,15,23,196,1,28,248,22,162,15,193,250,2,81,198, +27,248,22,179,15,248,22,80,195,27,249,22,171,15,23,196,1,206,28,248,22, +165,15,193,250,2,81,23,16,23,17,195,251,2,85,23,16,23,17,23,18,248, +22,81,199,27,248,22,179,15,23,196,1,28,248,22,165,15,193,250,2,81,198, 199,195,11,250,80,159,39,40,39,196,197,11,250,80,159,39,40,39,196,11,11, 32,90,88,163,8,36,39,57,11,2,53,222,33,92,0,8,35,114,120,35,34, -92,34,34,27,249,22,141,16,23,197,2,23,198,2,28,23,193,2,86,94,23, -196,1,27,248,22,101,23,195,2,27,27,248,22,110,23,197,1,27,249,22,141, +92,34,34,27,249,22,144,16,23,197,2,23,198,2,28,23,193,2,86,94,23, +196,1,27,248,22,101,23,195,2,27,27,248,22,110,23,197,1,27,249,22,144, 16,23,201,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,101,23, 195,2,27,250,2,90,23,203,2,23,204,1,248,22,110,23,199,1,28,249,22, -141,8,23,196,2,2,54,249,22,93,23,202,2,194,249,22,79,248,22,159,15, -28,249,22,159,9,247,22,171,8,2,46,250,22,153,16,2,91,23,200,1,2, -54,23,197,1,194,86,95,23,199,1,23,193,1,28,249,22,141,8,23,196,2, -2,54,249,22,93,23,200,2,9,249,22,79,248,22,159,15,28,249,22,159,9, -247,22,171,8,2,46,250,22,153,16,2,91,23,200,1,2,54,23,197,1,9, -28,249,22,141,8,23,196,2,2,54,249,22,93,197,194,86,94,23,196,1,249, -22,79,248,22,159,15,28,249,22,159,9,247,22,171,8,2,46,250,22,153,16, -2,91,23,200,1,2,54,23,197,1,194,86,94,23,193,1,28,249,22,141,8, -23,198,2,2,54,249,22,93,195,9,86,94,23,194,1,249,22,79,248,22,159, -15,28,249,22,159,9,247,22,171,8,2,46,250,22,153,16,2,91,23,202,1, -2,54,23,199,1,9,86,95,28,28,248,22,133,8,194,10,248,22,144,7,194, -12,250,22,168,11,2,7,6,21,21,40,111,114,47,99,32,98,121,116,101,115, +144,8,23,196,2,2,54,249,22,93,23,202,2,194,249,22,79,248,22,162,15, +28,249,22,162,9,247,22,174,8,2,46,250,22,156,16,2,91,23,200,1,2, +54,23,197,1,194,86,95,23,199,1,23,193,1,28,249,22,144,8,23,196,2, +2,54,249,22,93,23,200,2,9,249,22,79,248,22,162,15,28,249,22,162,9, +247,22,174,8,2,46,250,22,156,16,2,91,23,200,1,2,54,23,197,1,9, +28,249,22,144,8,23,196,2,2,54,249,22,93,197,194,86,94,23,196,1,249, +22,79,248,22,162,15,28,249,22,162,9,247,22,174,8,2,46,250,22,156,16, +2,91,23,200,1,2,54,23,197,1,194,86,94,23,193,1,28,249,22,144,8, +23,198,2,2,54,249,22,93,195,9,86,94,23,194,1,249,22,79,248,22,162, +15,28,249,22,162,9,247,22,174,8,2,46,250,22,156,16,2,91,23,202,1, +2,54,23,199,1,9,86,95,28,28,248,22,136,8,194,10,248,22,147,7,194, +12,250,22,171,11,2,7,6,21,21,40,111,114,47,99,32,98,121,116,101,115, 63,32,115,116,114,105,110,103,63,41,196,28,28,248,22,88,195,249,22,4,22, -150,15,196,11,12,250,22,168,11,2,7,6,14,14,40,108,105,115,116,111,102, -32,112,97,116,104,63,41,197,250,2,90,197,195,28,248,22,144,7,197,248,22, -158,8,197,196,86,94,28,28,248,22,150,15,23,195,2,10,28,248,22,144,7, -23,195,2,28,248,22,173,15,23,195,2,10,248,22,174,15,23,195,2,11,12, -250,22,168,11,23,196,2,2,51,23,197,2,28,248,22,173,15,23,195,2,12, -251,22,170,11,23,197,1,2,55,2,49,23,198,1,86,94,28,28,248,22,150, -15,23,195,2,10,28,248,22,144,7,23,195,2,28,248,22,173,15,23,195,2, -10,248,22,174,15,23,195,2,11,12,250,22,168,11,23,196,2,2,51,23,197, -2,28,248,22,173,15,23,195,2,12,251,22,170,11,23,197,1,2,55,2,49, -23,198,1,86,94,86,94,28,28,248,22,150,15,23,195,2,10,28,248,22,144, -7,23,195,2,28,248,22,173,15,23,195,2,10,248,22,174,15,23,195,2,11, -12,250,22,168,11,23,196,2,2,51,23,197,2,28,248,22,173,15,23,195,2, -86,94,23,194,1,12,251,22,170,11,23,197,2,2,55,2,49,23,198,1,249, +153,15,196,11,12,250,22,171,11,2,7,6,14,14,40,108,105,115,116,111,102, +32,112,97,116,104,63,41,197,250,2,90,197,195,28,248,22,147,7,197,248,22, +161,8,197,196,86,94,28,28,248,22,153,15,23,195,2,10,28,248,22,147,7, +23,195,2,28,248,22,176,15,23,195,2,10,248,22,177,15,23,195,2,11,12, +250,22,171,11,23,196,2,2,51,23,197,2,28,248,22,176,15,23,195,2,12, +251,22,173,11,23,197,1,2,55,2,49,23,198,1,86,94,28,28,248,22,153, +15,23,195,2,10,28,248,22,147,7,23,195,2,28,248,22,176,15,23,195,2, +10,248,22,177,15,23,195,2,11,12,250,22,171,11,23,196,2,2,51,23,197, +2,28,248,22,176,15,23,195,2,12,251,22,173,11,23,197,1,2,55,2,49, +23,198,1,86,94,86,94,28,28,248,22,153,15,23,195,2,10,28,248,22,147, +7,23,195,2,28,248,22,176,15,23,195,2,10,248,22,177,15,23,195,2,11, +12,250,22,171,11,23,196,2,2,51,23,197,2,28,248,22,176,15,23,195,2, +86,94,23,194,1,12,251,22,173,11,23,197,2,2,55,2,49,23,198,1,249, 22,3,20,20,94,88,163,8,36,37,47,11,9,223,2,33,95,23,195,1,23, 197,1,28,28,248,22,0,23,195,2,249,22,50,23,196,2,37,11,12,250,22, -168,11,23,196,1,2,56,23,197,1,86,94,28,28,248,22,150,15,23,194,2, -10,28,248,22,144,7,23,194,2,28,248,22,173,15,23,194,2,10,248,22,174, -15,23,194,2,11,12,250,22,168,11,2,11,2,51,23,196,2,28,248,22,173, -15,23,194,2,12,251,22,170,11,2,11,2,55,2,49,23,197,1,86,95,86, -94,86,94,28,28,248,22,150,15,23,196,2,10,28,248,22,144,7,23,196,2, -28,248,22,173,15,23,196,2,10,248,22,174,15,23,196,2,11,12,250,22,168, -11,2,11,2,51,23,198,2,28,248,22,173,15,23,196,2,12,251,22,170,11, +171,11,23,196,1,2,56,23,197,1,86,94,28,28,248,22,153,15,23,194,2, +10,28,248,22,147,7,23,194,2,28,248,22,176,15,23,194,2,10,248,22,177, +15,23,194,2,11,12,250,22,171,11,2,11,2,51,23,196,2,28,248,22,176, +15,23,194,2,12,251,22,173,11,2,11,2,55,2,49,23,197,1,86,95,86, +94,86,94,28,28,248,22,153,15,23,196,2,10,28,248,22,147,7,23,196,2, +28,248,22,176,15,23,196,2,10,248,22,177,15,23,196,2,11,12,250,22,171, +11,2,11,2,51,23,198,2,28,248,22,176,15,23,196,2,12,251,22,173,11, 2,11,2,55,2,49,23,199,2,249,22,3,32,0,88,163,8,36,37,46,11, 9,222,33,98,23,198,2,28,28,248,22,0,23,195,2,249,22,50,23,196,2, -37,11,12,250,22,168,11,2,11,2,56,23,197,2,251,80,158,40,46,23,198, -1,23,199,1,23,200,1,11,86,94,28,28,248,22,150,15,23,194,2,10,28, -248,22,144,7,23,194,2,28,248,22,173,15,23,194,2,10,248,22,174,15,23, -194,2,11,12,250,22,168,11,2,13,2,51,23,196,2,28,248,22,173,15,23, -194,2,12,251,22,170,11,2,13,2,55,2,49,23,197,1,86,96,86,94,28, -28,248,22,150,15,23,196,2,10,28,248,22,144,7,23,196,2,28,248,22,173, -15,23,196,2,10,248,22,174,15,23,196,2,11,12,250,22,168,11,2,13,2, -51,23,198,2,28,248,22,173,15,23,196,2,12,251,22,170,11,2,13,2,55, -2,49,23,199,2,86,94,86,94,28,28,248,22,150,15,23,197,2,10,28,248, -22,144,7,23,197,2,28,248,22,173,15,23,197,2,10,248,22,174,15,23,197, -2,11,12,250,22,168,11,2,13,2,51,23,199,2,28,248,22,173,15,23,197, -2,12,251,22,170,11,2,13,2,55,2,49,23,200,2,249,22,3,32,0,88, +37,11,12,250,22,171,11,2,11,2,56,23,197,2,251,80,158,40,46,23,198, +1,23,199,1,23,200,1,11,86,94,28,28,248,22,153,15,23,194,2,10,28, +248,22,147,7,23,194,2,28,248,22,176,15,23,194,2,10,248,22,177,15,23, +194,2,11,12,250,22,171,11,2,13,2,51,23,196,2,28,248,22,176,15,23, +194,2,12,251,22,173,11,2,13,2,55,2,49,23,197,1,86,96,86,94,28, +28,248,22,153,15,23,196,2,10,28,248,22,147,7,23,196,2,28,248,22,176, +15,23,196,2,10,248,22,177,15,23,196,2,11,12,250,22,171,11,2,13,2, +51,23,198,2,28,248,22,176,15,23,196,2,12,251,22,173,11,2,13,2,55, +2,49,23,199,2,86,94,86,94,28,28,248,22,153,15,23,197,2,10,28,248, +22,147,7,23,197,2,28,248,22,176,15,23,197,2,10,248,22,177,15,23,197, +2,11,12,250,22,171,11,2,13,2,51,23,199,2,28,248,22,176,15,23,197, +2,12,251,22,173,11,2,13,2,55,2,49,23,200,2,249,22,3,32,0,88, 163,8,36,37,46,11,9,222,33,100,23,199,2,28,28,248,22,0,23,195,2, -249,22,50,23,196,2,37,11,12,250,22,168,11,2,13,2,56,23,197,2,251, -80,158,40,46,23,198,1,23,200,1,23,201,1,23,199,1,27,248,22,191,15, -2,59,28,248,22,175,15,23,194,2,192,27,28,248,22,173,15,23,195,2,20, +249,22,50,23,196,2,37,11,12,250,22,171,11,2,13,2,56,23,197,2,251, +80,158,40,46,23,198,1,23,200,1,23,201,1,23,199,1,27,248,22,130,16, +2,59,28,248,22,178,15,23,194,2,192,27,28,248,22,176,15,23,195,2,20, 13,159,80,159,38,55,37,250,80,159,41,56,37,249,22,33,11,80,159,43,55, -37,22,128,16,248,22,191,15,2,60,27,248,22,191,15,2,61,250,80,159,42, +37,22,131,16,248,22,130,16,2,60,27,248,22,130,16,2,61,250,80,159,42, 40,39,23,196,1,23,198,2,11,11,28,23,193,2,192,86,94,23,193,1,27, -249,22,176,15,27,248,22,191,15,2,61,250,80,159,45,40,39,23,196,1,11, -11,248,22,191,15,2,60,90,159,39,11,89,161,39,36,11,248,22,171,15,23, -197,1,86,95,23,195,1,23,194,1,249,22,176,15,23,200,1,23,195,1,27, -249,22,168,15,23,196,1,6,11,11,99,111,110,102,105,103,46,114,107,116,100, -27,28,248,22,162,15,23,195,2,249,22,132,6,23,196,1,22,139,6,11,28, -192,192,21,17,1,0,28,248,22,144,7,23,195,2,27,248,22,158,15,23,196, -1,28,248,22,175,15,23,194,2,192,249,22,176,15,23,195,1,27,27,248,22, -191,15,2,62,28,248,22,175,15,23,194,2,192,28,248,22,174,15,23,194,2, -249,22,176,15,23,195,1,249,22,176,15,250,80,159,48,40,39,248,22,191,15, -2,61,11,10,248,22,191,15,2,60,250,80,159,44,40,39,248,22,191,15,2, -61,23,196,1,10,28,23,193,2,192,86,94,23,193,1,248,22,191,15,2,60, -28,248,22,133,8,23,195,2,27,248,22,159,15,23,196,1,28,248,22,175,15, -23,194,2,192,249,22,176,15,23,195,1,27,27,248,22,191,15,2,62,28,248, -22,175,15,23,194,2,192,28,248,22,174,15,23,194,2,249,22,176,15,23,195, -1,249,22,176,15,250,80,159,48,40,39,248,22,191,15,2,61,11,10,248,22, -191,15,2,60,250,80,159,44,40,39,248,22,191,15,2,61,23,196,1,10,28, -23,193,2,192,86,94,23,193,1,248,22,191,15,2,60,28,248,22,150,15,23, -195,2,28,248,22,175,15,23,195,2,193,249,22,176,15,23,196,1,27,27,248, -22,191,15,2,62,28,248,22,175,15,23,194,2,192,28,248,22,174,15,23,194, -2,249,22,176,15,23,195,1,249,22,176,15,250,80,159,47,40,39,248,22,191, -15,2,61,11,10,248,22,191,15,2,60,250,80,159,43,40,39,248,22,191,15, -2,61,23,196,1,10,28,23,193,2,192,86,94,23,193,1,248,22,191,15,2, -60,193,28,248,22,175,15,23,195,2,193,249,22,176,15,23,196,1,27,27,248, -22,191,15,2,62,28,248,22,175,15,23,194,2,192,28,248,22,174,15,23,194, -2,249,22,176,15,23,195,1,249,22,176,15,250,80,159,47,40,39,248,22,191, -15,2,61,11,10,248,22,191,15,2,60,250,80,159,43,40,39,248,22,191,15, -2,61,23,196,1,10,28,23,193,2,192,86,94,23,193,1,248,22,191,15,2, -60,28,248,22,175,15,23,195,2,193,28,248,22,174,15,23,195,2,249,22,176, -15,23,196,1,249,22,176,15,250,80,159,43,40,39,248,22,191,15,2,61,11, -10,248,22,191,15,2,60,250,80,159,39,40,39,248,22,191,15,2,61,196,10, +249,22,179,15,27,248,22,130,16,2,61,250,80,159,45,40,39,23,196,1,11, +11,248,22,130,16,2,60,90,159,39,11,89,161,39,36,11,248,22,174,15,23, +197,1,86,95,23,195,1,23,194,1,249,22,179,15,23,200,1,23,195,1,27, +249,22,171,15,23,196,1,6,11,11,99,111,110,102,105,103,46,114,107,116,100, +27,28,248,22,165,15,23,195,2,249,22,132,6,23,196,1,22,142,6,11,28, +192,192,21,17,1,0,28,248,22,147,7,23,195,2,27,248,22,161,15,23,196, +1,28,248,22,178,15,23,194,2,192,249,22,179,15,23,195,1,27,27,248,22, +130,16,2,62,28,248,22,178,15,23,194,2,192,28,248,22,177,15,23,194,2, +249,22,179,15,23,195,1,249,22,179,15,250,80,159,48,40,39,248,22,130,16, +2,61,11,10,248,22,130,16,2,60,250,80,159,44,40,39,248,22,130,16,2, +61,23,196,1,10,28,23,193,2,192,86,94,23,193,1,248,22,130,16,2,60, +28,248,22,136,8,23,195,2,27,248,22,162,15,23,196,1,28,248,22,178,15, +23,194,2,192,249,22,179,15,23,195,1,27,27,248,22,130,16,2,62,28,248, +22,178,15,23,194,2,192,28,248,22,177,15,23,194,2,249,22,179,15,23,195, +1,249,22,179,15,250,80,159,48,40,39,248,22,130,16,2,61,11,10,248,22, +130,16,2,60,250,80,159,44,40,39,248,22,130,16,2,61,23,196,1,10,28, +23,193,2,192,86,94,23,193,1,248,22,130,16,2,60,28,248,22,153,15,23, +195,2,28,248,22,178,15,23,195,2,193,249,22,179,15,23,196,1,27,27,248, +22,130,16,2,62,28,248,22,178,15,23,194,2,192,28,248,22,177,15,23,194, +2,249,22,179,15,23,195,1,249,22,179,15,250,80,159,47,40,39,248,22,130, +16,2,61,11,10,248,22,130,16,2,60,250,80,159,43,40,39,248,22,130,16, +2,61,23,196,1,10,28,23,193,2,192,86,94,23,193,1,248,22,130,16,2, +60,193,28,248,22,178,15,23,195,2,193,249,22,179,15,23,196,1,27,27,248, +22,130,16,2,62,28,248,22,178,15,23,194,2,192,28,248,22,177,15,23,194, +2,249,22,179,15,23,195,1,249,22,179,15,250,80,159,47,40,39,248,22,130, +16,2,61,11,10,248,22,130,16,2,60,250,80,159,43,40,39,248,22,130,16, +2,61,23,196,1,10,28,23,193,2,192,86,94,23,193,1,248,22,130,16,2, +60,28,248,22,178,15,23,195,2,193,28,248,22,177,15,23,195,2,249,22,179, +15,23,196,1,249,22,179,15,250,80,159,43,40,39,248,22,130,16,2,61,11, +10,248,22,130,16,2,60,250,80,159,39,40,39,248,22,130,16,2,61,196,10, 28,248,22,87,23,196,2,9,28,248,22,80,23,196,2,249,22,79,248,80,159, -39,58,39,248,22,132,18,23,199,2,27,248,22,133,18,23,199,1,28,248,22, +39,58,39,248,22,135,18,23,199,2,27,248,22,136,18,23,199,1,28,248,22, 87,23,194,2,9,28,248,22,80,23,194,2,249,22,79,248,80,159,42,58,39, -248,22,132,18,23,197,2,27,248,22,133,18,23,197,1,28,248,22,87,23,194, -2,9,28,248,22,80,23,194,2,249,22,79,248,80,159,45,58,39,248,22,132, -18,23,197,2,249,80,159,46,8,42,39,23,204,1,248,22,133,18,23,198,1, -249,22,93,23,202,2,249,80,159,46,8,42,39,23,204,1,248,22,133,18,23, -198,1,249,22,93,23,199,2,27,248,22,133,18,23,197,1,28,248,22,87,23, +248,22,135,18,23,197,2,27,248,22,136,18,23,197,1,28,248,22,87,23,194, +2,9,28,248,22,80,23,194,2,249,22,79,248,80,159,45,58,39,248,22,135, +18,23,197,2,249,80,159,46,8,42,39,23,204,1,248,22,136,18,23,198,1, +249,22,93,23,202,2,249,80,159,46,8,42,39,23,204,1,248,22,136,18,23, +198,1,249,22,93,23,199,2,27,248,22,136,18,23,197,1,28,248,22,87,23, 194,2,9,28,248,22,80,23,194,2,249,22,79,248,80,159,45,58,39,248,22, -132,18,23,197,2,249,80,159,46,8,42,39,23,204,1,248,22,133,18,23,198, -1,249,22,93,23,202,2,249,80,159,46,8,42,39,23,204,1,248,22,133,18, -23,198,1,249,22,93,23,196,2,27,248,22,133,18,23,199,1,28,248,22,87, +135,18,23,197,2,249,80,159,46,8,42,39,23,204,1,248,22,136,18,23,198, +1,249,22,93,23,202,2,249,80,159,46,8,42,39,23,204,1,248,22,136,18, +23,198,1,249,22,93,23,196,2,27,248,22,136,18,23,199,1,28,248,22,87, 23,194,2,9,28,248,22,80,23,194,2,249,22,79,248,80,159,42,58,39,248, -22,132,18,23,197,2,27,248,22,133,18,23,197,1,28,248,22,87,23,194,2, -9,28,248,22,80,23,194,2,249,22,79,248,80,159,45,58,39,248,22,132,18, -23,197,2,249,80,159,46,8,42,39,23,204,1,248,22,133,18,23,198,1,249, -22,93,23,202,2,249,80,159,46,8,42,39,23,204,1,248,22,133,18,23,198, -1,249,22,93,23,199,2,27,248,22,133,18,23,197,1,28,248,22,87,23,194, -2,9,28,248,22,80,23,194,2,249,22,79,248,80,159,45,58,39,248,22,132, -18,23,197,2,249,80,159,46,8,42,39,23,204,1,248,22,133,18,23,198,1, -249,22,93,23,202,2,249,80,159,46,8,42,39,23,204,1,248,22,133,18,23, +22,135,18,23,197,2,27,248,22,136,18,23,197,1,28,248,22,87,23,194,2, +9,28,248,22,80,23,194,2,249,22,79,248,80,159,45,58,39,248,22,135,18, +23,197,2,249,80,159,46,8,42,39,23,204,1,248,22,136,18,23,198,1,249, +22,93,23,202,2,249,80,159,46,8,42,39,23,204,1,248,22,136,18,23,198, +1,249,22,93,23,199,2,27,248,22,136,18,23,197,1,28,248,22,87,23,194, +2,9,28,248,22,80,23,194,2,249,22,79,248,80,159,45,58,39,248,22,135, +18,23,197,2,249,80,159,46,8,42,39,23,204,1,248,22,136,18,23,198,1, +249,22,93,23,202,2,249,80,159,46,8,42,39,23,204,1,248,22,136,18,23, 198,1,27,250,22,157,2,23,198,1,23,199,1,11,28,192,249,80,159,39,8, -42,39,198,194,196,27,27,248,22,191,15,2,59,28,248,22,175,15,23,194,2, -192,27,28,248,22,173,15,23,195,2,20,13,159,80,159,39,55,37,250,80,159, -42,56,37,249,22,33,11,80,159,44,55,37,22,128,16,248,22,191,15,2,60, -27,248,22,191,15,2,61,250,80,159,43,40,39,23,196,1,23,198,2,11,11, -28,23,193,2,192,86,94,23,193,1,27,249,22,176,15,27,248,22,191,15,2, -61,250,80,159,46,40,39,23,196,1,11,11,248,22,191,15,2,60,90,159,39, -11,89,161,39,36,11,248,22,171,15,23,197,1,86,95,23,195,1,23,194,1, -249,22,176,15,23,200,1,23,195,1,27,248,80,159,39,57,39,23,195,1,27, +42,39,198,194,196,27,27,248,22,130,16,2,59,28,248,22,178,15,23,194,2, +192,27,28,248,22,176,15,23,195,2,20,13,159,80,159,39,55,37,250,80,159, +42,56,37,249,22,33,11,80,159,44,55,37,22,131,16,248,22,130,16,2,60, +27,248,22,130,16,2,61,250,80,159,43,40,39,23,196,1,23,198,2,11,11, +28,23,193,2,192,86,94,23,193,1,27,249,22,179,15,27,248,22,130,16,2, +61,250,80,159,46,40,39,23,196,1,11,11,248,22,130,16,2,60,90,159,39, +11,89,161,39,36,11,248,22,174,15,23,197,1,86,95,23,195,1,23,194,1, +249,22,179,15,23,200,1,23,195,1,27,248,80,159,39,57,39,23,195,1,27, 248,80,159,40,58,39,27,250,22,157,2,23,199,2,70,108,105,110,107,115,45, -102,105,108,101,11,28,23,193,2,192,86,94,23,193,1,249,22,168,15,27,250, +102,105,108,101,11,28,23,193,2,192,86,94,23,193,1,249,22,171,15,27,250, 22,157,2,23,202,2,67,108,105,98,45,100,105,114,11,28,192,192,62,117,112, -2,58,248,22,182,8,250,80,159,43,8,25,39,23,198,1,78,108,105,110,107, +2,58,248,22,185,8,250,80,159,43,8,25,39,23,198,1,78,108,105,110,107, 115,45,115,101,97,114,99,104,45,102,105,108,101,115,248,22,89,23,198,1,248, -22,158,13,23,194,1,249,22,16,80,159,38,8,30,38,28,248,22,178,12,23, +22,161,13,23,194,1,249,22,16,80,159,38,8,30,38,28,248,22,181,12,23, 197,2,86,94,23,196,1,32,0,88,163,8,36,36,41,11,9,222,11,20,20, 94,88,163,8,36,36,43,11,9,223,3,33,110,23,196,1,32,112,88,163,8, -36,37,55,11,2,53,222,33,113,27,249,22,154,6,8,128,128,23,196,2,28, -248,22,139,7,23,194,2,9,249,22,79,23,195,1,27,249,22,154,6,8,128, -128,23,199,2,28,248,22,139,7,23,194,2,9,249,22,79,23,195,1,27,249, -22,154,6,8,128,128,23,202,2,28,248,22,139,7,23,194,2,9,249,22,79, -23,195,1,27,249,22,154,6,8,128,128,23,205,2,28,248,22,139,7,23,194, -2,9,249,22,79,23,195,1,248,2,112,23,206,1,27,249,22,154,6,8,128, -128,23,196,2,28,248,22,133,8,23,194,2,28,249,22,129,4,248,22,138,8, -23,196,2,8,128,128,249,22,1,22,145,8,249,22,79,23,197,1,27,249,22, -154,6,8,128,128,23,201,2,28,248,22,139,7,23,194,2,9,249,22,79,23, -195,1,27,249,22,154,6,8,128,128,23,204,2,28,248,22,139,7,23,194,2, -9,249,22,79,23,195,1,27,249,22,154,6,8,128,128,23,207,2,28,248,22, -139,7,23,194,2,9,249,22,79,23,195,1,27,249,22,154,6,8,128,128,23, -210,2,28,248,22,139,7,23,194,2,9,249,22,79,23,195,1,248,2,112,23, +36,37,55,11,2,53,222,33,113,27,249,22,157,6,8,128,128,23,196,2,28, +248,22,142,7,23,194,2,9,249,22,79,23,195,1,27,249,22,157,6,8,128, +128,23,199,2,28,248,22,142,7,23,194,2,9,249,22,79,23,195,1,27,249, +22,157,6,8,128,128,23,202,2,28,248,22,142,7,23,194,2,9,249,22,79, +23,195,1,27,249,22,157,6,8,128,128,23,205,2,28,248,22,142,7,23,194, +2,9,249,22,79,23,195,1,248,2,112,23,206,1,27,249,22,157,6,8,128, +128,23,196,2,28,248,22,136,8,23,194,2,28,249,22,129,4,248,22,141,8, +23,196,2,8,128,128,249,22,1,22,148,8,249,22,79,23,197,1,27,249,22, +157,6,8,128,128,23,201,2,28,248,22,142,7,23,194,2,9,249,22,79,23, +195,1,27,249,22,157,6,8,128,128,23,204,2,28,248,22,142,7,23,194,2, +9,249,22,79,23,195,1,27,249,22,157,6,8,128,128,23,207,2,28,248,22, +142,7,23,194,2,9,249,22,79,23,195,1,27,249,22,157,6,8,128,128,23, +210,2,28,248,22,142,7,23,194,2,9,249,22,79,23,195,1,248,2,112,23, 211,1,192,192,248,22,191,5,23,194,1,20,13,159,80,159,37,8,32,37,80, 159,37,8,43,39,27,248,22,182,5,23,195,1,250,22,46,22,37,88,163,36, 36,8,24,11,9,223,3,33,114,20,20,94,88,163,36,36,43,11,9,223,3, 33,115,23,196,1,249,22,14,20,20,94,88,163,36,36,47,16,4,36,8,240, 0,64,0,0,8,129,32,36,9,224,2,3,33,116,23,196,1,80,159,38,8, -30,38,86,94,28,248,22,135,12,23,199,2,27,247,22,191,11,28,249,22,183, -11,23,195,2,2,63,251,22,187,11,23,197,1,2,63,250,22,128,8,2,64, +30,38,86,94,28,248,22,138,12,23,199,2,27,247,22,130,12,28,249,22,186, +11,23,195,2,2,63,251,22,190,11,23,197,1,2,63,250,22,131,8,2,64, 28,23,202,1,86,95,23,204,1,23,203,1,80,159,48,48,38,28,23,203,1, -86,94,23,204,1,80,159,48,51,38,249,22,179,8,80,159,50,8,26,38,23, -206,1,248,22,131,12,23,207,2,247,22,29,12,12,28,248,22,135,12,23,199, -2,86,94,23,198,1,248,23,194,1,247,22,137,2,197,86,95,28,248,22,135, -12,23,200,2,27,247,22,191,11,28,249,22,183,11,23,195,2,2,63,251,22, -187,11,23,197,1,2,63,250,22,128,8,2,64,28,23,203,2,80,159,49,48, -38,28,23,204,2,80,159,49,51,38,249,22,179,8,80,159,51,8,26,38,23, -207,2,248,22,131,12,23,208,2,247,22,29,12,12,28,23,193,2,28,23,195, +86,94,23,204,1,80,159,48,51,38,249,22,182,8,80,159,50,8,26,38,23, +206,1,248,22,134,12,23,207,2,247,22,29,12,12,28,248,22,138,12,23,199, +2,86,94,23,198,1,248,23,194,1,247,22,137,2,197,86,95,28,248,22,138, +12,23,200,2,27,247,22,130,12,28,249,22,186,11,23,195,2,2,63,251,22, +190,11,23,197,1,2,63,250,22,131,8,2,64,28,23,203,2,80,159,49,48, +38,28,23,204,2,80,159,49,51,38,249,22,182,8,80,159,51,8,26,38,23, +207,2,248,22,134,12,23,208,2,247,22,29,12,12,28,23,193,2,28,23,195, 1,86,95,23,197,1,23,196,1,86,94,20,18,159,11,80,158,41,49,247,22, 137,2,20,18,159,11,80,158,41,50,23,193,1,28,23,196,1,86,94,23,197, 1,86,94,20,18,159,11,80,158,41,52,247,22,137,2,20,18,159,11,80,158, -41,53,23,193,1,86,94,250,22,180,8,80,159,44,8,28,38,23,200,2,247, -22,137,2,250,22,180,8,80,159,44,8,29,38,23,200,1,23,196,1,86,94, -23,195,1,12,28,248,22,135,12,23,200,2,86,94,23,199,1,248,23,195,1, -247,22,137,2,198,20,20,94,248,22,139,6,23,194,2,28,248,22,139,7,248, -22,139,6,23,195,1,12,248,22,164,11,6,30,30,101,120,112,101,99,116,101, +41,53,23,193,1,86,94,250,22,183,8,80,159,44,8,28,38,23,200,2,247, +22,137,2,250,22,183,8,80,159,44,8,29,38,23,200,1,23,196,1,86,94, +23,195,1,12,28,248,22,138,12,23,200,2,86,94,23,199,1,248,23,195,1, +247,22,137,2,198,20,20,94,248,22,142,6,23,194,2,28,248,22,142,7,248, +22,142,6,23,195,1,12,248,22,167,11,6,30,30,101,120,112,101,99,116,101, 100,32,97,32,115,105,110,103,108,101,32,83,45,101,120,112,114,101,115,115,105, 111,110,248,22,191,5,23,194,1,28,248,22,88,23,194,2,28,28,249,22,189, 3,38,248,22,92,23,196,2,10,249,22,189,3,39,248,22,92,23,196,2,28, -28,248,22,144,7,248,22,80,23,195,2,10,249,22,159,9,64,114,111,111,116, -248,22,132,18,23,196,2,28,27,248,22,101,194,28,248,22,150,15,23,194,2, -10,28,248,22,144,7,23,194,2,28,248,22,173,15,23,194,2,10,248,22,174, -15,23,194,1,11,27,248,22,87,248,22,103,195,28,192,192,248,22,154,16,248, +28,248,22,147,7,248,22,80,23,195,2,10,249,22,162,9,64,114,111,111,116, +248,22,135,18,23,196,2,28,27,248,22,101,194,28,248,22,153,15,23,194,2, +10,28,248,22,147,7,23,194,2,28,248,22,176,15,23,194,2,10,248,22,177, +15,23,194,1,11,27,248,22,87,248,22,103,195,28,192,192,248,22,157,16,248, 22,110,195,11,11,11,11,250,22,155,2,23,197,1,23,198,1,249,22,79,23, -198,1,23,201,1,28,28,248,22,87,248,22,103,23,197,2,10,249,22,145,16, -248,22,110,23,198,2,247,22,162,8,27,248,22,178,15,249,22,176,15,248,22, +198,1,23,201,1,28,28,248,22,87,248,22,103,23,197,2,10,249,22,148,16, +248,22,110,23,198,2,247,22,165,8,27,248,22,181,15,249,22,179,15,248,22, 101,23,200,2,23,198,1,28,248,22,64,248,22,80,23,198,2,86,94,23,196, 1,86,94,28,250,22,157,2,23,197,2,11,11,12,250,22,155,2,23,197,2, 11,9,249,22,161,2,23,196,2,20,20,95,88,163,8,36,38,50,11,9,224, -3,2,33,123,23,195,1,23,196,1,27,248,22,67,248,22,132,18,23,199,1, +3,2,33,123,23,195,1,23,196,1,27,248,22,67,248,22,135,18,23,199,1, 250,22,155,2,23,198,2,23,196,2,249,22,79,248,22,128,2,23,200,1,250, 22,157,2,23,203,1,23,201,1,9,12,250,22,155,2,23,196,1,23,197,1, 248,22,94,23,199,1,20,13,159,80,159,39,8,32,37,88,163,36,37,57,8, 240,0,144,0,4,9,227,3,2,1,0,4,33,118,27,28,23,194,2,80,159, -40,48,38,28,23,195,2,80,159,40,51,38,249,22,179,8,80,159,42,8,26, -38,23,198,2,27,248,80,159,42,8,31,39,23,195,2,28,249,22,161,9,23, -195,2,28,23,197,2,80,158,43,50,28,23,198,2,80,158,43,53,249,22,179, +40,48,38,28,23,195,2,80,159,40,51,38,249,22,182,8,80,159,42,8,26, +38,23,198,2,27,248,80,159,42,8,31,39,23,195,2,28,249,22,164,9,23, +195,2,28,23,197,2,80,158,43,50,28,23,198,2,80,158,43,53,249,22,182, 8,80,159,45,8,29,38,23,201,2,86,96,23,199,1,23,194,1,23,193,1, -28,23,195,1,80,158,41,49,28,23,196,1,80,158,41,52,249,22,179,8,80, +28,23,195,1,80,158,41,49,28,23,196,1,80,158,41,52,249,22,182,8,80, 159,43,8,28,38,23,199,1,20,13,159,80,159,41,8,32,37,20,20,94,88, 163,36,37,58,16,2,8,240,0,240,0,0,8,131,208,9,228,5,4,3,2, 6,0,33,119,23,199,1,20,13,159,80,159,41,55,37,26,29,80,159,8,34, -56,37,249,22,33,11,80,159,8,36,55,37,22,184,14,10,22,185,14,10,22, -186,14,10,22,189,14,10,22,188,14,10,22,190,14,10,22,187,14,10,22,191, -14,10,22,128,15,10,22,129,15,10,22,130,15,10,22,131,15,10,22,132,15, -11,22,182,14,11,27,249,22,182,5,23,197,2,66,98,105,110,97,114,121,27, +56,37,249,22,33,11,80,159,8,36,55,37,22,187,14,10,22,188,14,10,22, +189,14,10,22,128,15,10,22,191,14,10,22,129,15,10,22,190,14,10,22,130, +15,10,22,131,15,10,22,132,15,10,22,133,15,10,22,134,15,10,22,135,15, +11,22,185,14,11,27,249,22,182,5,23,197,2,66,98,105,110,97,114,121,27, 250,22,46,22,37,88,163,8,36,36,44,11,9,223,4,33,120,20,20,94,88, 163,36,36,43,11,9,223,4,33,121,23,197,1,86,94,28,28,248,22,88,23, 194,2,249,22,4,32,0,88,163,8,36,37,45,11,9,222,33,122,23,195,2, -11,12,248,22,164,11,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99, +11,12,248,22,167,11,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99, 111,110,116,101,110,116,27,247,22,137,2,27,90,159,39,11,89,161,39,36,11, -248,22,171,15,23,202,1,192,86,96,249,22,3,20,20,94,88,163,8,36,37, +248,22,174,15,23,202,1,192,86,96,249,22,3,20,20,94,88,163,8,36,37, 54,11,9,224,2,3,33,124,23,195,1,23,197,1,249,22,161,2,195,88,163, 8,36,38,48,11,9,223,3,33,125,28,23,199,1,86,94,20,18,159,11,80, 158,45,49,193,20,18,159,11,80,158,45,50,196,28,23,200,1,86,94,20,18, -159,11,80,158,45,52,193,20,18,159,11,80,158,45,53,196,86,94,250,22,180, -8,80,159,48,8,28,38,23,204,2,196,250,22,180,8,80,159,48,8,29,38, -23,204,1,23,200,1,193,248,22,9,20,20,96,88,163,8,32,37,8,43,16, +159,11,80,158,45,52,193,20,18,159,11,80,158,45,53,196,86,94,250,22,183, +8,80,159,48,8,28,38,23,204,2,196,250,22,183,8,80,159,48,8,29,38, +23,204,1,23,200,1,193,248,22,8,20,20,96,88,163,8,32,37,8,43,16, 4,8,240,0,240,0,0,8,240,27,180,0,0,37,36,9,226,1,4,3,2, 33,126,23,195,1,23,196,1,23,197,1,0,7,35,114,120,34,47,43,34,28, -248,22,144,7,23,195,2,27,249,22,143,16,2,128,2,23,197,2,28,23,193, -2,28,249,22,189,3,248,22,100,23,196,2,248,22,179,3,248,22,147,7,23, -199,2,249,22,7,250,22,166,7,23,200,1,36,248,22,100,23,199,1,23,198, -1,249,22,7,250,22,166,7,23,200,2,36,248,22,100,23,199,2,249,22,79, -249,22,166,7,23,201,1,248,22,102,23,200,1,23,200,1,249,22,7,23,197, -1,23,198,1,90,159,39,11,89,161,39,36,11,248,22,171,15,23,198,1,86, -94,23,195,1,28,249,22,159,9,23,195,2,2,52,86,94,23,193,1,249,22, -7,23,196,1,23,200,1,27,249,22,79,23,197,1,23,201,1,28,248,22,144, -7,23,195,2,27,249,22,143,16,2,128,2,23,197,2,28,23,193,2,28,249, -22,189,3,248,22,100,23,196,2,248,22,179,3,248,22,147,7,23,199,2,249, -22,7,250,22,166,7,23,200,1,36,248,22,100,23,199,1,23,196,1,249,22, -7,250,22,166,7,23,200,2,36,248,22,100,23,199,2,249,22,79,249,22,166, +248,22,147,7,23,195,2,27,249,22,146,16,2,128,2,23,197,2,28,23,193, +2,28,249,22,189,3,248,22,100,23,196,2,248,22,179,3,248,22,150,7,23, +199,2,249,22,7,250,22,169,7,23,200,1,36,248,22,100,23,199,1,23,198, +1,249,22,7,250,22,169,7,23,200,2,36,248,22,100,23,199,2,249,22,79, +249,22,169,7,23,201,1,248,22,102,23,200,1,23,200,1,249,22,7,23,197, +1,23,198,1,90,159,39,11,89,161,39,36,11,248,22,174,15,23,198,1,86, +94,23,195,1,28,249,22,162,9,23,195,2,2,52,86,94,23,193,1,249,22, +7,23,196,1,23,200,1,27,249,22,79,23,197,1,23,201,1,28,248,22,147, +7,23,195,2,27,249,22,146,16,2,128,2,23,197,2,28,23,193,2,28,249, +22,189,3,248,22,100,23,196,2,248,22,179,3,248,22,150,7,23,199,2,249, +22,7,250,22,169,7,23,200,1,36,248,22,100,23,199,1,23,196,1,249,22, +7,250,22,169,7,23,200,2,36,248,22,100,23,199,2,249,22,79,249,22,169, 7,23,201,1,248,22,102,23,200,1,23,198,1,249,22,7,23,197,1,23,196, -1,90,159,39,11,89,161,39,36,11,248,22,171,15,23,198,1,86,94,23,195, -1,28,249,22,159,9,23,195,2,2,52,86,94,23,193,1,249,22,7,23,196, +1,90,159,39,11,89,161,39,36,11,248,22,174,15,23,198,1,86,94,23,195, +1,28,249,22,162,9,23,195,2,2,52,86,94,23,193,1,249,22,7,23,196, 1,23,198,1,249,80,159,45,8,34,39,194,249,22,79,197,199,28,249,22,129, -4,23,197,2,248,22,178,8,80,159,39,8,26,38,9,27,250,80,159,40,8, +4,23,197,2,248,22,181,8,80,159,39,8,26,38,9,27,250,80,159,40,8, 33,39,11,11,23,199,2,250,22,93,250,22,157,2,23,199,2,23,201,2,9, 250,22,157,2,23,199,1,11,9,27,248,22,178,3,23,201,1,28,249,22,129, -4,23,195,2,248,22,178,8,80,159,44,8,26,38,9,27,250,80,159,45,8, +4,23,195,2,248,22,181,8,80,159,44,8,26,38,9,27,250,80,159,45,8, 33,39,11,11,23,197,2,250,22,93,250,22,157,2,23,199,2,23,206,2,9, 250,22,157,2,23,199,1,11,9,27,248,22,178,3,23,199,1,28,249,22,129, -4,23,195,2,248,22,178,8,80,159,49,8,26,38,9,27,250,80,159,50,8, +4,23,195,2,248,22,181,8,80,159,49,8,26,38,9,27,250,80,159,50,8, 33,39,11,11,23,197,2,250,22,93,250,22,157,2,23,199,2,23,211,2,9, 250,22,157,2,23,199,1,11,9,249,80,159,52,8,44,39,23,210,1,248,22, 178,3,23,200,1,32,131,2,88,163,36,43,8,31,11,65,99,108,111,111,112, 222,33,140,2,32,132,2,88,163,8,36,37,47,11,2,53,222,33,135,2,32, 133,2,88,163,36,37,43,11,69,116,111,45,115,116,114,105,110,103,222,33,134, -2,28,248,22,150,15,23,194,2,248,22,154,15,23,194,1,192,28,248,22,87, -248,22,81,23,195,2,248,22,89,248,2,133,2,248,22,132,18,23,196,1,250, -22,90,248,2,133,2,248,22,132,18,23,198,2,2,66,248,2,132,2,248,22, -133,18,23,198,1,250,22,128,8,6,7,7,10,32,126,97,32,126,97,6,1, -1,32,23,196,1,249,22,128,8,6,6,6,10,32,32,32,126,97,248,22,131, +2,28,248,22,153,15,23,194,2,248,22,157,15,23,194,1,192,28,248,22,87, +248,22,81,23,195,2,248,22,89,248,2,133,2,248,22,135,18,23,196,1,250, +22,90,248,2,133,2,248,22,135,18,23,198,2,2,66,248,2,132,2,248,22, +136,18,23,198,1,250,22,131,8,6,7,7,10,32,126,97,32,126,97,6,1, +1,32,23,196,1,249,22,131,8,6,6,6,10,32,32,32,126,97,248,22,131, 2,23,196,1,32,138,2,88,163,36,38,48,11,66,102,105,108,116,101,114,222, 33,139,2,28,248,22,87,23,195,2,9,28,248,23,194,2,248,22,80,23,196, -2,249,22,79,248,22,132,18,23,197,2,249,2,138,2,23,197,1,248,22,133, -18,23,199,1,249,2,138,2,23,195,1,248,22,133,18,23,197,1,28,248,22, +2,249,22,79,248,22,135,18,23,197,2,249,2,138,2,23,197,1,248,22,136, +18,23,199,1,249,2,138,2,23,195,1,248,22,136,18,23,197,1,28,248,22, 87,23,199,2,86,94,23,198,1,28,23,199,2,86,97,23,196,1,23,195,1, -23,194,1,23,193,1,28,23,197,2,249,22,168,15,23,201,1,23,199,1,198, -27,28,248,22,87,23,197,2,2,65,249,22,1,22,167,7,248,2,132,2,23, -199,2,248,23,198,1,251,22,128,8,6,70,70,99,111,108,108,101,99,116,105, +23,194,1,23,193,1,28,23,197,2,249,22,171,15,23,201,1,23,199,1,198, +27,28,248,22,87,23,197,2,2,65,249,22,1,22,170,7,248,2,132,2,23, +199,2,248,23,198,1,251,22,131,8,6,70,70,99,111,108,108,101,99,116,105, 111,110,32,110,111,116,32,102,111,117,110,100,10,32,32,99,111,108,108,101,99, 116,105,111,110,58,32,126,115,10,32,32,105,110,32,99,111,108,108,101,99,116, 105,111,110,32,100,105,114,101,99,116,111,114,105,101,115,58,126,97,126,97,28, -248,22,87,23,202,1,248,2,133,2,23,201,1,250,22,167,7,248,2,133,2, -23,204,1,2,66,23,201,2,249,22,1,22,167,7,249,22,2,32,0,88,163, +248,22,87,23,202,1,248,2,133,2,23,201,1,250,22,170,7,248,2,133,2, +23,204,1,2,66,23,201,2,249,22,1,22,170,7,249,22,2,32,0,88,163, 8,36,37,45,11,9,222,33,136,2,27,248,22,92,23,205,2,27,248,22,92, -247,22,130,16,28,249,22,190,3,249,22,181,3,23,198,2,23,197,2,41,23, -205,2,249,22,93,247,22,130,16,248,22,89,249,22,128,8,6,50,50,46,46, +247,22,133,16,28,249,22,190,3,249,22,181,3,23,198,2,23,197,2,41,23, +205,2,249,22,93,247,22,133,16,248,22,89,249,22,131,8,6,50,50,46,46, 46,32,91,126,97,32,97,100,100,105,116,105,111,110,97,108,32,108,105,110,107, 101,100,32,97,110,100,32,112,97,99,107,97,103,101,32,100,105,114,101,99,116, 111,114,105,101,115,93,249,22,181,3,23,201,1,23,200,1,28,249,22,5,22, -130,2,23,201,2,250,22,128,8,6,49,49,10,32,32,32,115,117,98,45,99, +130,2,23,201,2,250,22,131,8,6,49,49,10,32,32,32,115,117,98,45,99, 111,108,108,101,99,116,105,111,110,58,32,126,115,10,32,32,105,110,32,112,97, 114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,58,126,97,23,201, -1,249,22,1,22,167,7,249,22,2,32,0,88,163,8,36,37,45,11,9,222, +1,249,22,1,22,170,7,249,22,2,32,0,88,163,8,36,37,45,11,9,222, 33,137,2,249,2,138,2,22,130,2,23,208,1,86,95,23,199,1,23,198,1, -2,65,27,248,22,80,23,200,2,27,28,248,22,150,15,23,195,2,249,22,168, -15,23,196,1,23,198,2,248,22,131,2,23,195,1,28,28,248,22,150,15,248, -22,80,23,202,2,248,22,163,15,23,194,2,10,27,250,22,1,22,168,15,23, -197,1,23,201,2,28,28,248,22,87,23,199,2,10,248,22,163,15,23,194,2, -28,23,200,2,28,28,248,22,162,15,249,22,168,15,23,196,2,23,203,2,10, -27,28,248,22,150,15,23,202,2,248,22,154,15,23,202,2,23,201,2,19,248, -22,147,7,23,195,2,27,28,249,22,129,4,23,196,4,40,28,249,22,150,7, -6,4,4,46,114,107,116,249,22,166,7,23,199,2,249,22,181,3,23,200,4, -40,249,22,167,7,250,22,166,7,23,200,1,36,249,22,181,3,23,201,4,40, -6,3,3,46,115,115,86,94,23,195,1,11,11,28,23,193,2,248,22,162,15, -249,22,168,15,23,199,2,23,196,1,11,2,86,99,23,202,1,23,201,1,23, -199,1,23,198,1,23,197,1,23,196,1,28,23,200,2,249,22,168,15,23,195, +2,65,27,248,22,80,23,200,2,27,28,248,22,153,15,23,195,2,249,22,171, +15,23,196,1,23,198,2,248,22,131,2,23,195,1,28,28,248,22,153,15,248, +22,80,23,202,2,248,22,166,15,23,194,2,10,27,250,22,1,22,171,15,23, +197,1,23,201,2,28,28,248,22,87,23,199,2,10,248,22,166,15,23,194,2, +28,23,200,2,28,28,248,22,165,15,249,22,171,15,23,196,2,23,203,2,10, +27,28,248,22,153,15,23,202,2,248,22,157,15,23,202,2,23,201,2,19,248, +22,150,7,23,195,2,27,28,249,22,129,4,23,196,4,40,28,249,22,153,7, +6,4,4,46,114,107,116,249,22,169,7,23,199,2,249,22,181,3,23,200,4, +40,249,22,170,7,250,22,169,7,23,200,1,36,249,22,181,3,23,201,4,40, +6,3,3,46,115,115,86,94,23,195,1,11,11,28,23,193,2,248,22,165,15, +249,22,171,15,23,199,2,23,196,1,11,2,86,99,23,202,1,23,201,1,23, +199,1,23,198,1,23,197,1,23,196,1,28,23,200,2,249,22,171,15,23,195, 1,23,202,1,192,254,2,131,2,202,203,204,205,206,248,22,81,23,16,28,23, -16,23,16,199,28,23,200,2,249,22,168,15,23,195,1,23,202,1,192,254,2, +16,23,16,199,28,23,200,2,249,22,171,15,23,195,1,23,202,1,192,254,2, 131,2,202,203,204,205,206,248,22,81,23,16,23,16,254,2,131,2,201,202,203, 204,205,248,22,81,23,15,23,15,90,159,38,11,89,161,38,36,11,249,80,159, -40,8,34,39,23,199,1,23,200,1,27,248,22,67,28,248,22,150,15,195,248, -22,154,15,195,194,27,247,22,134,16,27,250,22,93,28,23,197,2,28,247,22, -133,16,249,22,93,27,250,80,159,50,8,33,39,10,11,36,249,22,93,250,22, +40,8,34,39,23,199,1,23,200,1,27,248,22,67,28,248,22,153,15,195,248, +22,157,15,195,194,27,247,22,137,16,27,250,22,93,28,23,197,2,28,247,22, +136,16,249,22,93,27,250,80,159,50,8,33,39,10,11,36,249,22,93,250,22, 157,2,23,198,2,23,206,2,9,250,22,157,2,23,198,1,11,9,27,250,80, 159,50,8,33,39,11,10,36,249,22,93,250,22,157,2,23,198,2,23,206,2, 9,250,22,157,2,23,198,1,11,9,9,9,28,23,197,1,28,249,22,129,4, -36,248,22,178,8,80,159,47,8,26,38,86,94,23,198,1,9,27,250,80,159, +36,248,22,181,8,80,159,47,8,26,38,86,94,23,198,1,9,27,250,80,159, 48,8,33,39,11,11,36,250,22,93,250,22,157,2,23,199,2,23,205,2,9, -250,22,157,2,23,199,1,11,9,28,249,22,129,4,37,248,22,178,8,80,159, +250,22,157,2,23,199,1,11,9,28,249,22,129,4,37,248,22,181,8,80,159, 51,8,26,38,9,27,250,80,159,52,8,33,39,11,11,37,250,22,93,250,22, 157,2,23,199,2,23,209,2,9,250,22,157,2,23,199,1,11,9,28,249,22, -129,4,38,248,22,178,8,80,159,55,8,26,38,9,27,250,80,159,56,8,33, +129,4,38,248,22,181,8,80,159,55,8,26,38,9,27,250,80,159,56,8,33, 39,11,11,38,250,22,93,250,22,157,2,23,199,2,23,213,2,9,250,22,157, -2,23,199,1,11,9,249,80,159,58,8,44,39,23,212,1,39,9,247,22,130, -16,254,2,131,2,199,202,203,205,23,16,199,11,86,95,28,28,248,22,151,15, -23,194,2,10,28,248,22,150,15,23,194,2,10,28,248,22,144,7,23,194,2, -28,248,22,173,15,23,194,2,10,248,22,174,15,23,194,2,11,12,252,22,168, -11,23,200,2,2,45,36,23,198,2,23,199,2,28,28,248,22,144,7,23,195, -2,10,248,22,133,8,23,195,2,86,94,23,194,1,12,252,22,168,11,23,200, +2,23,199,1,11,9,249,80,159,58,8,44,39,23,212,1,39,9,247,22,133, +16,254,2,131,2,199,202,203,205,23,16,199,11,86,95,28,28,248,22,154,15, +23,194,2,10,28,248,22,153,15,23,194,2,10,28,248,22,147,7,23,194,2, +28,248,22,176,15,23,194,2,10,248,22,177,15,23,194,2,11,12,252,22,171, +11,23,200,2,2,45,36,23,198,2,23,199,2,28,28,248,22,147,7,23,195, +2,10,248,22,136,8,23,195,2,86,94,23,194,1,12,252,22,171,11,23,200, 2,2,67,37,23,198,2,23,199,1,90,159,39,11,89,161,39,36,11,248,22, -171,15,23,197,2,86,94,23,195,1,86,94,28,23,193,2,86,95,23,198,1, -23,196,1,12,250,22,171,11,23,201,1,2,68,23,199,1,249,22,7,23,195, +174,15,23,197,2,86,94,23,195,1,86,94,28,23,193,2,86,95,23,198,1, +23,196,1,12,250,22,174,11,23,201,1,2,68,23,199,1,249,22,7,23,195, 1,23,196,1,32,143,2,88,163,36,42,8,24,11,2,53,222,33,144,2,28, -248,22,130,4,23,199,2,86,95,23,198,1,23,194,1,19,248,22,138,8,23, -195,2,19,248,22,138,8,23,196,2,249,22,160,15,251,22,145,8,250,22,144, +248,22,130,4,23,199,2,86,95,23,198,1,23,194,1,19,248,22,141,8,23, +195,2,19,248,22,141,8,23,196,2,249,22,163,15,251,22,148,8,250,22,147, 8,23,204,2,36,23,203,4,2,54,249,23,205,1,23,203,1,23,201,4,28, -248,22,144,7,23,206,2,249,22,159,8,23,207,1,8,63,23,205,1,28,248, -22,151,15,23,201,2,248,22,152,15,23,201,1,86,94,23,200,1,247,22,153, -15,2,2,27,248,22,179,3,23,200,1,28,249,22,159,9,8,46,249,22,139, -8,23,198,2,23,197,2,27,248,22,178,3,23,195,2,249,22,160,15,251,22, -145,8,250,22,144,8,23,204,2,36,23,203,1,23,202,1,249,23,205,1,23, -203,1,23,201,1,28,248,22,144,7,23,206,2,249,22,159,8,23,207,1,8, -63,23,205,1,28,248,22,151,15,23,201,2,248,22,152,15,23,201,1,86,94, -23,200,1,247,22,153,15,28,248,22,130,4,23,194,2,86,95,23,195,1,23, -193,1,19,248,22,138,8,23,196,2,19,248,22,138,8,23,197,2,249,22,160, -15,251,22,145,8,250,22,144,8,23,205,2,36,23,203,4,2,54,249,23,206, -1,23,204,1,23,201,4,28,248,22,144,7,23,207,2,249,22,159,8,23,208, -1,8,63,23,206,1,28,248,22,151,15,23,202,2,248,22,152,15,23,202,1, -86,94,23,201,1,247,22,153,15,2,2,27,248,22,179,3,23,195,1,28,249, -22,159,9,8,46,249,22,139,8,23,199,2,23,197,2,27,248,22,178,3,23, -195,2,249,22,160,15,251,22,145,8,250,22,144,8,23,205,2,36,23,203,1, -23,203,1,249,23,206,1,23,204,1,23,201,1,28,248,22,144,7,23,207,2, -249,22,159,8,23,208,1,8,63,23,206,1,28,248,22,151,15,23,202,2,248, -22,152,15,23,202,1,86,94,23,201,1,247,22,153,15,28,248,22,130,4,23, -194,2,86,95,23,196,1,23,193,1,19,248,22,138,8,23,197,2,19,248,22, -138,8,23,198,2,249,22,160,15,251,22,145,8,250,22,144,8,23,206,2,36, -23,203,4,2,54,249,23,207,1,23,205,1,23,201,4,28,248,22,144,7,23, -208,2,249,22,159,8,23,209,1,8,63,23,207,1,28,248,22,151,15,23,203, -2,248,22,152,15,23,203,1,86,94,23,202,1,247,22,153,15,2,2,27,248, -22,179,3,23,195,1,28,249,22,159,9,8,46,249,22,139,8,23,200,2,23, -197,2,27,248,22,178,3,23,195,2,249,22,160,15,251,22,145,8,250,22,144, +248,22,147,7,23,206,2,249,22,162,8,23,207,1,8,63,23,205,1,28,248, +22,154,15,23,201,2,248,22,155,15,23,201,1,86,94,23,200,1,247,22,156, +15,2,2,27,248,22,179,3,23,200,1,28,249,22,162,9,8,46,249,22,142, +8,23,198,2,23,197,2,27,248,22,178,3,23,195,2,249,22,163,15,251,22, +148,8,250,22,147,8,23,204,2,36,23,203,1,23,202,1,249,23,205,1,23, +203,1,23,201,1,28,248,22,147,7,23,206,2,249,22,162,8,23,207,1,8, +63,23,205,1,28,248,22,154,15,23,201,2,248,22,155,15,23,201,1,86,94, +23,200,1,247,22,156,15,28,248,22,130,4,23,194,2,86,95,23,195,1,23, +193,1,19,248,22,141,8,23,196,2,19,248,22,141,8,23,197,2,249,22,163, +15,251,22,148,8,250,22,147,8,23,205,2,36,23,203,4,2,54,249,23,206, +1,23,204,1,23,201,4,28,248,22,147,7,23,207,2,249,22,162,8,23,208, +1,8,63,23,206,1,28,248,22,154,15,23,202,2,248,22,155,15,23,202,1, +86,94,23,201,1,247,22,156,15,2,2,27,248,22,179,3,23,195,1,28,249, +22,162,9,8,46,249,22,142,8,23,199,2,23,197,2,27,248,22,178,3,23, +195,2,249,22,163,15,251,22,148,8,250,22,147,8,23,205,2,36,23,203,1, +23,203,1,249,23,206,1,23,204,1,23,201,1,28,248,22,147,7,23,207,2, +249,22,162,8,23,208,1,8,63,23,206,1,28,248,22,154,15,23,202,2,248, +22,155,15,23,202,1,86,94,23,201,1,247,22,156,15,28,248,22,130,4,23, +194,2,86,95,23,196,1,23,193,1,19,248,22,141,8,23,197,2,19,248,22, +141,8,23,198,2,249,22,163,15,251,22,148,8,250,22,147,8,23,206,2,36, +23,203,4,2,54,249,23,207,1,23,205,1,23,201,4,28,248,22,147,7,23, +208,2,249,22,162,8,23,209,1,8,63,23,207,1,28,248,22,154,15,23,203, +2,248,22,155,15,23,203,1,86,94,23,202,1,247,22,156,15,2,2,27,248, +22,179,3,23,195,1,28,249,22,162,9,8,46,249,22,142,8,23,200,2,23, +197,2,27,248,22,178,3,23,195,2,249,22,163,15,251,22,148,8,250,22,147, 8,23,206,2,36,23,203,1,23,204,1,249,23,207,1,23,205,1,23,201,1, -28,248,22,144,7,23,208,2,249,22,159,8,23,209,1,8,63,23,207,1,28, -248,22,151,15,23,203,2,248,22,152,15,23,203,1,86,94,23,202,1,247,22, -153,15,253,2,143,2,201,202,203,204,205,198,90,159,38,11,89,161,38,36,11, -86,95,28,28,248,22,151,15,23,199,2,10,28,248,22,150,15,23,199,2,10, -28,248,22,144,7,23,199,2,28,248,22,173,15,23,199,2,10,248,22,174,15, -23,199,2,11,12,252,22,168,11,23,200,2,2,45,36,23,203,2,23,204,2, -28,28,248,22,144,7,23,200,2,10,248,22,133,8,23,200,2,12,252,22,168, +28,248,22,147,7,23,208,2,249,22,162,8,23,209,1,8,63,23,207,1,28, +248,22,154,15,23,203,2,248,22,155,15,23,203,1,86,94,23,202,1,247,22, +156,15,253,2,143,2,201,202,203,204,205,198,90,159,38,11,89,161,38,36,11, +86,95,28,28,248,22,154,15,23,199,2,10,28,248,22,153,15,23,199,2,10, +28,248,22,147,7,23,199,2,28,248,22,176,15,23,199,2,10,248,22,177,15, +23,199,2,11,12,252,22,171,11,23,200,2,2,45,36,23,203,2,23,204,2, +28,28,248,22,147,7,23,200,2,10,248,22,136,8,23,200,2,12,252,22,171, 11,23,200,2,2,67,37,23,203,2,23,204,2,90,159,39,11,89,161,39,36, -11,248,22,171,15,23,202,2,86,94,23,195,1,86,94,28,192,12,250,22,171, -11,23,201,1,2,68,23,204,2,249,22,7,194,195,27,248,22,156,15,23,196, -1,27,19,248,22,138,8,23,196,2,28,248,22,130,4,23,194,4,86,94,23, -199,1,19,248,22,138,8,23,197,2,19,248,22,138,8,23,198,2,249,22,160, -15,251,22,145,8,250,22,144,8,23,206,2,36,23,203,4,2,54,249,23,210, -1,23,205,1,23,201,4,28,248,22,144,7,23,211,2,249,22,159,8,23,212, -1,8,63,23,210,1,28,248,22,151,15,23,206,2,248,22,152,15,23,206,1, -86,94,23,205,1,247,22,153,15,2,2,27,248,22,179,3,23,195,4,28,249, -22,159,9,8,46,249,22,139,8,23,200,2,23,197,2,27,248,22,178,3,23, -195,2,249,22,160,15,251,22,145,8,250,22,144,8,23,206,2,36,23,203,1, -23,207,1,249,23,210,1,23,205,1,23,201,1,28,248,22,144,7,23,211,2, -249,22,159,8,23,212,1,8,63,23,210,1,28,248,22,151,15,23,206,2,248, -22,152,15,23,206,1,86,94,23,205,1,247,22,153,15,28,248,22,130,4,23, -194,2,86,95,23,200,1,23,193,1,19,248,22,138,8,23,198,2,19,248,22, -138,8,23,199,2,249,22,160,15,251,22,145,8,250,22,144,8,23,207,2,36, -23,203,4,2,54,249,23,211,1,23,206,1,23,201,4,28,248,22,144,7,23, -212,2,249,22,159,8,23,213,1,8,63,23,211,1,28,248,22,151,15,23,207, -2,248,22,152,15,23,207,1,86,94,23,206,1,247,22,153,15,2,2,27,248, -22,179,3,23,195,1,28,249,22,159,9,8,46,249,22,139,8,23,201,2,23, -197,2,27,248,22,178,3,23,195,2,249,22,160,15,251,22,145,8,250,22,144, +11,248,22,174,15,23,202,2,86,94,23,195,1,86,94,28,192,12,250,22,174, +11,23,201,1,2,68,23,204,2,249,22,7,194,195,27,248,22,159,15,23,196, +1,27,19,248,22,141,8,23,196,2,28,248,22,130,4,23,194,4,86,94,23, +199,1,19,248,22,141,8,23,197,2,19,248,22,141,8,23,198,2,249,22,163, +15,251,22,148,8,250,22,147,8,23,206,2,36,23,203,4,2,54,249,23,210, +1,23,205,1,23,201,4,28,248,22,147,7,23,211,2,249,22,162,8,23,212, +1,8,63,23,210,1,28,248,22,154,15,23,206,2,248,22,155,15,23,206,1, +86,94,23,205,1,247,22,156,15,2,2,27,248,22,179,3,23,195,4,28,249, +22,162,9,8,46,249,22,142,8,23,200,2,23,197,2,27,248,22,178,3,23, +195,2,249,22,163,15,251,22,148,8,250,22,147,8,23,206,2,36,23,203,1, +23,207,1,249,23,210,1,23,205,1,23,201,1,28,248,22,147,7,23,211,2, +249,22,162,8,23,212,1,8,63,23,210,1,28,248,22,154,15,23,206,2,248, +22,155,15,23,206,1,86,94,23,205,1,247,22,156,15,28,248,22,130,4,23, +194,2,86,95,23,200,1,23,193,1,19,248,22,141,8,23,198,2,19,248,22, +141,8,23,199,2,249,22,163,15,251,22,148,8,250,22,147,8,23,207,2,36, +23,203,4,2,54,249,23,211,1,23,206,1,23,201,4,28,248,22,147,7,23, +212,2,249,22,162,8,23,213,1,8,63,23,211,1,28,248,22,154,15,23,207, +2,248,22,155,15,23,207,1,86,94,23,206,1,247,22,156,15,2,2,27,248, +22,179,3,23,195,1,28,249,22,162,9,8,46,249,22,142,8,23,201,2,23, +197,2,27,248,22,178,3,23,195,2,249,22,163,15,251,22,148,8,250,22,147, 8,23,207,2,36,23,203,1,23,208,1,249,23,211,1,23,206,1,23,201,1, -28,248,22,144,7,23,212,2,249,22,159,8,23,213,1,8,63,23,211,1,28, -248,22,151,15,23,207,2,248,22,152,15,23,207,1,86,94,23,206,1,247,22, -153,15,253,2,143,2,23,203,1,23,207,1,23,208,1,23,209,1,23,210,1, -23,199,1,2,28,248,22,150,15,23,196,2,249,22,168,15,23,197,1,23,195, +28,248,22,147,7,23,212,2,249,22,162,8,23,213,1,8,63,23,211,1,28, +248,22,154,15,23,207,2,248,22,155,15,23,207,1,86,94,23,206,1,247,22, +156,15,253,2,143,2,23,203,1,23,207,1,23,208,1,23,209,1,23,210,1, +23,199,1,2,28,248,22,153,15,23,196,2,249,22,171,15,23,197,1,23,195, 1,192,32,146,2,88,163,36,40,57,11,2,53,222,33,147,2,28,248,22,130, -4,23,197,2,86,94,23,196,1,19,248,22,138,8,23,195,2,35,248,22,138, -8,23,196,2,249,22,160,15,251,22,145,8,250,22,144,8,23,204,1,36,23, -203,4,2,54,2,54,28,248,22,144,7,23,204,2,249,22,159,8,23,205,1, -8,63,23,203,1,28,248,22,151,15,23,199,2,248,22,152,15,23,199,1,86, -94,23,198,1,247,22,153,15,2,27,248,22,179,3,23,198,1,28,249,22,159, -9,8,46,249,22,139,8,23,198,2,23,197,2,35,248,22,178,3,23,195,2, -249,22,160,15,251,22,145,8,250,22,144,8,23,204,1,36,23,203,1,2,54, -2,54,28,248,22,144,7,23,204,2,249,22,159,8,23,205,1,8,63,23,203, -1,28,248,22,151,15,23,199,2,248,22,152,15,23,199,1,86,94,23,198,1, -247,22,153,15,28,248,22,130,4,23,194,2,86,94,23,193,1,19,248,22,138, -8,23,196,2,35,248,22,138,8,23,197,2,249,22,160,15,251,22,145,8,250, -22,144,8,23,205,1,36,23,203,4,2,54,2,54,28,248,22,144,7,23,205, -2,249,22,159,8,23,206,1,8,63,23,204,1,28,248,22,151,15,23,200,2, -248,22,152,15,23,200,1,86,94,23,199,1,247,22,153,15,2,27,248,22,179, -3,23,195,1,28,249,22,159,9,8,46,249,22,139,8,23,199,2,23,197,2, -35,248,22,178,3,23,195,2,249,22,160,15,251,22,145,8,250,22,144,8,23, -205,1,36,23,203,1,2,54,2,54,28,248,22,144,7,23,205,2,249,22,159, -8,23,206,1,8,63,23,204,1,28,248,22,151,15,23,200,2,248,22,152,15, -23,200,1,86,94,23,199,1,247,22,153,15,251,2,146,2,198,199,200,196,90, -159,38,11,89,161,38,36,11,86,95,28,28,248,22,151,15,23,196,2,10,28, -248,22,150,15,23,196,2,10,28,248,22,144,7,23,196,2,28,248,22,173,15, -23,196,2,10,248,22,174,15,23,196,2,11,12,252,22,168,11,2,39,2,45, -36,23,200,2,23,201,2,28,28,248,22,144,7,23,197,2,10,248,22,133,8, -23,197,2,12,252,22,168,11,2,39,2,67,37,23,200,2,23,201,2,90,159, -39,11,89,161,39,36,11,248,22,171,15,23,199,2,86,94,23,195,1,86,94, -28,192,12,250,22,171,11,2,39,2,68,23,201,2,249,22,7,194,195,27,248, -22,156,15,23,196,1,27,251,2,146,2,23,198,2,23,201,1,23,202,1,248, -22,138,8,23,199,1,28,248,22,150,15,23,196,2,249,22,168,15,23,197,1, +4,23,197,2,86,94,23,196,1,19,248,22,141,8,23,195,2,35,248,22,141, +8,23,196,2,249,22,163,15,251,22,148,8,250,22,147,8,23,204,1,36,23, +203,4,2,54,2,54,28,248,22,147,7,23,204,2,249,22,162,8,23,205,1, +8,63,23,203,1,28,248,22,154,15,23,199,2,248,22,155,15,23,199,1,86, +94,23,198,1,247,22,156,15,2,27,248,22,179,3,23,198,1,28,249,22,162, +9,8,46,249,22,142,8,23,198,2,23,197,2,35,248,22,178,3,23,195,2, +249,22,163,15,251,22,148,8,250,22,147,8,23,204,1,36,23,203,1,2,54, +2,54,28,248,22,147,7,23,204,2,249,22,162,8,23,205,1,8,63,23,203, +1,28,248,22,154,15,23,199,2,248,22,155,15,23,199,1,86,94,23,198,1, +247,22,156,15,28,248,22,130,4,23,194,2,86,94,23,193,1,19,248,22,141, +8,23,196,2,35,248,22,141,8,23,197,2,249,22,163,15,251,22,148,8,250, +22,147,8,23,205,1,36,23,203,4,2,54,2,54,28,248,22,147,7,23,205, +2,249,22,162,8,23,206,1,8,63,23,204,1,28,248,22,154,15,23,200,2, +248,22,155,15,23,200,1,86,94,23,199,1,247,22,156,15,2,27,248,22,179, +3,23,195,1,28,249,22,162,9,8,46,249,22,142,8,23,199,2,23,197,2, +35,248,22,178,3,23,195,2,249,22,163,15,251,22,148,8,250,22,147,8,23, +205,1,36,23,203,1,2,54,2,54,28,248,22,147,7,23,205,2,249,22,162, +8,23,206,1,8,63,23,204,1,28,248,22,154,15,23,200,2,248,22,155,15, +23,200,1,86,94,23,199,1,247,22,156,15,251,2,146,2,198,199,200,196,90, +159,38,11,89,161,38,36,11,86,95,28,28,248,22,154,15,23,196,2,10,28, +248,22,153,15,23,196,2,10,28,248,22,147,7,23,196,2,28,248,22,176,15, +23,196,2,10,248,22,177,15,23,196,2,11,12,252,22,171,11,2,39,2,45, +36,23,200,2,23,201,2,28,28,248,22,147,7,23,197,2,10,248,22,136,8, +23,197,2,12,252,22,171,11,2,39,2,67,37,23,200,2,23,201,2,90,159, +39,11,89,161,39,36,11,248,22,174,15,23,199,2,86,94,23,195,1,86,94, +28,192,12,250,22,174,11,2,39,2,68,23,201,2,249,22,7,194,195,27,248, +22,159,15,23,196,1,27,251,2,146,2,23,198,2,23,201,1,23,202,1,248, +22,141,8,23,199,1,28,248,22,153,15,23,196,2,249,22,171,15,23,197,1, 23,195,1,192,2,54,252,80,158,41,8,36,2,39,2,54,32,0,88,163,8, 36,38,43,11,9,222,33,149,2,198,199,32,151,2,88,163,36,40,57,11,2, 53,222,33,152,2,28,248,22,130,4,23,197,2,86,94,23,196,1,19,248,22, -138,8,23,195,2,19,248,22,138,8,23,196,2,249,22,160,15,251,22,145,8, -250,22,144,8,23,204,2,36,23,203,4,2,54,249,22,144,8,23,203,1,23, -201,4,28,248,22,144,7,23,204,2,249,22,159,8,23,205,1,8,63,23,203, -1,28,248,22,151,15,23,199,2,248,22,152,15,23,199,1,86,94,23,198,1, -247,22,153,15,2,2,27,248,22,179,3,23,198,1,28,249,22,159,9,8,46, -249,22,139,8,23,198,2,23,197,2,27,248,22,178,3,23,195,2,249,22,160, -15,251,22,145,8,250,22,144,8,23,204,2,36,23,203,1,2,69,249,22,144, -8,23,203,1,23,201,1,28,248,22,144,7,23,204,2,249,22,159,8,23,205, -1,8,63,23,203,1,28,248,22,151,15,23,199,2,248,22,152,15,23,199,1, -86,94,23,198,1,247,22,153,15,28,248,22,130,4,23,194,2,86,94,23,193, -1,19,248,22,138,8,23,196,2,19,248,22,138,8,23,197,2,249,22,160,15, -251,22,145,8,250,22,144,8,23,205,2,36,23,203,4,2,54,249,22,144,8, -23,204,1,23,201,4,28,248,22,144,7,23,205,2,249,22,159,8,23,206,1, -8,63,23,204,1,28,248,22,151,15,23,200,2,248,22,152,15,23,200,1,86, -94,23,199,1,247,22,153,15,2,2,27,248,22,179,3,23,195,1,28,249,22, -159,9,8,46,249,22,139,8,23,199,2,23,197,2,27,248,22,178,3,23,195, -2,249,22,160,15,251,22,145,8,250,22,144,8,23,205,2,36,23,203,1,2, -69,249,22,144,8,23,204,1,23,201,1,28,248,22,144,7,23,205,2,249,22, -159,8,23,206,1,8,63,23,204,1,28,248,22,151,15,23,200,2,248,22,152, -15,23,200,1,86,94,23,199,1,247,22,153,15,251,2,151,2,198,199,200,196, -90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,151,15,23,196,2,10, -28,248,22,150,15,23,196,2,10,28,248,22,144,7,23,196,2,28,248,22,173, -15,23,196,2,10,248,22,174,15,23,196,2,11,12,252,22,168,11,2,39,2, -45,36,23,200,2,23,201,2,28,28,248,22,144,7,23,197,2,10,248,22,133, -8,23,197,2,12,252,22,168,11,2,39,2,67,37,23,200,2,23,201,2,90, -159,39,11,89,161,39,36,11,248,22,171,15,23,199,2,86,94,23,195,1,86, -94,28,192,12,250,22,171,11,2,39,2,68,23,201,2,249,22,7,194,195,27, -248,22,156,15,23,196,1,27,251,2,151,2,23,198,2,23,201,1,23,202,1, -248,22,138,8,23,199,1,28,248,22,150,15,23,196,2,249,22,168,15,23,197, -1,23,195,1,192,252,80,158,41,8,36,2,39,2,69,22,144,8,198,199,249, +141,8,23,195,2,19,248,22,141,8,23,196,2,249,22,163,15,251,22,148,8, +250,22,147,8,23,204,2,36,23,203,4,2,54,249,22,147,8,23,203,1,23, +201,4,28,248,22,147,7,23,204,2,249,22,162,8,23,205,1,8,63,23,203, +1,28,248,22,154,15,23,199,2,248,22,155,15,23,199,1,86,94,23,198,1, +247,22,156,15,2,2,27,248,22,179,3,23,198,1,28,249,22,162,9,8,46, +249,22,142,8,23,198,2,23,197,2,27,248,22,178,3,23,195,2,249,22,163, +15,251,22,148,8,250,22,147,8,23,204,2,36,23,203,1,2,69,249,22,147, +8,23,203,1,23,201,1,28,248,22,147,7,23,204,2,249,22,162,8,23,205, +1,8,63,23,203,1,28,248,22,154,15,23,199,2,248,22,155,15,23,199,1, +86,94,23,198,1,247,22,156,15,28,248,22,130,4,23,194,2,86,94,23,193, +1,19,248,22,141,8,23,196,2,19,248,22,141,8,23,197,2,249,22,163,15, +251,22,148,8,250,22,147,8,23,205,2,36,23,203,4,2,54,249,22,147,8, +23,204,1,23,201,4,28,248,22,147,7,23,205,2,249,22,162,8,23,206,1, +8,63,23,204,1,28,248,22,154,15,23,200,2,248,22,155,15,23,200,1,86, +94,23,199,1,247,22,156,15,2,2,27,248,22,179,3,23,195,1,28,249,22, +162,9,8,46,249,22,142,8,23,199,2,23,197,2,27,248,22,178,3,23,195, +2,249,22,163,15,251,22,148,8,250,22,147,8,23,205,2,36,23,203,1,2, +69,249,22,147,8,23,204,1,23,201,1,28,248,22,147,7,23,205,2,249,22, +162,8,23,206,1,8,63,23,204,1,28,248,22,154,15,23,200,2,248,22,155, +15,23,200,1,86,94,23,199,1,247,22,156,15,251,2,151,2,198,199,200,196, +90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,154,15,23,196,2,10, +28,248,22,153,15,23,196,2,10,28,248,22,147,7,23,196,2,28,248,22,176, +15,23,196,2,10,248,22,177,15,23,196,2,11,12,252,22,171,11,2,39,2, +45,36,23,200,2,23,201,2,28,28,248,22,147,7,23,197,2,10,248,22,136, +8,23,197,2,12,252,22,171,11,2,39,2,67,37,23,200,2,23,201,2,90, +159,39,11,89,161,39,36,11,248,22,174,15,23,199,2,86,94,23,195,1,86, +94,28,192,12,250,22,174,11,2,39,2,68,23,201,2,249,22,7,194,195,27, +248,22,159,15,23,196,1,27,251,2,151,2,23,198,2,23,201,1,23,202,1, +248,22,141,8,23,199,1,28,248,22,153,15,23,196,2,249,22,171,15,23,197, +1,23,195,1,192,252,80,158,41,8,36,2,39,2,69,22,147,8,198,199,249, 247,22,171,5,23,195,1,11,249,247,22,171,5,194,11,28,248,22,87,23,195, -2,9,27,27,248,22,80,23,197,2,28,248,22,175,15,23,194,2,192,28,248, -22,174,15,23,194,2,249,22,176,15,23,195,1,249,22,176,15,250,80,159,45, -40,39,248,22,191,15,2,61,11,10,248,22,191,15,2,60,250,80,159,41,40, -39,248,22,191,15,2,61,23,196,1,10,28,23,193,2,249,22,79,248,22,178, -15,249,22,176,15,23,198,1,247,22,128,16,27,248,22,81,23,199,1,28,248, +2,9,27,27,248,22,80,23,197,2,28,248,22,178,15,23,194,2,192,28,248, +22,177,15,23,194,2,249,22,179,15,23,195,1,249,22,179,15,250,80,159,45, +40,39,248,22,130,16,2,61,11,10,248,22,130,16,2,60,250,80,159,41,40, +39,248,22,130,16,2,61,23,196,1,10,28,23,193,2,249,22,79,248,22,181, +15,249,22,179,15,23,198,1,247,22,131,16,27,248,22,81,23,199,1,28,248, 22,87,23,194,2,9,27,248,80,159,42,8,24,39,248,22,80,23,196,2,28, -23,193,2,249,22,79,248,22,178,15,249,22,176,15,23,198,1,247,22,128,16, +23,193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131,16, 248,80,159,44,8,45,39,248,22,81,23,198,1,86,94,23,193,1,248,80,159, 42,8,45,39,248,22,81,23,196,1,86,94,23,193,1,27,248,22,81,23,197, 1,28,248,22,87,23,194,2,9,27,248,80,159,40,8,24,39,248,22,80,23, -196,2,28,23,193,2,249,22,79,248,22,178,15,249,22,176,15,23,198,1,247, -22,128,16,248,80,159,42,8,45,39,248,22,81,23,198,1,86,94,23,193,1, +196,2,28,23,193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247, +22,131,16,248,80,159,42,8,45,39,248,22,81,23,198,1,86,94,23,193,1, 248,80,159,40,8,45,39,248,22,81,23,196,1,28,248,22,87,23,195,2,9, -27,27,248,22,80,23,197,2,28,248,22,175,15,23,194,2,192,28,248,22,174, -15,23,194,2,249,22,176,15,23,195,1,249,22,176,15,250,80,159,45,40,39, -248,22,191,15,2,61,11,10,248,22,191,15,2,60,250,80,159,41,40,39,248, -22,191,15,2,61,23,196,1,10,28,23,193,2,249,22,79,248,22,178,15,249, -22,176,15,23,198,1,247,22,128,16,27,248,22,81,23,199,1,28,248,22,87, +27,27,248,22,80,23,197,2,28,248,22,178,15,23,194,2,192,28,248,22,177, +15,23,194,2,249,22,179,15,23,195,1,249,22,179,15,250,80,159,45,40,39, +248,22,130,16,2,61,11,10,248,22,130,16,2,60,250,80,159,41,40,39,248, +22,130,16,2,61,23,196,1,10,28,23,193,2,249,22,79,248,22,181,15,249, +22,179,15,23,198,1,247,22,131,16,27,248,22,81,23,199,1,28,248,22,87, 23,194,2,9,27,248,80,159,42,8,24,39,248,22,80,23,196,2,28,23,193, -2,249,22,79,248,22,178,15,249,22,176,15,23,198,1,247,22,128,16,248,80, +2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131,16,248,80, 159,44,8,46,39,248,22,81,23,198,1,86,94,23,193,1,248,80,159,42,8, 46,39,248,22,81,23,196,1,86,94,23,193,1,27,248,22,81,23,197,1,28, 248,22,87,23,194,2,9,27,248,80,159,40,8,24,39,248,22,80,23,196,2, -28,23,193,2,249,22,79,248,22,178,15,249,22,176,15,23,198,1,247,22,128, +28,23,193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131, 16,248,80,159,42,8,46,39,248,22,81,23,198,1,86,94,23,193,1,248,80, 159,40,8,46,39,248,22,81,23,196,1,28,248,22,87,23,195,2,9,27,27, -248,22,80,23,197,2,28,248,22,175,15,23,194,2,192,28,248,22,174,15,23, -194,2,249,22,176,15,23,195,1,249,22,176,15,250,80,159,45,40,39,248,22, -191,15,2,61,11,10,248,22,191,15,2,60,250,80,159,41,40,39,248,22,191, -15,2,61,23,196,1,10,28,23,193,2,249,22,79,248,22,178,15,249,22,176, -15,23,198,1,247,22,128,16,27,248,22,81,23,199,1,28,248,22,87,23,194, -2,9,27,27,248,22,80,23,196,2,28,248,22,175,15,23,194,2,192,28,248, -22,174,15,23,194,2,249,22,176,15,23,195,1,249,22,176,15,250,80,159,49, -40,39,248,22,191,15,2,61,11,10,248,22,191,15,2,60,250,80,159,45,40, -39,248,22,191,15,2,61,23,196,1,10,28,23,193,2,249,22,79,248,22,178, -15,249,22,176,15,23,198,1,247,22,128,16,27,248,22,81,23,198,1,28,248, +248,22,80,23,197,2,28,248,22,178,15,23,194,2,192,28,248,22,177,15,23, +194,2,249,22,179,15,23,195,1,249,22,179,15,250,80,159,45,40,39,248,22, +130,16,2,61,11,10,248,22,130,16,2,60,250,80,159,41,40,39,248,22,130, +16,2,61,23,196,1,10,28,23,193,2,249,22,79,248,22,181,15,249,22,179, +15,23,198,1,247,22,131,16,27,248,22,81,23,199,1,28,248,22,87,23,194, +2,9,27,27,248,22,80,23,196,2,28,248,22,178,15,23,194,2,192,28,248, +22,177,15,23,194,2,249,22,179,15,23,195,1,249,22,179,15,250,80,159,49, +40,39,248,22,130,16,2,61,11,10,248,22,130,16,2,60,250,80,159,45,40, +39,248,22,130,16,2,61,23,196,1,10,28,23,193,2,249,22,79,248,22,181, +15,249,22,179,15,23,198,1,247,22,131,16,27,248,22,81,23,198,1,28,248, 22,87,23,194,2,9,27,248,80,159,46,8,24,39,248,22,80,23,196,2,28, -23,193,2,249,22,79,248,22,178,15,249,22,176,15,23,198,1,247,22,128,16, +23,193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131,16, 248,80,159,48,8,47,39,248,22,81,23,198,1,86,94,23,193,1,248,80,159, 46,8,47,39,248,22,81,23,196,1,86,94,23,193,1,27,248,22,81,23,196, 1,28,248,22,87,23,194,2,9,27,248,80,159,44,8,24,39,248,22,80,23, -196,2,28,23,193,2,249,22,79,248,22,178,15,249,22,176,15,23,198,1,247, -22,128,16,248,80,159,46,8,47,39,248,22,81,23,198,1,86,94,23,193,1, +196,2,28,23,193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247, +22,131,16,248,80,159,46,8,47,39,248,22,81,23,198,1,86,94,23,193,1, 248,80,159,44,8,47,39,248,22,81,23,196,1,86,94,23,193,1,27,248,22, 81,23,197,1,28,248,22,87,23,194,2,9,27,27,248,22,80,23,196,2,28, -248,22,175,15,23,194,2,192,28,248,22,174,15,23,194,2,249,22,176,15,23, -195,1,249,22,176,15,250,80,159,47,40,39,248,22,191,15,2,61,11,10,248, -22,191,15,2,60,250,80,159,43,40,39,248,22,191,15,2,61,23,196,1,10, -28,23,193,2,249,22,79,248,22,178,15,249,22,176,15,23,198,1,247,22,128, +248,22,178,15,23,194,2,192,28,248,22,177,15,23,194,2,249,22,179,15,23, +195,1,249,22,179,15,250,80,159,47,40,39,248,22,130,16,2,61,11,10,248, +22,130,16,2,60,250,80,159,43,40,39,248,22,130,16,2,61,23,196,1,10, +28,23,193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131, 16,27,248,22,81,23,198,1,28,248,22,87,23,194,2,9,27,248,80,159,44, -8,24,39,248,22,80,23,196,2,28,23,193,2,249,22,79,248,22,178,15,249, -22,176,15,23,198,1,247,22,128,16,248,80,159,46,8,47,39,248,22,81,23, +8,24,39,248,22,80,23,196,2,28,23,193,2,249,22,79,248,22,181,15,249, +22,179,15,23,198,1,247,22,131,16,248,80,159,46,8,47,39,248,22,81,23, 198,1,86,94,23,193,1,248,80,159,44,8,47,39,248,22,81,23,196,1,86, 94,23,193,1,27,248,22,81,23,196,1,28,248,22,87,23,194,2,9,27,248, 80,159,42,8,24,39,248,22,80,23,196,2,28,23,193,2,249,22,79,248,22, -178,15,249,22,176,15,23,198,1,247,22,128,16,248,80,159,44,8,47,39,248, +181,15,249,22,179,15,23,198,1,247,22,131,16,248,80,159,44,8,47,39,248, 22,81,23,198,1,86,94,23,193,1,248,80,159,42,8,47,39,248,22,81,23, -196,1,27,247,22,133,16,249,80,159,39,41,38,28,23,195,2,27,249,22,166, -8,247,22,165,8,2,70,28,192,249,22,156,8,194,7,63,2,65,2,65,250, +196,1,27,247,22,136,16,249,80,159,39,41,38,28,23,195,2,27,249,22,169, +8,247,22,168,8,2,70,28,192,249,22,159,8,194,7,63,2,65,2,65,250, 80,159,42,8,25,39,248,80,159,43,57,39,247,80,159,43,54,39,2,71,27, -28,23,199,1,250,22,168,15,248,22,191,15,2,57,247,22,162,8,2,72,11, -27,248,80,159,45,8,45,39,250,22,93,9,248,22,89,248,22,191,15,2,62, -9,28,193,249,22,79,195,194,192,27,247,22,133,16,249,80,159,39,41,38,28, -23,195,2,27,249,22,166,8,247,22,165,8,2,70,28,192,249,22,156,8,194, +28,23,199,1,250,22,171,15,248,22,130,16,2,57,247,22,165,8,2,72,11, +27,248,80,159,45,8,45,39,250,22,93,9,248,22,89,248,22,130,16,2,62, +9,28,193,249,22,79,195,194,192,27,247,22,136,16,249,80,159,39,41,38,28, +23,195,2,27,249,22,169,8,247,22,168,8,2,70,28,192,249,22,159,8,194, 7,63,2,65,2,65,250,80,159,42,8,25,39,248,80,159,43,57,39,247,80, -159,43,54,39,2,71,27,28,23,199,1,250,22,168,15,248,22,191,15,2,57, -247,22,162,8,2,72,11,27,248,80,159,45,8,46,39,250,22,93,23,206,1, -248,22,89,248,22,191,15,2,62,9,28,193,249,22,79,195,194,192,27,247,22, -133,16,249,80,159,39,41,38,28,23,195,2,27,249,22,166,8,247,22,165,8, -2,70,28,192,249,22,156,8,194,7,63,2,65,2,65,250,80,159,42,8,25, -39,248,80,159,43,57,39,27,248,22,191,15,2,59,28,248,22,175,15,23,194, -2,192,27,28,248,22,173,15,23,195,2,20,13,159,80,159,45,55,37,250,80, -159,48,56,37,249,22,33,11,80,159,50,55,37,22,128,16,248,22,191,15,2, -60,27,248,22,191,15,2,61,250,80,159,49,40,39,23,196,1,23,198,2,11, -11,28,23,193,2,192,86,94,23,193,1,27,249,22,176,15,27,248,22,191,15, -2,61,250,80,159,52,40,39,23,196,1,11,11,248,22,191,15,2,60,90,159, -39,11,89,161,39,36,11,248,22,171,15,23,197,1,86,95,23,195,1,23,194, -1,249,22,176,15,23,200,1,23,195,1,2,71,27,28,23,199,1,250,22,168, -15,248,22,191,15,2,57,247,22,162,8,2,72,11,27,27,250,22,93,23,206, -1,248,22,89,248,22,191,15,2,62,23,207,1,28,248,22,87,23,194,2,9, -27,27,248,22,80,23,196,2,28,248,22,175,15,23,194,2,192,28,248,22,174, -15,23,194,2,249,22,176,15,23,195,1,249,22,176,15,250,80,159,54,40,39, -248,22,191,15,2,61,11,10,248,22,191,15,2,60,250,80,159,50,40,39,248, -22,191,15,2,61,23,196,1,10,28,23,193,2,249,22,79,248,22,178,15,249, -22,176,15,23,198,1,247,22,128,16,27,248,22,81,23,198,1,28,248,22,87, +159,43,54,39,2,71,27,28,23,199,1,250,22,171,15,248,22,130,16,2,57, +247,22,165,8,2,72,11,27,248,80,159,45,8,46,39,250,22,93,23,206,1, +248,22,89,248,22,130,16,2,62,9,28,193,249,22,79,195,194,192,27,247,22, +136,16,249,80,159,39,41,38,28,23,195,2,27,249,22,169,8,247,22,168,8, +2,70,28,192,249,22,159,8,194,7,63,2,65,2,65,250,80,159,42,8,25, +39,248,80,159,43,57,39,27,248,22,130,16,2,59,28,248,22,178,15,23,194, +2,192,27,28,248,22,176,15,23,195,2,20,13,159,80,159,45,55,37,250,80, +159,48,56,37,249,22,33,11,80,159,50,55,37,22,131,16,248,22,130,16,2, +60,27,248,22,130,16,2,61,250,80,159,49,40,39,23,196,1,23,198,2,11, +11,28,23,193,2,192,86,94,23,193,1,27,249,22,179,15,27,248,22,130,16, +2,61,250,80,159,52,40,39,23,196,1,11,11,248,22,130,16,2,60,90,159, +39,11,89,161,39,36,11,248,22,174,15,23,197,1,86,95,23,195,1,23,194, +1,249,22,179,15,23,200,1,23,195,1,2,71,27,28,23,199,1,250,22,171, +15,248,22,130,16,2,57,247,22,165,8,2,72,11,27,27,250,22,93,23,206, +1,248,22,89,248,22,130,16,2,62,23,207,1,28,248,22,87,23,194,2,9, +27,27,248,22,80,23,196,2,28,248,22,178,15,23,194,2,192,28,248,22,177, +15,23,194,2,249,22,179,15,23,195,1,249,22,179,15,250,80,159,54,40,39, +248,22,130,16,2,61,11,10,248,22,130,16,2,60,250,80,159,50,40,39,248, +22,130,16,2,61,23,196,1,10,28,23,193,2,249,22,79,248,22,181,15,249, +22,179,15,23,198,1,247,22,131,16,27,248,22,81,23,198,1,28,248,22,87, 23,194,2,9,27,248,80,159,51,8,24,39,248,22,80,23,196,2,28,23,193, -2,249,22,79,248,22,178,15,249,22,176,15,23,198,1,247,22,128,16,248,80, +2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131,16,248,80, 159,53,8,47,39,248,22,81,23,198,1,86,94,23,193,1,248,80,159,51,8, 47,39,248,22,81,23,196,1,86,94,23,193,1,27,248,22,81,23,196,1,28, 248,22,87,23,194,2,9,27,248,80,159,49,8,24,39,248,22,80,23,196,2, -28,23,193,2,249,22,79,248,22,178,15,249,22,176,15,23,198,1,247,22,128, +28,23,193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131, 16,248,80,159,51,8,47,39,248,22,81,23,198,1,86,94,23,193,1,248,80, 159,49,8,47,39,248,22,81,23,196,1,28,193,249,22,79,195,194,192,27,20, 13,159,80,159,37,55,37,26,9,80,159,46,56,37,249,22,33,11,80,159,48, -55,37,22,188,14,10,22,131,15,10,22,132,15,10,22,133,15,10,248,22,139, -6,23,196,2,28,248,22,139,7,23,194,2,12,86,94,248,22,167,9,23,194, +55,37,22,191,14,10,22,134,15,10,22,135,15,10,22,136,15,10,248,22,142, +6,23,196,2,28,248,22,142,7,23,194,2,12,86,94,248,22,170,9,23,194, 1,27,20,13,159,80,159,38,55,37,26,9,80,159,47,56,37,249,22,33,11, -80,159,49,55,37,22,188,14,10,22,131,15,10,22,132,15,10,22,133,15,10, -248,22,139,6,23,197,2,28,248,22,139,7,23,194,2,12,86,94,248,22,167, +80,159,49,55,37,22,191,14,10,22,134,15,10,22,135,15,10,22,136,15,10, +248,22,142,6,23,197,2,28,248,22,142,7,23,194,2,12,86,94,248,22,170, 9,23,194,1,27,20,13,159,80,159,39,55,37,26,9,80,159,48,56,37,249, -22,33,11,80,159,50,55,37,22,188,14,10,22,131,15,10,22,132,15,10,22, -133,15,10,248,22,139,6,23,198,2,28,248,22,139,7,23,194,2,12,86,94, -248,22,167,9,23,194,1,248,80,159,40,8,48,39,197,86,94,249,22,130,7, -247,22,167,5,23,196,2,248,22,154,6,249,22,133,4,36,249,22,181,3,23, +22,33,11,80,159,50,55,37,22,191,14,10,22,134,15,10,22,135,15,10,22, +136,15,10,248,22,142,6,23,198,2,28,248,22,142,7,23,194,2,12,86,94, +248,22,170,9,23,194,1,248,80,159,40,8,48,39,197,86,94,249,22,133,7, +247,22,167,5,23,196,2,248,22,157,6,249,22,133,4,36,249,22,181,3,23, 198,1,23,199,1,27,28,23,197,2,86,95,23,196,1,23,195,1,23,197,1, -86,94,23,197,1,27,248,22,191,15,2,61,27,250,80,159,42,40,39,23,197, +86,94,23,197,1,27,248,22,130,16,2,61,27,250,80,159,42,40,39,23,197, 1,11,11,27,248,22,136,4,23,199,1,27,28,23,194,2,23,194,1,86,94, 23,194,1,36,27,248,22,136,4,23,202,1,27,28,23,194,2,23,194,1,86, 94,23,194,1,36,249,22,134,6,23,199,1,20,20,95,88,163,8,36,36,48, @@ -854,13 +854,13 @@ 2,4,2,40,2,7,2,39,2,2,2,5,49,49,37,12,11,11,16,0,16, 0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,45,20,15, 16,2,32,0,88,163,36,37,45,11,2,2,222,33,73,80,159,36,36,37,20, -15,16,2,249,22,146,7,7,92,7,92,80,159,36,37,37,20,15,16,2,88, +15,16,2,249,22,149,7,7,92,7,92,80,159,36,37,37,20,15,16,2,88, 163,36,37,54,38,2,4,223,0,33,78,80,159,36,38,37,20,15,16,2,88, 163,36,38,58,38,2,5,223,0,33,80,80,159,36,39,37,20,15,16,2,20, 25,96,2,6,88,163,8,36,39,8,25,8,32,9,223,0,33,87,88,163,36, 38,47,52,9,223,0,33,88,88,163,36,37,46,52,9,223,0,33,89,80,159, -36,40,37,20,15,16,2,27,248,22,137,16,248,22,158,8,27,28,249,22,159, -9,247,22,171,8,2,46,6,1,1,59,6,1,1,58,250,22,128,8,6,14, +36,40,37,20,15,16,2,27,248,22,140,16,248,22,161,8,27,28,249,22,162, +9,247,22,174,8,2,46,6,1,1,59,6,1,1,58,250,22,131,8,6,14, 14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23,196,1, 88,163,8,36,38,48,11,2,7,223,0,33,93,80,159,36,41,37,20,15,16, 2,32,0,88,163,8,36,38,47,11,2,8,222,33,94,80,159,36,42,37,20, @@ -868,10 +868,10 @@ 37,20,15,16,2,32,0,88,163,8,36,38,46,11,2,10,222,33,97,80,159, 36,44,37,20,15,16,2,88,163,45,39,49,8,128,16,2,11,223,0,33,99, 80,159,36,45,37,20,15,16,2,88,163,45,40,50,8,128,16,2,13,223,0, -33,101,80,159,36,47,37,20,15,16,2,250,22,168,15,248,22,191,15,2,57, -247,22,162,8,2,58,80,159,36,48,37,20,15,16,2,247,22,137,2,80,158, -36,49,20,15,16,2,11,80,158,36,50,20,15,16,2,249,22,168,15,248,22, -191,15,2,57,2,58,80,159,36,51,37,20,15,16,2,247,22,137,2,80,158, +33,101,80,159,36,47,37,20,15,16,2,250,22,171,15,248,22,130,16,2,57, +247,22,165,8,2,58,80,159,36,48,37,20,15,16,2,247,22,137,2,80,158, +36,49,20,15,16,2,11,80,158,36,50,20,15,16,2,249,22,171,15,248,22, +130,16,2,57,2,58,80,159,36,51,37,20,15,16,2,247,22,137,2,80,158, 36,52,20,15,16,2,11,80,158,36,53,20,15,16,2,88,163,36,36,51,8, 240,16,0,24,0,2,20,223,0,33,102,80,159,36,54,37,20,15,16,2,32, 0,88,163,8,36,37,46,11,2,24,222,33,103,80,159,36,57,37,20,15,16, @@ -882,9 +882,9 @@ 33,107,80,159,36,8,42,39,20,15,16,2,88,163,8,36,39,49,16,4,36, 36,8,128,16,36,2,28,223,0,33,108,80,159,36,8,25,37,20,15,16,2, 248,80,159,37,8,27,37,88,163,8,36,36,53,8,240,16,0,120,2,9,223, -1,33,109,80,159,36,8,26,37,20,15,16,2,249,22,175,8,248,22,178,8, +1,33,109,80,159,36,8,26,37,20,15,16,2,249,22,178,8,248,22,181,8, 80,159,39,8,26,38,247,22,137,2,80,159,36,8,28,37,20,15,16,2,249, -22,175,8,248,22,178,8,80,159,39,8,26,38,11,80,159,36,8,29,37,20, +22,178,8,248,22,181,8,80,159,39,8,26,38,11,80,159,36,8,29,37,20, 15,16,2,248,22,18,65,115,116,97,109,112,80,159,36,8,30,37,20,15,16, 2,88,163,36,37,46,16,2,36,8,240,0,64,0,0,9,223,0,33,111,80, 159,36,8,43,39,20,15,16,2,88,163,36,37,45,16,4,36,8,240,0,64, @@ -921,7 +921,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 17165); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,51,84,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,52,84,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,1,0,0,15,0, 40,0,57,0,75,0,97,0,120,0,140,0,162,0,171,0,180,0,187,0,196, 0,203,0,0,0,229,1,0,0,74,35,37,112,108,97,99,101,45,115,116,114, @@ -940,8 +940,8 @@ 0,36,16,2,2,5,2,6,38,11,11,11,16,5,2,3,2,7,2,8,2, 4,2,2,16,5,11,11,11,11,11,16,5,2,3,2,7,2,8,2,4,2, 2,41,41,37,12,11,11,16,0,16,0,16,0,36,36,11,12,11,11,16,0, -16,0,16,0,36,36,16,3,20,15,16,6,253,22,177,10,2,3,11,38,36, -11,248,22,89,249,22,79,22,164,10,88,163,36,37,45,44,9,223,9,33,9, +16,0,16,0,36,36,16,3,20,15,16,6,253,22,180,10,2,3,11,38,36, +11,248,22,89,249,22,79,22,167,10,88,163,36,37,45,44,9,223,9,33,9, 80,159,36,36,37,80,159,36,37,37,80,159,36,38,37,80,159,36,39,37,80, 159,36,40,37,20,15,16,2,20,27,158,88,163,36,37,45,44,9,223,0,33, 10,88,163,36,37,45,44,9,223,0,33,11,80,159,36,41,37,20,15,16,2, @@ -951,7 +951,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 557); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,51,84,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,52,84,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,106,0,0,0,1,0,0,7,0, 18,0,45,0,51,0,60,0,67,0,89,0,102,0,128,0,145,0,167,0,175, 0,187,0,202,0,218,0,236,0,0,1,12,1,28,1,51,1,75,1,87,1, @@ -987,87 +987,87 @@ 111,111,112,64,108,111,111,112,63,108,105,98,6,12,12,109,111,100,117,108,101, 45,112,97,116,104,63,66,115,117,98,109,111,100,6,2,2,46,46,6,1,1, 46,64,102,105,108,101,66,112,108,97,110,101,116,6,8,8,109,97,105,110,46, -114,107,116,6,4,4,46,114,107,116,67,105,103,110,111,114,101,100,250,22,168, -15,28,249,22,159,9,23,201,2,2,29,86,94,23,199,1,23,197,1,28,248, -22,173,15,23,200,2,249,22,168,15,23,199,1,23,201,1,249,80,159,43,42, +114,107,116,6,4,4,46,114,107,116,67,105,103,110,111,114,101,100,250,22,171, +15,28,249,22,162,9,23,201,2,2,29,86,94,23,199,1,23,197,1,28,248, +22,176,15,23,200,2,249,22,171,15,23,199,1,23,201,1,249,80,159,43,42, 39,23,199,1,23,201,1,23,200,1,249,80,159,43,43,39,23,198,1,2,30, -250,22,168,15,28,249,22,159,9,23,201,2,2,29,86,94,23,199,1,23,197, -1,28,248,22,173,15,23,200,2,249,22,168,15,23,199,1,23,201,1,249,80, +250,22,171,15,28,249,22,162,9,23,201,2,2,29,86,94,23,199,1,23,197, +1,28,248,22,176,15,23,200,2,249,22,171,15,23,199,1,23,201,1,249,80, 159,43,42,39,23,199,1,23,201,1,23,200,1,249,80,159,43,43,39,23,198, -1,2,30,252,22,168,15,28,249,22,159,9,23,203,2,2,29,86,94,23,201, -1,23,199,1,28,248,22,173,15,23,202,2,249,22,168,15,23,201,1,23,203, -1,249,80,159,45,42,39,23,201,1,23,203,1,23,202,1,2,31,247,22,172, -8,249,80,159,45,43,39,23,200,1,80,159,45,36,38,252,22,168,15,28,249, -22,159,9,23,203,2,2,29,86,94,23,201,1,23,199,1,28,248,22,173,15, -23,202,2,249,22,168,15,23,201,1,23,203,1,249,80,159,45,42,39,23,201, -1,23,203,1,23,202,1,2,31,247,22,172,8,249,80,159,45,43,39,23,200, -1,80,159,45,36,38,27,252,22,168,15,28,249,22,159,9,23,201,2,2,29, -86,94,23,199,1,23,201,1,28,248,22,173,15,23,200,2,249,22,168,15,23, +1,2,30,252,22,171,15,28,249,22,162,9,23,203,2,2,29,86,94,23,201, +1,23,199,1,28,248,22,176,15,23,202,2,249,22,171,15,23,201,1,23,203, +1,249,80,159,45,42,39,23,201,1,23,203,1,23,202,1,2,31,247,22,175, +8,249,80,159,45,43,39,23,200,1,80,159,45,36,38,252,22,171,15,28,249, +22,162,9,23,203,2,2,29,86,94,23,201,1,23,199,1,28,248,22,176,15, +23,202,2,249,22,171,15,23,201,1,23,203,1,249,80,159,45,42,39,23,201, +1,23,203,1,23,202,1,2,31,247,22,175,8,249,80,159,45,43,39,23,200, +1,80,159,45,36,38,27,252,22,171,15,28,249,22,162,9,23,201,2,2,29, +86,94,23,199,1,23,201,1,28,248,22,176,15,23,200,2,249,22,171,15,23, 203,1,23,201,1,249,80,159,47,42,39,23,203,1,23,201,1,23,203,1,2, -31,247,22,172,8,249,80,159,47,43,39,23,202,1,80,159,47,36,38,27,250, -22,186,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22, +31,247,22,175,8,249,80,159,47,43,39,23,202,1,80,159,47,36,38,27,250, +22,189,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22, 79,195,194,11,249,22,5,20,20,96,88,163,8,36,37,54,8,129,3,9,226, 5,3,2,6,33,48,23,199,1,23,195,1,23,196,1,23,197,1,27,252,22, -168,15,28,249,22,159,9,23,201,2,2,29,86,94,23,199,1,23,201,1,28, -248,22,173,15,23,200,2,249,22,168,15,23,203,1,23,201,1,249,80,159,47, -42,39,23,203,1,23,201,1,23,203,1,2,31,247,22,172,8,249,80,159,47, -43,39,23,202,1,80,159,47,36,38,27,250,22,186,15,196,11,32,0,88,163, +171,15,28,249,22,162,9,23,201,2,2,29,86,94,23,199,1,23,201,1,28, +248,22,176,15,23,200,2,249,22,171,15,23,203,1,23,201,1,249,80,159,47, +42,39,23,203,1,23,201,1,23,203,1,2,31,247,22,175,8,249,80,159,47, +43,39,23,202,1,80,159,47,36,38,27,250,22,189,15,196,11,32,0,88,163, 8,36,36,41,11,9,222,11,28,192,249,22,79,195,194,11,249,22,5,20,20, 96,88,163,8,36,37,54,8,129,3,9,226,5,3,2,6,33,50,23,199,1, -23,195,1,23,196,1,23,197,1,27,250,22,168,15,28,249,22,159,9,23,199, -2,2,29,86,94,23,197,1,23,199,1,28,248,22,173,15,23,198,2,249,22, -168,15,23,201,1,23,199,1,249,80,159,45,42,39,23,201,1,23,199,1,23, -201,1,249,80,159,45,43,39,23,200,1,2,30,27,250,22,186,15,196,11,32, +23,195,1,23,196,1,23,197,1,27,250,22,171,15,28,249,22,162,9,23,199, +2,2,29,86,94,23,197,1,23,199,1,28,248,22,176,15,23,198,2,249,22, +171,15,23,201,1,23,199,1,249,80,159,45,42,39,23,201,1,23,199,1,23, +201,1,249,80,159,45,43,39,23,200,1,2,30,27,250,22,189,15,196,11,32, 0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79,195,194,11,249,22, 5,20,20,96,88,163,8,36,37,52,8,128,3,9,226,5,3,2,6,33,52, -23,199,1,23,195,1,23,196,1,23,197,1,27,250,22,168,15,28,249,22,159, -9,23,199,2,2,29,86,94,23,197,1,23,199,1,28,248,22,173,15,23,198, -2,249,22,168,15,23,201,1,23,199,1,249,80,159,45,42,39,23,201,1,23, -199,1,23,201,1,249,80,159,45,43,39,23,200,1,2,30,27,250,22,186,15, +23,199,1,23,195,1,23,196,1,23,197,1,27,250,22,171,15,28,249,22,162, +9,23,199,2,2,29,86,94,23,197,1,23,199,1,28,248,22,176,15,23,198, +2,249,22,171,15,23,201,1,23,199,1,249,80,159,45,42,39,23,201,1,23, +199,1,23,201,1,249,80,159,45,43,39,23,200,1,2,30,27,250,22,189,15, 196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79,195,194, 11,249,22,5,20,20,96,88,163,8,36,37,52,8,128,3,9,226,5,3,2, 6,33,54,23,199,1,23,195,1,23,196,1,23,197,1,86,95,28,248,80,159, -37,40,39,23,195,2,12,250,22,168,11,2,27,6,12,12,112,97,116,104,45, +37,40,39,23,195,2,12,250,22,171,11,2,27,6,12,12,112,97,116,104,45, 115,116,114,105,110,103,63,23,197,2,28,28,23,195,2,28,248,22,64,23,196, 2,10,28,248,22,88,23,196,2,28,249,22,191,3,248,22,92,23,198,2,37, -28,28,248,22,64,248,22,80,23,197,2,10,248,22,157,9,248,22,132,18,23, -197,2,249,22,4,22,64,248,22,133,18,23,198,2,11,11,11,10,12,250,22, -168,11,2,27,6,71,71,40,111,114,47,99,32,35,102,32,115,121,109,98,111, +28,28,248,22,64,248,22,80,23,197,2,10,248,22,160,9,248,22,135,18,23, +197,2,249,22,4,22,64,248,22,136,18,23,198,2,11,11,11,10,12,250,22, +171,11,2,27,6,71,71,40,111,114,47,99,32,35,102,32,115,121,109,98,111, 108,63,32,40,99,111,110,115,47,99,32,40,111,114,47,99,32,35,102,32,115, 121,109,98,111,108,63,41,32,40,110,111,110,45,101,109,112,116,121,45,108,105, 115,116,111,102,32,115,121,109,98,111,108,63,41,41,41,23,197,2,27,28,23, 196,2,247,22,186,4,11,27,28,23,194,2,250,22,157,2,80,158,41,41,248, -22,166,16,247,22,186,13,11,11,27,28,23,194,2,250,22,157,2,248,22,81, +22,169,16,247,22,189,13,11,11,27,28,23,194,2,250,22,157,2,248,22,81, 23,198,2,23,198,2,11,11,28,23,193,2,86,96,23,197,1,23,195,1,23, 194,1,20,13,159,80,159,39,38,37,250,80,159,42,39,37,249,22,33,11,80, 159,44,38,37,22,187,4,248,22,101,23,197,2,27,248,22,110,23,195,2,20, 13,159,80,159,40,38,37,250,80,159,43,39,37,249,22,33,11,80,159,45,38, -37,22,172,5,28,248,22,150,15,23,197,2,23,196,1,86,94,23,196,1,247, -22,128,16,249,247,22,170,5,248,22,80,23,197,1,23,201,1,86,94,23,193, -1,90,159,47,11,89,161,37,36,11,28,248,22,175,15,23,209,2,23,208,2, -27,247,22,172,5,28,23,193,2,249,22,176,15,23,211,2,23,195,1,23,209, -2,89,161,39,37,11,248,22,171,15,23,209,1,86,94,23,196,1,89,161,38, -40,11,28,23,209,2,27,248,22,155,15,23,197,2,19,248,22,138,8,23,195, -2,28,28,249,22,129,4,23,195,4,40,249,22,141,8,2,28,249,22,144,8, -23,198,2,249,22,181,3,23,199,4,40,11,249,22,7,23,199,2,248,22,159, -15,249,22,145,8,250,22,144,8,23,202,1,36,249,22,181,3,23,203,4,40, +37,22,172,5,28,248,22,153,15,23,197,2,23,196,1,86,94,23,196,1,247, +22,131,16,249,247,22,170,5,248,22,80,23,197,1,23,201,1,86,94,23,193, +1,90,159,47,11,89,161,37,36,11,28,248,22,178,15,23,209,2,23,208,2, +27,247,22,172,5,28,23,193,2,249,22,179,15,23,211,2,23,195,1,23,209, +2,89,161,39,37,11,248,22,174,15,23,209,1,86,94,23,196,1,89,161,38, +40,11,28,23,209,2,27,248,22,158,15,23,197,2,19,248,22,141,8,23,195, +2,28,28,249,22,129,4,23,195,4,40,249,22,144,8,2,28,249,22,147,8, +23,198,2,249,22,181,3,23,199,4,40,11,249,22,7,23,199,2,248,22,162, +15,249,22,148,8,250,22,147,8,23,202,1,36,249,22,181,3,23,203,4,40, 5,3,46,115,115,249,22,7,23,199,2,11,2,249,22,7,23,197,2,11,89, -161,37,42,11,28,249,22,159,9,23,199,2,23,197,2,23,193,2,249,22,168, -15,23,196,2,23,199,2,89,161,37,43,11,28,23,198,2,28,249,22,159,9, -23,200,2,23,197,1,23,193,1,86,94,23,193,1,249,22,168,15,23,196,2, -23,200,2,86,94,23,195,1,11,89,161,37,44,11,28,249,22,159,9,23,196, +161,37,42,11,28,249,22,162,9,23,199,2,23,197,2,23,193,2,249,22,171, +15,23,196,2,23,199,2,89,161,37,43,11,28,23,198,2,28,249,22,162,9, +23,200,2,23,197,1,23,193,1,86,94,23,193,1,249,22,171,15,23,196,2, +23,200,2,86,94,23,195,1,11,89,161,37,44,11,28,249,22,162,9,23,196, 2,68,114,101,108,97,116,105,118,101,86,94,23,194,1,2,29,23,194,1,89, -161,37,45,11,247,22,131,16,89,161,37,46,11,247,22,132,16,27,250,22,186, +161,37,45,11,247,22,134,16,89,161,37,46,11,247,22,135,16,27,250,22,189, 15,23,203,2,11,32,0,88,163,8,36,36,41,11,9,222,11,27,28,23,194, 2,249,22,79,23,203,2,23,196,1,86,94,23,194,1,11,27,28,23,203,2, -28,23,194,2,11,27,250,22,186,15,23,207,2,11,32,0,88,163,8,36,36, +28,23,194,2,11,27,250,22,189,15,23,207,2,11,32,0,88,163,8,36,36, 41,11,9,222,11,28,192,249,22,79,23,206,2,194,11,11,27,28,23,195,2, 23,195,2,23,194,2,27,88,163,36,38,51,8,128,3,62,122,111,225,19,13, 9,33,44,27,88,163,36,38,51,8,128,3,66,97,108,116,45,122,111,225,20, 14,11,33,45,27,88,163,36,38,53,8,129,3,9,225,21,15,11,33,46,27, 88,163,36,38,53,8,129,3,9,225,22,16,13,33,47,27,28,23,200,2,23, -200,2,248,22,157,9,23,200,2,27,28,23,208,2,28,23,200,2,86,94,23, -201,1,23,200,2,248,22,157,9,23,202,1,11,27,28,23,195,2,28,23,197, +200,2,248,22,160,9,23,200,2,27,28,23,208,2,28,23,200,2,86,94,23, +201,1,23,200,2,248,22,160,9,23,202,1,11,27,28,23,195,2,28,23,197, 1,27,249,22,5,88,163,36,37,48,8,129,3,9,226,28,23,22,18,33,49, 23,217,2,27,28,23,202,2,11,193,28,192,192,28,193,28,23,202,2,28,249, 22,129,4,248,22,81,196,248,22,81,23,205,2,193,11,11,11,11,86,94,23, @@ -1076,8 +1076,8 @@ 23,198,1,23,196,1,23,195,1,23,194,1,20,13,159,80,159,8,25,38,37, 250,80,159,8,28,39,37,249,22,33,11,80,159,8,30,38,37,22,187,4,11, 20,13,159,80,159,8,25,38,37,250,80,159,8,28,39,37,249,22,33,11,80, -159,8,30,38,37,22,172,5,28,248,22,150,15,23,216,2,23,215,1,86,94, -23,215,1,247,22,128,16,249,247,22,136,16,248,22,80,23,196,1,23,222,1, +159,8,30,38,37,22,172,5,28,248,22,153,15,23,216,2,23,215,1,86,94, +23,215,1,247,22,131,16,249,247,22,139,16,248,22,80,23,196,1,23,222,1, 86,94,23,193,1,27,28,23,195,2,28,23,197,1,27,249,22,5,88,163,36, 37,48,8,129,3,9,226,29,24,23,20,33,51,23,218,2,27,28,23,204,2, 11,193,28,192,192,28,193,28,203,28,249,22,129,4,248,22,81,196,248,22,81, @@ -1086,8 +1086,8 @@ 23,200,1,23,199,1,23,196,1,23,195,1,20,13,159,80,159,8,26,38,37, 250,80,159,8,29,39,37,249,22,33,11,80,159,8,31,38,37,22,187,4,23, 215,1,20,13,159,80,159,8,26,38,37,250,80,159,8,29,39,37,249,22,33, -11,80,159,8,31,38,37,22,172,5,28,248,22,150,15,23,217,2,23,216,1, -86,94,23,216,1,247,22,128,16,249,247,22,136,16,248,22,80,23,196,1,23, +11,80,159,8,31,38,37,22,172,5,28,248,22,153,15,23,217,2,23,216,1, +86,94,23,216,1,247,22,131,16,249,247,22,139,16,248,22,80,23,196,1,23, 223,1,86,94,23,193,1,27,28,23,197,2,28,23,201,1,27,249,22,5,20, 20,94,88,163,36,37,48,8,128,3,9,226,30,25,24,20,33,53,23,213,1, 23,219,2,27,28,23,204,2,11,193,28,192,192,28,193,28,23,204,2,28,249, @@ -1098,8 +1098,8 @@ 1,23,223,1,250,22,89,23,199,1,11,23,221,2,12,20,13,159,80,159,8, 27,38,37,250,80,159,8,30,39,37,249,22,33,11,80,159,8,32,38,37,22, 187,4,11,20,13,159,80,159,8,27,38,37,250,80,159,8,30,39,37,249,22, -33,11,80,159,8,32,38,37,22,172,5,28,248,22,150,15,23,218,2,23,217, -1,86,94,23,217,1,247,22,128,16,249,247,22,170,5,248,22,132,18,23,196, +33,11,80,159,8,32,38,37,22,172,5,28,248,22,153,15,23,218,2,23,217, +1,86,94,23,217,1,247,22,131,16,249,247,22,170,5,248,22,135,18,23,196, 1,23,224,32,0,0,0,1,86,94,23,193,1,27,28,23,197,1,28,23,201, 1,27,249,22,5,20,20,95,88,163,36,37,48,8,128,3,9,226,31,26,25, 22,33,55,23,215,1,23,219,1,23,220,1,27,28,23,205,2,11,193,28,192, @@ -1110,274 +1110,274 @@ 0,0,1,250,22,89,23,199,1,23,221,2,23,222,2,12,20,13,159,80,159, 8,28,38,37,250,80,159,8,31,39,37,249,22,33,11,80,159,8,33,38,37, 22,187,4,23,217,1,20,13,159,80,159,8,28,38,37,250,80,159,8,31,39, -37,249,22,33,11,80,159,8,33,38,37,22,172,5,28,248,22,150,15,23,219, -2,23,218,1,86,94,23,218,1,247,22,128,16,249,247,22,170,5,248,22,132, +37,249,22,33,11,80,159,8,33,38,37,22,172,5,28,248,22,153,15,23,219, +2,23,218,1,86,94,23,218,1,247,22,131,16,249,247,22,170,5,248,22,135, 18,23,196,1,23,224,33,0,0,0,1,86,94,23,193,1,28,28,248,22,77, -23,224,32,0,0,0,2,248,22,132,18,23,224,32,0,0,0,2,10,27,28, +23,224,32,0,0,0,2,248,22,135,18,23,224,32,0,0,0,2,10,27,28, 23,199,2,86,94,23,215,1,23,214,1,86,94,23,214,1,23,215,1,28,28, -248,22,77,23,224,33,0,0,0,2,248,22,157,9,248,22,162,15,23,195,2, +248,22,77,23,224,33,0,0,0,2,248,22,160,9,248,22,165,15,23,195,2, 11,12,20,13,159,80,159,8,29,38,37,250,80,159,8,32,39,37,249,22,33, 11,80,159,8,34,38,37,22,187,4,28,23,224,35,0,0,0,2,28,23,202, 1,11,23,196,2,86,94,23,202,1,11,20,13,159,80,159,8,29,38,37,250, 80,159,8,32,39,37,249,22,33,11,80,159,8,34,38,37,22,172,5,28,248, -22,150,15,23,220,2,23,219,1,86,94,23,219,1,247,22,128,16,249,247,22, +22,153,15,23,220,2,23,219,1,86,94,23,219,1,247,22,131,16,249,247,22, 170,5,23,195,1,23,224,34,0,0,0,1,12,28,23,194,2,250,22,155,2, 248,22,81,23,198,1,23,196,1,250,22,89,23,201,1,23,202,1,23,203,1, -12,27,249,22,179,8,80,159,39,47,38,249,22,188,3,248,22,184,3,248,22, +12,27,249,22,182,8,80,159,39,47,38,249,22,188,3,248,22,184,3,248,22, 170,2,200,8,128,8,27,28,193,248,22,173,2,194,11,28,192,27,249,22,99, 198,195,28,192,248,22,81,193,11,11,27,249,22,188,3,248,22,184,3,248,22, -170,2,23,199,2,8,128,8,27,249,22,179,8,80,159,40,47,38,23,196,2, -27,28,23,194,2,248,22,173,2,23,195,1,86,94,23,194,1,11,250,22,180, +170,2,23,199,2,8,128,8,27,249,22,182,8,80,159,40,47,38,23,196,2, +27,28,23,194,2,248,22,173,2,23,195,1,86,94,23,194,1,11,250,22,183, 8,80,159,42,47,38,23,198,1,248,22,172,2,249,22,79,249,22,79,23,205, 1,23,206,1,28,23,199,2,23,199,1,86,94,23,199,1,9,32,60,88,164, 8,38,39,51,11,2,32,36,223,3,33,75,32,61,88,164,8,38,39,50,11, 2,32,36,223,3,33,74,32,62,88,163,8,36,37,50,11,2,33,222,33,73, 32,63,88,164,8,38,39,50,11,2,32,36,223,3,33,64,28,249,22,189,3, -23,197,2,23,195,4,248,22,89,194,28,249,22,190,8,7,47,249,22,148,7, -23,198,2,23,199,2,249,22,79,250,22,166,7,23,199,2,36,23,200,2,248, -2,62,249,22,166,7,23,199,1,248,22,178,3,23,201,1,250,2,63,23,196, +23,197,2,23,195,4,248,22,89,194,28,249,22,129,9,7,47,249,22,151,7, +23,198,2,23,199,2,249,22,79,250,22,169,7,23,199,2,36,23,200,2,248, +2,62,249,22,169,7,23,199,1,248,22,178,3,23,201,1,250,2,63,23,196, 4,196,248,22,178,3,198,32,65,88,164,8,38,39,52,11,2,32,36,223,3, 33,72,32,66,88,164,8,38,39,51,11,2,32,36,223,3,33,69,32,67,88, 164,8,38,39,50,11,2,32,36,223,3,33,68,28,249,22,189,3,23,197,2, -23,195,4,248,22,89,194,28,249,22,190,8,7,47,249,22,148,7,23,198,2, -23,199,2,249,22,79,250,22,166,7,23,199,2,36,23,200,2,248,2,62,249, -22,166,7,23,199,1,248,22,178,3,23,201,1,250,2,67,23,196,4,196,248, +23,195,4,248,22,89,194,28,249,22,129,9,7,47,249,22,151,7,23,198,2, +23,199,2,249,22,79,250,22,169,7,23,199,2,36,23,200,2,248,2,62,249, +22,169,7,23,199,1,248,22,178,3,23,201,1,250,2,67,23,196,4,196,248, 22,178,3,198,28,249,22,189,3,23,197,2,23,195,4,248,22,89,194,28,249, -22,190,8,7,47,249,22,148,7,23,198,2,23,199,2,249,22,79,250,22,166, -7,23,199,2,36,23,200,2,27,249,22,166,7,23,199,1,248,22,178,3,23, -201,1,19,248,22,147,7,23,195,2,250,2,67,23,196,4,23,197,1,36,2, +22,129,9,7,47,249,22,151,7,23,198,2,23,199,2,249,22,79,250,22,169, +7,23,199,2,36,23,200,2,27,249,22,169,7,23,199,1,248,22,178,3,23, +201,1,19,248,22,150,7,23,195,2,250,2,67,23,196,4,23,197,1,36,2, 27,248,22,178,3,23,197,1,28,249,22,189,3,23,195,2,23,196,4,248,22, -89,195,28,249,22,190,8,7,47,249,22,148,7,23,199,2,23,197,2,249,22, -79,250,22,166,7,23,200,2,36,23,198,2,248,2,62,249,22,166,7,23,200, +89,195,28,249,22,129,9,7,47,249,22,151,7,23,199,2,23,197,2,249,22, +79,250,22,169,7,23,200,2,36,23,198,2,248,2,62,249,22,169,7,23,200, 1,248,22,178,3,23,199,1,250,2,66,23,197,4,197,248,22,178,3,196,32, 70,88,164,8,38,39,50,11,2,32,36,223,3,33,71,28,249,22,189,3,23, -197,2,23,195,4,248,22,89,194,28,249,22,190,8,7,47,249,22,148,7,23, -198,2,23,199,2,249,22,79,250,22,166,7,23,199,2,36,23,200,2,248,2, -62,249,22,166,7,23,199,1,248,22,178,3,23,201,1,250,2,70,23,196,4, +197,2,23,195,4,248,22,89,194,28,249,22,129,9,7,47,249,22,151,7,23, +198,2,23,199,2,249,22,79,250,22,169,7,23,199,2,36,23,200,2,248,2, +62,249,22,169,7,23,199,1,248,22,178,3,23,201,1,250,2,70,23,196,4, 196,248,22,178,3,198,28,249,22,189,3,23,197,2,23,195,4,248,22,89,194, -28,249,22,190,8,7,47,249,22,148,7,23,198,2,23,199,2,249,22,79,250, -22,166,7,23,199,2,36,23,200,2,27,249,22,166,7,23,199,1,248,22,178, -3,23,201,1,19,248,22,147,7,23,195,2,250,2,66,23,196,4,23,197,1, +28,249,22,129,9,7,47,249,22,151,7,23,198,2,23,199,2,249,22,79,250, +22,169,7,23,199,2,36,23,200,2,27,249,22,169,7,23,199,1,248,22,178, +3,23,201,1,19,248,22,150,7,23,195,2,250,2,66,23,196,4,23,197,1, 36,2,27,248,22,178,3,23,197,1,28,249,22,189,3,23,195,2,23,196,4, -248,22,89,195,28,249,22,190,8,7,47,249,22,148,7,23,199,2,23,197,2, -249,22,79,250,22,166,7,23,200,2,36,23,198,2,27,249,22,166,7,23,200, -1,248,22,178,3,23,199,1,19,248,22,147,7,23,195,2,250,2,70,23,196, +248,22,89,195,28,249,22,129,9,7,47,249,22,151,7,23,199,2,23,197,2, +249,22,79,250,22,169,7,23,200,2,36,23,198,2,27,249,22,169,7,23,200, +1,248,22,178,3,23,199,1,19,248,22,150,7,23,195,2,250,2,70,23,196, 4,23,197,1,36,2,27,248,22,178,3,23,195,1,28,249,22,189,3,23,195, -2,23,197,4,248,22,89,196,28,249,22,190,8,7,47,249,22,148,7,23,200, -2,23,197,2,249,22,79,250,22,166,7,23,201,2,36,23,198,2,248,2,62, -249,22,166,7,23,201,1,248,22,178,3,23,199,1,250,2,65,23,198,4,198, -248,22,178,3,196,19,248,22,147,7,23,195,2,28,249,22,189,3,36,23,195, -4,248,22,89,194,28,249,22,190,8,7,47,249,22,148,7,23,198,2,36,249, -22,79,250,22,166,7,23,199,2,36,36,27,249,22,166,7,23,199,1,37,19, -248,22,147,7,23,195,2,250,2,63,23,196,4,23,197,1,36,2,28,249,22, -189,3,37,23,195,4,248,22,89,194,28,249,22,190,8,7,47,249,22,148,7, -23,198,2,37,249,22,79,250,22,166,7,23,199,2,36,37,248,2,62,249,22, -166,7,23,199,1,38,250,2,65,23,196,4,196,38,2,28,249,22,189,3,23, -197,2,23,195,4,248,22,89,194,28,249,22,190,8,7,47,249,22,148,7,23, -198,2,23,199,2,249,22,79,250,22,166,7,23,199,2,36,23,200,2,248,2, -62,249,22,166,7,23,199,1,248,22,178,3,23,201,1,250,2,61,23,196,4, +2,23,197,4,248,22,89,196,28,249,22,129,9,7,47,249,22,151,7,23,200, +2,23,197,2,249,22,79,250,22,169,7,23,201,2,36,23,198,2,248,2,62, +249,22,169,7,23,201,1,248,22,178,3,23,199,1,250,2,65,23,198,4,198, +248,22,178,3,196,19,248,22,150,7,23,195,2,28,249,22,189,3,36,23,195, +4,248,22,89,194,28,249,22,129,9,7,47,249,22,151,7,23,198,2,36,249, +22,79,250,22,169,7,23,199,2,36,36,27,249,22,169,7,23,199,1,37,19, +248,22,150,7,23,195,2,250,2,63,23,196,4,23,197,1,36,2,28,249,22, +189,3,37,23,195,4,248,22,89,194,28,249,22,129,9,7,47,249,22,151,7, +23,198,2,37,249,22,79,250,22,169,7,23,199,2,36,37,248,2,62,249,22, +169,7,23,199,1,38,250,2,65,23,196,4,196,38,2,28,249,22,189,3,23, +197,2,23,195,4,248,22,89,194,28,249,22,129,9,7,47,249,22,151,7,23, +198,2,23,199,2,249,22,79,250,22,169,7,23,199,2,36,23,200,2,248,2, +62,249,22,169,7,23,199,1,248,22,178,3,23,201,1,250,2,61,23,196,4, 196,248,22,178,3,198,28,249,22,189,3,23,197,2,23,195,4,248,22,89,194, -28,249,22,190,8,7,47,249,22,148,7,23,198,2,23,199,2,249,22,79,250, -22,166,7,23,199,2,36,23,200,2,27,249,22,166,7,23,199,1,248,22,178, -3,23,201,1,19,248,22,147,7,23,195,2,250,2,61,23,196,4,23,197,1, +28,249,22,129,9,7,47,249,22,151,7,23,198,2,23,199,2,249,22,79,250, +22,169,7,23,199,2,36,23,200,2,27,249,22,169,7,23,199,1,248,22,178, +3,23,201,1,19,248,22,150,7,23,195,2,250,2,61,23,196,4,23,197,1, 36,2,27,248,22,178,3,23,197,1,28,249,22,189,3,23,195,2,23,196,4, -248,22,89,195,28,249,22,190,8,7,47,249,22,148,7,23,199,2,23,197,2, -249,22,79,250,22,166,7,23,200,2,36,23,198,2,248,2,62,249,22,166,7, +248,22,89,195,28,249,22,129,9,7,47,249,22,151,7,23,199,2,23,197,2, +249,22,79,250,22,169,7,23,200,2,36,23,198,2,248,2,62,249,22,169,7, 23,200,1,248,22,178,3,23,199,1,250,2,60,23,197,4,197,248,22,178,3, 196,32,76,88,163,36,37,55,11,2,33,222,33,77,28,248,22,87,248,22,81, -23,195,2,249,22,7,9,248,22,132,18,23,196,1,90,159,38,11,89,161,38, -36,11,27,248,22,133,18,23,197,2,28,248,22,87,248,22,81,23,195,2,249, -22,7,9,248,22,132,18,195,90,159,38,11,89,161,38,36,11,27,248,22,133, -18,196,28,248,22,87,248,22,81,23,195,2,249,22,7,9,248,22,132,18,195, -90,159,38,11,89,161,38,36,11,248,2,76,248,22,133,18,196,249,22,7,249, -22,79,248,22,132,18,199,196,195,249,22,7,249,22,79,248,22,132,18,199,196, -195,249,22,7,249,22,79,248,22,132,18,23,200,1,23,197,1,23,196,1,27, -19,248,22,147,7,23,196,2,250,2,60,23,196,4,23,198,1,36,2,28,23, -195,1,192,28,248,22,87,248,22,81,23,195,2,249,22,7,9,248,22,132,18, -23,196,1,27,248,22,133,18,23,195,2,90,159,38,11,89,161,38,36,11,28, -248,22,87,248,22,81,23,197,2,249,22,7,9,248,22,132,18,23,198,1,27, -248,22,133,18,23,197,2,90,159,38,11,89,161,38,36,11,28,248,22,87,248, -22,81,23,197,2,249,22,7,9,248,22,132,18,197,90,159,38,11,89,161,38, -36,11,248,2,76,248,22,133,18,198,249,22,7,249,22,79,248,22,132,18,201, -196,195,249,22,7,249,22,79,248,22,132,18,23,203,1,196,195,249,22,7,249, -22,79,248,22,132,18,23,201,1,23,197,1,23,196,1,248,22,128,12,252,22, -151,10,248,22,160,4,23,200,2,248,22,156,4,23,200,2,248,22,157,4,23, +23,195,2,249,22,7,9,248,22,135,18,23,196,1,90,159,38,11,89,161,38, +36,11,27,248,22,136,18,23,197,2,28,248,22,87,248,22,81,23,195,2,249, +22,7,9,248,22,135,18,195,90,159,38,11,89,161,38,36,11,27,248,22,136, +18,196,28,248,22,87,248,22,81,23,195,2,249,22,7,9,248,22,135,18,195, +90,159,38,11,89,161,38,36,11,248,2,76,248,22,136,18,196,249,22,7,249, +22,79,248,22,135,18,199,196,195,249,22,7,249,22,79,248,22,135,18,199,196, +195,249,22,7,249,22,79,248,22,135,18,23,200,1,23,197,1,23,196,1,27, +19,248,22,150,7,23,196,2,250,2,60,23,196,4,23,198,1,36,2,28,23, +195,1,192,28,248,22,87,248,22,81,23,195,2,249,22,7,9,248,22,135,18, +23,196,1,27,248,22,136,18,23,195,2,90,159,38,11,89,161,38,36,11,28, +248,22,87,248,22,81,23,197,2,249,22,7,9,248,22,135,18,23,198,1,27, +248,22,136,18,23,197,2,90,159,38,11,89,161,38,36,11,28,248,22,87,248, +22,81,23,197,2,249,22,7,9,248,22,135,18,197,90,159,38,11,89,161,38, +36,11,248,2,76,248,22,136,18,198,249,22,7,249,22,79,248,22,135,18,201, +196,195,249,22,7,249,22,79,248,22,135,18,23,203,1,196,195,249,22,7,249, +22,79,248,22,135,18,23,201,1,23,197,1,23,196,1,248,22,131,12,252,22, +154,10,248,22,160,4,23,200,2,248,22,156,4,23,200,2,248,22,157,4,23, 200,2,248,22,158,4,23,200,2,248,22,159,4,23,200,1,28,24,194,2,12, 20,13,159,80,159,36,58,37,80,158,36,56,89,161,37,37,10,249,22,189,4, 21,94,2,34,6,19,19,112,108,97,110,101,116,47,114,101,115,111,108,118,101, 114,46,114,107,116,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101,45, 110,97,109,101,45,114,101,115,111,108,118,101,114,12,27,28,23,195,2,28,249, -22,159,9,23,197,2,80,158,39,52,86,94,23,195,1,80,158,37,53,27,248, -22,148,5,23,197,2,27,28,248,22,77,23,195,2,248,22,132,18,23,195,1, -23,194,1,28,248,22,150,15,23,194,2,90,159,39,11,89,161,39,36,11,248, -22,171,15,23,197,1,86,95,20,18,159,11,80,158,42,52,199,20,18,159,11, +22,162,9,23,197,2,80,158,39,52,86,94,23,195,1,80,158,37,53,27,248, +22,148,5,23,197,2,27,28,248,22,77,23,195,2,248,22,135,18,23,195,1, +23,194,1,28,248,22,153,15,23,194,2,90,159,39,11,89,161,39,36,11,248, +22,174,15,23,197,1,86,95,20,18,159,11,80,158,42,52,199,20,18,159,11, 80,158,42,53,192,192,11,11,28,23,193,2,192,86,94,23,193,1,27,247,22, -172,5,28,23,193,2,192,86,94,23,193,1,247,22,128,16,90,159,39,11,89, -161,39,36,11,248,22,171,15,23,198,2,86,95,23,195,1,23,193,1,28,249, -22,141,16,0,11,35,114,120,34,91,46,93,115,115,36,34,248,22,155,15,23, +172,5,28,23,193,2,192,86,94,23,193,1,247,22,131,16,90,159,39,11,89, +161,39,36,11,248,22,174,15,23,198,2,86,95,23,195,1,23,193,1,28,249, +22,144,16,0,11,35,114,120,34,91,46,93,115,115,36,34,248,22,158,15,23, 197,1,249,80,159,41,59,39,23,199,1,2,28,196,249,80,159,38,54,39,195, 10,249,22,14,23,196,1,80,159,38,51,38,86,96,28,248,22,146,5,23,196, -2,12,250,22,168,11,2,23,6,21,21,114,101,115,111,108,118,101,100,45,109, +2,12,250,22,171,11,2,23,6,21,21,114,101,115,111,108,118,101,100,45,109, 111,100,117,108,101,45,112,97,116,104,63,23,198,2,28,28,23,196,2,248,22, -187,13,23,197,2,10,12,250,22,168,11,2,23,6,20,20,40,111,114,47,99, +190,13,23,197,2,10,12,250,22,171,11,2,23,6,20,20,40,111,114,47,99, 32,35,102,32,110,97,109,101,115,112,97,99,101,63,41,23,199,2,28,24,193, 2,248,24,194,1,23,196,2,86,94,23,193,1,12,27,250,22,157,2,80,159, -41,41,38,248,22,166,16,247,22,186,13,11,27,28,23,194,2,23,194,1,86, +41,41,38,248,22,169,16,247,22,189,13,11,27,28,23,194,2,23,194,1,86, 94,23,194,1,27,249,22,79,247,22,137,2,247,22,137,2,86,94,250,22,155, -2,80,159,43,41,38,248,22,166,16,247,22,186,13,195,192,86,94,250,22,155, +2,80,159,43,41,38,248,22,169,16,247,22,189,13,195,192,86,94,250,22,155, 2,248,22,80,23,197,2,23,200,2,68,100,101,99,108,97,114,101,100,28,23, 198,2,27,28,248,22,77,248,22,148,5,23,200,2,248,22,147,5,248,22,80, 248,22,148,5,23,201,1,23,198,1,27,250,22,157,2,80,159,44,41,38,248, -22,166,16,23,204,1,11,28,23,193,2,27,250,22,157,2,248,22,81,23,198, -1,23,198,2,11,28,23,193,2,250,22,155,2,248,22,133,18,23,200,1,23, +22,169,16,23,204,1,11,28,23,193,2,27,250,22,157,2,248,22,81,23,198, +1,23,198,2,11,28,23,193,2,250,22,155,2,248,22,136,18,23,200,1,23, 198,1,23,196,1,12,12,12,251,24,197,1,23,198,1,23,199,1,23,200,1, 10,32,87,88,163,36,38,47,11,76,102,108,97,116,116,101,110,45,115,117,98, 45,112,97,116,104,222,33,90,32,88,88,163,36,40,54,11,2,33,222,33,89, 28,248,22,87,23,197,2,28,248,22,87,195,192,249,22,79,194,248,22,94,197, -28,249,22,161,9,248,22,80,23,199,2,2,37,28,248,22,87,23,196,2,86, -95,23,196,1,23,195,1,250,22,164,11,2,23,6,37,37,116,111,111,32,109, +28,249,22,164,9,248,22,80,23,199,2,2,37,28,248,22,87,23,196,2,86, +95,23,196,1,23,195,1,250,22,167,11,2,23,6,37,37,116,111,111,32,109, 97,110,121,32,34,46,46,34,115,32,105,110,32,115,117,98,109,111,100,117,108, -101,32,112,97,116,104,58,32,126,46,115,250,22,90,2,36,28,249,22,161,9, -23,201,2,2,38,23,199,1,28,248,22,150,15,23,200,2,23,199,1,249,22, +101,32,112,97,116,104,58,32,126,46,115,250,22,90,2,36,28,249,22,164,9, +23,201,2,2,38,23,199,1,28,248,22,153,15,23,200,2,23,199,1,249,22, 89,28,248,22,64,23,202,2,2,4,2,39,23,201,1,23,200,1,251,2,88, -196,197,248,22,81,199,248,22,133,18,200,251,2,88,196,197,249,22,79,248,22, -132,18,202,200,248,22,133,18,200,251,2,88,196,197,9,197,27,250,22,167,7, -27,28,23,199,2,28,247,22,181,11,248,80,159,44,55,39,23,200,2,11,11, +196,197,248,22,81,199,248,22,136,18,200,251,2,88,196,197,249,22,79,248,22, +135,18,202,200,248,22,136,18,200,251,2,88,196,197,9,197,27,250,22,170,7, +27,28,23,199,2,28,247,22,184,11,248,80,159,44,55,39,23,200,2,11,11, 28,192,192,6,29,29,115,116,97,110,100,97,114,100,45,109,111,100,117,108,101, 45,110,97,109,101,45,114,101,115,111,108,118,101,114,6,2,2,58,32,250,22, -152,16,0,7,35,114,120,34,92,110,34,23,203,1,249,22,128,8,6,23,23, +155,16,0,7,35,114,120,34,92,110,34,23,203,1,249,22,131,8,6,23,23, 10,32,32,102,111,114,32,109,111,100,117,108,101,32,112,97,116,104,58,32,126, -115,10,23,202,2,248,22,158,13,28,23,196,2,251,22,166,12,23,198,1,247, -22,29,248,22,89,23,201,1,23,199,1,86,94,23,196,1,250,22,129,13,23, -197,1,247,22,29,23,198,1,28,249,22,150,7,194,2,38,2,29,28,249,22, -150,7,194,2,37,62,117,112,192,32,93,88,163,8,36,37,50,11,67,115,115, -45,62,114,107,116,222,33,94,19,248,22,147,7,194,28,249,22,129,4,23,195, -4,39,28,249,22,150,7,6,3,3,46,115,115,249,22,166,7,197,249,22,181, -3,23,199,4,39,249,22,167,7,250,22,166,7,198,36,249,22,181,3,23,200, +115,10,23,202,2,248,22,161,13,28,23,196,2,251,22,169,12,23,198,1,247, +22,29,248,22,89,23,201,1,23,199,1,86,94,23,196,1,250,22,132,13,23, +197,1,247,22,29,23,198,1,28,249,22,153,7,194,2,38,2,29,28,249,22, +153,7,194,2,37,62,117,112,192,32,93,88,163,8,36,37,50,11,67,115,115, +45,62,114,107,116,222,33,94,19,248,22,150,7,194,28,249,22,129,4,23,195, +4,39,28,249,22,153,7,6,3,3,46,115,115,249,22,169,7,197,249,22,181, +3,23,199,4,39,249,22,170,7,250,22,169,7,198,36,249,22,181,3,23,200, 4,39,2,42,193,193,2,0,8,35,114,120,34,91,46,93,34,32,96,88,163, 8,36,37,47,11,2,33,222,33,97,28,248,22,87,23,194,2,9,250,22,90, -6,4,4,10,32,32,32,248,22,154,15,248,22,102,23,198,2,248,2,96,248, -22,81,23,198,1,28,249,22,161,9,248,22,81,23,200,2,23,197,1,28,249, -22,159,9,248,22,132,18,23,200,1,23,196,1,251,22,164,11,2,23,6,41, +6,4,4,10,32,32,32,248,22,157,15,248,22,102,23,198,2,248,2,96,248, +22,81,23,198,1,28,249,22,164,9,248,22,81,23,200,2,23,197,1,28,249, +22,162,9,248,22,135,18,23,200,1,23,196,1,251,22,167,11,2,23,6,41, 41,99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,10,32,32,97, 116,32,112,97,116,104,58,32,126,97,10,32,32,112,97,116,104,115,58,126,97, -23,200,1,249,22,1,22,167,7,248,2,96,248,22,94,23,201,1,12,12,247, +23,200,1,249,22,1,22,170,7,248,2,96,248,22,94,23,201,1,12,12,247, 23,193,1,250,22,154,4,11,196,195,20,13,159,80,159,45,50,38,249,22,79, -249,22,79,248,22,166,16,247,22,186,13,23,201,1,23,195,1,20,13,159,80, +249,22,79,248,22,169,16,247,22,189,13,23,201,1,23,195,1,20,13,159,80, 159,45,38,37,252,80,159,50,39,37,249,22,33,11,80,159,52,38,37,22,186, 4,23,200,2,22,188,4,248,28,23,207,2,20,20,94,88,163,8,36,37,46, 11,9,223,14,33,100,23,207,1,86,94,23,207,1,22,7,28,248,22,64,23, -206,2,23,205,1,28,28,248,22,77,23,206,2,249,22,159,9,248,22,132,18, +206,2,23,205,1,28,28,248,22,77,23,206,2,249,22,162,9,248,22,135,18, 23,208,2,2,34,11,23,205,1,86,94,23,205,1,28,248,22,146,5,23,202, 2,27,248,22,148,5,23,203,2,28,248,22,64,193,249,22,89,2,4,194,192, -23,201,2,249,247,22,171,5,23,200,1,27,248,22,67,248,22,154,15,23,201, +23,201,2,249,247,22,171,5,23,200,1,27,248,22,67,248,22,157,15,23,201, 1,28,23,203,2,28,250,22,157,2,248,22,80,23,201,1,23,201,1,11,249, 22,79,11,204,249,22,79,194,204,192,86,96,28,248,22,156,5,23,196,2,12, -28,248,22,152,4,23,198,2,250,22,166,11,11,6,15,15,98,97,100,32,109, -111,100,117,108,101,32,112,97,116,104,23,200,2,250,22,168,11,2,23,2,35, -23,198,2,28,28,23,196,2,248,22,146,5,23,197,2,10,12,250,22,168,11, +28,248,22,152,4,23,198,2,250,22,169,11,11,6,15,15,98,97,100,32,109, +111,100,117,108,101,32,112,97,116,104,23,200,2,250,22,171,11,2,23,2,35, +23,198,2,28,28,23,196,2,248,22,146,5,23,197,2,10,12,250,22,171,11, 2,23,6,31,31,40,111,114,47,99,32,35,102,32,114,101,115,111,108,118,101, 100,45,109,111,100,117,108,101,45,112,97,116,104,63,41,23,199,2,28,28,23, -197,2,248,22,152,4,23,198,2,10,12,250,22,168,11,2,23,6,17,17,40, +197,2,248,22,152,4,23,198,2,10,12,250,22,171,11,2,23,6,17,17,40, 111,114,47,99,32,35,102,32,115,121,110,116,97,120,63,41,23,200,2,28,28, -248,22,77,23,196,2,249,22,159,9,248,22,132,18,23,198,2,2,4,11,86, +248,22,77,23,196,2,249,22,162,9,248,22,135,18,23,198,2,2,4,11,86, 97,23,198,1,23,197,1,23,196,1,23,193,1,248,22,147,5,248,22,101,23, -197,1,28,28,248,22,77,23,196,2,28,249,22,159,9,248,22,132,18,23,198, -2,2,36,28,248,22,77,248,22,101,23,197,2,249,22,159,9,248,22,105,23, +197,1,28,28,248,22,77,23,196,2,28,249,22,162,9,248,22,135,18,23,198, +2,2,36,28,248,22,77,248,22,101,23,197,2,249,22,162,9,248,22,105,23, 198,2,2,4,11,11,11,86,97,23,198,1,23,197,1,23,196,1,23,193,1, 248,22,147,5,249,2,87,248,22,118,23,199,2,248,22,103,23,199,1,28,28, -248,22,77,23,196,2,28,249,22,159,9,248,22,132,18,23,198,2,2,36,28, -28,249,22,161,9,248,22,101,23,198,2,2,38,10,249,22,161,9,248,22,101, +248,22,77,23,196,2,28,249,22,162,9,248,22,135,18,23,198,2,2,36,28, +28,249,22,164,9,248,22,101,23,198,2,2,38,10,249,22,164,9,248,22,101, 23,198,2,2,37,28,23,196,2,27,248,22,148,5,23,198,2,28,248,22,64, -193,10,28,248,22,77,193,248,22,64,248,22,132,18,194,11,11,11,11,11,86, +193,10,28,248,22,77,193,248,22,64,248,22,135,18,194,11,11,11,11,11,86, 96,23,198,1,23,197,1,23,193,1,27,248,22,148,5,23,198,1,248,22,147, -5,249,2,87,28,248,22,77,23,197,2,248,22,132,18,23,197,2,23,196,2, -27,28,249,22,161,9,248,22,101,23,203,2,2,37,248,22,133,18,200,248,22, -103,200,28,248,22,77,23,198,2,249,22,93,248,22,133,18,199,194,192,28,28, -248,22,77,23,196,2,249,22,159,9,248,22,132,18,23,198,2,2,40,11,86, +5,249,2,87,28,248,22,77,23,197,2,248,22,135,18,23,197,2,23,196,2, +27,28,249,22,164,9,248,22,101,23,203,2,2,37,248,22,136,18,200,248,22, +103,200,28,248,22,77,23,198,2,249,22,93,248,22,136,18,199,194,192,28,28, +248,22,77,23,196,2,249,22,162,9,248,22,135,18,23,198,2,2,40,11,86, 94,248,80,159,38,8,29,39,23,194,2,253,24,199,1,23,201,1,23,202,1, 23,203,1,23,204,1,11,80,158,43,56,28,28,248,22,77,23,196,2,28,249, -22,159,9,248,22,132,18,23,198,2,2,36,28,248,22,77,248,22,101,23,197, -2,249,22,159,9,248,22,105,23,198,2,2,40,11,11,11,86,94,248,80,159, +22,162,9,248,22,135,18,23,198,2,2,36,28,248,22,77,248,22,101,23,197, +2,249,22,162,9,248,22,105,23,198,2,2,40,11,11,11,86,94,248,80,159, 38,8,29,39,23,194,2,253,24,199,1,248,22,101,23,202,2,23,202,1,23, 203,1,23,204,1,248,22,103,23,202,1,80,158,43,56,86,94,23,193,1,27, 88,163,8,36,37,54,8,240,0,0,8,0,79,115,104,111,119,45,99,111,108, 108,101,99,116,105,111,110,45,101,114,114,225,2,5,3,33,91,27,28,248,22, -77,23,198,2,28,249,22,159,9,2,36,248,22,132,18,23,200,2,27,248,22, -101,23,199,2,28,28,249,22,161,9,23,195,2,2,38,10,249,22,161,9,23, +77,23,198,2,28,249,22,162,9,2,36,248,22,135,18,23,200,2,27,248,22, +101,23,199,2,28,28,249,22,164,9,23,195,2,2,38,10,249,22,164,9,23, 195,2,2,37,86,94,23,193,1,28,23,199,2,27,248,22,148,5,23,201,2, -28,248,22,77,193,248,22,132,18,193,192,250,22,164,11,2,23,6,45,45,110, +28,248,22,77,193,248,22,135,18,193,192,250,22,167,11,2,23,6,45,45,110, 111,32,98,97,115,101,32,112,97,116,104,32,102,111,114,32,114,101,108,97,116, 105,118,101,32,115,117,98,109,111,100,117,108,101,32,112,97,116,104,58,32,126, 46,115,23,201,2,192,23,197,2,23,197,2,27,28,248,22,77,23,199,2,28, -249,22,159,9,2,36,248,22,132,18,23,201,2,27,28,28,28,249,22,161,9, -248,22,101,23,202,2,2,38,10,249,22,161,9,248,22,101,23,202,2,2,37, -23,200,2,11,27,248,22,148,5,23,202,2,27,28,249,22,161,9,248,22,101, -23,204,2,2,37,248,22,133,18,23,202,1,248,22,103,23,202,1,28,248,22, -77,23,195,2,249,2,87,248,22,132,18,23,197,2,249,22,93,248,22,133,18, +249,22,162,9,2,36,248,22,135,18,23,201,2,27,28,28,28,249,22,164,9, +248,22,101,23,202,2,2,38,10,249,22,164,9,248,22,101,23,202,2,2,37, +23,200,2,11,27,248,22,148,5,23,202,2,27,28,249,22,164,9,248,22,101, +23,204,2,2,37,248,22,136,18,23,202,1,248,22,103,23,202,1,28,248,22, +77,23,195,2,249,2,87,248,22,135,18,23,197,2,249,22,93,248,22,136,18, 23,199,1,23,197,1,249,2,87,23,196,1,23,195,1,249,2,87,2,38,28, -249,22,161,9,248,22,101,23,204,2,2,37,248,22,133,18,23,202,1,248,22, -103,23,202,1,28,248,22,77,193,248,22,133,18,193,11,11,11,27,28,248,22, -64,23,196,2,27,248,80,159,43,48,39,249,22,79,23,199,2,247,22,130,16, +249,22,164,9,248,22,101,23,204,2,2,37,248,22,136,18,23,202,1,248,22, +103,23,202,1,28,248,22,77,193,248,22,136,18,193,11,11,11,27,28,248,22, +64,23,196,2,27,248,80,159,43,48,39,249,22,79,23,199,2,247,22,133,16, 28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80, 159,46,54,39,248,22,70,23,201,2,11,27,28,248,22,87,23,195,2,2,41, -249,22,167,7,23,197,2,2,42,251,80,159,49,8,24,39,23,204,1,28,248, +249,22,170,7,23,197,2,2,42,251,80,159,49,8,24,39,23,204,1,28,248, 22,87,23,199,2,23,199,1,86,94,23,199,1,248,22,80,23,199,2,28,248, -22,87,23,199,2,86,94,23,198,1,9,248,22,133,18,23,199,1,23,197,1, -28,248,22,144,7,23,196,2,86,94,23,196,1,27,248,80,159,43,8,30,39, +22,87,23,199,2,86,94,23,198,1,9,248,22,136,18,23,199,1,23,197,1, +28,248,22,147,7,23,196,2,86,94,23,196,1,27,248,80,159,43,8,30,39, 23,202,2,27,248,80,159,44,48,39,249,22,79,23,200,2,23,197,2,28,23, 193,2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,159,47, -54,39,23,201,2,11,250,22,1,22,168,15,23,199,1,249,22,93,249,22,2, +54,39,23,201,2,11,250,22,1,22,171,15,23,199,1,249,22,93,249,22,2, 32,0,88,163,8,36,37,44,11,9,222,33,92,23,200,1,248,22,89,248,2, -93,23,201,1,28,248,22,150,15,23,196,2,86,94,23,196,1,248,80,159,42, -8,31,39,248,22,178,15,28,248,22,175,15,23,198,2,23,197,2,249,22,176, -15,23,199,2,248,80,159,46,8,30,39,23,205,2,28,249,22,159,9,248,22, +93,23,201,1,28,248,22,153,15,23,196,2,86,94,23,196,1,248,80,159,42, +8,31,39,248,22,181,15,28,248,22,178,15,23,198,2,23,197,2,249,22,179, +15,23,199,2,248,80,159,46,8,30,39,23,205,2,28,249,22,162,9,248,22, 80,23,198,2,2,34,27,248,80,159,43,48,39,249,22,79,23,199,2,247,22, -130,16,28,23,193,2,192,86,94,23,193,1,90,159,39,11,89,161,38,36,11, +133,16,28,23,193,2,192,86,94,23,193,1,90,159,39,11,89,161,38,36,11, 249,80,159,47,54,39,248,22,101,23,202,2,11,89,161,37,38,11,28,248,22, -87,248,22,103,23,201,2,28,248,22,87,23,194,2,249,22,145,16,2,95,23, +87,248,22,103,23,201,2,28,248,22,87,23,194,2,249,22,148,16,2,95,23, 196,2,11,10,27,28,23,196,2,248,2,93,23,196,2,28,248,22,87,23,195, -2,2,41,28,249,22,145,16,2,95,23,197,2,248,2,93,23,196,2,249,22, -167,7,23,197,2,2,42,27,28,23,197,1,86,94,23,196,1,249,22,93,28, +2,2,41,28,249,22,148,16,2,95,23,197,2,248,2,93,23,196,2,249,22, +170,7,23,197,2,2,42,27,28,23,197,1,86,94,23,196,1,249,22,93,28, 248,22,87,248,22,103,23,205,2,21,93,6,5,5,109,122,108,105,98,249,22, 1,22,93,249,22,2,80,159,53,8,32,39,248,22,103,23,208,2,23,197,1, 28,248,22,87,23,196,2,86,94,23,195,1,248,22,89,23,197,1,86,94,23, 196,1,23,195,1,251,80,159,51,8,24,39,23,206,1,248,22,80,23,198,2, -248,22,133,18,23,198,1,23,198,1,28,249,22,159,9,248,22,132,18,23,198, -2,2,39,248,80,159,42,8,31,39,248,22,178,15,249,22,176,15,248,22,180, +248,22,136,18,23,198,1,23,198,1,28,249,22,162,9,248,22,135,18,23,198, +2,2,39,248,80,159,42,8,31,39,248,22,181,15,249,22,179,15,248,22,183, 15,248,22,101,23,201,2,248,80,159,46,8,30,39,23,205,2,12,86,94,28, -28,248,22,150,15,23,194,2,10,248,22,174,8,23,194,2,12,28,23,201,2, -250,22,166,11,67,114,101,113,117,105,114,101,249,22,128,8,6,17,17,98,97, +28,248,22,153,15,23,194,2,10,248,22,177,8,23,194,2,12,28,23,201,2, +250,22,169,11,67,114,101,113,117,105,114,101,249,22,131,8,6,17,17,98,97, 100,32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22, -80,23,199,2,6,0,0,23,204,2,250,22,168,11,2,23,2,35,23,198,2, -27,28,248,22,174,8,23,195,2,249,22,179,8,23,196,2,36,249,22,178,15, -248,22,179,15,23,197,2,11,27,28,248,22,174,8,23,196,2,249,22,179,8, +80,23,199,2,6,0,0,23,204,2,250,22,171,11,2,23,2,35,23,198,2, +27,28,248,22,177,8,23,195,2,249,22,182,8,23,196,2,36,249,22,181,15, +248,22,182,15,23,197,2,11,27,28,248,22,177,8,23,196,2,249,22,182,8, 23,197,2,37,248,80,159,44,8,25,39,23,195,2,90,159,39,11,89,161,39, -36,11,28,248,22,174,8,23,199,2,250,22,7,2,43,249,22,179,8,23,203, -2,38,2,43,248,22,171,15,23,198,2,86,95,23,195,1,23,193,1,27,28, -248,22,174,8,23,200,2,249,22,179,8,23,201,2,39,249,80,159,49,59,39, -23,197,2,5,0,27,28,248,22,174,8,23,201,2,249,22,179,8,23,202,2, -40,248,22,147,5,23,200,2,27,250,22,157,2,80,159,52,41,38,248,22,166, -16,247,22,186,13,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249, +36,11,28,248,22,177,8,23,199,2,250,22,7,2,43,249,22,182,8,23,203, +2,38,2,43,248,22,174,15,23,198,2,86,95,23,195,1,23,193,1,27,28, +248,22,177,8,23,200,2,249,22,182,8,23,201,2,39,249,80,159,49,59,39, +23,197,2,5,0,27,28,248,22,177,8,23,201,2,249,22,182,8,23,202,2, +40,248,22,147,5,23,200,2,27,250,22,157,2,80,159,52,41,38,248,22,169, +16,247,22,189,13,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249, 22,79,247,22,137,2,247,22,137,2,86,94,250,22,155,2,80,159,54,41,38, -248,22,166,16,247,22,186,13,195,192,27,28,23,204,2,248,22,147,5,249,22, +248,22,169,16,247,22,189,13,195,192,27,28,23,204,2,248,22,147,5,249,22, 79,248,22,148,5,23,200,2,23,207,2,23,196,2,86,95,28,23,212,1,27, 250,22,157,2,248,22,80,23,199,2,196,11,28,23,193,1,12,27,27,28,248, 22,17,80,159,55,51,38,80,159,54,51,38,247,22,19,251,22,33,11,80,159, -58,50,38,9,23,197,1,27,248,22,166,16,247,22,186,13,86,94,249,22,3, +58,50,38,9,23,197,1,27,248,22,169,16,247,22,189,13,86,94,249,22,3, 20,20,94,88,163,8,36,37,54,11,9,226,14,13,2,3,33,98,23,195,1, 23,196,2,248,28,248,22,17,80,159,56,51,38,32,0,88,163,36,37,42,11, 9,222,33,99,80,159,55,8,33,39,20,20,97,88,163,36,36,8,24,8,240, 12,64,0,0,9,232,19,22,15,16,13,12,8,7,5,2,33,101,23,195,1, -23,198,1,23,208,1,23,215,1,12,28,28,248,22,174,8,23,204,1,11,28, -248,22,144,7,23,206,2,10,28,248,22,64,23,206,2,10,28,248,22,77,23, -206,2,249,22,159,9,248,22,132,18,23,208,2,2,34,11,249,80,159,53,49, -39,28,248,22,144,7,23,208,2,249,22,79,23,209,1,248,80,159,56,8,30, -39,23,215,1,86,94,23,212,1,249,22,79,23,209,1,247,22,130,16,252,22, -176,8,23,209,1,23,208,1,23,206,1,23,204,1,23,203,1,12,192,86,96, +23,198,1,23,208,1,23,215,1,12,28,28,248,22,177,8,23,204,1,11,28, +248,22,147,7,23,206,2,10,28,248,22,64,23,206,2,10,28,248,22,77,23, +206,2,249,22,162,9,248,22,135,18,23,208,2,2,34,11,249,80,159,53,49, +39,28,248,22,147,7,23,208,2,249,22,79,23,209,1,248,80,159,56,8,30, +39,23,215,1,86,94,23,212,1,249,22,79,23,209,1,247,22,133,16,252,22, +179,8,23,209,1,23,208,1,23,206,1,23,204,1,23,203,1,12,192,86,96, 20,18,159,11,80,158,36,56,248,80,159,37,8,28,37,249,22,33,11,80,159, 39,58,37,248,22,185,4,80,159,37,57,38,248,22,171,5,80,159,37,37,39, -248,22,183,14,80,159,37,45,39,20,18,159,11,80,158,36,56,248,80,159,37, +248,22,186,14,80,159,37,45,39,20,18,159,11,80,158,36,56,248,80,159,37, 8,28,37,249,22,33,11,80,159,39,58,37,20,18,159,11,80,158,36,56,248, 80,159,37,8,28,37,249,22,33,11,80,159,39,58,37,159,36,20,114,159,36, 16,1,11,16,0,20,26,145,9,2,1,2,1,29,11,11,11,11,9,9,11, @@ -1397,13 +1397,13 @@ 2,2,21,2,14,2,15,2,10,2,20,2,23,52,11,11,11,16,3,2,25, 2,22,2,26,16,3,11,11,11,16,3,2,25,2,22,2,26,39,39,37,12, 11,11,16,0,16,0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36, -36,16,24,20,15,16,2,248,22,171,8,69,115,111,45,115,117,102,102,105,120, +36,16,24,20,15,16,2,248,22,174,8,69,115,111,45,115,117,102,102,105,120, 80,159,36,36,37,20,15,16,2,88,163,36,38,8,43,8,189,3,2,3,223, 0,33,56,80,159,36,37,37,20,15,16,2,32,0,88,163,8,36,41,52,11, 2,10,222,33,57,80,159,36,44,37,20,15,16,2,20,27,158,32,0,88,163, 8,36,37,42,11,2,11,222,192,32,0,88,163,8,36,37,42,11,2,11,222, 192,80,159,36,45,37,20,15,16,2,247,22,140,2,80,159,36,41,37,20,15, -16,2,8,128,8,80,159,36,46,37,20,15,16,2,249,22,175,8,8,128,8, +16,2,8,128,8,80,159,36,46,37,20,15,16,2,249,22,178,8,8,128,8, 11,80,159,36,47,37,20,15,16,2,88,163,8,36,37,50,8,128,32,2,14, 223,0,33,58,80,159,36,48,37,20,15,16,2,88,163,8,36,38,55,8,128, 32,2,15,223,0,33,59,80,159,36,49,37,20,15,16,2,247,22,75,80,159, @@ -1433,7 +1433,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 10052); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,51,84,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,52,84,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0, 16,0,29,0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,99, 1,0,0,69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94, diff --git a/racket/src/racket/src/mzmark_port.inc b/racket/src/racket/src/mzmark_port.inc index 44148216e4..76c8ff59f4 100644 --- a/racket/src/racket/src/mzmark_port.inc +++ b/racket/src/racket/src/mzmark_port.inc @@ -201,3 +201,28 @@ static int mark_read_write_evt_FIXUP(void *p, struct NewGC *gc) { #define mark_read_write_evt_IS_CONST_SIZE 1 +static int mark_filesystem_change_evt_SIZE(void *p, struct NewGC *gc) { + return + gcBYTES_TO_WORDS(sizeof(Scheme_Filesystem_Change_Evt)); +} + +static int mark_filesystem_change_evt_MARK(void *p, struct NewGC *gc) { + Scheme_Filesystem_Change_Evt *fc = (Scheme_Filesystem_Change_Evt *)p; + gcMARK2(fc->sema, gc); + gcMARK2(fc->mref, gc); + return + gcBYTES_TO_WORDS(sizeof(Scheme_Filesystem_Change_Evt)); +} + +static int mark_filesystem_change_evt_FIXUP(void *p, struct NewGC *gc) { + Scheme_Filesystem_Change_Evt *fc = (Scheme_Filesystem_Change_Evt *)p; + gcFIXUP2(fc->sema, gc); + gcFIXUP2(fc->mref, gc); + return + gcBYTES_TO_WORDS(sizeof(Scheme_Filesystem_Change_Evt)); +} + +#define mark_filesystem_change_evt_IS_ATOMIC 0 +#define mark_filesystem_change_evt_IS_CONST_SIZE 1 + + diff --git a/racket/src/racket/src/mzmarksrc.c b/racket/src/racket/src/mzmarksrc.c index 09e2a4d76d..3c0740912e 100644 --- a/racket/src/racket/src/mzmarksrc.c +++ b/racket/src/racket/src/mzmarksrc.c @@ -1738,6 +1738,15 @@ mark_read_write_evt { gcBYTES_TO_WORDS(sizeof(Scheme_Read_Write_Evt)); } +mark_filesystem_change_evt { + mark: + Scheme_Filesystem_Change_Evt *fc = (Scheme_Filesystem_Change_Evt *)p; + gcMARK2(fc->sema, gc); + gcMARK2(fc->mref, gc); + size: + gcBYTES_TO_WORDS(sizeof(Scheme_Filesystem_Change_Evt)); +} + END port; /**********************************************************************/ diff --git a/racket/src/racket/src/port.c b/racket/src/racket/src/port.c index 9e192fa1f2..eb69534a8d 100644 --- a/racket/src/racket/src/port.c +++ b/racket/src/racket/src/port.c @@ -51,6 +51,9 @@ # ifdef HAVE_POLL_SYSCALL # include # endif +# ifdef HAVE_INOTIFY_SYSCALL +# include +# endif #endif #ifdef USE_ITIMER # include @@ -443,6 +446,14 @@ static void rw_evt_wakeup(Scheme_Object *rww, void *fds); static int progress_evt_ready(Scheme_Object *rww, Scheme_Schedule_Info *sinfo); static int closed_evt_ready(Scheme_Object *rww, Scheme_Schedule_Info *sinfo); +static int filesystem_change_evt_ready(Scheme_Object *evt, Scheme_Schedule_Info *sinfo); + +#ifdef DOS_FILE_SYSTEM +static void filesystem_change_evt_need_wakeup (Scheme_Object *port, void *fds); +#else +# define filesystem_change_evt_need_wakeup NULL +#endif + static Scheme_Object * _scheme_make_named_file_input_port(FILE *fp, Scheme_Object *name, int regfile); @@ -483,6 +494,13 @@ THREAD_LOCAL_DECL(static char *read_string_byte_buffer); #include "schwinfd.h" +typedef struct Scheme_Filesystem_Change_Evt { + Scheme_Object so; + intptr_t fd; + Scheme_Object *sema; + Scheme_Custodian_Reference *mref; +} Scheme_Filesystem_Change_Evt; + /*========================================================================*/ /* initialization */ /*========================================================================*/ @@ -627,6 +645,8 @@ void scheme_init_port_wait() scheme_add_evt(scheme_progress_evt_type, (Scheme_Ready_Fun)progress_evt_ready, NULL, NULL, 1); scheme_add_evt(scheme_write_evt_type, (Scheme_Ready_Fun)rw_evt_ready, rw_evt_wakeup, NULL, 1); scheme_add_evt(scheme_port_closed_evt_type, (Scheme_Ready_Fun)closed_evt_ready, NULL, NULL, 1); + scheme_add_evt(scheme_filesystem_change_evt_type, (Scheme_Ready_Fun)filesystem_change_evt_ready, + filesystem_change_evt_need_wakeup, NULL, 1); } void scheme_init_port_places(void) @@ -5952,6 +5972,243 @@ Scheme_Object *scheme_file_unlock(int argc, Scheme_Object **argv) return scheme_void; } +/*========================================================================*/ +/* filesystem change events */ +/*========================================================================*/ + +Scheme_Object *scheme_filesystem_change_evt(Scheme_Object *path, int flags, int signal_errs) +{ + char *filename; + int ok = 0, errid = 0; + intptr_t fd; + + filename = scheme_expand_string_filename(path, + "filesystem-change-evt", + NULL, + SCHEME_GUARD_FILE_EXISTS); +#if defined(HAVE_KQUEUE_SYSCALL) + do { + fd = open(filename, flags | MZ_BINARY, 0666); + } while ((fd == -1) && (errno == EINTR)); + if (fd == -1) + errid = errno; + else + ok = 1; +#elif defined(HAVE_INOTIFY_SYSCALL) + /* This implementation uses a file descriptor for every event, + instead of using a watch descriptor for every event. This could + be improved, but note that the kqueue() implementation needs a + file descriptor per event, anyway. */ + fd = inotify_init(); + if (fd == -1) + errid = errno; + else { + int wd; + wd = inotify_add_watch(fd, filename, + (IN_CREATE | IN_DELETE | IN_DELETE_SELF + | IN_MODIFY | IN_MOVE_SELF | IN_MOVED_TO + | IN_ATTRIB | IN_ONESHOT)); + if (wd == -1) { + errid = errno; + scheme_close_file_fd(fd); + } else { + ok = 1; + fcntl(fd, F_SETFL, MZ_NONBLOCKING); + } + } +#elif defined(DOS_FILE_SYSTEM) + { + HANDLE h; + char *try_filename = filename; + + while (1) { + h = FindFirstChangeNotification(try_filename, FALSE, + (FILE_NOTIFY_CHANGE_FILE_NAME + | FILE_NOTIFY_CHANGE_DIR_NAME + | FILE_NOTIFY_CHANGE_SIZE + | FILE_NOTIFY_CHANGE_LAST_WRITE + | FILE_NOTIFY_CHANGE_ATTRIBUTES)); + if (h == INVALID_HANDLE_VALUE) { + /* If `filename' refers to a file, then monitor its enclosing directory. */ + errid = GetLastError(); + if ((try_filename == filename) && scheme_file_exists(filename)) { + Scheme_Object *base, *name; + int is_dir; + name = scheme_split_path(filename, strlen(filename), &base, &is_dir, SCHEME_PLATFORM_PATH_KIND); + try_filename = scheme_expand_string_filename(base, + "filesystem-change-evt", + NULL, + SCHEME_GUARD_FILE_EXISTS); + } else + break; + } else { + fd = (intptr_t)h; + ok = 1; + break; + } + } + } +#else +# define NO_FILESYSTEM_CHANGE_EVTS + ok = 0; + errid = -1; +#endif + + if (!ok) { + if (signal_errs) { +#ifdef NO_FILESYSTEM_CHANGE_EVTS + scheme_raise_exn(MZEXN_FAIL_UNSUPPORTED, + "filesystem-change-evt: " NOT_SUPPORTED_STR "\n" + " path: %q\n", + filename); +#else + scheme_raise_exn(MZEXN_FAIL_FILESYSTEM, + "filesystem-change-evt: error generating event\n" + " path: %q\n" + " system error: %E", + filename, + errid); +#endif + } + + return NULL; + } + +#if defined(NO_FILESYSTEM_CHANGE_EVTS) + return NULL; +#elif defined(DOS_FILE_SYSTEM) + { + Scheme_Filesystem_Change_Evt *fc; + Scheme_Custodian_Reference *mref; + + fc = MALLOC_ONE_TAGGED(Scheme_Filesystem_Change_Evt); + fc->so.type = scheme_filesystem_change_evt_type; + fc->fd = fd; + + mref = scheme_add_managed(NULL, (Scheme_Object *)fc, scheme_filesystem_change_evt_cancel, NULL, 1); + fc->mref = mref; + + return (Scheme_Object *)fc; + } +#else + { + Scheme_Filesystem_Change_Evt *fc; + Scheme_Object *sema; + Scheme_Custodian_Reference *mref; + + sema = scheme_fd_to_semaphore(fd, MZFD_CREATE_VNODE, 0); + if (!sema) { + const char *reason = ""; + +#if defined(HAVE_KQUEUE_SYSCALL) + if (!scheme_fd_regular_file(fd, 1)) + reason = ";\n not a regular file or directory"; +#endif + + scheme_close_file_fd(fd); + + if (signal_errs) { + scheme_raise_exn(MZEXN_FAIL_FILESYSTEM, + "filesystem-change-evt: cannot generate event%s\n" + " path: %q", + reason, + filename); + } + return NULL; + } + + fc = MALLOC_ONE_TAGGED(Scheme_Filesystem_Change_Evt); + fc->so.type = scheme_filesystem_change_evt_type; + fc->fd = fd; + fc->sema = sema; + + mref = scheme_add_managed(NULL, (Scheme_Object *)fc, scheme_filesystem_change_evt_cancel, NULL, 1); + fc->mref = mref; + + return (Scheme_Object *)fc; + } +#endif +} + +void scheme_filesystem_change_evt_cancel(Scheme_Object *evt, void *ignored_data) +{ +#ifndef NO_FILESYSTEM_CHANGE_EVTS + Scheme_Filesystem_Change_Evt *fc = (Scheme_Filesystem_Change_Evt *)evt; + + if (fc->mref) { +# if defined(DOS_FILE_SYSTEM) + if (fc->fd) { + FindCloseChangeNotification((HANDLE)fc->fd); + fc->fd = 0; + } +# else + (void)scheme_fd_to_semaphore(fc->fd, MZFD_REMOVE, 0); + scheme_close_file_fd(fc->fd); + scheme_post_sema_all(fc->sema); +# endif + scheme_remove_managed(fc->mref, (Scheme_Object *)fc); + fc->mref = NULL; + } +#endif +} + +static int filesystem_change_evt_ready(Scheme_Object *evt, Scheme_Schedule_Info *sinfo) +{ +#ifndef NO_FILESYSTEM_CHANGE_EVTS + Scheme_Filesystem_Change_Evt *fc = (Scheme_Filesystem_Change_Evt *)evt; + +# if defined(DOS_FILE_SYSTEM) + if (fc->fd) { + if (WaitForSingleObject((HANDLE)fc->fd, 0) == WAIT_OBJECT_0) { + FindCloseChangeNotification((HANDLE)fc->fd); + fc->fd = 0; + } + } + + return !fc->fd; +# else + if (scheme_try_plain_sema(fc->sema)) + scheme_filesystem_change_evt_cancel((Scheme_Object *)fc, NULL); + else + scheme_check_fd_semaphores(); + scheme_set_sync_target(sinfo, fc->sema, evt, NULL, 0, 1, NULL); +# endif + +#endif + + return 0; +} + +#ifdef DOS_FILE_SYSTEM +static void filesystem_change_evt_need_wakeup (Scheme_Object *evt, void *fds) +{ + Scheme_Filesystem_Change_Evt *fc = (Scheme_Filesystem_Change_Evt *)evt; + + if (fc->fd) + scheme_add_fd_handle((void *)fc->fd, fds, 0); +} +#endif + +int scheme_fd_regular_file(intptr_t fd, int dir_ok) +{ +#if defined(USE_FD_PORTS) && !defined(DOS_FILE_SYSTEM) + int ok; + struct stat buf; + + do { + ok = fstat(fd, &buf); + } while ((ok == -1) && (errno == EINTR)); + + if (!S_ISREG(buf.st_mode) + && (!dir_ok || !S_ISDIR(buf.st_mode))) + return 0; + + return 1; +#else + return 0; +#endif +} + /*========================================================================*/ /* FILE input ports */ /*========================================================================*/ @@ -10861,6 +11118,8 @@ static void register_traversers(void) GC_REG_TRAV(scheme_subprocess_type, mark_subprocess); GC_REG_TRAV(scheme_write_evt_type, mark_read_write_evt); + + GC_REG_TRAV(scheme_filesystem_change_evt_type, mark_filesystem_change_evt); } END_XFORM_SKIP; diff --git a/racket/src/racket/src/portfun.c b/racket/src/racket/src/portfun.c index 230d1f8890..e2d440c657 100644 --- a/racket/src/racket/src/portfun.c +++ b/racket/src/racket/src/portfun.c @@ -126,6 +126,10 @@ static Scheme_Object *port_counts_lines_p(int, Scheme_Object **args); static Scheme_Object *port_next_location(int, Scheme_Object **args); static Scheme_Object *set_port_next_location(int, Scheme_Object **args); +static Scheme_Object *filesystem_change_evt(int, Scheme_Object **args); +static Scheme_Object *filesystem_change_evt_p(int, Scheme_Object **args); +static Scheme_Object *filesystem_change_evt_cancel(int, Scheme_Object **args); + static Scheme_Object *sch_default_read_handler(void *ignore, int argc, Scheme_Object *argv[]); static Scheme_Object *sch_default_display_handler(int argc, Scheme_Object *argv[]); static Scheme_Object *sch_default_write_handler(int argc, Scheme_Object *argv[]); @@ -260,6 +264,10 @@ scheme_init_port_fun(Scheme_Env *env) GLOBAL_PRIM_W_ARITY2("port-next-location", port_next_location, 1, 1, 3, 3, env); GLOBAL_PRIM_W_ARITY("set-port-next-location!", set_port_next_location, 4, 4, env); + GLOBAL_PRIM_W_ARITY("filesystem-change-evt", filesystem_change_evt, 1, 2, env); + GLOBAL_NONCM_PRIM("filesystem-change-evt?", filesystem_change_evt_p, 1, 1, env); + GLOBAL_NONCM_PRIM("filesystem-change-evt-cancel", filesystem_change_evt_cancel, 1, 1, env); + GLOBAL_NONCM_PRIM("read", read_f, 0, 1, env); GLOBAL_NONCM_PRIM("read/recursive", read_recur_f, 0, 4, env); GLOBAL_NONCM_PRIM("read-syntax", read_syntax_f, 0, 2, env); @@ -4319,6 +4327,40 @@ static Scheme_Object *set_port_next_location(int argc, Scheme_Object *argv[]) return scheme_void; } +static Scheme_Object *filesystem_change_evt(int argc, Scheme_Object *argv[]) +{ + Scheme_Object *e; + + if (!SCHEME_PATH_STRINGP(argv[0])) + scheme_wrong_contract("filesystem-change-evt", "path-string?", 0, argc, argv); + if (argc > 1) + scheme_check_proc_arity("filesystem-change-evt", 0, 1, argc, argv); + + e = scheme_filesystem_change_evt(argv[0], 0, (argc < 2)); + + if (!e) + return _scheme_tail_apply(argv[1], 0, NULL); + else + return e; +} + +static Scheme_Object *filesystem_change_evt_p(int argc, Scheme_Object **argv) +{ + return (SAME_TYPE(scheme_filesystem_change_evt_type, SCHEME_TYPE(argv[0])) + ? scheme_true + : scheme_false); +} + +static Scheme_Object *filesystem_change_evt_cancel(int argc, Scheme_Object **argv) +{ + if (!SAME_TYPE(scheme_filesystem_change_evt_type, SCHEME_TYPE(argv[0]))) + scheme_wrong_contract("filesystem-change-evt-cancel", "filesystem-change-evt?", 0, argc, argv); + + scheme_filesystem_change_evt_cancel(argv[0], NULL); + + return scheme_void; +} + static intptr_t get_number(Scheme_Object *port, intptr_t pos) { unsigned char buffer[4]; diff --git a/racket/src/racket/src/schminc.h b/racket/src/racket/src/schminc.h index dd10952591..cb22c654aa 100644 --- a/racket/src/racket/src/schminc.h +++ b/racket/src/racket/src/schminc.h @@ -14,7 +14,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 1105 +#define EXPECTED_PRIM_COUNT 1108 #define EXPECTED_UNSAFE_COUNT 100 #define EXPECTED_FLFXNUM_COUNT 69 #define EXPECTED_EXTFL_COUNT 45 diff --git a/racket/src/racket/src/schpriv.h b/racket/src/racket/src/schpriv.h index ef884b94c2..32011c5eea 100644 --- a/racket/src/racket/src/schpriv.h +++ b/racket/src/racket/src/schpriv.h @@ -3876,6 +3876,12 @@ intptr_t scheme_redirect_get_or_peek_bytes(Scheme_Input_Port *orig_port, Scheme_Object *unless, Scheme_Schedule_Info *sinfo); +Scheme_Object *scheme_filesystem_change_evt(Scheme_Object *path, int flags, int report_errs); +void scheme_filesystem_change_evt_cancel(Scheme_Object *evt, void *ignored_data); + +int scheme_fd_regular_file(intptr_t fd, int dir_ok); +void scheme_check_fd_semaphores(void); + /*========================================================================*/ /* memory debugging */ /*========================================================================*/ diff --git a/racket/src/racket/src/schvers.h b/racket/src/racket/src/schvers.h index e20a435bb7..7f788c7e99 100644 --- a/racket/src/racket/src/schvers.h +++ b/racket/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "5.3.900.3" +#define MZSCHEME_VERSION "5.3.900.4" #define MZSCHEME_VERSION_X 5 #define MZSCHEME_VERSION_Y 3 #define MZSCHEME_VERSION_Z 900 -#define MZSCHEME_VERSION_W 3 +#define MZSCHEME_VERSION_W 4 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) diff --git a/racket/src/racket/src/stypes.h b/racket/src/racket/src/stypes.h index 2d4cd163ef..dd8e3bf361 100644 --- a/racket/src/racket/src/stypes.h +++ b/racket/src/racket/src/stypes.h @@ -209,83 +209,84 @@ enum { scheme_struct_proc_shape_type, /* 185 */ scheme_phantom_bytes_type, /* 186 */ scheme_environment_variables_type, /* 187 */ + scheme_filesystem_change_evt_type, /* 188 */ #ifdef MZTAG_REQUIRED - _scheme_last_normal_type_, /* 188 */ + _scheme_last_normal_type_, /* 189 */ - scheme_rt_weak_array, /* 189 */ + scheme_rt_weak_array, /* 190 */ - scheme_rt_comp_env, /* 190 */ - scheme_rt_constant_binding, /* 191 */ - scheme_rt_resolve_info, /* 192 */ - scheme_rt_unresolve_info, /* 193 */ - scheme_rt_optimize_info, /* 194 */ - scheme_rt_compile_info, /* 195 */ - scheme_rt_cont_mark, /* 196 */ - scheme_rt_saved_stack, /* 197 */ - scheme_rt_reply_item, /* 198 */ - scheme_rt_closure_info, /* 199 */ - scheme_rt_overflow, /* 200 */ - scheme_rt_overflow_jmp, /* 201 */ - scheme_rt_meta_cont, /* 202 */ - scheme_rt_dyn_wind_cell, /* 203 */ - scheme_rt_dyn_wind_info, /* 204 */ - scheme_rt_dyn_wind, /* 205 */ - scheme_rt_dup_check, /* 206 */ - scheme_rt_thread_memory, /* 207 */ - scheme_rt_input_file, /* 208 */ - scheme_rt_input_fd, /* 209 */ - scheme_rt_oskit_console_input, /* 210 */ - scheme_rt_tested_input_file, /* 211 */ - scheme_rt_tested_output_file, /* 212 */ - scheme_rt_indexed_string, /* 213 */ - scheme_rt_output_file, /* 214 */ - scheme_rt_load_handler_data, /* 215 */ - scheme_rt_pipe, /* 216 */ - scheme_rt_beos_process, /* 217 */ - scheme_rt_system_child, /* 218 */ - scheme_rt_tcp, /* 219 */ - scheme_rt_write_data, /* 220 */ - scheme_rt_tcp_select_info, /* 221 */ - scheme_rt_param_data, /* 222 */ - scheme_rt_will, /* 223 */ - scheme_rt_linker_name, /* 224 */ - scheme_rt_param_map, /* 225 */ - scheme_rt_finalization, /* 226 */ - scheme_rt_finalizations, /* 227 */ - scheme_rt_cpp_object, /* 228 */ - scheme_rt_cpp_array_object, /* 229 */ - scheme_rt_stack_object, /* 230 */ - scheme_rt_preallocated_object, /* 231 */ - scheme_thread_hop_type, /* 232 */ - scheme_rt_srcloc, /* 233 */ - scheme_rt_evt, /* 234 */ - scheme_rt_syncing, /* 235 */ - scheme_rt_comp_prefix, /* 236 */ - scheme_rt_user_input, /* 237 */ - scheme_rt_user_output, /* 238 */ - scheme_rt_compact_port, /* 239 */ - scheme_rt_read_special_dw, /* 240 */ - scheme_rt_regwork, /* 241 */ - scheme_rt_rx_lazy_string, /* 242 */ - scheme_rt_buf_holder, /* 243 */ - scheme_rt_parameterization, /* 244 */ - scheme_rt_print_params, /* 245 */ - scheme_rt_read_params, /* 246 */ - scheme_rt_native_code, /* 247 */ - scheme_rt_native_code_plus_case, /* 248 */ - scheme_rt_jitter_data, /* 249 */ - scheme_rt_module_exports, /* 250 */ - scheme_rt_delay_load_info, /* 251 */ - scheme_rt_marshal_info, /* 252 */ - scheme_rt_unmarshal_info, /* 253 */ - scheme_rt_runstack, /* 254 */ - scheme_rt_sfs_info, /* 255 */ - scheme_rt_validate_clearing, /* 256 */ - scheme_rt_avl_node, /* 257 */ - scheme_rt_lightweight_cont, /* 258 */ - scheme_rt_export_info, /* 259 */ - scheme_rt_cont_jmp, /* 260 */ + scheme_rt_comp_env, /* 191 */ + scheme_rt_constant_binding, /* 192 */ + scheme_rt_resolve_info, /* 193 */ + scheme_rt_unresolve_info, /* 194 */ + scheme_rt_optimize_info, /* 195 */ + scheme_rt_compile_info, /* 196 */ + scheme_rt_cont_mark, /* 197 */ + scheme_rt_saved_stack, /* 198 */ + scheme_rt_reply_item, /* 199 */ + scheme_rt_closure_info, /* 200 */ + scheme_rt_overflow, /* 201 */ + scheme_rt_overflow_jmp, /* 202 */ + scheme_rt_meta_cont, /* 203 */ + scheme_rt_dyn_wind_cell, /* 204 */ + scheme_rt_dyn_wind_info, /* 205 */ + scheme_rt_dyn_wind, /* 206 */ + scheme_rt_dup_check, /* 207 */ + scheme_rt_thread_memory, /* 208 */ + scheme_rt_input_file, /* 209 */ + scheme_rt_input_fd, /* 210 */ + scheme_rt_oskit_console_input, /* 211 */ + scheme_rt_tested_input_file, /* 212 */ + scheme_rt_tested_output_file, /* 213 */ + scheme_rt_indexed_string, /* 214 */ + scheme_rt_output_file, /* 215 */ + scheme_rt_load_handler_data, /* 216 */ + scheme_rt_pipe, /* 217 */ + scheme_rt_beos_process, /* 218 */ + scheme_rt_system_child, /* 219 */ + scheme_rt_tcp, /* 220 */ + scheme_rt_write_data, /* 221 */ + scheme_rt_tcp_select_info, /* 222 */ + scheme_rt_param_data, /* 223 */ + scheme_rt_will, /* 224 */ + scheme_rt_linker_name, /* 225 */ + scheme_rt_param_map, /* 226 */ + scheme_rt_finalization, /* 227 */ + scheme_rt_finalizations, /* 228 */ + scheme_rt_cpp_object, /* 229 */ + scheme_rt_cpp_array_object, /* 230 */ + scheme_rt_stack_object, /* 231 */ + scheme_rt_preallocated_object, /* 232 */ + scheme_thread_hop_type, /* 233 */ + scheme_rt_srcloc, /* 234 */ + scheme_rt_evt, /* 235 */ + scheme_rt_syncing, /* 236 */ + scheme_rt_comp_prefix, /* 237 */ + scheme_rt_user_input, /* 238 */ + scheme_rt_user_output, /* 239 */ + scheme_rt_compact_port, /* 240 */ + scheme_rt_read_special_dw, /* 241 */ + scheme_rt_regwork, /* 242 */ + scheme_rt_rx_lazy_string, /* 243 */ + scheme_rt_buf_holder, /* 244 */ + scheme_rt_parameterization, /* 245 */ + scheme_rt_print_params, /* 246 */ + scheme_rt_read_params, /* 247 */ + scheme_rt_native_code, /* 248 */ + scheme_rt_native_code_plus_case, /* 249 */ + scheme_rt_jitter_data, /* 250 */ + scheme_rt_module_exports, /* 251 */ + scheme_rt_delay_load_info, /* 252 */ + scheme_rt_marshal_info, /* 253 */ + scheme_rt_unmarshal_info, /* 254 */ + scheme_rt_runstack, /* 255 */ + scheme_rt_sfs_info, /* 256 */ + scheme_rt_validate_clearing, /* 257 */ + scheme_rt_avl_node, /* 258 */ + scheme_rt_lightweight_cont, /* 259 */ + scheme_rt_export_info, /* 260 */ + scheme_rt_cont_jmp, /* 261 */ #endif _scheme_last_type_ diff --git a/racket/src/racket/src/thread.c b/racket/src/racket/src/thread.c index 348f847f38..5f82e91dd1 100644 --- a/racket/src/racket/src/thread.c +++ b/racket/src/racket/src/thread.c @@ -3480,8 +3480,10 @@ Scheme_Object *scheme_fd_to_semaphore(intptr_t fd, int mode, int is_socket) return NULL; # ifdef HAVE_KQUEUE_SYSCALL - if (!is_socket) - return NULL; /* kqueue() might not work on devices, such as ttys */ + if (!is_socket) { + if (!scheme_fd_regular_file(fd, 10)) + return NULL; /* kqueue() might not work on devices, such as ttys */ + } if (scheme_semaphore_fd_kqueue < 0) { scheme_semaphore_fd_kqueue = kqueue(); if (scheme_semaphore_fd_kqueue < 0) { @@ -3504,6 +3506,7 @@ Scheme_Object *scheme_fd_to_semaphore(intptr_t fd, int mode, int is_socket) v = scheme_hash_get(scheme_semaphore_fd_mapping, key); if (!v && ((mode == MZFD_CHECK_READ) || (mode == MZFD_CHECK_WRITE) + || (mode == MZFD_CHECK_VNODE) || (mode == MZFD_REMOVE))) return NULL; @@ -3529,13 +3532,14 @@ Scheme_Object *scheme_fd_to_semaphore(intptr_t fd, int mode, int is_socket) scheme_hash_set(scheme_semaphore_fd_mapping, key, NULL); # ifdef HAVE_KQUEUE_SYSCALL { - GC_CAN_IGNORE struct kevent kev[2]; + GC_CAN_IGNORE struct kevent kev[3]; struct timespec timeout = {0, 0}; int kr; EV_SET(kev, fd, EVFILT_READ, EV_DELETE, 0, 0, NULL); - EV_SET(&kev[1], fd, EVFILT_READ, EV_DELETE, 0, 0, NULL); + EV_SET(&kev[1], fd, EVFILT_WRITE, EV_DELETE, 0, 0, NULL); + EV_SET(&kev[2], fd, EVFILT_VNODE, EV_DELETE, 0, 0, NULL); do { - kr = kevent(scheme_semaphore_fd_kqueue, kev, 2, NULL, 0, &timeout); + kr = kevent(scheme_semaphore_fd_kqueue, kev, 3, NULL, 0, &timeout); } while ((kr == -1) && (errno == EINTR)); log_kqueue_error("remove", kr); } @@ -3552,10 +3556,13 @@ Scheme_Object *scheme_fd_to_semaphore(intptr_t fd, int mode, int is_socket) # endif s = NULL; } else if ((mode == MZFD_CHECK_READ) - || (mode == MZFD_CREATE_READ)) { + || (mode == MZFD_CREATE_READ) + || (mode == MZFD_CHECK_VNODE) + || (mode == MZFD_CREATE_VNODE)) { s = SCHEME_VEC_ELS(v)[0]; if (SCHEME_FALSEP(s)) { - if (mode == MZFD_CREATE_READ) { + if ((mode == MZFD_CREATE_READ) + || (mode == MZFD_CREATE_VNODE)) { s = scheme_make_sema(0); SCHEME_VEC_ELS(v)[0] = s; # ifdef HAVE_KQUEUE_SYSCALL @@ -3563,7 +3570,13 @@ Scheme_Object *scheme_fd_to_semaphore(intptr_t fd, int mode, int is_socket) GC_CAN_IGNORE struct kevent kev; struct timespec timeout = {0, 0}; int kr; - EV_SET(&kev, fd, EVFILT_READ, EV_ADD | EV_ONESHOT, 0, 0, NULL); + if (mode == MZFD_CREATE_READ) + EV_SET(&kev, fd, EVFILT_READ, EV_ADD | EV_ONESHOT, 0, 0, NULL); + else + EV_SET(&kev, fd, EVFILT_VNODE, EV_ADD | EV_ONESHOT, + (NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND + | NOTE_RENAME | NOTE_ATTRIB), + 0, NULL); do { kr = kevent(scheme_semaphore_fd_kqueue, &kev, 1, NULL, 0, &timeout); } while ((kr == -1) && (errno == EINTR)); @@ -3586,7 +3599,8 @@ Scheme_Object *scheme_fd_to_semaphore(intptr_t fd, int mode, int is_socket) } else s = NULL; } - } else { + } else if ((mode == MZFD_CHECK_WRITE) + || (mode == MZFD_CREATE_WRITE)) { s = SCHEME_VEC_ELS(v)[1]; if (SCHEME_FALSEP(s)) { if (mode == MZFD_CREATE_WRITE) { @@ -3650,7 +3664,7 @@ static int check_fd_semaphores() key = scheme_make_integer_value(kev.ident); v = scheme_hash_get(scheme_semaphore_fd_mapping, key); if (v) { - if (kev.filter == EVFILT_READ) { + if ((kev.filter == EVFILT_READ) || (kev.filter == EVFILT_VNODE)) { s = SCHEME_VEC_ELS(v)[0]; if (!SCHEME_FALSEP(s)) { scheme_post_sema_all(s); @@ -3849,6 +3863,11 @@ static int check_fd_semaphores() #endif } +void scheme_check_fd_semaphores(void) +{ + (void)check_fd_semaphores(); +} + typedef struct { int running; double sleep_end; diff --git a/racket/src/racket/src/type.c b/racket/src/racket/src/type.c index 985c485b41..d83a40531c 100644 --- a/racket/src/racket/src/type.c +++ b/racket/src/racket/src/type.c @@ -209,6 +209,7 @@ scheme_init_type () set_name(scheme_struct_type_type, ""); set_name(scheme_listener_type, ""); set_name(scheme_tcp_accept_evt_type, ""); + set_name(scheme_filesystem_change_evt_type, ""); set_name(scheme_namespace_type, ""); set_name(scheme_config_type, ""); set_name(scheme_will_executor_type, ""); @@ -613,7 +614,7 @@ void scheme_register_traversers(void) GC_REG_TRAV(scheme_unix_path_type, bstring_obj); GC_REG_TRAV(scheme_windows_path_type, bstring_obj); GC_REG_TRAV(scheme_symbol_type, symbol_obj); -#ifdef MZ_USE_PLACES +#ifdef MZ_USE_PLACES GC_REG_TRAV(scheme_serialized_symbol_type, bstring_obj); GC_REG_TRAV(scheme_serialized_keyword_type, bstring_obj); GC_REG_TRAV(scheme_place_dead_type, small_object);