From 3de7dbd2fd2b463f215ec36fdc4c3d3097bee673 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 1 Jul 2010 14:54:29 -0600 Subject: [PATCH] add chaperone-evt --- .../scribblings/reference/chaperones.scrbl | 42 +- collects/tests/racket/chaperone.rktl | 60 ++ src/racket/src/cstartup.inc | 540 +++++++++--------- src/racket/src/eval.c | 4 + src/racket/src/schminc.h | 2 +- src/racket/src/schvers.h | 4 +- src/racket/src/struct.c | 162 ++++++ 7 files changed, 531 insertions(+), 283 deletions(-) diff --git a/collects/scribblings/reference/chaperones.scrbl b/collects/scribblings/reference/chaperones.scrbl index 52cb350e38..fac20c259d 100644 --- a/collects/scribblings/reference/chaperones.scrbl +++ b/collects/scribblings/reference/chaperones.scrbl @@ -135,7 +135,7 @@ or override chaperone-property values of @scheme[proc].} (one-of/c struct-info))] [redirect-proc procedure?] ... ... [prop chaperone-property?] - [val any] ... ...) + [prop-val any] ... ...) any/c]{ Returns a chaperoned value like @scheme[v], but with certain @@ -173,7 +173,7 @@ indicate a distinct operation. If no @scheme[orig-proc]s are supplied, then no @scheme[prop]s must be supplied, and @scheme[v] is returned unchaperoned. -Pairs of @scheme[prop-val] and @scheme[val] (the number of arguments +Pairs of @scheme[prop] and @scheme[prop-val] (the number of arguments to @scheme[chaperone-procedure] must be even) add chaperone properties or override chaperone-property values of @scheme[v].} @@ -181,7 +181,7 @@ or override chaperone-property values of @scheme[v].} [ref-proc (vector? exact-nonnegative-integer? any/c . -> . any/c)] [set-proc (vector? exact-nonnegative-integer? any/c . -> . any/c)] [prop chaperone-property?] - [val any] ... ...) + [prop-val any] ... ...) (and/c vector? chaperone?)]{ Returns a chaperoned value like @scheme[vec], but with @@ -201,7 +201,7 @@ with @scheme[vector-set!] on the original @scheme[vec] to install the value. The @scheme[set-proc] will not be used if @scheme[vec] is immutable. -Pairs of @scheme[prop-val] and @scheme[val] (the number of arguments +Pairs of @scheme[prop] and @scheme[prop-val] (the number of arguments to @scheme[chaperone-vector] must be odd) add chaperone properties or override chaperone-property values of @scheme[vec].} @@ -209,7 +209,7 @@ or override chaperone-property values of @scheme[vec].} [unbox-proc (box? any/c . -> . any/c)] [set-proc (box? any/c . -> . any/c)] [prop chaperone-property?] - [val any] ... ...) + [prop-val any] ... ...) (and/c box? chaperone?)]{ Returns a chaperoned value like @scheme[bx], but with @@ -227,7 +227,7 @@ the value, which is used with @scheme[set-box!] on the original @scheme[bx] to install the value. The @scheme[set-proc] will not be used if @scheme[bx] is immutable. -Pairs of @scheme[prop-val] and @scheme[val] (the number of arguments +Pairs of @scheme[prop] and @scheme[prop-val] (the number of arguments to @scheme[chaperone-box] must be odd) add chaperone properties or override chaperone-property values of @scheme[bx].} @@ -240,7 +240,7 @@ or override chaperone-property values of @scheme[bx].} [remove-proc (hash? any/c . -> . any/c)] [key-proc (hash? any/c . -> . any/c)] [prop chaperone-property?] - [val any] ... ...) + [prop-val any] ... ...) (and/c hash? chaperone?)]{ Returns a chaperoned value like @scheme[hash], but with @@ -284,7 +284,7 @@ other operations that use @scheme[hash-iterate-key] internally); it must produce the same key or a chaperone of the key, which is then reported as a key extracted from the table. -Pairs of @scheme[prop-val] and @scheme[val] (the number of arguments +Pairs of @scheme[prop] and @scheme[prop-val] (the number of arguments to @scheme[chaperone-hash] must be odd) add chaperone properties or override chaperone-property values of @scheme[hash].} @@ -293,7 +293,7 @@ or override chaperone-property values of @scheme[hash].} [make-constructor-proc (procedure? . -> . procedure?)] [guard-proc procedure?] [prop chaperone-property?] - [val any] ... ...) + [prop-val any] ... ...) (and/c struct-type? chaperone?)]{ Returns a chaperoned value like @scheme[struct-type], but with @@ -322,10 +322,32 @@ each the same or a chaperone of the corresponding argument. The @scheme[guard-proc] is added as a constructor guard when a subtype is created of the chaperoned structure type. -Pairs of @scheme[prop-val] and @scheme[val] (the number of arguments +Pairs of @scheme[prop] and @scheme[prop-val] (the number of arguments to @scheme[chaperone-struct-type] must be even) add chaperone properties or override chaperone-property values of @scheme[struct-type].} +@defproc[(chaperone-evt [evt evt?] + [proc (evt? . -> . (values evt? (any/c . -> . any/c)))] + [prop chaperone-property?] + [prop-val any] ... ...) + (and/c evt? chaperone?)]{ + +Returns a chaperoned value like @scheme[evt], but with @scheme[proc] +as an event generator when the result is synchronized with functions +like @racket[sync]. + +The @racket[proc] generator is called on synchronization, much like +the procedure passed to @racket[guard-evt], except that @racket[proc] +is given @scheme[evt]. The @racket[proc] must return two values: a +@tech{synchronizable event} that is a chaperone of @racket[evt], and a +procedure that is used to check the event's result if it is chosen in +a selection. The latter procedure accepts the result of @racket[evt], +and it must return a chaperone of that value. + +Pairs of @scheme[prop] and @scheme[prop-val] (the number of arguments +to @scheme[chaperone-struct-type] must be even) add chaperone properties +or override chaperone-property values of @scheme[evt].} + @; ------------------------------------------------------------ @section{Chaperone Properties} diff --git a/collects/tests/racket/chaperone.rktl b/collects/tests/racket/chaperone.rktl index 759084b270..232ff2fbf2 100644 --- a/collects/tests/racket/chaperone.rktl +++ b/collects/tests/racket/chaperone.rktl @@ -765,4 +765,64 @@ ;; ---------------------------------------- +;; evt chaperones + +(test #t evt? (chaperone-evt always-evt void)) +(test #t chaperone-of? (chaperone-evt always-evt void) always-evt) +(test #f chaperone-of? (chaperone-evt always-evt void) (chaperone-evt always-evt void)) +(test #t chaperone-of? (chaperone-evt (chaperone-evt always-evt void) void) always-evt) +(test always-evt sync (chaperone-evt always-evt (lambda (e) (values e values)))) +(test #f sync/timeout 0 (chaperone-evt never-evt (lambda (e) (values e (lambda (v) (error "bad")))))) + +(err/rt-test (chaperone-evt always-evt (lambda () 0))) +(test #t evt? (chaperone-evt always-evt (lambda (x) x))) +(err/rt-test (sync (chaperone-evt never-evt (lambda (x) x)))) +(err/rt-test (sync (chaperone-evt never-evt (lambda (x) (values x (lambda () 10)))))) +(test #f sync/timeout 0 (chaperone-evt never-evt (lambda (x) (values x (lambda (v) 10))))) +(err/rt-test (sync/timeout 0 (chaperone-evt always-evt (lambda (x) (values x (lambda (v) 10)))))) +(test #t chaperone-of? + (sync/timeout 0 (chaperone-evt always-evt (lambda (x) (values x (lambda (v) + (chaperone-evt always-evt void)))))) + always-evt) + +(let ([did-0 #f] + [did-1 #f] + [did-2 #f] + [did-3 #f] + [v 0]) + (define (val) (begin0 v (set! v (add1 v)))) + (test always-evt sync (chaperone-evt always-evt + (lambda (e) + (set! did-0 (val)) + (values + (chaperone-evt e (lambda (e) + (set! did-1 (val)) + (values e (lambda (x) + (set! did-2 (val)) + x)))) + (lambda (x) + (set! did-3 (val)) + x))))) + (test '(0 1 2 3) list did-0 did-1 did-2 did-3)) + +(let () + (define-struct e (val) + #:property prop:procedure (lambda (self x) + (check self) + (+ x x)) + #:property prop:evt (lambda (self) + (check self) + always-evt)) + (define (check self) (unless (e? self) (error "bad self!"))) + (define an-e (make-e 0)) + (test always-evt sync (make-e 0)) + (test 14 (make-e 0) 7) + (test #t evt? an-e) + (test #t evt? (chaperone-evt an-e void)) + (test #t chaperone-of? (chaperone-evt an-e void) an-e) + (test 18 (chaperone-evt an-e void) 9)) + + +;; ---------------------------------------- + (report-errs) diff --git a/src/racket/src/cstartup.inc b/src/racket/src/cstartup.inc index b995f3b40d..bff6a61e35 100644 --- a/src/racket/src/cstartup.inc +++ b/src/racket/src/cstartup.inc @@ -1,28 +1,28 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,48,46,51,51,0,0,0,1,0,0,10,0,13,0, -22,0,27,0,34,0,38,0,42,0,45,0,52,0,59,0,64,0,77,0,82, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,48,46,52,51,0,0,0,1,0,0,10,0,13,0, +22,0,27,0,34,0,38,0,51,0,55,0,58,0,65,0,72,0,77,0,82, 0,88,0,102,0,116,0,119,0,125,0,129,0,131,0,142,0,144,0,158,0, 165,0,187,0,189,0,203,0,14,1,43,1,54,1,65,1,75,1,111,1,144, 1,177,1,236,1,46,2,124,2,190,2,195,2,215,2,106,3,126,3,177,3, 243,3,128,4,14,5,66,5,89,5,168,5,0,0,109,7,0,0,69,35,37, 109,105,110,45,115,116,120,29,11,11,68,104,101,114,101,45,115,116,120,64,99, -111,110,100,66,108,101,116,114,101,99,63,97,110,100,63,108,101,116,62,111,114, -66,100,101,102,105,110,101,66,117,110,108,101,115,115,64,108,101,116,42,72,112, -97,114,97,109,101,116,101,114,105,122,101,64,119,104,101,110,65,113,117,111,116, +111,110,100,66,108,101,116,114,101,99,63,97,110,100,72,112,97,114,97,109,101, +116,101,114,105,122,101,63,108,101,116,62,111,114,66,100,101,102,105,110,101,66, +117,110,108,101,115,115,64,108,101,116,42,64,119,104,101,110,65,113,117,111,116, 101,29,94,2,14,68,35,37,107,101,114,110,101,108,11,29,94,2,14,68,35, 37,112,97,114,97,109,122,11,62,105,102,65,98,101,103,105,110,63,115,116,120, 61,115,70,108,101,116,45,118,97,108,117,101,115,61,120,73,108,101,116,114,101, 99,45,118,97,108,117,101,115,66,108,97,109,98,100,97,1,20,112,97,114,97, 109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,61,118,73,100,101, -102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240,180,74,0,0,95, +102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240,218,81,0,0,95, 159,2,16,36,36,159,2,15,36,36,159,2,15,36,36,16,20,2,4,2,2, -2,6,2,2,2,7,2,2,2,5,2,2,2,9,2,2,2,8,2,2,2, -10,2,2,2,11,2,2,2,12,2,2,2,13,2,2,97,37,11,8,240,180, -74,0,0,93,159,2,15,36,37,16,2,2,3,161,2,2,37,2,3,2,2, -2,3,96,38,11,8,240,180,74,0,0,16,0,96,11,11,8,240,180,74,0, +2,6,2,2,2,7,2,2,2,8,2,2,2,5,2,2,2,10,2,2,2, +9,2,2,2,11,2,2,2,12,2,2,2,13,2,2,97,37,11,8,240,218, +81,0,0,93,159,2,15,36,37,16,2,2,3,161,2,2,37,2,3,2,2, +2,3,96,38,11,8,240,218,81,0,0,16,0,96,11,11,8,240,218,81,0, 0,16,0,13,16,4,36,29,11,11,2,2,11,18,16,2,99,64,104,101,114, -101,8,32,8,31,8,30,8,29,8,28,93,8,224,187,74,0,0,95,9,8, -224,187,74,0,0,2,2,27,248,22,147,4,195,249,22,140,4,80,158,39,36, +101,8,32,8,31,8,30,8,29,8,28,93,8,224,225,81,0,0,95,9,8, +224,225,81,0,0,2,2,27,248,22,147,4,195,249,22,140,4,80,158,39,36, 251,22,81,2,17,248,22,96,199,12,249,22,71,2,18,248,22,98,201,27,248, 22,147,4,195,249,22,140,4,80,158,39,36,251,22,81,2,17,248,22,96,199, 249,22,71,2,18,248,22,98,201,12,27,248,22,73,248,22,147,4,196,28,248, @@ -30,15 +30,15 @@ 249,22,140,4,80,158,39,36,251,22,81,2,17,248,22,72,199,249,22,71,2, 6,248,22,73,201,11,18,16,2,101,10,8,32,8,31,8,30,8,29,8,28, 16,4,11,11,2,19,3,1,8,101,110,118,49,50,56,51,55,16,4,11,11, -2,20,3,1,8,101,110,118,49,50,56,51,56,93,8,224,188,74,0,0,95, -9,8,224,188,74,0,0,2,2,27,248,22,73,248,22,147,4,196,28,248,22, +2,20,3,1,8,101,110,118,49,50,56,51,56,93,8,224,226,81,0,0,95, +9,8,224,226,81,0,0,2,2,27,248,22,73,248,22,147,4,196,28,248,22, 79,193,20,15,159,37,36,37,28,248,22,79,248,22,73,194,248,22,72,193,249, 22,140,4,80,158,39,36,250,22,81,2,21,248,22,81,249,22,81,248,22,81, -2,22,248,22,72,201,251,22,81,2,17,2,22,2,22,249,22,71,2,8,248, +2,22,248,22,72,201,251,22,81,2,17,2,22,2,22,249,22,71,2,9,248, 22,73,204,18,16,2,101,11,8,32,8,31,8,30,8,29,8,28,16,4,11, 11,2,19,3,1,8,101,110,118,49,50,56,52,48,16,4,11,11,2,20,3, -1,8,101,110,118,49,50,56,52,49,93,8,224,189,74,0,0,95,9,8,224, -189,74,0,0,2,2,248,22,147,4,193,27,248,22,147,4,194,249,22,71,248, +1,8,101,110,118,49,50,56,52,49,93,8,224,227,81,0,0,95,9,8,224, +227,81,0,0,2,2,248,22,147,4,193,27,248,22,147,4,194,249,22,71,248, 22,81,248,22,72,196,248,22,73,195,27,248,22,73,248,22,147,4,23,197,1, 249,22,140,4,80,158,39,36,28,248,22,56,248,22,141,4,248,22,72,23,198, 2,27,249,22,2,32,0,89,162,8,44,37,43,9,222,33,40,248,22,147,4, @@ -52,7 +52,7 @@ 37,47,9,222,33,43,248,22,147,4,248,22,72,201,248,22,73,198,27,248,22, 73,248,22,147,4,196,27,248,22,147,4,248,22,72,195,249,22,140,4,80,158, 40,36,28,248,22,79,195,250,22,82,2,21,9,248,22,73,199,250,22,81,2, -7,248,22,81,248,22,72,199,250,22,82,2,11,248,22,73,201,248,22,73,202, +8,248,22,81,248,22,72,199,250,22,82,2,12,248,22,73,201,248,22,73,202, 27,248,22,73,248,22,147,4,23,197,1,27,249,22,1,22,85,249,22,2,22, 147,4,248,22,147,4,248,22,72,199,249,22,140,4,80,158,40,36,251,22,81, 1,22,119,105,116,104,45,99,111,110,116,105,110,117,97,116,105,111,110,45,109, @@ -68,8 +68,8 @@ 72,200,64,101,108,115,101,10,248,22,72,197,250,22,82,2,21,9,248,22,73, 200,249,22,71,2,4,248,22,73,202,100,8,32,8,31,8,30,8,29,8,28, 16,4,11,11,2,19,3,1,8,101,110,118,49,50,56,54,51,16,4,11,11, -2,20,3,1,8,101,110,118,49,50,56,54,52,93,8,224,190,74,0,0,18, -16,2,158,94,10,64,118,111,105,100,8,48,95,9,8,224,190,74,0,0,2, +2,20,3,1,8,101,110,118,49,50,56,54,52,93,8,224,228,81,0,0,18, +16,2,158,94,10,64,118,111,105,100,8,48,95,9,8,224,228,81,0,0,2, 2,27,248,22,73,248,22,147,4,196,249,22,140,4,80,158,39,36,28,248,22, 56,248,22,141,4,248,22,72,197,250,22,81,2,27,248,22,81,248,22,72,199, 248,22,96,198,27,248,22,141,4,248,22,72,197,250,22,81,2,27,248,22,81, @@ -81,25 +81,25 @@ 11,11,11,11,16,10,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2, 11,2,12,2,13,36,46,37,11,11,11,16,0,16,0,16,0,36,36,11,11, 11,11,16,0,16,0,16,0,36,36,16,11,16,5,2,3,20,15,159,36,36, -36,36,20,105,159,36,16,0,16,1,33,33,10,16,5,2,10,89,162,8,44, +36,36,20,105,159,36,16,0,16,1,33,33,10,16,5,2,11,89,162,8,44, 37,53,9,223,0,33,34,36,20,105,159,36,16,1,2,3,16,0,11,16,5, 2,13,89,162,8,44,37,53,9,223,0,33,35,36,20,105,159,36,16,1,2, 3,16,0,11,16,5,2,6,89,162,8,44,37,53,9,223,0,33,36,36,20, -105,159,36,16,1,2,3,16,1,33,37,11,16,5,2,8,89,162,8,44,37, +105,159,36,16,1,2,3,16,1,33,37,11,16,5,2,9,89,162,8,44,37, 56,9,223,0,33,38,36,20,105,159,36,16,1,2,3,16,1,33,39,11,16, -5,2,7,89,162,8,44,37,58,9,223,0,33,42,36,20,105,159,36,16,1, +5,2,8,89,162,8,44,37,58,9,223,0,33,42,36,20,105,159,36,16,1, 2,3,16,0,11,16,5,2,5,89,162,8,44,37,53,9,223,0,33,44,36, -20,105,159,36,16,1,2,3,16,0,11,16,5,2,11,89,162,8,44,37,54, -9,223,0,33,45,36,20,105,159,36,16,1,2,3,16,0,11,16,5,2,12, +20,105,159,36,16,1,2,3,16,0,11,16,5,2,12,89,162,8,44,37,54, +9,223,0,33,45,36,20,105,159,36,16,1,2,3,16,0,11,16,5,2,7, 89,162,8,44,37,55,9,223,0,33,46,36,20,105,159,36,16,1,2,3,16, 0,11,16,5,2,4,89,162,8,44,37,58,9,223,0,33,47,36,20,105,159, -36,16,1,2,3,16,1,33,49,11,16,5,2,9,89,162,8,44,37,54,9, +36,16,1,2,3,16,1,33,49,11,16,5,2,10,89,162,8,44,37,54,9, 223,0,33,50,36,20,105,159,36,16,1,2,3,16,0,11,16,0,94,2,15, 2,16,93,2,15,9,9,36,0}; EVAL_ONE_SIZED_STR((char *)expr, 2024); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,48,46,51,65,0,0,0,1,0,0,8,0,21,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,48,46,52,65,0,0,0,1,0,0,8,0,21,0, 26,0,43,0,58,0,76,0,92,0,102,0,120,0,140,0,156,0,174,0,205, 0,234,0,0,1,14,1,20,1,34,1,39,1,49,1,57,1,85,1,117,1, 123,1,168,1,213,1,237,1,20,2,22,2,188,2,22,4,63,4,136,5,222, @@ -132,231 +132,231 @@ 111,114,32,98,121,116,101,32,115,116,114,105,110,103,6,36,36,99,97,110,110, 111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116,111,32,97,32, 114,111,111,116,32,112,97,116,104,58,32,5,0,27,20,14,159,80,159,37,51, -38,250,80,159,40,52,38,249,22,27,11,80,159,42,51,38,22,155,13,10,248, +38,250,80,159,40,52,38,249,22,27,11,80,159,42,51,38,22,156,13,10,248, 22,174,5,23,196,2,28,248,22,171,6,23,194,2,12,87,94,248,22,189,8, 23,194,1,27,20,14,159,80,159,38,51,38,250,80,159,41,52,38,249,22,27, -11,80,159,43,51,38,22,155,13,10,248,22,174,5,23,197,2,28,248,22,171, +11,80,159,43,51,38,22,156,13,10,248,22,174,5,23,197,2,28,248,22,171, 6,23,194,2,12,87,94,248,22,189,8,23,194,1,27,20,14,159,80,159,39, -51,38,250,80,159,42,52,38,249,22,27,11,80,159,44,51,38,22,155,13,10, +51,38,250,80,159,42,52,38,249,22,27,11,80,159,44,51,38,22,156,13,10, 248,22,174,5,23,198,2,28,248,22,171,6,23,194,2,12,87,94,248,22,189, 8,23,194,1,248,80,159,40,54,37,197,28,248,22,79,23,195,2,9,27,248, -22,72,23,196,2,27,28,248,22,139,14,23,195,2,23,194,1,28,248,22,138, -14,23,195,2,249,22,140,14,23,196,1,250,80,158,43,49,248,22,155,14,2, -20,11,10,250,80,158,41,49,248,22,155,14,2,20,23,197,1,10,28,23,193, -2,249,22,71,248,22,142,14,249,22,140,14,23,198,1,247,22,156,14,27,248, +22,72,23,196,2,27,28,248,22,140,14,23,195,2,23,194,1,28,248,22,139, +14,23,195,2,249,22,141,14,23,196,1,250,80,158,43,49,248,22,156,14,2, +20,11,10,250,80,158,41,49,248,22,156,14,2,20,23,197,1,10,28,23,193, +2,249,22,71,248,22,143,14,249,22,141,14,23,198,1,247,22,157,14,27,248, 22,73,23,200,1,28,248,22,79,23,194,2,9,27,248,22,72,23,195,2,27, -28,248,22,139,14,23,195,2,23,194,1,28,248,22,138,14,23,195,2,249,22, -140,14,23,196,1,250,80,158,48,49,248,22,155,14,2,20,11,10,250,80,158, -46,49,248,22,155,14,2,20,23,197,1,10,28,23,193,2,249,22,71,248,22, -142,14,249,22,140,14,23,198,1,247,22,156,14,248,80,159,46,53,37,248,22, +28,248,22,140,14,23,195,2,23,194,1,28,248,22,139,14,23,195,2,249,22, +141,14,23,196,1,250,80,158,48,49,248,22,156,14,2,20,11,10,250,80,158, +46,49,248,22,156,14,2,20,23,197,1,10,28,23,193,2,249,22,71,248,22, +143,14,249,22,141,14,23,198,1,247,22,157,14,248,80,159,46,53,37,248,22, 73,23,199,1,87,94,23,193,1,248,80,159,44,53,37,248,22,73,23,197,1, 87,94,23,193,1,27,248,22,73,23,198,1,28,248,22,79,23,194,2,9,27, -248,22,72,23,195,2,27,28,248,22,139,14,23,195,2,23,194,1,28,248,22, -138,14,23,195,2,249,22,140,14,23,196,1,250,80,158,46,49,248,22,155,14, -2,20,11,10,250,80,158,44,49,248,22,155,14,2,20,23,197,1,10,28,23, -193,2,249,22,71,248,22,142,14,249,22,140,14,23,198,1,247,22,156,14,248, +248,22,72,23,195,2,27,28,248,22,140,14,23,195,2,23,194,1,28,248,22, +139,14,23,195,2,249,22,141,14,23,196,1,250,80,158,46,49,248,22,156,14, +2,20,11,10,250,80,158,44,49,248,22,156,14,2,20,23,197,1,10,28,23, +193,2,249,22,71,248,22,143,14,249,22,141,14,23,198,1,247,22,157,14,248, 80,159,44,53,37,248,22,73,23,199,1,248,80,159,42,53,37,248,22,73,196, -27,248,22,179,13,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,22, -176,6,23,195,2,27,248,22,137,14,195,28,192,192,248,22,138,14,195,11,87, -94,28,28,248,22,180,13,23,195,2,10,28,248,22,179,13,23,195,2,10,28, -248,22,176,6,23,195,2,28,248,22,137,14,23,195,2,10,248,22,138,14,23, +27,248,22,180,13,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,22, +176,6,23,195,2,27,248,22,138,14,195,28,192,192,248,22,139,14,195,11,87, +94,28,28,248,22,181,13,23,195,2,10,28,248,22,180,13,23,195,2,10,28, +248,22,176,6,23,195,2,28,248,22,138,14,23,195,2,10,248,22,139,14,23, 195,2,11,12,250,22,153,9,76,110,111,114,109,97,108,45,112,97,116,104,45, 99,97,115,101,6,42,42,112,97,116,104,32,40,102,111,114,32,97,110,121,32, 115,121,115,116,101,109,41,32,111,114,32,118,97,108,105,100,45,112,97,116,104, -32,115,116,114,105,110,103,23,197,2,28,28,248,22,180,13,23,195,2,249,22, -183,8,248,22,181,13,23,197,2,2,21,249,22,183,8,247,22,132,8,2,21, -27,28,248,22,176,6,23,196,2,23,195,2,248,22,186,7,248,22,184,13,23, -197,2,28,249,22,170,14,0,21,35,114,120,34,94,91,92,92,93,91,92,92, -93,91,63,93,91,92,92,93,34,23,195,2,28,248,22,176,6,195,248,22,187, -13,195,194,27,248,22,151,7,23,195,1,249,22,188,13,248,22,189,7,250,22, -178,14,0,6,35,114,120,34,47,34,28,249,22,170,14,0,22,35,114,120,34, +32,115,116,114,105,110,103,23,197,2,28,28,248,22,181,13,23,195,2,249,22, +183,8,248,22,182,13,23,197,2,2,21,249,22,183,8,247,22,132,8,2,21, +27,28,248,22,176,6,23,196,2,23,195,2,248,22,186,7,248,22,185,13,23, +197,2,28,249,22,171,14,0,21,35,114,120,34,94,91,92,92,93,91,92,92, +93,91,63,93,91,92,92,93,34,23,195,2,28,248,22,176,6,195,248,22,188, +13,195,194,27,248,22,151,7,23,195,1,249,22,189,13,248,22,189,7,250,22, +179,14,0,6,35,114,120,34,47,34,28,249,22,171,14,0,22,35,114,120,34, 91,47,92,92,93,91,46,32,93,43,91,47,92,92,93,42,36,34,23,201,2, -23,199,1,250,22,178,14,0,19,35,114,120,34,91,32,46,93,43,40,91,47, +23,199,1,250,22,179,14,0,19,35,114,120,34,91,32,46,93,43,40,91,47, 92,92,93,42,41,36,34,23,202,1,6,2,2,92,49,80,159,44,37,38,2, -21,28,248,22,176,6,194,248,22,187,13,194,193,87,94,28,28,248,22,179,13, -23,195,2,10,28,248,22,176,6,23,195,2,28,248,22,137,14,23,195,2,10, -248,22,138,14,23,195,2,11,12,250,22,153,9,23,196,2,2,22,23,197,2, -28,248,22,137,14,23,195,2,12,248,22,131,12,249,22,137,11,248,22,141,7, +21,28,248,22,176,6,194,248,22,188,13,194,193,87,94,28,28,248,22,180,13, +23,195,2,10,28,248,22,176,6,23,195,2,28,248,22,138,14,23,195,2,10, +248,22,139,14,23,195,2,11,12,250,22,153,9,23,196,2,2,22,23,197,2, +28,248,22,138,14,23,195,2,12,248,22,132,12,249,22,138,11,248,22,141,7, 250,22,160,7,2,23,23,200,1,23,201,1,247,22,23,87,94,28,28,248,22, -179,13,23,195,2,10,28,248,22,176,6,23,195,2,28,248,22,137,14,23,195, -2,10,248,22,138,14,23,195,2,11,12,250,22,153,9,23,196,2,2,22,23, -197,2,28,248,22,137,14,23,195,2,12,248,22,131,12,249,22,137,11,248,22, +180,13,23,195,2,10,28,248,22,176,6,23,195,2,28,248,22,138,14,23,195, +2,10,248,22,139,14,23,195,2,11,12,250,22,153,9,23,196,2,2,22,23, +197,2,28,248,22,138,14,23,195,2,12,248,22,132,12,249,22,138,11,248,22, 141,7,250,22,160,7,2,23,23,200,1,23,201,1,247,22,23,87,94,87,94, -28,28,248,22,179,13,23,195,2,10,28,248,22,176,6,23,195,2,28,248,22, -137,14,23,195,2,10,248,22,138,14,23,195,2,11,12,250,22,153,9,195,2, -22,23,197,2,28,248,22,137,14,23,195,2,12,248,22,131,12,249,22,137,11, +28,28,248,22,180,13,23,195,2,10,28,248,22,176,6,23,195,2,28,248,22, +138,14,23,195,2,10,248,22,139,14,23,195,2,11,12,250,22,153,9,195,2, +22,23,197,2,28,248,22,138,14,23,195,2,12,248,22,132,12,249,22,138,11, 248,22,141,7,250,22,160,7,2,23,199,23,201,1,247,22,23,249,22,3,89, -162,8,44,37,50,9,223,2,33,35,196,87,94,28,28,248,22,179,13,23,194, -2,10,28,248,22,176,6,23,194,2,28,248,22,137,14,23,194,2,10,248,22, -138,14,23,194,2,11,12,250,22,153,9,2,7,2,22,23,196,2,28,248,22, -137,14,23,194,2,12,248,22,131,12,249,22,137,11,248,22,141,7,250,22,160, +162,8,44,37,50,9,223,2,33,35,196,87,94,28,28,248,22,180,13,23,194, +2,10,28,248,22,176,6,23,194,2,28,248,22,138,14,23,194,2,10,248,22, +139,14,23,194,2,11,12,250,22,153,9,2,7,2,22,23,196,2,28,248,22, +138,14,23,194,2,12,248,22,132,12,249,22,138,11,248,22,141,7,250,22,160, 7,2,23,2,7,23,200,1,247,22,23,32,38,89,162,8,44,40,55,2,24, -222,33,39,28,248,22,79,23,197,2,87,94,23,196,1,248,22,131,12,249,22, -170,11,251,22,160,7,2,25,2,7,28,248,22,79,23,203,2,87,94,23,202, -1,23,201,1,250,22,1,22,133,14,23,204,1,23,205,1,23,200,1,247,22, -23,27,249,22,133,14,248,22,72,23,200,2,23,197,2,28,248,22,128,14,23, -194,2,27,250,22,1,22,133,14,23,197,1,199,28,248,22,128,14,193,192,251, +222,33,39,28,248,22,79,23,197,2,87,94,23,196,1,248,22,132,12,249,22, +171,11,251,22,160,7,2,25,2,7,28,248,22,79,23,203,2,87,94,23,202, +1,23,201,1,250,22,1,22,134,14,23,204,1,23,205,1,23,200,1,247,22, +23,27,249,22,134,14,248,22,72,23,200,2,23,197,2,28,248,22,129,14,23, +194,2,27,250,22,1,22,134,14,23,197,1,199,28,248,22,129,14,193,192,251, 2,38,198,199,200,248,22,73,202,251,2,38,197,198,199,248,22,73,201,87,94, -87,94,87,94,28,28,248,22,179,13,193,10,28,248,22,176,6,193,28,248,22, -137,14,193,10,248,22,138,14,193,11,12,250,22,153,9,2,7,2,22,195,28, -248,22,137,14,193,12,248,22,131,12,249,22,137,11,248,22,141,7,250,22,160, +87,94,87,94,28,28,248,22,180,13,193,10,28,248,22,176,6,193,28,248,22, +138,14,193,10,248,22,139,14,193,11,12,250,22,153,9,2,7,2,22,195,28, +248,22,138,14,193,12,248,22,132,12,249,22,138,11,248,22,141,7,250,22,160, 7,2,23,2,7,199,247,22,23,249,22,3,32,0,89,162,8,44,37,49,9, -222,33,37,195,27,247,22,157,14,251,2,38,196,197,198,196,32,41,89,162,44, +222,33,37,195,27,247,22,158,14,251,2,38,196,197,198,196,32,41,89,162,44, 42,59,2,24,222,33,42,28,248,22,79,23,199,2,87,94,23,198,1,248,23, 196,1,251,22,160,7,2,25,23,199,1,28,248,22,79,23,203,2,87,94,23, -202,1,23,201,1,250,22,1,22,133,14,23,204,1,23,205,1,23,198,1,27, -249,22,133,14,248,22,72,23,202,2,23,199,2,28,248,22,128,14,23,194,2, -27,250,22,1,22,133,14,23,197,1,23,202,2,28,248,22,128,14,23,194,2, +202,1,23,201,1,250,22,1,22,134,14,23,204,1,23,205,1,23,198,1,27, +249,22,134,14,248,22,72,23,202,2,23,199,2,28,248,22,129,14,23,194,2, +27,250,22,1,22,134,14,23,197,1,23,202,2,28,248,22,129,14,23,194,2, 192,87,94,23,193,1,27,248,22,73,23,202,1,28,248,22,79,23,194,2,87, 94,23,193,1,248,23,199,1,251,22,160,7,2,25,23,202,1,28,248,22,79, -23,206,2,87,94,23,205,1,23,204,1,250,22,1,22,133,14,23,207,1,23, -208,1,23,201,1,27,249,22,133,14,248,22,72,23,197,2,23,202,2,28,248, -22,128,14,23,194,2,27,250,22,1,22,133,14,23,197,1,204,28,248,22,128, +23,206,2,87,94,23,205,1,23,204,1,250,22,1,22,134,14,23,207,1,23, +208,1,23,201,1,27,249,22,134,14,248,22,72,23,197,2,23,202,2,28,248, +22,129,14,23,194,2,27,250,22,1,22,134,14,23,197,1,204,28,248,22,129, 14,193,192,253,2,41,203,204,205,206,23,15,248,22,73,201,253,2,41,202,203, 204,205,206,248,22,73,200,87,94,23,193,1,27,248,22,73,23,201,1,28,248, 22,79,23,194,2,87,94,23,193,1,248,23,198,1,251,22,160,7,2,25,23, 201,1,28,248,22,79,23,205,2,87,94,23,204,1,23,203,1,250,22,1,22, -133,14,23,206,1,23,207,1,23,200,1,27,249,22,133,14,248,22,72,23,197, -2,23,201,2,28,248,22,128,14,23,194,2,27,250,22,1,22,133,14,23,197, -1,203,28,248,22,128,14,193,192,253,2,41,202,203,204,205,206,248,22,73,201, -253,2,41,201,202,203,204,205,248,22,73,200,27,247,22,157,14,253,2,41,198, -199,200,201,202,198,87,95,28,28,248,22,180,13,23,194,2,10,28,248,22,179, -13,23,194,2,10,28,248,22,176,6,23,194,2,28,248,22,137,14,23,194,2, -10,248,22,138,14,23,194,2,11,12,252,22,153,9,23,200,2,2,26,36,23, +134,14,23,206,1,23,207,1,23,200,1,27,249,22,134,14,248,22,72,23,197, +2,23,201,2,28,248,22,129,14,23,194,2,27,250,22,1,22,134,14,23,197, +1,203,28,248,22,129,14,193,192,253,2,41,202,203,204,205,206,248,22,73,201, +253,2,41,201,202,203,204,205,248,22,73,200,27,247,22,158,14,253,2,41,198, +199,200,201,202,198,87,95,28,28,248,22,181,13,23,194,2,10,28,248,22,180, +13,23,194,2,10,28,248,22,176,6,23,194,2,28,248,22,138,14,23,194,2, +10,248,22,139,14,23,194,2,11,12,252,22,153,9,23,200,2,2,26,36,23, 198,2,23,199,2,28,28,248,22,176,6,23,195,2,10,248,22,165,7,23,195, 2,87,94,23,194,1,12,252,22,153,9,23,200,2,2,27,37,23,198,2,23, -199,1,91,159,39,11,90,161,39,36,11,248,22,136,14,23,197,2,87,94,23, +199,1,91,159,39,11,90,161,39,36,11,248,22,137,14,23,197,2,87,94,23, 195,1,87,94,28,192,12,250,22,154,9,23,201,1,2,28,23,199,1,249,22, -7,194,195,91,159,38,11,90,161,38,36,11,87,95,28,28,248,22,180,13,23, -196,2,10,28,248,22,179,13,23,196,2,10,28,248,22,176,6,23,196,2,28, -248,22,137,14,23,196,2,10,248,22,138,14,23,196,2,11,12,252,22,153,9, +7,194,195,91,159,38,11,90,161,38,36,11,87,95,28,28,248,22,181,13,23, +196,2,10,28,248,22,180,13,23,196,2,10,28,248,22,176,6,23,196,2,28, +248,22,138,14,23,196,2,10,248,22,139,14,23,196,2,11,12,252,22,153,9, 2,10,2,26,36,23,200,2,23,201,2,28,28,248,22,176,6,23,197,2,10, 248,22,165,7,23,197,2,12,252,22,153,9,2,10,2,27,37,23,200,2,23, -201,2,91,159,39,11,90,161,39,36,11,248,22,136,14,23,199,2,87,94,23, +201,2,91,159,39,11,90,161,39,36,11,248,22,137,14,23,199,2,87,94,23, 195,1,87,94,28,192,12,250,22,154,9,2,10,2,28,23,201,2,249,22,7, -194,195,27,249,22,189,13,250,22,177,14,0,20,35,114,120,35,34,40,63,58, -91,46,93,91,94,46,93,42,124,41,36,34,248,22,185,13,23,201,1,28,248, +194,195,27,249,22,190,13,250,22,178,14,0,20,35,114,120,35,34,40,63,58, +91,46,93,91,94,46,93,42,124,41,36,34,248,22,186,13,23,201,1,28,248, 22,176,6,23,203,2,249,22,189,7,23,204,1,8,63,23,202,1,28,248,22, -180,13,23,199,2,248,22,181,13,23,199,1,87,94,23,198,1,247,22,182,13, -28,248,22,179,13,194,249,22,133,14,195,194,192,91,159,38,11,90,161,38,36, -11,87,95,28,28,248,22,180,13,23,196,2,10,28,248,22,179,13,23,196,2, -10,28,248,22,176,6,23,196,2,28,248,22,137,14,23,196,2,10,248,22,138, +181,13,23,199,2,248,22,182,13,23,199,1,87,94,23,198,1,247,22,183,13, +28,248,22,180,13,194,249,22,134,14,195,194,192,91,159,38,11,90,161,38,36, +11,87,95,28,28,248,22,181,13,23,196,2,10,28,248,22,180,13,23,196,2, +10,28,248,22,176,6,23,196,2,28,248,22,138,14,23,196,2,10,248,22,139, 14,23,196,2,11,12,252,22,153,9,2,11,2,26,36,23,200,2,23,201,2, 28,28,248,22,176,6,23,197,2,10,248,22,165,7,23,197,2,12,252,22,153, 9,2,11,2,27,37,23,200,2,23,201,2,91,159,39,11,90,161,39,36,11, -248,22,136,14,23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,154,9, -2,11,2,28,23,201,2,249,22,7,194,195,27,249,22,189,13,249,22,175,7, -250,22,178,14,0,9,35,114,120,35,34,91,46,93,34,248,22,185,13,23,203, +248,22,137,14,23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,154,9, +2,11,2,28,23,201,2,249,22,7,194,195,27,249,22,190,13,249,22,175,7, +250,22,179,14,0,9,35,114,120,35,34,91,46,93,34,248,22,186,13,23,203, 1,6,1,1,95,28,248,22,176,6,23,202,2,249,22,189,7,23,203,1,8, -63,23,201,1,28,248,22,180,13,23,199,2,248,22,181,13,23,199,1,87,94, -23,198,1,247,22,182,13,28,248,22,179,13,194,249,22,133,14,195,194,192,249, +63,23,201,1,28,248,22,181,13,23,199,2,248,22,182,13,23,199,1,87,94, +23,198,1,247,22,183,13,28,248,22,180,13,194,249,22,134,14,195,194,192,249, 247,22,143,5,194,11,249,80,159,38,47,37,9,9,249,80,159,38,47,37,195, -9,27,247,22,159,14,249,80,158,39,48,28,23,195,2,27,248,22,130,8,6, +9,27,247,22,160,14,249,80,158,39,48,28,23,195,2,27,248,22,130,8,6, 11,11,80,76,84,67,79,76,76,69,67,84,83,28,192,192,6,0,0,6,0, -0,27,28,23,196,1,250,22,133,14,248,22,155,14,69,97,100,100,111,110,45, +0,27,28,23,196,1,250,22,134,14,248,22,156,14,69,97,100,100,111,110,45, 100,105,114,247,22,128,8,6,8,8,99,111,108,108,101,99,116,115,11,27,248, -80,159,42,53,37,250,22,85,23,203,1,248,22,81,248,22,155,14,72,99,111, +80,159,42,53,37,250,22,85,23,203,1,248,22,81,248,22,156,14,72,99,111, 108,108,101,99,116,115,45,100,105,114,23,204,1,28,193,249,22,71,195,194,192, -32,51,89,162,8,44,39,8,31,2,19,222,33,52,27,249,22,166,14,23,197, +32,51,89,162,8,44,39,8,31,2,19,222,33,52,27,249,22,167,14,23,197, 2,23,198,2,28,23,193,2,87,94,23,196,1,27,248,22,96,23,195,2,27, -27,248,22,105,23,197,1,27,249,22,166,14,23,201,2,23,196,2,28,23,193, +27,248,22,105,23,197,1,27,249,22,167,14,23,201,2,23,196,2,28,23,193, 2,87,94,23,194,1,27,248,22,96,23,195,2,27,27,248,22,105,23,197,1, -27,249,22,166,14,23,205,2,23,196,2,28,23,193,2,87,94,23,194,1,27, -248,22,96,23,195,2,27,27,248,22,105,23,197,1,27,249,22,166,14,23,209, +27,249,22,167,14,23,205,2,23,196,2,28,23,193,2,87,94,23,194,1,27, +248,22,96,23,195,2,27,27,248,22,105,23,197,1,27,249,22,167,14,23,209, 2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,96,23,195,2,27, -27,248,22,105,23,197,1,27,249,22,166,14,23,213,2,23,196,2,28,23,193, +27,248,22,105,23,197,1,27,249,22,167,14,23,213,2,23,196,2,28,23,193, 2,87,94,23,194,1,27,248,22,96,23,195,2,27,250,2,51,23,215,2,23, 216,1,248,22,105,23,199,1,28,249,22,171,7,23,196,2,2,29,249,22,85, -23,214,2,194,249,22,71,248,22,188,13,23,197,1,194,87,95,23,211,1,23, +23,214,2,194,249,22,71,248,22,189,13,23,197,1,194,87,95,23,211,1,23, 193,1,28,249,22,171,7,23,196,2,2,29,249,22,85,23,212,2,9,249,22, -71,248,22,188,13,23,197,1,9,28,249,22,171,7,23,196,2,2,29,249,22, -85,23,210,2,194,249,22,71,248,22,188,13,23,197,1,194,87,94,23,193,1, +71,248,22,189,13,23,197,1,9,28,249,22,171,7,23,196,2,2,29,249,22, +85,23,210,2,194,249,22,71,248,22,189,13,23,197,1,194,87,94,23,193,1, 28,249,22,171,7,23,196,2,2,29,249,22,85,23,208,2,9,249,22,71,248, -22,188,13,23,197,1,9,28,249,22,171,7,23,196,2,2,29,249,22,85,23, -206,2,194,249,22,71,248,22,188,13,23,197,1,194,87,94,23,193,1,28,249, -22,171,7,23,196,2,2,29,249,22,85,23,204,2,9,249,22,71,248,22,188, +22,189,13,23,197,1,9,28,249,22,171,7,23,196,2,2,29,249,22,85,23, +206,2,194,249,22,71,248,22,189,13,23,197,1,194,87,94,23,193,1,28,249, +22,171,7,23,196,2,2,29,249,22,85,23,204,2,9,249,22,71,248,22,189, 13,23,197,1,9,28,249,22,171,7,23,196,2,2,29,249,22,85,23,202,2, -194,249,22,71,248,22,188,13,23,197,1,194,87,94,23,193,1,28,249,22,171, -7,23,196,2,2,29,249,22,85,23,200,2,9,249,22,71,248,22,188,13,23, +194,249,22,71,248,22,189,13,23,197,1,194,87,94,23,193,1,28,249,22,171, +7,23,196,2,2,29,249,22,85,23,200,2,9,249,22,71,248,22,189,13,23, 197,1,9,28,249,22,171,7,23,196,2,2,29,249,22,85,197,194,87,94,23, -196,1,249,22,71,248,22,188,13,23,197,1,194,87,94,23,193,1,28,249,22, +196,1,249,22,71,248,22,189,13,23,197,1,194,87,94,23,193,1,28,249,22, 171,7,23,198,2,2,29,249,22,85,195,9,87,94,23,194,1,249,22,71,248, -22,188,13,23,199,1,9,87,95,28,28,248,22,165,7,194,10,248,22,176,6, +22,189,13,23,199,1,9,87,95,28,28,248,22,165,7,194,10,248,22,176,6, 194,12,250,22,153,9,2,14,6,21,21,98,121,116,101,32,115,116,114,105,110, 103,32,111,114,32,115,116,114,105,110,103,196,28,28,248,22,80,195,249,22,4, -22,179,13,196,11,12,250,22,153,9,2,14,6,13,13,108,105,115,116,32,111, +22,180,13,196,11,12,250,22,153,9,2,14,6,13,13,108,105,115,116,32,111, 102,32,112,97,116,104,115,197,250,2,51,197,195,28,248,22,176,6,197,248,22, 188,7,197,196,32,54,89,162,8,44,39,53,70,102,111,117,110,100,45,101,120, 101,99,222,33,57,32,55,89,162,8,44,40,58,64,110,101,120,116,222,33,56, -27,248,22,141,14,23,196,2,28,249,22,185,8,23,195,2,23,197,1,11,28, -248,22,137,14,23,194,2,27,249,22,133,14,23,197,1,23,196,1,28,23,197, -2,91,159,39,11,90,161,39,36,11,248,22,136,14,23,197,2,87,95,23,195, -1,23,194,1,27,28,23,202,2,27,248,22,141,14,23,199,2,28,249,22,185, -8,23,195,2,23,200,2,11,28,248,22,137,14,23,194,2,250,2,54,23,205, -2,23,206,2,249,22,133,14,23,200,2,23,198,1,250,2,54,23,205,2,23, -206,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,179, -13,23,196,2,27,249,22,133,14,23,198,2,23,205,2,28,28,248,22,128,14, -193,10,248,22,191,13,193,192,11,11,28,23,193,2,192,87,94,23,193,1,28, -23,203,2,11,27,248,22,141,14,23,200,2,28,249,22,185,8,23,195,2,23, -201,1,11,28,248,22,137,14,23,194,2,250,2,54,23,206,1,23,207,1,249, -22,133,14,23,201,1,23,198,1,250,2,54,205,206,195,192,87,94,23,194,1, -28,23,196,2,91,159,39,11,90,161,39,36,11,248,22,136,14,23,197,2,87, -95,23,195,1,23,194,1,27,28,23,201,2,27,248,22,141,14,23,199,2,28, -249,22,185,8,23,195,2,23,200,2,11,28,248,22,137,14,23,194,2,250,2, -54,23,204,2,23,205,2,249,22,133,14,23,200,2,23,198,1,250,2,54,23, +27,248,22,142,14,23,196,2,28,249,22,185,8,23,195,2,23,197,1,11,28, +248,22,138,14,23,194,2,27,249,22,134,14,23,197,1,23,196,1,28,23,197, +2,91,159,39,11,90,161,39,36,11,248,22,137,14,23,197,2,87,95,23,195, +1,23,194,1,27,28,23,202,2,27,248,22,142,14,23,199,2,28,249,22,185, +8,23,195,2,23,200,2,11,28,248,22,138,14,23,194,2,250,2,54,23,205, +2,23,206,2,249,22,134,14,23,200,2,23,198,1,250,2,54,23,205,2,23, +206,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,180, +13,23,196,2,27,249,22,134,14,23,198,2,23,205,2,28,28,248,22,129,14, +193,10,248,22,128,14,193,192,11,11,28,23,193,2,192,87,94,23,193,1,28, +23,203,2,11,27,248,22,142,14,23,200,2,28,249,22,185,8,23,195,2,23, +201,1,11,28,248,22,138,14,23,194,2,250,2,54,23,206,1,23,207,1,249, +22,134,14,23,201,1,23,198,1,250,2,54,205,206,195,192,87,94,23,194,1, +28,23,196,2,91,159,39,11,90,161,39,36,11,248,22,137,14,23,197,2,87, +95,23,195,1,23,194,1,27,28,23,201,2,27,248,22,142,14,23,199,2,28, +249,22,185,8,23,195,2,23,200,2,11,28,248,22,138,14,23,194,2,250,2, +54,23,204,2,23,205,2,249,22,134,14,23,200,2,23,198,1,250,2,54,23, 204,2,23,205,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,28, -248,22,179,13,23,196,2,27,249,22,133,14,23,198,2,23,204,2,28,28,248, -22,128,14,193,10,248,22,191,13,193,192,11,11,28,23,193,2,192,87,94,23, -193,1,28,23,202,2,11,27,248,22,141,14,23,200,2,28,249,22,185,8,23, -195,2,23,201,1,11,28,248,22,137,14,23,194,2,250,2,54,23,205,1,23, -206,1,249,22,133,14,23,201,1,23,198,1,250,2,54,204,205,195,192,28,23, -193,2,91,159,39,11,90,161,39,36,11,248,22,136,14,23,199,2,87,95,23, +248,22,180,13,23,196,2,27,249,22,134,14,23,198,2,23,204,2,28,28,248, +22,129,14,193,10,248,22,128,14,193,192,11,11,28,23,193,2,192,87,94,23, +193,1,28,23,202,2,11,27,248,22,142,14,23,200,2,28,249,22,185,8,23, +195,2,23,201,1,11,28,248,22,138,14,23,194,2,250,2,54,23,205,1,23, +206,1,249,22,134,14,23,201,1,23,198,1,250,2,54,204,205,195,192,28,23, +193,2,91,159,39,11,90,161,39,36,11,248,22,137,14,23,199,2,87,95,23, 195,1,23,194,1,27,28,23,198,2,251,2,55,23,198,2,23,203,2,23,201, -2,23,202,2,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,179,13, -195,27,249,22,133,14,197,200,28,28,248,22,128,14,193,10,248,22,191,13,193, +2,23,202,2,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,180,13, +195,27,249,22,134,14,197,200,28,28,248,22,129,14,193,10,248,22,128,14,193, 192,11,11,28,192,192,28,198,11,251,2,55,198,203,201,202,194,32,58,89,162, 8,44,40,8,31,2,19,222,33,59,28,248,22,79,23,197,2,11,27,248,22, -140,14,248,22,72,23,199,2,27,249,22,133,14,23,196,1,23,197,2,28,248, -22,191,13,23,194,2,250,2,54,198,199,195,87,94,23,193,1,27,248,22,73, -23,200,1,28,248,22,79,23,194,2,11,27,248,22,140,14,248,22,72,23,196, -2,27,249,22,133,14,23,196,1,23,200,2,28,248,22,191,13,23,194,2,250, +141,14,248,22,72,23,199,2,27,249,22,134,14,23,196,1,23,197,2,28,248, +22,128,14,23,194,2,250,2,54,198,199,195,87,94,23,193,1,27,248,22,73, +23,200,1,28,248,22,79,23,194,2,11,27,248,22,141,14,248,22,72,23,196, +2,27,249,22,134,14,23,196,1,23,200,2,28,248,22,128,14,23,194,2,250, 2,54,201,202,195,87,94,23,193,1,27,248,22,73,23,197,1,28,248,22,79, -23,194,2,11,27,248,22,140,14,248,22,72,23,196,2,27,249,22,133,14,23, -196,1,23,203,2,28,248,22,191,13,23,194,2,250,2,54,204,205,195,87,94, +23,194,2,11,27,248,22,141,14,248,22,72,23,196,2,27,249,22,134,14,23, +196,1,23,203,2,28,248,22,128,14,23,194,2,250,2,54,204,205,195,87,94, 23,193,1,27,248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22, -140,14,248,22,72,23,196,2,27,249,22,133,14,23,196,1,23,206,2,28,248, -22,191,13,23,194,2,250,2,54,23,15,23,16,195,87,94,23,193,1,27,248, -22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22,140,14,248,22,72, -23,196,2,27,249,22,133,14,23,196,1,23,209,2,28,248,22,191,13,23,194, +141,14,248,22,72,23,196,2,27,249,22,134,14,23,196,1,23,206,2,28,248, +22,128,14,23,194,2,250,2,54,23,15,23,16,195,87,94,23,193,1,27,248, +22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22,141,14,248,22,72, +23,196,2,27,249,22,134,14,23,196,1,23,209,2,28,248,22,128,14,23,194, 2,250,2,54,23,18,23,19,195,87,94,23,193,1,27,248,22,73,23,197,1, -28,248,22,79,23,194,2,11,27,248,22,140,14,248,22,72,195,27,249,22,133, -14,23,196,1,23,19,28,248,22,191,13,193,250,2,54,23,21,23,22,195,251, -2,58,23,21,23,22,23,23,248,22,73,199,87,95,28,28,248,22,179,13,23, -195,2,10,28,248,22,176,6,23,195,2,28,248,22,137,14,23,195,2,10,248, -22,138,14,23,195,2,11,12,250,22,153,9,2,15,6,25,25,112,97,116,104, +28,248,22,79,23,194,2,11,27,248,22,141,14,248,22,72,195,27,249,22,134, +14,23,196,1,23,19,28,248,22,128,14,193,250,2,54,23,21,23,22,195,251, +2,58,23,21,23,22,23,23,248,22,73,199,87,95,28,28,248,22,180,13,23, +195,2,10,28,248,22,176,6,23,195,2,28,248,22,138,14,23,195,2,10,248, +22,139,14,23,195,2,11,12,250,22,153,9,2,15,6,25,25,112,97,116,104, 32,111,114,32,115,116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,41, -23,197,2,28,28,23,195,2,28,28,248,22,179,13,23,196,2,10,28,248,22, -176,6,23,196,2,28,248,22,137,14,23,196,2,10,248,22,138,14,23,196,2, -11,248,22,137,14,23,196,2,11,10,12,250,22,153,9,2,15,6,29,29,35, +23,197,2,28,28,23,195,2,28,28,248,22,180,13,23,196,2,10,28,248,22, +176,6,23,196,2,28,248,22,138,14,23,196,2,10,248,22,139,14,23,196,2, +11,248,22,138,14,23,196,2,11,10,12,250,22,153,9,2,15,6,29,29,35, 102,32,111,114,32,114,101,108,97,116,105,118,101,32,112,97,116,104,32,111,114, -32,115,116,114,105,110,103,23,198,2,28,28,248,22,137,14,23,195,2,91,159, -39,11,90,161,39,36,11,248,22,136,14,23,198,2,249,22,183,8,194,68,114, +32,115,116,114,105,110,103,23,198,2,28,28,248,22,138,14,23,195,2,91,159, +39,11,90,161,39,36,11,248,22,137,14,23,198,2,249,22,183,8,194,68,114, 101,108,97,116,105,118,101,11,27,248,22,130,8,6,4,4,80,65,84,72,27, 28,23,194,2,27,249,80,159,41,48,38,23,197,1,9,28,249,22,183,8,247, -22,132,8,2,21,249,22,71,248,22,188,13,5,1,46,194,192,87,94,23,194, -1,9,28,248,22,79,23,194,2,11,27,248,22,140,14,248,22,72,23,196,2, -27,249,22,133,14,23,196,1,23,200,2,28,248,22,191,13,23,194,2,250,2, +22,132,8,2,21,249,22,71,248,22,189,13,5,1,46,194,192,87,94,23,194, +1,9,28,248,22,79,23,194,2,11,27,248,22,141,14,248,22,72,23,196,2, +27,249,22,134,14,23,196,1,23,200,2,28,248,22,128,14,23,194,2,250,2, 54,201,202,195,87,94,23,193,1,27,248,22,73,23,197,1,28,248,22,79,23, -194,2,11,27,248,22,140,14,248,22,72,23,196,2,27,249,22,133,14,23,196, -1,23,203,2,28,248,22,191,13,23,194,2,250,2,54,204,205,195,87,94,23, -193,1,27,248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22,140, -14,248,22,72,195,27,249,22,133,14,23,196,1,205,28,248,22,191,13,193,250, +194,2,11,27,248,22,141,14,248,22,72,23,196,2,27,249,22,134,14,23,196, +1,23,203,2,28,248,22,128,14,23,194,2,250,2,54,204,205,195,87,94,23, +193,1,27,248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22,141, +14,248,22,72,195,27,249,22,134,14,23,196,1,205,28,248,22,128,14,193,250, 2,54,23,15,23,16,195,251,2,58,23,15,23,16,23,17,248,22,73,199,27, -248,22,140,14,23,196,1,28,248,22,191,13,193,250,2,54,198,199,195,11,250, +248,22,141,14,23,196,1,28,248,22,128,14,193,250,2,54,198,199,195,11,250, 80,159,39,49,37,196,197,11,250,80,159,39,49,37,196,11,11,87,94,249,22, 167,6,247,22,139,5,195,248,22,129,6,249,22,184,3,36,249,22,168,3,197, 198,27,28,23,197,2,87,95,23,196,1,23,195,1,23,197,1,87,94,23,197, -1,27,248,22,155,14,2,20,27,249,80,159,41,49,37,23,196,1,11,27,27, +1,27,248,22,156,14,2,20,27,249,80,159,41,49,37,23,196,1,11,27,27, 248,22,187,3,23,200,1,28,192,192,36,27,27,248,22,187,3,23,202,1,28, 192,192,36,249,22,170,5,23,197,1,83,158,40,20,100,95,89,162,8,44,36, 48,9,224,3,2,33,63,23,195,1,23,196,1,27,248,22,155,5,23,195,1, @@ -388,7 +388,7 @@ 33,47,80,159,36,46,37,83,158,36,16,2,83,158,39,20,99,96,2,13,89, 162,44,36,44,9,223,0,33,48,89,162,44,37,45,9,223,0,33,49,89,162, 44,38,55,9,223,0,33,50,80,159,36,47,37,83,158,36,16,2,27,248,22, -162,14,248,22,188,7,27,28,249,22,183,8,247,22,132,8,2,21,6,1,1, +163,14,248,22,188,7,27,28,249,22,183,8,247,22,132,8,2,21,6,1,1, 59,6,1,1,58,250,22,160,7,6,14,14,40,91,94,126,97,93,42,41,126, 97,40,46,42,41,23,196,2,23,196,1,89,162,8,44,38,48,2,14,223,0, 33,53,80,159,36,48,37,83,158,36,16,2,83,158,39,20,99,96,2,15,89, @@ -400,13 +400,13 @@ EVAL_ONE_SIZED_STR((char *)expr, 6245); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,48,46,51,9,0,0,0,1,0,0,10,0,16,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,48,46,52,9,0,0,0,1,0,0,10,0,16,0, 29,0,44,0,58,0,72,0,86,0,128,0,0,0,57,1,0,0,69,35,37, 98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2,2,67,35,37,117, 116,105,108,115,11,29,94,2,2,69,35,37,110,101,116,119,111,114,107,11,29, 94,2,2,68,35,37,112,97,114,97,109,122,11,29,94,2,2,68,35,37,101, 120,112,111,98,115,11,29,94,2,2,68,35,37,107,101,114,110,101,108,11,97, -36,11,8,240,58,75,0,0,98,159,2,3,36,36,159,2,4,36,36,159,2, +36,11,8,240,96,82,0,0,98,159,2,3,36,36,159,2,4,36,36,159,2, 5,36,36,159,2,6,36,36,159,2,7,36,36,159,2,7,36,36,16,0,159, 36,20,105,159,36,16,1,11,16,0,83,158,42,20,103,145,2,1,2,1,29, 11,11,11,11,11,18,96,11,44,44,44,36,80,158,36,36,20,105,159,36,16, @@ -420,7 +420,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 352); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,48,46,51,74,0,0,0,1,0,0,7,0,18,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,48,46,52,74,0,0,0,1,0,0,7,0,18,0, 45,0,51,0,64,0,73,0,80,0,102,0,124,0,150,0,162,0,180,0,200, 0,212,0,228,0,251,0,7,1,38,1,45,1,50,1,55,1,60,1,65,1, 70,1,79,1,84,1,88,1,94,1,101,1,107,1,115,1,124,1,145,1,166, @@ -446,40 +446,40 @@ 109,101,5,3,46,122,111,5,3,46,122,111,6,6,6,110,97,116,105,118,101, 64,108,111,111,112,63,108,105,98,6,3,3,46,115,115,6,4,4,46,114,107, 116,5,4,46,114,107,116,67,105,103,110,111,114,101,100,249,22,14,195,80,159, -38,46,38,250,22,133,14,23,197,1,23,199,1,249,80,159,43,39,38,23,198, -1,2,23,250,22,133,14,23,197,1,23,199,1,249,80,159,43,39,38,23,198, -1,2,24,252,22,133,14,23,199,1,23,201,1,2,25,247,22,133,8,249,80, -159,45,39,38,23,200,1,80,159,45,36,38,252,22,133,14,23,199,1,23,201, +38,46,38,250,22,134,14,23,197,1,23,199,1,249,80,159,43,39,38,23,198, +1,2,23,250,22,134,14,23,197,1,23,199,1,249,80,159,43,39,38,23,198, +1,2,24,252,22,134,14,23,199,1,23,201,1,2,25,247,22,133,8,249,80, +159,45,39,38,23,200,1,80,159,45,36,38,252,22,134,14,23,199,1,23,201, 1,2,25,247,22,133,8,249,80,159,45,39,38,23,200,1,80,159,45,36,38, -27,252,22,133,14,23,200,1,23,202,1,2,25,247,22,133,8,249,80,159,46, -39,38,23,201,1,80,159,46,36,38,27,250,22,150,14,196,11,32,0,89,162, -8,44,36,41,9,222,11,28,192,249,22,71,195,194,11,27,252,22,133,14,23, +27,252,22,134,14,23,200,1,23,202,1,2,25,247,22,133,8,249,80,159,46, +39,38,23,201,1,80,159,46,36,38,27,250,22,151,14,196,11,32,0,89,162, +8,44,36,41,9,222,11,28,192,249,22,71,195,194,11,27,252,22,134,14,23, 200,1,23,202,1,2,25,247,22,133,8,249,80,159,46,39,38,23,201,1,80, -159,46,36,38,27,250,22,150,14,196,11,32,0,89,162,8,44,36,41,9,222, -11,28,192,249,22,71,195,194,11,27,250,22,133,14,23,198,1,23,200,1,249, -80,159,44,39,38,23,199,1,2,23,27,250,22,150,14,196,11,32,0,89,162, -8,44,36,41,9,222,11,28,192,249,22,71,195,194,11,27,250,22,133,14,23, -198,1,23,200,1,249,80,159,44,39,38,23,199,1,2,24,27,250,22,150,14, +159,46,36,38,27,250,22,151,14,196,11,32,0,89,162,8,44,36,41,9,222, +11,28,192,249,22,71,195,194,11,27,250,22,134,14,23,198,1,23,200,1,249, +80,159,44,39,38,23,199,1,2,23,27,250,22,151,14,196,11,32,0,89,162, +8,44,36,41,9,222,11,28,192,249,22,71,195,194,11,27,250,22,134,14,23, +198,1,23,200,1,249,80,159,44,39,38,23,199,1,2,24,27,250,22,151,14, 196,11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,71,195,194,11, 87,94,28,248,80,159,37,38,38,23,195,2,12,250,22,153,9,77,108,111,97, 100,47,117,115,101,45,99,111,109,112,105,108,101,100,6,25,25,112,97,116,104, 32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103, -23,197,2,91,159,46,11,90,161,37,36,11,28,248,22,139,14,23,205,2,23, -204,2,27,247,22,144,5,28,23,193,2,249,22,140,14,23,207,2,23,195,1, -23,205,2,90,161,39,37,11,248,22,136,14,23,205,1,87,94,23,196,1,90, -161,38,40,11,28,23,205,2,27,248,22,184,13,23,197,2,27,248,22,168,7, +23,197,2,91,159,46,11,90,161,37,36,11,28,248,22,140,14,23,205,2,23, +204,2,27,247,22,144,5,28,23,193,2,249,22,141,14,23,207,2,23,195,1, +23,205,2,90,161,39,37,11,248,22,137,14,23,205,1,87,94,23,196,1,90, +161,38,40,11,28,23,205,2,27,248,22,185,13,23,197,2,27,248,22,168,7, 23,195,2,28,28,249,22,180,3,23,195,2,40,249,22,171,7,5,4,46,114, 107,116,249,22,174,7,23,198,2,249,22,168,3,23,199,2,40,11,249,22,7, -23,199,2,248,22,188,13,249,22,175,7,250,22,174,7,23,202,1,36,249,22, +23,199,2,248,22,189,13,249,22,175,7,250,22,174,7,23,202,1,36,249,22, 168,3,23,203,1,40,5,3,46,115,115,249,22,7,23,199,2,11,249,22,7, 23,197,2,11,90,161,37,42,11,28,249,22,183,8,23,199,2,23,197,2,23, -193,2,249,22,133,14,23,196,2,23,199,2,90,161,37,43,11,28,23,198,2, +193,2,249,22,134,14,23,196,2,23,199,2,90,161,37,43,11,28,23,198,2, 28,249,22,183,8,23,200,2,23,197,1,23,193,1,87,94,23,193,1,249,22, -133,14,23,196,2,23,200,2,87,94,23,195,1,11,90,161,37,44,11,28,249, +134,14,23,196,2,23,200,2,87,94,23,195,1,11,90,161,37,44,11,28,249, 22,183,8,23,196,2,68,114,101,108,97,116,105,118,101,87,94,23,194,1,2, -22,23,194,1,90,161,37,45,11,247,22,158,14,27,27,250,22,150,14,23,204, +22,23,194,1,90,161,37,45,11,247,22,159,14,27,27,250,22,151,14,23,204, 2,11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,71,23,203,2, -194,11,27,28,23,202,2,28,23,194,2,11,27,250,22,150,14,23,206,2,11, +194,11,27,28,23,202,2,28,23,194,2,11,27,250,22,151,14,23,206,2,11, 32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,71,23,205,2,194,11, 11,27,28,23,195,2,23,195,2,23,194,2,27,89,162,44,37,50,62,122,111, 225,14,12,8,33,33,27,89,162,44,37,50,66,97,108,116,45,122,111,225,15, @@ -494,8 +494,8 @@ 23,199,1,23,198,1,23,196,1,23,195,1,23,194,1,20,14,159,80,159,56, 40,38,250,80,159,59,41,38,249,22,27,11,80,159,8,25,40,38,22,168,4, 11,20,14,159,80,159,56,40,38,250,80,159,59,41,38,249,22,27,11,80,159, -8,25,40,38,22,144,5,28,248,22,179,13,23,215,2,23,214,1,87,94,23, -214,1,247,22,156,14,249,247,22,161,14,248,22,72,195,23,24,87,94,23,193, +8,25,40,38,22,144,5,28,248,22,180,13,23,215,2,23,214,1,87,94,23, +214,1,247,22,157,14,249,247,22,162,14,248,22,72,195,23,24,87,94,23,193, 1,27,28,23,195,2,28,23,197,1,27,249,22,5,89,162,8,44,37,53,9, 225,24,22,19,33,38,23,216,2,27,28,23,204,2,11,193,28,192,192,28,193, 28,203,28,249,22,180,3,248,22,73,196,248,22,73,206,193,11,11,11,11,87, @@ -503,8 +503,8 @@ 208,1,23,201,1,23,200,1,23,199,1,23,196,1,23,195,1,20,14,159,80, 159,57,40,38,250,80,159,8,24,41,38,249,22,27,11,80,159,8,26,40,38, 22,168,4,23,214,1,20,14,159,80,159,57,40,38,250,80,159,8,24,41,38, -249,22,27,11,80,159,8,26,40,38,22,144,5,28,248,22,179,13,23,216,2, -23,215,1,87,94,23,215,1,247,22,156,14,249,247,22,161,14,248,22,72,195, +249,22,27,11,80,159,8,26,40,38,22,144,5,28,248,22,180,13,23,216,2, +23,215,1,87,94,23,215,1,247,22,157,14,249,247,22,162,14,248,22,72,195, 23,25,87,94,23,193,1,27,28,23,197,2,28,23,201,1,27,249,22,5,83, 158,40,20,100,94,89,162,8,44,37,51,9,225,25,23,19,33,39,23,212,1, 23,217,2,27,28,23,204,2,11,193,28,192,192,28,193,28,23,204,2,28,249, @@ -513,8 +513,8 @@ 211,1,23,210,1,23,202,1,23,200,1,23,197,1,23,196,1,20,14,159,80, 159,58,40,38,250,80,159,8,25,41,38,249,22,27,11,80,159,8,27,40,38, 22,168,4,11,20,14,159,80,159,58,40,38,250,80,159,8,25,41,38,249,22, -27,11,80,159,8,27,40,38,22,144,5,28,248,22,179,13,23,217,2,23,216, -1,87,94,23,216,1,247,22,156,14,249,247,22,142,5,248,22,72,195,23,26, +27,11,80,159,8,27,40,38,22,144,5,28,248,22,180,13,23,217,2,23,216, +1,87,94,23,216,1,247,22,157,14,249,247,22,142,5,248,22,72,195,23,26, 87,94,23,193,1,27,28,23,197,1,28,23,201,1,27,249,22,5,83,158,40, 20,100,94,89,162,8,44,37,51,9,225,26,24,21,33,40,23,214,1,23,218, 1,27,28,23,205,2,11,193,28,192,192,28,193,28,204,28,249,22,180,3,248, @@ -522,21 +522,21 @@ 87,94,23,201,1,11,28,23,193,2,87,95,23,212,1,23,198,1,20,14,159, 80,159,59,40,38,250,80,159,8,26,41,38,249,22,27,11,80,159,8,28,40, 38,22,168,4,23,216,1,20,14,159,80,159,59,40,38,250,80,159,8,26,41, -38,249,22,27,11,80,159,8,28,40,38,22,144,5,28,248,22,179,13,23,218, -2,23,217,1,87,94,23,217,1,247,22,156,14,249,247,22,142,5,248,22,72, +38,249,22,27,11,80,159,8,28,40,38,22,144,5,28,248,22,180,13,23,218, +2,23,217,1,87,94,23,217,1,247,22,157,14,249,247,22,142,5,248,22,72, 195,23,27,87,94,23,193,1,27,28,23,199,2,87,94,23,214,1,23,213,1, 87,94,23,213,1,23,214,1,20,14,159,80,159,8,24,40,38,250,80,159,8, 27,41,38,249,22,27,11,80,159,8,29,40,38,22,168,4,28,23,29,28,23, 202,1,11,195,87,94,23,202,1,11,20,14,159,80,159,8,24,40,38,250,80, 159,8,27,41,38,249,22,27,11,80,159,8,29,40,38,22,144,5,28,248,22, -179,13,23,219,2,23,218,1,87,94,23,218,1,247,22,156,14,249,247,22,142, +180,13,23,219,2,23,218,1,87,94,23,218,1,247,22,157,14,249,247,22,142, 5,194,23,28,0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42,41, -36,34,32,43,89,162,8,44,37,59,2,26,222,33,44,27,249,22,166,14,2, +36,34,32,43,89,162,8,44,37,59,2,26,222,33,44,27,249,22,167,14,2, 42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196, -2,27,248,22,105,23,197,1,27,249,22,166,14,2,42,23,196,2,28,23,193, +2,27,248,22,105,23,197,1,27,249,22,167,14,2,42,23,196,2,28,23,193, 2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197, -1,27,249,22,166,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249, -22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,166,14,2, +1,27,249,22,167,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249, +22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,167,14,2, 42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196, 2,248,2,43,248,22,105,23,197,1,248,22,81,194,248,22,81,194,248,22,81, 194,248,22,81,194,32,45,89,162,44,37,55,2,26,222,33,46,28,248,22,79, @@ -546,12 +546,12 @@ 79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,90,161, 38,36,11,248,2,45,248,22,73,196,249,22,7,249,22,71,248,22,72,199,196, 195,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248,22, -72,199,196,195,27,27,249,22,166,14,2,42,23,197,2,28,23,193,2,87,94, +72,199,196,195,27,27,249,22,167,14,2,42,23,197,2,28,23,193,2,87,94, 23,195,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249, -22,166,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248, -22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,166,14,2,42,23,196, +22,167,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248, +22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,167,14,2,42,23,196, 2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248, -22,105,23,197,1,27,249,22,166,14,2,42,23,196,2,28,23,193,2,87,94, +22,105,23,197,1,27,249,22,167,14,2,42,23,196,2,28,23,193,2,87,94, 23,194,1,249,22,71,248,22,96,23,196,2,248,2,43,248,22,105,23,197,1, 248,22,81,194,248,22,81,194,248,22,81,194,248,22,81,195,28,23,195,1,192, 28,248,22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38, @@ -563,31 +563,31 @@ 22,71,248,22,72,199,196,195,87,95,28,248,22,186,4,195,12,250,22,153,9, 2,18,6,20,20,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45, 112,97,116,104,197,28,24,193,2,248,24,194,1,195,87,94,23,193,1,12,27, -27,250,22,150,2,80,159,42,43,38,248,22,191,14,247,22,159,12,11,28,23, +27,250,22,150,2,80,159,42,43,38,248,22,128,15,247,22,160,12,11,28,23, 193,2,192,87,94,23,193,1,27,247,22,130,2,87,94,250,22,148,2,80,159, -43,43,38,248,22,191,14,247,22,159,12,195,192,250,22,148,2,195,198,66,97, +43,43,38,248,22,128,15,247,22,160,12,195,192,250,22,148,2,195,198,66,97, 116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,152,9,11,196,195,248, 22,150,9,194,32,51,89,162,44,37,52,2,26,222,33,52,28,248,22,79,248, 22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,90,161,38,36, 11,27,248,22,73,196,28,248,22,79,248,22,73,23,195,2,249,22,7,9,248, 22,72,195,91,159,38,11,90,161,38,36,11,248,2,51,248,22,73,196,249,22, 7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248,22,72,199,196, -195,32,53,89,162,8,44,37,55,2,26,222,33,54,27,249,22,166,14,2,42, +195,32,53,89,162,8,44,37,55,2,26,222,33,54,27,249,22,167,14,2,42, 23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2, -27,248,22,105,23,197,1,27,249,22,166,14,2,42,23,196,2,28,23,193,2, +27,248,22,105,23,197,1,27,249,22,167,14,2,42,23,196,2,28,23,193,2, 87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1, -27,249,22,166,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22, +27,249,22,167,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22, 71,248,22,96,23,196,2,248,2,53,248,22,105,23,197,1,248,22,81,194,248, 22,81,194,248,22,81,194,32,55,89,162,44,37,52,2,26,222,33,56,28,248, 22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,90, 161,38,36,11,27,248,22,73,196,28,248,22,79,248,22,73,23,195,2,249,22, 7,9,248,22,72,195,91,159,38,11,90,161,38,36,11,248,2,55,248,22,73, 196,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248,22, -72,199,196,195,32,57,89,162,8,44,37,55,2,26,222,33,58,27,249,22,166, +72,199,196,195,32,57,89,162,8,44,37,55,2,26,222,33,58,27,249,22,167, 14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96, -23,196,2,27,248,22,105,23,197,1,27,249,22,166,14,2,42,23,196,2,28, +23,196,2,27,248,22,105,23,197,1,27,249,22,167,14,2,42,23,196,2,28, 23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,105, -23,197,1,27,249,22,166,14,2,42,23,196,2,28,23,193,2,87,94,23,194, +23,197,1,27,249,22,167,14,2,42,23,196,2,28,23,193,2,87,94,23,194, 1,249,22,71,248,22,96,23,196,2,248,2,57,248,22,105,23,197,1,248,22, 81,194,248,22,81,194,248,22,81,194,28,249,22,182,6,194,6,1,1,46,2, 22,28,249,22,182,6,194,6,2,2,46,46,62,117,112,192,0,11,35,114,120, @@ -597,26 +597,26 @@ 22,7,9,248,22,72,195,91,159,38,11,90,161,38,36,11,248,2,61,248,22, 73,196,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248, 22,72,199,196,195,32,63,89,162,8,44,37,55,2,26,222,33,64,27,249,22, -166,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22, -96,23,196,2,27,248,22,105,23,197,1,27,249,22,166,14,2,42,23,196,2, +167,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22, +96,23,196,2,27,248,22,105,23,197,1,27,249,22,167,14,2,42,23,196,2, 28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22, -105,23,197,1,27,249,22,166,14,2,42,23,196,2,28,23,193,2,87,94,23, +105,23,197,1,27,249,22,167,14,2,42,23,196,2,28,23,193,2,87,94,23, 194,1,249,22,71,248,22,96,23,196,2,248,2,63,248,22,105,23,197,1,248, 22,81,194,248,22,81,194,248,22,81,194,32,65,89,162,8,44,37,55,2,26, -222,33,66,27,249,22,166,14,2,42,23,196,2,28,23,193,2,87,94,23,194, -1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,166, +222,33,66,27,249,22,167,14,2,42,23,196,2,28,23,193,2,87,94,23,194, +1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,167, 14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96, -23,196,2,27,248,22,105,23,197,1,27,249,22,166,14,2,42,23,196,2,28, +23,196,2,27,248,22,105,23,197,1,27,249,22,167,14,2,42,23,196,2,28, 23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,248,2,65,248, 22,105,23,197,1,248,22,81,194,248,22,81,194,248,22,81,194,27,248,2,65, 23,195,1,192,28,249,22,185,8,248,22,73,23,200,2,23,197,1,28,249,22, 183,8,248,22,72,23,200,2,23,196,1,251,22,150,9,2,18,6,26,26,99, 121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,101, 58,32,126,101,23,200,1,249,22,2,22,73,248,22,86,249,22,71,23,206,1, -23,202,1,12,12,247,192,20,14,159,80,159,40,45,38,249,22,71,248,22,191, -14,247,22,159,12,23,197,1,20,14,159,80,159,40,40,38,250,80,159,43,41, +23,202,1,12,12,247,192,20,14,159,80,159,40,45,38,249,22,71,248,22,128, +15,247,22,160,12,23,197,1,20,14,159,80,159,40,40,38,250,80,159,43,41, 38,249,22,27,11,80,159,45,40,38,22,167,4,23,196,1,249,247,22,143,5, -23,198,1,248,22,59,248,22,183,13,23,198,1,87,94,28,28,248,22,179,13, +23,198,1,248,22,59,248,22,184,13,23,198,1,87,94,28,28,248,22,180,13, 23,196,2,10,248,22,130,5,23,196,2,12,28,23,197,2,250,22,152,9,11, 6,15,15,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,23,200,2, 250,22,153,9,2,18,6,19,19,109,111,100,117,108,101,45,112,97,116,104,32, @@ -630,77 +630,77 @@ 252,212,199,200,201,202,80,158,42,50,87,94,23,193,1,27,89,162,8,44,37, 46,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114, 223,5,33,50,27,28,248,22,56,23,198,2,27,250,22,150,2,80,159,43,44, -38,249,22,71,23,203,2,247,22,157,14,11,28,23,193,2,192,87,94,23,193, +38,249,22,71,23,203,2,247,22,158,14,11,28,23,193,2,192,87,94,23,193, 1,91,159,38,11,90,161,38,36,11,27,248,22,62,23,202,2,248,2,51,248, 2,53,23,195,1,27,251,80,159,47,54,38,2,18,23,202,1,28,248,22,79, 23,199,2,23,199,2,248,22,72,23,199,2,28,248,22,79,23,199,2,9,248, -22,73,23,199,2,249,22,133,14,23,195,1,28,248,22,79,23,197,1,87,94, +22,73,23,199,2,249,22,134,14,23,195,1,28,248,22,79,23,197,1,87,94, 23,197,1,6,8,8,109,97,105,110,46,114,107,116,249,22,135,7,23,199,1, 6,4,4,46,114,107,116,28,248,22,176,6,23,198,2,87,94,23,194,1,27, 27,28,23,200,2,28,249,22,183,8,23,202,2,80,158,43,47,80,158,41,48, -27,248,22,188,4,23,202,2,28,248,22,179,13,23,194,2,91,159,39,11,90, -161,39,36,11,248,22,136,14,23,197,1,87,95,83,160,38,11,80,158,45,47, +27,248,22,188,4,23,202,2,28,248,22,180,13,23,194,2,91,159,39,11,90, +161,39,36,11,248,22,137,14,23,197,1,87,95,83,160,38,11,80,158,45,47, 23,204,2,83,160,38,11,80,158,45,48,192,192,11,11,28,23,193,2,192,87, 94,23,193,1,27,247,22,144,5,28,23,193,2,192,87,94,23,193,1,247,22, -156,14,27,250,22,150,2,80,159,44,44,38,249,22,71,23,204,2,23,199,2, +157,14,27,250,22,150,2,80,159,44,44,38,249,22,71,23,204,2,23,199,2, 11,28,23,193,2,192,87,94,23,193,1,91,159,38,11,90,161,38,36,11,248, -2,55,248,2,57,23,203,2,250,22,1,22,133,14,23,199,1,249,22,85,249, +2,55,248,2,57,23,203,2,250,22,1,22,134,14,23,199,1,249,22,85,249, 22,2,32,0,89,162,8,44,37,44,9,222,33,59,23,200,1,248,22,81,27, 248,22,179,6,23,202,2,28,249,22,180,3,194,39,28,249,22,182,6,2,28, 249,22,134,7,204,249,22,168,3,198,39,249,22,135,7,250,22,134,7,205,36, -249,22,168,3,199,39,2,29,200,200,28,248,22,179,13,23,198,2,87,94,23, -194,1,28,248,22,138,14,23,198,2,27,248,22,142,14,23,199,2,91,159,39, -11,90,161,39,36,11,248,22,136,14,23,197,2,87,95,23,195,1,23,193,1, -28,249,22,166,14,2,60,248,22,184,13,23,197,1,249,80,159,45,53,38,23, +249,22,168,3,199,39,2,29,200,200,28,248,22,180,13,23,198,2,87,94,23, +194,1,28,248,22,139,14,23,198,2,27,248,22,143,14,23,199,2,91,159,39, +11,90,161,39,36,11,248,22,137,14,23,197,2,87,95,23,195,1,23,193,1, +28,249,22,167,14,2,60,248,22,185,13,23,197,1,249,80,159,45,53,38,23, 198,1,2,30,195,248,22,81,6,26,26,32,40,97,32,112,97,116,104,32,109, 117,115,116,32,98,101,32,97,98,115,111,108,117,116,101,41,28,249,22,183,8, 248,22,72,23,200,2,2,27,27,250,22,150,2,80,159,43,44,38,249,22,71, -23,203,2,247,22,157,14,11,28,23,193,2,192,87,94,23,193,1,91,159,39, +23,203,2,247,22,158,14,11,28,23,193,2,192,87,94,23,193,1,91,159,39, 11,90,161,38,36,11,27,248,22,96,23,203,2,248,2,61,248,2,63,23,195, 1,90,161,37,38,11,28,248,22,79,248,22,98,23,203,2,28,248,22,79,23, -194,2,249,22,170,14,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10, +194,2,249,22,171,14,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10, 27,27,28,23,197,2,249,22,85,28,248,22,79,248,22,98,23,207,2,21,93, 6,5,5,109,122,108,105,98,249,22,1,22,85,249,22,2,32,0,89,162,8, 44,37,44,9,222,33,67,248,22,98,23,210,2,23,197,2,28,248,22,79,23, 196,2,248,22,81,23,197,2,23,195,2,251,80,159,49,54,38,2,18,23,204, -1,248,22,72,23,198,2,248,22,73,23,198,1,249,22,133,14,23,195,1,28, +1,248,22,72,23,198,2,248,22,73,23,198,1,249,22,134,14,23,195,1,28, 23,198,1,87,94,23,196,1,27,248,22,179,6,23,199,2,28,249,22,180,3, 194,39,28,249,22,182,6,2,28,249,22,134,7,201,249,22,168,3,198,39,249, 22,135,7,250,22,134,7,202,36,249,22,168,3,199,39,2,29,197,197,28,248, 22,79,23,197,1,87,94,23,197,1,6,8,8,109,97,105,110,46,114,107,116, -28,249,22,170,14,0,8,35,114,120,34,91,46,93,34,23,199,2,27,248,22, +28,249,22,171,14,0,8,35,114,120,34,91,46,93,34,23,199,2,27,248,22, 179,6,23,199,2,28,249,22,180,3,194,39,28,249,22,182,6,2,28,249,22, 134,7,201,249,22,168,3,198,39,249,22,135,7,250,22,134,7,202,36,249,22, 168,3,199,39,2,29,197,197,249,22,135,7,23,199,1,6,4,4,46,114,107, -116,28,249,22,183,8,248,22,72,23,200,2,64,102,105,108,101,27,248,22,142, -14,249,22,140,14,248,22,144,14,248,22,96,23,203,2,27,28,23,203,2,28, +116,28,249,22,183,8,248,22,72,23,200,2,64,102,105,108,101,27,248,22,143, +14,249,22,141,14,248,22,145,14,248,22,96,23,203,2,27,28,23,203,2,28, 249,22,183,8,23,205,2,80,158,46,47,80,158,44,48,27,248,22,188,4,23, -205,2,28,248,22,179,13,23,194,2,91,159,39,11,90,161,39,36,11,248,22, -136,14,23,197,1,87,95,83,160,38,11,80,158,48,47,23,207,2,83,160,38, +205,2,28,248,22,180,13,23,194,2,91,159,39,11,90,161,39,36,11,248,22, +137,14,23,197,1,87,95,83,160,38,11,80,158,48,47,23,207,2,83,160,38, 11,80,158,48,48,192,192,11,11,28,23,193,2,192,87,94,23,193,1,27,247, -22,144,5,28,23,193,2,192,87,94,23,193,1,247,22,156,14,91,159,39,11, -90,161,39,36,11,248,22,136,14,23,197,2,87,95,23,195,1,23,193,1,28, -249,22,166,14,2,60,248,22,184,13,23,197,1,249,80,159,45,53,38,23,198, -1,2,30,195,12,87,94,28,28,248,22,179,13,23,194,2,10,248,22,135,8, +22,144,5,28,23,193,2,192,87,94,23,193,1,247,22,157,14,91,159,39,11, +90,161,39,36,11,248,22,137,14,23,197,2,87,95,23,195,1,23,193,1,28, +249,22,167,14,2,60,248,22,185,13,23,197,1,249,80,159,45,53,38,23,198, +1,2,30,195,12,87,94,28,28,248,22,180,13,23,194,2,10,248,22,135,8, 23,194,2,87,94,23,199,1,12,28,23,199,2,250,22,152,9,67,114,101,113, 117,105,114,101,249,22,160,7,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,72,23,199,2,6,0,0,23, 202,1,87,94,23,199,1,250,22,153,9,2,18,249,22,160,7,6,13,13,109, 111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,72,23,199, 2,6,0,0,23,200,2,27,28,248,22,135,8,23,195,2,249,22,140,8,23, -196,2,36,249,22,142,14,248,22,143,14,23,197,2,11,27,28,248,22,135,8, +196,2,36,249,22,143,14,248,22,144,14,23,197,2,11,27,28,248,22,135,8, 23,196,2,249,22,140,8,23,197,2,37,248,80,159,42,55,38,23,195,2,91, 159,39,11,90,161,39,36,11,28,248,22,135,8,23,199,2,250,22,7,2,31, -249,22,140,8,23,203,2,38,2,31,248,22,136,14,23,198,2,87,95,23,195, +249,22,140,8,23,203,2,38,2,31,248,22,137,14,23,198,2,87,95,23,195, 1,23,193,1,27,28,248,22,135,8,23,200,2,249,22,140,8,23,201,2,39, 249,80,159,47,53,38,23,197,2,5,0,27,28,248,22,135,8,23,201,2,249, 22,140,8,23,202,2,40,248,22,187,4,23,200,2,27,27,250,22,150,2,80, -159,51,43,38,248,22,191,14,247,22,159,12,11,28,23,193,2,192,87,94,23, -193,1,27,247,22,130,2,87,94,250,22,148,2,80,159,52,43,38,248,22,191, -14,247,22,159,12,195,192,87,95,28,23,208,1,27,250,22,150,2,23,197,2, +159,51,43,38,248,22,128,15,247,22,160,12,11,28,23,193,2,192,87,94,23, +193,1,27,247,22,130,2,87,94,250,22,148,2,80,159,52,43,38,248,22,128, +15,247,22,160,12,195,192,87,95,28,23,208,1,27,250,22,150,2,23,197,2, 197,11,28,23,193,1,12,87,95,27,27,28,248,22,17,80,159,51,46,38,80, 159,50,46,38,247,22,19,250,22,25,248,22,23,23,197,2,80,159,53,45,38, -23,196,1,27,248,22,191,14,247,22,159,12,249,22,3,83,158,40,20,100,94, +23,196,1,27,248,22,128,15,247,22,160,12,249,22,3,83,158,40,20,100,94, 89,162,8,44,37,55,9,226,12,11,2,3,33,68,23,195,1,23,196,1,248, 28,248,22,17,80,159,50,46,38,32,0,89,162,44,37,42,9,222,33,69,80, 159,49,59,37,89,162,44,36,51,9,227,13,9,8,4,3,33,70,250,22,148, @@ -709,14 +709,14 @@ 22,183,8,248,22,72,23,208,2,2,27,11,250,22,148,2,80,159,50,44,38, 28,248,22,176,6,23,209,2,249,22,71,23,210,1,27,28,23,212,2,28,249, 22,183,8,23,214,2,80,158,55,47,87,94,23,212,1,80,158,53,48,27,248, -22,188,4,23,214,2,28,248,22,179,13,23,194,2,91,159,39,11,90,161,39, -36,11,248,22,136,14,23,197,1,87,95,83,160,38,11,80,158,57,47,23,23, +22,188,4,23,214,2,28,248,22,180,13,23,194,2,91,159,39,11,90,161,39, +36,11,248,22,137,14,23,197,1,87,95,83,160,38,11,80,158,57,47,23,23, 83,160,38,11,80,158,57,48,192,192,11,11,28,23,193,2,192,87,94,23,193, -1,27,247,22,144,5,28,23,193,2,192,87,94,23,193,1,247,22,156,14,249, -22,71,23,210,1,247,22,157,14,252,22,137,8,23,208,1,23,207,1,23,205, +1,27,247,22,144,5,28,23,193,2,192,87,94,23,193,1,247,22,157,14,249, +22,71,23,210,1,247,22,158,14,252,22,137,8,23,208,1,23,207,1,23,205, 1,23,203,1,201,12,193,87,96,83,160,38,11,80,158,36,50,248,80,159,37, 58,38,249,22,27,11,80,159,39,52,38,248,22,166,4,80,159,37,51,38,248, -22,143,5,80,159,37,37,37,248,22,150,13,80,159,37,42,37,83,160,38,11, +22,143,5,80,159,37,37,37,248,22,151,13,80,159,37,42,37,83,160,38,11, 80,158,36,50,248,80,159,37,58,38,249,22,27,11,80,159,39,52,38,159,36, 20,105,159,36,16,1,11,16,0,83,158,42,20,103,145,2,1,2,1,29,11, 11,11,11,11,10,38,80,158,36,36,20,105,159,37,16,23,2,2,2,3,30, diff --git a/src/racket/src/eval.c b/src/racket/src/eval.c index 3b3231553d..ea397c2c12 100644 --- a/src/racket/src/eval.c +++ b/src/racket/src/eval.c @@ -9438,6 +9438,10 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, /* Chaperone is for struct fields, not function arguments */ obj = ((Scheme_Chaperone *)obj)->prev; goto apply_top; + } else if (SAME_TYPE(SCHEME_TYPE(((Scheme_Chaperone *)obj)->redirects), scheme_nack_guard_evt_type)) { + /* Chaperone is for evt, not function arguments */ + obj = ((Scheme_Chaperone *)obj)->prev; + goto apply_top; } else { /* Chaperone is for function arguments */ VACATE_TAIL_BUFFER_USE_RUNSTACK(); diff --git a/src/racket/src/schminc.h b/src/racket/src/schminc.h index da12d14cc8..513bf3acac 100644 --- a/src/racket/src/schminc.h +++ b/src/racket/src/schminc.h @@ -13,7 +13,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 997 +#define EXPECTED_PRIM_COUNT 998 #define EXPECTED_UNSAFE_COUNT 66 #define EXPECTED_FLFXNUM_COUNT 55 diff --git a/src/racket/src/schvers.h b/src/racket/src/schvers.h index abf5a8c9ea..235884397e 100644 --- a/src/racket/src/schvers.h +++ b/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "5.0.0.3" +#define MZSCHEME_VERSION "5.0.0.4" #define MZSCHEME_VERSION_X 5 #define MZSCHEME_VERSION_Y 0 #define MZSCHEME_VERSION_Z 0 -#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/src/racket/src/struct.c b/src/racket/src/struct.c index f73a1619cc..3d7f459296 100644 --- a/src/racket/src/struct.c +++ b/src/racket/src/struct.c @@ -102,6 +102,7 @@ static Scheme_Object *make_struct_field_mutator(int argc, Scheme_Object *argv[]) static Scheme_Object *nack_evt(int argc, Scheme_Object *argv[]); static Scheme_Object *handle_evt(int argc, Scheme_Object *argv[]); +static Scheme_Object *chaperone_evt(int argc, Scheme_Object *argv[]); static Scheme_Object *handle_evt_p(int argc, Scheme_Object *argv[]); static Scheme_Object *struct_p(int argc, Scheme_Object *argv[]); @@ -141,6 +142,9 @@ static int nack_guard_evt_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo static int nack_evt_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo); static int poll_evt_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo); +static int chaperone_evt_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo); +static int is_chaperone_evt(Scheme_Object *o); + Scheme_Object *make_special_comment(int argc, Scheme_Object **argv); Scheme_Object *special_comment_value(int argc, Scheme_Object **argv); Scheme_Object *special_comment_p(int argc, Scheme_Object **argv); @@ -408,6 +412,14 @@ scheme_init_struct (Scheme_Env *env) scheme_add_evt(scheme_handle_evt_type, (Scheme_Ready_Fun)wrapped_evt_is_ready, NULL, NULL, 1); + scheme_add_evt(scheme_chaperone_type, + (Scheme_Ready_Fun)chaperone_evt_is_ready, + NULL, + is_chaperone_evt, 1); + scheme_add_evt(scheme_proc_chaperone_type, + (Scheme_Ready_Fun)chaperone_evt_is_ready, + NULL, + is_chaperone_evt, 1); scheme_add_evt(scheme_nack_guard_evt_type, (Scheme_Ready_Fun)nack_guard_evt_is_ready, NULL, NULL, 1); @@ -458,6 +470,11 @@ scheme_init_struct (Scheme_Env *env) "handle-evt", 2, 2), env); + scheme_add_global_constant("chaperone-evt", + scheme_make_prim_w_arity(chaperone_evt, + "chaperone-evt", + 2, -1), + env); scheme_add_global_constant("nack-guard-evt", scheme_make_prim_w_arity(nack_evt, "nack-guard-evt", @@ -2994,6 +3011,151 @@ Scheme_Object *handle_evt_p(int argc, Scheme_Object *argv[]) return NULL; } +static Scheme_Object *chaperone_result_guard_proc(void *data, int argc, Scheme_Object *argv[]) +{ + Scheme_Object *proc = (Scheme_Object *)data, *o, *a[1]; + + a[0] = argv[0]; + o = _scheme_apply(proc, 1, a); + + if (!scheme_chaperone_of(o, a[0])) + scheme_raise_exn(MZEXN_FAIL_CONTRACT, + "evt result chaperone: chaperone produced a value: %V that is not a chaperone of the original result: %V", + o, + a[0]); + + return o; +} + +static Scheme_Object *chaperone_guard_proc(void *data, int argc, Scheme_Object *argv[]) +{ + Scheme_Object *evt = SCHEME_CAR((Scheme_Object *)data); + Scheme_Object *proc = SCHEME_CDR((Scheme_Object *)data); + Scheme_Object *a[2], *o, **vals; + int cnt; + Scheme_Thread *p; + + a[0] = evt; + + o = _scheme_apply_multi(proc, 1, a); + + if (SAME_OBJ(o, SCHEME_MULTIPLE_VALUES)) { + p = scheme_current_thread; + cnt = p->ku.multiple.count; + vals = p->ku.multiple.array; + p->ku.multiple.array = NULL; + if (SAME_OBJ(vals, p->values_buffer)) + p->values_buffer = NULL; + p = NULL; + } else { + vals = NULL; + cnt = 1; + } + + if (cnt != 2) + scheme_raise_exn(MZEXN_FAIL_CONTRACT_ARITY, + "evt chaperone: %V: returned %d values, expected 2", + proc, + cnt); + + if (!scheme_chaperone_of(vals[0], evt)) + scheme_raise_exn(MZEXN_FAIL_CONTRACT, + "evt chaperone: chaperone produced a value: %V that is not a chaperone of the original event: %V", + vals[0], + evt); + if (!scheme_check_proc_arity(NULL, 1, 1, 1, vals)) + scheme_raise_exn(MZEXN_FAIL_CONTRACT, + "evt chaperone: expected a value of type as second chaprone result, received: %V", + vals[1]); + + a[0] = vals[0]; + o = scheme_make_closed_prim_w_arity(chaperone_result_guard_proc, + (void *)vals[1], + "evt-result-chaperone", + 1, 1); + a[1] = o; + + return scheme_wrap_evt(1, a); +} + +static Scheme_Object *chaperone_evt(int argc, Scheme_Object *argv[]) +{ + Scheme_Chaperone *px; + Scheme_Object *o, *val, *a[1]; + Scheme_Hash_Tree *props; + + val = argv[0]; + if (SCHEME_CHAPERONEP(val)) + val = SCHEME_CHAPERONE_VAL(val); + + if (!scheme_is_evt(val)) + scheme_wrong_type("chaperone-evt", "evt", 0, argc, argv); + scheme_check_proc_arity("chaperone-evt", 1, 1, argc, argv); + + props = scheme_parse_chaperone_props("chaperone-evt", 2, argc, argv); + + o = scheme_make_pair(argv[0], argv[1]); + o = scheme_make_closed_prim_w_arity(chaperone_guard_proc, + (void *)o, + "evt-chaperone", + 1, 1); + a[0] = o; + o = nack_evt(1, a); + + px = MALLOC_ONE_TAGGED(Scheme_Chaperone); + if (SCHEME_PROCP(val)) + px->so.type = scheme_proc_chaperone_type; + else + px->so.type = scheme_chaperone_type; + px->val = val; + px->prev = argv[0]; + px->props = props; + px->redirects = o; + + return (Scheme_Object *)px; +} + +static int chaperone_evt_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo) +{ + Scheme_Chaperone *px; + + while (SCHEME_CHAPERONEP(o)) { + px = (Scheme_Chaperone *)o; + if (SAME_TYPE(SCHEME_TYPE(px->redirects), scheme_nack_guard_evt_type)) { + o = px->redirects; + break; + } + o = px->prev; + } + + scheme_set_sync_target(sinfo, o, NULL, NULL, 0, 1, NULL); + return 0; +} + +static Scheme_Object *is_chaperone_evt_k(void) +{ + Scheme_Thread *p = scheme_current_thread; + Scheme_Object *o = (Scheme_Object *)p->ku.k.p1; + int c; + + p->ku.k.p1 = NULL; + + c = is_chaperone_evt(o); + + return scheme_make_integer(c); +} + +static int is_chaperone_evt(Scheme_Object *o) +{ +#include "mzstkchk.h" + { + scheme_current_thread->ku.k.p1 = (void *)o; + return SCHEME_INT_VAL(scheme_handle_stack_overflow(is_chaperone_evt_k)); + } + + return scheme_is_evt(SCHEME_CHAPERONE_VAL(o)); +} + static Scheme_Object *nack_evt(int argc, Scheme_Object *argv[]) { Nack_Guard_Evt *nw;