diff --git a/pkgs/base/info.rkt b/pkgs/base/info.rkt index 3b564d013b..6ab71cb432 100644 --- a/pkgs/base/info.rkt +++ b/pkgs/base/info.rkt @@ -12,7 +12,7 @@ (define collection 'multi) -(define version "6.0.1.13") +(define version "6.1.0.3") (define deps `("racket-lib" ["racket" #:version ,version])) diff --git a/pkgs/racket-pkgs/racket-doc/scribblings/reference/evts.scrbl b/pkgs/racket-pkgs/racket-doc/scribblings/reference/evts.scrbl index c17b47fbe7..34402f127f 100644 --- a/pkgs/racket-pkgs/racket-doc/scribblings/reference/evts.scrbl +++ b/pkgs/racket-pkgs/racket-doc/scribblings/reference/evts.scrbl @@ -246,6 +246,30 @@ for synchronization}, with itself as its @tech{synchronization result}. ]} +@defproc[(replace-evt [evt evt?] [maker (any/c ... . -> . evt?)]) evt?]{ + +Like @racket[guard-evt], but @racket[maker] is called only after +@racket[evt] becomes @tech{ready for synchronization}, and the +@tech{synchronization result} of @racket[evt] is passed to @racket[maker]. + +The attempt to synchronize on @racket[evt] proceeds concurrently as +the attempt to synchronize on the result @racket[_guard] from +@racket[replace-evt]; despite that concurrency, if @racket[maker] is +called, it is called in the thread that is synchronizing on +@racket[_guard]. Synchronization can succeed for both @racket[evt] and +another synchronized with @racket[_guard] at the same time; the +single-choice guarantee of synchronization applies only to the result +of @racket[maker] and other events synchronized with @racket[_guard]. + +If @racket[maker] returns a non-event, then @racket[maker]'s +result is replaced with an event that is @tech{ready for +synchronization} and whose @tech{synchronization result} is +@racket[_guard]. + +@history[#:added "6.1.0.3"]} + + + @defthing[never-evt evt?]{A constant event that is never @tech{ready for synchronization}. diff --git a/pkgs/racket-pkgs/racket-test/tests/racket/sync.rktl b/pkgs/racket-pkgs/racket-test/tests/racket/sync.rktl index 9a2014d0f5..4eda6bdd38 100644 --- a/pkgs/racket-pkgs/racket-test/tests/racket/sync.rktl +++ b/pkgs/racket-pkgs/racket-test/tests/racket/sync.rktl @@ -543,6 +543,89 @@ s)) (make-semaphore)))) +;; ---------------------------------------- +;; Replace waitables + +(arity-test replace-evt 2 2) + +(err/rt-test (replace-evt 10 void)) +(err/rt-test (replace-evt always-evt 10)) + +(test 10 sync (replace-evt always-evt + (lambda (r) + (wrap-evt always-evt (lambda (v) 10))))) + +(test 10 sync (let loop ([n 10]) + (if (zero? n) + (wrap-evt always-evt (lambda (_) 0)) + (replace-evt always-evt + (lambda (r) + (wrap-evt + (loop (sub1 n)) + add1)))))) + +(let () + (define nacks null) + + (define (deep nacks? base n) + (if (zero? n) + base + (deep + nacks? + (choice-evt + (if nacks? + (nack-guard-evt (lambda (s) + (set! nacks (cons s nacks)) + never-evt)) + never-evt) + (replace-evt base + (lambda (v) v))) + (sub1 n)))) + + (sync (deep #t always-evt 10)) + (for-each sync nacks) + + ;; - - - - - - - - - - - - - - - - - - - - - - - - + + (set! nacks null) + (define-values (i o) (make-pipe)) + (define t0 + (thread + (lambda () + (sync (deep #t i 10))))) + (sync (system-idle-evt)) + (test #f sync/timeout 0 t0) + (write-byte 1 o) + (sync t0) + (for-each sync nacks) + + ;; - - - - - - - - - - - - - - - - - - - - - - - - + + ;; Pick something large enough that it would overflow if + ;; the implementation used the C stack. Note that quadratic + ;; behavior of nested `replace-evt`s means that we could + ;; never get an answe back from this depth: + (define overflow-depth 40000) + + (set! nacks null) + (define t + (thread (lambda () + (with-handlers ([exn:break? void]) + (sync (deep #t (current-input-port) overflow-depth)))))) + (sync (system-idle-evt)) + + (test #f sync/timeout 0 t) + (break-thread t) + (sync t) + + (for-each sync nacks)) + +(let ([e (replace-evt always-evt (lambda (x) 'non-evt))]) + (test e sync e)) + +(test always-evt sync always-evt (replace-evt never-evt (lambda () 10))) +(err/rt-test (sync (replace-evt always-evt (lambda () 10)))) + ;; ---------------------------------------- ;; Structures as waitables @@ -906,7 +989,8 @@ (check-threads-gcable 'guard (lambda () (sync (c (guard-evt (lambda () (make-semaphore))))))) (check-threads-gcable 'nack (lambda () (sync (c (nack-guard-evt (lambda (nack) (make-semaphore))))))) (check-threads-gcable 'poll (lambda () (sync (c (poll-guard-evt (lambda (poll?) (make-semaphore))))))) - (check-threads-gcable 'never (lambda () (sync (c never-evt))))) + (check-threads-gcable 'never (lambda () (sync (c never-evt)))) + (check-threads-gcable 'replace (lambda () (sync (c (replace-evt always-evt (lambda (always) (make-semaphore)))))))) (check/combine values) (check/combine (lambda (x) (choice-evt x (make-semaphore)))) (check/combine (lambda (x) (choice-evt (make-semaphore) x))) diff --git a/racket/src/racket/src/cstartup.inc b/racket/src/racket/src/cstartup.inc index 7bf39d6a25..c5189b9797 100644 --- a/racket/src/racket/src/cstartup.inc +++ b/racket/src/racket/src/cstartup.inc @@ -1,15 +1,15 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,49,46,48,46,50,84,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,49,46,48,46,51,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, -27,0,31,0,38,0,42,0,49,0,54,0,61,0,66,0,69,0,74,0,83, +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,149,0, 163,0,170,0,192,0,194,0,208,0,19,1,48,1,59,1,70,1,96,1,129, 1,162,1,224,1,24,2,105,2,161,2,166,2,187,2,84,3,105,3,158,3, 225,3,114,4,2,5,56,5,67,5,150,5,0,0,115,7,0,0,69,35,37, -109,105,110,45,115,116,120,29,11,11,11,72,112,97,114,97,109,101,116,101,114, -105,122,101,63,97,110,100,66,100,101,102,105,110,101,63,108,101,116,66,117,110, -108,101,115,115,64,99,111,110,100,66,108,101,116,114,101,99,64,108,101,116,42, -62,111,114,64,119,104,101,110,68,104,101,114,101,45,115,116,120,29,11,11,11, +109,105,110,45,115,116,120,29,11,11,11,64,119,104,101,110,72,112,97,114,97, +109,101,116,101,114,105,122,101,64,99,111,110,100,62,111,114,66,100,101,102,105, +110,101,66,108,101,116,114,101,99,64,108,101,116,42,63,108,101,116,63,97,110, +100,66,117,110,108,101,115,115,68,104,101,114,101,45,115,116,120,29,11,11,11, 65,113,117,111,116,101,29,94,2,15,68,35,37,107,101,114,110,101,108,11,29, 94,2,15,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, @@ -17,8 +17,8 @@ 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, 209,88,0,0,95,144,2,17,36,36,144,2,16,36,36,144,2,16,36,36,16, -20,2,8,2,2,2,4,2,2,2,5,2,2,2,6,2,2,2,7,2,2, -2,10,2,2,2,3,2,2,2,9,2,2,2,11,2,2,2,12,2,2,97, +20,2,3,2,2,2,5,2,2,2,4,2,2,2,6,2,2,2,7,2,2, +2,8,2,2,2,9,2,2,2,10,2,2,2,11,2,2,2,12,2,2,97, 37,11,8,240,209,88,0,0,93,144,2,16,36,37,16,2,2,13,146,2,2, 37,2,13,2,2,2,13,96,11,11,8,240,209,88,0,0,16,0,96,38,11, 8,240,209,88,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36,2,14, @@ -27,32 +27,32 @@ 248,22,104,201,27,248,22,164,4,195,249,22,157,4,80,143,39,36,251,22,90, 2,18,248,22,102,199,249,22,80,2,19,248,22,104,201,12,27,248,22,82,248, 22,164,4,196,28,248,22,88,193,20,14,144,37,36,37,28,248,22,88,248,22, -82,194,248,22,153,20,193,249,22,157,4,80,143,39,36,251,22,90,2,18,248, -22,153,20,199,249,22,80,2,4,248,22,154,20,201,11,18,100,10,13,16,6, +82,194,248,22,154,20,193,249,22,157,4,80,143,39,36,251,22,90,2,18,248, +22,154,20,199,249,22,80,2,11,248,22,155,20,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,56,54,53,16,4,11,11,2,21,3,1,8, 101,110,118,49,55,56,54,54,27,248,22,82,248,22,164,4,196,28,248,22,88, -193,20,14,144,37,36,37,28,248,22,88,248,22,82,194,248,22,153,20,193,249, +193,20,14,144,37,36,37,28,248,22,88,248,22,82,194,248,22,154,20,193,249, 22,157,4,80,143,39,36,250,22,90,2,22,248,22,90,249,22,90,248,22,90, -2,23,248,22,153,20,201,251,22,90,2,18,2,23,2,23,249,22,80,2,11, -248,22,154,20,204,18,100,11,13,16,6,36,2,14,2,2,11,11,11,8,32, +2,23,248,22,154,20,201,251,22,90,2,18,2,23,2,23,249,22,80,2,6, +248,22,155,20,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,56, 54,56,16,4,11,11,2,21,3,1,8,101,110,118,49,55,56,54,57,248,22, 164,4,193,27,248,22,164,4,194,249,22,80,248,22,90,248,22,81,196,248,22, -154,20,195,27,248,22,82,248,22,164,4,23,197,1,249,22,157,4,80,143,39, +155,20,195,27,248,22,82,248,22,164,4,23,197,1,249,22,157,4,80,143,39, 36,28,248,22,64,248,22,158,4,248,22,81,23,198,2,27,249,22,2,32,0, 88,148,8,36,37,43,11,9,222,33,40,248,22,164,4,248,22,102,23,200,2, -250,22,90,2,24,248,22,90,249,22,90,248,22,90,248,22,153,20,23,204,2, +250,22,90,2,24,248,22,90,249,22,90,248,22,90,248,22,154,20,23,204,2, 250,22,91,2,25,249,22,2,22,81,23,204,2,248,22,104,23,206,2,249,22, -80,248,22,153,20,23,202,1,249,22,2,22,102,23,200,1,250,22,91,2,22, +80,248,22,154,20,23,202,1,249,22,2,22,102,23,200,1,250,22,91,2,22, 249,22,2,32,0,88,148,8,36,37,47,11,9,222,33,41,248,22,164,4,248, -22,153,20,201,248,22,154,20,198,27,248,22,164,4,194,249,22,80,248,22,90, -248,22,81,196,248,22,154,20,195,27,248,22,82,248,22,164,4,23,197,1,249, +22,154,20,201,248,22,155,20,198,27,248,22,164,4,194,249,22,80,248,22,90, +248,22,81,196,248,22,155,20,195,27,248,22,82,248,22,164,4,23,197,1,249, 22,157,4,80,143,39,36,250,22,91,2,24,249,22,2,32,0,88,148,8,36, -37,47,11,9,222,33,43,248,22,164,4,248,22,81,201,248,22,154,20,198,27, +37,47,11,9,222,33,43,248,22,164,4,248,22,81,201,248,22,155,20,198,27, 248,22,82,248,22,164,4,196,27,248,22,164,4,248,22,81,195,249,22,157,4, 80,143,40,36,28,248,22,88,195,250,22,91,2,22,9,248,22,82,199,250,22, -90,2,6,248,22,90,248,22,81,199,250,22,91,2,10,248,22,154,20,201,248, +90,2,10,248,22,90,248,22,81,199,250,22,91,2,9,248,22,155,20,201,248, 22,82,202,27,248,22,82,248,22,164,4,23,197,1,27,249,22,1,22,94,249, 22,2,22,164,4,248,22,164,4,248,22,81,199,248,22,185,4,249,22,157,4, 80,143,41,36,251,22,90,1,22,119,105,116,104,45,99,111,110,116,105,110,117, @@ -63,17 +63,17 @@ 204,27,248,22,82,248,22,164,4,196,28,248,22,88,193,20,14,144,37,36,37, 249,22,157,4,80,143,39,36,27,248,22,164,4,248,22,81,197,28,249,22,168, 9,62,61,62,248,22,158,4,248,22,102,196,250,22,90,2,22,248,22,90,249, -22,90,21,93,2,27,248,22,81,199,250,22,91,2,8,249,22,90,2,27,249, +22,90,21,93,2,27,248,22,81,199,250,22,91,2,5,249,22,90,2,27,249, 22,90,248,22,111,203,2,27,248,22,82,202,251,22,90,2,18,28,249,22,168, -9,248,22,158,4,248,22,81,200,64,101,108,115,101,10,248,22,153,20,197,250, -22,91,2,22,9,248,22,154,20,200,249,22,80,2,8,248,22,82,202,99,13, +9,248,22,158,4,248,22,81,200,64,101,108,115,101,10,248,22,154,20,197,250, +22,91,2,22,9,248,22,155,20,200,249,22,80,2,5,248,22,82,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,56,57,49,16,4,11,11,2,21,3, 1,8,101,110,118,49,55,56,57,50,18,143,94,10,64,118,111,105,100,8,48, 27,248,22,82,248,22,164,4,196,249,22,157,4,80,143,39,36,28,248,22,64, -248,22,158,4,248,22,81,197,250,22,90,2,28,248,22,90,248,22,153,20,199, -248,22,102,198,27,248,22,158,4,248,22,153,20,197,250,22,90,2,28,248,22, -90,248,22,81,197,250,22,91,2,25,248,22,154,20,199,248,22,154,20,202,144, +248,22,158,4,248,22,81,197,250,22,90,2,28,248,22,90,248,22,154,20,199, +248,22,102,198,27,248,22,158,4,248,22,154,20,197,250,22,90,2,28,248,22, +90,248,22,81,197,250,22,91,2,25,248,22,155,20,199,248,22,155,20,202,144, 36,20,114,144,36,16,1,11,16,0,20,26,15,58,9,2,1,2,1,2,2, 11,9,9,11,11,11,10,36,80,143,36,36,20,114,144,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,6, @@ -82,25 +82,25 @@ 2,11,2,12,36,46,37,16,0,36,16,1,2,13,37,11,11,11,16,0,16, 0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,11,16,5, 11,20,15,16,2,20,14,144,36,36,37,80,143,36,36,36,20,114,144,36,16, -1,2,13,16,1,33,33,10,16,5,2,7,88,148,8,36,37,53,37,9,223, -0,33,34,36,20,114,144,36,16,1,2,13,16,0,11,16,5,2,12,88,148, +1,2,13,16,1,33,33,10,16,5,2,12,88,148,8,36,37,53,37,9,223, +0,33,34,36,20,114,144,36,16,1,2,13,16,0,11,16,5,2,3,88,148, 8,36,37,53,37,9,223,0,33,35,36,20,114,144,36,16,1,2,13,16,0, -11,16,5,2,4,88,148,8,36,37,53,37,9,223,0,33,36,36,20,114,144, -36,16,1,2,13,16,1,33,37,11,16,5,2,11,88,148,8,36,37,56,37, +11,16,5,2,11,88,148,8,36,37,53,37,9,223,0,33,36,36,20,114,144, +36,16,1,2,13,16,1,33,37,11,16,5,2,6,88,148,8,36,37,56,37, 9,223,0,33,38,36,20,114,144,36,16,1,2,13,16,1,33,39,11,16,5, -2,6,88,148,8,36,37,58,37,9,223,0,33,42,36,20,114,144,36,16,1, -2,13,16,0,11,16,5,2,9,88,148,8,36,37,53,37,9,223,0,33,44, -36,20,114,144,36,16,1,2,13,16,0,11,16,5,2,10,88,148,8,36,37, +2,10,88,148,8,36,37,58,37,9,223,0,33,42,36,20,114,144,36,16,1, +2,13,16,0,11,16,5,2,8,88,148,8,36,37,53,37,9,223,0,33,44, +36,20,114,144,36,16,1,2,13,16,0,11,16,5,2,9,88,148,8,36,37, 54,37,9,223,0,33,45,36,20,114,144,36,16,1,2,13,16,0,11,16,5, -2,3,88,148,8,36,37,56,37,9,223,0,33,46,36,20,114,144,36,16,1, -2,13,16,0,11,16,5,2,8,88,148,8,36,37,58,37,9,223,0,33,47, -36,20,114,144,36,16,1,2,13,16,1,33,49,11,16,5,2,5,88,148,8, +2,4,88,148,8,36,37,56,37,9,223,0,33,46,36,20,114,144,36,16,1, +2,13,16,0,11,16,5,2,5,88,148,8,36,37,58,37,9,223,0,33,47, +36,20,114,144,36,16,1,2,13,16,1,33,49,11,16,5,2,7,88,148,8, 36,37,54,37,9,223,0,33,50,36,20,114,144,36,16,1,2,13,16,0,11, 16,0,94,2,16,2,17,93,2,16,9,9,36,9,0}; EVAL_ONE_SIZED_STR((char *)expr, 2051); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,49,46,48,46,50,84,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,49,46,48,46,51,84,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,193,0,0,0,1,0,0,8,0,21,0, 26,0,43,0,55,0,77,0,106,0,150,0,156,0,165,0,172,0,187,0,205, 0,217,0,233,0,247,0,13,1,32,1,39,1,73,1,90,1,107,1,130,1, @@ -112,15 +112,15 @@ 5,23,5,34,5,64,5,87,5,95,5,119,5,140,5,84,6,114,6,195,9, 218,9,235,9,159,11,6,12,20,12,220,12,192,14,201,14,210,14,224,14,234, 14,11,16,114,16,227,16,44,17,117,17,221,17,250,17,65,18,203,18,18,19, -231,19,97,20,110,20,232,20,245,20,84,21,151,21,164,21,175,21,71,22,193, -22,237,22,96,23,174,25,198,25,64,26,144,27,151,27,203,27,217,27,207,28, -223,28,78,29,237,29,244,29,120,31,197,31,214,31,114,32,134,32,194,32,201, -32,61,33,115,33,134,33,84,34,100,34,60,35,48,36,85,36,94,36,171,37, -16,40,32,40,99,40,120,40,140,40,160,40,217,40,184,43,150,44,166,44,137, -45,195,45,228,45,108,46,11,47,27,47,124,47,141,47,219,49,14,52,30,52, -4,54,192,54,194,54,220,54,236,54,252,54,93,55,160,56,92,57,107,57,116, -57,123,57,187,58,251,59,117,60,161,63,34,64,165,64,107,66,57,67,99,67, -215,67,0,0,152,75,0,0,67,35,37,117,116,105,108,115,72,112,97,116,104, +231,19,93,20,106,20,224,20,237,20,76,21,143,21,156,21,167,21,63,22,181, +22,225,22,80,23,158,25,182,25,44,26,124,27,131,27,183,27,197,27,187,28, +203,28,58,29,217,29,224,29,100,31,177,31,194,31,94,32,114,32,174,32,181, +32,41,33,95,33,114,33,64,34,80,34,40,35,28,36,65,36,74,36,151,37, +252,39,12,40,79,40,100,40,120,40,140,40,197,40,164,43,130,44,146,44,117, +45,175,45,208,45,84,46,243,46,3,47,100,47,117,47,195,49,246,51,6,52, +236,53,168,54,170,54,196,54,212,54,228,54,69,55,136,56,68,57,83,57,92, +57,99,57,159,58,219,59,81,60,113,63,242,63,117,64,55,66,5,67,47,67, +155,67,0,0,92,75,0,0,67,35,37,117,116,105,108,115,72,112,97,116,104, 45,115,116,114,105,110,103,63,64,98,115,98,115,76,110,111,114,109,97,108,45, 99,97,115,101,45,112,97,116,104,71,114,101,114,111,111,116,45,112,97,116,104, 1,20,102,105,110,100,45,101,120,101,99,117,116,97,98,108,101,45,112,97,116, @@ -183,869 +183,867 @@ 111,116,32,112,97,116,104,58,32,66,102,105,110,105,115,104,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,168,15,194,28,192,192,28,248,22,152,7,194,27,248,22,191,15,195,28, -192,192,248,22,128,16,195,11,0,21,35,114,120,34,94,91,92,92,93,91,92, +248,22,169,15,194,28,192,192,28,248,22,152,7,194,27,248,22,128,16,195,28, +192,192,248,22,129,16,195,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,169,15,23,195,2,10,28,248,22,168,15,23,195,2,10, -28,248,22,152,7,23,195,2,28,248,22,191,15,23,195,2,10,248,22,128,16, -23,195,2,11,12,250,22,177,11,2,42,2,43,23,197,2,28,28,248,22,169, -15,23,195,2,249,22,168,9,248,22,170,15,23,197,2,2,44,249,22,168,9, +86,94,28,28,248,22,170,15,23,195,2,10,28,248,22,169,15,23,195,2,10, +28,248,22,152,7,23,195,2,28,248,22,128,16,23,195,2,10,248,22,129,16, +23,195,2,11,12,250,22,178,11,2,42,2,43,23,197,2,28,28,248,22,170, +15,23,195,2,249,22,168,9,248,22,171,15,23,197,2,2,44,249,22,168,9, 247,22,179,8,2,44,27,28,248,22,152,7,23,196,2,23,195,2,248,22,164, -8,248,22,173,15,23,197,2,28,249,22,164,16,2,80,23,195,2,28,248,22, -152,7,195,248,22,176,15,195,194,27,248,22,191,7,23,195,1,249,22,177,15, -248,22,167,8,250,22,172,16,2,81,28,249,22,164,16,2,82,23,201,2,23, -199,1,250,22,172,16,2,83,23,202,1,2,45,80,144,44,37,38,2,44,28, -248,22,152,7,194,248,22,176,15,194,193,0,28,35,114,120,34,94,92,92,92, +8,248,22,174,15,23,197,2,28,249,22,165,16,2,80,23,195,2,28,248,22, +152,7,195,248,22,177,15,195,194,27,248,22,191,7,23,195,1,249,22,178,15, +248,22,167,8,250,22,173,16,2,81,28,249,22,165,16,2,82,23,201,2,23, +199,1,250,22,173,16,2,83,23,202,1,2,45,80,144,44,37,38,2,44,28, +248,22,152,7,194,248,22,177,15,194,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,168,15,23,195,2,10,28,248,22,152,7,23,195,2,28, -248,22,191,15,23,195,2,10,248,22,128,16,23,195,2,11,10,248,22,169,15, -23,195,2,12,252,22,177,11,2,5,2,46,36,23,199,2,23,200,2,28,28, -28,248,22,168,15,23,196,2,10,28,248,22,152,7,23,196,2,28,248,22,191, -15,23,196,2,10,248,22,128,16,23,196,2,11,10,248,22,169,15,23,196,2, -12,252,22,177,11,2,5,2,46,37,23,199,2,23,200,2,27,28,248,22,169, -15,23,196,2,248,22,170,15,23,196,2,247,22,171,15,86,95,28,28,248,22, -129,16,23,196,2,10,249,22,168,9,247,22,171,15,23,195,2,12,253,22,179, +95,28,28,28,248,22,169,15,23,195,2,10,28,248,22,152,7,23,195,2,28, +248,22,128,16,23,195,2,10,248,22,129,16,23,195,2,11,10,248,22,170,15, +23,195,2,12,252,22,178,11,2,5,2,46,36,23,199,2,23,200,2,28,28, +28,248,22,169,15,23,196,2,10,28,248,22,152,7,23,196,2,28,248,22,128, +16,23,196,2,10,248,22,129,16,23,196,2,11,10,248,22,170,15,23,196,2, +12,252,22,178,11,2,5,2,46,37,23,199,2,23,200,2,27,28,248,22,170, +15,23,196,2,248,22,171,15,23,196,2,247,22,172,15,86,95,28,28,248,22, +130,16,23,196,2,10,249,22,168,9,247,22,172,15,23,195,2,12,253,22,180, 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,47,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,171,15,28,249,22,168,9,28,248,22,169, -15,23,199,2,248,22,170,15,23,199,2,247,22,171,15,23,195,2,12,253,22, -179,11,2,5,6,37,37,103,105,118,101,110,32,112,97,116,104,115,32,117,115, +105,111,110,32,116,121,112,101,247,22,172,15,28,249,22,168,9,28,248,22,170, +15,23,199,2,248,22,171,15,23,199,2,247,22,172,15,23,195,2,12,253,22, +180,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,47,23,201,2,6,9,9,114,111,111,116,32,112,97,116,104,23,202, -2,27,27,248,22,133,16,28,248,22,129,16,23,199,2,23,198,1,248,22,130, -16,23,199,1,86,94,28,28,248,22,169,15,23,194,2,10,28,248,22,168,15, -23,194,2,10,28,248,22,152,7,23,194,2,28,248,22,191,15,23,194,2,10, -248,22,128,16,23,194,2,11,12,250,22,177,11,2,42,2,43,23,196,2,28, -28,248,22,169,15,23,194,2,249,22,168,9,248,22,170,15,23,196,2,2,44, +2,27,27,248,22,134,16,28,248,22,130,16,23,199,2,23,198,1,248,22,131, +16,23,199,1,86,94,28,28,248,22,170,15,23,194,2,10,28,248,22,169,15, +23,194,2,10,28,248,22,152,7,23,194,2,28,248,22,128,16,23,194,2,10, +248,22,129,16,23,194,2,11,12,250,22,178,11,2,42,2,43,23,196,2,28, +28,248,22,170,15,23,194,2,249,22,168,9,248,22,171,15,23,196,2,2,44, 249,22,168,9,247,22,179,8,2,44,27,28,248,22,152,7,23,195,2,23,194, -2,248,22,164,8,248,22,173,15,23,196,2,28,249,22,164,16,2,80,23,195, -2,28,248,22,152,7,194,248,22,176,15,194,193,27,248,22,191,7,23,195,1, -249,22,177,15,248,22,167,8,250,22,172,16,2,81,28,249,22,164,16,2,82, -23,201,2,23,199,1,250,22,172,16,2,83,23,202,1,2,45,80,144,47,37, -38,2,44,28,248,22,152,7,193,248,22,176,15,193,192,27,248,22,173,15,23, +2,248,22,164,8,248,22,174,15,23,196,2,28,249,22,165,16,2,80,23,195, +2,28,248,22,152,7,194,248,22,177,15,194,193,27,248,22,191,7,23,195,1, +249,22,178,15,248,22,167,8,250,22,173,16,2,81,28,249,22,165,16,2,82, +23,201,2,23,199,1,250,22,173,16,2,83,23,202,1,2,45,80,144,47,37, +38,2,44,28,248,22,152,7,193,248,22,177,15,193,192,27,248,22,174,15,23, 195,2,28,249,22,168,9,23,197,2,64,117,110,105,120,28,249,22,149,8,194, -5,1,47,28,248,22,169,15,198,197,248,22,176,15,198,249,22,186,15,199,249, -22,177,15,249,22,152,8,248,22,173,15,200,37,198,28,249,22,168,9,23,197, -2,2,44,249,22,186,15,23,200,1,249,22,177,15,28,249,22,164,16,0,27, +5,1,47,28,248,22,170,15,198,197,248,22,177,15,198,249,22,187,15,199,249, +22,178,15,249,22,152,8,248,22,174,15,200,37,198,28,249,22,168,9,23,197, +2,2,44,249,22,187,15,23,200,1,249,22,178,15,28,249,22,165,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,153,8,2,48,250,22,152,8,203,40, -41,5,1,92,249,22,152,8,202,42,28,249,22,164,16,2,85,23,199,2,249, -22,153,8,2,48,249,22,152,8,200,40,28,249,22,164,16,2,85,23,199,2, -249,22,153,8,2,48,249,22,152,8,200,40,28,249,22,164,16,0,14,35,114, +41,5,1,92,249,22,152,8,202,42,28,249,22,165,16,2,85,23,199,2,249, +22,153,8,2,48,249,22,152,8,200,40,28,249,22,165,16,2,85,23,199,2, +249,22,153,8,2,48,249,22,152,8,200,40,28,249,22,165,16,0,14,35,114, 120,34,94,92,92,92,92,92,92,92,92,34,23,199,2,249,22,153,8,5,4, -85,78,67,92,249,22,152,8,200,38,28,249,22,164,16,0,12,35,114,120,34, +85,78,67,92,249,22,152,8,200,38,28,249,22,165,16,0,12,35,114,120,34, 94,91,97,45,122,93,58,34,198,249,22,153,8,250,22,152,8,201,36,37,249, 22,152,8,200,38,12,198,12,32,87,88,148,8,36,39,53,11,70,102,111,117, 110,100,45,101,120,101,99,222,33,90,32,88,88,148,8,36,40,58,11,64,110, -101,120,116,222,33,89,27,248,22,131,16,23,196,2,28,249,22,170,9,23,195, -2,23,197,1,11,28,248,22,191,15,23,194,2,27,249,22,186,15,23,197,1, -23,196,1,28,23,197,2,90,144,39,11,89,146,39,36,11,248,22,189,15,23, -197,2,86,95,23,195,1,23,194,1,27,28,23,202,2,27,248,22,131,16,23, -199,2,28,249,22,170,9,23,195,2,23,200,2,11,28,248,22,191,15,23,194, -2,250,2,87,23,205,2,23,206,2,249,22,186,15,23,200,2,23,198,1,250, +101,120,116,222,33,89,27,248,22,132,16,23,196,2,28,249,22,170,9,23,195, +2,23,197,1,11,28,248,22,128,16,23,194,2,27,249,22,187,15,23,197,1, +23,196,1,28,23,197,2,90,144,39,11,89,146,39,36,11,248,22,190,15,23, +197,2,86,95,23,195,1,23,194,1,27,28,23,202,2,27,248,22,132,16,23, +199,2,28,249,22,170,9,23,195,2,23,200,2,11,28,248,22,128,16,23,194, +2,250,2,87,23,205,2,23,206,2,249,22,187,15,23,200,2,23,198,1,250, 2,87,23,205,2,23,206,2,23,196,1,11,28,23,193,2,192,86,94,23,193, -1,27,28,248,22,168,15,23,196,2,27,249,22,186,15,23,198,2,23,205,2, -28,28,248,22,181,15,193,10,248,22,180,15,193,192,11,11,28,23,193,2,192, -86,94,23,193,1,28,23,203,2,11,27,248,22,131,16,23,200,2,28,249,22, -170,9,194,23,201,1,11,28,248,22,191,15,193,250,2,87,205,206,249,22,186, +1,27,28,248,22,169,15,23,196,2,27,249,22,187,15,23,198,2,23,205,2, +28,28,248,22,182,15,193,10,248,22,181,15,193,192,11,11,28,23,193,2,192, +86,94,23,193,1,28,23,203,2,11,27,248,22,132,16,23,200,2,28,249,22, +170,9,194,23,201,1,11,28,248,22,128,16,193,250,2,87,205,206,249,22,187, 15,200,197,250,2,87,205,206,195,192,86,94,23,194,1,28,23,196,2,90,144, -39,11,89,146,39,36,11,248,22,189,15,23,197,2,86,95,23,195,1,23,194, -1,27,28,23,201,2,27,248,22,131,16,23,199,2,28,249,22,170,9,23,195, -2,23,200,2,11,28,248,22,191,15,23,194,2,250,2,87,23,204,2,23,205, -2,249,22,186,15,23,200,2,23,198,1,250,2,87,23,204,2,23,205,2,23, -196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,168,15,23,196, -2,27,249,22,186,15,23,198,2,23,204,2,28,28,248,22,181,15,193,10,248, -22,180,15,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,202,2, -11,27,248,22,131,16,23,200,2,28,249,22,170,9,194,23,201,1,11,28,248, -22,191,15,193,250,2,87,204,205,249,22,186,15,200,197,250,2,87,204,205,195, -192,28,23,193,2,90,144,39,11,89,146,39,36,11,248,22,189,15,23,199,2, +39,11,89,146,39,36,11,248,22,190,15,23,197,2,86,95,23,195,1,23,194, +1,27,28,23,201,2,27,248,22,132,16,23,199,2,28,249,22,170,9,23,195, +2,23,200,2,11,28,248,22,128,16,23,194,2,250,2,87,23,204,2,23,205, +2,249,22,187,15,23,200,2,23,198,1,250,2,87,23,204,2,23,205,2,23, +196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,169,15,23,196, +2,27,249,22,187,15,23,198,2,23,204,2,28,28,248,22,182,15,193,10,248, +22,181,15,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,202,2, +11,27,248,22,132,16,23,200,2,28,249,22,170,9,194,23,201,1,11,28,248, +22,128,16,193,250,2,87,204,205,249,22,187,15,200,197,250,2,87,204,205,195, +192,28,23,193,2,90,144,39,11,89,146,39,36,11,248,22,190,15,23,199,2, 86,95,23,195,1,23,194,1,27,28,23,198,2,251,2,88,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,168,15,195,27,249,22,186,15,197,200,28,28,248,22,181,15,193,10,248,22, -180,15,193,192,11,11,28,192,192,28,198,11,251,2,88,198,203,201,202,194,32, +22,169,15,195,27,249,22,187,15,197,200,28,28,248,22,182,15,193,10,248,22, +181,15,193,192,11,11,28,192,192,28,198,11,251,2,88,198,203,201,202,194,32, 91,88,148,8,36,40,57,11,2,51,222,33,92,28,248,22,88,23,197,2,11, -27,249,22,186,15,248,22,130,16,248,22,81,23,201,2,23,196,2,28,248,22, -180,15,23,194,2,250,2,87,197,198,195,86,94,23,193,1,27,248,22,82,23, -199,1,28,248,22,88,23,194,2,11,27,249,22,186,15,248,22,130,16,248,22, -81,23,198,2,23,198,2,28,248,22,180,15,23,194,2,250,2,87,199,200,195, +27,249,22,187,15,248,22,131,16,248,22,81,23,201,2,23,196,2,28,248,22, +181,15,23,194,2,250,2,87,197,198,195,86,94,23,193,1,27,248,22,82,23, +199,1,28,248,22,88,23,194,2,11,27,249,22,187,15,248,22,131,16,248,22, +81,23,198,2,23,198,2,28,248,22,181,15,23,194,2,250,2,87,199,200,195, 86,94,23,193,1,27,248,22,82,23,196,1,28,248,22,88,23,194,2,11,27, -249,22,186,15,248,22,130,16,248,22,81,23,198,2,23,200,2,28,248,22,180, +249,22,187,15,248,22,131,16,248,22,81,23,198,2,23,200,2,28,248,22,181, 15,23,194,2,250,2,87,201,202,195,86,94,23,193,1,27,248,22,82,23,196, -1,28,248,22,88,23,194,2,11,27,249,22,186,15,248,22,130,16,248,22,81, -197,201,28,248,22,180,15,193,250,2,87,203,204,195,251,2,91,203,204,205,248, -22,82,198,86,95,28,28,248,22,168,15,23,195,2,10,28,248,22,152,7,23, -195,2,28,248,22,191,15,23,195,2,10,248,22,128,16,23,195,2,11,12,250, -22,177,11,2,6,2,49,23,197,2,28,28,23,195,2,28,28,248,22,168,15, -23,196,2,10,28,248,22,152,7,23,196,2,28,248,22,191,15,23,196,2,10, -248,22,128,16,23,196,2,11,248,22,191,15,23,196,2,11,10,12,250,22,177, +1,28,248,22,88,23,194,2,11,27,249,22,187,15,248,22,131,16,248,22,81, +197,201,28,248,22,181,15,193,250,2,87,203,204,195,251,2,91,203,204,205,248, +22,82,198,86,95,28,28,248,22,169,15,23,195,2,10,28,248,22,152,7,23, +195,2,28,248,22,128,16,23,195,2,10,248,22,129,16,23,195,2,11,12,250, +22,178,11,2,6,2,49,23,197,2,28,28,23,195,2,28,28,248,22,169,15, +23,196,2,10,28,248,22,152,7,23,196,2,28,248,22,128,16,23,196,2,10, +248,22,129,16,23,196,2,11,248,22,128,16,23,196,2,11,10,12,250,22,178, 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,191,15,23,195,2, -90,144,39,11,89,146,39,36,11,248,22,189,15,23,198,2,249,22,168,9,194, +101,45,112,97,116,104,63,41,41,23,198,2,28,28,248,22,128,16,23,195,2, +90,144,39,11,89,146,39,36,11,248,22,190,15,23,198,2,249,22,168,9,194, 2,50,11,27,249,22,174,8,247,22,173,8,5,4,80,65,84,72,27,28,23, 194,2,249,80,143,40,41,249,22,164,8,23,198,1,7,63,9,86,94,23,194, -1,9,27,28,249,22,168,9,247,22,179,8,2,44,249,22,80,248,22,177,15, -5,1,46,23,196,1,23,194,1,28,248,22,88,23,194,2,11,27,249,22,186, -15,248,22,130,16,248,22,81,23,198,2,23,200,2,28,248,22,180,15,23,194, +1,9,27,28,249,22,168,9,247,22,179,8,2,44,249,22,80,248,22,178,15, +5,1,46,23,196,1,23,194,1,28,248,22,88,23,194,2,11,27,249,22,187, +15,248,22,131,16,248,22,81,23,198,2,23,200,2,28,248,22,181,15,23,194, 2,250,2,87,201,202,195,86,94,23,193,1,27,248,22,82,23,196,1,28,248, -22,88,23,194,2,11,27,249,22,186,15,248,22,130,16,248,22,81,23,198,2, -23,202,2,28,248,22,180,15,23,194,2,250,2,87,203,204,195,86,94,23,193, -1,27,248,22,82,23,196,1,28,248,22,88,23,194,2,11,27,249,22,186,15, -248,22,130,16,248,22,81,23,198,2,23,204,2,28,248,22,180,15,23,194,2, +22,88,23,194,2,11,27,249,22,187,15,248,22,131,16,248,22,81,23,198,2, +23,202,2,28,248,22,181,15,23,194,2,250,2,87,203,204,195,86,94,23,193, +1,27,248,22,82,23,196,1,28,248,22,88,23,194,2,11,27,249,22,187,15, +248,22,131,16,248,22,81,23,198,2,23,204,2,28,248,22,181,15,23,194,2, 250,2,87,205,206,195,86,94,23,193,1,27,248,22,82,23,196,1,28,248,22, -88,23,194,2,11,27,249,22,186,15,248,22,130,16,248,22,81,197,205,28,248, -22,180,15,193,250,2,87,23,15,23,16,195,251,2,91,23,15,23,16,23,17, -248,22,82,198,27,248,22,130,16,23,196,1,28,248,22,180,15,193,250,2,87, +88,23,194,2,11,27,249,22,187,15,248,22,131,16,248,22,81,197,205,28,248, +22,181,15,193,250,2,87,23,15,23,16,195,251,2,91,23,15,23,16,23,17, +248,22,82,198,27,248,22,131,16,23,196,1,28,248,22,181,15,193,250,2,87, 198,199,195,11,250,80,144,39,40,39,196,197,11,250,80,144,39,40,39,196,11, 11,32,96,88,148,8,36,39,57,11,2,51,222,33,98,0,8,35,114,120,35, -34,92,34,34,27,249,22,160,16,23,197,2,23,198,2,28,23,193,2,86,94, +34,92,34,34,27,249,22,161,16,23,197,2,23,198,2,28,23,193,2,86,94, 23,196,1,27,248,22,102,23,195,2,27,27,248,22,111,23,197,1,27,249,22, -160,16,23,201,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,102, +161,16,23,201,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,102, 23,195,2,27,250,2,96,23,203,2,23,204,1,248,22,111,23,199,1,28,249, -22,149,8,23,196,2,2,52,249,22,94,23,202,2,194,249,22,80,248,22,177, -15,28,249,22,168,9,247,22,179,8,2,44,250,22,172,16,2,97,23,200,1, +22,149,8,23,196,2,2,52,249,22,94,23,202,2,194,249,22,80,248,22,178, +15,28,249,22,168,9,247,22,179,8,2,44,250,22,173,16,2,97,23,200,1, 2,52,196,194,86,95,23,199,1,23,193,1,28,249,22,149,8,23,196,2,2, -52,249,22,94,23,200,2,9,249,22,80,248,22,177,15,28,249,22,168,9,247, -22,179,8,2,44,250,22,172,16,2,97,23,200,1,2,52,196,9,28,249,22, +52,249,22,94,23,200,2,9,249,22,80,248,22,178,15,28,249,22,168,9,247, +22,179,8,2,44,250,22,173,16,2,97,23,200,1,2,52,196,9,28,249,22, 149,8,23,196,2,2,52,249,22,94,197,194,86,94,23,196,1,249,22,80,248, -22,177,15,28,249,22,168,9,247,22,179,8,2,44,250,22,172,16,2,97,23, +22,178,15,28,249,22,168,9,247,22,179,8,2,44,250,22,173,16,2,97,23, 200,1,2,52,196,194,86,94,23,193,1,28,249,22,149,8,23,198,2,2,52, -249,22,94,195,9,86,94,23,194,1,249,22,80,248,22,177,15,28,249,22,168, -9,247,22,179,8,2,44,250,22,172,16,2,97,23,202,1,2,52,198,9,86, -95,28,28,248,22,141,8,194,10,248,22,152,7,194,12,250,22,177,11,2,7, +249,22,94,195,9,86,94,23,194,1,249,22,80,248,22,178,15,28,249,22,168, +9,247,22,179,8,2,44,250,22,173,16,2,97,23,202,1,2,52,198,9,86, +95,28,28,248,22,141,8,194,10,248,22,152,7,194,12,250,22,178,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,89,195,249,22,4,22,168,15,196,11,12,250,22, -177,11,2,7,6,14,14,40,108,105,115,116,111,102,32,112,97,116,104,63,41, +103,63,41,196,28,28,248,22,89,195,249,22,4,22,169,15,196,11,12,250,22, +178,11,2,7,6,14,14,40,108,105,115,116,111,102,32,112,97,116,104,63,41, 197,250,2,96,197,195,28,248,22,152,7,197,248,22,166,8,197,196,28,28,248, 22,0,23,195,2,249,22,50,23,196,2,36,11,20,13,144,80,144,36,43,37, -26,29,80,144,8,29,44,37,249,22,33,11,80,144,8,31,43,37,22,138,15, -10,22,139,15,10,22,140,15,10,22,143,15,10,22,142,15,11,22,144,15,10, -22,141,15,10,22,145,15,10,22,146,15,10,22,147,15,10,22,148,15,10,22, -149,15,11,22,150,15,10,22,136,15,11,247,23,194,1,250,22,177,11,2,8, -2,53,23,197,1,86,94,28,28,248,22,168,15,23,195,2,10,28,248,22,152, -7,23,195,2,28,248,22,191,15,23,195,2,10,248,22,128,16,23,195,2,11, -12,250,22,177,11,23,196,2,2,49,23,197,2,28,248,22,191,15,23,195,2, -12,251,22,179,11,23,197,1,2,54,2,47,23,198,1,86,94,28,28,248,22, -168,15,23,195,2,10,28,248,22,152,7,23,195,2,28,248,22,191,15,23,195, -2,10,248,22,128,16,23,195,2,11,12,250,22,177,11,23,196,2,2,49,23, -197,2,28,248,22,191,15,23,195,2,12,251,22,179,11,23,197,1,2,54,2, -47,23,198,1,86,94,86,94,28,28,248,22,168,15,23,195,2,10,28,248,22, -152,7,23,195,2,28,248,22,191,15,23,195,2,10,248,22,128,16,23,195,2, -11,12,250,22,177,11,23,196,2,2,49,23,197,2,28,248,22,191,15,23,195, -2,86,94,23,194,1,12,251,22,179,11,23,197,2,2,54,2,47,23,198,1, +26,29,80,144,8,29,44,37,249,22,33,11,80,144,8,31,43,37,22,139,15, +10,22,140,15,10,22,141,15,10,22,144,15,10,22,143,15,11,22,145,15,10, +22,142,15,10,22,146,15,10,22,147,15,10,22,148,15,10,22,149,15,10,22, +150,15,11,22,151,15,10,22,137,15,11,247,23,194,1,250,22,178,11,2,8, +2,53,23,197,1,86,94,28,28,248,22,169,15,23,195,2,10,28,248,22,152, +7,23,195,2,28,248,22,128,16,23,195,2,10,248,22,129,16,23,195,2,11, +12,250,22,178,11,23,196,2,2,49,23,197,2,28,248,22,128,16,23,195,2, +12,251,22,180,11,23,197,1,2,54,2,47,23,198,1,86,94,28,28,248,22, +169,15,23,195,2,10,28,248,22,152,7,23,195,2,28,248,22,128,16,23,195, +2,10,248,22,129,16,23,195,2,11,12,250,22,178,11,23,196,2,2,49,23, +197,2,28,248,22,128,16,23,195,2,12,251,22,180,11,23,197,1,2,54,2, +47,23,198,1,86,94,86,94,28,28,248,22,169,15,23,195,2,10,28,248,22, +152,7,23,195,2,28,248,22,128,16,23,195,2,10,248,22,129,16,23,195,2, +11,12,250,22,178,11,23,196,2,2,49,23,197,2,28,248,22,128,16,23,195, +2,86,94,23,194,1,12,251,22,180,11,23,197,2,2,54,2,47,23,198,1, 249,22,3,20,20,94,88,148,8,36,37,47,11,9,223,2,33,102,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,177,11,23,196,1,2,55,23,197,1,86,94,28,28,248,22,168,15,23,194, -2,10,28,248,22,152,7,23,194,2,28,248,22,191,15,23,194,2,10,248,22, -128,16,23,194,2,11,12,250,22,177,11,2,15,2,49,23,196,2,28,248,22, -191,15,23,194,2,12,251,22,179,11,2,15,2,54,2,47,23,197,1,86,95, -86,94,86,94,28,28,248,22,168,15,23,196,2,10,28,248,22,152,7,23,196, -2,28,248,22,191,15,23,196,2,10,248,22,128,16,23,196,2,11,12,250,22, -177,11,2,15,2,49,23,198,2,28,248,22,191,15,23,196,2,12,251,22,179, +22,178,11,23,196,1,2,55,23,197,1,86,94,28,28,248,22,169,15,23,194, +2,10,28,248,22,152,7,23,194,2,28,248,22,128,16,23,194,2,10,248,22, +129,16,23,194,2,11,12,250,22,178,11,2,15,2,49,23,196,2,28,248,22, +128,16,23,194,2,12,251,22,180,11,2,15,2,54,2,47,23,197,1,86,95, +86,94,86,94,28,28,248,22,169,15,23,196,2,10,28,248,22,152,7,23,196, +2,28,248,22,128,16,23,196,2,10,248,22,129,16,23,196,2,11,12,250,22, +178,11,2,15,2,49,23,198,2,28,248,22,128,16,23,196,2,12,251,22,180, 11,2,15,2,54,2,47,23,199,2,249,22,3,32,0,88,148,8,36,37,46, 11,9,222,33,105,23,198,2,28,28,248,22,0,23,195,2,249,22,50,23,196, -2,37,11,12,250,22,177,11,2,15,2,55,23,197,2,252,80,143,41,49,23, -199,1,23,200,1,23,201,1,11,11,86,94,28,28,248,22,168,15,23,194,2, -10,28,248,22,152,7,23,194,2,28,248,22,191,15,23,194,2,10,248,22,128, -16,23,194,2,11,12,250,22,177,11,2,17,2,49,23,196,2,28,248,22,191, -15,23,194,2,12,251,22,179,11,2,17,2,54,2,47,23,197,1,86,96,86, -94,28,28,248,22,168,15,23,197,2,10,28,248,22,152,7,23,197,2,28,248, -22,191,15,23,197,2,10,248,22,128,16,23,197,2,11,12,250,22,177,11,2, -17,2,49,23,199,2,28,248,22,191,15,23,197,2,12,251,22,179,11,2,17, -2,54,2,47,23,200,2,86,94,86,94,28,28,248,22,168,15,23,198,2,10, -28,248,22,152,7,23,198,2,28,248,22,191,15,23,198,2,10,248,22,128,16, -23,198,2,11,12,250,22,177,11,2,17,2,49,23,200,2,28,248,22,191,15, -23,198,2,12,251,22,179,11,2,17,2,54,2,47,23,201,2,249,22,3,32, +2,37,11,12,250,22,178,11,2,15,2,55,23,197,2,252,80,143,41,49,23, +199,1,23,200,1,23,201,1,11,11,86,94,28,28,248,22,169,15,23,194,2, +10,28,248,22,152,7,23,194,2,28,248,22,128,16,23,194,2,10,248,22,129, +16,23,194,2,11,12,250,22,178,11,2,17,2,49,23,196,2,28,248,22,128, +16,23,194,2,12,251,22,180,11,2,17,2,54,2,47,23,197,1,86,96,86, +94,28,28,248,22,169,15,23,197,2,10,28,248,22,152,7,23,197,2,28,248, +22,128,16,23,197,2,10,248,22,129,16,23,197,2,11,12,250,22,178,11,2, +17,2,49,23,199,2,28,248,22,128,16,23,197,2,12,251,22,180,11,2,17, +2,54,2,47,23,200,2,86,94,86,94,28,28,248,22,169,15,23,198,2,10, +28,248,22,152,7,23,198,2,28,248,22,128,16,23,198,2,10,248,22,129,16, +23,198,2,11,12,250,22,178,11,2,17,2,49,23,200,2,28,248,22,128,16, +23,198,2,12,251,22,180,11,2,17,2,54,2,47,23,201,2,249,22,3,32, 0,88,148,8,36,37,46,11,9,222,33,107,23,200,2,28,28,248,22,0,23, -195,2,249,22,50,23,196,2,37,11,12,250,22,177,11,2,17,2,55,23,197, +195,2,249,22,50,23,196,2,37,11,12,250,22,178,11,2,17,2,55,23,197, 2,252,80,143,41,49,23,199,1,23,202,1,23,203,1,23,201,1,23,200,1, -27,248,22,145,16,2,56,28,248,22,129,16,23,194,2,248,22,132,16,23,194, -1,28,248,22,128,16,23,194,2,90,144,39,11,89,146,39,36,11,248,22,189, -15,249,22,130,16,27,248,22,145,16,2,57,250,80,144,47,40,39,23,196,1, -11,11,248,22,145,16,2,58,86,95,23,195,1,23,194,1,248,22,132,16,249, -22,130,16,23,199,1,23,196,1,27,250,80,144,41,40,39,248,22,145,16,2, -57,23,197,1,10,28,23,193,2,248,22,132,16,23,194,1,11,249,80,144,38, -52,37,36,80,144,38,8,40,39,27,248,22,145,16,2,59,28,248,22,129,16, -23,194,2,248,22,132,16,23,194,1,28,248,22,128,16,23,194,2,90,144,39, -11,89,146,39,36,11,248,22,189,15,249,22,130,16,27,248,22,145,16,2,57, -250,80,144,47,40,39,23,196,1,11,11,248,22,145,16,2,58,86,95,23,195, -1,23,194,1,248,22,132,16,249,22,130,16,23,199,1,23,196,1,27,250,80, -144,41,40,39,248,22,145,16,2,57,23,197,1,10,28,23,193,2,248,22,132, -16,23,194,1,11,249,80,144,38,52,37,37,80,144,38,8,41,39,27,20,13, -144,80,144,37,43,37,26,29,80,144,8,30,44,37,249,22,33,11,80,144,8, -32,43,37,22,138,15,10,22,139,15,10,22,140,15,10,22,143,15,10,22,142, -15,11,22,144,15,10,22,141,15,10,22,145,15,10,22,146,15,10,22,147,15, -10,22,148,15,10,22,149,15,11,22,150,15,10,22,136,15,11,247,22,147,6, -28,248,22,149,2,193,192,11,27,28,23,195,2,249,22,186,15,23,197,1,6, -11,11,99,111,110,102,105,103,46,114,107,116,100,86,94,23,195,1,11,27,28, -23,194,2,28,248,22,180,15,23,195,2,249,22,139,6,23,196,1,80,144,40, -8,42,39,11,11,28,192,192,21,17,1,0,250,22,158,2,23,196,1,2,60, -247,22,170,8,250,22,158,2,195,2,60,247,22,170,8,28,248,22,152,7,23, -195,2,27,248,22,176,15,23,196,1,28,248,22,129,16,23,194,2,192,249,22, -130,16,23,195,1,27,247,80,144,40,51,39,28,23,193,2,192,86,94,23,193, -1,247,22,146,16,28,248,22,141,8,23,195,2,27,248,22,177,15,23,196,1, -28,248,22,129,16,23,194,2,192,249,22,130,16,23,195,1,27,247,80,144,40, -51,39,28,23,193,2,192,86,94,23,193,1,247,22,146,16,28,248,22,168,15, -23,195,2,28,248,22,129,16,23,195,2,193,249,22,130,16,23,196,1,27,247, -80,144,39,51,39,28,23,193,2,192,86,94,23,193,1,247,22,146,16,193,27, -248,22,145,16,2,56,28,248,22,129,16,23,194,2,248,22,132,16,23,194,1, -28,248,22,128,16,23,194,2,90,144,39,11,89,146,39,36,11,248,22,189,15, -249,22,130,16,27,248,22,145,16,2,57,250,80,144,47,40,39,23,196,1,11, -11,248,22,145,16,2,58,86,95,23,195,1,23,194,1,248,22,132,16,249,22, -130,16,23,199,1,23,196,1,27,250,80,144,41,40,39,248,22,145,16,2,57, -23,197,1,10,28,23,193,2,248,22,132,16,23,194,1,11,28,248,22,129,16, -23,195,2,193,249,22,130,16,23,196,1,27,249,80,144,41,52,37,36,80,144, -41,8,43,39,28,23,193,2,192,86,94,23,193,1,247,22,146,16,28,248,22, -129,16,23,195,2,248,22,132,16,23,195,1,28,248,22,128,16,23,195,2,90, -144,39,11,89,146,39,36,11,248,22,189,15,249,22,130,16,27,248,22,145,16, -2,57,250,80,144,46,40,39,23,196,1,11,11,248,22,145,16,2,58,86,95, -23,195,1,23,194,1,248,22,132,16,249,22,130,16,23,200,1,23,196,1,27, -250,80,144,40,40,39,248,22,145,16,2,57,23,198,1,10,28,23,193,2,248, -22,132,16,23,194,1,11,28,248,22,88,23,196,2,9,28,248,22,81,23,196, -2,249,22,80,27,248,22,153,20,23,199,2,28,248,22,152,7,23,194,2,27, -248,22,176,15,23,195,1,28,248,22,129,16,23,194,2,192,249,22,130,16,23, -195,1,27,247,80,144,43,51,39,28,23,193,2,192,86,94,23,193,1,247,22, -146,16,28,248,22,141,8,23,194,2,27,248,22,177,15,23,195,1,28,248,22, -129,16,23,194,2,192,249,22,130,16,23,195,1,27,247,80,144,43,51,39,28, -23,193,2,192,86,94,23,193,1,247,22,146,16,28,248,22,168,15,23,194,2, -28,248,22,129,16,23,194,2,192,249,22,130,16,23,195,1,27,247,80,144,42, -51,39,28,23,193,2,192,86,94,23,193,1,247,22,146,16,192,27,248,22,154, -20,23,199,1,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,249,22, -80,248,80,144,42,57,39,248,22,153,20,23,197,2,27,248,22,154,20,23,197, -1,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,249,22,80,248,80, -144,45,57,39,248,22,153,20,23,197,2,249,80,144,46,8,44,39,23,204,1, -248,22,154,20,23,198,1,249,22,94,23,202,2,249,80,144,46,8,44,39,23, -204,1,248,22,154,20,23,198,1,249,22,94,23,199,2,27,248,22,154,20,23, -197,1,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,249,22,80,248, -80,144,45,57,39,248,22,153,20,23,197,2,249,80,144,46,8,44,39,23,204, -1,248,22,154,20,23,198,1,249,22,94,23,202,2,249,80,144,46,8,44,39, -23,204,1,248,22,154,20,23,198,1,249,22,94,23,196,2,27,248,22,154,20, -23,199,1,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,249,22,80, -248,80,144,42,57,39,248,22,153,20,23,197,2,27,248,22,154,20,23,197,1, -28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,249,22,80,248,80,144, -45,57,39,248,22,153,20,23,197,2,249,80,144,46,8,44,39,23,204,1,248, -22,154,20,23,198,1,249,22,94,23,202,2,249,80,144,46,8,44,39,23,204, -1,248,22,154,20,23,198,1,249,22,94,23,199,2,27,248,22,154,20,23,197, -1,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,249,22,80,248,80, -144,45,57,39,248,22,153,20,23,197,2,249,80,144,46,8,44,39,23,204,1, -248,22,154,20,23,198,1,249,22,94,23,202,2,249,80,144,46,8,44,39,23, -204,1,248,22,154,20,23,198,1,27,250,22,158,2,23,198,1,23,199,1,11, -28,192,249,80,144,39,8,44,39,198,194,196,27,248,22,145,16,2,59,28,248, -22,129,16,23,194,2,248,22,132,16,23,194,1,28,248,22,128,16,23,194,2, -90,144,39,11,89,146,39,36,11,248,22,189,15,249,22,130,16,27,248,22,145, -16,2,57,250,80,144,47,40,39,23,196,1,11,11,248,22,145,16,2,58,86, -95,23,195,1,23,194,1,248,22,132,16,249,22,130,16,23,199,1,23,196,1, -27,250,80,144,41,40,39,248,22,145,16,2,57,23,197,1,10,28,23,193,2, -248,22,132,16,23,194,1,11,27,248,80,144,38,55,39,249,80,144,40,52,37, -37,80,144,40,8,45,39,27,27,250,22,158,2,23,198,2,70,108,105,110,107, -115,45,102,105,108,101,11,27,28,23,194,2,23,194,1,86,94,23,194,1,249, -22,186,15,27,250,22,158,2,23,202,2,69,115,104,97,114,101,45,100,105,114, -11,28,192,192,249,22,186,15,62,117,112,6,5,5,115,104,97,114,101,2,61, -28,248,22,152,7,23,194,2,27,248,22,176,15,23,195,1,28,248,22,129,16, -23,194,2,192,249,22,130,16,23,195,1,27,247,80,144,44,51,39,28,23,193, -2,192,86,94,23,193,1,247,22,146,16,28,248,22,141,8,23,194,2,27,248, -22,177,15,23,195,1,28,248,22,129,16,23,194,2,192,249,22,130,16,23,195, -1,27,247,80,144,44,51,39,28,23,193,2,192,86,94,23,193,1,247,22,146, -16,28,248,22,168,15,23,194,2,28,248,22,129,16,23,194,2,192,249,22,130, -16,23,195,1,27,247,80,144,43,51,39,28,23,193,2,192,86,94,23,193,1, -247,22,146,16,192,250,22,94,248,22,90,11,28,247,22,152,16,28,247,22,153, -16,248,22,90,250,22,186,15,248,22,145,16,2,62,250,22,158,2,23,204,2, -2,60,247,22,170,8,2,61,9,9,28,247,22,153,16,250,80,144,44,59,39, -23,200,1,78,108,105,110,107,115,45,115,101,97,114,99,104,45,102,105,108,101, -115,248,22,90,23,200,1,9,248,22,167,13,23,194,1,249,22,16,80,144,38, -8,26,38,28,248,22,187,12,23,197,2,86,94,23,196,1,32,0,88,148,8, -36,36,41,11,9,222,11,20,20,94,88,148,8,36,36,43,11,9,223,3,33, -125,23,196,1,32,127,88,148,36,37,56,11,2,51,222,33,128,2,90,144,39, -11,89,146,39,36,11,248,22,189,15,23,197,1,86,95,23,195,1,23,194,1, -28,248,22,168,15,23,194,2,28,248,22,181,15,23,194,2,249,22,144,6,23, -195,1,32,0,88,148,8,36,36,41,11,9,222,11,90,144,39,11,89,146,39, -36,11,248,22,189,15,23,197,1,86,95,23,195,1,23,194,1,28,248,22,168, -15,23,194,2,28,248,22,181,15,23,194,2,249,22,144,6,23,195,1,32,0, -88,148,8,36,36,41,11,9,222,11,90,144,39,11,89,146,39,36,11,248,22, -189,15,23,197,1,86,95,23,195,1,23,194,1,28,248,22,168,15,23,194,2, -28,248,22,181,15,23,194,2,249,22,144,6,23,195,1,32,0,88,148,8,36, -36,41,11,9,222,11,90,144,39,11,89,146,39,36,11,248,22,189,15,23,197, -1,86,95,23,195,1,23,194,1,28,248,22,168,15,23,194,2,28,248,22,181, -15,23,194,2,249,22,144,6,23,195,1,32,0,88,148,8,36,36,41,11,9, -222,11,248,2,127,23,194,1,11,11,11,11,32,129,2,88,148,8,36,37,55, -11,2,51,222,33,130,2,27,249,22,162,6,8,128,128,23,196,2,28,248,22, +27,248,22,146,16,2,56,28,248,22,130,16,23,194,2,248,22,133,16,23,194, +1,28,248,22,129,16,23,194,2,90,144,39,11,89,146,39,36,11,248,22,190, +15,249,22,131,16,250,80,144,46,40,39,248,22,146,16,2,57,11,11,248,22, +146,16,2,58,86,95,23,195,1,23,194,1,248,22,133,16,249,22,131,16,23, +199,1,23,196,1,27,250,80,144,41,40,39,248,22,146,16,2,57,23,197,1, +10,28,23,193,2,248,22,133,16,23,194,1,11,249,80,144,38,52,37,36,80, +144,38,8,40,39,27,248,22,146,16,2,59,28,248,22,130,16,23,194,2,248, +22,133,16,23,194,1,28,248,22,129,16,23,194,2,90,144,39,11,89,146,39, +36,11,248,22,190,15,249,22,131,16,250,80,144,46,40,39,248,22,146,16,2, +57,11,11,248,22,146,16,2,58,86,95,23,195,1,23,194,1,248,22,133,16, +249,22,131,16,23,199,1,23,196,1,27,250,80,144,41,40,39,248,22,146,16, +2,57,23,197,1,10,28,23,193,2,248,22,133,16,23,194,1,11,249,80,144, +38,52,37,37,80,144,38,8,41,39,27,20,13,144,80,144,37,43,37,26,29, +80,144,8,30,44,37,249,22,33,11,80,144,8,32,43,37,22,139,15,10,22, +140,15,10,22,141,15,10,22,144,15,10,22,143,15,11,22,145,15,10,22,142, +15,10,22,146,15,10,22,147,15,10,22,148,15,10,22,149,15,10,22,150,15, +11,22,151,15,10,22,137,15,11,247,22,147,6,28,248,22,149,2,193,192,11, +27,28,23,195,2,249,22,187,15,23,197,1,6,11,11,99,111,110,102,105,103, +46,114,107,116,100,86,94,23,195,1,11,27,28,23,194,2,28,248,22,181,15, +23,195,2,249,22,139,6,23,196,1,80,144,40,8,42,39,11,11,28,192,192, +21,17,1,0,250,22,158,2,23,196,1,2,60,247,22,170,8,250,22,158,2, +195,2,60,247,22,170,8,28,248,22,152,7,23,195,2,27,248,22,177,15,23, +196,1,28,248,22,130,16,23,194,2,192,249,22,131,16,23,195,1,27,247,80, +144,40,51,39,28,23,193,2,192,86,94,23,193,1,247,22,147,16,28,248,22, +141,8,23,195,2,27,248,22,178,15,23,196,1,28,248,22,130,16,23,194,2, +192,249,22,131,16,23,195,1,27,247,80,144,40,51,39,28,23,193,2,192,86, +94,23,193,1,247,22,147,16,28,248,22,169,15,23,195,2,28,248,22,130,16, +23,195,2,193,249,22,131,16,23,196,1,27,247,80,144,39,51,39,28,23,193, +2,192,86,94,23,193,1,247,22,147,16,193,27,248,22,146,16,2,56,28,248, +22,130,16,23,194,2,248,22,133,16,23,194,1,28,248,22,129,16,23,194,2, +90,144,39,11,89,146,39,36,11,248,22,190,15,249,22,131,16,250,80,144,46, +40,39,248,22,146,16,2,57,11,11,248,22,146,16,2,58,86,95,23,195,1, +23,194,1,248,22,133,16,249,22,131,16,23,199,1,23,196,1,27,250,80,144, +41,40,39,248,22,146,16,2,57,23,197,1,10,28,23,193,2,248,22,133,16, +23,194,1,11,28,248,22,130,16,23,195,2,193,249,22,131,16,23,196,1,27, +249,80,144,41,52,37,36,80,144,41,8,43,39,28,23,193,2,192,86,94,23, +193,1,247,22,147,16,28,248,22,130,16,23,195,2,248,22,133,16,23,195,1, +28,248,22,129,16,23,195,2,90,144,39,11,89,146,39,36,11,248,22,190,15, +249,22,131,16,250,80,144,45,40,39,248,22,146,16,2,57,11,11,248,22,146, +16,2,58,86,95,23,195,1,23,194,1,248,22,133,16,249,22,131,16,23,200, +1,23,196,1,27,250,80,144,40,40,39,248,22,146,16,2,57,23,198,1,10, +28,23,193,2,248,22,133,16,23,194,1,11,28,248,22,88,23,196,2,9,28, +248,22,81,23,196,2,249,22,80,27,248,22,154,20,23,199,2,28,248,22,152, +7,23,194,2,27,248,22,177,15,23,195,1,28,248,22,130,16,23,194,2,192, +249,22,131,16,23,195,1,27,247,80,144,43,51,39,28,23,193,2,192,86,94, +23,193,1,247,22,147,16,28,248,22,141,8,23,194,2,27,248,22,178,15,23, +195,1,28,248,22,130,16,23,194,2,192,249,22,131,16,23,195,1,27,247,80, +144,43,51,39,28,23,193,2,192,86,94,23,193,1,247,22,147,16,28,248,22, +169,15,23,194,2,28,248,22,130,16,23,194,2,192,249,22,131,16,23,195,1, +27,247,80,144,42,51,39,28,23,193,2,192,86,94,23,193,1,247,22,147,16, +192,27,248,22,155,20,23,199,1,28,248,22,88,23,194,2,9,28,248,22,81, +23,194,2,249,22,80,248,80,144,42,57,39,248,22,154,20,23,197,2,27,248, +22,155,20,23,197,1,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2, +249,22,80,248,80,144,45,57,39,248,22,154,20,23,197,2,249,80,144,46,8, +44,39,23,204,1,248,22,155,20,23,198,1,249,22,94,23,202,2,249,80,144, +46,8,44,39,23,204,1,248,22,155,20,23,198,1,249,22,94,23,199,2,27, +248,22,155,20,23,197,1,28,248,22,88,23,194,2,9,28,248,22,81,23,194, +2,249,22,80,248,80,144,45,57,39,248,22,154,20,23,197,2,249,80,144,46, +8,44,39,23,204,1,248,22,155,20,23,198,1,249,22,94,23,202,2,249,80, +144,46,8,44,39,23,204,1,248,22,155,20,23,198,1,249,22,94,23,196,2, +27,248,22,155,20,23,199,1,28,248,22,88,23,194,2,9,28,248,22,81,23, +194,2,249,22,80,248,80,144,42,57,39,248,22,154,20,23,197,2,27,248,22, +155,20,23,197,1,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,249, +22,80,248,80,144,45,57,39,248,22,154,20,23,197,2,249,80,144,46,8,44, +39,23,204,1,248,22,155,20,23,198,1,249,22,94,23,202,2,249,80,144,46, +8,44,39,23,204,1,248,22,155,20,23,198,1,249,22,94,23,199,2,27,248, +22,155,20,23,197,1,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2, +249,22,80,248,80,144,45,57,39,248,22,154,20,23,197,2,249,80,144,46,8, +44,39,23,204,1,248,22,155,20,23,198,1,249,22,94,23,202,2,249,80,144, +46,8,44,39,23,204,1,248,22,155,20,23,198,1,27,250,22,158,2,23,198, +1,23,199,1,11,28,192,249,80,144,39,8,44,39,198,194,196,27,248,22,146, +16,2,59,28,248,22,130,16,23,194,2,248,22,133,16,23,194,1,28,248,22, +129,16,23,194,2,90,144,39,11,89,146,39,36,11,248,22,190,15,249,22,131, +16,250,80,144,46,40,39,248,22,146,16,2,57,11,11,248,22,146,16,2,58, +86,95,23,195,1,23,194,1,248,22,133,16,249,22,131,16,23,199,1,23,196, +1,27,250,80,144,41,40,39,248,22,146,16,2,57,23,197,1,10,28,23,193, +2,248,22,133,16,23,194,1,11,27,248,80,144,38,55,39,249,80,144,40,52, +37,37,80,144,40,8,45,39,27,27,250,22,158,2,23,198,2,70,108,105,110, +107,115,45,102,105,108,101,11,27,28,23,194,2,23,194,1,86,94,23,194,1, +249,22,187,15,27,250,22,158,2,23,202,2,69,115,104,97,114,101,45,100,105, +114,11,28,192,192,249,22,187,15,62,117,112,6,5,5,115,104,97,114,101,2, +61,28,248,22,152,7,23,194,2,27,248,22,177,15,23,195,1,28,248,22,130, +16,23,194,2,192,249,22,131,16,23,195,1,27,247,80,144,44,51,39,28,23, +193,2,192,86,94,23,193,1,247,22,147,16,28,248,22,141,8,23,194,2,27, +248,22,178,15,23,195,1,28,248,22,130,16,23,194,2,192,249,22,131,16,23, +195,1,27,247,80,144,44,51,39,28,23,193,2,192,86,94,23,193,1,247,22, +147,16,28,248,22,169,15,23,194,2,28,248,22,130,16,23,194,2,192,249,22, +131,16,23,195,1,27,247,80,144,43,51,39,28,23,193,2,192,86,94,23,193, +1,247,22,147,16,192,250,22,94,248,22,90,11,28,247,22,153,16,28,247,22, +154,16,248,22,90,250,22,187,15,248,22,146,16,2,62,250,22,158,2,23,204, +2,2,60,247,22,170,8,2,61,9,9,28,247,22,154,16,250,80,144,44,59, +39,23,200,1,78,108,105,110,107,115,45,115,101,97,114,99,104,45,102,105,108, +101,115,248,22,90,23,200,1,9,248,22,168,13,23,194,1,249,22,16,80,144, +38,8,26,38,28,248,22,188,12,23,197,2,86,94,23,196,1,32,0,88,148, +8,36,36,41,11,9,222,11,20,20,94,88,148,8,36,36,43,11,9,223,3, +33,125,23,196,1,32,127,88,148,36,37,56,11,2,51,222,33,128,2,90,144, +39,11,89,146,39,36,11,248,22,190,15,23,197,1,86,95,23,195,1,23,194, +1,28,248,22,169,15,23,194,2,28,248,22,182,15,23,194,2,249,22,144,6, +23,195,1,32,0,88,148,8,36,36,41,11,9,222,11,90,144,39,11,89,146, +39,36,11,248,22,190,15,23,197,1,86,95,23,195,1,23,194,1,28,248,22, +169,15,23,194,2,28,248,22,182,15,23,194,2,249,22,144,6,23,195,1,32, +0,88,148,8,36,36,41,11,9,222,11,90,144,39,11,89,146,39,36,11,248, +22,190,15,23,197,1,86,95,23,195,1,23,194,1,28,248,22,169,15,23,194, +2,28,248,22,182,15,23,194,2,249,22,144,6,23,195,1,32,0,88,148,8, +36,36,41,11,9,222,11,90,144,39,11,89,146,39,36,11,248,22,190,15,23, +197,1,86,95,23,195,1,23,194,1,28,248,22,169,15,23,194,2,28,248,22, +182,15,23,194,2,249,22,144,6,23,195,1,32,0,88,148,8,36,36,41,11, +9,222,11,248,2,127,23,194,1,11,11,11,11,32,129,2,88,148,8,36,37, +55,11,2,51,222,33,130,2,27,249,22,162,6,8,128,128,23,196,2,28,248, +22,147,7,23,194,2,9,249,22,80,23,195,1,27,249,22,162,6,8,128,128, +23,199,2,28,248,22,147,7,23,194,2,9,249,22,80,23,195,1,27,249,22, +162,6,8,128,128,23,202,2,28,248,22,147,7,23,194,2,9,249,22,80,23, +195,1,27,249,22,162,6,8,128,128,23,205,2,28,248,22,147,7,23,194,2, +9,249,22,80,23,195,1,248,2,129,2,23,206,1,27,249,22,162,6,8,128, +128,23,196,2,28,248,22,141,8,23,194,2,28,249,22,132,4,248,22,146,8, +23,196,2,8,128,128,249,22,1,22,153,8,249,22,80,23,197,1,27,249,22, +162,6,8,128,128,23,201,2,28,248,22,147,7,23,194,2,9,249,22,80,23, +195,1,27,249,22,162,6,8,128,128,23,204,2,28,248,22,147,7,23,194,2, +9,249,22,80,23,195,1,27,249,22,162,6,8,128,128,23,207,2,28,248,22, 147,7,23,194,2,9,249,22,80,23,195,1,27,249,22,162,6,8,128,128,23, -199,2,28,248,22,147,7,23,194,2,9,249,22,80,23,195,1,27,249,22,162, -6,8,128,128,23,202,2,28,248,22,147,7,23,194,2,9,249,22,80,23,195, -1,27,249,22,162,6,8,128,128,23,205,2,28,248,22,147,7,23,194,2,9, -249,22,80,23,195,1,248,2,129,2,23,206,1,27,249,22,162,6,8,128,128, -23,196,2,28,248,22,141,8,23,194,2,28,249,22,132,4,248,22,146,8,23, -196,2,8,128,128,249,22,1,22,153,8,249,22,80,23,197,1,27,249,22,162, -6,8,128,128,23,201,2,28,248,22,147,7,23,194,2,9,249,22,80,23,195, -1,27,249,22,162,6,8,128,128,23,204,2,28,248,22,147,7,23,194,2,9, -249,22,80,23,195,1,27,249,22,162,6,8,128,128,23,207,2,28,248,22,147, -7,23,194,2,9,249,22,80,23,195,1,27,249,22,162,6,8,128,128,23,210, -2,28,248,22,147,7,23,194,2,9,249,22,80,23,195,1,248,2,129,2,23, -211,1,192,192,248,22,132,6,23,194,1,20,13,144,80,144,37,8,28,37,80, -144,37,8,46,39,27,28,249,22,188,8,248,22,179,8,2,63,38,90,144,39, -11,89,146,39,36,11,248,22,189,15,23,198,2,86,95,23,195,1,23,194,1, -28,248,22,168,15,23,194,2,28,248,22,181,15,23,194,2,249,22,144,6,23, -195,1,32,0,88,148,8,36,36,41,11,9,222,11,90,144,39,11,89,146,39, -36,11,248,22,189,15,23,197,1,86,95,23,195,1,23,194,1,28,248,22,168, -15,23,194,2,28,248,22,181,15,23,194,2,249,22,144,6,23,195,1,32,0, -88,148,8,36,36,41,11,9,222,11,90,144,39,11,89,146,39,36,11,248,22, -189,15,23,197,1,86,95,23,195,1,23,194,1,28,248,22,168,15,23,194,2, -28,248,22,181,15,23,194,2,249,22,144,6,23,195,1,32,0,88,148,8,36, -36,41,11,9,222,11,90,144,39,11,89,146,39,36,11,248,22,189,15,23,197, -1,86,95,23,195,1,23,194,1,28,248,22,168,15,23,194,2,28,248,22,181, -15,23,194,2,249,22,144,6,23,195,1,32,0,88,148,8,36,36,41,11,9, -222,11,248,2,127,23,194,1,11,11,11,11,11,28,248,22,180,15,23,195,2, -27,28,249,22,188,8,248,22,179,8,2,63,38,249,22,144,6,23,197,2,32, -0,88,148,8,36,36,41,11,9,222,11,11,86,94,28,23,194,2,248,22,146, -6,23,195,1,86,94,23,194,1,12,249,22,80,27,248,22,187,5,23,199,1, -250,22,46,22,37,88,148,36,36,8,24,11,9,223,3,33,131,2,20,20,94, -88,148,36,36,43,11,9,223,3,33,132,2,23,196,1,194,249,22,80,11,194, -28,28,23,195,2,28,248,22,82,23,196,2,248,22,166,9,249,22,169,14,36, -248,22,154,20,23,199,2,11,11,194,86,94,23,195,1,249,22,14,20,20,94, -88,148,8,32,36,58,16,4,36,8,128,80,8,240,0,64,0,0,36,9,224, -2,3,33,133,2,23,196,1,80,144,38,8,26,38,27,248,22,166,9,194,28, -192,192,248,22,166,9,248,22,81,195,86,95,28,248,22,144,12,23,198,2,27, -247,22,136,12,28,249,22,128,12,23,195,2,2,64,251,22,132,12,23,197,1, -2,64,250,22,136,8,6,42,42,101,114,114,111,114,32,114,101,97,100,105,110, -103,32,99,111,108,108,101,99,116,105,111,110,32,108,105,110,107,115,32,102,105, -108,101,32,126,115,58,32,126,97,23,203,2,248,22,140,12,23,206,2,247,22, -29,12,12,28,23,193,2,250,22,156,2,80,144,42,8,25,38,23,198,1,249, -22,80,21,17,0,0,23,198,1,86,95,23,195,1,23,193,1,12,28,248,22, -144,12,23,198,2,86,94,23,197,1,248,23,195,1,247,22,138,2,196,88,148, -36,37,55,8,240,0,0,0,2,9,226,0,2,1,3,33,136,2,20,20,94, -248,22,147,6,23,194,2,28,248,22,147,7,248,22,147,6,23,195,1,12,248, -22,173,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,132,6,23,194, -1,28,248,22,89,193,28,28,249,22,128,4,38,248,22,93,195,10,249,22,128, -4,39,248,22,93,195,28,28,248,22,152,7,248,22,81,194,10,28,249,22,168, -9,2,65,248,22,153,20,195,10,249,22,168,9,2,66,248,22,153,20,195,28, -27,248,22,102,194,28,248,22,168,15,193,10,28,248,22,152,7,193,28,248,22, -191,15,193,10,248,22,128,16,193,11,27,248,22,88,248,22,104,195,28,192,192, -248,22,173,16,248,22,111,195,11,11,11,11,28,248,22,181,15,249,22,186,15, -23,196,2,23,198,2,27,248,22,68,248,22,172,15,23,198,1,250,22,156,2, -23,198,2,23,196,2,249,22,80,23,199,1,250,22,158,2,23,203,1,23,201, -1,9,12,250,22,156,2,23,197,1,23,198,1,249,22,80,23,198,1,23,201, -1,28,28,248,22,88,248,22,104,23,197,2,10,249,22,164,16,248,22,111,23, -198,2,247,22,170,8,27,248,22,132,16,249,22,130,16,248,22,102,23,200,2, -23,198,1,28,249,22,168,9,248,22,81,23,199,2,2,66,86,94,23,196,1, -249,22,3,20,20,94,88,148,8,36,37,53,11,9,224,3,2,33,141,2,23, -196,1,248,22,135,16,23,196,1,28,249,22,168,9,248,22,153,20,23,199,2, -2,65,86,94,23,196,1,86,94,28,250,22,158,2,23,197,2,11,11,12,250, -22,156,2,23,197,2,11,9,249,22,164,2,23,196,2,20,20,95,88,148,8, -36,38,50,11,9,224,3,2,33,142,2,23,195,1,23,196,1,27,248,22,68, -248,22,153,20,23,199,1,250,22,156,2,23,198,2,23,196,2,249,22,80,248, -22,129,2,23,200,1,250,22,158,2,23,203,1,23,201,1,9,12,250,22,156, -2,23,196,1,23,197,1,248,22,95,23,199,1,27,28,28,23,194,2,248,22, -166,9,248,22,81,23,196,2,10,9,27,249,22,187,5,23,198,2,66,98,105, -110,97,114,121,250,22,46,22,37,88,148,8,36,36,44,11,9,223,3,33,138, -2,20,20,94,88,148,36,36,43,11,9,223,3,33,139,2,23,196,1,86,94, -28,28,248,22,89,23,194,2,249,22,4,32,0,88,148,8,36,37,45,11,9, -222,33,140,2,23,195,2,11,12,248,22,173,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,138,2,27,90,144, -39,11,89,146,39,36,11,248,22,189,15,23,201,2,192,86,96,249,22,3,20, -20,94,88,148,8,36,37,54,11,9,224,2,3,33,143,2,23,195,1,23,197, -1,249,22,164,2,195,88,148,8,36,38,48,11,9,223,3,33,144,2,250,22, -156,2,80,144,44,8,25,38,23,200,1,249,22,80,23,201,1,198,193,20,13, -144,80,144,37,8,28,37,250,80,144,40,8,47,39,23,198,2,23,196,2,11, -27,250,22,158,2,80,144,41,8,25,38,23,197,2,21,143,11,17,0,0,27, -248,22,81,23,195,2,27,249,80,144,42,8,27,39,23,198,2,23,196,2,28, -249,22,170,9,23,195,2,23,196,1,248,22,82,195,86,94,23,195,1,20,13, -144,80,144,40,8,28,37,250,80,144,43,8,47,39,23,201,1,23,199,2,23, -196,2,27,20,20,95,88,148,8,36,36,52,8,240,0,0,0,2,9,225,5, -4,1,33,145,2,23,194,1,23,197,1,28,249,22,50,23,195,2,36,20,13, -144,80,144,41,43,37,26,29,80,144,8,34,44,37,249,22,33,11,80,144,8, -36,43,37,22,138,15,10,22,139,15,10,22,140,15,10,22,143,15,10,22,142, -15,11,22,144,15,10,22,141,15,10,22,145,15,10,22,146,15,10,22,147,15, -10,22,148,15,10,22,149,15,11,22,150,15,10,22,136,15,11,247,23,193,1, -250,22,177,11,2,8,2,53,23,196,1,248,22,9,20,20,94,88,148,36,37, -8,43,16,4,8,128,6,8,128,104,8,240,0,128,0,0,36,9,224,1,2, -33,146,2,23,195,1,0,7,35,114,120,34,47,43,34,28,248,22,152,7,23, -195,2,27,249,22,162,16,2,148,2,23,197,2,28,23,193,2,28,249,22,128, -4,248,22,101,23,196,2,248,22,182,3,248,22,155,7,23,199,2,249,22,7, -250,22,174,7,23,200,1,36,248,22,101,23,199,1,23,198,1,249,22,7,250, -22,174,7,23,200,2,36,248,22,101,23,199,2,249,22,80,249,22,174,7,23, -201,1,248,22,103,23,200,1,23,200,1,249,22,7,23,197,1,23,198,1,90, -144,39,11,89,146,39,36,11,248,22,189,15,23,198,1,86,94,23,195,1,28, -249,22,168,9,23,195,2,2,50,86,94,23,193,1,249,22,7,23,196,1,23, -200,1,27,249,22,80,23,197,1,23,201,1,28,248,22,152,7,23,195,2,27, -249,22,162,16,2,148,2,23,197,2,28,23,193,2,28,249,22,128,4,248,22, -101,23,196,2,248,22,182,3,248,22,155,7,23,199,2,249,22,7,250,22,174, -7,23,200,1,36,248,22,101,23,199,1,23,196,1,249,22,7,250,22,174,7, -23,200,2,36,248,22,101,23,199,2,249,22,80,249,22,174,7,23,201,1,248, -22,103,23,200,1,23,198,1,249,22,7,23,197,1,23,196,1,90,144,39,11, -89,146,39,36,11,248,22,189,15,23,198,1,86,94,23,195,1,28,249,22,168, -9,23,195,2,2,50,86,94,23,193,1,249,22,7,23,196,1,23,198,1,249, -80,144,45,8,31,39,194,249,22,80,197,199,28,248,22,88,23,196,2,9,28, -248,22,81,23,196,2,28,248,22,149,2,248,22,153,20,23,197,2,250,22,94, -249,22,2,22,129,2,250,22,158,2,248,22,153,20,23,204,2,23,202,2,9, -250,22,158,2,248,22,153,20,23,202,2,11,9,27,248,22,154,20,23,200,1, -28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,28,248,22,149,2,248, -22,153,20,23,195,2,250,22,94,249,22,2,22,129,2,250,22,158,2,248,22, -153,20,23,202,2,23,206,2,9,250,22,158,2,248,22,153,20,23,200,2,11, -9,249,80,144,45,8,48,39,23,203,1,248,22,154,20,23,199,1,27,248,80, -144,42,8,30,39,248,22,153,20,23,196,2,250,22,94,250,22,158,2,23,199, -2,23,205,2,9,250,22,158,2,23,199,1,11,9,249,80,144,46,8,48,39, -23,204,1,248,22,154,20,23,200,1,249,22,94,247,22,148,16,249,80,144,44, -8,48,39,23,202,1,248,22,154,20,23,198,1,27,248,80,144,38,8,30,39, -248,22,153,20,23,198,2,250,22,94,250,22,158,2,23,199,2,23,201,2,9, -250,22,158,2,23,199,1,11,9,27,248,22,154,20,23,201,1,28,248,22,88, -23,194,2,9,28,248,22,81,23,194,2,28,248,22,149,2,248,22,153,20,23, -195,2,250,22,94,249,22,2,22,129,2,250,22,158,2,248,22,153,20,23,202, -2,23,207,2,9,250,22,158,2,248,22,153,20,23,200,2,11,9,249,80,144, -46,8,48,39,23,204,1,248,22,154,20,23,199,1,27,248,80,144,43,8,30, -39,248,22,153,20,23,196,2,250,22,94,250,22,158,2,23,199,2,23,206,2, -9,250,22,158,2,23,199,1,11,9,249,80,144,47,8,48,39,23,205,1,248, -22,154,20,23,200,1,249,22,94,247,22,148,16,249,80,144,45,8,48,39,23, -203,1,248,22,154,20,23,198,1,249,22,94,247,22,148,16,27,248,22,154,20, -23,199,1,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,28,248,22, -149,2,248,22,153,20,23,195,2,250,22,94,249,22,2,22,129,2,250,22,158, -2,248,22,153,20,23,202,2,23,205,2,9,250,22,158,2,248,22,153,20,23, -200,2,11,9,249,80,144,44,8,48,39,23,202,1,248,22,154,20,23,199,1, -27,248,80,144,41,8,30,39,248,22,153,20,23,196,2,250,22,94,250,22,158, -2,23,199,2,23,204,2,9,250,22,158,2,23,199,1,11,9,249,80,144,45, -8,48,39,23,203,1,248,22,154,20,23,200,1,249,22,94,247,22,148,16,249, -80,144,43,8,48,39,23,201,1,248,22,154,20,23,198,1,32,151,2,88,148, -8,36,37,47,11,2,51,222,33,152,2,28,248,22,88,248,22,82,23,195,2, -248,22,90,27,248,22,153,20,195,28,248,22,168,15,193,248,22,172,15,193,192, -250,22,91,27,248,22,153,20,23,198,2,28,248,22,168,15,193,248,22,172,15, -193,192,2,68,248,2,151,2,248,22,154,20,23,198,1,250,22,136,8,6,7, -7,10,32,126,97,32,126,97,6,1,1,32,23,196,1,249,22,136,8,6,6, -6,10,32,32,32,126,97,248,22,132,2,23,196,1,32,155,2,88,148,36,38, -48,11,66,102,105,108,116,101,114,222,33,156,2,28,248,22,88,23,195,2,9, -28,248,23,194,2,248,22,81,23,196,2,249,22,80,248,22,153,20,23,197,2, -249,2,155,2,23,197,1,248,22,154,20,23,199,1,249,2,155,2,23,195,1, -248,22,154,20,23,197,1,28,248,22,88,23,201,2,86,95,23,200,1,23,199, -1,28,23,201,2,28,197,249,22,186,15,202,199,200,27,28,248,22,88,23,198, -2,2,67,249,22,1,22,175,7,248,2,151,2,23,200,2,248,23,199,1,251, -22,136,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,88,23,203,1,28, -248,22,168,15,23,202,2,248,22,172,15,23,202,1,23,201,1,250,22,175,7, -28,248,22,168,15,23,205,2,248,22,172,15,23,205,1,23,204,1,2,68,23, -201,2,249,22,1,22,175,7,249,22,2,32,0,88,148,8,36,37,45,11,9, -222,33,153,2,27,248,22,93,23,206,2,27,248,22,93,247,22,148,16,28,249, -22,129,4,249,22,184,3,23,198,2,23,197,2,41,23,206,2,249,22,94,247, -22,148,16,248,22,90,249,22,136,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,184,3,23,201,1,23,200,1,28,249,22,5,22,131,2,23,202,2,250, -22,136,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,175, -7,249,22,2,32,0,88,148,8,36,37,45,11,9,222,33,154,2,249,2,155, -2,22,131,2,23,209,1,86,95,23,200,1,23,198,1,2,67,27,248,22,81, -23,202,2,27,28,248,22,168,15,23,195,2,249,22,186,15,23,196,1,23,199, -2,248,22,132,2,23,195,1,28,28,248,22,168,15,248,22,81,23,204,2,248, -22,181,15,23,194,2,10,27,250,22,1,22,186,15,23,197,1,23,202,2,28, -28,248,22,88,23,200,2,10,248,22,181,15,23,194,2,28,23,201,2,28,28, -250,80,144,42,8,32,39,195,203,204,10,27,28,248,22,168,15,202,248,22,172, -15,202,201,19,248,22,155,7,23,195,2,27,28,249,22,132,4,23,196,4,40, -28,249,22,158,7,6,4,4,46,114,107,116,249,22,174,7,23,199,2,249,22, -184,3,23,200,4,40,249,22,175,7,250,22,174,7,23,200,1,36,249,22,184, -3,23,201,4,40,6,3,3,46,115,115,86,94,23,195,1,11,11,28,23,193, -2,250,80,144,45,8,32,39,198,23,196,1,23,15,11,2,28,200,249,22,186, -15,194,202,192,26,8,80,144,47,8,49,39,204,205,206,23,15,23,16,23,17, -248,22,154,20,23,19,28,23,19,23,19,200,28,200,249,22,186,15,194,202,192, -26,8,80,144,47,8,49,39,204,205,206,23,15,23,16,23,17,248,22,154,20, -23,19,23,19,26,8,80,144,46,8,49,39,203,204,205,206,23,15,23,16,248, -22,154,20,23,18,23,18,90,144,38,11,89,146,38,36,11,249,80,144,40,8, -31,39,23,199,1,23,200,1,27,248,22,68,28,248,22,168,15,195,248,22,172, -15,195,194,27,27,247,22,149,16,28,248,22,88,23,194,2,9,28,248,22,81, -23,194,2,28,248,22,149,2,248,22,153,20,23,195,2,250,22,94,249,22,2, -22,129,2,250,22,158,2,248,22,153,20,23,202,2,23,203,2,9,250,22,158, -2,248,22,153,20,23,200,2,11,9,249,80,144,46,8,48,39,23,200,1,248, -22,154,20,23,199,1,27,248,80,144,43,8,30,39,248,22,153,20,23,196,2, -250,22,94,250,22,158,2,23,199,2,23,202,2,9,250,22,158,2,23,199,1, -11,9,249,80,144,47,8,48,39,23,201,1,248,22,154,20,23,200,1,249,22, -94,247,22,148,16,249,80,144,45,8,48,39,23,199,1,248,22,154,20,23,198, -1,26,8,80,144,48,8,49,39,200,202,203,205,23,16,23,17,200,11,32,159, -2,88,148,8,36,39,56,11,2,51,222,33,160,2,28,248,22,133,4,23,196, -2,86,94,23,195,1,19,248,22,146,8,23,195,2,19,248,22,146,8,23,196, -2,249,22,178,15,27,251,22,153,8,250,22,152,8,23,205,2,36,23,204,4, -2,52,249,22,152,8,23,204,1,23,202,4,2,69,28,248,22,133,4,248,22, -146,8,23,195,2,86,94,23,193,1,251,22,179,11,2,38,2,70,2,71,202, -192,28,248,22,169,15,198,248,22,170,15,198,247,22,171,15,2,2,27,248,22, -182,3,23,197,1,28,249,22,168,9,8,46,249,22,147,8,23,198,2,23,197, -2,27,248,22,181,3,23,195,2,249,22,178,15,27,251,22,153,8,250,22,152, -8,23,205,2,36,23,204,1,2,72,249,22,152,8,23,204,1,23,202,1,2, -69,28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193,1,251,22,179, -11,2,38,2,70,2,71,202,192,28,248,22,169,15,198,248,22,170,15,198,247, -22,171,15,250,2,159,2,196,197,195,248,22,180,15,27,250,22,186,15,23,200, -1,23,202,1,23,199,1,28,249,22,168,9,23,197,2,64,115,97,109,101,192, -28,248,22,191,15,23,196,2,249,22,186,15,194,196,249,80,144,43,39,39,23, -195,1,23,197,1,249,22,5,20,20,96,88,148,36,37,51,44,9,226,5,4, -2,6,33,161,2,23,199,1,23,195,1,23,197,1,23,196,1,27,248,22,180, -15,249,22,186,15,23,198,2,23,199,2,28,23,193,2,192,86,94,23,193,1, -28,23,197,1,27,90,144,38,11,89,146,38,36,11,250,80,144,43,8,34,39, -23,202,2,2,69,2,38,27,248,22,174,15,23,196,1,27,250,2,159,2,23, -197,2,23,204,1,248,22,146,8,23,198,1,28,248,22,169,15,195,249,22,186, -15,196,194,192,27,247,22,150,16,27,247,22,151,16,249,22,5,20,20,96,88, -148,36,37,48,44,9,226,6,7,3,4,33,162,2,23,197,1,23,196,1,23, -200,1,23,195,1,11,86,95,28,28,248,22,169,15,23,194,2,10,28,248,22, -168,15,23,194,2,10,28,248,22,152,7,23,194,2,28,248,22,191,15,23,194, -2,10,248,22,128,16,23,194,2,11,12,252,22,177,11,23,200,2,2,43,36, -23,198,2,23,199,2,28,28,248,22,152,7,23,195,2,10,248,22,141,8,23, -195,2,86,94,23,194,1,12,252,22,177,11,23,200,2,2,73,37,23,198,2, -23,199,1,90,144,39,11,89,146,39,36,11,248,22,189,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,180, -11,23,201,1,2,74,23,199,1,249,22,7,23,195,1,23,196,1,32,165,2, -88,148,8,36,43,58,11,2,75,222,33,166,2,249,22,178,15,27,251,22,153, -8,250,22,152,8,23,203,2,36,23,207,1,23,205,1,249,23,203,1,23,202, -1,23,208,1,28,248,22,152,7,23,204,2,249,22,167,8,23,205,1,8,63, -23,203,1,28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193,1,251, -22,179,11,2,38,2,70,2,71,201,192,28,248,22,169,15,197,248,22,170,15, -197,247,22,171,15,32,167,2,88,148,8,36,42,8,24,11,2,51,222,33,168, -2,28,248,22,133,4,23,199,2,86,95,23,198,1,23,194,1,19,248,22,146, -8,23,195,2,19,248,22,146,8,23,196,2,249,22,178,15,27,251,22,153,8, -250,22,152,8,23,205,2,36,23,204,4,2,52,249,23,206,1,23,204,1,23, -202,4,28,248,22,152,7,23,207,2,249,22,167,8,23,208,1,8,63,23,206, -1,28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193,1,251,22,179, -11,2,38,2,70,2,71,204,192,28,248,22,169,15,200,248,22,170,15,200,247, -22,171,15,2,2,27,248,22,182,3,23,200,1,28,249,22,168,9,8,46,249, -22,147,8,23,198,2,23,197,2,27,248,22,181,3,23,195,2,249,22,178,15, -27,251,22,153,8,250,22,152,8,23,205,2,36,23,204,1,23,203,1,249,23, -206,1,23,204,1,23,202,1,28,248,22,152,7,23,207,2,249,22,167,8,23, -208,1,8,63,23,206,1,28,248,22,133,4,248,22,146,8,23,195,2,86,94, -23,193,1,251,22,179,11,2,38,2,70,2,71,204,192,28,248,22,169,15,200, -248,22,170,15,200,247,22,171,15,28,248,22,133,4,23,194,2,86,95,23,195, -1,23,193,1,19,248,22,146,8,23,196,2,19,248,22,146,8,23,197,2,249, -22,178,15,27,251,22,153,8,250,22,152,8,23,206,2,36,23,204,4,2,52, -249,23,207,1,23,205,1,23,202,4,28,248,22,152,7,23,208,2,249,22,167, -8,23,209,1,8,63,23,207,1,28,248,22,133,4,248,22,146,8,23,195,2, -86,94,23,193,1,251,22,179,11,2,38,2,70,2,71,205,192,28,248,22,169, -15,201,248,22,170,15,201,247,22,171,15,2,2,27,248,22,182,3,23,195,1, -28,249,22,168,9,8,46,249,22,147,8,23,199,2,23,197,2,27,248,22,181, -3,23,195,2,249,22,178,15,27,251,22,153,8,250,22,152,8,23,206,2,36, -23,204,1,23,204,1,249,23,207,1,23,205,1,23,202,1,28,248,22,152,7, -23,208,2,249,22,167,8,23,209,1,8,63,23,207,1,28,248,22,133,4,248, -22,146,8,23,195,2,86,94,23,193,1,251,22,179,11,2,38,2,70,2,71, -205,192,28,248,22,169,15,201,248,22,170,15,201,247,22,171,15,28,248,22,133, -4,193,254,2,165,2,201,203,204,205,248,22,146,8,202,2,52,248,22,146,8, -202,27,248,22,182,3,194,28,249,22,168,9,8,46,249,22,147,8,199,196,254, -2,165,2,202,204,205,206,199,203,248,22,181,3,200,253,2,167,2,201,202,203, -204,205,198,90,144,38,11,89,146,38,36,11,86,95,28,28,248,22,169,15,23, -199,2,10,28,248,22,168,15,23,199,2,10,28,248,22,152,7,23,199,2,28, -248,22,191,15,23,199,2,10,248,22,128,16,23,199,2,11,12,252,22,177,11, -23,200,2,2,43,36,23,203,2,23,204,2,28,28,248,22,152,7,23,200,2, -10,248,22,141,8,23,200,2,12,252,22,177,11,23,200,2,2,73,37,23,203, -2,23,204,2,90,144,39,11,89,146,39,36,11,248,22,189,15,23,202,2,86, -94,23,195,1,86,94,28,192,12,250,22,180,11,23,201,1,2,74,23,204,2, -249,22,7,194,195,27,248,22,174,15,23,196,1,27,19,248,22,146,8,23,196, -2,28,248,22,133,4,23,194,4,86,94,23,199,1,19,248,22,146,8,23,197, -2,19,248,22,146,8,23,198,2,249,22,178,15,27,251,22,153,8,250,22,152, -8,23,207,2,36,23,204,4,2,52,249,23,211,1,23,206,1,23,202,4,28, -248,22,152,7,23,212,2,249,22,167,8,23,213,1,8,63,23,211,1,28,248, -22,133,4,248,22,146,8,23,195,2,86,94,23,193,1,251,22,179,11,2,38, -2,70,2,71,23,17,192,28,248,22,169,15,205,248,22,170,15,205,247,22,171, -15,2,2,27,248,22,182,3,23,195,4,28,249,22,168,9,8,46,249,22,147, -8,23,200,2,23,197,2,27,248,22,181,3,23,195,2,249,22,178,15,27,251, -22,153,8,250,22,152,8,23,207,2,36,23,204,1,23,208,1,249,23,211,1, -23,206,1,23,202,1,28,248,22,152,7,23,212,2,249,22,167,8,23,213,1, -8,63,23,211,1,28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193, -1,251,22,179,11,2,38,2,70,2,71,23,17,192,28,248,22,169,15,205,248, -22,170,15,205,247,22,171,15,28,248,22,133,4,23,194,2,86,95,23,200,1, -23,193,1,254,2,165,2,23,203,2,23,208,1,23,209,1,23,210,1,248,22, -146,8,23,204,2,2,52,248,22,146,8,23,204,1,27,248,22,182,3,23,195, -1,28,249,22,168,9,8,46,249,22,147,8,23,201,2,23,197,2,254,2,165, -2,23,204,1,23,209,1,23,210,1,23,211,1,23,200,2,23,208,1,248,22, -181,3,23,201,1,253,2,167,2,23,203,1,23,207,1,23,208,1,23,209,1, -23,210,1,23,199,1,2,28,248,22,169,15,195,249,22,186,15,196,194,192,32, -170,2,88,148,8,36,40,58,11,2,51,222,33,171,2,28,248,22,133,4,23, -197,2,86,94,23,196,1,19,248,22,146,8,23,195,2,35,248,22,146,8,23, -196,2,249,22,178,15,27,251,22,153,8,250,22,152,8,23,205,1,36,23,204, -4,2,52,2,52,28,248,22,152,7,23,205,2,249,22,167,8,23,206,1,8, -63,23,204,1,28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193,1, -251,22,179,11,2,38,2,70,2,71,202,192,28,248,22,169,15,198,248,22,170, -15,198,247,22,171,15,2,27,248,22,182,3,23,198,1,28,249,22,168,9,8, -46,249,22,147,8,23,198,2,23,197,2,35,248,22,181,3,23,195,2,249,22, -178,15,27,251,22,153,8,250,22,152,8,23,205,1,36,23,204,1,2,52,2, -52,28,248,22,152,7,23,205,2,249,22,167,8,23,206,1,8,63,23,204,1, -28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193,1,251,22,179,11, -2,38,2,70,2,71,202,192,28,248,22,169,15,198,248,22,170,15,198,247,22, -171,15,28,248,22,133,4,23,194,2,86,94,23,193,1,19,248,22,146,8,23, -196,2,35,248,22,146,8,23,197,2,249,22,178,15,27,251,22,153,8,250,22, -152,8,23,206,1,36,23,204,4,2,52,2,52,28,248,22,152,7,23,206,2, -249,22,167,8,23,207,1,8,63,23,205,1,28,248,22,133,4,248,22,146,8, -23,195,2,86,94,23,193,1,251,22,179,11,2,38,2,70,2,71,203,192,28, -248,22,169,15,199,248,22,170,15,199,247,22,171,15,2,27,248,22,182,3,23, -195,1,28,249,22,168,9,8,46,249,22,147,8,23,199,2,23,197,2,35,248, -22,181,3,23,195,2,249,22,178,15,27,251,22,153,8,250,22,152,8,23,206, -1,36,23,204,1,2,52,2,52,28,248,22,152,7,23,206,2,249,22,167,8, -23,207,1,8,63,23,205,1,28,248,22,133,4,248,22,146,8,23,195,2,86, -94,23,193,1,251,22,179,11,2,38,2,70,2,71,203,192,28,248,22,169,15, -199,248,22,170,15,199,247,22,171,15,251,2,170,2,198,199,200,196,90,144,38, -11,89,146,38,36,11,86,95,28,28,248,22,169,15,23,196,2,10,28,248,22, -168,15,23,196,2,10,28,248,22,152,7,23,196,2,28,248,22,191,15,23,196, -2,10,248,22,128,16,23,196,2,11,12,252,22,177,11,2,38,2,43,36,23, -200,2,23,201,2,28,28,248,22,152,7,23,197,2,10,248,22,141,8,23,197, -2,12,252,22,177,11,2,38,2,73,37,23,200,2,23,201,2,90,144,39,11, -89,146,39,36,11,248,22,189,15,23,199,2,86,94,23,195,1,86,94,28,192, -12,250,22,180,11,2,38,2,74,23,201,2,249,22,7,194,195,27,248,22,174, -15,23,196,1,27,251,2,170,2,23,198,2,23,201,1,23,202,1,248,22,146, -8,23,199,1,28,248,22,169,15,195,249,22,186,15,196,194,192,2,52,252,80, -143,41,8,35,2,38,2,52,32,0,88,148,8,36,38,43,11,9,222,33,173, -2,198,199,32,175,2,88,148,8,36,40,57,11,2,51,222,33,178,2,32,176, -2,88,148,8,36,42,57,11,2,75,222,33,177,2,249,22,178,15,27,251,22, -153,8,250,22,152,8,23,203,2,36,23,206,1,23,204,1,249,22,152,8,23, -202,1,23,207,1,28,248,22,152,7,23,203,2,249,22,167,8,23,204,1,8, -63,23,202,1,28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193,1, -251,22,179,11,2,38,2,70,2,71,200,192,28,248,22,169,15,196,248,22,170, -15,196,247,22,171,15,28,248,22,133,4,23,197,2,86,94,23,196,1,19,248, -22,146,8,23,195,2,19,248,22,146,8,23,196,2,249,22,178,15,27,251,22, -153,8,250,22,152,8,23,205,2,36,23,204,4,2,52,249,22,152,8,23,204, -1,23,202,4,28,248,22,152,7,23,205,2,249,22,167,8,23,206,1,8,63, -23,204,1,28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193,1,251, -22,179,11,2,38,2,70,2,71,202,192,28,248,22,169,15,198,248,22,170,15, -198,247,22,171,15,2,2,27,248,22,182,3,23,198,1,28,249,22,168,9,8, -46,249,22,147,8,23,198,2,23,197,2,27,248,22,181,3,23,195,2,249,22, -178,15,27,251,22,153,8,250,22,152,8,23,205,2,36,23,204,1,2,72,249, -22,152,8,23,204,1,23,202,1,28,248,22,152,7,23,205,2,249,22,167,8, -23,206,1,8,63,23,204,1,28,248,22,133,4,248,22,146,8,23,195,2,86, -94,23,193,1,251,22,179,11,2,38,2,70,2,71,202,192,28,248,22,169,15, -198,248,22,170,15,198,247,22,171,15,28,248,22,133,4,193,253,2,176,2,199, -200,201,248,22,146,8,200,2,52,248,22,146,8,200,27,248,22,182,3,194,28, -249,22,168,9,8,46,249,22,147,8,198,196,253,2,176,2,200,201,202,198,2, -72,248,22,181,3,199,251,2,175,2,198,199,200,196,90,144,38,11,89,146,38, -36,11,86,95,28,28,248,22,169,15,23,196,2,10,28,248,22,168,15,23,196, -2,10,28,248,22,152,7,23,196,2,28,248,22,191,15,23,196,2,10,248,22, -128,16,23,196,2,11,12,252,22,177,11,2,38,2,43,36,23,200,2,23,201, -2,28,28,248,22,152,7,23,197,2,10,248,22,141,8,23,197,2,12,252,22, -177,11,2,38,2,73,37,23,200,2,23,201,2,90,144,39,11,89,146,39,36, -11,248,22,189,15,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22,180, -11,2,38,2,74,23,201,2,249,22,7,194,195,27,248,22,174,15,23,196,1, -27,251,2,175,2,23,198,2,23,201,1,23,202,1,248,22,146,8,23,199,1, -28,248,22,169,15,195,249,22,186,15,196,194,192,252,80,143,41,8,35,2,38, -2,72,22,152,8,198,199,249,247,22,175,5,23,195,1,11,249,247,22,175,5, -194,11,28,248,22,88,23,195,2,9,27,27,248,22,81,23,197,2,28,248,22, -129,16,23,194,2,248,22,132,16,23,194,1,28,248,22,128,16,23,194,2,90, -144,39,11,89,146,39,36,11,248,22,189,15,249,22,130,16,27,248,22,145,16, -2,57,250,80,144,48,40,39,23,196,1,11,11,248,22,145,16,2,58,86,95, -23,195,1,23,194,1,248,22,132,16,249,22,130,16,23,199,1,23,196,1,27, -250,80,144,42,40,39,248,22,145,16,2,57,23,197,1,10,28,23,193,2,248, -22,132,16,23,194,1,11,28,23,193,2,249,22,80,248,22,132,16,249,22,130, -16,23,198,1,247,22,146,16,27,248,22,82,23,199,1,28,248,22,88,23,194, -2,9,27,248,80,144,42,53,39,248,22,81,23,196,2,28,23,193,2,249,22, -80,248,22,132,16,249,22,130,16,23,198,1,247,22,146,16,248,80,144,44,8, -50,39,248,22,82,23,198,1,86,94,23,193,1,248,80,144,42,8,50,39,248, -22,82,23,196,1,86,94,23,193,1,27,248,22,82,23,197,1,28,248,22,88, -23,194,2,9,27,248,80,144,40,53,39,248,22,81,23,196,2,28,23,193,2, -249,22,80,248,22,132,16,249,22,130,16,23,198,1,247,22,146,16,248,80,144, -42,8,50,39,248,22,82,23,198,1,86,94,23,193,1,248,80,144,40,8,50, -39,248,22,82,23,196,1,28,248,22,88,23,195,2,9,27,27,248,22,81,23, -197,2,28,248,22,129,16,23,194,2,248,22,132,16,23,194,1,28,248,22,128, -16,23,194,2,90,144,39,11,89,146,39,36,11,248,22,189,15,249,22,130,16, -27,248,22,145,16,2,57,250,80,144,48,40,39,23,196,1,11,11,248,22,145, -16,2,58,86,95,23,195,1,23,194,1,248,22,132,16,249,22,130,16,23,199, -1,23,196,1,27,250,80,144,42,40,39,248,22,145,16,2,57,23,197,1,10, -28,23,193,2,248,22,132,16,23,194,1,11,28,23,193,2,249,22,80,248,22, -132,16,249,22,130,16,23,198,1,247,22,146,16,27,248,22,82,23,199,1,28, -248,22,88,23,194,2,9,27,248,80,144,42,53,39,248,22,81,23,196,2,28, -23,193,2,249,22,80,248,22,132,16,249,22,130,16,23,198,1,247,22,146,16, -248,80,144,44,8,51,39,248,22,82,23,198,1,86,94,23,193,1,248,80,144, -42,8,51,39,248,22,82,23,196,1,86,94,23,193,1,27,248,22,82,23,197, -1,28,248,22,88,23,194,2,9,27,248,80,144,40,53,39,248,22,81,23,196, -2,28,23,193,2,249,22,80,248,22,132,16,249,22,130,16,23,198,1,247,22, -146,16,248,80,144,42,8,51,39,248,22,82,23,198,1,86,94,23,193,1,248, -80,144,40,8,51,39,248,22,82,23,196,1,27,248,22,145,16,2,59,28,248, -22,129,16,23,194,2,248,22,132,16,23,194,1,28,248,22,128,16,23,194,2, -90,144,39,11,89,146,39,36,11,248,22,189,15,249,22,130,16,27,248,22,145, -16,2,57,250,80,144,47,40,39,23,196,1,11,11,248,22,145,16,2,58,86, -95,23,195,1,23,194,1,248,22,132,16,249,22,130,16,23,199,1,23,196,1, -27,250,80,144,41,40,39,248,22,145,16,2,57,23,197,1,10,28,23,193,2, -248,22,132,16,23,194,1,11,28,248,22,88,23,195,2,9,27,27,248,22,81, -23,197,2,28,248,22,129,16,23,194,2,248,22,132,16,23,194,1,28,248,22, -128,16,23,194,2,90,144,39,11,89,146,39,36,11,248,22,189,15,249,22,130, -16,27,248,22,145,16,2,57,250,80,144,48,40,39,23,196,1,11,11,248,22, -145,16,2,58,86,95,23,195,1,23,194,1,248,22,132,16,249,22,130,16,23, -199,1,23,196,1,27,250,80,144,42,40,39,248,22,145,16,2,57,23,197,1, -10,28,23,193,2,248,22,132,16,23,194,1,11,28,23,193,2,249,22,80,248, -22,132,16,249,22,130,16,23,198,1,247,22,146,16,27,248,22,82,23,199,1, -28,248,22,88,23,194,2,9,27,27,248,22,81,23,196,2,28,248,22,129,16, -23,194,2,248,22,132,16,23,194,1,28,248,22,128,16,23,194,2,90,144,39, -11,89,146,39,36,11,248,22,189,15,249,22,130,16,27,248,22,145,16,2,57, -250,80,144,52,40,39,23,196,1,11,11,248,22,145,16,2,58,86,95,23,195, -1,23,194,1,248,22,132,16,249,22,130,16,23,199,1,23,196,1,27,250,80, -144,46,40,39,248,22,145,16,2,57,23,197,1,10,28,23,193,2,248,22,132, -16,23,194,1,11,28,23,193,2,249,22,80,248,22,132,16,249,22,130,16,23, -198,1,247,22,146,16,27,248,22,82,23,198,1,28,248,22,88,23,194,2,9, -27,248,80,144,46,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80,248, -22,132,16,249,22,130,16,23,198,1,247,22,146,16,248,80,144,48,8,53,39, -248,22,82,23,198,1,86,94,23,193,1,248,80,144,46,8,53,39,248,22,82, -23,196,1,86,94,23,193,1,27,248,22,82,23,196,1,28,248,22,88,23,194, -2,9,27,248,80,144,44,53,39,248,22,81,23,196,2,28,23,193,2,249,22, -80,248,22,132,16,249,22,130,16,23,198,1,247,22,146,16,248,80,144,46,8, -53,39,248,22,82,23,198,1,86,94,23,193,1,248,80,144,44,8,53,39,248, -22,82,23,196,1,86,94,23,193,1,27,248,22,82,23,197,1,28,248,22,88, -23,194,2,9,27,27,248,22,81,23,196,2,28,248,22,129,16,23,194,2,248, -22,132,16,23,194,1,28,248,22,128,16,23,194,2,90,144,39,11,89,146,39, -36,11,248,22,189,15,249,22,130,16,27,248,22,145,16,2,57,250,80,144,50, -40,39,23,196,1,11,11,248,22,145,16,2,58,86,95,23,195,1,23,194,1, -248,22,132,16,249,22,130,16,23,199,1,23,196,1,27,250,80,144,44,40,39, -248,22,145,16,2,57,23,197,1,10,28,23,193,2,248,22,132,16,23,194,1, -11,28,23,193,2,249,22,80,248,22,132,16,249,22,130,16,23,198,1,247,22, -146,16,27,248,22,82,23,198,1,28,248,22,88,23,194,2,9,27,248,80,144, -44,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22,132,16,249, -22,130,16,23,198,1,247,22,146,16,248,80,144,46,8,53,39,248,22,82,23, -198,1,86,94,23,193,1,248,80,144,44,8,53,39,248,22,82,23,196,1,86, -94,23,193,1,27,248,22,82,23,196,1,28,248,22,88,23,194,2,9,27,248, -80,144,42,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22,132, -16,249,22,130,16,23,198,1,247,22,146,16,248,80,144,44,8,53,39,248,22, -82,23,198,1,86,94,23,193,1,248,80,144,42,8,53,39,248,22,82,23,196, -1,27,247,22,152,16,27,248,80,144,39,55,39,247,80,144,39,54,39,249,80, -144,40,41,38,28,23,196,2,27,249,22,174,8,247,22,173,8,2,76,28,192, -249,22,164,8,194,7,63,2,67,2,67,250,80,144,43,59,39,23,198,2,2, -77,27,28,23,200,1,250,22,186,15,248,22,145,16,2,62,250,22,158,2,23, -205,1,2,60,247,22,170,8,2,78,86,94,23,199,1,11,27,248,80,144,46, -8,50,39,250,22,94,9,248,22,90,248,22,145,16,2,56,9,28,193,249,22, -80,195,194,192,27,247,22,152,16,27,248,80,144,39,55,39,247,80,144,39,54, -39,249,80,144,40,41,38,28,23,196,2,27,249,22,174,8,247,22,173,8,2, -76,28,192,249,22,164,8,194,7,63,2,67,2,67,250,80,144,43,59,39,23, -198,2,2,77,27,28,23,200,1,250,22,186,15,248,22,145,16,2,62,250,22, -158,2,23,205,1,2,60,247,22,170,8,2,78,86,94,23,199,1,11,27,248, -80,144,46,8,51,39,250,22,94,23,207,1,248,22,90,248,22,145,16,2,56, -9,28,193,249,22,80,195,194,192,27,247,22,152,16,27,248,80,144,39,55,39, -249,80,144,41,52,37,37,80,144,41,8,52,39,249,80,144,40,41,38,28,23, +210,2,28,248,22,147,7,23,194,2,9,249,22,80,23,195,1,248,2,129,2, +23,211,1,192,192,248,22,132,6,23,194,1,20,13,144,80,144,37,8,28,37, +80,144,37,8,46,39,27,28,249,22,188,8,248,22,179,8,2,63,38,90,144, +39,11,89,146,39,36,11,248,22,190,15,23,198,2,86,95,23,195,1,23,194, +1,28,248,22,169,15,23,194,2,28,248,22,182,15,23,194,2,249,22,144,6, +23,195,1,32,0,88,148,8,36,36,41,11,9,222,11,90,144,39,11,89,146, +39,36,11,248,22,190,15,23,197,1,86,95,23,195,1,23,194,1,28,248,22, +169,15,23,194,2,28,248,22,182,15,23,194,2,249,22,144,6,23,195,1,32, +0,88,148,8,36,36,41,11,9,222,11,90,144,39,11,89,146,39,36,11,248, +22,190,15,23,197,1,86,95,23,195,1,23,194,1,28,248,22,169,15,23,194, +2,28,248,22,182,15,23,194,2,249,22,144,6,23,195,1,32,0,88,148,8, +36,36,41,11,9,222,11,90,144,39,11,89,146,39,36,11,248,22,190,15,23, +197,1,86,95,23,195,1,23,194,1,28,248,22,169,15,23,194,2,28,248,22, +182,15,23,194,2,249,22,144,6,23,195,1,32,0,88,148,8,36,36,41,11, +9,222,11,248,2,127,23,194,1,11,11,11,11,11,28,248,22,181,15,23,195, +2,27,28,249,22,188,8,248,22,179,8,2,63,38,249,22,144,6,23,197,2, +32,0,88,148,8,36,36,41,11,9,222,11,11,86,94,28,23,194,2,248,22, +146,6,23,195,1,86,94,23,194,1,12,249,22,80,27,248,22,187,5,23,199, +1,250,22,46,22,37,88,148,36,36,8,24,11,9,223,3,33,131,2,20,20, +94,88,148,36,36,43,11,9,223,3,33,132,2,23,196,1,194,249,22,80,11, +194,28,28,23,195,2,28,248,22,82,23,196,2,248,22,166,9,249,22,170,14, +36,248,22,155,20,23,199,2,11,11,194,86,94,23,195,1,249,22,14,20,20, +94,88,148,8,32,36,58,16,4,36,8,128,80,8,240,0,64,0,0,36,9, +224,2,3,33,133,2,23,196,1,80,144,38,8,26,38,27,248,22,166,9,194, +28,192,192,248,22,166,9,248,22,81,195,86,95,28,248,22,145,12,23,198,2, +27,247,22,137,12,28,249,22,129,12,23,195,2,2,64,251,22,133,12,23,197, +1,2,64,250,22,136,8,6,42,42,101,114,114,111,114,32,114,101,97,100,105, +110,103,32,99,111,108,108,101,99,116,105,111,110,32,108,105,110,107,115,32,102, +105,108,101,32,126,115,58,32,126,97,23,203,2,248,22,141,12,23,206,2,247, +22,29,12,12,28,23,193,2,250,22,156,2,80,144,42,8,25,38,23,198,1, +249,22,80,21,17,0,0,23,198,1,86,95,23,195,1,23,193,1,12,28,248, +22,145,12,23,198,2,86,94,23,197,1,248,23,195,1,247,22,138,2,196,88, +148,36,37,55,8,240,0,0,0,2,9,226,0,2,1,3,33,136,2,20,20, +94,248,22,147,6,23,194,2,28,248,22,147,7,248,22,147,6,23,195,1,12, +248,22,174,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,132,6,23, +194,1,28,248,22,89,193,28,28,249,22,128,4,38,248,22,93,195,10,249,22, +128,4,39,248,22,93,195,28,28,248,22,152,7,248,22,81,194,10,28,249,22, +168,9,2,65,248,22,154,20,195,10,249,22,168,9,2,66,248,22,154,20,195, +28,27,248,22,102,194,28,248,22,169,15,193,10,28,248,22,152,7,193,28,248, +22,128,16,193,10,248,22,129,16,193,11,27,248,22,88,248,22,104,195,28,192, +192,248,22,174,16,248,22,111,195,11,11,11,11,28,248,22,182,15,249,22,187, +15,23,196,2,23,198,2,27,248,22,68,248,22,173,15,23,198,1,250,22,156, +2,23,198,2,23,196,2,249,22,80,23,199,1,250,22,158,2,23,203,1,23, +201,1,9,12,250,22,156,2,23,197,1,23,198,1,249,22,80,23,198,1,23, +201,1,28,28,248,22,88,248,22,104,23,197,2,10,249,22,165,16,248,22,111, +23,198,2,247,22,170,8,27,248,22,133,16,249,22,131,16,248,22,102,23,200, +2,23,198,1,28,249,22,168,9,248,22,81,23,199,2,2,66,86,94,23,196, +1,249,22,3,20,20,94,88,148,8,36,37,53,11,9,224,3,2,33,141,2, +23,196,1,248,22,136,16,23,196,1,28,249,22,168,9,248,22,154,20,23,199, +2,2,65,86,94,23,196,1,86,94,28,250,22,158,2,23,197,2,11,11,12, +250,22,156,2,23,197,2,11,9,249,22,164,2,23,196,2,20,20,95,88,148, +8,36,38,50,11,9,224,3,2,33,142,2,23,195,1,23,196,1,27,248,22, +68,248,22,154,20,23,199,1,250,22,156,2,23,198,2,23,196,2,249,22,80, +248,22,129,2,23,200,1,250,22,158,2,23,203,1,23,201,1,9,12,250,22, +156,2,23,196,1,23,197,1,248,22,95,23,199,1,27,28,28,23,194,2,248, +22,166,9,248,22,81,23,196,2,10,9,27,249,22,187,5,23,198,2,66,98, +105,110,97,114,121,250,22,46,22,37,88,148,8,36,36,44,11,9,223,3,33, +138,2,20,20,94,88,148,36,36,43,11,9,223,3,33,139,2,23,196,1,86, +94,28,28,248,22,89,23,194,2,249,22,4,32,0,88,148,8,36,37,45,11, +9,222,33,140,2,23,195,2,11,12,248,22,174,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,138,2,27,90, +144,39,11,89,146,39,36,11,248,22,190,15,23,201,2,192,86,96,249,22,3, +20,20,94,88,148,8,36,37,54,11,9,224,2,3,33,143,2,23,195,1,23, +197,1,249,22,164,2,195,88,148,8,36,38,48,11,9,223,3,33,144,2,250, +22,156,2,80,144,44,8,25,38,23,200,1,249,22,80,23,201,1,198,193,20, +13,144,80,144,37,8,28,37,250,80,144,40,8,47,39,23,198,2,23,196,2, +11,27,250,22,158,2,80,144,41,8,25,38,23,197,2,21,143,11,17,0,0, +27,248,22,81,23,195,2,27,249,80,144,42,8,27,39,23,198,2,23,196,2, +28,249,22,170,9,23,195,2,23,196,1,248,22,82,195,86,94,23,195,1,20, +13,144,80,144,40,8,28,37,250,80,144,43,8,47,39,23,201,1,23,199,2, +23,196,2,27,20,20,95,88,148,8,36,36,52,8,240,0,0,0,2,9,225, +5,4,1,33,145,2,23,194,1,23,197,1,28,249,22,50,23,195,2,36,20, +13,144,80,144,41,43,37,26,29,80,144,8,34,44,37,249,22,33,11,80,144, +8,36,43,37,22,139,15,10,22,140,15,10,22,141,15,10,22,144,15,10,22, +143,15,11,22,145,15,10,22,142,15,10,22,146,15,10,22,147,15,10,22,148, +15,10,22,149,15,10,22,150,15,11,22,151,15,10,22,137,15,11,247,23,193, +1,250,22,178,11,2,8,2,53,23,196,1,248,22,9,20,20,94,88,148,36, +37,8,43,16,4,8,128,6,8,128,104,8,240,0,128,0,0,36,9,224,1, +2,33,146,2,23,195,1,0,7,35,114,120,34,47,43,34,28,248,22,152,7, +23,195,2,27,249,22,163,16,2,148,2,23,197,2,28,23,193,2,28,249,22, +128,4,248,22,101,23,196,2,248,22,182,3,248,22,155,7,23,199,2,249,22, +7,250,22,174,7,23,200,1,36,248,22,101,23,199,1,23,198,1,249,22,7, +250,22,174,7,23,200,2,36,248,22,101,23,199,2,249,22,80,249,22,174,7, +23,201,1,248,22,103,23,200,1,23,200,1,249,22,7,23,197,1,23,198,1, +90,144,39,11,89,146,39,36,11,248,22,190,15,23,198,1,86,94,23,195,1, +28,249,22,168,9,23,195,2,2,50,86,94,23,193,1,249,22,7,23,196,1, +23,200,1,27,249,22,80,23,197,1,23,201,1,28,248,22,152,7,23,195,2, +27,249,22,163,16,2,148,2,23,197,2,28,23,193,2,28,249,22,128,4,248, +22,101,23,196,2,248,22,182,3,248,22,155,7,23,199,2,249,22,7,250,22, +174,7,23,200,1,36,248,22,101,23,199,1,23,196,1,249,22,7,250,22,174, +7,23,200,2,36,248,22,101,23,199,2,249,22,80,249,22,174,7,23,201,1, +248,22,103,23,200,1,23,198,1,249,22,7,23,197,1,23,196,1,90,144,39, +11,89,146,39,36,11,248,22,190,15,23,198,1,86,94,23,195,1,28,249,22, +168,9,23,195,2,2,50,86,94,23,193,1,249,22,7,23,196,1,23,198,1, +249,80,144,45,8,31,39,194,249,22,80,197,199,28,248,22,88,23,196,2,9, +28,248,22,81,23,196,2,28,248,22,149,2,248,22,154,20,23,197,2,250,22, +94,249,22,2,22,129,2,250,22,158,2,248,22,154,20,23,204,2,23,202,2, +9,250,22,158,2,248,22,154,20,23,202,2,11,9,27,248,22,155,20,23,200, +1,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,28,248,22,149,2, +248,22,154,20,23,195,2,250,22,94,249,22,2,22,129,2,250,22,158,2,248, +22,154,20,23,202,2,23,206,2,9,250,22,158,2,248,22,154,20,23,200,2, +11,9,249,80,144,45,8,48,39,23,203,1,248,22,155,20,23,199,1,27,248, +80,144,42,8,30,39,248,22,154,20,23,196,2,250,22,94,250,22,158,2,23, +199,2,23,205,2,9,250,22,158,2,23,199,1,11,9,249,80,144,46,8,48, +39,23,204,1,248,22,155,20,23,200,1,249,22,94,247,22,149,16,249,80,144, +44,8,48,39,23,202,1,248,22,155,20,23,198,1,27,248,80,144,38,8,30, +39,248,22,154,20,23,198,2,250,22,94,250,22,158,2,23,199,2,23,201,2, +9,250,22,158,2,23,199,1,11,9,27,248,22,155,20,23,201,1,28,248,22, +88,23,194,2,9,28,248,22,81,23,194,2,28,248,22,149,2,248,22,154,20, +23,195,2,250,22,94,249,22,2,22,129,2,250,22,158,2,248,22,154,20,23, +202,2,23,207,2,9,250,22,158,2,248,22,154,20,23,200,2,11,9,249,80, +144,46,8,48,39,23,204,1,248,22,155,20,23,199,1,27,248,80,144,43,8, +30,39,248,22,154,20,23,196,2,250,22,94,250,22,158,2,23,199,2,23,206, +2,9,250,22,158,2,23,199,1,11,9,249,80,144,47,8,48,39,23,205,1, +248,22,155,20,23,200,1,249,22,94,247,22,149,16,249,80,144,45,8,48,39, +23,203,1,248,22,155,20,23,198,1,249,22,94,247,22,149,16,27,248,22,155, +20,23,199,1,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,28,248, +22,149,2,248,22,154,20,23,195,2,250,22,94,249,22,2,22,129,2,250,22, +158,2,248,22,154,20,23,202,2,23,205,2,9,250,22,158,2,248,22,154,20, +23,200,2,11,9,249,80,144,44,8,48,39,23,202,1,248,22,155,20,23,199, +1,27,248,80,144,41,8,30,39,248,22,154,20,23,196,2,250,22,94,250,22, +158,2,23,199,2,23,204,2,9,250,22,158,2,23,199,1,11,9,249,80,144, +45,8,48,39,23,203,1,248,22,155,20,23,200,1,249,22,94,247,22,149,16, +249,80,144,43,8,48,39,23,201,1,248,22,155,20,23,198,1,32,151,2,88, +148,8,36,37,47,11,2,51,222,33,152,2,28,248,22,88,248,22,82,23,195, +2,248,22,90,27,248,22,154,20,195,28,248,22,169,15,193,248,22,173,15,193, +192,250,22,91,27,248,22,154,20,23,198,2,28,248,22,169,15,193,248,22,173, +15,193,192,2,68,248,2,151,2,248,22,155,20,23,198,1,250,22,136,8,6, +7,7,10,32,126,97,32,126,97,6,1,1,32,23,196,1,249,22,136,8,6, +6,6,10,32,32,32,126,97,248,22,132,2,23,196,1,32,155,2,88,148,36, +38,48,11,66,102,105,108,116,101,114,222,33,156,2,28,248,22,88,23,195,2, +9,28,248,23,194,2,248,22,81,23,196,2,249,22,80,248,22,154,20,23,197, +2,249,2,155,2,23,197,1,248,22,155,20,23,199,1,249,2,155,2,23,195, +1,248,22,155,20,23,197,1,28,248,22,88,23,201,2,86,95,23,200,1,23, +199,1,28,23,201,2,28,197,249,22,187,15,202,199,200,27,28,248,22,88,23, +198,2,2,67,249,22,1,22,175,7,248,2,151,2,23,200,2,248,23,199,1, +251,22,136,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,88,23,203,1, +28,248,22,169,15,23,202,2,248,22,173,15,23,202,1,23,201,1,250,22,175, +7,28,248,22,169,15,23,205,2,248,22,173,15,23,205,1,23,204,1,2,68, +23,201,2,249,22,1,22,175,7,249,22,2,32,0,88,148,8,36,37,45,11, +9,222,33,153,2,27,248,22,93,23,206,2,27,248,22,93,247,22,149,16,28, +249,22,129,4,249,22,184,3,23,198,2,23,197,2,41,23,206,2,249,22,94, +247,22,149,16,248,22,90,249,22,136,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,184,3,23,201,1,23,200,1,28,249,22,5,22,131,2,23,202,2, +250,22,136,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, +175,7,249,22,2,32,0,88,148,8,36,37,45,11,9,222,33,154,2,249,2, +155,2,22,131,2,23,209,1,86,95,23,200,1,23,198,1,2,67,27,248,22, +81,23,202,2,27,28,248,22,169,15,23,195,2,249,22,187,15,23,196,1,23, +199,2,248,22,132,2,23,195,1,28,28,248,22,169,15,248,22,81,23,204,2, +248,22,182,15,23,194,2,10,27,250,22,1,22,187,15,23,197,1,23,202,2, +28,28,248,22,88,23,200,2,10,248,22,182,15,23,194,2,28,23,201,2,28, +28,250,80,144,42,8,32,39,195,203,204,10,27,28,248,22,169,15,202,248,22, +173,15,202,201,19,248,22,155,7,23,195,2,27,28,249,22,132,4,23,196,4, +40,28,249,22,158,7,6,4,4,46,114,107,116,249,22,174,7,23,199,2,249, +22,184,3,23,200,4,40,249,22,175,7,250,22,174,7,23,200,1,36,249,22, +184,3,23,201,4,40,6,3,3,46,115,115,86,94,23,195,1,11,11,28,23, +193,2,250,80,144,45,8,32,39,198,23,196,1,23,15,11,2,28,200,249,22, +187,15,194,202,192,26,8,80,144,47,8,49,39,204,205,206,23,15,23,16,23, +17,248,22,155,20,23,19,28,23,19,23,19,200,28,200,249,22,187,15,194,202, +192,26,8,80,144,47,8,49,39,204,205,206,23,15,23,16,23,17,248,22,155, +20,23,19,23,19,26,8,80,144,46,8,49,39,203,204,205,206,23,15,23,16, +248,22,155,20,23,18,23,18,90,144,38,11,89,146,38,36,11,249,80,144,40, +8,31,39,23,199,1,23,200,1,27,248,22,68,28,248,22,169,15,195,248,22, +173,15,195,194,27,27,247,22,150,16,28,248,22,88,23,194,2,9,28,248,22, +81,23,194,2,28,248,22,149,2,248,22,154,20,23,195,2,250,22,94,249,22, +2,22,129,2,250,22,158,2,248,22,154,20,23,202,2,23,203,2,9,250,22, +158,2,248,22,154,20,23,200,2,11,9,249,80,144,46,8,48,39,23,200,1, +248,22,155,20,23,199,1,27,248,80,144,43,8,30,39,248,22,154,20,23,196, +2,250,22,94,250,22,158,2,23,199,2,23,202,2,9,250,22,158,2,23,199, +1,11,9,249,80,144,47,8,48,39,23,201,1,248,22,155,20,23,200,1,249, +22,94,247,22,149,16,249,80,144,45,8,48,39,23,199,1,248,22,155,20,23, +198,1,26,8,80,144,48,8,49,39,200,202,203,205,23,16,23,17,200,11,32, +159,2,88,148,8,36,39,56,11,2,51,222,33,160,2,28,248,22,133,4,23, +196,2,86,94,23,195,1,19,248,22,146,8,23,195,2,19,248,22,146,8,23, +196,2,249,22,179,15,27,251,22,153,8,250,22,152,8,23,205,2,36,23,204, +4,2,52,249,22,152,8,23,204,1,23,202,4,2,69,28,248,22,133,4,248, +22,146,8,23,195,2,86,94,23,193,1,251,22,180,11,2,38,2,70,2,71, +202,192,28,248,22,170,15,198,248,22,171,15,198,247,22,172,15,2,2,27,248, +22,182,3,23,197,1,28,249,22,168,9,8,46,249,22,147,8,23,198,2,23, +197,2,27,248,22,181,3,23,195,2,249,22,179,15,27,251,22,153,8,250,22, +152,8,23,205,2,36,23,204,1,2,72,249,22,152,8,23,204,1,23,202,1, +2,69,28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193,1,251,22, +180,11,2,38,2,70,2,71,202,192,28,248,22,170,15,198,248,22,171,15,198, +247,22,172,15,250,2,159,2,196,197,195,248,22,181,15,27,250,22,187,15,23, +200,1,23,202,1,23,199,1,28,249,22,168,9,23,197,2,64,115,97,109,101, +192,28,248,22,128,16,23,196,2,249,22,187,15,194,196,249,80,144,43,39,39, +23,195,1,23,197,1,249,22,5,20,20,96,88,148,36,37,51,44,9,226,5, +4,2,6,33,161,2,23,199,1,23,195,1,23,197,1,23,196,1,27,248,22, +181,15,249,22,187,15,23,198,2,23,199,2,28,23,193,2,192,86,94,23,193, +1,28,23,197,1,27,90,144,38,11,89,146,38,36,11,250,80,144,43,8,34, +39,23,202,2,2,69,2,38,27,248,22,175,15,23,196,1,27,250,2,159,2, +23,197,2,23,204,1,248,22,146,8,23,198,1,28,248,22,170,15,195,249,22, +187,15,196,194,192,27,247,22,151,16,249,22,5,20,20,96,88,148,36,37,48, +44,9,226,5,6,2,3,33,162,2,23,196,1,23,195,1,23,199,1,247,22, +152,16,11,86,95,28,28,248,22,170,15,23,194,2,10,28,248,22,169,15,23, +194,2,10,28,248,22,152,7,23,194,2,28,248,22,128,16,23,194,2,10,248, +22,129,16,23,194,2,11,12,252,22,178,11,23,200,2,2,43,36,23,198,2, +23,199,2,28,28,248,22,152,7,23,195,2,10,248,22,141,8,23,195,2,86, +94,23,194,1,12,252,22,178,11,23,200,2,2,73,37,23,198,2,23,199,1, +90,144,39,11,89,146,39,36,11,248,22,190,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,181,11,23,201, +1,2,74,23,199,1,249,22,7,23,195,1,23,196,1,32,165,2,88,148,8, +36,43,58,11,2,75,222,33,166,2,249,22,179,15,27,251,22,153,8,250,22, +152,8,23,203,2,36,23,207,1,23,205,1,249,23,203,1,23,202,1,23,208, +1,28,248,22,152,7,23,204,2,249,22,167,8,23,205,1,8,63,23,203,1, +28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193,1,251,22,180,11, +2,38,2,70,2,71,201,192,28,248,22,170,15,197,248,22,171,15,197,247,22, +172,15,32,167,2,88,148,8,36,42,8,24,11,2,51,222,33,168,2,28,248, +22,133,4,23,199,2,86,95,23,198,1,23,194,1,19,248,22,146,8,23,195, +2,19,248,22,146,8,23,196,2,249,22,179,15,27,251,22,153,8,250,22,152, +8,23,205,2,36,23,204,4,2,52,249,23,206,1,23,204,1,23,202,4,28, +248,22,152,7,23,207,2,249,22,167,8,23,208,1,8,63,23,206,1,28,248, +22,133,4,248,22,146,8,23,195,2,86,94,23,193,1,251,22,180,11,2,38, +2,70,2,71,204,192,28,248,22,170,15,200,248,22,171,15,200,247,22,172,15, +2,2,27,248,22,182,3,23,200,1,28,249,22,168,9,8,46,249,22,147,8, +23,198,2,23,197,2,27,248,22,181,3,23,195,2,249,22,179,15,27,251,22, +153,8,250,22,152,8,23,205,2,36,23,204,1,23,203,1,249,23,206,1,23, +204,1,23,202,1,28,248,22,152,7,23,207,2,249,22,167,8,23,208,1,8, +63,23,206,1,28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193,1, +251,22,180,11,2,38,2,70,2,71,204,192,28,248,22,170,15,200,248,22,171, +15,200,247,22,172,15,28,248,22,133,4,23,194,2,86,95,23,195,1,23,193, +1,19,248,22,146,8,23,196,2,19,248,22,146,8,23,197,2,249,22,179,15, +27,251,22,153,8,250,22,152,8,23,206,2,36,23,204,4,2,52,249,23,207, +1,23,205,1,23,202,4,28,248,22,152,7,23,208,2,249,22,167,8,23,209, +1,8,63,23,207,1,28,248,22,133,4,248,22,146,8,23,195,2,86,94,23, +193,1,251,22,180,11,2,38,2,70,2,71,205,192,28,248,22,170,15,201,248, +22,171,15,201,247,22,172,15,2,2,27,248,22,182,3,23,195,1,28,249,22, +168,9,8,46,249,22,147,8,23,199,2,23,197,2,27,248,22,181,3,23,195, +2,249,22,179,15,27,251,22,153,8,250,22,152,8,23,206,2,36,23,204,1, +23,204,1,249,23,207,1,23,205,1,23,202,1,28,248,22,152,7,23,208,2, +249,22,167,8,23,209,1,8,63,23,207,1,28,248,22,133,4,248,22,146,8, +23,195,2,86,94,23,193,1,251,22,180,11,2,38,2,70,2,71,205,192,28, +248,22,170,15,201,248,22,171,15,201,247,22,172,15,28,248,22,133,4,193,254, +2,165,2,201,203,204,205,248,22,146,8,202,2,52,248,22,146,8,202,27,248, +22,182,3,194,28,249,22,168,9,8,46,249,22,147,8,199,196,254,2,165,2, +202,204,205,206,199,203,248,22,181,3,200,253,2,167,2,201,202,203,204,205,198, +90,144,38,11,89,146,38,36,11,86,95,28,28,248,22,170,15,23,199,2,10, +28,248,22,169,15,23,199,2,10,28,248,22,152,7,23,199,2,28,248,22,128, +16,23,199,2,10,248,22,129,16,23,199,2,11,12,252,22,178,11,23,200,2, +2,43,36,23,203,2,23,204,2,28,28,248,22,152,7,23,200,2,10,248,22, +141,8,23,200,2,12,252,22,178,11,23,200,2,2,73,37,23,203,2,23,204, +2,90,144,39,11,89,146,39,36,11,248,22,190,15,23,202,2,86,94,23,195, +1,86,94,28,192,12,250,22,181,11,23,201,1,2,74,23,204,2,249,22,7, +194,195,27,248,22,175,15,23,196,1,27,19,248,22,146,8,23,196,2,28,248, +22,133,4,23,194,4,86,94,23,199,1,19,248,22,146,8,23,197,2,19,248, +22,146,8,23,198,2,249,22,179,15,27,251,22,153,8,250,22,152,8,23,207, +2,36,23,204,4,2,52,249,23,211,1,23,206,1,23,202,4,28,248,22,152, +7,23,212,2,249,22,167,8,23,213,1,8,63,23,211,1,28,248,22,133,4, +248,22,146,8,23,195,2,86,94,23,193,1,251,22,180,11,2,38,2,70,2, +71,23,17,192,28,248,22,170,15,205,248,22,171,15,205,247,22,172,15,2,2, +27,248,22,182,3,23,195,4,28,249,22,168,9,8,46,249,22,147,8,23,200, +2,23,197,2,27,248,22,181,3,23,195,2,249,22,179,15,27,251,22,153,8, +250,22,152,8,23,207,2,36,23,204,1,23,208,1,249,23,211,1,23,206,1, +23,202,1,28,248,22,152,7,23,212,2,249,22,167,8,23,213,1,8,63,23, +211,1,28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193,1,251,22, +180,11,2,38,2,70,2,71,23,17,192,28,248,22,170,15,205,248,22,171,15, +205,247,22,172,15,28,248,22,133,4,23,194,2,86,95,23,200,1,23,193,1, +254,2,165,2,23,203,2,23,208,1,23,209,1,23,210,1,248,22,146,8,23, +204,2,2,52,248,22,146,8,23,204,1,27,248,22,182,3,23,195,1,28,249, +22,168,9,8,46,249,22,147,8,23,201,2,23,197,2,254,2,165,2,23,204, +1,23,209,1,23,210,1,23,211,1,23,200,2,23,208,1,248,22,181,3,23, +201,1,253,2,167,2,23,203,1,23,207,1,23,208,1,23,209,1,23,210,1, +23,199,1,2,28,248,22,170,15,195,249,22,187,15,196,194,192,32,170,2,88, +148,8,36,40,58,11,2,51,222,33,171,2,28,248,22,133,4,23,197,2,86, +94,23,196,1,19,248,22,146,8,23,195,2,35,248,22,146,8,23,196,2,249, +22,179,15,27,251,22,153,8,250,22,152,8,23,205,1,36,23,204,4,2,52, +2,52,28,248,22,152,7,23,205,2,249,22,167,8,23,206,1,8,63,23,204, +1,28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193,1,251,22,180, +11,2,38,2,70,2,71,202,192,28,248,22,170,15,198,248,22,171,15,198,247, +22,172,15,2,27,248,22,182,3,23,198,1,28,249,22,168,9,8,46,249,22, +147,8,23,198,2,23,197,2,35,248,22,181,3,23,195,2,249,22,179,15,27, +251,22,153,8,250,22,152,8,23,205,1,36,23,204,1,2,52,2,52,28,248, +22,152,7,23,205,2,249,22,167,8,23,206,1,8,63,23,204,1,28,248,22, +133,4,248,22,146,8,23,195,2,86,94,23,193,1,251,22,180,11,2,38,2, +70,2,71,202,192,28,248,22,170,15,198,248,22,171,15,198,247,22,172,15,28, +248,22,133,4,23,194,2,86,94,23,193,1,19,248,22,146,8,23,196,2,35, +248,22,146,8,23,197,2,249,22,179,15,27,251,22,153,8,250,22,152,8,23, +206,1,36,23,204,4,2,52,2,52,28,248,22,152,7,23,206,2,249,22,167, +8,23,207,1,8,63,23,205,1,28,248,22,133,4,248,22,146,8,23,195,2, +86,94,23,193,1,251,22,180,11,2,38,2,70,2,71,203,192,28,248,22,170, +15,199,248,22,171,15,199,247,22,172,15,2,27,248,22,182,3,23,195,1,28, +249,22,168,9,8,46,249,22,147,8,23,199,2,23,197,2,35,248,22,181,3, +23,195,2,249,22,179,15,27,251,22,153,8,250,22,152,8,23,206,1,36,23, +204,1,2,52,2,52,28,248,22,152,7,23,206,2,249,22,167,8,23,207,1, +8,63,23,205,1,28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193, +1,251,22,180,11,2,38,2,70,2,71,203,192,28,248,22,170,15,199,248,22, +171,15,199,247,22,172,15,251,2,170,2,198,199,200,196,90,144,38,11,89,146, +38,36,11,86,95,28,28,248,22,170,15,23,196,2,10,28,248,22,169,15,23, +196,2,10,28,248,22,152,7,23,196,2,28,248,22,128,16,23,196,2,10,248, +22,129,16,23,196,2,11,12,252,22,178,11,2,38,2,43,36,23,200,2,23, +201,2,28,28,248,22,152,7,23,197,2,10,248,22,141,8,23,197,2,12,252, +22,178,11,2,38,2,73,37,23,200,2,23,201,2,90,144,39,11,89,146,39, +36,11,248,22,190,15,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22, +181,11,2,38,2,74,23,201,2,249,22,7,194,195,27,248,22,175,15,23,196, +1,27,251,2,170,2,23,198,2,23,201,1,23,202,1,248,22,146,8,23,199, +1,28,248,22,170,15,195,249,22,187,15,196,194,192,2,52,252,80,143,41,8, +35,2,38,2,52,32,0,88,148,8,36,38,43,11,9,222,33,173,2,198,199, +32,175,2,88,148,8,36,40,57,11,2,51,222,33,178,2,32,176,2,88,148, +8,36,42,57,11,2,75,222,33,177,2,249,22,179,15,27,251,22,153,8,250, +22,152,8,23,203,2,36,23,206,1,23,204,1,249,22,152,8,23,202,1,23, +207,1,28,248,22,152,7,23,203,2,249,22,167,8,23,204,1,8,63,23,202, +1,28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193,1,251,22,180, +11,2,38,2,70,2,71,200,192,28,248,22,170,15,196,248,22,171,15,196,247, +22,172,15,28,248,22,133,4,23,197,2,86,94,23,196,1,19,248,22,146,8, +23,195,2,19,248,22,146,8,23,196,2,249,22,179,15,27,251,22,153,8,250, +22,152,8,23,205,2,36,23,204,4,2,52,249,22,152,8,23,204,1,23,202, +4,28,248,22,152,7,23,205,2,249,22,167,8,23,206,1,8,63,23,204,1, +28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193,1,251,22,180,11, +2,38,2,70,2,71,202,192,28,248,22,170,15,198,248,22,171,15,198,247,22, +172,15,2,2,27,248,22,182,3,23,198,1,28,249,22,168,9,8,46,249,22, +147,8,23,198,2,23,197,2,27,248,22,181,3,23,195,2,249,22,179,15,27, +251,22,153,8,250,22,152,8,23,205,2,36,23,204,1,2,72,249,22,152,8, +23,204,1,23,202,1,28,248,22,152,7,23,205,2,249,22,167,8,23,206,1, +8,63,23,204,1,28,248,22,133,4,248,22,146,8,23,195,2,86,94,23,193, +1,251,22,180,11,2,38,2,70,2,71,202,192,28,248,22,170,15,198,248,22, +171,15,198,247,22,172,15,28,248,22,133,4,193,253,2,176,2,199,200,201,248, +22,146,8,200,2,52,248,22,146,8,200,27,248,22,182,3,194,28,249,22,168, +9,8,46,249,22,147,8,198,196,253,2,176,2,200,201,202,198,2,72,248,22, +181,3,199,251,2,175,2,198,199,200,196,90,144,38,11,89,146,38,36,11,86, +95,28,28,248,22,170,15,23,196,2,10,28,248,22,169,15,23,196,2,10,28, +248,22,152,7,23,196,2,28,248,22,128,16,23,196,2,10,248,22,129,16,23, +196,2,11,12,252,22,178,11,2,38,2,43,36,23,200,2,23,201,2,28,28, +248,22,152,7,23,197,2,10,248,22,141,8,23,197,2,12,252,22,178,11,2, +38,2,73,37,23,200,2,23,201,2,90,144,39,11,89,146,39,36,11,248,22, +190,15,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22,181,11,2,38, +2,74,23,201,2,249,22,7,194,195,27,248,22,175,15,23,196,1,27,251,2, +175,2,23,198,2,23,201,1,23,202,1,248,22,146,8,23,199,1,28,248,22, +170,15,195,249,22,187,15,196,194,192,252,80,143,41,8,35,2,38,2,72,22, +152,8,198,199,249,247,22,175,5,23,195,1,11,249,247,22,175,5,194,11,28, +248,22,88,23,195,2,9,27,27,248,22,81,23,197,2,28,248,22,130,16,23, +194,2,248,22,133,16,23,194,1,28,248,22,129,16,23,194,2,90,144,39,11, +89,146,39,36,11,248,22,190,15,249,22,131,16,250,80,144,47,40,39,248,22, +146,16,2,57,11,11,248,22,146,16,2,58,86,95,23,195,1,23,194,1,248, +22,133,16,249,22,131,16,23,199,1,23,196,1,27,250,80,144,42,40,39,248, +22,146,16,2,57,23,197,1,10,28,23,193,2,248,22,133,16,23,194,1,11, +28,23,193,2,249,22,80,248,22,133,16,249,22,131,16,23,198,1,247,22,147, +16,27,248,22,82,23,199,1,28,248,22,88,23,194,2,9,27,248,80,144,42, +53,39,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22,133,16,249,22, +131,16,23,198,1,247,22,147,16,248,80,144,44,8,50,39,248,22,82,23,198, +1,86,94,23,193,1,248,80,144,42,8,50,39,248,22,82,23,196,1,86,94, +23,193,1,27,248,22,82,23,197,1,28,248,22,88,23,194,2,9,27,248,80, +144,40,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22,133,16, +249,22,131,16,23,198,1,247,22,147,16,248,80,144,42,8,50,39,248,22,82, +23,198,1,86,94,23,193,1,248,80,144,40,8,50,39,248,22,82,23,196,1, +28,248,22,88,23,195,2,9,27,27,248,22,81,23,197,2,28,248,22,130,16, +23,194,2,248,22,133,16,23,194,1,28,248,22,129,16,23,194,2,90,144,39, +11,89,146,39,36,11,248,22,190,15,249,22,131,16,250,80,144,47,40,39,248, +22,146,16,2,57,11,11,248,22,146,16,2,58,86,95,23,195,1,23,194,1, +248,22,133,16,249,22,131,16,23,199,1,23,196,1,27,250,80,144,42,40,39, +248,22,146,16,2,57,23,197,1,10,28,23,193,2,248,22,133,16,23,194,1, +11,28,23,193,2,249,22,80,248,22,133,16,249,22,131,16,23,198,1,247,22, +147,16,27,248,22,82,23,199,1,28,248,22,88,23,194,2,9,27,248,80,144, +42,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22,133,16,249, +22,131,16,23,198,1,247,22,147,16,248,80,144,44,8,51,39,248,22,82,23, +198,1,86,94,23,193,1,248,80,144,42,8,51,39,248,22,82,23,196,1,86, +94,23,193,1,27,248,22,82,23,197,1,28,248,22,88,23,194,2,9,27,248, +80,144,40,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22,133, +16,249,22,131,16,23,198,1,247,22,147,16,248,80,144,42,8,51,39,248,22, +82,23,198,1,86,94,23,193,1,248,80,144,40,8,51,39,248,22,82,23,196, +1,27,248,22,146,16,2,59,28,248,22,130,16,23,194,2,248,22,133,16,23, +194,1,28,248,22,129,16,23,194,2,90,144,39,11,89,146,39,36,11,248,22, +190,15,249,22,131,16,250,80,144,46,40,39,248,22,146,16,2,57,11,11,248, +22,146,16,2,58,86,95,23,195,1,23,194,1,248,22,133,16,249,22,131,16, +23,199,1,23,196,1,27,250,80,144,41,40,39,248,22,146,16,2,57,23,197, +1,10,28,23,193,2,248,22,133,16,23,194,1,11,28,248,22,88,23,195,2, +9,27,27,248,22,81,23,197,2,28,248,22,130,16,23,194,2,248,22,133,16, +23,194,1,28,248,22,129,16,23,194,2,90,144,39,11,89,146,39,36,11,248, +22,190,15,249,22,131,16,250,80,144,47,40,39,248,22,146,16,2,57,11,11, +248,22,146,16,2,58,86,95,23,195,1,23,194,1,248,22,133,16,249,22,131, +16,23,199,1,23,196,1,27,250,80,144,42,40,39,248,22,146,16,2,57,23, +197,1,10,28,23,193,2,248,22,133,16,23,194,1,11,28,23,193,2,249,22, +80,248,22,133,16,249,22,131,16,23,198,1,247,22,147,16,27,248,22,82,23, +199,1,28,248,22,88,23,194,2,9,27,27,248,22,81,23,196,2,28,248,22, +130,16,23,194,2,248,22,133,16,23,194,1,28,248,22,129,16,23,194,2,90, +144,39,11,89,146,39,36,11,248,22,190,15,249,22,131,16,250,80,144,51,40, +39,248,22,146,16,2,57,11,11,248,22,146,16,2,58,86,95,23,195,1,23, +194,1,248,22,133,16,249,22,131,16,23,199,1,23,196,1,27,250,80,144,46, +40,39,248,22,146,16,2,57,23,197,1,10,28,23,193,2,248,22,133,16,23, +194,1,11,28,23,193,2,249,22,80,248,22,133,16,249,22,131,16,23,198,1, +247,22,147,16,27,248,22,82,23,198,1,28,248,22,88,23,194,2,9,27,248, +80,144,46,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22,133, +16,249,22,131,16,23,198,1,247,22,147,16,248,80,144,48,8,53,39,248,22, +82,23,198,1,86,94,23,193,1,248,80,144,46,8,53,39,248,22,82,23,196, +1,86,94,23,193,1,27,248,22,82,23,196,1,28,248,22,88,23,194,2,9, +27,248,80,144,44,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80,248, +22,133,16,249,22,131,16,23,198,1,247,22,147,16,248,80,144,46,8,53,39, +248,22,82,23,198,1,86,94,23,193,1,248,80,144,44,8,53,39,248,22,82, +23,196,1,86,94,23,193,1,27,248,22,82,23,197,1,28,248,22,88,23,194, +2,9,27,27,248,22,81,23,196,2,28,248,22,130,16,23,194,2,248,22,133, +16,23,194,1,28,248,22,129,16,23,194,2,90,144,39,11,89,146,39,36,11, +248,22,190,15,249,22,131,16,250,80,144,49,40,39,248,22,146,16,2,57,11, +11,248,22,146,16,2,58,86,95,23,195,1,23,194,1,248,22,133,16,249,22, +131,16,23,199,1,23,196,1,27,250,80,144,44,40,39,248,22,146,16,2,57, +23,197,1,10,28,23,193,2,248,22,133,16,23,194,1,11,28,23,193,2,249, +22,80,248,22,133,16,249,22,131,16,23,198,1,247,22,147,16,27,248,22,82, +23,198,1,28,248,22,88,23,194,2,9,27,248,80,144,44,53,39,248,22,81, +23,196,2,28,23,193,2,249,22,80,248,22,133,16,249,22,131,16,23,198,1, +247,22,147,16,248,80,144,46,8,53,39,248,22,82,23,198,1,86,94,23,193, +1,248,80,144,44,8,53,39,248,22,82,23,196,1,86,94,23,193,1,27,248, +22,82,23,196,1,28,248,22,88,23,194,2,9,27,248,80,144,42,53,39,248, +22,81,23,196,2,28,23,193,2,249,22,80,248,22,133,16,249,22,131,16,23, +198,1,247,22,147,16,248,80,144,44,8,53,39,248,22,82,23,198,1,86,94, +23,193,1,248,80,144,42,8,53,39,248,22,82,23,196,1,27,247,22,153,16, +27,248,80,144,39,55,39,247,80,144,39,54,39,249,80,144,40,41,38,28,23, 196,2,27,249,22,174,8,247,22,173,8,2,76,28,192,249,22,164,8,194,7, 63,2,67,2,67,250,80,144,43,59,39,23,198,2,2,77,27,28,23,200,1, -250,22,186,15,248,22,145,16,2,62,250,22,158,2,23,205,1,2,60,247,22, -170,8,2,78,86,94,23,199,1,11,27,27,250,22,94,23,207,1,248,22,90, -248,22,145,16,2,56,23,208,1,28,248,22,88,23,194,2,9,27,27,248,22, -81,23,196,2,28,248,22,129,16,23,194,2,248,22,132,16,23,194,1,28,248, -22,128,16,23,194,2,90,144,39,11,89,146,39,36,11,248,22,189,15,249,22, -130,16,27,248,22,145,16,2,57,250,80,144,58,40,39,23,196,1,11,11,248, -22,145,16,2,58,86,95,23,195,1,23,194,1,248,22,132,16,249,22,130,16, -23,199,1,23,196,1,27,250,80,144,52,40,39,248,22,145,16,2,57,23,197, -1,10,28,23,193,2,248,22,132,16,23,194,1,11,28,23,193,2,249,22,80, -248,22,132,16,249,22,130,16,23,198,1,247,22,146,16,27,248,22,82,23,198, -1,28,248,22,88,23,194,2,9,27,248,80,144,52,53,39,248,22,81,23,196, -2,28,23,193,2,249,22,80,248,22,132,16,249,22,130,16,23,198,1,247,22, -146,16,248,80,144,54,8,53,39,248,22,82,23,198,1,86,94,23,193,1,248, -80,144,52,8,53,39,248,22,82,23,196,1,86,94,23,193,1,27,248,22,82, -23,196,1,28,248,22,88,23,194,2,9,27,248,80,144,50,53,39,248,22,81, -23,196,2,28,23,193,2,249,22,80,248,22,132,16,249,22,130,16,23,198,1, -247,22,146,16,248,80,144,52,8,53,39,248,22,82,23,198,1,86,94,23,193, -1,248,80,144,50,8,53,39,248,22,82,23,196,1,28,193,249,22,80,195,194, -192,27,20,13,144,80,144,37,43,37,26,9,80,144,46,44,37,249,22,33,11, -80,144,48,43,37,22,142,15,10,22,149,15,10,22,150,15,10,22,151,15,10, -248,22,147,6,23,196,2,28,248,22,147,7,23,194,2,12,86,94,248,22,176, -9,23,194,1,27,20,13,144,80,144,38,43,37,26,9,80,144,47,44,37,249, -22,33,11,80,144,49,43,37,22,142,15,10,22,149,15,10,22,150,15,10,22, -151,15,10,248,22,147,6,23,197,2,28,248,22,147,7,23,194,2,12,86,94, -248,22,176,9,23,194,1,27,20,13,144,80,144,39,43,37,26,9,80,144,48, -44,37,249,22,33,11,80,144,50,43,37,22,142,15,10,22,149,15,10,22,150, -15,10,22,151,15,10,248,22,147,6,23,198,2,28,248,22,147,7,23,194,2, -12,86,94,248,22,176,9,23,194,1,248,80,144,40,8,54,39,197,86,94,249, -22,138,7,247,22,171,5,23,196,2,248,22,162,6,249,22,136,4,36,249,22, -184,3,28,23,198,2,23,198,1,86,94,23,198,1,36,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, -145,16,2,57,27,250,80,144,42,40,39,23,197,1,11,11,27,248,22,139,4, -23,199,1,27,28,23,194,2,23,194,1,86,94,23,194,1,36,27,248,22,139, -4,23,202,1,249,22,139,6,23,198,1,20,20,95,88,148,8,36,36,48,11, -9,224,3,2,33,191,2,23,195,1,23,196,1,27,248,22,188,5,23,195,1, -248,80,144,39,8,54,39,193,144,36,20,114,144,36,16,1,11,16,0,20,26, -15,53,9,2,1,2,1,29,11,11,11,11,9,9,11,11,11,10,43,80,143, -36,36,20,114,144,51,16,40,2,2,2,3,2,4,2,5,2,6,2,7,2, -8,30,2,11,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111, -110,45,107,101,121,11,6,30,2,11,1,23,101,120,116,101,110,100,45,112,97, -114,97,109,101,116,101,114,105,122,97,116,105,111,110,11,4,2,12,2,13,2, -14,2,15,2,16,2,17,2,18,30,2,19,79,99,97,99,104,101,45,99,111, -110,102,105,103,117,114,97,116,105,111,110,11,1,2,20,2,21,2,22,2,23, -2,24,2,25,2,26,2,27,2,28,2,29,2,30,30,2,19,1,21,101,120, -99,101,112,116,105,111,110,45,104,97,110,100,108,101,114,45,107,101,121,11,3, -2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,40,2, -41,16,0,37,39,36,16,0,36,16,19,2,13,2,14,2,12,2,26,2,3, -2,36,2,24,2,25,2,20,2,30,2,34,2,22,2,23,2,32,2,28,2, -31,2,33,2,37,2,29,55,11,11,11,16,17,2,8,2,17,2,15,2,41, -2,16,2,6,2,27,2,40,2,18,2,21,2,39,2,4,2,35,2,7,2, -38,2,2,2,5,16,17,11,11,11,11,11,11,11,11,11,11,11,11,11,11, -11,11,11,16,17,2,8,2,17,2,15,2,41,2,16,2,6,2,27,2,40, -2,18,2,21,2,39,2,4,2,35,2,7,2,38,2,2,2,5,53,53,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,51,20,15,16,2,32,0,88,148,8,36,37,45,11,2,2,222,33, -79,80,144,36,36,37,20,15,16,2,249,22,154,7,7,92,7,92,80,144,36, -37,37,20,15,16,2,88,148,8,36,37,54,38,2,4,223,0,33,84,80,144, -36,38,37,20,15,16,2,88,148,8,36,38,58,38,2,5,223,0,33,86,80, -144,36,39,37,20,15,16,2,20,25,96,2,6,88,148,8,36,39,8,24,8, -32,9,223,0,33,93,88,148,8,36,38,47,52,9,223,0,33,94,88,148,8, -36,37,46,52,9,223,0,33,95,80,144,36,40,37,20,15,16,2,27,248,22, -156,16,248,22,166,8,27,28,249,22,168,9,247,22,179,8,2,44,6,1,1, -59,6,1,1,58,250,22,136,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,148,8,36,38,48,11,2,7,223, -0,33,99,80,144,36,41,37,20,15,16,2,88,148,36,37,8,38,8,128,6, -2,8,223,0,33,100,80,144,36,42,37,20,15,16,2,32,0,88,148,8,36, -38,47,11,2,12,222,33,101,80,144,36,45,37,20,15,16,2,32,0,88,148, -8,36,39,48,11,2,13,222,33,103,80,144,36,46,37,20,15,16,2,32,0, -88,148,8,36,38,46,11,2,14,222,33,104,80,144,36,47,37,20,15,16,2, -88,148,36,39,50,8,128,128,2,15,223,0,33,106,80,144,36,48,37,20,15, -16,2,88,148,36,41,52,8,128,128,2,17,223,0,33,108,80,144,36,50,37, -20,15,16,2,88,148,36,36,53,52,9,223,0,33,109,80,144,36,8,40,39, -20,15,16,2,88,148,36,36,44,16,4,36,37,8,128,4,36,2,18,223,0, -33,110,80,144,36,51,37,20,15,16,2,88,148,36,36,53,52,9,223,0,33, -111,80,144,36,8,41,39,20,15,16,2,88,148,36,36,44,16,4,36,37,8, -128,8,36,2,21,223,0,33,112,80,144,36,54,37,20,15,16,2,88,148,8, -36,36,8,38,8,128,6,9,223,0,33,113,80,144,36,8,42,39,20,15,16, -2,88,148,8,36,37,47,16,4,36,36,8,128,16,36,2,22,223,0,33,114, -80,144,36,55,37,20,15,16,2,20,27,143,32,0,88,148,36,37,45,11,2, -23,222,33,115,32,0,88,148,36,37,45,11,2,23,222,33,116,80,144,36,56, -37,20,15,16,2,88,148,8,36,37,47,8,240,0,128,0,0,2,24,223,0, -33,117,80,144,36,57,37,20,15,16,2,88,148,36,36,53,52,9,223,0,33, -118,80,144,36,8,43,39,20,15,16,2,88,148,8,36,37,48,16,4,36,37, -8,128,32,36,2,25,223,0,33,119,80,144,36,58,37,20,15,16,2,88,148, -36,37,53,52,2,20,223,0,33,120,80,144,36,53,37,20,15,16,2,88,148, -8,36,38,55,16,4,8,240,0,128,0,0,8,32,8,128,64,36,2,51,223, -0,33,121,80,144,36,8,44,39,20,15,16,2,88,148,8,36,39,49,16,4, -36,36,8,128,64,36,2,26,223,0,33,122,80,144,36,59,37,20,15,16,2, -88,148,36,36,53,52,9,223,0,33,123,80,144,36,8,45,39,20,15,16,2, -88,148,8,36,36,54,16,4,8,240,0,128,0,0,8,137,2,8,128,128,36, -2,27,223,0,33,124,80,144,36,8,24,37,20,15,16,2,247,22,140,2,80, -144,36,8,25,37,20,15,16,2,248,22,18,65,115,116,97,109,112,80,144,36, -8,26,37,20,15,16,2,88,148,36,37,46,8,240,0,0,0,4,9,223,0, -33,126,80,144,36,8,46,39,20,15,16,2,88,148,36,38,48,16,4,36,8, -128,80,8,240,0,64,0,0,36,2,30,223,0,33,134,2,80,144,36,8,27, -37,20,15,16,2,32,0,88,148,8,36,37,45,11,2,31,222,33,135,2,80, -144,36,8,29,37,20,15,16,2,88,148,8,36,39,45,8,240,0,0,0,2, -72,109,97,107,101,45,104,97,110,100,108,101,114,223,0,33,137,2,80,144,36, -8,47,39,20,15,16,2,88,148,36,37,44,16,4,8,128,6,8,128,104,8, -240,0,128,0,0,36,2,32,223,0,33,147,2,80,144,36,8,30,37,20,15, -16,2,88,148,36,38,56,16,2,36,8,240,0,128,0,0,2,33,223,0,33, -149,2,80,144,36,8,31,37,20,15,16,2,88,148,8,36,38,58,16,4,36, -8,240,0,64,0,0,36,37,2,51,223,0,33,150,2,80,144,36,8,48,39, -20,15,16,2,88,148,36,44,8,33,16,4,36,36,37,38,65,99,108,111,111, -112,223,0,33,157,2,80,144,36,8,49,39,20,15,16,2,88,148,36,41,8, -25,16,4,36,8,240,0,192,0,0,36,39,2,16,223,0,33,158,2,80,144, -36,49,37,20,15,16,2,88,148,36,39,55,16,4,44,36,40,36,2,34,223, -0,33,163,2,80,144,36,8,32,37,20,15,16,2,32,0,88,148,36,39,50, -11,2,36,222,33,164,2,80,144,36,8,34,37,20,15,16,2,32,0,88,148, -8,36,41,8,27,11,2,37,222,33,169,2,80,144,36,8,35,37,20,15,16, -2,20,27,143,32,0,88,148,8,36,38,52,11,2,38,222,33,172,2,88,148, -8,100,38,49,16,4,36,36,44,36,2,38,223,0,33,174,2,80,144,36,8, -36,37,20,15,16,2,20,27,143,32,0,88,148,8,36,38,52,11,2,35,222, -33,179,2,88,148,8,100,38,49,16,4,36,36,44,36,2,35,223,0,33,180, -2,80,144,36,8,33,37,20,15,16,2,20,27,143,32,0,88,148,36,37,44, -11,2,39,222,33,181,2,32,0,88,148,36,37,44,11,2,39,222,33,182,2, -80,144,36,8,37,37,20,15,16,2,88,148,8,36,37,55,16,4,52,38,36, -40,2,51,223,0,33,183,2,80,144,36,8,50,39,20,15,16,2,88,148,8, -36,37,55,16,4,52,38,36,44,2,51,223,0,33,184,2,80,144,36,8,51, -39,20,15,16,2,88,148,36,36,53,52,9,223,0,33,185,2,80,144,36,8, -52,39,20,15,16,2,88,148,8,36,37,59,16,4,52,38,36,8,32,2,51, -223,0,33,186,2,80,144,36,8,53,39,20,15,16,2,20,25,96,2,40,88, -148,36,36,57,16,4,8,32,8,140,2,36,40,9,223,0,33,187,2,88,148, -36,37,58,16,4,8,32,8,140,2,36,44,9,223,0,33,188,2,88,148,36, -38,8,30,16,4,8,48,8,139,2,36,8,48,9,223,0,33,189,2,80,144, -36,8,38,37,20,15,16,2,88,148,8,36,37,57,16,4,8,128,6,36,36, -8,64,2,51,223,0,33,190,2,80,144,36,8,54,39,20,15,16,2,88,148, -8,36,39,53,16,4,52,36,36,8,64,2,41,223,0,33,128,3,80,144,36, -8,39,37,95,29,94,2,9,68,35,37,107,101,114,110,101,108,11,29,94,2, -9,69,35,37,109,105,110,45,115,116,120,11,2,19,9,9,9,36,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 19780); +250,22,187,15,248,22,146,16,2,62,250,22,158,2,23,205,1,2,60,247,22, +170,8,2,78,86,94,23,199,1,11,27,248,80,144,46,8,50,39,250,22,94, +9,248,22,90,248,22,146,16,2,56,9,28,193,249,22,80,195,194,192,27,247, +22,153,16,27,248,80,144,39,55,39,247,80,144,39,54,39,249,80,144,40,41, +38,28,23,196,2,27,249,22,174,8,247,22,173,8,2,76,28,192,249,22,164, +8,194,7,63,2,67,2,67,250,80,144,43,59,39,23,198,2,2,77,27,28, +23,200,1,250,22,187,15,248,22,146,16,2,62,250,22,158,2,23,205,1,2, +60,247,22,170,8,2,78,86,94,23,199,1,11,27,248,80,144,46,8,51,39, +250,22,94,23,207,1,248,22,90,248,22,146,16,2,56,9,28,193,249,22,80, +195,194,192,27,247,22,153,16,27,248,80,144,39,55,39,249,80,144,41,52,37, +37,80,144,41,8,52,39,249,80,144,40,41,38,28,23,196,2,27,249,22,174, +8,247,22,173,8,2,76,28,192,249,22,164,8,194,7,63,2,67,2,67,250, +80,144,43,59,39,23,198,2,2,77,27,28,23,200,1,250,22,187,15,248,22, +146,16,2,62,250,22,158,2,23,205,1,2,60,247,22,170,8,2,78,86,94, +23,199,1,11,27,27,250,22,94,23,207,1,248,22,90,248,22,146,16,2,56, +23,208,1,28,248,22,88,23,194,2,9,27,27,248,22,81,23,196,2,28,248, +22,130,16,23,194,2,248,22,133,16,23,194,1,28,248,22,129,16,23,194,2, +90,144,39,11,89,146,39,36,11,248,22,190,15,249,22,131,16,250,80,144,57, +40,39,248,22,146,16,2,57,11,11,248,22,146,16,2,58,86,95,23,195,1, +23,194,1,248,22,133,16,249,22,131,16,23,199,1,23,196,1,27,250,80,144, +52,40,39,248,22,146,16,2,57,23,197,1,10,28,23,193,2,248,22,133,16, +23,194,1,11,28,23,193,2,249,22,80,248,22,133,16,249,22,131,16,23,198, +1,247,22,147,16,27,248,22,82,23,198,1,28,248,22,88,23,194,2,9,27, +248,80,144,52,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22, +133,16,249,22,131,16,23,198,1,247,22,147,16,248,80,144,54,8,53,39,248, +22,82,23,198,1,86,94,23,193,1,248,80,144,52,8,53,39,248,22,82,23, +196,1,86,94,23,193,1,27,248,22,82,23,196,1,28,248,22,88,23,194,2, +9,27,248,80,144,50,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80, +248,22,133,16,249,22,131,16,23,198,1,247,22,147,16,248,80,144,52,8,53, +39,248,22,82,23,198,1,86,94,23,193,1,248,80,144,50,8,53,39,248,22, +82,23,196,1,28,193,249,22,80,195,194,192,27,20,13,144,80,144,37,43,37, +26,9,80,144,46,44,37,249,22,33,11,80,144,48,43,37,22,143,15,10,22, +150,15,10,22,151,15,10,22,152,15,10,248,22,147,6,23,196,2,28,248,22, +147,7,23,194,2,12,86,94,248,22,176,9,23,194,1,27,20,13,144,80,144, +38,43,37,26,9,80,144,47,44,37,249,22,33,11,80,144,49,43,37,22,143, +15,10,22,150,15,10,22,151,15,10,22,152,15,10,248,22,147,6,23,197,2, +28,248,22,147,7,23,194,2,12,86,94,248,22,176,9,23,194,1,27,20,13, +144,80,144,39,43,37,26,9,80,144,48,44,37,249,22,33,11,80,144,50,43, +37,22,143,15,10,22,150,15,10,22,151,15,10,22,152,15,10,248,22,147,6, +23,198,2,28,248,22,147,7,23,194,2,12,86,94,248,22,176,9,23,194,1, +248,80,144,40,8,54,39,197,86,94,249,22,138,7,247,22,171,5,23,196,2, +248,22,162,6,249,22,136,4,36,249,22,184,3,28,23,198,2,23,198,1,86, +94,23,198,1,36,23,199,1,27,248,22,188,5,28,23,198,2,86,95,23,197, +1,23,196,1,23,198,1,86,94,23,198,1,27,250,80,144,42,40,39,248,22, +146,16,2,57,11,11,27,248,22,139,4,23,199,1,27,28,23,194,2,23,194, +1,86,94,23,194,1,36,27,248,22,139,4,23,202,1,249,22,139,6,23,198, +1,20,20,95,88,148,8,36,36,48,11,9,224,3,2,33,191,2,23,195,1, +23,196,1,248,80,144,38,8,54,39,193,144,36,20,114,144,36,16,1,11,16, +0,20,26,15,53,9,2,1,2,1,29,11,11,11,11,9,9,11,11,11,10, +43,80,143,36,36,20,114,144,51,16,40,2,2,2,3,2,4,2,5,2,6, +2,7,2,8,30,2,11,1,20,112,97,114,97,109,101,116,101,114,105,122,97, +116,105,111,110,45,107,101,121,11,6,30,2,11,1,23,101,120,116,101,110,100, +45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,11,4,2,12, +2,13,2,14,2,15,2,16,2,17,2,18,30,2,19,79,99,97,99,104,101, +45,99,111,110,102,105,103,117,114,97,116,105,111,110,11,1,2,20,2,21,2, +22,2,23,2,24,2,25,2,26,2,27,2,28,2,29,2,30,30,2,19,1, +21,101,120,99,101,112,116,105,111,110,45,104,97,110,100,108,101,114,45,107,101, +121,11,3,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39, +2,40,2,41,16,0,37,39,36,16,0,36,16,19,2,13,2,14,2,12,2, +26,2,3,2,36,2,24,2,25,2,20,2,30,2,34,2,22,2,23,2,32, +2,28,2,31,2,33,2,37,2,29,55,11,11,11,16,17,2,8,2,17,2, +15,2,41,2,16,2,6,2,27,2,40,2,18,2,21,2,39,2,4,2,35, +2,7,2,38,2,2,2,5,16,17,11,11,11,11,11,11,11,11,11,11,11, +11,11,11,11,11,11,16,17,2,8,2,17,2,15,2,41,2,16,2,6,2, +27,2,40,2,18,2,21,2,39,2,4,2,35,2,7,2,38,2,2,2,5, +53,53,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,51,20,15,16,2,32,0,88,148,8,36,37,45,11,2, +2,222,33,79,80,144,36,36,37,20,15,16,2,249,22,154,7,7,92,7,92, +80,144,36,37,37,20,15,16,2,88,148,8,36,37,54,38,2,4,223,0,33, +84,80,144,36,38,37,20,15,16,2,88,148,8,36,38,58,38,2,5,223,0, +33,86,80,144,36,39,37,20,15,16,2,20,25,96,2,6,88,148,8,36,39, +8,24,8,32,9,223,0,33,93,88,148,8,36,38,47,52,9,223,0,33,94, +88,148,8,36,37,46,52,9,223,0,33,95,80,144,36,40,37,20,15,16,2, +27,248,22,157,16,248,22,166,8,27,28,249,22,168,9,247,22,179,8,2,44, +6,1,1,59,6,1,1,58,250,22,136,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,148,8,36,38,48,11, +2,7,223,0,33,99,80,144,36,41,37,20,15,16,2,88,148,36,37,8,38, +8,128,6,2,8,223,0,33,100,80,144,36,42,37,20,15,16,2,32,0,88, +148,8,36,38,47,11,2,12,222,33,101,80,144,36,45,37,20,15,16,2,32, +0,88,148,8,36,39,48,11,2,13,222,33,103,80,144,36,46,37,20,15,16, +2,32,0,88,148,8,36,38,46,11,2,14,222,33,104,80,144,36,47,37,20, +15,16,2,88,148,36,39,50,8,128,128,2,15,223,0,33,106,80,144,36,48, +37,20,15,16,2,88,148,36,41,52,8,128,128,2,17,223,0,33,108,80,144, +36,50,37,20,15,16,2,88,148,36,36,53,52,9,223,0,33,109,80,144,36, +8,40,39,20,15,16,2,88,148,36,36,44,16,4,36,37,8,128,4,36,2, +18,223,0,33,110,80,144,36,51,37,20,15,16,2,88,148,36,36,53,52,9, +223,0,33,111,80,144,36,8,41,39,20,15,16,2,88,148,36,36,44,16,4, +36,37,8,128,8,36,2,21,223,0,33,112,80,144,36,54,37,20,15,16,2, +88,148,8,36,36,8,38,8,128,6,9,223,0,33,113,80,144,36,8,42,39, +20,15,16,2,88,148,8,36,37,47,16,4,36,36,8,128,16,36,2,22,223, +0,33,114,80,144,36,55,37,20,15,16,2,20,27,143,32,0,88,148,36,37, +45,11,2,23,222,33,115,32,0,88,148,36,37,45,11,2,23,222,33,116,80, +144,36,56,37,20,15,16,2,88,148,8,36,37,47,8,240,0,128,0,0,2, +24,223,0,33,117,80,144,36,57,37,20,15,16,2,88,148,36,36,53,52,9, +223,0,33,118,80,144,36,8,43,39,20,15,16,2,88,148,8,36,37,48,16, +4,36,37,8,128,32,36,2,25,223,0,33,119,80,144,36,58,37,20,15,16, +2,88,148,36,37,53,52,2,20,223,0,33,120,80,144,36,53,37,20,15,16, +2,88,148,8,36,38,55,16,4,8,240,0,128,0,0,8,32,8,128,64,36, +2,51,223,0,33,121,80,144,36,8,44,39,20,15,16,2,88,148,8,36,39, +49,16,4,36,36,8,128,64,36,2,26,223,0,33,122,80,144,36,59,37,20, +15,16,2,88,148,36,36,53,52,9,223,0,33,123,80,144,36,8,45,39,20, +15,16,2,88,148,8,36,36,54,16,4,8,240,0,128,0,0,8,137,2,8, +128,128,36,2,27,223,0,33,124,80,144,36,8,24,37,20,15,16,2,247,22, +140,2,80,144,36,8,25,37,20,15,16,2,248,22,18,65,115,116,97,109,112, +80,144,36,8,26,37,20,15,16,2,88,148,36,37,46,8,240,0,0,0,4, +9,223,0,33,126,80,144,36,8,46,39,20,15,16,2,88,148,36,38,48,16, +4,36,8,128,80,8,240,0,64,0,0,36,2,30,223,0,33,134,2,80,144, +36,8,27,37,20,15,16,2,32,0,88,148,8,36,37,45,11,2,31,222,33, +135,2,80,144,36,8,29,37,20,15,16,2,88,148,8,36,39,45,8,240,0, +0,0,2,72,109,97,107,101,45,104,97,110,100,108,101,114,223,0,33,137,2, +80,144,36,8,47,39,20,15,16,2,88,148,36,37,44,16,4,8,128,6,8, +128,104,8,240,0,128,0,0,36,2,32,223,0,33,147,2,80,144,36,8,30, +37,20,15,16,2,88,148,36,38,56,16,2,36,8,240,0,128,0,0,2,33, +223,0,33,149,2,80,144,36,8,31,37,20,15,16,2,88,148,8,36,38,58, +16,4,36,8,240,0,64,0,0,36,37,2,51,223,0,33,150,2,80,144,36, +8,48,39,20,15,16,2,88,148,36,44,8,33,16,4,36,36,37,38,65,99, +108,111,111,112,223,0,33,157,2,80,144,36,8,49,39,20,15,16,2,88,148, +36,41,8,25,16,4,36,8,240,0,192,0,0,36,39,2,16,223,0,33,158, +2,80,144,36,49,37,20,15,16,2,88,148,36,39,55,16,4,44,36,40,36, +2,34,223,0,33,163,2,80,144,36,8,32,37,20,15,16,2,32,0,88,148, +36,39,50,11,2,36,222,33,164,2,80,144,36,8,34,37,20,15,16,2,32, +0,88,148,8,36,41,8,27,11,2,37,222,33,169,2,80,144,36,8,35,37, +20,15,16,2,20,27,143,32,0,88,148,8,36,38,52,11,2,38,222,33,172, +2,88,148,8,100,38,49,16,4,36,36,44,36,2,38,223,0,33,174,2,80, +144,36,8,36,37,20,15,16,2,20,27,143,32,0,88,148,8,36,38,52,11, +2,35,222,33,179,2,88,148,8,100,38,49,16,4,36,36,44,36,2,35,223, +0,33,180,2,80,144,36,8,33,37,20,15,16,2,20,27,143,32,0,88,148, +36,37,44,11,2,39,222,33,181,2,32,0,88,148,36,37,44,11,2,39,222, +33,182,2,80,144,36,8,37,37,20,15,16,2,88,148,8,36,37,55,16,4, +52,38,36,40,2,51,223,0,33,183,2,80,144,36,8,50,39,20,15,16,2, +88,148,8,36,37,55,16,4,52,38,36,44,2,51,223,0,33,184,2,80,144, +36,8,51,39,20,15,16,2,88,148,36,36,53,52,9,223,0,33,185,2,80, +144,36,8,52,39,20,15,16,2,88,148,8,36,37,59,16,4,52,38,36,8, +32,2,51,223,0,33,186,2,80,144,36,8,53,39,20,15,16,2,20,25,96, +2,40,88,148,36,36,57,16,4,8,32,8,140,2,36,40,9,223,0,33,187, +2,88,148,36,37,58,16,4,8,32,8,140,2,36,44,9,223,0,33,188,2, +88,148,36,38,8,30,16,4,8,48,8,139,2,36,8,48,9,223,0,33,189, +2,80,144,36,8,38,37,20,15,16,2,88,148,8,36,37,57,16,4,8,128, +6,36,36,8,64,2,51,223,0,33,190,2,80,144,36,8,54,39,20,15,16, +2,88,148,8,36,39,53,16,4,52,36,36,8,64,2,41,223,0,33,128,3, +80,144,36,8,39,37,95,29,94,2,9,68,35,37,107,101,114,110,101,108,11, +29,94,2,9,69,35,37,109,105,110,45,115,116,120,11,2,19,9,9,9,36, +9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 19720); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,49,46,48,46,50,84,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,49,46,48,46,51,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,231,1,0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99, @@ -1075,7 +1073,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 557); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,49,46,48,46,50,84,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,49,46,48,46,51,84,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,102,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,118,1, @@ -1085,8 +1083,8 @@ 11,218,11,234,11,248,11,8,12,83,12,99,12,115,12,131,12,206,12,113,13, 129,13,204,13,199,14,79,15,154,15,61,16,74,16,227,16,155,17,198,17,24, 18,152,18,213,18,221,18,232,18,10,20,113,20,141,20,154,20,75,21,82,21, -242,21,6,22,106,22,128,22,138,22,152,22,189,22,32,23,36,23,43,23,248, -23,141,32,194,32,218,32,242,32,0,0,13,37,0,0,66,35,37,98,111,111, +242,21,6,22,106,22,128,22,138,22,152,22,189,22,32,23,36,23,43,23,249, +23,145,32,198,32,222,32,246,32,0,0,17,37,0,0,66,35,37,98,111,111, 116,70,100,108,108,45,115,117,102,102,105,120,1,25,100,101,102,97,117,108,116, 45,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,65,113,117, 111,116,101,68,35,37,112,97,114,97,109,122,29,94,2,4,2,5,11,1,20, @@ -1111,66 +1109,66 @@ 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,27,252,22,186,15,28,249,22,168,9,23,201,2, -2,29,86,94,23,199,1,23,201,1,28,248,22,191,15,23,200,2,249,22,186, +67,105,103,110,111,114,101,100,27,252,22,187,15,28,249,22,168,9,23,201,2, +2,29,86,94,23,199,1,23,201,1,28,248,22,128,16,23,200,2,249,22,187, 15,23,203,1,23,201,1,249,80,144,47,42,39,23,203,1,23,201,1,23,203, 1,2,30,247,22,180,8,249,80,144,47,43,39,23,202,1,80,144,47,36,38, -27,250,22,140,16,196,11,32,0,88,148,8,36,36,41,11,9,222,11,28,192, +27,250,22,141,16,196,11,32,0,88,148,8,36,36,41,11,9,222,11,28,192, 249,22,80,195,194,11,249,22,5,20,20,96,88,148,8,36,37,54,8,129,3, 9,226,5,3,2,6,33,44,23,199,1,23,195,1,23,196,1,23,197,1,27, -252,22,186,15,28,249,22,168,9,23,201,2,2,29,86,94,23,199,1,23,201, -1,28,248,22,191,15,23,200,2,249,22,186,15,23,203,1,23,201,1,249,80, +252,22,187,15,28,249,22,168,9,23,201,2,2,29,86,94,23,199,1,23,201, +1,28,248,22,128,16,23,200,2,249,22,187,15,23,203,1,23,201,1,249,80, 144,47,42,39,23,203,1,23,201,1,23,203,1,2,30,247,22,180,8,249,80, -144,47,43,39,23,202,1,80,144,47,36,38,27,250,22,140,16,196,11,32,0, +144,47,43,39,23,202,1,80,144,47,36,38,27,250,22,141,16,196,11,32,0, 88,148,8,36,36,41,11,9,222,11,28,192,249,22,80,195,194,11,249,22,5, 20,20,96,88,148,8,36,37,54,8,129,3,9,226,5,3,2,6,33,46,23, -199,1,23,195,1,23,196,1,23,197,1,27,250,22,186,15,28,249,22,168,9, -23,199,2,2,29,86,94,23,197,1,23,199,1,28,248,22,191,15,23,198,2, -249,22,186,15,23,201,1,23,199,1,249,80,144,45,42,39,23,201,1,23,199, -1,23,201,1,249,80,144,45,43,39,23,200,1,2,31,27,250,22,140,16,196, +199,1,23,195,1,23,196,1,23,197,1,27,250,22,187,15,28,249,22,168,9, +23,199,2,2,29,86,94,23,197,1,23,199,1,28,248,22,128,16,23,198,2, +249,22,187,15,23,201,1,23,199,1,249,80,144,45,42,39,23,201,1,23,199, +1,23,201,1,249,80,144,45,43,39,23,200,1,2,31,27,250,22,141,16,196, 11,32,0,88,148,8,36,36,41,11,9,222,11,28,192,249,22,80,195,194,11, 249,22,5,20,20,96,88,148,8,36,37,52,8,128,3,9,226,5,3,2,6, -33,48,23,199,1,23,195,1,23,196,1,23,197,1,27,250,22,186,15,28,249, -22,168,9,23,199,2,2,29,86,94,23,197,1,23,199,1,28,248,22,191,15, -23,198,2,249,22,186,15,23,201,1,23,199,1,249,80,144,45,42,39,23,201, +33,48,23,199,1,23,195,1,23,196,1,23,197,1,27,250,22,187,15,28,249, +22,168,9,23,199,2,2,29,86,94,23,197,1,23,199,1,28,248,22,128,16, +23,198,2,249,22,187,15,23,201,1,23,199,1,249,80,144,45,42,39,23,201, 1,23,199,1,23,201,1,249,80,144,45,43,39,23,200,1,2,31,27,250,22, -140,16,196,11,32,0,88,148,8,36,36,41,11,9,222,11,28,192,249,22,80, +141,16,196,11,32,0,88,148,8,36,36,41,11,9,222,11,28,192,249,22,80, 195,194,11,249,22,5,20,20,96,88,148,8,36,37,52,8,128,3,9,226,5, 3,2,6,33,50,23,199,1,23,195,1,23,196,1,23,197,1,86,95,28,248, -80,144,37,40,39,23,195,2,12,250,22,177,11,2,27,6,12,12,112,97,116, +80,144,37,40,39,23,195,2,12,250,22,178,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,89,23,196,2,28,249,22,130,4,248,22,93,23,198, -2,37,28,28,248,22,64,248,22,81,23,197,2,10,248,22,166,9,248,22,153, -20,23,197,2,249,22,4,22,64,248,22,154,20,23,198,2,11,11,11,10,12, -250,22,177,11,2,27,6,71,71,40,111,114,47,99,32,35,102,32,115,121,109, +2,37,28,28,248,22,64,248,22,81,23,197,2,10,248,22,166,9,248,22,154, +20,23,197,2,249,22,4,22,64,248,22,155,20,23,198,2,11,11,11,10,12, +250,22,178,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,190,4,11,27,28,23,194,2,250,22,158,2,80,143,41, -41,248,22,185,16,247,22,138,14,11,11,27,28,23,194,2,250,22,158,2,248, +41,248,22,186,16,247,22,139,14,11,11,27,28,23,194,2,250,22,158,2,248, 22,82,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,144,80,144,39,38,37,250,80,144,42,39,37,249,22,33, 11,80,144,44,38,37,22,191,4,248,22,102,23,197,2,27,248,22,111,23,195, 2,20,13,144,80,144,40,38,37,250,80,144,43,39,37,249,22,33,11,80,144, -45,38,37,22,176,5,28,248,22,168,15,23,197,2,23,196,1,86,94,23,196, -1,247,22,146,16,249,247,22,174,5,248,22,81,23,197,1,23,201,1,86,94, -23,193,1,90,144,47,11,89,146,37,36,11,28,248,22,129,16,23,209,2,23, -208,2,27,247,22,176,5,28,192,249,22,130,16,23,211,2,194,23,209,2,89, -146,39,37,11,248,22,189,15,23,209,1,86,94,23,196,1,89,146,38,40,11, -28,23,209,2,27,248,22,173,15,23,197,2,19,248,22,146,8,194,28,28,249, +45,38,37,22,176,5,28,248,22,169,15,23,197,2,23,196,1,86,94,23,196, +1,247,22,147,16,249,247,22,174,5,248,22,81,23,197,1,23,201,1,86,94, +23,193,1,90,144,47,11,89,146,37,36,11,28,248,22,130,16,23,209,2,23, +208,2,27,247,22,176,5,28,192,249,22,131,16,23,211,2,194,23,209,2,89, +146,39,37,11,248,22,190,15,23,209,1,86,94,23,196,1,89,146,38,40,11, +28,23,209,2,27,248,22,174,15,23,197,2,19,248,22,146,8,194,28,28,249, 22,132,4,23,195,4,40,249,22,149,8,2,28,249,22,152,8,197,249,22,184, -3,23,199,4,40,11,249,22,7,23,199,2,248,22,177,15,249,22,153,8,250, +3,23,199,4,40,11,249,22,7,23,199,2,248,22,178,15,249,22,153,8,250, 22,152,8,201,36,249,22,184,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,146,37,42,11,28,249,22,168, -9,23,199,2,23,197,2,23,193,2,249,22,186,15,23,196,2,23,199,2,89, +9,23,199,2,23,197,2,23,193,2,249,22,187,15,23,196,2,23,199,2,89, 146,37,43,11,28,23,198,2,28,249,22,168,9,23,200,2,23,197,1,23,193, -1,86,94,23,193,1,249,22,186,15,23,196,2,23,200,2,86,94,23,195,1, +1,86,94,23,193,1,249,22,187,15,23,196,2,23,200,2,86,94,23,195,1, 11,89,146,37,44,11,28,249,22,168,9,23,196,2,68,114,101,108,97,116,105, -118,101,86,94,23,194,1,2,29,23,194,1,89,146,37,45,11,247,22,150,16, -89,146,37,46,11,247,22,151,16,27,250,22,140,16,23,203,2,11,32,0,88, +118,101,86,94,23,194,1,2,29,23,194,1,89,146,37,45,11,247,22,151,16, +89,146,37,46,11,247,22,152,16,27,250,22,141,16,23,203,2,11,32,0,88, 148,8,36,36,41,11,9,222,11,27,28,23,194,2,249,22,80,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, -140,16,23,207,2,11,32,0,88,148,8,36,36,41,11,9,222,11,28,192,249, +141,16,23,207,2,11,32,0,88,148,8,36,36,41,11,9,222,11,28,192,249, 22,80,23,206,2,194,11,11,27,28,23,195,2,23,195,2,23,194,2,27,28, 23,196,2,23,196,2,248,22,166,9,23,196,2,27,28,23,204,2,28,23,196, 2,86,94,23,197,1,23,196,2,248,22,166,9,23,198,1,11,27,28,23,195, @@ -1181,8 +1179,8 @@ 23,205,1,23,204,1,23,197,1,23,196,1,23,195,1,23,194,1,20,13,144, 80,144,57,38,37,250,80,144,8,24,39,37,249,22,33,11,80,144,8,26,38, 37,22,191,4,11,20,13,144,80,144,57,38,37,250,80,144,8,24,39,37,249, -22,33,11,80,144,8,26,38,37,22,176,5,28,248,22,168,15,23,212,2,23, -211,1,86,94,23,211,1,247,22,146,16,249,247,22,155,16,248,22,81,23,196, +22,33,11,80,144,8,26,38,37,22,176,5,28,248,22,169,15,23,212,2,23, +211,1,86,94,23,211,1,247,22,147,16,249,247,22,156,16,248,22,81,23,196, 1,23,218,1,86,94,23,193,1,27,28,23,195,2,27,249,22,5,88,148,36, 37,48,8,129,3,9,226,25,20,19,16,33,47,23,214,2,27,28,23,200,2, 11,193,28,192,192,28,193,28,199,28,249,22,132,4,248,22,82,196,248,22,82, @@ -1190,8 +1188,8 @@ 23,210,1,23,207,1,23,206,1,23,205,1,23,197,1,23,196,1,23,195,1, 20,13,144,80,144,58,38,37,250,80,144,8,25,39,37,249,22,33,11,80,144, 8,27,38,37,22,191,4,23,211,1,20,13,144,80,144,58,38,37,250,80,144, -8,25,39,37,249,22,33,11,80,144,8,27,38,37,22,176,5,28,248,22,168, -15,23,213,2,23,212,1,86,94,23,212,1,247,22,146,16,249,247,22,155,16, +8,25,39,37,249,22,33,11,80,144,8,27,38,37,22,176,5,28,248,22,169, +15,23,213,2,23,212,1,86,94,23,212,1,247,22,147,16,249,247,22,156,16, 248,22,81,23,196,1,23,219,1,86,94,23,193,1,27,28,23,197,2,27,249, 22,5,20,20,94,88,148,36,37,48,8,128,3,9,226,26,21,20,16,33,49, 23,209,1,23,215,2,27,28,23,200,2,11,193,28,192,192,28,193,28,23,200, @@ -1202,8 +1200,8 @@ 90,23,199,1,11,23,217,2,12,20,13,144,80,144,59,38,37,250,80,144,8, 26,39,37,249,22,33,11,80,144,8,28,38,37,22,191,4,11,20,13,144,80, 144,59,38,37,250,80,144,8,26,39,37,249,22,33,11,80,144,8,28,38,37, -22,176,5,28,248,22,168,15,23,214,2,23,213,1,86,94,23,213,1,247,22, -146,16,249,247,22,174,5,248,22,153,20,23,196,1,23,220,1,86,94,23,193, +22,176,5,28,248,22,169,15,23,214,2,23,213,1,86,94,23,213,1,247,22, +147,16,249,247,22,174,5,248,22,154,20,23,196,1,23,220,1,86,94,23,193, 1,27,28,23,197,1,27,249,22,5,20,20,95,88,148,36,37,48,8,128,3, 9,226,27,22,21,18,33,51,23,211,1,23,215,1,23,216,1,27,28,23,201, 2,11,193,28,192,192,28,193,28,200,28,249,22,132,4,248,22,82,196,248,22, @@ -1213,16 +1211,16 @@ 217,2,23,218,2,12,20,13,144,80,144,8,24,38,37,250,80,144,8,27,39, 37,249,22,33,11,80,144,8,29,38,37,22,191,4,23,213,1,20,13,144,80, 144,8,24,38,37,250,80,144,8,27,39,37,249,22,33,11,80,144,8,29,38, -37,22,176,5,28,248,22,168,15,23,215,2,23,214,1,86,94,23,214,1,247, -22,146,16,249,247,22,174,5,248,22,153,20,23,196,1,23,221,1,86,94,23, -193,1,28,28,248,22,78,23,220,2,248,22,153,20,23,220,2,10,27,28,23, +37,22,176,5,28,248,22,169,15,23,215,2,23,214,1,86,94,23,214,1,247, +22,147,16,249,247,22,174,5,248,22,154,20,23,196,1,23,221,1,86,94,23, +193,1,28,28,248,22,78,23,220,2,248,22,154,20,23,220,2,10,27,28,23, 199,2,86,94,23,211,1,23,210,1,86,94,23,210,1,23,211,1,28,28,248, -22,78,23,221,2,248,22,166,9,248,22,180,15,23,195,2,11,12,20,13,144, +22,78,23,221,2,248,22,166,9,248,22,181,15,23,195,2,11,12,20,13,144, 80,144,8,25,38,37,250,80,144,8,28,39,37,249,22,33,11,80,144,8,30, 38,37,22,191,4,28,23,223,2,28,23,202,1,11,23,196,2,86,94,23,202, 1,11,20,13,144,80,144,8,25,38,37,250,80,144,8,28,39,37,249,22,33, -11,80,144,8,30,38,37,22,176,5,28,248,22,168,15,23,216,2,23,215,1, -86,94,23,215,1,247,22,146,16,249,247,22,174,5,23,195,1,23,222,1,12, +11,80,144,8,30,38,37,22,176,5,28,248,22,169,15,23,216,2,23,215,1, +86,94,23,215,1,247,22,147,16,249,247,22,174,5,23,195,1,23,222,1,12, 28,23,194,2,250,22,156,2,248,22,82,23,198,1,23,196,1,250,22,90,23, 201,1,23,202,1,23,203,1,12,27,249,22,188,8,80,144,39,47,38,249,22, 191,3,248,22,187,3,248,22,173,2,200,8,128,8,27,28,193,248,22,176,2, @@ -1286,22 +1284,22 @@ 200,2,36,23,198,2,248,2,58,249,22,174,7,23,200,1,248,22,181,3,23, 199,1,250,2,56,23,197,4,197,248,22,181,3,196,32,72,88,148,36,37,55, 11,2,33,222,33,73,28,248,22,88,248,22,82,23,195,2,249,22,7,9,248, -22,153,20,23,196,1,90,144,38,11,89,146,38,36,11,27,248,22,154,20,23, -197,2,28,248,22,88,248,22,82,23,195,2,249,22,7,9,248,22,153,20,195, -90,144,38,11,89,146,38,36,11,27,248,22,154,20,196,28,248,22,88,248,22, -82,23,195,2,249,22,7,9,248,22,153,20,195,90,144,38,11,89,146,38,36, -11,248,2,72,248,22,154,20,196,249,22,7,249,22,80,248,22,153,20,199,196, -195,249,22,7,249,22,80,248,22,153,20,199,196,195,249,22,7,249,22,80,248, -22,153,20,23,200,1,23,197,1,23,196,1,27,19,248,22,155,7,23,196,2, +22,154,20,23,196,1,90,144,38,11,89,146,38,36,11,27,248,22,155,20,23, +197,2,28,248,22,88,248,22,82,23,195,2,249,22,7,9,248,22,154,20,195, +90,144,38,11,89,146,38,36,11,27,248,22,155,20,196,28,248,22,88,248,22, +82,23,195,2,249,22,7,9,248,22,154,20,195,90,144,38,11,89,146,38,36, +11,248,2,72,248,22,155,20,196,249,22,7,249,22,80,248,22,154,20,199,196, +195,249,22,7,249,22,80,248,22,154,20,199,196,195,249,22,7,249,22,80,248, +22,154,20,23,200,1,23,197,1,23,196,1,27,19,248,22,155,7,23,196,2, 250,2,56,23,196,4,23,198,1,36,2,28,23,195,1,192,28,248,22,88,248, -22,82,23,195,2,249,22,7,9,248,22,153,20,23,196,1,27,248,22,154,20, +22,82,23,195,2,249,22,7,9,248,22,154,20,23,196,1,27,248,22,155,20, 23,195,2,90,144,38,11,89,146,38,36,11,28,248,22,88,248,22,82,23,197, -2,249,22,7,9,248,22,153,20,23,198,1,27,248,22,154,20,23,197,2,90, +2,249,22,7,9,248,22,154,20,23,198,1,27,248,22,155,20,23,197,2,90, 144,38,11,89,146,38,36,11,28,248,22,88,248,22,82,23,197,2,249,22,7, -9,248,22,153,20,197,90,144,38,11,89,146,38,36,11,248,2,72,248,22,154, -20,198,249,22,7,249,22,80,248,22,153,20,201,196,195,249,22,7,249,22,80, -248,22,153,20,23,203,1,196,195,249,22,7,249,22,80,248,22,153,20,23,201, -1,23,197,1,23,196,1,248,22,137,12,252,22,160,10,248,22,163,4,23,200, +9,248,22,154,20,197,90,144,38,11,89,146,38,36,11,248,2,72,248,22,155, +20,198,249,22,7,249,22,80,248,22,154,20,201,196,195,249,22,7,249,22,80, +248,22,154,20,23,203,1,196,195,249,22,7,249,22,80,248,22,154,20,23,201, +1,23,197,1,23,196,1,248,22,138,12,252,22,160,10,248,22,163,4,23,200, 2,248,22,159,4,23,200,2,248,22,160,4,23,200,2,248,22,161,4,23,200, 2,248,22,162,4,23,200,1,28,24,194,2,12,20,13,144,80,144,36,58,37, 80,143,36,56,89,146,37,37,10,249,22,129,5,21,94,2,34,6,19,19,112, @@ -1309,29 +1307,29 @@ 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,168,9,23,197,2,80,143, 39,52,86,94,23,195,1,80,143,37,53,27,248,22,152,5,23,197,2,27,28, -248,22,78,23,195,2,248,22,153,20,23,195,1,23,194,1,28,248,22,168,15, -23,194,2,90,144,39,11,89,146,39,36,11,248,22,189,15,23,197,1,86,95, +248,22,78,23,195,2,248,22,154,20,23,195,1,23,194,1,28,248,22,169,15, +23,194,2,90,144,39,11,89,146,39,36,11,248,22,190,15,23,197,1,86,95, 20,18,144,11,80,143,42,52,199,20,18,144,11,80,143,42,53,192,192,11,11, 28,23,193,2,192,86,94,23,193,1,27,247,22,176,5,28,23,193,2,192,86, -94,23,193,1,247,22,146,16,90,144,39,11,89,146,39,36,11,248,22,189,15, -23,198,2,86,95,23,195,1,23,193,1,28,249,22,160,16,0,11,35,114,120, -34,91,46,93,115,115,36,34,248,22,173,15,23,197,1,249,80,144,41,59,39, +94,23,193,1,247,22,147,16,90,144,39,11,89,146,39,36,11,248,22,190,15, +23,198,2,86,95,23,195,1,23,193,1,28,249,22,161,16,0,11,35,114,120, +34,91,46,93,115,115,36,34,248,22,174,15,23,197,1,249,80,144,41,59,39, 23,199,1,2,28,196,249,80,144,38,54,39,195,10,249,22,14,23,196,1,80, -144,38,51,38,86,96,28,248,22,150,5,23,196,2,12,250,22,177,11,2,23, +144,38,51,38,86,96,28,248,22,150,5,23,196,2,12,250,22,178,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,139,14,23,197,2,10,12,250, -22,177,11,2,23,6,20,20,40,111,114,47,99,32,35,102,32,110,97,109,101, +116,104,63,23,198,2,28,28,23,196,2,248,22,140,14,23,197,2,10,12,250, +22,178,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,158,2,80,144,41,41,38,248,22,185,16,247, -22,138,14,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249,22,80, +86,94,23,193,1,12,27,250,22,158,2,80,144,41,41,38,248,22,186,16,247, +22,139,14,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249,22,80, 247,22,138,2,247,22,138,2,86,94,250,22,156,2,80,144,43,41,38,248,22, -185,16,247,22,138,14,195,192,86,94,250,22,156,2,248,22,81,23,197,2,23, +186,16,247,22,139,14,195,192,86,94,250,22,156,2,248,22,81,23,197,2,23, 200,2,68,100,101,99,108,97,114,101,100,28,23,198,2,27,28,248,22,78,248, 22,152,5,23,200,2,248,22,151,5,248,22,81,248,22,152,5,23,201,1,23, -198,1,27,250,22,158,2,80,144,44,41,38,248,22,185,16,23,204,1,11,28, +198,1,27,250,22,158,2,80,144,44,41,38,248,22,186,16,23,204,1,11,28, 23,193,2,27,250,22,158,2,248,22,82,23,198,1,23,198,2,11,28,23,193, -2,250,22,156,2,248,22,154,20,23,200,1,23,198,1,23,196,1,12,12,12, -86,94,251,22,132,12,247,22,136,12,65,101,114,114,111,114,6,69,69,100,101, +2,250,22,156,2,248,22,155,20,23,200,1,23,198,1,23,196,1,12,12,12, +86,94,251,22,133,12,247,22,137,12,65,101,114,114,111,114,6,69,69,100,101, 102,97,117,108,116,32,109,111,100,117,108,101,32,110,97,109,101,32,114,101,115, 111,108,118,101,114,32,99,97,108,108,101,100,32,119,105,116,104,32,116,104,114, 101,101,32,97,114,103,117,109,101,110,116,115,32,40,100,101,112,114,101,99,97, @@ -1340,20 +1338,20 @@ 116,104,222,33,86,32,84,88,148,36,40,54,11,2,33,222,33,85,28,248,22, 88,23,197,2,28,248,22,88,195,192,249,22,80,194,248,22,95,197,28,249,22, 170,9,248,22,81,23,199,2,2,37,28,248,22,88,23,196,2,86,95,23,196, -1,23,195,1,250,22,173,11,2,23,6,37,37,116,111,111,32,109,97,110,121, +1,23,195,1,250,22,174,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,91,2,36,28,249,22,170,9,23,201,2, -2,38,23,199,1,28,248,22,168,15,23,200,2,23,199,1,249,22,90,28,248, +2,38,23,199,1,28,248,22,169,15,23,200,2,23,199,1,249,22,90,28,248, 22,64,23,202,2,2,4,2,39,23,201,1,23,200,1,251,2,84,196,197,248, -22,82,199,248,22,154,20,200,251,2,84,196,197,249,22,80,248,22,153,20,202, -200,248,22,154,20,200,251,2,84,196,197,9,197,27,250,22,175,7,27,28,23, -199,2,28,247,22,190,11,248,80,144,44,55,39,23,200,2,11,11,28,192,192, +22,82,199,248,22,155,20,200,251,2,84,196,197,249,22,80,248,22,154,20,202, +200,248,22,155,20,200,251,2,84,196,197,9,197,27,250,22,175,7,27,28,23, +199,2,28,247,22,191,11,248,80,144,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,171,16,0, +109,101,45,114,101,115,111,108,118,101,114,6,2,2,58,32,250,22,172,16,0, 7,35,114,120,34,92,110,34,23,203,1,249,22,136,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,167,13,28,23,196,2,251,22,175,12,23,198,1,247,22,29,248, -22,90,23,201,1,23,199,1,86,94,23,196,1,250,22,138,13,23,197,1,247, +202,2,248,22,168,13,28,23,196,2,251,22,176,12,23,198,1,247,22,29,248, +22,90,23,201,1,23,199,1,86,94,23,196,1,250,22,139,13,23,197,1,247, 22,29,23,198,1,32,88,88,148,8,36,37,50,11,67,115,115,45,62,114,107, 116,222,33,89,19,248,22,155,7,194,28,249,22,132,4,23,195,4,39,28,249, 22,168,9,7,46,249,22,156,7,197,249,22,184,3,23,199,4,39,28,28,249, @@ -1363,9 +1361,9 @@ 249,22,158,7,194,2,38,2,29,28,249,22,158,7,194,2,37,62,117,112,192, 0,8,35,114,120,34,91,46,93,34,32,92,88,148,8,36,37,47,11,2,33, 222,33,93,28,248,22,88,23,194,2,9,250,22,91,6,4,4,10,32,32,32, -248,22,172,15,248,22,103,23,198,2,248,2,92,248,22,82,23,198,1,28,249, -22,170,9,248,22,82,23,200,2,23,197,1,28,249,22,168,9,248,22,153,20, -23,200,1,23,196,1,251,22,173,11,2,23,6,41,41,99,121,99,108,101,32, +248,22,173,15,248,22,103,23,198,2,248,2,92,248,22,82,23,198,1,28,249, +22,170,9,248,22,82,23,200,2,23,197,1,28,249,22,168,9,248,22,154,20, +23,200,1,23,196,1,251,22,174,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, 175,7,248,2,92,248,22,95,23,201,1,12,12,247,23,193,1,250,22,157,4, @@ -1374,175 +1372,175 @@ 33,11,80,144,53,38,37,22,190,4,23,201,2,22,128,5,248,28,23,208,2, 20,20,94,88,148,8,36,37,46,11,9,223,15,33,96,23,208,1,86,94,23, 208,1,22,7,28,248,22,64,23,207,2,23,206,1,28,28,248,22,78,23,207, -2,249,22,168,9,248,22,153,20,23,209,2,2,34,11,23,206,1,86,94,23, +2,249,22,168,9,248,22,154,20,23,209,2,2,34,11,23,206,1,86,94,23, 206,1,28,248,22,150,5,23,203,2,27,248,22,152,5,23,204,2,28,248,22, 64,193,249,22,90,2,4,194,192,23,202,2,249,247,22,175,5,23,201,1,27, -248,22,68,248,22,172,15,23,202,1,28,23,204,2,28,250,22,158,2,248,22, -81,23,202,1,23,202,1,11,249,22,80,11,205,249,22,80,194,205,192,86,96, -28,248,22,160,5,23,196,2,12,28,248,22,155,4,23,198,2,250,22,175,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,177,11,2,23,2,35,23,198,2,28,28,23,196,2,248,22,150,5, -23,197,2,10,12,250,22,177,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,155,4,23,198,2,10,12,250, -22,177,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,78,23,196,2,249,22,168,9,248,22, -153,20,23,198,2,2,4,11,86,97,23,198,1,23,197,1,23,196,1,23,193, -1,248,22,151,5,248,22,102,23,197,1,28,28,248,22,78,23,196,2,28,249, -22,168,9,248,22,153,20,23,198,2,2,36,28,248,22,78,248,22,102,23,197, -2,249,22,168,9,248,22,106,23,198,2,2,4,11,11,11,86,97,23,198,1, -23,197,1,23,196,1,23,193,1,248,22,151,5,249,2,83,248,22,119,23,199, -2,248,22,104,23,199,1,28,28,248,22,78,23,196,2,28,249,22,168,9,248, -22,153,20,23,198,2,2,36,28,28,249,22,170,9,248,22,102,23,198,2,2, -38,10,249,22,170,9,248,22,102,23,198,2,2,37,28,23,196,2,27,248,22, -152,5,23,198,2,28,248,22,64,193,10,28,248,22,78,193,248,22,64,248,22, -153,20,194,11,11,11,11,11,86,96,23,198,1,23,197,1,23,193,1,27,248, -22,152,5,23,198,1,248,22,151,5,249,2,83,28,248,22,78,23,197,2,248, -22,153,20,23,197,2,23,196,2,27,28,249,22,170,9,248,22,102,23,203,2, -2,37,248,22,154,20,200,248,22,104,200,28,248,22,78,23,198,2,249,22,94, -248,22,154,20,199,194,192,28,28,248,22,78,23,196,2,249,22,168,9,248,22, -153,20,23,198,2,2,40,11,86,94,248,80,144,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,143,43,56,28, -28,248,22,78,23,196,2,28,249,22,168,9,248,22,153,20,23,198,2,2,36, -28,248,22,78,248,22,102,23,197,2,249,22,168,9,248,22,106,23,198,2,2, -40,11,11,11,86,94,248,80,144,38,8,29,39,23,194,2,253,24,199,1,248, -22,102,23,202,2,23,202,1,23,203,1,23,204,1,248,22,104,23,202,1,80, -143,43,56,86,94,23,193,1,27,88,148,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,87,27,28,248,22,78,23,198,2,28,249,22,168,9,2,36,248, -22,153,20,23,200,2,27,248,22,102,23,199,2,28,28,249,22,170,9,23,195, -2,2,38,10,249,22,170,9,23,195,2,2,37,86,94,23,193,1,28,23,199, -2,27,248,22,152,5,23,201,2,28,248,22,78,193,248,22,153,20,193,192,250, -22,173,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,78,23,199,2,28,249,22,168,9,2,36,248,22,153,20,23,201, -2,27,28,28,28,249,22,170,9,248,22,102,23,202,2,2,38,10,249,22,170, -9,248,22,102,23,202,2,2,37,23,200,2,11,27,248,22,152,5,23,202,2, -27,28,249,22,170,9,248,22,102,23,204,2,2,37,248,22,154,20,23,202,1, -248,22,104,23,202,1,28,248,22,78,23,195,2,249,2,83,248,22,153,20,23, -197,2,249,22,94,248,22,154,20,23,199,1,23,197,1,249,2,83,23,196,1, -23,195,1,249,2,83,2,38,28,249,22,170,9,248,22,102,23,204,2,2,37, -248,22,154,20,23,202,1,248,22,104,23,202,1,28,248,22,78,193,248,22,154, -20,193,11,11,11,27,28,248,22,64,23,196,2,27,248,80,144,43,48,39,249, -22,80,23,199,2,248,22,185,16,247,22,138,14,28,23,193,2,192,86,94,23, -193,1,90,144,38,11,89,146,38,36,11,249,80,144,46,54,39,248,22,71,23, -201,2,11,27,28,248,22,88,23,195,2,2,41,249,22,175,7,23,197,2,2, -42,252,80,144,50,8,24,39,23,205,1,28,248,22,88,23,200,2,23,200,1, -86,94,23,200,1,248,22,81,23,200,2,28,248,22,88,23,200,2,86,94,23, -199,1,9,248,22,82,23,200,1,23,198,1,10,28,248,22,152,7,23,196,2, -86,94,23,196,1,27,248,80,144,43,8,30,39,23,202,2,27,248,80,144,44, -48,39,249,22,80,23,200,2,23,197,2,28,23,193,2,192,86,94,23,193,1, -90,144,38,11,89,146,38,36,11,249,80,144,47,54,39,23,201,2,11,28,248, -22,88,23,194,2,86,94,23,193,1,249,22,186,15,23,198,1,248,2,88,23, -197,1,250,22,1,22,186,15,23,199,1,249,22,94,249,22,2,32,0,88,148, -8,36,37,44,11,9,222,33,90,23,200,1,248,22,90,248,2,88,23,201,1, -28,248,22,168,15,23,196,2,86,94,23,196,1,248,80,144,42,8,31,39,248, -22,132,16,28,248,22,129,16,23,198,2,23,197,2,249,22,130,16,23,199,2, -248,80,144,46,8,30,39,23,205,2,28,249,22,168,9,248,22,81,23,198,2, -2,34,27,248,80,144,43,48,39,249,22,80,23,199,2,248,22,185,16,247,22, -138,14,28,23,193,2,192,86,94,23,193,1,90,144,39,11,89,146,38,36,11, -249,80,144,47,54,39,248,22,102,23,202,2,11,89,146,37,38,11,28,248,22, -88,248,22,104,23,201,2,28,248,22,88,23,194,2,249,22,164,16,2,91,23, -196,2,11,10,27,28,23,196,2,248,2,88,23,196,2,28,248,22,88,23,195, -2,2,41,28,249,22,164,16,2,91,23,197,2,248,2,88,23,196,2,249,22, -175,7,23,197,2,2,42,27,28,23,197,1,86,94,23,196,1,249,22,94,28, -248,22,88,248,22,104,23,205,2,21,93,6,5,5,109,122,108,105,98,249,22, -1,22,94,249,22,2,80,144,53,8,32,39,248,22,104,23,208,2,23,197,1, -28,248,22,88,23,196,2,86,94,23,195,1,248,22,90,23,197,1,86,94,23, -196,1,23,195,1,252,80,144,52,8,24,39,23,207,1,248,22,81,23,199,2, -248,22,154,20,23,199,1,23,199,1,10,28,249,22,168,9,248,22,153,20,23, -198,2,2,39,248,80,144,42,8,31,39,248,22,132,16,249,22,130,16,248,22, -134,16,248,22,102,23,201,2,248,80,144,46,8,30,39,23,205,2,12,86,94, -28,28,248,22,168,15,23,194,2,10,248,22,183,8,23,194,2,12,28,23,201, -2,250,22,175,11,67,114,101,113,117,105,114,101,249,22,136,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,81,23,199,2,6,0,0,23,204,2,250,22,177,11,2,23,2,35,23,198, -2,27,28,248,22,183,8,23,195,2,249,22,188,8,23,196,2,36,249,22,132, -16,248,22,133,16,23,197,2,11,27,28,248,22,183,8,23,196,2,249,22,188, -8,23,197,2,37,248,80,144,44,8,25,39,23,195,2,90,144,39,11,89,146, -39,36,11,28,248,22,183,8,23,199,2,250,22,7,2,43,249,22,188,8,23, -203,2,38,2,43,248,22,189,15,23,198,2,86,95,23,195,1,23,193,1,27, -28,248,22,183,8,23,200,2,249,22,188,8,23,201,2,39,249,80,144,49,59, -39,23,197,2,5,0,27,28,248,22,183,8,23,201,2,249,22,188,8,23,202, -2,40,248,22,151,5,23,200,2,27,250,22,158,2,80,144,52,41,38,248,22, -185,16,247,22,138,14,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27, -249,22,80,247,22,138,2,247,22,138,2,86,94,250,22,156,2,80,144,54,41, -38,248,22,185,16,247,22,138,14,195,192,27,28,23,204,2,248,22,151,5,249, -22,80,248,22,152,5,23,200,2,23,207,2,23,196,2,86,95,28,23,212,2, -27,250,22,158,2,248,22,81,23,199,2,196,11,28,23,193,1,12,27,27,28, -248,22,17,80,144,55,51,38,80,144,54,51,38,247,22,19,251,22,33,11,80, -144,58,50,38,9,23,197,1,27,248,22,185,16,247,22,138,14,86,94,249,22, -3,88,148,8,36,37,54,11,9,226,14,13,2,3,33,94,23,196,2,248,28, -248,22,17,80,144,56,51,38,32,0,88,148,36,37,42,11,9,222,33,95,80, -144,55,8,33,39,20,20,98,88,148,36,36,8,25,8,240,12,64,0,0,9, -233,19,22,15,16,13,12,8,7,5,1,2,33,97,23,195,1,23,194,1,23, -198,1,23,208,1,23,215,1,12,28,28,248,22,183,8,23,204,1,86,94,23, -212,1,11,28,23,212,1,28,248,22,152,7,23,206,2,10,28,248,22,64,23, -206,2,10,28,248,22,78,23,206,2,249,22,168,9,248,22,153,20,23,208,2, -2,34,11,11,249,80,144,53,49,39,28,248,22,152,7,23,208,2,249,22,80, -23,209,1,248,80,144,56,8,30,39,23,215,1,86,94,23,212,1,249,22,80, -23,209,1,248,22,185,16,247,22,138,14,252,22,185,8,23,209,1,23,208,1, -23,206,1,23,204,1,23,203,1,12,192,86,96,20,18,144,11,80,143,36,56, -248,80,144,37,8,28,37,249,22,33,11,80,144,39,58,37,248,22,189,4,80, -144,37,57,38,248,22,175,5,80,144,37,37,39,248,22,137,15,80,144,37,45, -39,20,18,144,11,80,143,36,56,248,80,144,37,8,28,37,249,22,33,11,80, -144,39,58,37,20,18,144,11,80,143,36,56,248,80,144,37,8,28,37,249,22, -33,11,80,144,39,58,37,144,36,20,114,144,36,16,1,11,16,0,20,26,15, -53,9,2,1,2,1,29,11,11,11,11,9,9,11,11,11,10,38,80,143,36, -36,20,114,144,41,16,29,2,2,2,3,30,2,6,2,7,11,6,30,2,6, -1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97, -116,105,111,110,11,4,30,2,8,72,112,97,116,104,45,115,116,114,105,110,103, -63,39,196,15,2,9,30,2,8,71,114,101,114,111,111,116,45,112,97,116,104, -41,196,16,30,2,8,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105, -120,41,196,12,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2, -18,2,19,2,20,2,21,2,22,2,23,30,2,24,2,7,11,6,30,2,8, -79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,41, -196,14,30,2,8,73,102,105,110,100,45,99,111,108,45,102,105,108,101,46,196, -4,30,2,8,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104, -39,196,11,2,25,2,26,30,2,24,74,114,101,112,97,114,97,109,101,116,101, -114,105,122,101,11,7,16,0,37,39,36,16,0,36,16,16,2,16,2,17,2, -9,2,13,2,18,2,19,2,12,2,3,2,11,2,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,179,8,69,115,111,45,115,117,102,102,105,120,80,144,36,36,37,20,15, -16,2,88,148,36,38,8,39,8,189,3,2,3,223,0,33,52,80,144,36,37, -37,20,15,16,2,32,0,88,148,8,36,41,52,11,2,10,222,33,53,80,144, -36,44,37,20,15,16,2,20,27,143,32,0,88,148,8,36,37,42,11,2,11, -222,192,32,0,88,148,8,36,37,42,11,2,11,222,192,80,144,36,45,37,20, -15,16,2,247,22,141,2,80,144,36,41,37,20,15,16,2,8,128,8,80,144, -36,46,37,20,15,16,2,249,22,184,8,8,128,8,11,80,144,36,47,37,20, -15,16,2,88,148,8,36,37,50,8,128,32,2,14,223,0,33,54,80,144,36, -48,37,20,15,16,2,88,148,8,36,38,54,8,128,32,2,15,223,0,33,55, -80,144,36,49,37,20,15,16,2,247,22,76,80,144,36,50,37,20,15,16,2, -248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105,110,103,80,144,36, -51,37,20,15,16,2,11,80,143,36,52,20,15,16,2,11,80,143,36,53,20, -15,16,2,32,0,88,148,36,38,57,11,2,20,222,33,74,80,144,36,54,37, -20,15,16,2,32,0,88,148,8,36,37,49,11,2,21,222,33,75,80,144,36, -55,37,20,15,16,2,11,80,143,36,56,20,15,16,2,88,149,8,34,37,45, -8,240,0,0,80,0,1,21,112,114,101,112,45,112,108,97,110,101,116,45,114, -101,115,111,108,118,101,114,33,37,224,1,0,33,76,80,144,36,8,29,39,20, -15,16,2,88,148,36,37,50,8,240,0,0,3,0,67,103,101,116,45,100,105, -114,223,0,33,77,80,144,36,8,30,39,20,15,16,2,88,148,36,37,49,8, -240,0,0,128,0,72,112,97,116,104,45,115,115,45,62,114,107,116,223,0,33, -78,80,144,36,8,31,39,20,15,16,2,88,148,8,36,37,45,8,240,0,0, -4,0,9,223,0,33,79,80,144,36,8,32,39,20,15,16,2,88,148,36,37, -45,8,240,0,128,0,0,9,223,0,33,80,80,144,36,8,33,39,20,15,16, -2,27,11,20,19,143,36,90,144,37,10,89,146,37,36,10,20,25,96,2,23, -88,148,8,36,38,54,8,32,9,224,2,1,33,81,88,148,36,39,49,11,9, -223,0,33,82,88,148,36,40,8,32,16,4,8,240,44,240,0,0,8,240,156, -227,0,0,39,36,9,224,2,1,33,98,207,80,144,36,57,37,20,15,16,2, -88,148,36,36,45,16,2,8,130,8,8,176,65,2,25,223,0,33,99,80,144, -36,8,26,37,20,15,16,2,20,27,143,88,148,8,36,36,45,16,2,36,8, -144,65,2,26,223,0,33,100,88,148,8,36,36,45,16,2,36,8,144,65,2, -26,223,0,33,101,80,144,36,8,27,37,96,29,94,2,4,68,35,37,107,101, -114,110,101,108,11,29,94,2,4,69,35,37,109,105,110,45,115,116,120,11,2, -8,2,24,9,9,9,36,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 9731); +248,22,68,248,22,173,15,23,202,1,28,23,204,2,28,250,22,158,2,248,22, +154,20,23,202,1,23,202,1,11,249,22,80,11,205,249,22,80,194,205,192,86, +96,28,248,22,160,5,23,196,2,12,28,248,22,155,4,23,198,2,250,22,176, +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,178,11,2,23,2,35,23,198,2,28,28,23,196,2,248,22,150, +5,23,197,2,10,12,250,22,178,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,155,4,23,198,2,10,12, +250,22,178,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,78,23,196,2,249,22,168,9,248, +22,154,20,23,198,2,2,4,11,86,97,23,198,1,23,197,1,23,196,1,23, +193,1,248,22,151,5,248,22,102,23,197,1,28,28,248,22,78,23,196,2,28, +249,22,168,9,248,22,154,20,23,198,2,2,36,28,248,22,78,248,22,102,23, +197,2,249,22,168,9,248,22,106,23,198,2,2,4,11,11,11,86,97,23,198, +1,23,197,1,23,196,1,23,193,1,248,22,151,5,249,2,83,248,22,119,23, +199,2,248,22,104,23,199,1,28,28,248,22,78,23,196,2,28,249,22,168,9, +248,22,154,20,23,198,2,2,36,28,28,249,22,170,9,248,22,102,23,198,2, +2,38,10,249,22,170,9,248,22,102,23,198,2,2,37,28,23,196,2,27,248, +22,152,5,23,198,2,28,248,22,64,193,10,28,248,22,78,193,248,22,64,248, +22,154,20,194,11,11,11,11,11,86,96,23,198,1,23,197,1,23,193,1,27, +248,22,152,5,23,198,1,248,22,151,5,249,2,83,28,248,22,78,23,197,2, +248,22,154,20,23,197,2,23,196,2,27,28,249,22,170,9,248,22,102,23,203, +2,2,37,248,22,155,20,200,248,22,104,200,28,248,22,78,23,198,2,249,22, +94,248,22,155,20,199,194,192,28,28,248,22,78,23,196,2,249,22,168,9,248, +22,154,20,23,198,2,2,40,11,86,94,248,80,144,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,143,43,56, +28,28,248,22,78,23,196,2,28,249,22,168,9,248,22,154,20,23,198,2,2, +36,28,248,22,78,248,22,102,23,197,2,249,22,168,9,248,22,106,23,198,2, +2,40,11,11,11,86,94,248,80,144,38,8,29,39,23,194,2,253,24,199,1, +248,22,102,23,202,2,23,202,1,23,203,1,23,204,1,248,22,104,23,202,1, +80,143,43,56,86,94,23,193,1,27,88,148,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,87,27,28,248,22,78,23,198,2,28,249,22,168,9,2,36, +248,22,154,20,23,200,2,27,248,22,102,23,199,2,28,28,249,22,170,9,23, +195,2,2,38,10,249,22,170,9,23,195,2,2,37,86,94,23,193,1,28,23, +199,2,27,248,22,152,5,23,201,2,28,248,22,78,193,248,22,154,20,193,192, +250,22,174,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,78,23,199,2,28,249,22,168,9,2,36,248,22,154,20,23, +201,2,27,28,28,28,249,22,170,9,248,22,102,23,202,2,2,38,10,249,22, +170,9,248,22,102,23,202,2,2,37,23,200,2,11,27,248,22,152,5,23,202, +2,27,28,249,22,170,9,248,22,102,23,204,2,2,37,248,22,155,20,23,202, +1,248,22,104,23,202,1,28,248,22,78,23,195,2,249,2,83,248,22,154,20, +23,197,2,249,22,94,248,22,155,20,23,199,1,23,197,1,249,2,83,23,196, +1,23,195,1,249,2,83,2,38,28,249,22,170,9,248,22,102,23,204,2,2, +37,248,22,155,20,23,202,1,248,22,104,23,202,1,28,248,22,78,193,248,22, +155,20,193,11,11,11,27,28,248,22,64,23,196,2,27,248,80,144,43,48,39, +249,22,80,23,199,2,248,22,186,16,247,22,139,14,28,23,193,2,192,86,94, +23,193,1,90,144,38,11,89,146,38,36,11,249,80,144,46,54,39,248,22,71, +23,201,2,11,27,28,248,22,88,23,195,2,2,41,249,22,175,7,23,197,2, +2,42,252,80,144,50,8,24,39,23,205,1,28,248,22,88,23,200,2,23,200, +1,86,94,23,200,1,248,22,81,23,200,2,28,248,22,88,23,200,2,86,94, +23,199,1,9,248,22,82,23,200,1,23,198,1,10,28,248,22,152,7,23,196, +2,86,94,23,196,1,27,248,80,144,43,8,30,39,23,202,2,27,248,80,144, +44,48,39,249,22,80,23,200,2,23,197,2,28,23,193,2,192,86,94,23,193, +1,90,144,38,11,89,146,38,36,11,249,80,144,47,54,39,23,201,2,11,28, +248,22,88,23,194,2,86,94,23,193,1,249,22,187,15,23,198,1,248,2,88, +23,197,1,250,22,1,22,187,15,23,199,1,249,22,94,249,22,2,32,0,88, +148,8,36,37,44,11,9,222,33,90,23,200,1,248,22,90,248,2,88,23,201, +1,28,248,22,169,15,23,196,2,86,94,23,196,1,248,80,144,42,8,31,39, +248,22,133,16,28,248,22,130,16,23,198,2,23,197,2,249,22,131,16,23,199, +2,248,80,144,46,8,30,39,23,205,2,28,249,22,168,9,248,22,81,23,198, +2,2,34,27,248,80,144,43,48,39,249,22,80,23,199,2,248,22,186,16,247, +22,139,14,28,23,193,2,192,86,94,23,193,1,90,144,39,11,89,146,38,36, +11,249,80,144,47,54,39,248,22,102,23,202,2,11,89,146,37,38,11,28,248, +22,88,248,22,104,23,201,2,28,248,22,88,23,194,2,249,22,165,16,2,91, +23,196,2,11,10,27,28,23,196,2,248,2,88,23,196,2,28,248,22,88,23, +195,2,2,41,28,249,22,165,16,2,91,23,197,2,248,2,88,23,196,2,249, +22,175,7,23,197,2,2,42,27,28,23,197,1,86,94,23,196,1,249,22,94, +28,248,22,88,248,22,104,23,205,2,21,93,6,5,5,109,122,108,105,98,249, +22,1,22,94,249,22,2,80,144,53,8,32,39,248,22,104,23,208,2,23,197, +1,28,248,22,88,23,196,2,86,94,23,195,1,248,22,90,23,197,1,86,94, +23,196,1,23,195,1,252,80,144,52,8,24,39,23,207,1,248,22,81,23,199, +2,248,22,155,20,23,199,1,23,199,1,10,28,249,22,168,9,248,22,154,20, +23,198,2,2,39,248,80,144,42,8,31,39,248,22,133,16,249,22,131,16,248, +22,135,16,248,22,102,23,201,2,248,80,144,46,8,30,39,23,205,2,12,86, +94,28,28,248,22,169,15,23,194,2,10,248,22,183,8,23,194,2,12,28,23, +201,2,250,22,176,11,67,114,101,113,117,105,114,101,249,22,136,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,81,23,199,2,6,0,0,23,204,2,250,22,178,11,2,23,2,35,23, +198,2,27,28,248,22,183,8,23,195,2,249,22,188,8,23,196,2,36,249,22, +133,16,248,22,134,16,23,197,2,11,27,28,248,22,183,8,23,196,2,249,22, +188,8,23,197,2,37,248,80,144,44,8,25,39,23,195,2,90,144,39,11,89, +146,39,36,11,28,248,22,183,8,23,199,2,250,22,7,2,43,249,22,188,8, +23,203,2,38,2,43,248,22,190,15,23,198,2,86,95,23,195,1,23,193,1, +27,28,248,22,183,8,23,200,2,249,22,188,8,23,201,2,39,249,80,144,49, +59,39,23,197,2,5,0,27,28,248,22,183,8,23,201,2,249,22,188,8,23, +202,2,40,248,22,151,5,23,200,2,27,250,22,158,2,80,144,52,41,38,248, +22,186,16,247,22,139,14,11,27,28,23,194,2,23,194,1,86,94,23,194,1, +27,249,22,80,247,22,138,2,247,22,138,2,86,94,250,22,156,2,80,144,54, +41,38,248,22,186,16,247,22,139,14,195,192,27,28,23,204,2,248,22,151,5, +249,22,80,248,22,152,5,23,200,2,23,207,2,23,196,2,86,95,28,23,212, +2,28,250,22,158,2,248,22,81,23,198,2,195,11,86,96,23,211,1,23,204, +1,23,194,1,12,27,251,22,33,11,80,144,56,50,38,9,28,248,22,17,80, +144,57,51,38,80,144,56,51,38,247,22,19,27,248,22,186,16,247,22,139,14, +86,94,249,22,3,88,148,8,36,37,54,11,9,226,13,12,2,3,33,94,23, +196,2,248,28,248,22,17,80,144,55,51,38,32,0,88,148,36,37,42,11,9, +222,33,95,80,144,54,8,33,39,20,20,98,88,148,36,36,8,25,8,240,12, +64,0,0,9,233,18,21,14,15,12,11,7,6,4,1,2,33,97,23,195,1, +23,194,1,23,197,1,23,207,1,23,214,1,12,28,28,248,22,183,8,23,204, +1,86,94,23,212,1,11,28,23,212,1,28,248,22,152,7,23,206,2,10,28, +248,22,64,23,206,2,10,28,248,22,78,23,206,2,249,22,168,9,248,22,154, +20,23,208,2,2,34,11,11,249,80,144,53,49,39,28,248,22,152,7,23,208, +2,249,22,80,23,209,1,248,80,144,56,8,30,39,23,215,1,86,94,23,212, +1,249,22,80,23,209,1,248,22,186,16,247,22,139,14,252,22,185,8,23,209, +1,23,208,1,23,206,1,23,204,1,23,203,1,12,192,86,96,20,18,144,11, +80,143,36,56,248,80,144,37,8,28,37,249,22,33,11,80,144,39,58,37,248, +22,189,4,80,144,37,57,38,248,22,175,5,80,144,37,37,39,248,22,138,15, +80,144,37,45,39,20,18,144,11,80,143,36,56,248,80,144,37,8,28,37,249, +22,33,11,80,144,39,58,37,20,18,144,11,80,143,36,56,248,80,144,37,8, +28,37,249,22,33,11,80,144,39,58,37,144,36,20,114,144,36,16,1,11,16, +0,20,26,15,53,9,2,1,2,1,29,11,11,11,11,9,9,11,11,11,10, +38,80,143,36,36,20,114,144,41,16,29,2,2,2,3,30,2,6,2,7,11, +6,30,2,6,1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101, +114,105,122,97,116,105,111,110,11,4,30,2,8,72,112,97,116,104,45,115,116, +114,105,110,103,63,39,196,15,2,9,30,2,8,71,114,101,114,111,111,116,45, +112,97,116,104,41,196,16,30,2,8,75,112,97,116,104,45,97,100,100,45,115, +117,102,102,105,120,41,196,12,2,10,2,11,2,12,2,13,2,14,2,15,2, +16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,30,2,24,2,7,11, +6,30,2,8,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102, +102,105,120,41,196,14,30,2,8,73,102,105,110,100,45,99,111,108,45,102,105, +108,101,46,196,4,30,2,8,76,110,111,114,109,97,108,45,99,97,115,101,45, +112,97,116,104,39,196,11,2,25,2,26,30,2,24,74,114,101,112,97,114,97, +109,101,116,101,114,105,122,101,11,7,16,0,37,39,36,16,0,36,16,16,2, +16,2,17,2,9,2,13,2,18,2,19,2,12,2,3,2,11,2,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,179,8,69,115,111,45,115,117,102,102,105,120,80,144,36, +36,37,20,15,16,2,88,148,36,38,8,39,8,189,3,2,3,223,0,33,52, +80,144,36,37,37,20,15,16,2,32,0,88,148,8,36,41,52,11,2,10,222, +33,53,80,144,36,44,37,20,15,16,2,20,27,143,32,0,88,148,8,36,37, +42,11,2,11,222,192,32,0,88,148,8,36,37,42,11,2,11,222,192,80,144, +36,45,37,20,15,16,2,247,22,141,2,80,144,36,41,37,20,15,16,2,8, +128,8,80,144,36,46,37,20,15,16,2,249,22,184,8,8,128,8,11,80,144, +36,47,37,20,15,16,2,88,148,8,36,37,50,8,128,32,2,14,223,0,33, +54,80,144,36,48,37,20,15,16,2,88,148,8,36,38,54,8,128,32,2,15, +223,0,33,55,80,144,36,49,37,20,15,16,2,247,22,76,80,144,36,50,37, +20,15,16,2,248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105,110, +103,80,144,36,51,37,20,15,16,2,11,80,143,36,52,20,15,16,2,11,80, +143,36,53,20,15,16,2,32,0,88,148,36,38,57,11,2,20,222,33,74,80, +144,36,54,37,20,15,16,2,32,0,88,148,8,36,37,49,11,2,21,222,33, +75,80,144,36,55,37,20,15,16,2,11,80,143,36,56,20,15,16,2,88,149, +8,34,37,45,8,240,0,0,80,0,1,21,112,114,101,112,45,112,108,97,110, +101,116,45,114,101,115,111,108,118,101,114,33,37,224,1,0,33,76,80,144,36, +8,29,39,20,15,16,2,88,148,36,37,50,8,240,0,0,3,0,67,103,101, +116,45,100,105,114,223,0,33,77,80,144,36,8,30,39,20,15,16,2,88,148, +36,37,49,8,240,0,0,128,0,72,112,97,116,104,45,115,115,45,62,114,107, +116,223,0,33,78,80,144,36,8,31,39,20,15,16,2,88,148,8,36,37,45, +8,240,0,0,4,0,9,223,0,33,79,80,144,36,8,32,39,20,15,16,2, +88,148,36,37,45,8,240,0,128,0,0,9,223,0,33,80,80,144,36,8,33, +39,20,15,16,2,27,11,20,19,143,36,90,144,37,10,89,146,37,36,10,20, +25,96,2,23,88,148,8,36,38,54,8,32,9,224,2,1,33,81,88,148,36, +39,49,11,9,223,0,33,82,88,148,36,40,8,32,16,4,8,240,44,240,0, +0,8,240,156,227,0,0,39,36,9,224,2,1,33,98,207,80,144,36,57,37, +20,15,16,2,88,148,36,36,45,16,2,8,130,8,8,176,65,2,25,223,0, +33,99,80,144,36,8,26,37,20,15,16,2,20,27,143,88,148,8,36,36,45, +16,2,36,8,144,65,2,26,223,0,33,100,88,148,8,36,36,45,16,2,36, +8,144,65,2,26,223,0,33,101,80,144,36,8,27,37,96,29,94,2,4,68, +35,37,107,101,114,110,101,108,11,29,94,2,4,69,35,37,109,105,110,45,115, +116,120,11,2,8,2,24,9,9,9,36,9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 9735); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,49,46,48,46,50,84,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,49,46,48,46,51,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,101,1,0, 0,69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2,2, diff --git a/racket/src/racket/src/mzmark_struct.inc b/racket/src/racket/src/mzmark_struct.inc index 81e3842154..a50e74d1c6 100644 --- a/racket/src/racket/src/mzmark_struct.inc +++ b/racket/src/racket/src/mzmark_struct.inc @@ -236,6 +236,37 @@ static int mark_nack_guard_evt_FIXUP(void *p, struct NewGC *gc) { #define mark_nack_guard_evt_IS_CONST_SIZE 1 +static int mark_active_replace_evt_SIZE(void *p, struct NewGC *gc) { + return + gcBYTES_TO_WORDS(sizeof(Active_Replace_Evt)); +} + +static int mark_active_replace_evt_MARK(void *p, struct NewGC *gc) { + Active_Replace_Evt *a = (Active_Replace_Evt *)p; + + gcMARK2(a->syncing, gc); + gcMARK2(a->wrapper, gc); + gcMARK2(a->orig, gc); + + return + gcBYTES_TO_WORDS(sizeof(Active_Replace_Evt)); +} + +static int mark_active_replace_evt_FIXUP(void *p, struct NewGC *gc) { + Active_Replace_Evt *a = (Active_Replace_Evt *)p; + + gcFIXUP2(a->syncing, gc); + gcFIXUP2(a->wrapper, gc); + gcFIXUP2(a->orig, gc); + + return + gcBYTES_TO_WORDS(sizeof(Active_Replace_Evt)); +} + +#define mark_active_replace_evt_IS_ATOMIC 0 +#define mark_active_replace_evt_IS_CONST_SIZE 1 + + static int mark_chaperone_SIZE(void *p, struct NewGC *gc) { return gcBYTES_TO_WORDS(sizeof(Scheme_Chaperone)); diff --git a/racket/src/racket/src/mzmarksrc.c b/racket/src/racket/src/mzmarksrc.c index a547a89053..452c8393f1 100644 --- a/racket/src/racket/src/mzmarksrc.c +++ b/racket/src/racket/src/mzmarksrc.c @@ -2225,6 +2225,18 @@ mark_nack_guard_evt { gcBYTES_TO_WORDS(sizeof(Nack_Guard_Evt)); } +mark_active_replace_evt { + mark: + Active_Replace_Evt *a = (Active_Replace_Evt *)p; + + gcMARK2(a->syncing, gc); + gcMARK2(a->wrapper, gc); + gcMARK2(a->orig, gc); + + size: + gcBYTES_TO_WORDS(sizeof(Active_Replace_Evt)); +} + mark_chaperone { mark: Scheme_Chaperone *px = (Scheme_Chaperone *)p; diff --git a/racket/src/racket/src/schminc.h b/racket/src/racket/src/schminc.h index 8b8fb7ddb8..0d16c5bc94 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 1124 +#define EXPECTED_PRIM_COUNT 1125 #define EXPECTED_UNSAFE_COUNT 106 #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 d40351338b..11ed9fe871 100644 --- a/racket/src/racket/src/schpriv.h +++ b/racket/src/racket/src/schpriv.h @@ -732,6 +732,7 @@ typedef struct { double sleep_end; int w_i; char spin, is_poll, no_redirect; + Scheme_Object *replace_chain; /* turns non-tail replace_evt recursion into a loop */ } Scheme_Schedule_Info; typedef Scheme_Object *(*Scheme_Accept_Sync)(Scheme_Object *wrap); @@ -742,6 +743,15 @@ void scheme_set_sync_target(Scheme_Schedule_Info *sinfo, Scheme_Object *target, struct Syncing; void scheme_accept_sync(struct Syncing *syncing, int i); +struct Syncing *scheme_make_syncing(int argc, Scheme_Object **argv); +int scheme_syncing_ready(struct Syncing *s, Scheme_Schedule_Info *sinfo, int can_suspend); +void scheme_syncing_needs_wakeup(struct Syncing *s, void *fds); +void scheme_escape_during_sync(struct Syncing *syncing); +Scheme_Object *scheme_syncing_result(struct Syncing *syncing, int tailok); + +struct Syncing *scheme_replace_evt_nack(Scheme_Object *active_replace); +struct Syncing *scheme_replace_evt_needs_wakeup(Scheme_Object *o); + typedef int (*Scheme_Ready_Fun_FPC)(Scheme_Object *o, Scheme_Schedule_Info *sinfo); typedef int (*Scheme_Out_Ready_Fun_FPC)(Scheme_Output_Port *port, Scheme_Schedule_Info *sinfo); typedef int (*Scheme_In_Ready_Fun_FPC)(Scheme_Input_Port *port, Scheme_Schedule_Info *sinfo); diff --git a/racket/src/racket/src/schvers.h b/racket/src/racket/src/schvers.h index 9b4742524a..164059f32e 100644 --- a/racket/src/racket/src/schvers.h +++ b/racket/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "6.1.0.2" +#define MZSCHEME_VERSION "6.1.0.3" #define MZSCHEME_VERSION_X 6 #define MZSCHEME_VERSION_Y 1 #define MZSCHEME_VERSION_Z 0 -#define MZSCHEME_VERSION_W 2 +#define MZSCHEME_VERSION_W 3 #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/struct.c b/racket/src/racket/src/struct.c index 6094b4ee2c..0b9624c7c0 100644 --- a/racket/src/racket/src/struct.c +++ b/racket/src/racket/src/struct.c @@ -84,6 +84,14 @@ typedef struct { Scheme_Object *maker; } Nack_Guard_Evt; +typedef struct { + Scheme_Object so; + int done; + Syncing *syncing; + Scheme_Object *wrapper; + Scheme_Object *orig; +} Active_Replace_Evt; + static Scheme_Object *make_inspector(int argc, Scheme_Object *argv[]); static Scheme_Object *make_sibling_inspector(int argc, Scheme_Object *argv[]); static Scheme_Object *inspector_p(int argc, Scheme_Object *argv[]); @@ -117,6 +125,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 *replace_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[]); @@ -157,6 +166,9 @@ static int wrapped_evt_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo); 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 replace_evt_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo); +static int active_replace_evt_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo); +static void active_replace_evt_needs_wakeup(Scheme_Object *s, void *fds); static int chaperone_evt_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo); static int is_chaperone_evt(Scheme_Object *o); @@ -557,6 +569,11 @@ scheme_init_struct (Scheme_Env *env) "handle-evt", 2, 2), env); + scheme_add_global_constant("replace-evt", + scheme_make_prim_w_arity(replace_evt, + "replace-evt", + 2, 2), + env); scheme_add_global_constant("chaperone-evt", scheme_make_prim_w_arity(chaperone_evt, "chaperone-evt", @@ -845,6 +862,13 @@ void scheme_init_struct_wait() scheme_add_evt(scheme_handle_evt_type, (Scheme_Ready_Fun)wrapped_evt_is_ready, NULL, NULL, 1); + scheme_add_evt(scheme_replace_evt_type, + (Scheme_Ready_Fun)replace_evt_is_ready, + NULL, NULL, 1); + scheme_add_evt(scheme_active_replace_evt_type, + (Scheme_Ready_Fun)active_replace_evt_is_ready, + active_replace_evt_needs_wakeup, + NULL, 1); scheme_add_evt(scheme_chaperone_type, (Scheme_Ready_Fun)chaperone_evt_is_ready, NULL, @@ -3393,7 +3417,7 @@ static Scheme_Object *make_struct_field_mutator(int argc, Scheme_Object *argv[]) /* wraps and nacks */ /*========================================================================*/ -static Scheme_Object *wrap_evt(const char *who, int wrap, int argc, Scheme_Object *argv[]) +static Scheme_Object *wrap_evt(const char *who, Scheme_Type ty, int argc, Scheme_Object *argv[]) { Wrapped_Evt *ww; @@ -3404,7 +3428,7 @@ static Scheme_Object *wrap_evt(const char *who, int wrap, int argc, Scheme_Objec scheme_wrong_contract(who, "procedure?", 1, argc, argv); ww = MALLOC_ONE_TAGGED(Wrapped_Evt); - ww->so.type = (wrap ? scheme_wrap_evt_type : scheme_handle_evt_type); + ww->so.type = ty; ww->evt = argv[0]; ww->wrapper = argv[1]; @@ -3413,12 +3437,17 @@ static Scheme_Object *wrap_evt(const char *who, int wrap, int argc, Scheme_Objec Scheme_Object *scheme_wrap_evt(int argc, Scheme_Object *argv[]) { - return wrap_evt("wrap-evt", 1, argc, argv); + return wrap_evt("wrap-evt", scheme_wrap_evt_type, argc, argv); } Scheme_Object *handle_evt(int argc, Scheme_Object *argv[]) { - return wrap_evt("handle-evt", 0, argc, argv); + return wrap_evt("handle-evt", scheme_handle_evt_type, argc, argv); +} + +Scheme_Object *replace_evt(int argc, Scheme_Object *argv[]) +{ + return wrap_evt("replace-evt", scheme_replace_evt_type, argc, argv); } Scheme_Object *handle_evt_p(int argc, Scheme_Object *argv[]) @@ -3648,27 +3677,8 @@ static int chaperone_evt_is_ready(Scheme_Object *obj, Scheme_Schedule_Info *sinf 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)); } @@ -3788,6 +3798,156 @@ static int poll_evt_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo) return 1; /* Non-evt => ready */ } +static int replace_evt_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo) +{ + Active_Replace_Evt *a; + Syncing *s; + Scheme_Object *argv[1]; + + argv[0] = ((Wrapped_Evt *)o)->evt; + s = scheme_make_syncing(1, argv); + + a = MALLOC_ONE_TAGGED(Active_Replace_Evt); + a->so.type = scheme_active_replace_evt_type; + a->done = 0; + a->wrapper = ((Wrapped_Evt *)o)->wrapper; + a->syncing = s; + a->orig = o; + + scheme_set_sync_target(sinfo, (Scheme_Object *)a, NULL, NULL, 0, 1, NULL); + return 0; +} + +static int active_replace_evt_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo) +{ + Active_Replace_Evt *a = (Active_Replace_Evt *)o; + int nested = 0; + + if (!a->syncing) + return 0; + + do { + if (a->syncing) { + /* Can't finish in a scheduler context: */ + if (a->done && sinfo->false_positive_ok) { + sinfo->potentially_false_positive = 1; + if (nested) + sinfo->replace_chain = NULL; + return 1; + } + + if (!a->done && sinfo->replace_chain && !nested) { + /* In a nested context; trampoline to avoid stack overflow. + If the trampolined check succeeds, then the context calling here will + not see it; we'll return a potentially-false-positive success, + and then check again in a way that bubbles results up. */ + Scheme_Object *l; + l = scheme_make_pair((Scheme_Object *)a, sinfo->replace_chain); + sinfo->replace_chain = l; + return 0; + } + + if (!a->done && !sinfo->replace_chain) { + /* In a non-nested scheduler context; We can receive trampolined syncs: */ + sinfo->replace_chain = scheme_null; + } + + if (a->done || scheme_syncing_ready(a->syncing, sinfo, 0)) { + sinfo->replace_chain = NULL; + + if (sinfo->potentially_false_positive) + return 1; + + a->done = 1; + if (sinfo->false_positive_ok) { + sinfo->potentially_false_positive = 1; + return 1; + } else if (nested) { + /* We're in a trampilined sync. Now that we've recorded success, + wait for the next round, and we won't trampoline then. This + waiting causes a quadratic bubbling effect for deeply nested + events, so uses of `replace-evt` shouldn't deeply nest! */ + sinfo->spin = 1; + return 0; + } else { + /* Non-nested, non-scheduler context. */ + Scheme_Object *v, *argv[1], **args; + Syncing *s = a->syncing; + int argc; + + a->syncing = NULL; + + v = scheme_syncing_result(s, 0); + + if (SAME_OBJ(v, SCHEME_MULTIPLE_VALUES)) { + argc = scheme_multiple_count; + args = scheme_multiple_array; + scheme_detach_multple_array(args); + } else { + argv[0] = v; + args = argv; + argc = 1; + } + + v = scheme_apply(a->wrapper, argc, args); + + if (scheme_is_evt(v)) { + scheme_set_sync_target(sinfo, v, NULL, NULL, 0, 1, NULL); + return 0; + } else { + /* Non-event => ready */ + scheme_set_sync_target(sinfo, a->orig, NULL, NULL, 0, 1, NULL); + return 1; + } + } + } + } + + if (sinfo->replace_chain && !SCHEME_NULLP(sinfo->replace_chain)) { + /* Receive a trampoline */ + a = (Active_Replace_Evt *)SCHEME_CAR(sinfo->replace_chain); + sinfo->replace_chain = SCHEME_CDR(sinfo->replace_chain); + nested = 1; + } else + a = NULL; + } while (a); + + sinfo->replace_chain = NULL; + + return 0; +} + +static void active_replace_evt_needs_wakeup(Scheme_Object *o, void *fds) +{ + Active_Replace_Evt *a = (Active_Replace_Evt *)o; + + if (a->syncing && !a->done) + scheme_syncing_needs_wakeup(a->syncing, fds); +} + +Syncing *scheme_replace_evt_needs_wakeup(Scheme_Object *o) +{ + Active_Replace_Evt *a = (Active_Replace_Evt *)o; + + if (a->syncing && !a->done) + return a->syncing; + + return NULL; +} + +Syncing *scheme_replace_evt_nack(Scheme_Object *o) +{ + Active_Replace_Evt *a = (Active_Replace_Evt *)o; + Syncing *s = NULL; + + if (a->syncing) { + s = a->syncing; + a->syncing = NULL; + } + + return s; +} + /*========================================================================*/ /* struct op maker */ /*========================================================================*/ @@ -5900,6 +6060,8 @@ static void register_traversers(void) GC_REG_TRAV(scheme_handle_evt_type, mark_wrapped_evt); GC_REG_TRAV(scheme_nack_guard_evt_type, mark_nack_guard_evt); GC_REG_TRAV(scheme_poll_evt_type, mark_nack_guard_evt); + GC_REG_TRAV(scheme_replace_evt_type, mark_wrapped_evt); + GC_REG_TRAV(scheme_active_replace_evt_type, mark_active_replace_evt); GC_REG_TRAV(scheme_chaperone_type, mark_chaperone); GC_REG_TRAV(scheme_proc_chaperone_type, mark_chaperone); diff --git a/racket/src/racket/src/stypes.h b/racket/src/racket/src/stypes.h index bb4ab1c2bf..72980d9833 100644 --- a/racket/src/racket/src/stypes.h +++ b/racket/src/racket/src/stypes.h @@ -145,154 +145,156 @@ enum { scheme_evt_set_type, /* 121 */ scheme_wrap_evt_type, /* 122 */ scheme_handle_evt_type, /* 123 */ - scheme_nack_guard_evt_type, /* 124 */ - scheme_semaphore_repost_type, /* 125 */ - scheme_channel_type, /* 126 */ - scheme_channel_put_type, /* 127 */ - scheme_thread_resume_type, /* 128 */ - scheme_thread_suspend_type, /* 129 */ - scheme_thread_dead_type, /* 130 */ - scheme_poll_evt_type, /* 131 */ - scheme_nack_evt_type, /* 132 */ - scheme_module_registry_type, /* 133 */ - scheme_thread_set_type, /* 134 */ - scheme_string_converter_type, /* 135 */ - scheme_alarm_type, /* 136 */ - scheme_thread_recv_evt_type, /* 137 */ - scheme_thread_cell_type, /* 138 */ - scheme_channel_syncer_type, /* 139 */ - scheme_special_comment_type, /* 140 */ - scheme_write_evt_type, /* 141 */ - scheme_always_evt_type, /* 142 */ - scheme_never_evt_type, /* 143 */ - scheme_progress_evt_type, /* 144 */ - scheme_place_dead_type, /* 145 */ - scheme_already_comp_type, /* 146 */ - scheme_readtable_type, /* 147 */ - scheme_intdef_context_type, /* 148 */ - scheme_lexical_rib_type, /* 149 */ - scheme_thread_cell_values_type, /* 150 */ - scheme_global_ref_type, /* 151 */ - scheme_cont_mark_chain_type, /* 152 */ - scheme_raw_pair_type, /* 153 */ - scheme_prompt_type, /* 154 */ - scheme_prompt_tag_type, /* 155 */ - scheme_continuation_mark_key_type, /* 156 */ - scheme_expanded_syntax_type, /* 157 */ - scheme_delay_syntax_type, /* 158 */ - scheme_cust_box_type, /* 159 */ - scheme_resolved_module_path_type, /* 160 */ - scheme_module_phase_exports_type, /* 161 */ - scheme_logger_type, /* 162 */ - scheme_log_reader_type, /* 163 */ - scheme_free_id_info_type, /* 164 */ - scheme_rib_delimiter_type, /* 165 */ - scheme_noninline_proc_type, /* 166 */ - scheme_prune_context_type, /* 167 */ - scheme_future_type, /* 168 */ - scheme_flvector_type, /* 169 */ - scheme_extflvector_type, /* 170 */ - scheme_fxvector_type, /* 171 */ - scheme_place_type, /* 172 */ - scheme_place_object_type, /* 173 */ - scheme_place_async_channel_type, /* 174 */ - scheme_place_bi_channel_type, /* 175 */ - scheme_once_used_type, /* 176 */ - scheme_serialized_symbol_type, /* 177 */ - scheme_serialized_keyword_type, /* 178 */ - scheme_serialized_structure_type, /* 179 */ - scheme_fsemaphore_type, /* 180 */ - scheme_serialized_tcp_fd_type, /* 181 */ - scheme_serialized_file_fd_type, /* 182 */ - scheme_port_closed_evt_type, /* 183 */ - scheme_proc_shape_type, /* 184 */ - scheme_struct_proc_shape_type, /* 185 */ - scheme_phantom_bytes_type, /* 186 */ - scheme_environment_variables_type, /* 187 */ - scheme_filesystem_change_evt_type, /* 188 */ - scheme_ctype_type, /* 189 */ - scheme_plumber_type, /* 190 */ - scheme_plumber_handle_type, /* 191 */ + scheme_replace_evt_type, /* 124 */ + scheme_active_replace_evt_type, /* 125 */ + scheme_nack_guard_evt_type, /* 126 */ + scheme_semaphore_repost_type, /* 127 */ + scheme_channel_type, /* 128 */ + scheme_channel_put_type, /* 129 */ + scheme_thread_resume_type, /* 130 */ + scheme_thread_suspend_type, /* 131 */ + scheme_thread_dead_type, /* 132 */ + scheme_poll_evt_type, /* 133 */ + scheme_nack_evt_type, /* 134 */ + scheme_module_registry_type, /* 135 */ + scheme_thread_set_type, /* 136 */ + scheme_string_converter_type, /* 137 */ + scheme_alarm_type, /* 138 */ + scheme_thread_recv_evt_type, /* 139 */ + scheme_thread_cell_type, /* 140 */ + scheme_channel_syncer_type, /* 141 */ + scheme_special_comment_type, /* 142 */ + scheme_write_evt_type, /* 143 */ + scheme_always_evt_type, /* 144 */ + scheme_never_evt_type, /* 145 */ + scheme_progress_evt_type, /* 146 */ + scheme_place_dead_type, /* 147 */ + scheme_already_comp_type, /* 148 */ + scheme_readtable_type, /* 149 */ + scheme_intdef_context_type, /* 150 */ + scheme_lexical_rib_type, /* 151 */ + scheme_thread_cell_values_type, /* 152 */ + scheme_global_ref_type, /* 153 */ + scheme_cont_mark_chain_type, /* 154 */ + scheme_raw_pair_type, /* 155 */ + scheme_prompt_type, /* 156 */ + scheme_prompt_tag_type, /* 157 */ + scheme_continuation_mark_key_type, /* 158 */ + scheme_expanded_syntax_type, /* 159 */ + scheme_delay_syntax_type, /* 160 */ + scheme_cust_box_type, /* 161 */ + scheme_resolved_module_path_type, /* 162 */ + scheme_module_phase_exports_type, /* 163 */ + scheme_logger_type, /* 164 */ + scheme_log_reader_type, /* 165 */ + scheme_free_id_info_type, /* 166 */ + scheme_rib_delimiter_type, /* 167 */ + scheme_noninline_proc_type, /* 168 */ + scheme_prune_context_type, /* 169 */ + scheme_future_type, /* 170 */ + scheme_flvector_type, /* 171 */ + scheme_extflvector_type, /* 172 */ + scheme_fxvector_type, /* 173 */ + scheme_place_type, /* 174 */ + scheme_place_object_type, /* 175 */ + scheme_place_async_channel_type, /* 176 */ + scheme_place_bi_channel_type, /* 177 */ + scheme_once_used_type, /* 178 */ + scheme_serialized_symbol_type, /* 179 */ + scheme_serialized_keyword_type, /* 180 */ + scheme_serialized_structure_type, /* 181 */ + scheme_fsemaphore_type, /* 182 */ + scheme_serialized_tcp_fd_type, /* 183 */ + scheme_serialized_file_fd_type, /* 184 */ + scheme_port_closed_evt_type, /* 185 */ + scheme_proc_shape_type, /* 186 */ + scheme_struct_proc_shape_type, /* 187 */ + scheme_phantom_bytes_type, /* 188 */ + scheme_environment_variables_type, /* 189 */ + scheme_filesystem_change_evt_type, /* 190 */ + scheme_ctype_type, /* 191 */ + scheme_plumber_type, /* 192 */ + scheme_plumber_handle_type, /* 193 */ #ifdef MZTAG_REQUIRED - _scheme_last_normal_type_, /* 192 */ + _scheme_last_normal_type_, /* 194 */ - scheme_rt_weak_array, /* 193 */ + scheme_rt_weak_array, /* 195 */ - scheme_rt_comp_env, /* 194 */ - scheme_rt_constant_binding, /* 195 */ - scheme_rt_resolve_info, /* 196 */ - scheme_rt_unresolve_info, /* 197 */ - scheme_rt_optimize_info, /* 198 */ - scheme_rt_compile_info, /* 199 */ - scheme_rt_cont_mark, /* 200 */ - scheme_rt_saved_stack, /* 201 */ - scheme_rt_reply_item, /* 202 */ - scheme_rt_closure_info, /* 203 */ - scheme_rt_overflow, /* 204 */ - scheme_rt_overflow_jmp, /* 205 */ - scheme_rt_meta_cont, /* 206 */ - scheme_rt_dyn_wind_cell, /* 207 */ - scheme_rt_dyn_wind_info, /* 208 */ - scheme_rt_dyn_wind, /* 209 */ - scheme_rt_dup_check, /* 210 */ - scheme_rt_thread_memory, /* 211 */ - scheme_rt_input_file, /* 212 */ - scheme_rt_input_fd, /* 213 */ - scheme_rt_oskit_console_input, /* 214 */ - scheme_rt_tested_input_file, /* 215 */ - scheme_rt_tested_output_file, /* 216 */ - scheme_rt_indexed_string, /* 217 */ - scheme_rt_output_file, /* 218 */ - scheme_rt_load_handler_data, /* 219 */ - scheme_rt_pipe, /* 220 */ - scheme_rt_beos_process, /* 221 */ - scheme_rt_system_child, /* 222 */ - scheme_rt_tcp, /* 223 */ - scheme_rt_write_data, /* 224 */ - scheme_rt_tcp_select_info, /* 225 */ - scheme_rt_param_data, /* 226 */ - scheme_rt_will, /* 227 */ - scheme_rt_linker_name, /* 228 */ - scheme_rt_param_map, /* 229 */ - scheme_rt_finalization, /* 230 */ - scheme_rt_finalizations, /* 231 */ - scheme_rt_cpp_object, /* 232 */ - scheme_rt_cpp_array_object, /* 233 */ - scheme_rt_stack_object, /* 234 */ - scheme_rt_preallocated_object, /* 235 */ - scheme_thread_hop_type, /* 236 */ - scheme_rt_srcloc, /* 237 */ - scheme_rt_evt, /* 238 */ - scheme_rt_syncing, /* 239 */ - scheme_rt_comp_prefix, /* 240 */ - scheme_rt_user_input, /* 241 */ - scheme_rt_user_output, /* 242 */ - scheme_rt_compact_port, /* 243 */ - scheme_rt_read_special_dw, /* 244 */ - scheme_rt_regwork, /* 245 */ - scheme_rt_rx_lazy_string, /* 246 */ - scheme_rt_buf_holder, /* 247 */ - scheme_rt_parameterization, /* 248 */ - scheme_rt_print_params, /* 249 */ - scheme_rt_read_params, /* 250 */ - scheme_rt_native_code, /* 251 */ - scheme_rt_native_code_plus_case, /* 252 */ - scheme_rt_jitter_data, /* 253 */ - scheme_rt_module_exports, /* 254 */ - scheme_rt_delay_load_info, /* 255 */ - scheme_rt_marshal_info, /* 256 */ - scheme_rt_unmarshal_info, /* 257 */ - scheme_rt_runstack, /* 258 */ - scheme_rt_sfs_info, /* 259 */ - scheme_rt_validate_clearing, /* 260 */ - scheme_rt_avl_node, /* 261 */ - scheme_rt_lightweight_cont, /* 262 */ - scheme_rt_export_info, /* 263 */ - scheme_rt_cont_jmp, /* 264 */ - scheme_rt_letrec_check_frame, /* 265 */ + scheme_rt_comp_env, /* 196 */ + scheme_rt_constant_binding, /* 197 */ + scheme_rt_resolve_info, /* 198 */ + scheme_rt_unresolve_info, /* 199 */ + scheme_rt_optimize_info, /* 200 */ + scheme_rt_compile_info, /* 201 */ + scheme_rt_cont_mark, /* 202 */ + scheme_rt_saved_stack, /* 203 */ + scheme_rt_reply_item, /* 204 */ + scheme_rt_closure_info, /* 205 */ + scheme_rt_overflow, /* 206 */ + scheme_rt_overflow_jmp, /* 207 */ + scheme_rt_meta_cont, /* 208 */ + scheme_rt_dyn_wind_cell, /* 209 */ + scheme_rt_dyn_wind_info, /* 210 */ + scheme_rt_dyn_wind, /* 211 */ + scheme_rt_dup_check, /* 212 */ + scheme_rt_thread_memory, /* 213 */ + scheme_rt_input_file, /* 214 */ + scheme_rt_input_fd, /* 215 */ + scheme_rt_oskit_console_input, /* 216 */ + scheme_rt_tested_input_file, /* 217 */ + scheme_rt_tested_output_file, /* 218 */ + scheme_rt_indexed_string, /* 219 */ + scheme_rt_output_file, /* 220 */ + scheme_rt_load_handler_data, /* 221 */ + scheme_rt_pipe, /* 222 */ + scheme_rt_beos_process, /* 223 */ + scheme_rt_system_child, /* 224 */ + scheme_rt_tcp, /* 225 */ + scheme_rt_write_data, /* 226 */ + scheme_rt_tcp_select_info, /* 227 */ + scheme_rt_param_data, /* 228 */ + scheme_rt_will, /* 229 */ + scheme_rt_linker_name, /* 230 */ + scheme_rt_param_map, /* 231 */ + scheme_rt_finalization, /* 232 */ + scheme_rt_finalizations, /* 233 */ + scheme_rt_cpp_object, /* 234 */ + scheme_rt_cpp_array_object, /* 235 */ + scheme_rt_stack_object, /* 236 */ + scheme_rt_preallocated_object, /* 237 */ + scheme_thread_hop_type, /* 238 */ + scheme_rt_srcloc, /* 239 */ + scheme_rt_evt, /* 240 */ + scheme_rt_syncing, /* 241 */ + scheme_rt_comp_prefix, /* 242 */ + scheme_rt_user_input, /* 243 */ + scheme_rt_user_output, /* 244 */ + scheme_rt_compact_port, /* 245 */ + scheme_rt_read_special_dw, /* 246 */ + scheme_rt_regwork, /* 247 */ + scheme_rt_rx_lazy_string, /* 248 */ + scheme_rt_buf_holder, /* 249 */ + scheme_rt_parameterization, /* 250 */ + scheme_rt_print_params, /* 251 */ + scheme_rt_read_params, /* 252 */ + scheme_rt_native_code, /* 253 */ + scheme_rt_native_code_plus_case, /* 254 */ + scheme_rt_jitter_data, /* 255 */ + scheme_rt_module_exports, /* 256 */ + scheme_rt_delay_load_info, /* 257 */ + scheme_rt_marshal_info, /* 258 */ + scheme_rt_unmarshal_info, /* 259 */ + scheme_rt_runstack, /* 260 */ + scheme_rt_sfs_info, /* 261 */ + scheme_rt_validate_clearing, /* 262 */ + scheme_rt_avl_node, /* 263 */ + scheme_rt_lightweight_cont, /* 264 */ + scheme_rt_export_info, /* 265 */ + scheme_rt_cont_jmp, /* 266 */ + scheme_rt_letrec_check_frame, /* 267 */ #endif - scheme_deferred_expr_type, /* 266 */ + scheme_deferred_expr_type, /* 268 */ _scheme_last_type_ }; diff --git a/racket/src/racket/src/thread.c b/racket/src/racket/src/thread.c index 8337e6a2a5..120962ed3a 100644 --- a/racket/src/racket/src/thread.c +++ b/racket/src/racket/src/thread.c @@ -425,7 +425,6 @@ static Scheme_Object *will_executor_go(int argc, Scheme_Object *args[]); static Scheme_Object *will_executor_sema(Scheme_Object *w, int *repost); static Scheme_Object *check_break_now(int argc, Scheme_Object *args[]); -static int syncing_ready(Scheme_Object *s, Scheme_Schedule_Info *sinfo); static void make_initial_config(Scheme_Thread *p); @@ -434,6 +433,8 @@ static void suspend_thread(Scheme_Thread *p); static int check_sleep(int need_activity, int sleep_now); +static int syncing_ready(Syncing *syncing, Scheme_Schedule_Info *sinfo); + static void remove_thread(Scheme_Thread *r); static void exit_or_escape(Scheme_Thread *p); @@ -4417,6 +4418,7 @@ static void init_schedule_info(Scheme_Schedule_Info *sinfo, Scheme_Thread *false sinfo->is_poll = 0; sinfo->no_redirect = no_redirect; sinfo->sleep_end = sleep_end; + sinfo->replace_chain = NULL; } Scheme_Object *scheme_current_break_cell() @@ -6168,7 +6170,6 @@ void scheme_clear_thread_sync(Scheme_Thread *p) /* syncing */ /*========================================================================*/ -static void syncing_needs_wakeup(Scheme_Object *s, void *fds); static Evt_Set *make_evt_set(const char *name, int argc, Scheme_Object **argv, int delta, int flatten); typedef struct Evt { @@ -6316,6 +6317,15 @@ static Syncing *make_syncing(Evt_Set *evt_set, float timeout, double start_time) return syncing; } +Syncing *scheme_make_syncing(int argc, Scheme_Object **argv) +{ + Evt_Set *evt_set; + + evt_set = make_evt_set("sync", argc, argv, 0, 1); + + return make_syncing(evt_set, -1.0, 0); +} + static void *splice_ptr_array(void **a, int al, void **b, int bl, int i) { void **r; @@ -6499,13 +6509,12 @@ void scheme_set_sync_target(Scheme_Schedule_Info *sinfo, Scheme_Object *target, } } -static int syncing_ready(Scheme_Object *s, Scheme_Schedule_Info *sinfo) +int scheme_syncing_ready(Syncing *syncing, Scheme_Schedule_Info *sinfo, int can_suspend) { int i, redirections = 0, all_semas = 1, j, result = 0; Evt *w; Scheme_Object *o; Scheme_Schedule_Info r_sinfo; - Syncing *syncing = (Syncing *)s; Evt_Set *evt_set; int is_poll; double sleep_end; @@ -6550,10 +6559,12 @@ static int syncing_ready(Scheme_Object *s, Scheme_Schedule_Info *sinfo) r_sinfo.current_syncing = (Scheme_Object *)syncing; r_sinfo.w_i = i; r_sinfo.is_poll = is_poll; + r_sinfo.replace_chain = sinfo->replace_chain; yep = ready(o, &r_sinfo); sleep_end = r_sinfo.sleep_end; + sinfo->replace_chain = r_sinfo.replace_chain; /* Calling a guard can allow thread swap, which might choose a semaphore or a channel, so check for a result: */ @@ -6615,7 +6626,7 @@ static int syncing_ready(Scheme_Object *s, Scheme_Schedule_Info *sinfo) if (syncing->timeout >= 0.0) { if (syncing->sleep_end <= scheme_get_inexact_milliseconds()) result = 1; - } else if (all_semas) { + } else if (all_semas && can_suspend) { /* Try to block in a GCable way: */ if (sinfo->false_positive_ok) { /* In scheduler. Swap us in so we can suspend. */ @@ -6645,6 +6656,11 @@ static int syncing_ready(Scheme_Object *s, Scheme_Schedule_Info *sinfo) return result; } +static int syncing_ready(Syncing *syncing, Scheme_Schedule_Info *sinfo) +{ + return scheme_syncing_ready(syncing, sinfo, 1); +} + void scheme_accept_sync(Syncing *syncing, int i) { /* run atomic accept action to revise the wrap */ @@ -6664,23 +6680,40 @@ void scheme_accept_sync(Syncing *syncing, int i) syncing->wrapss[i] = pr; } -static void syncing_needs_wakeup(Scheme_Object *s, void *fds) +void scheme_syncing_needs_wakeup(Syncing *s, void *fds) { int i; - Scheme_Object *o; + Scheme_Object *o, *syncs = NULL; + Syncing *next; Evt *w; - Evt_Set *evt_set = ((Syncing *)s)->set; + Evt_Set *evt_set; - for (i = 0; i < evt_set->argc; i++) { - o = evt_set->argv[i]; - w = evt_set->ws[i]; + do { + evt_set = s->set; - if (w->needs_wakeup) { - Scheme_Needs_Wakeup_Fun nw = w->needs_wakeup; + for (i = 0; i < evt_set->argc; i++) { + o = evt_set->argv[i]; + w = evt_set->ws[i]; - nw(o, fds); + if (SAME_TYPE(SCHEME_TYPE(o), scheme_active_replace_evt_type)) { + /* Handle active_replace_evt specially to avoid stack overflow: */ + next = scheme_replace_evt_needs_wakeup(o); + if (next) + syncs = scheme_make_raw_pair((Scheme_Object *)next, syncs); + } else if (w->needs_wakeup) { + Scheme_Needs_Wakeup_Fun nw = w->needs_wakeup; + + nw(o, fds); + } } - } + + if (!syncs) + s = NULL; + else { + s = (Syncing *)SCHEME_CAR(syncs); + syncs = SCHEME_CDR(syncs); + } + } while (s); } static Scheme_Object *evt_p(int argc, Scheme_Object *argv[]) @@ -6796,52 +6829,183 @@ Scheme_Object *scheme_make_evt_set(int argc, Scheme_Object **argv) return (Scheme_Object *)make_evt_set("internal-make-evt-set", argc, argv, 0, 1); } -void scheme_post_syncing_nacks(Syncing *syncing) - /* Also removes channel-syncers. Can be called multiple times. */ +static void post_syncing_nacks(Syncing *syncing, int as_escape) +/* Also removes channel-syncers. Can be called multiple times. */ { int i, c; - Scheme_Object *l; + Scheme_Object *l, *syncs = NULL; + Syncing *next; - if (syncing->thread && syncing->thread->sync_box) - syncing->thread->sync_box = NULL; + do { + if (as_escape) { + Scheme_Thread *p = syncing->thread; + + syncing->thread = NULL; + + if (p && p->sync_box) + scheme_post_sema_all(p->sync_box); + +#ifdef MZ_PRECISE_GC + if (p && p->place_channel_msg_in_flight) { + GC_destroy_orphan_msg_memory(p->place_channel_msg_in_flight); + p->place_channel_msg_in_flight = NULL; + } +#endif + } - if (syncing->set) { - c = syncing->set->argc; + if (syncing->thread && syncing->thread->sync_box) + syncing->thread->sync_box = NULL; + + if (syncing->set) { + c = syncing->set->argc; - for (i = 0; i < c; i++) { - if (SAME_TYPE(SCHEME_TYPE(syncing->set->argv[i]), scheme_channel_syncer_type)) - scheme_get_outof_line((Scheme_Channel_Syncer *)syncing->set->argv[i]); - if (syncing->nackss) { - if ((i + 1) != syncing->result) { - l = syncing->nackss[i]; - if (l) { - for (; SCHEME_PAIRP(l); l = SCHEME_CDR(l)) { - scheme_post_sema_all(SCHEME_CAR(l)); - } + for (i = 0; i < c; i++) { + if (SAME_TYPE(SCHEME_TYPE(syncing->set->argv[i]), scheme_channel_syncer_type)) + scheme_get_outof_line((Scheme_Channel_Syncer *)syncing->set->argv[i]); + else if (SAME_TYPE(SCHEME_TYPE(syncing->set->argv[i]), scheme_active_replace_evt_type)) { + /* Handle active_replace_evt specially to avoid stack overflow: */ + next = scheme_replace_evt_nack(syncing->set->argv[i]); + if (next) { + syncs = scheme_make_raw_pair((Scheme_Object *)next, syncs); + if ((i + 1) != syncing->result) + syncs = scheme_make_raw_pair(scheme_true, syncs); + } + } + + if (syncing->nackss) { + if ((i + 1) != syncing->result) { + l = syncing->nackss[i]; + if (l) { + for (; SCHEME_PAIRP(l); l = SCHEME_CDR(l)) { + scheme_post_sema_all(SCHEME_CAR(l)); + } + } + syncing->nackss[i] = NULL; + } + } + } + } + + if (!syncs) + syncing = NULL; + else { + if (SAME_OBJ(scheme_true, SCHEME_CAR(syncs))) { + as_escape = 1; + syncs = SCHEME_CDR(syncs); + } else + as_escape = 0; + + syncing = (Syncing *)SCHEME_CAR(syncs); + syncs = SCHEME_CDR(syncs); + } + } while (syncing); +} + +void scheme_post_syncing_nacks(Syncing *syncing) +{ + post_syncing_nacks(syncing, 0); +} + +void scheme_escape_during_sync(Syncing *syncing) +{ + post_syncing_nacks(syncing, 1); +} + +Scheme_Object *scheme_syncing_result(Syncing *syncing, int tailok) +{ + if (syncing->result) { + /* Apply wrap functions to the selected evt: */ + Scheme_Object *o, *l, *a, *to_call = NULL, *args[1], **mv = NULL; + int to_call_is_handle = 0, rc = 1; + Scheme_Cont_Frame_Data cframe; + + o = syncing->set->argv[syncing->result - 1]; + if (SAME_TYPE(SCHEME_TYPE(o), scheme_channel_syncer_type)) { + /* This is a put that got changed to a syncer, but not changed back */ + o = ((Scheme_Channel_Syncer *)o)->obj; + } + if (syncing->wrapss) { + l = syncing->wrapss[syncing->result - 1]; + if (l) { + for (; SCHEME_PAIRP(l); l = SCHEME_CDR(l)) { + a = SCHEME_CAR(l); + if (to_call) { + if (rc == 1) { + mv = args; + args[0] = o; + } + + /* Call wrap proc with breaks disabled */ + scheme_push_break_enable(&cframe, 0, 0); + + o = scheme_apply_multi(to_call, rc, mv); + + if (SAME_OBJ(o, SCHEME_MULTIPLE_VALUES)) { + rc = scheme_multiple_count; + mv = scheme_multiple_array; + scheme_detach_multple_array(mv); + } else { + rc = 1; + mv = NULL; + } + + scheme_pop_break_enable(&cframe, 0); + + to_call = NULL; + } + if (SCHEME_BOXP(a) || SCHEME_PROCP(a)) { + if (SCHEME_BOXP(a)) { + a = SCHEME_BOX_VAL(a); + to_call_is_handle = 1; + } + to_call = a; + } else if (SAME_TYPE(scheme_thread_suspend_type, SCHEME_TYPE(a)) + || SAME_TYPE(scheme_thread_resume_type, SCHEME_TYPE(a))) { + o = SCHEME_PTR2_VAL(a); + rc = 1; + } else { + o = a; + rc = 1; + } + } + + if (to_call) { + if (rc == 1) { + mv = args; + args[0] = o; + } + + /* If to_call is still a wrap-evt (not a handle-evt), + then set the config one more time: */ + if (!to_call_is_handle) { + scheme_push_break_enable(&cframe, 0, 0); + tailok = 0; + } + + if (tailok) { + return _scheme_tail_apply(to_call, rc, mv); + } else { + o = scheme_apply_multi(to_call, rc, mv); + + if (SAME_OBJ(o, SCHEME_MULTIPLE_VALUES)) { + rc = scheme_multiple_count; + mv = scheme_multiple_array; + scheme_detach_multple_array(mv); + if (!to_call_is_handle) + scheme_pop_break_enable(&cframe, 1); + return scheme_values(rc, mv); + } else { + if (!to_call_is_handle) + scheme_pop_break_enable(&cframe, 1); + return o; + } } - syncing->nackss[i] = NULL; } } } - } -} - -static void escape_during_sync(Syncing *syncing) -{ - Scheme_Thread *p = syncing->thread; - - syncing->thread = NULL; - - if (p && p->sync_box) - scheme_post_sema_all(p->sync_box); - scheme_post_syncing_nacks(syncing); - -#ifdef MZ_PRECISE_GC - if (p && p->place_channel_msg_in_flight) { - GC_destroy_orphan_msg_memory(p->place_channel_msg_in_flight); - p->place_channel_msg_in_flight = NULL; - } -#endif + return o; + } else + return NULL; } static Scheme_Object *do_sync(const char *name, int argc, Scheme_Object *argv[], @@ -6941,8 +7105,9 @@ static Scheme_Object *do_sync(const char *name, int argc, Scheme_Object *argv[], syncing->disable_break = scheme_current_thread; } - BEGIN_ESCAPEABLE(escape_during_sync, syncing); - scheme_block_until((Scheme_Ready_Fun)syncing_ready, syncing_needs_wakeup, + BEGIN_ESCAPEABLE(scheme_escape_during_sync, syncing); + scheme_block_until((Scheme_Ready_Fun)syncing_ready, + (Scheme_Needs_Wakeup_Fun)scheme_syncing_needs_wakeup, (Scheme_Object *)syncing, timeout); END_ESCAPEABLE(); @@ -6959,95 +7124,7 @@ static Scheme_Object *do_sync(const char *name, int argc, Scheme_Object *argv[], } if (syncing->result) { - /* Apply wrap functions to the selected evt: */ - Scheme_Object *o, *l, *a, *to_call = NULL, *args[1], **mv = NULL; - int to_call_is_handle = 0, rc = 1; - - o = evt_set->argv[syncing->result - 1]; - if (SAME_TYPE(SCHEME_TYPE(o), scheme_channel_syncer_type)) { - /* This is a put that got changed to a syncer, but not changed back */ - o = ((Scheme_Channel_Syncer *)o)->obj; - } - if (syncing->wrapss) { - l = syncing->wrapss[syncing->result - 1]; - if (l) { - for (; SCHEME_PAIRP(l); l = SCHEME_CDR(l)) { - a = SCHEME_CAR(l); - if (to_call) { - if (rc == 1) { - mv = args; - args[0] = o; - } - - /* Call wrap proc with breaks disabled */ - scheme_push_break_enable(&cframe, 0, 0); - - o = scheme_apply_multi(to_call, rc, mv); - - if (SAME_OBJ(o, SCHEME_MULTIPLE_VALUES)) { - rc = scheme_multiple_count; - mv = scheme_multiple_array; - scheme_detach_multple_array(mv); - } else { - rc = 1; - mv = NULL; - } - - scheme_pop_break_enable(&cframe, 0); - - to_call = NULL; - } - if (SCHEME_BOXP(a) || SCHEME_PROCP(a)) { - if (SCHEME_BOXP(a)) { - a = SCHEME_BOX_VAL(a); - to_call_is_handle = 1; - } - to_call = a; - } else if (SAME_TYPE(scheme_thread_suspend_type, SCHEME_TYPE(a)) - || SAME_TYPE(scheme_thread_resume_type, SCHEME_TYPE(a))) { - o = SCHEME_PTR2_VAL(a); - rc = 1; - } else { - o = a; - rc = 1; - } - } - - if (to_call) { - if (rc == 1) { - mv = args; - args[0] = o; - } - - /* If to_call is still a wrap-evt (not a handle-evt), - then set the config one more time: */ - if (!to_call_is_handle) { - scheme_push_break_enable(&cframe, 0, 0); - tailok = 0; - } - - if (tailok) { - return _scheme_tail_apply(to_call, rc, mv); - } else { - o = scheme_apply_multi(to_call, rc, mv); - - if (SAME_OBJ(o, SCHEME_MULTIPLE_VALUES)) { - rc = scheme_multiple_count; - mv = scheme_multiple_array; - scheme_detach_multple_array(mv); - if (!to_call_is_handle) - scheme_pop_break_enable(&cframe, 1); - return scheme_values(rc, mv); - } else { - if (!to_call_is_handle) - scheme_pop_break_enable(&cframe, 1); - return o; - } - } - } - } - } - return o; + return scheme_syncing_result(syncing, tailok); } else { if (with_timeout && SCHEME_PROCP(argv[0])) { if (tailok) diff --git a/racket/src/racket/src/type.c b/racket/src/racket/src/type.c index 5b16ba4a8f..02dd6ad084 100644 --- a/racket/src/racket/src/type.c +++ b/racket/src/racket/src/type.c @@ -258,6 +258,7 @@ scheme_init_type () set_name(scheme_evt_set_type, ""); set_name(scheme_wrap_evt_type, ""); set_name(scheme_handle_evt_type, ""); + set_name(scheme_replace_evt_type, ""); set_name(scheme_nack_evt_type, ""); set_name(scheme_nack_guard_evt_type, ""); set_name(scheme_poll_evt_type, "");