From 8b595ed1200539fa0c22ff0710d9efc5b9d79b52 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 14 Oct 2008 13:27:43 +0000 Subject: [PATCH] make-syntax-delta-introducer and adjusted binding in scheme/unit forms svn: r12032 --- collects/mzlib/private/unit-compiletime.ss | 65 ++- collects/mzlib/unit.ss | 39 +- .../scribblings/reference/stx-trans.scrbl | 14 + collects/tests/units/test-unit.ss | 37 ++ src/mzscheme/src/cstartup.inc | 460 +++++++++--------- src/mzscheme/src/schminc.h | 2 +- src/mzscheme/src/schvers.h | 4 +- src/mzscheme/src/stxobj.c | 62 +++ 8 files changed, 403 insertions(+), 280 deletions(-) diff --git a/collects/mzlib/private/unit-compiletime.ss b/collects/mzlib/private/unit-compiletime.ss index f7043eded6..af6b14daef 100644 --- a/collects/mzlib/private/unit-compiletime.ss +++ b/collects/mzlib/private/unit-compiletime.ss @@ -9,18 +9,18 @@ (require scheme/private/define-struct) (provide (struct var-info (syntax? exported? id)) - (struct signature (siginfo vars val-defs stx-defs)) + (struct signature (siginfo vars val-defs stx-defs orig-binder)) (rename build-siginfo make-siginfo) siginfo-names siginfo-ctime-ids siginfo-rtime-ids siginfo-subtype (struct signature-form (f)) - (struct unit-info (unit-id import-sig-ids export-sig-ids)) + (struct unit-info (unit-id import-sig-ids export-sig-ids orig-binder)) (struct link-record (linkid tag sigid siginfo)) unprocess-link-record-bind unprocess-link-record-use set!-trans-extract do-identifier process-tagged-import process-tagged-export lookup-signature lookup-def-unit make-id-mapper make-id-mappers sig-names sig-int-names sig-ext-names map-sig split-requires apply-mac complete-exports complete-imports check-duplicate-subs - process-spec process-spec2) + process-spec) (define-syntax (apply-mac stx) (syntax-case stx () @@ -101,8 +101,9 @@ ;; (make-signature siginfo ;; (listof identifier) ;; (listof (cons (listof identifier) syntax-object)) - ;; (listof (cons (listof identifier) syntax-object))) - (define-struct/proc signature (siginfo vars val-defs stx-defs) + ;; (listof (cons (listof identifier) syntax-object)) + ;; identifier) + (define-struct/proc signature (siginfo vars val-defs stx-defs orig-binder) (lambda (_ stx) (parameterize ((error-syntax stx)) (raise-stx-err "illegal use of signature name")))) @@ -113,8 +114,8 @@ (parameterize ((error-syntax stx)) (raise-stx-err "illegal use of signature form")))) - ;; (make-unit-info identifier (listof (cons symbol identifier)) (listof (cons symbol identifier))) - (define-struct/proc unit-info (unit-id import-sig-ids export-sig-ids deps) + ;; (make-unit-info identifier (listof (cons symbol identifier)) (listof (cons symbol identifier)) identifier) + (define-struct/proc unit-info (unit-id import-sig-ids export-sig-ids deps orig-binder) (lambda (struct stx) (with-syntax ((u (unit-info-unit-id struct))) (syntax-case stx (set!) @@ -223,13 +224,22 @@ sig))) ;; do-identifier : identifier (box (cons identifier siginfo)) -> sig - (define (do-identifier spec res) + (define (do-identifier spec res bind?) (let* ((sig (lookup-signature spec)) (vars (signature-vars sig)) (vals (signature-val-defs sig)) - (stxs (signature-stx-defs sig))) + (stxs (signature-stx-defs sig)) + (delta-introduce (if bind? + (let ([f (make-syntax-delta-introducer + spec + (signature-orig-binder sig))]) + (lambda (id) (syntax-local-introduce (f id)))) + values))) (set-box! res (cons spec (signature-siginfo sig))) - (map-sig intro-o-shadow + (map-sig (lambda (id) + (syntax-local-introduce + (syntax-local-get-shadower + (delta-introduce id)))) syntax-local-introduce (list (map cons vars vars) (map @@ -257,10 +267,6 @@ (define (sig-ext-names sig) (map cdr (sig-names sig))) - ;; intro-o-shadow : identifier -> identifier - (define (intro-o-shadow id) - (syntax-local-introduce (syntax-local-get-shadower id))) - ;; map-def : (identifier -> identifier) (syntax-object -> syntax-object) def -> def (define (map-def f g def) (cons (map (lambda (x) @@ -297,46 +303,46 @@ ;; process-tagged-import/export : syntax-object boolean -> tagged-sig - (define (process-tagged-import/export spec import?) + (define (process-tagged-import/export spec import? bind?) (define res (box #f)) (check-tagged-spec-syntax spec import? identifier?) (syntax-case spec (tag) ((tag sym spec) - (let ([s (process-import/export #'spec res)]) + (let ([s (process-import/export #'spec res bind?)]) (list (cons (syntax-e #'sym) (cdr (unbox res))) (cons (syntax-e #'sym) (car (unbox res))) s))) ((tag . _) (raise-stx-err "expected (tag symbol )" spec)) - (_ (let ([s (process-import/export spec res)]) + (_ (let ([s (process-import/export spec res bind?)]) (list (cons #f (cdr (unbox res))) (cons #f (car (unbox res))) s))))) ;; process-import/export : syntax-object (box (cons identifier) siginfo) -> sig - (define (process-import/export spec res) + (define (process-import/export spec res bind?) (syntax-case spec (only except prefix rename) (_ (identifier? spec) - (do-identifier spec res)) + (do-identifier spec res bind?)) ((only sub-spec id ...) - (do-only/except (process-import/export #'sub-spec res) + (do-only/except (process-import/export #'sub-spec res bind?) (syntax->list #'(id ...)) (lambda (x) x) (lambda (id) (car (generate-temporaries #`(#,id)))))) ((except sub-spec id ...) - (do-only/except (process-import/export #'sub-spec res) + (do-only/except (process-import/export #'sub-spec res bind?) (syntax->list #'(id ...)) (lambda (id) (car (generate-temporaries #`(#,id)))) (lambda (x) x))) ((prefix pid sub-spec) - (do-prefix (process-import/export #'sub-spec res) #'pid)) + (do-prefix (process-import/export #'sub-spec res bind?) #'pid)) ((rename sub-spec (internal external) ...) (let* ((sig-res - (do-rename (process-import/export #'sub-spec res) + (do-rename (process-import/export #'sub-spec res bind?) #'(internal ...) #'(external ...))) (dup (check-duplicate-identifier (sig-int-names sig-res)))) @@ -347,21 +353,14 @@ sig-res)))) (define (process-tagged-import spec) - (process-tagged-import/export spec #t)) + (process-tagged-import/export spec #t #t)) (define (process-tagged-export spec) - (process-tagged-import/export spec #f)) + (process-tagged-import/export spec #f #f)) ;; process-spec : syntax-object -> sig (define (process-spec spec) (check-tagged-spec-syntax spec #f identifier?) - (process-import/export spec (box #f))) - - ;; process-spec2 : syntax-object -> identifier? - (define (process-spec2 spec) - (define b (box #f)) - (check-tagged-spec-syntax spec #t identifier?) - (process-import/export spec b) - (car (unbox b))) + (process-import/export spec (box #f) #t)) ; ;; extract-siginfo : (union import-spec export-spec) -> ??? diff --git a/collects/mzlib/unit.ss b/collects/mzlib/unit.ss index c38df307e8..60072b633c 100644 --- a/collects/mzlib/unit.ss +++ b/collects/mzlib/unit.ss @@ -221,7 +221,8 @@ (list (cons (list (quote-syntax sid) ...) ((syntax-local-certifier) (quote-syntax sbody))) - ...)))))))) + ...) + (quote-syntax #,sigid)))))))) (else (syntax-case (car sig-exprs) (define-values define-syntaxes) (x @@ -1274,7 +1275,8 @@ (make-unit-info ((syntax-local-certifier) (quote-syntax u)) (list (cons 'itag (quote-syntax isig)) ...) (list (cons 'etag (quote-syntax esig)) ...) - (list (cons 'deptag (quote-syntax deptag)) ...)))))))))) + (list (cons 'deptag (quote-syntax deptag)) ...) + (quote-syntax name)))))))))) ((_) (raise-stx-err err-msg)))) @@ -1356,9 +1358,12 @@ (define-syntax/err-param (define-values/invoke-unit/infer stx) (syntax-case stx () ((_ u) - (let ((ui (lookup-def-unit #'u))) - (with-syntax (((sig ...) (map unprocess-tagged-id (unit-info-export-sig-ids ui))) - ((isig ...) (map unprocess-tagged-id (unit-info-import-sig-ids ui)))) + (let* ((ui (lookup-def-unit #'u)) + (unprocess (let ([i (make-syntax-delta-introducer #'u (unit-info-orig-binder ui))]) + (lambda (p) + (unprocess-tagged-id (cons (car p) (i (cdr p)))))))) + (with-syntax (((sig ...) (map unprocess (unit-info-export-sig-ids ui))) + ((isig ...) (map unprocess (unit-info-import-sig-ids ui)))) (quasisyntax/loc stx (define-values/invoke-unit u (import isig ...) (export sig ...)))))) ((_) @@ -1437,19 +1442,23 @@ s)) (apply make-link-record l)) - (define (process-tagged-sigid sid) - (make-link-record (car sid) #f (cdr sid) (signature-siginfo (lookup-signature (cdr sid))))) + (define ((process-tagged-sigid introducer) sid) + (make-link-record (car sid) #f (introducer (cdr sid)) (signature-siginfo (lookup-signature (cdr sid))))) (syntax-case stx () (((import ...) (export ...) (((out ...) u l ...) ...)) - (let* ([units (map lookup-def-unit (syntax->list #'(u ...)))] + (let* ([us (syntax->list #'(u ...))] + [units (map lookup-def-unit us)] [import-sigs (map process-signature (syntax->list #'(import ...)))] + [sig-introducers (map (lambda (unit u) + (make-syntax-delta-introducer u (unit-info-orig-binder unit))) + units us)] [sub-outs (map - (lambda (outs unit) + (lambda (outs unit sig-introducer) (define o (map (lambda (clause) @@ -1457,10 +1466,11 @@ (make-link-record (car c) (cadr c) (cddr c) (signature-siginfo (lookup-signature (cddr c))))) (syntax->list outs))) - (complete-exports (map process-tagged-sigid (unit-info-export-sig-ids unit)) + (complete-exports (map (process-tagged-sigid sig-introducer) (unit-info-export-sig-ids unit)) o)) (syntax->list #'((out ...) ...)) - units)] + units + sig-introducers)] [link-defs (append import-sigs (apply append sub-outs))]) (define lnk-table (make-bound-identifier-mapping)) @@ -1486,7 +1496,7 @@ (let ([sub-ins (map - (lambda (ins unit unit-stx) + (lambda (ins unit sig-introducer unit-stx) (define is (syntax->list ins)) (define lrs (map @@ -1510,12 +1520,13 @@ is) (complete-imports sig-table lrs - (map process-tagged-sigid + (map (process-tagged-sigid sig-introducer) (unit-info-import-sig-ids unit)) unit-stx)) (syntax->list #'((l ...) ...)) units - (syntax->list #'(u ...)))] + sig-introducers + us)] [exports (map (lambda (e) diff --git a/collects/scribblings/reference/stx-trans.scrbl b/collects/scribblings/reference/stx-trans.scrbl index 9b25819288..4ef99b1666 100644 --- a/collects/scribblings/reference/stx-trans.scrbl +++ b/collects/scribblings/reference/stx-trans.scrbl @@ -440,6 +440,20 @@ mark}. Multiple applications of the same @scheme[make-syntax-introducer] result procedure use the same mark, and different result procedures use distinct marks.} +@defproc[(make-syntax-delta-introducer [ext-stx syntax?] [base-stx syntax?]) + (syntax? . -> . syntax?)]{ + +Produces a procedure that behaves like +@scheme[syntax-local-introduce], but using the @tech{syntax +marks} of @scheme[ext-stx] that are not shared with @scheme[base-stx]. + +This procedure is useful when @scheme[_m-id] has a transformer binding +that records some @scheme[_orig-id], and a use of @scheme[_m-id] +introduces a binding of @scheme[_orig-id]. In that case, the +@tech{syntax marks} in the use of @scheme[_m-id] since the binding of +@scheme[_m-id] should be transferred to the binding instance of +@scheme[_orig-id], so that it captures uses with the same lexical +context as the use of @scheme[_m-id].} @defproc[(syntax-local-transforming-module-provides?) boolean?]{ diff --git a/collects/tests/units/test-unit.ss b/collects/tests/units/test-unit.ss index b02dd94937..061e142937 100644 --- a/collects/tests/units/test-unit.ss +++ b/collects/tests/units/test-unit.ss @@ -1640,3 +1640,40 @@ (define x 19)) (test '(3 4 19 18) (invoke-unit (compound-unit/infer (import) (export) (link u2 u1))))) + + +(define-signature sig^ (u-a)) + +(define unit@ + (unit + (import) + (export sig^) + + (define u-a 'zero))) + +(define-syntax (use-unit stx) + (syntax-case stx () + [(_) + #'(let () + (define-values/invoke-unit unit@ (import) (export sig^)) + u-a)])) + +(define-syntax (use-unit-badly1 stx) + (syntax-case stx () + [(_ u-a) + #'(let () + (define-values/invoke-unit unit@ (import) (export sig^)) + u-a)])) + +(define-syntax (use-unit-badly2 stx) + (syntax-case stx () + [(_ sig^) + #'(let () + (define-values/invoke-unit unit@ (import) (export sig^)) + u-a)])) + +(test 'zero (use-unit)) +(test-runtime-error exn:fail:contract:variable? "context mismatch; no u-a" + (use-unit-badly1 u-a)) +(test-runtime-error exn:fail:contract:variable? "context mismatch; no u-a" + (use-unit-badly2 sig^)) diff --git a/src/mzscheme/src/cstartup.inc b/src/mzscheme/src/cstartup.inc index 75dde36202..83c12af652 100644 --- a/src/mzscheme/src/cstartup.inc +++ b/src/mzscheme/src/cstartup.inc @@ -1,5 +1,5 @@ { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,49,46,49,46,50,50,0,0,0,1,0,0,6,0,9,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,49,46,49,46,51,50,0,0,0,1,0,0,6,0,9,0, 13,0,26,0,29,0,34,0,41,0,46,0,51,0,58,0,65,0,69,0,78, 0,84,0,98,0,112,0,115,0,119,0,121,0,132,0,134,0,148,0,155,0, 177,0,179,0,193,0,253,0,23,1,32,1,41,1,51,1,68,1,107,1,146, @@ -59,10 +59,10 @@ 115,101,116,45,102,105,114,115,116,11,2,24,201,250,22,74,2,20,9,248,22, 65,203,27,248,22,65,248,22,132,4,23,197,1,28,248,22,71,23,194,2,20, 15,159,36,35,36,249,22,189,3,80,158,38,35,27,248,22,132,4,248,22,64, -23,198,2,28,249,22,160,8,62,61,62,248,22,190,3,248,22,88,23,197,2, +23,198,2,28,249,22,161,8,62,61,62,248,22,190,3,248,22,88,23,197,2, 250,22,73,2,20,248,22,73,249,22,73,21,93,2,25,248,22,64,199,250,22, 74,2,8,249,22,73,2,25,249,22,73,248,22,97,203,2,25,248,22,65,202, -251,22,73,2,17,28,249,22,160,8,248,22,190,3,248,22,64,23,201,2,64, +251,22,73,2,17,28,249,22,161,8,248,22,190,3,248,22,64,23,201,2,64, 101,108,115,101,10,248,22,64,23,198,2,250,22,74,2,20,9,248,22,65,23, 201,1,249,22,63,2,8,248,22,65,23,203,1,99,8,31,8,30,8,29,8, 28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,57,57,56,50,16,4, @@ -99,7 +99,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 2032); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,49,46,49,46,50,60,0,0,0,1,0,0,3,0,16,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,49,46,49,46,51,60,0,0,0,1,0,0,3,0,16,0, 21,0,38,0,53,0,71,0,87,0,97,0,115,0,135,0,151,0,169,0,200, 0,229,0,251,0,9,1,15,1,29,1,34,1,44,1,52,1,80,1,112,1, 157,1,202,1,226,1,9,2,11,2,68,2,158,3,199,3,33,5,137,5,241, @@ -131,177 +131,177 @@ 111,114,32,98,121,116,101,32,115,116,114,105,110,103,6,36,36,99,97,110,110, 111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116,111,32,97,32, 114,111,111,116,32,112,97,116,104,58,32,5,0,27,20,14,159,80,158,36,50, -250,80,158,39,51,249,22,27,11,80,158,41,50,22,176,12,10,248,22,153,5, -23,196,2,28,248,22,150,6,23,194,2,12,87,94,248,22,163,8,23,194,1, +250,80,158,39,51,249,22,27,11,80,158,41,50,22,177,12,10,248,22,154,5, +23,196,2,28,248,22,151,6,23,194,2,12,87,94,248,22,164,8,23,194,1, 248,80,159,37,53,36,195,28,248,22,71,23,195,2,9,27,248,22,64,23,196, -2,27,28,248,22,157,13,23,195,2,23,194,1,28,248,22,156,13,23,195,2, -249,22,158,13,23,196,1,250,80,158,42,48,248,22,172,13,2,20,11,10,250, -80,158,40,48,248,22,172,13,2,20,23,197,1,10,28,23,193,2,249,22,63, -248,22,160,13,249,22,158,13,23,198,1,247,22,173,13,27,248,22,65,23,200, -1,28,248,22,71,23,194,2,9,27,248,22,64,23,195,2,27,28,248,22,157, -13,23,195,2,23,194,1,28,248,22,156,13,23,195,2,249,22,158,13,23,196, -1,250,80,158,47,48,248,22,172,13,2,20,11,10,250,80,158,45,48,248,22, -172,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,160,13,249,22, -158,13,23,198,1,247,22,173,13,248,80,159,45,52,36,248,22,65,23,199,1, +2,27,28,248,22,158,13,23,195,2,23,194,1,28,248,22,157,13,23,195,2, +249,22,159,13,23,196,1,250,80,158,42,48,248,22,173,13,2,20,11,10,250, +80,158,40,48,248,22,173,13,2,20,23,197,1,10,28,23,193,2,249,22,63, +248,22,161,13,249,22,159,13,23,198,1,247,22,174,13,27,248,22,65,23,200, +1,28,248,22,71,23,194,2,9,27,248,22,64,23,195,2,27,28,248,22,158, +13,23,195,2,23,194,1,28,248,22,157,13,23,195,2,249,22,159,13,23,196, +1,250,80,158,47,48,248,22,173,13,2,20,11,10,250,80,158,45,48,248,22, +173,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,161,13,249,22, +159,13,23,198,1,247,22,174,13,248,80,159,45,52,36,248,22,65,23,199,1, 87,94,23,193,1,248,80,159,43,52,36,248,22,65,23,197,1,87,94,23,193, 1,27,248,22,65,23,198,1,28,248,22,71,23,194,2,9,27,248,22,64,23, -195,2,27,28,248,22,157,13,23,195,2,23,194,1,28,248,22,156,13,23,195, -2,249,22,158,13,23,196,1,250,80,158,45,48,248,22,172,13,2,20,11,10, -250,80,158,43,48,248,22,172,13,2,20,23,197,1,10,28,23,193,2,249,22, -63,248,22,160,13,249,22,158,13,23,198,1,247,22,173,13,248,80,159,43,52, -36,248,22,65,23,199,1,248,80,159,41,52,36,248,22,65,196,27,248,22,133, -13,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,22,155,6,23,195, -2,27,248,22,155,13,195,28,192,192,248,22,156,13,195,11,87,94,28,28,248, -22,134,13,23,195,2,10,27,248,22,133,13,23,196,2,28,23,193,2,192,87, -94,23,193,1,28,248,22,155,6,23,196,2,27,248,22,155,13,23,197,2,28, -23,193,2,192,87,94,23,193,1,248,22,156,13,23,197,2,11,12,250,22,190, +195,2,27,28,248,22,158,13,23,195,2,23,194,1,28,248,22,157,13,23,195, +2,249,22,159,13,23,196,1,250,80,158,45,48,248,22,173,13,2,20,11,10, +250,80,158,43,48,248,22,173,13,2,20,23,197,1,10,28,23,193,2,249,22, +63,248,22,161,13,249,22,159,13,23,198,1,247,22,174,13,248,80,159,43,52, +36,248,22,65,23,199,1,248,80,159,41,52,36,248,22,65,196,27,248,22,134, +13,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,22,156,6,23,195, +2,27,248,22,156,13,195,28,192,192,248,22,157,13,195,11,87,94,28,28,248, +22,135,13,23,195,2,10,27,248,22,134,13,23,196,2,28,23,193,2,192,87, +94,23,193,1,28,248,22,156,6,23,196,2,27,248,22,156,13,23,197,2,28, +23,193,2,192,87,94,23,193,1,248,22,157,13,23,197,2,11,12,250,22,191, 8,76,110,111,114,109,97,108,45,112,97,116,104,45,99,97,115,101,6,42,42, 112,97,116,104,32,40,102,111,114,32,97,110,121,32,115,121,115,116,101,109,41, 32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103, -23,197,2,28,28,248,22,134,13,23,195,2,249,22,160,8,248,22,135,13,23, -197,2,2,21,249,22,160,8,247,22,174,7,2,21,27,28,248,22,155,6,23, -196,2,23,195,2,248,22,164,7,248,22,138,13,23,197,2,28,249,22,185,13, +23,197,2,28,28,248,22,135,13,23,195,2,249,22,161,8,248,22,136,13,23, +197,2,2,21,249,22,161,8,247,22,175,7,2,21,27,28,248,22,156,6,23, +196,2,23,195,2,248,22,165,7,248,22,139,13,23,197,2,28,249,22,186,13, 0,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,92, -93,34,23,195,2,28,248,22,155,6,195,248,22,141,13,195,194,27,248,22,130, -7,23,195,1,249,22,142,13,248,22,167,7,250,22,191,13,0,6,35,114,120, -34,47,34,28,249,22,185,13,0,22,35,114,120,34,91,47,92,92,93,91,46, -32,93,43,91,47,92,92,93,42,36,34,23,201,2,23,199,1,250,22,191,13, +93,34,23,195,2,28,248,22,156,6,195,248,22,142,13,195,194,27,248,22,131, +7,23,195,1,249,22,143,13,248,22,168,7,250,22,128,14,0,6,35,114,120, +34,47,34,28,249,22,186,13,0,22,35,114,120,34,91,47,92,92,93,91,46, +32,93,43,91,47,92,92,93,42,36,34,23,201,2,23,199,1,250,22,128,14, 0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41,36,34, -23,202,1,6,2,2,92,49,80,158,43,36,2,21,28,248,22,155,6,194,248, -22,141,13,194,193,87,94,28,27,248,22,133,13,23,196,2,28,23,193,2,192, -87,94,23,193,1,28,248,22,155,6,23,196,2,27,248,22,155,13,23,197,2, -28,23,193,2,192,87,94,23,193,1,248,22,156,13,23,197,2,11,12,250,22, -190,8,23,196,2,2,22,23,197,2,28,248,22,155,13,23,195,2,12,248,22, -152,11,249,22,161,10,248,22,184,6,250,22,139,7,2,23,23,200,1,23,201, -1,247,22,23,87,94,28,27,248,22,133,13,23,196,2,28,23,193,2,192,87, -94,23,193,1,28,248,22,155,6,23,196,2,27,248,22,155,13,23,197,2,28, -23,193,2,192,87,94,23,193,1,248,22,156,13,23,197,2,11,12,250,22,190, -8,23,196,2,2,22,23,197,2,28,248,22,155,13,23,195,2,12,248,22,152, -11,249,22,161,10,248,22,184,6,250,22,139,7,2,23,23,200,1,23,201,1, -247,22,23,87,94,87,94,28,27,248,22,133,13,23,196,2,28,23,193,2,192, -87,94,23,193,1,28,248,22,155,6,23,196,2,27,248,22,155,13,23,197,2, -28,23,193,2,192,87,94,23,193,1,248,22,156,13,23,197,2,11,12,250,22, -190,8,195,2,22,23,197,2,28,248,22,155,13,23,195,2,12,248,22,152,11, -249,22,161,10,248,22,184,6,250,22,139,7,2,23,199,23,201,1,247,22,23, -249,22,3,89,162,8,44,36,49,9,223,2,33,34,196,248,22,152,11,249,22, -191,10,23,196,1,247,22,23,87,94,250,80,159,38,39,36,2,7,196,197,251, +23,202,1,6,2,2,92,49,80,158,43,36,2,21,28,248,22,156,6,194,248, +22,142,13,194,193,87,94,28,27,248,22,134,13,23,196,2,28,23,193,2,192, +87,94,23,193,1,28,248,22,156,6,23,196,2,27,248,22,156,13,23,197,2, +28,23,193,2,192,87,94,23,193,1,248,22,157,13,23,197,2,11,12,250,22, +191,8,23,196,2,2,22,23,197,2,28,248,22,156,13,23,195,2,12,248,22, +153,11,249,22,162,10,248,22,185,6,250,22,140,7,2,23,23,200,1,23,201, +1,247,22,23,87,94,28,27,248,22,134,13,23,196,2,28,23,193,2,192,87, +94,23,193,1,28,248,22,156,6,23,196,2,27,248,22,156,13,23,197,2,28, +23,193,2,192,87,94,23,193,1,248,22,157,13,23,197,2,11,12,250,22,191, +8,23,196,2,2,22,23,197,2,28,248,22,156,13,23,195,2,12,248,22,153, +11,249,22,162,10,248,22,185,6,250,22,140,7,2,23,23,200,1,23,201,1, +247,22,23,87,94,87,94,28,27,248,22,134,13,23,196,2,28,23,193,2,192, +87,94,23,193,1,28,248,22,156,6,23,196,2,27,248,22,156,13,23,197,2, +28,23,193,2,192,87,94,23,193,1,248,22,157,13,23,197,2,11,12,250,22, +191,8,195,2,22,23,197,2,28,248,22,156,13,23,195,2,12,248,22,153,11, +249,22,162,10,248,22,185,6,250,22,140,7,2,23,199,23,201,1,247,22,23, +249,22,3,89,162,8,44,36,49,9,223,2,33,34,196,248,22,153,11,249,22, +128,11,23,196,1,247,22,23,87,94,250,80,159,38,39,36,2,7,196,197,251, 80,159,39,41,36,2,7,32,0,89,162,8,44,36,44,9,222,33,36,197,198, 32,38,89,162,43,41,58,65,99,108,111,111,112,222,33,39,28,248,22,71,23, -199,2,87,94,23,198,1,248,23,196,1,251,22,139,7,2,24,23,199,1,28, -248,22,71,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,151,13,23, -204,1,23,205,1,23,198,1,27,249,22,151,13,248,22,64,23,202,2,23,199, -2,28,248,22,146,13,23,194,2,27,250,22,1,22,151,13,23,197,1,23,202, -2,28,248,22,146,13,23,194,2,192,87,94,23,193,1,27,248,22,65,23,202, -1,28,248,22,71,23,194,2,87,94,23,193,1,248,23,199,1,251,22,139,7, +199,2,87,94,23,198,1,248,23,196,1,251,22,140,7,2,24,23,199,1,28, +248,22,71,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,152,13,23, +204,1,23,205,1,23,198,1,27,249,22,152,13,248,22,64,23,202,2,23,199, +2,28,248,22,147,13,23,194,2,27,250,22,1,22,152,13,23,197,1,23,202, +2,28,248,22,147,13,23,194,2,192,87,94,23,193,1,27,248,22,65,23,202, +1,28,248,22,71,23,194,2,87,94,23,193,1,248,23,199,1,251,22,140,7, 2,24,23,202,1,28,248,22,71,23,206,2,87,94,23,205,1,23,204,1,250, -22,1,22,151,13,23,207,1,23,208,1,23,201,1,27,249,22,151,13,248,22, -64,23,197,2,23,202,2,28,248,22,146,13,23,194,2,27,250,22,1,22,151, -13,23,197,1,204,28,248,22,146,13,193,192,253,2,38,203,204,205,206,23,15, +22,1,22,152,13,23,207,1,23,208,1,23,201,1,27,249,22,152,13,248,22, +64,23,197,2,23,202,2,28,248,22,147,13,23,194,2,27,250,22,1,22,152, +13,23,197,1,204,28,248,22,147,13,193,192,253,2,38,203,204,205,206,23,15, 248,22,65,201,253,2,38,202,203,204,205,206,248,22,65,200,87,94,23,193,1, 27,248,22,65,23,201,1,28,248,22,71,23,194,2,87,94,23,193,1,248,23, -198,1,251,22,139,7,2,24,23,201,1,28,248,22,71,23,205,2,87,94,23, -204,1,23,203,1,250,22,1,22,151,13,23,206,1,23,207,1,23,200,1,27, -249,22,151,13,248,22,64,23,197,2,23,201,2,28,248,22,146,13,23,194,2, -27,250,22,1,22,151,13,23,197,1,203,28,248,22,146,13,193,192,253,2,38, +198,1,251,22,140,7,2,24,23,201,1,28,248,22,71,23,205,2,87,94,23, +204,1,23,203,1,250,22,1,22,152,13,23,206,1,23,207,1,23,200,1,27, +249,22,152,13,248,22,64,23,197,2,23,201,2,28,248,22,147,13,23,194,2, +27,250,22,1,22,152,13,23,197,1,203,28,248,22,147,13,193,192,253,2,38, 202,203,204,205,206,248,22,65,201,253,2,38,201,202,203,204,205,248,22,65,200, -27,247,22,174,13,253,2,38,198,199,200,201,202,198,87,95,28,28,248,22,134, -13,23,194,2,10,27,248,22,133,13,23,195,2,28,23,193,2,192,87,94,23, -193,1,28,248,22,155,6,23,195,2,27,248,22,155,13,23,196,2,28,23,193, -2,192,87,94,23,193,1,248,22,156,13,23,196,2,11,12,252,22,190,8,23, -200,2,2,25,35,23,198,2,23,199,2,28,28,248,22,155,6,23,195,2,10, -248,22,143,7,23,195,2,87,94,23,194,1,12,252,22,190,8,23,200,2,2, -26,36,23,198,2,23,199,1,91,159,38,11,90,161,38,35,11,248,22,154,13, -23,197,2,87,94,23,195,1,87,94,28,192,12,250,22,191,8,23,201,1,2, +27,247,22,175,13,253,2,38,198,199,200,201,202,198,87,95,28,28,248,22,135, +13,23,194,2,10,27,248,22,134,13,23,195,2,28,23,193,2,192,87,94,23, +193,1,28,248,22,156,6,23,195,2,27,248,22,156,13,23,196,2,28,23,193, +2,192,87,94,23,193,1,248,22,157,13,23,196,2,11,12,252,22,191,8,23, +200,2,2,25,35,23,198,2,23,199,2,28,28,248,22,156,6,23,195,2,10, +248,22,144,7,23,195,2,87,94,23,194,1,12,252,22,191,8,23,200,2,2, +26,36,23,198,2,23,199,1,91,159,38,11,90,161,38,35,11,248,22,155,13, +23,197,2,87,94,23,195,1,87,94,28,192,12,250,22,128,9,23,201,1,2, 27,23,199,1,249,22,7,194,195,91,159,37,11,90,161,37,35,11,87,95,28, -28,248,22,134,13,23,196,2,10,27,248,22,133,13,23,197,2,28,23,193,2, -192,87,94,23,193,1,28,248,22,155,6,23,197,2,27,248,22,155,13,23,198, -2,28,23,193,2,192,87,94,23,193,1,248,22,156,13,23,198,2,11,12,252, -22,190,8,2,10,2,25,35,23,200,2,23,201,2,28,28,248,22,155,6,23, -197,2,10,248,22,143,7,23,197,2,12,252,22,190,8,2,10,2,26,36,23, -200,2,23,201,2,91,159,38,11,90,161,38,35,11,248,22,154,13,23,199,2, -87,94,23,195,1,87,94,28,23,193,2,12,250,22,191,8,2,10,2,27,23, -201,2,249,22,7,23,195,1,23,196,1,27,249,22,143,13,250,22,190,13,0, +28,248,22,135,13,23,196,2,10,27,248,22,134,13,23,197,2,28,23,193,2, +192,87,94,23,193,1,28,248,22,156,6,23,197,2,27,248,22,156,13,23,198, +2,28,23,193,2,192,87,94,23,193,1,248,22,157,13,23,198,2,11,12,252, +22,191,8,2,10,2,25,35,23,200,2,23,201,2,28,28,248,22,156,6,23, +197,2,10,248,22,144,7,23,197,2,12,252,22,191,8,2,10,2,26,36,23, +200,2,23,201,2,91,159,38,11,90,161,38,35,11,248,22,155,13,23,199,2, +87,94,23,195,1,87,94,28,23,193,2,12,250,22,128,9,2,10,2,27,23, +201,2,249,22,7,23,195,1,23,196,1,27,249,22,144,13,250,22,191,13,0, 18,35,114,120,35,34,40,91,46,93,91,94,46,93,42,124,41,36,34,248,22, -139,13,23,201,1,28,248,22,155,6,23,203,2,249,22,167,7,23,204,1,8, -63,23,202,1,28,248,22,134,13,23,199,2,248,22,135,13,23,199,1,87,94, -23,198,1,247,22,136,13,28,248,22,133,13,194,249,22,151,13,195,194,192,91, -159,37,11,90,161,37,35,11,87,95,28,28,248,22,134,13,23,196,2,10,27, -248,22,133,13,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,155, -6,23,197,2,27,248,22,155,13,23,198,2,28,23,193,2,192,87,94,23,193, -1,248,22,156,13,23,198,2,11,12,252,22,190,8,2,11,2,25,35,23,200, -2,23,201,2,28,28,248,22,155,6,23,197,2,10,248,22,143,7,23,197,2, -12,252,22,190,8,2,11,2,26,36,23,200,2,23,201,2,91,159,38,11,90, -161,38,35,11,248,22,154,13,23,199,2,87,94,23,195,1,87,94,28,23,193, -2,12,250,22,191,8,2,11,2,27,23,201,2,249,22,7,23,195,1,23,196, -1,27,249,22,143,13,249,22,153,7,250,22,191,13,0,9,35,114,120,35,34, -91,46,93,34,248,22,139,13,23,203,1,6,1,1,95,28,248,22,155,6,23, -202,2,249,22,167,7,23,203,1,8,63,23,201,1,28,248,22,134,13,23,199, -2,248,22,135,13,23,199,1,87,94,23,198,1,247,22,136,13,28,248,22,133, -13,194,249,22,151,13,195,194,192,249,247,22,186,4,194,11,249,80,158,37,46, -9,9,249,80,158,37,46,195,9,27,247,22,176,13,249,80,158,38,47,28,23, -195,2,27,248,22,172,7,6,11,11,80,76,84,67,79,76,76,69,67,84,83, -28,192,192,6,0,0,6,0,0,27,28,23,196,1,250,22,151,13,248,22,172, -13,69,97,100,100,111,110,45,100,105,114,247,22,170,7,6,8,8,99,111,108, +140,13,23,201,1,28,248,22,156,6,23,203,2,249,22,168,7,23,204,1,8, +63,23,202,1,28,248,22,135,13,23,199,2,248,22,136,13,23,199,1,87,94, +23,198,1,247,22,137,13,28,248,22,134,13,194,249,22,152,13,195,194,192,91, +159,37,11,90,161,37,35,11,87,95,28,28,248,22,135,13,23,196,2,10,27, +248,22,134,13,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,156, +6,23,197,2,27,248,22,156,13,23,198,2,28,23,193,2,192,87,94,23,193, +1,248,22,157,13,23,198,2,11,12,252,22,191,8,2,11,2,25,35,23,200, +2,23,201,2,28,28,248,22,156,6,23,197,2,10,248,22,144,7,23,197,2, +12,252,22,191,8,2,11,2,26,36,23,200,2,23,201,2,91,159,38,11,90, +161,38,35,11,248,22,155,13,23,199,2,87,94,23,195,1,87,94,28,23,193, +2,12,250,22,128,9,2,11,2,27,23,201,2,249,22,7,23,195,1,23,196, +1,27,249,22,144,13,249,22,154,7,250,22,128,14,0,9,35,114,120,35,34, +91,46,93,34,248,22,140,13,23,203,1,6,1,1,95,28,248,22,156,6,23, +202,2,249,22,168,7,23,203,1,8,63,23,201,1,28,248,22,135,13,23,199, +2,248,22,136,13,23,199,1,87,94,23,198,1,247,22,137,13,28,248,22,134, +13,194,249,22,152,13,195,194,192,249,247,22,187,4,194,11,249,80,158,37,46, +9,9,249,80,158,37,46,195,9,27,247,22,177,13,249,80,158,38,47,28,23, +195,2,27,248,22,173,7,6,11,11,80,76,84,67,79,76,76,69,67,84,83, +28,192,192,6,0,0,6,0,0,27,28,23,196,1,250,22,152,13,248,22,173, +13,69,97,100,100,111,110,45,100,105,114,247,22,171,7,6,8,8,99,111,108, 108,101,99,116,115,11,27,248,80,159,41,52,36,250,22,77,23,203,1,248,22, -73,248,22,172,13,72,99,111,108,108,101,99,116,115,45,100,105,114,23,204,1, +73,248,22,173,13,72,99,111,108,108,101,99,116,115,45,100,105,114,23,204,1, 28,23,194,2,249,22,63,23,196,1,23,195,1,192,32,48,89,162,8,44,38, -54,2,19,222,33,49,27,249,22,183,13,23,197,2,23,198,2,28,23,193,2, +54,2,19,222,33,49,27,249,22,184,13,23,197,2,23,198,2,28,23,193,2, 87,94,23,196,1,27,248,22,88,23,195,2,27,27,248,22,97,23,197,1,27, -249,22,183,13,23,201,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248, +249,22,184,13,23,201,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248, 22,88,23,195,2,27,250,2,48,23,203,2,23,204,1,248,22,97,23,199,1, -28,249,22,149,7,23,196,2,2,28,249,22,77,23,202,2,194,249,22,63,248, -22,142,13,23,197,1,23,195,1,87,95,23,199,1,23,193,1,28,249,22,149, -7,23,196,2,2,28,249,22,77,23,200,2,9,249,22,63,248,22,142,13,23, -197,1,9,28,249,22,149,7,23,196,2,2,28,249,22,77,197,194,87,94,23, -196,1,249,22,63,248,22,142,13,23,197,1,194,87,94,23,193,1,28,249,22, -149,7,23,198,2,2,28,249,22,77,195,9,87,94,23,194,1,249,22,63,248, -22,142,13,23,199,1,9,87,95,28,28,248,22,143,7,194,10,248,22,155,6, -194,12,250,22,190,8,2,14,6,21,21,98,121,116,101,32,115,116,114,105,110, +28,249,22,150,7,23,196,2,2,28,249,22,77,23,202,2,194,249,22,63,248, +22,143,13,23,197,1,23,195,1,87,95,23,199,1,23,193,1,28,249,22,150, +7,23,196,2,2,28,249,22,77,23,200,2,9,249,22,63,248,22,143,13,23, +197,1,9,28,249,22,150,7,23,196,2,2,28,249,22,77,197,194,87,94,23, +196,1,249,22,63,248,22,143,13,23,197,1,194,87,94,23,193,1,28,249,22, +150,7,23,198,2,2,28,249,22,77,195,9,87,94,23,194,1,249,22,63,248, +22,143,13,23,199,1,9,87,95,28,28,248,22,144,7,194,10,248,22,156,6, +194,12,250,22,191,8,2,14,6,21,21,98,121,116,101,32,115,116,114,105,110, 103,32,111,114,32,115,116,114,105,110,103,196,28,28,248,22,72,195,249,22,4, -22,133,13,196,11,12,250,22,190,8,2,14,6,13,13,108,105,115,116,32,111, -102,32,112,97,116,104,115,197,250,2,48,197,195,28,248,22,155,6,197,248,22, -166,7,197,196,32,51,89,162,8,44,39,57,2,19,222,33,54,32,52,89,162, +22,134,13,196,11,12,250,22,191,8,2,14,6,13,13,108,105,115,116,32,111, +102,32,112,97,116,104,115,197,250,2,48,197,195,28,248,22,156,6,197,248,22, +167,7,197,196,32,51,89,162,8,44,39,57,2,19,222,33,54,32,52,89,162, 8,44,38,54,70,102,111,117,110,100,45,101,120,101,99,222,33,53,28,23,193, -2,91,159,38,11,90,161,38,35,11,248,22,154,13,23,199,2,87,95,23,195, -1,23,194,1,27,28,23,198,2,27,248,22,159,13,23,201,2,28,249,22,162, -8,23,195,2,23,202,2,11,28,248,22,155,13,23,194,2,250,2,52,23,201, -2,23,202,2,249,22,151,13,23,200,2,23,198,1,250,2,52,23,201,2,23, -202,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,133, -13,23,196,2,27,249,22,151,13,23,198,2,23,201,2,28,28,248,22,146,13, -193,10,248,22,145,13,193,192,11,11,28,23,193,2,192,87,94,23,193,1,28, -23,199,2,11,27,248,22,159,13,23,202,2,28,249,22,162,8,23,195,2,23, -203,1,11,28,248,22,155,13,23,194,2,250,2,52,23,202,1,23,203,1,249, -22,151,13,23,201,1,23,198,1,250,2,52,201,202,195,194,28,248,22,71,23, -197,2,11,27,248,22,158,13,248,22,64,23,199,2,27,249,22,151,13,23,196, -1,23,197,2,28,248,22,145,13,23,194,2,250,2,52,198,199,195,87,94,23, -193,1,27,248,22,65,23,200,1,28,248,22,71,23,194,2,11,27,248,22,158, -13,248,22,64,23,196,2,27,249,22,151,13,23,196,1,23,200,2,28,248,22, -145,13,23,194,2,250,2,52,201,202,195,87,94,23,193,1,27,248,22,65,23, -197,1,28,248,22,71,23,194,2,11,27,248,22,158,13,248,22,64,195,27,249, -22,151,13,23,196,1,202,28,248,22,145,13,193,250,2,52,204,205,195,251,2, -51,204,205,206,248,22,65,199,87,95,28,27,248,22,133,13,23,196,2,28,23, -193,2,192,87,94,23,193,1,28,248,22,155,6,23,196,2,27,248,22,155,13, -23,197,2,28,23,193,2,192,87,94,23,193,1,248,22,156,13,23,197,2,11, -12,250,22,190,8,2,15,6,25,25,112,97,116,104,32,111,114,32,115,116,114, +2,91,159,38,11,90,161,38,35,11,248,22,155,13,23,199,2,87,95,23,195, +1,23,194,1,27,28,23,198,2,27,248,22,160,13,23,201,2,28,249,22,163, +8,23,195,2,23,202,2,11,28,248,22,156,13,23,194,2,250,2,52,23,201, +2,23,202,2,249,22,152,13,23,200,2,23,198,1,250,2,52,23,201,2,23, +202,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,134, +13,23,196,2,27,249,22,152,13,23,198,2,23,201,2,28,28,248,22,147,13, +193,10,248,22,146,13,193,192,11,11,28,23,193,2,192,87,94,23,193,1,28, +23,199,2,11,27,248,22,160,13,23,202,2,28,249,22,163,8,23,195,2,23, +203,1,11,28,248,22,156,13,23,194,2,250,2,52,23,202,1,23,203,1,249, +22,152,13,23,201,1,23,198,1,250,2,52,201,202,195,194,28,248,22,71,23, +197,2,11,27,248,22,159,13,248,22,64,23,199,2,27,249,22,152,13,23,196, +1,23,197,2,28,248,22,146,13,23,194,2,250,2,52,198,199,195,87,94,23, +193,1,27,248,22,65,23,200,1,28,248,22,71,23,194,2,11,27,248,22,159, +13,248,22,64,23,196,2,27,249,22,152,13,23,196,1,23,200,2,28,248,22, +146,13,23,194,2,250,2,52,201,202,195,87,94,23,193,1,27,248,22,65,23, +197,1,28,248,22,71,23,194,2,11,27,248,22,159,13,248,22,64,195,27,249, +22,152,13,23,196,1,202,28,248,22,146,13,193,250,2,52,204,205,195,251,2, +51,204,205,206,248,22,65,199,87,95,28,27,248,22,134,13,23,196,2,28,23, +193,2,192,87,94,23,193,1,28,248,22,156,6,23,196,2,27,248,22,156,13, +23,197,2,28,23,193,2,192,87,94,23,193,1,248,22,157,13,23,197,2,11, +12,250,22,191,8,2,15,6,25,25,112,97,116,104,32,111,114,32,115,116,114, 105,110,103,32,40,115,97,110,115,32,110,117,108,41,23,197,2,28,28,23,195, -2,28,27,248,22,133,13,23,197,2,28,23,193,2,192,87,94,23,193,1,28, -248,22,155,6,23,197,2,27,248,22,155,13,23,198,2,28,23,193,2,192,87, -94,23,193,1,248,22,156,13,23,198,2,11,248,22,155,13,23,196,2,11,10, -12,250,22,190,8,2,15,6,29,29,35,102,32,111,114,32,114,101,108,97,116, +2,28,27,248,22,134,13,23,197,2,28,23,193,2,192,87,94,23,193,1,28, +248,22,156,6,23,197,2,27,248,22,156,13,23,198,2,28,23,193,2,192,87, +94,23,193,1,248,22,157,13,23,198,2,11,248,22,156,13,23,196,2,11,10, +12,250,22,191,8,2,15,6,29,29,35,102,32,111,114,32,114,101,108,97,116, 105,118,101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,23,198,2, -28,28,248,22,155,13,23,195,2,91,159,38,11,90,161,38,35,11,248,22,154, -13,23,198,2,249,22,160,8,194,68,114,101,108,97,116,105,118,101,11,27,248, -22,172,7,6,4,4,80,65,84,72,251,2,51,23,199,1,23,200,1,23,201, -1,28,23,197,2,27,249,80,158,43,47,23,200,1,9,28,249,22,160,8,247, -22,174,7,2,21,249,22,63,248,22,142,13,5,1,46,23,195,1,192,9,27, -248,22,158,13,23,196,1,28,248,22,145,13,193,250,2,52,198,199,195,11,250, -80,158,38,48,196,197,11,250,80,158,38,48,196,11,11,87,94,249,22,146,6, -247,22,182,4,195,248,22,172,5,249,22,169,3,35,249,22,153,3,197,198,27, +28,28,248,22,156,13,23,195,2,91,159,38,11,90,161,38,35,11,248,22,155, +13,23,198,2,249,22,161,8,194,68,114,101,108,97,116,105,118,101,11,27,248, +22,173,7,6,4,4,80,65,84,72,251,2,51,23,199,1,23,200,1,23,201, +1,28,23,197,2,27,249,80,158,43,47,23,200,1,9,28,249,22,161,8,247, +22,175,7,2,21,249,22,63,248,22,143,13,5,1,46,23,195,1,192,9,27, +248,22,159,13,23,196,1,28,248,22,146,13,193,250,2,52,198,199,195,11,250, +80,158,38,48,196,197,11,250,80,158,38,48,196,11,11,87,94,249,22,147,6, +247,22,183,4,195,248,22,173,5,249,22,169,3,35,249,22,153,3,197,198,27, 28,23,197,2,87,95,23,196,1,23,195,1,23,197,1,87,94,23,197,1,27, -248,22,172,13,2,20,27,249,80,158,40,48,23,196,1,11,27,27,248,22,172, +248,22,173,13,2,20,27,249,80,158,40,48,23,196,1,11,27,27,248,22,172, 3,23,200,1,28,192,192,35,27,27,248,22,172,3,23,202,1,28,192,192,35, -249,22,149,5,23,197,1,83,158,39,20,97,95,89,162,8,44,35,47,9,224, -3,2,33,58,23,195,1,23,196,1,27,248,22,134,5,23,195,1,248,80,159, +249,22,150,5,23,197,1,83,158,39,20,97,95,89,162,8,44,35,47,9,224, +3,2,33,58,23,195,1,23,196,1,27,248,22,135,5,23,195,1,248,80,159, 38,53,36,193,159,35,20,103,159,35,16,1,65,98,101,103,105,110,16,0,83, 158,41,20,100,138,67,35,37,117,116,105,108,115,2,1,11,11,10,10,42,80, 158,35,35,20,103,159,37,16,17,30,2,1,2,2,193,30,2,1,2,3,193, @@ -319,7 +319,7 @@ 0,16,0,16,0,35,35,16,0,16,17,83,158,35,16,2,89,162,43,36,48, 2,19,223,0,33,29,80,159,35,53,36,83,158,35,16,2,89,162,8,44,36, 55,2,19,223,0,33,30,80,159,35,52,36,83,158,35,16,2,32,0,89,162, -43,36,44,2,2,222,33,31,80,159,35,35,36,83,158,35,16,2,249,22,157, +43,36,44,2,2,222,33,31,80,159,35,35,36,83,158,35,16,2,249,22,158, 6,7,92,7,92,80,159,35,36,36,83,158,35,16,2,89,162,43,36,53,2, 4,223,0,33,32,80,159,35,37,36,83,158,35,16,2,32,0,89,162,8,44, 37,49,2,5,222,33,33,80,159,35,38,36,83,158,35,16,2,32,0,89,162, @@ -332,8 +332,8 @@ 35,16,2,32,0,89,162,43,36,43,2,12,222,33,44,80,159,35,45,36,83, 158,35,16,2,83,158,38,20,96,96,2,13,89,162,43,35,43,9,223,0,33, 45,89,162,43,36,44,9,223,0,33,46,89,162,43,37,54,9,223,0,33,47, -80,159,35,46,36,83,158,35,16,2,27,248,22,179,13,248,22,166,7,27,28, -249,22,160,8,247,22,174,7,2,21,6,1,1,59,6,1,1,58,250,22,139, +80,159,35,46,36,83,158,35,16,2,27,248,22,180,13,248,22,167,7,27,28, +249,22,161,8,247,22,175,7,2,21,6,1,1,59,6,1,1,58,250,22,140, 7,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2, 23,196,1,89,162,8,44,37,47,2,14,223,0,33,50,80,159,35,47,36,83, 158,35,16,2,83,158,38,20,96,96,2,15,89,162,8,44,38,53,9,223,0, @@ -344,7 +344,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 5080); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,49,46,49,46,50,8,0,0,0,1,0,0,6,0,19,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,49,46,49,46,51,8,0,0,0,1,0,0,6,0,19,0, 34,0,48,0,62,0,76,0,111,0,0,0,255,0,0,0,65,113,117,111,116, 101,29,94,2,1,67,35,37,117,116,105,108,115,11,29,94,2,1,69,35,37, 110,101,116,119,111,114,107,11,29,94,2,1,68,35,37,112,97,114,97,109,122, @@ -361,7 +361,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 292); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,49,46,49,46,50,52,0,0,0,1,0,0,3,0,14,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,49,46,49,46,51,52,0,0,0,1,0,0,3,0,14,0, 41,0,47,0,60,0,74,0,96,0,122,0,134,0,152,0,172,0,184,0,200, 0,223,0,3,1,8,1,13,1,18,1,23,1,54,1,58,1,66,1,74,1, 82,1,185,1,230,1,250,1,29,2,64,2,98,2,108,2,155,2,165,2,172, @@ -383,31 +383,31 @@ 64,108,111,111,112,1,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,63,108,105,98,67,105, 103,110,111,114,101,100,249,22,14,195,80,158,37,45,249,80,159,37,48,36,195, -10,27,28,23,195,2,28,249,22,160,8,23,197,2,80,158,38,46,87,94,23, -195,1,80,158,36,47,27,248,22,169,4,23,197,2,28,248,22,133,13,23,194, -2,91,159,38,11,90,161,38,35,11,248,22,154,13,23,197,1,87,95,83,160, +10,27,28,23,195,2,28,249,22,161,8,23,197,2,80,158,38,46,87,94,23, +195,1,80,158,36,47,27,248,22,170,4,23,197,2,28,248,22,134,13,23,194, +2,91,159,38,11,90,161,38,35,11,248,22,155,13,23,197,1,87,95,83,160, 37,11,80,158,40,46,198,83,160,37,11,80,158,40,47,192,192,11,11,28,23, -193,2,192,87,94,23,193,1,27,247,22,187,4,28,192,192,247,22,173,13,20, -14,159,80,158,35,39,250,80,158,38,40,249,22,27,11,80,158,40,39,22,187, -4,28,248,22,133,13,23,198,2,23,197,1,87,94,23,197,1,247,22,173,13, -247,194,250,22,151,13,23,197,1,23,199,1,249,80,158,42,38,23,198,1,2, -18,252,22,151,13,23,199,1,23,201,1,6,6,6,110,97,116,105,118,101,247, -22,175,7,249,80,158,44,38,23,200,1,80,158,44,35,87,94,23,194,1,27, -23,194,1,27,250,22,168,13,196,11,32,0,89,162,8,44,35,40,9,222,11, -28,192,249,22,63,195,194,11,27,248,23,195,1,23,196,1,27,250,22,168,13, +193,2,192,87,94,23,193,1,27,247,22,188,4,28,192,192,247,22,174,13,20, +14,159,80,158,35,39,250,80,158,38,40,249,22,27,11,80,158,40,39,22,188, +4,28,248,22,134,13,23,198,2,23,197,1,87,94,23,197,1,247,22,174,13, +247,194,250,22,152,13,23,197,1,23,199,1,249,80,158,42,38,23,198,1,2, +18,252,22,152,13,23,199,1,23,201,1,6,6,6,110,97,116,105,118,101,247, +22,176,7,249,80,158,44,38,23,200,1,80,158,44,35,87,94,23,194,1,27, +23,194,1,27,250,22,169,13,196,11,32,0,89,162,8,44,35,40,9,222,11, +28,192,249,22,63,195,194,11,27,248,23,195,1,23,196,1,27,250,22,169,13, 196,11,32,0,89,162,8,44,35,40,9,222,11,28,192,249,22,63,195,194,11, -249,247,22,178,13,248,22,64,195,195,27,250,22,151,13,23,198,1,23,200,1, -249,80,158,43,38,23,199,1,2,18,27,250,22,168,13,196,11,32,0,89,162, -8,44,35,40,9,222,11,28,192,249,22,63,195,194,11,249,247,22,185,4,248, -22,64,195,195,249,247,22,185,4,194,195,87,94,28,248,80,158,36,37,23,195, -2,12,250,22,190,8,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105, +249,247,22,179,13,248,22,64,195,195,27,250,22,152,13,23,198,1,23,200,1, +249,80,158,43,38,23,199,1,2,18,27,250,22,169,13,196,11,32,0,89,162, +8,44,35,40,9,222,11,28,192,249,22,63,195,194,11,249,247,22,186,4,248, +22,64,195,195,249,247,22,186,4,194,195,87,94,28,248,80,158,36,37,23,195, +2,12,250,22,191,8,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105, 108,101,100,6,25,25,112,97,116,104,32,111,114,32,118,97,108,105,100,45,112, 97,116,104,32,115,116,114,105,110,103,23,197,2,91,159,41,11,90,161,36,35, -11,28,248,22,157,13,23,201,2,23,200,1,27,247,22,187,4,28,23,193,2, -249,22,158,13,23,203,1,23,195,1,200,90,161,38,36,11,248,22,154,13,23, -194,2,87,94,23,196,1,90,161,36,39,11,28,249,22,160,8,23,196,2,68, +11,28,248,22,158,13,23,201,2,23,200,1,27,247,22,188,4,28,23,193,2, +249,22,159,13,23,203,1,23,195,1,200,90,161,38,36,11,248,22,155,13,23, +194,2,87,94,23,196,1,90,161,36,39,11,28,249,22,161,8,23,196,2,68, 114,101,108,97,116,105,118,101,87,94,23,194,1,2,17,23,194,1,90,161,36, -40,11,247,22,175,13,27,89,162,43,36,49,62,122,111,225,7,5,3,33,27, +40,11,247,22,176,13,27,89,162,43,36,49,62,122,111,225,7,5,3,33,27, 27,89,162,43,36,51,9,225,8,6,4,33,28,27,249,22,5,89,162,8,44, 36,47,9,223,5,33,29,23,203,2,27,28,23,195,2,27,249,22,5,83,158, 39,20,97,94,89,162,8,44,36,47,9,223,5,33,30,23,198,1,23,205,2, @@ -420,11 +420,11 @@ 199,193,11,11,11,11,28,192,249,80,159,48,54,36,203,89,162,43,35,45,9, 224,15,2,33,33,249,80,159,48,54,36,203,89,162,43,35,44,9,224,15,7, 33,34,32,36,89,162,8,44,36,54,2,19,222,33,38,0,17,35,114,120,34, -94,40,46,42,63,41,47,40,46,42,41,36,34,27,249,22,183,13,2,37,23, +94,40,46,42,63,41,47,40,46,42,41,36,34,27,249,22,184,13,2,37,23, 196,2,28,23,193,2,87,94,23,194,1,249,22,63,248,22,88,23,196,2,27, -248,22,97,23,197,1,27,249,22,183,13,2,37,23,196,2,28,23,193,2,87, +248,22,97,23,197,1,27,249,22,184,13,2,37,23,196,2,28,23,193,2,87, 94,23,194,1,249,22,63,248,22,88,23,196,2,27,248,22,97,23,197,1,27, -249,22,183,13,2,37,23,196,2,28,23,193,2,87,94,23,194,1,249,22,63, +249,22,184,13,2,37,23,196,2,28,23,193,2,87,94,23,194,1,249,22,63, 248,22,88,23,196,2,248,2,36,248,22,97,23,197,1,248,22,73,194,248,22, 73,194,248,22,73,194,32,39,89,162,43,36,54,2,19,222,33,40,28,248,22, 71,248,22,65,23,195,2,249,22,7,9,248,22,64,195,91,159,37,11,90,161, @@ -435,96 +435,96 @@ 249,22,7,249,22,63,248,22,64,23,200,1,23,197,1,23,196,1,249,22,7, 249,22,63,248,22,64,23,200,1,23,197,1,23,196,1,249,22,7,249,22,63, 248,22,64,23,200,1,23,197,1,195,27,248,2,36,23,195,1,28,194,192,248, -2,39,193,87,95,28,248,22,167,4,195,12,250,22,190,8,2,20,6,20,20, +2,39,193,87,95,28,248,22,168,4,195,12,250,22,191,8,2,20,6,20,20, 114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45,112,97,116,104,197, 28,24,193,2,248,24,194,1,195,87,94,23,193,1,12,27,27,250,22,137,2, -80,158,41,42,248,22,139,14,247,22,180,11,11,28,23,193,2,192,87,94,23, -193,1,27,247,22,121,87,94,250,22,135,2,80,158,42,42,248,22,139,14,247, -22,180,11,195,192,250,22,135,2,195,198,66,97,116,116,97,99,104,251,211,197, -198,199,10,28,192,250,22,189,8,11,196,195,248,22,187,8,194,28,249,22,161, -6,194,6,1,1,46,2,17,28,249,22,161,6,194,6,2,2,46,46,62,117, -112,192,28,249,22,162,8,248,22,65,23,200,2,23,197,1,28,249,22,160,8, -248,22,64,23,200,2,23,196,1,251,22,187,8,2,20,6,26,26,99,121,99, +80,158,41,42,248,22,140,14,247,22,181,11,11,28,23,193,2,192,87,94,23, +193,1,27,247,22,121,87,94,250,22,135,2,80,158,42,42,248,22,140,14,247, +22,181,11,195,192,250,22,135,2,195,198,66,97,116,116,97,99,104,251,211,197, +198,199,10,28,192,250,22,190,8,11,196,195,248,22,188,8,194,28,249,22,162, +6,194,6,1,1,46,2,17,28,249,22,162,6,194,6,2,2,46,46,62,117, +112,192,28,249,22,163,8,248,22,65,23,200,2,23,197,1,28,249,22,161,8, +248,22,64,23,200,2,23,196,1,251,22,188,8,2,20,6,26,26,99,121,99, 108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,101,58,32, 126,101,23,200,1,249,22,2,22,65,248,22,78,249,22,63,23,206,1,23,202, -1,12,12,247,192,20,14,159,80,158,39,44,249,22,63,247,22,180,11,23,197, +1,12,12,247,192,20,14,159,80,158,39,44,249,22,63,247,22,181,11,23,197, 1,20,14,159,80,158,39,39,250,80,158,42,40,249,22,27,11,80,158,44,39, -22,149,4,23,196,1,249,247,22,186,4,23,198,1,248,22,52,248,22,137,13, -23,198,1,87,94,28,28,248,22,133,13,23,197,2,10,248,22,173,4,23,197, -2,12,28,23,198,2,250,22,189,8,11,6,15,15,98,97,100,32,109,111,100, -117,108,101,32,112,97,116,104,23,201,2,250,22,190,8,2,20,6,19,19,109, +22,150,4,23,196,1,249,247,22,187,4,23,198,1,248,22,52,248,22,138,13, +23,198,1,87,94,28,28,248,22,134,13,23,197,2,10,248,22,174,4,23,197, +2,12,28,23,198,2,250,22,190,8,11,6,15,15,98,97,100,32,109,111,100, +117,108,101,32,112,97,116,104,23,201,2,250,22,191,8,2,20,6,19,19,109, 111,100,117,108,101,45,112,97,116,104,32,111,114,32,112,97,116,104,23,199,2, -28,28,248,22,61,23,197,2,249,22,160,8,248,22,64,23,199,2,2,4,11, -248,22,168,4,248,22,88,197,28,28,248,22,61,23,197,2,249,22,160,8,248, +28,28,248,22,61,23,197,2,249,22,161,8,248,22,64,23,199,2,2,4,11, +248,22,169,4,248,22,88,197,28,28,248,22,61,23,197,2,249,22,161,8,248, 22,64,23,199,2,66,112,108,97,110,101,116,11,87,94,28,207,12,20,14,159, -80,158,37,39,250,80,158,40,40,249,22,27,11,80,158,42,39,22,180,11,23, -197,1,90,161,36,35,10,249,22,150,4,21,94,2,21,6,18,18,112,108,97, +80,158,37,39,250,80,158,40,40,249,22,27,11,80,158,42,39,22,181,11,23, +197,1,90,161,36,35,10,249,22,151,4,21,94,2,21,6,18,18,112,108,97, 110,101,116,47,114,101,115,111,108,118,101,114,46,115,115,1,27,112,108,97,110, 101,116,45,109,111,100,117,108,101,45,110,97,109,101,45,114,101,115,111,108,118, 101,114,12,251,211,199,200,201,202,87,94,23,193,1,27,89,162,8,44,36,45, 79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114,223, 6,33,44,27,28,248,22,51,23,199,2,27,250,22,137,2,80,158,43,43,249, -22,63,23,204,2,247,22,174,13,11,28,23,193,2,192,87,94,23,193,1,91, +22,63,23,204,2,247,22,175,13,11,28,23,193,2,192,87,94,23,193,1,91, 159,37,11,90,161,37,35,11,249,80,159,44,48,36,248,22,54,23,204,2,11, 27,251,80,158,47,50,2,20,23,202,1,28,248,22,71,23,199,2,23,199,2, 248,22,64,23,199,2,28,248,22,71,23,199,2,9,248,22,65,23,199,2,249, -22,151,13,23,195,1,28,248,22,71,23,197,1,87,94,23,197,1,6,7,7, -109,97,105,110,46,115,115,249,22,178,6,23,199,1,6,3,3,46,115,115,28, -248,22,155,6,23,199,2,87,94,23,194,1,27,248,80,159,41,55,36,23,201, +22,152,13,23,195,1,28,248,22,71,23,197,1,87,94,23,197,1,6,7,7, +109,97,105,110,46,115,115,249,22,179,6,23,199,1,6,3,3,46,115,115,28, +248,22,156,6,23,199,2,87,94,23,194,1,27,248,80,159,41,55,36,23,201, 2,27,250,22,137,2,80,158,44,43,249,22,63,23,205,2,23,199,2,11,28, 23,193,2,192,87,94,23,193,1,91,159,37,11,90,161,37,35,11,249,80,159, -45,48,36,23,204,2,11,250,22,1,22,151,13,23,199,1,249,22,77,249,22, +45,48,36,23,204,2,11,250,22,1,22,152,13,23,199,1,249,22,77,249,22, 2,32,0,89,162,8,44,36,43,9,222,33,45,23,200,1,248,22,73,23,200, -1,28,248,22,133,13,23,199,2,87,94,23,194,1,28,248,22,156,13,23,199, +1,28,248,22,134,13,23,199,2,87,94,23,194,1,28,248,22,157,13,23,199, 2,23,198,2,248,22,73,6,26,26,32,40,97,32,112,97,116,104,32,109,117, -115,116,32,98,101,32,97,98,115,111,108,117,116,101,41,28,249,22,160,8,248, +115,116,32,98,101,32,97,98,115,111,108,117,116,101,41,28,249,22,161,8,248, 22,64,23,201,2,2,21,27,250,22,137,2,80,158,43,43,249,22,63,23,204, -2,247,22,174,13,11,28,23,193,2,192,87,94,23,193,1,91,159,38,11,90, +2,247,22,175,13,11,28,23,193,2,192,87,94,23,193,1,91,159,38,11,90, 161,37,35,11,249,80,159,45,48,36,248,22,88,23,205,2,11,90,161,36,37, -11,28,248,22,71,248,22,90,23,204,2,28,248,22,71,23,194,2,249,22,185, +11,28,248,22,71,248,22,90,23,204,2,28,248,22,71,23,194,2,249,22,186, 13,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10,27,27,28,23,197, 2,249,22,77,28,248,22,71,248,22,90,23,208,2,21,93,6,5,5,109,122, 108,105,98,249,22,1,22,77,249,22,2,80,159,51,56,36,248,22,90,23,211, 2,23,197,2,28,248,22,71,23,196,2,248,22,73,23,197,2,23,195,2,251, 80,158,49,50,2,20,23,204,1,248,22,64,23,198,2,248,22,65,23,198,1, -249,22,151,13,23,195,1,28,23,198,1,87,94,23,196,1,23,197,1,28,248, +249,22,152,13,23,195,1,28,23,198,1,87,94,23,196,1,23,197,1,28,248, 22,71,23,197,1,87,94,23,197,1,6,7,7,109,97,105,110,46,115,115,28, -249,22,185,13,0,8,35,114,120,34,91,46,93,34,23,199,2,23,197,1,249, -22,178,6,23,199,1,6,3,3,46,115,115,28,249,22,160,8,248,22,64,23, -201,2,64,102,105,108,101,249,22,158,13,248,22,162,13,248,22,88,23,202,2, -248,80,159,42,55,36,23,202,2,12,87,94,28,28,248,22,133,13,23,194,2, -10,248,22,177,7,23,194,2,87,94,23,200,1,12,28,23,200,2,250,22,189, -8,67,114,101,113,117,105,114,101,249,22,139,7,6,17,17,98,97,100,32,109, +249,22,186,13,0,8,35,114,120,34,91,46,93,34,23,199,2,23,197,1,249, +22,179,6,23,199,1,6,3,3,46,115,115,28,249,22,161,8,248,22,64,23, +201,2,64,102,105,108,101,249,22,159,13,248,22,163,13,248,22,88,23,202,2, +248,80,159,42,55,36,23,202,2,12,87,94,28,28,248,22,134,13,23,194,2, +10,248,22,178,7,23,194,2,87,94,23,200,1,12,28,23,200,2,250,22,190, +8,67,114,101,113,117,105,114,101,249,22,140,7,6,17,17,98,97,100,32,109, 111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,64,23,199, -2,6,0,0,23,203,1,87,94,23,200,1,250,22,190,8,2,20,249,22,139, +2,6,0,0,23,203,1,87,94,23,200,1,250,22,191,8,2,20,249,22,140, 7,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2, -248,22,64,23,199,2,6,0,0,23,201,2,27,28,248,22,177,7,23,195,2, -249,22,182,7,23,196,2,35,249,22,160,13,248,22,161,13,23,197,2,11,27, -28,248,22,177,7,23,196,2,249,22,182,7,23,197,2,36,248,80,158,42,51, -23,195,2,91,159,38,11,90,161,38,35,11,28,248,22,177,7,23,199,2,250, -22,7,2,22,249,22,182,7,23,203,2,37,2,22,248,22,154,13,23,198,2, -87,95,23,195,1,23,193,1,27,28,248,22,177,7,23,200,2,249,22,182,7, -23,201,2,38,249,80,158,47,52,23,197,2,5,0,27,28,248,22,177,7,23, -201,2,249,22,182,7,23,202,2,39,248,22,168,4,23,200,2,27,27,250,22, -137,2,80,158,51,42,248,22,139,14,247,22,180,11,11,28,23,193,2,192,87, -94,23,193,1,27,247,22,121,87,94,250,22,135,2,80,158,52,42,248,22,139, -14,247,22,180,11,195,192,87,95,28,23,209,1,27,250,22,137,2,23,197,2, +248,22,64,23,199,2,6,0,0,23,201,2,27,28,248,22,178,7,23,195,2, +249,22,183,7,23,196,2,35,249,22,161,13,248,22,162,13,23,197,2,11,27, +28,248,22,178,7,23,196,2,249,22,183,7,23,197,2,36,248,80,158,42,51, +23,195,2,91,159,38,11,90,161,38,35,11,28,248,22,178,7,23,199,2,250, +22,7,2,22,249,22,183,7,23,203,2,37,2,22,248,22,155,13,23,198,2, +87,95,23,195,1,23,193,1,27,28,248,22,178,7,23,200,2,249,22,183,7, +23,201,2,38,249,80,158,47,52,23,197,2,5,0,27,28,248,22,178,7,23, +201,2,249,22,183,7,23,202,2,39,248,22,169,4,23,200,2,27,27,250,22, +137,2,80,158,51,42,248,22,140,14,247,22,181,11,11,28,23,193,2,192,87, +94,23,193,1,27,247,22,121,87,94,250,22,135,2,80,158,52,42,248,22,140, +14,247,22,181,11,195,192,87,95,28,23,209,1,27,250,22,137,2,23,197,2, 197,11,28,23,193,1,12,87,95,27,27,28,248,22,17,80,158,51,45,80,158, 50,45,247,22,19,250,22,25,248,22,23,23,197,2,80,158,53,44,23,196,1, -27,247,22,180,11,249,22,3,83,158,39,20,97,94,89,162,8,44,36,54,9, +27,247,22,181,11,249,22,3,83,158,39,20,97,94,89,162,8,44,36,54,9, 226,12,11,2,3,33,46,23,195,1,23,196,1,248,28,248,22,17,80,158,50, 45,32,0,89,162,43,36,41,9,222,33,47,80,159,49,57,36,89,162,43,35, 50,9,227,14,9,8,4,3,33,48,250,22,135,2,23,197,1,197,10,12,28, -28,248,22,177,7,23,202,1,11,27,248,22,155,6,23,208,2,28,192,192,28, -248,22,61,23,208,2,249,22,160,8,248,22,64,23,210,2,2,21,11,250,22, -135,2,80,158,50,43,28,248,22,155,6,23,210,2,249,22,63,23,211,1,248, +28,248,22,178,7,23,202,1,11,27,248,22,156,6,23,208,2,28,192,192,28, +248,22,61,23,208,2,249,22,161,8,248,22,64,23,210,2,2,21,11,250,22, +135,2,80,158,50,43,28,248,22,156,6,23,210,2,249,22,63,23,211,1,248, 80,159,53,55,36,23,213,1,87,94,23,210,1,249,22,63,23,211,1,247,22, -174,13,252,22,179,7,23,208,1,23,207,1,23,205,1,23,203,1,201,12,193, +175,13,252,22,180,7,23,208,1,23,207,1,23,205,1,23,203,1,201,12,193, 91,159,37,10,90,161,36,35,10,11,90,161,36,36,10,83,158,38,20,96,96, 2,20,89,162,8,44,36,50,9,224,2,0,33,42,89,162,43,38,48,9,223, 1,33,43,89,162,43,39,8,30,9,225,2,3,0,33,49,208,87,95,248,22, -148,4,248,80,158,37,49,247,22,180,11,248,22,186,4,80,158,36,36,248,22, -171,12,80,159,36,41,36,159,35,20,103,159,35,16,1,65,98,101,103,105,110, +149,4,248,80,158,37,49,247,22,181,11,248,22,187,4,80,158,36,36,248,22, +172,12,80,159,36,41,36,159,35,20,103,159,35,16,1,65,98,101,103,105,110, 16,0,83,158,41,20,100,138,66,35,37,98,111,111,116,2,1,11,11,10,10, 36,80,158,35,35,20,103,159,39,16,19,30,2,1,2,2,193,30,2,1,2, 3,193,30,2,5,72,112,97,116,104,45,115,116,114,105,110,103,63,10,30,2, @@ -545,7 +545,7 @@ 44,9,223,0,33,24,80,159,35,56,36,83,158,35,16,2,89,162,43,36,48, 67,103,101,116,45,100,105,114,223,0,33,25,80,159,35,55,36,83,158,35,16, 2,89,162,43,37,48,68,119,105,116,104,45,100,105,114,223,0,33,26,80,159, -35,54,36,83,158,35,16,2,248,22,174,7,69,115,111,45,115,117,102,102,105, +35,54,36,83,158,35,16,2,248,22,175,7,69,115,111,45,115,117,102,102,105, 120,80,159,35,35,36,83,158,35,16,2,89,162,43,37,59,2,3,223,0,33, 35,80,159,35,36,36,83,158,35,16,2,32,0,89,162,8,44,36,41,2,7, 222,192,80,159,35,41,36,83,158,35,16,2,247,22,124,80,159,35,42,36,83, diff --git a/src/mzscheme/src/schminc.h b/src/mzscheme/src/schminc.h index 7bb57a99c7..c9d13d092e 100644 --- a/src/mzscheme/src/schminc.h +++ b/src/mzscheme/src/schminc.h @@ -13,7 +13,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 935 +#define EXPECTED_PRIM_COUNT 936 #ifdef MZSCHEME_SOMETHING_OMITTED # undef USE_COMPILED_STARTUP diff --git a/src/mzscheme/src/schvers.h b/src/mzscheme/src/schvers.h index c653c961b8..ec07fdf294 100644 --- a/src/mzscheme/src/schvers.h +++ b/src/mzscheme/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "4.1.1.2" +#define MZSCHEME_VERSION "4.1.1.3" #define MZSCHEME_VERSION_X 4 #define MZSCHEME_VERSION_Y 1 #define MZSCHEME_VERSION_Z 1 -#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/src/mzscheme/src/stxobj.c b/src/mzscheme/src/stxobj.c index c483f01bc6..31ec03d690 100644 --- a/src/mzscheme/src/stxobj.c +++ b/src/mzscheme/src/stxobj.c @@ -55,6 +55,7 @@ static Scheme_Object *syntax_original_p(int argc, Scheme_Object **argv); static Scheme_Object *syntax_property(int argc, Scheme_Object **argv); static Scheme_Object *syntax_property_keys(int argc, Scheme_Object **argv); static Scheme_Object *syntax_track_origin(int argc, Scheme_Object **argv); +static Scheme_Object *syntax_transfer_intro(int argc, Scheme_Object **argv); static Scheme_Object *bound_eq(int argc, Scheme_Object **argv); static Scheme_Object *module_eq(int argc, Scheme_Object **argv); @@ -449,6 +450,12 @@ void scheme_init_stx(Scheme_Env *env) 3, 3), env); + scheme_add_global_constant("make-syntax-delta-introducer", + scheme_make_immed_prim(syntax_transfer_intro, + "make-syntax-delta-introducer", + 2, 2), + env); + scheme_add_global_constant("bound-identifier=?", scheme_make_immed_prim(bound_eq, "bound-identifier=?", @@ -6761,6 +6768,61 @@ static Scheme_Object *syntax_track_origin(int argc, Scheme_Object **argv) return scheme_stx_track(argv[0], argv[1], argv[2]); } +static Scheme_Object *delta_introducer(int argc, struct Scheme_Object *argv[], Scheme_Object *p) +{ + Scheme_Object *r, *delta; + + r = argv[0]; + + if (!SCHEME_STXP(r)) + scheme_wrong_type("delta-introducer", "syntax", 0, argc, argv); + + delta = SCHEME_PRIM_CLOSURE_ELS(p)[0]; + + for(; !SCHEME_NULLP(delta); delta = SCHEME_CDR(delta)) { + r = scheme_add_remove_mark(r, SCHEME_CAR(delta)); + } + + return r; +} + +static Scheme_Object *syntax_transfer_intro(int argc, Scheme_Object **argv) +{ + Scheme_Object *m1, *m2, *delta, *a[1]; + int l1, l2; + + if (!SCHEME_STXP(argv[0])) + scheme_wrong_type("make-syntax-delta-introducer", "syntax", 0, argc, argv); + if (!SCHEME_STXP(argv[1])) + scheme_wrong_type("make-syntax-delta-introducer", "syntax", 1, argc, argv); + + m1 = scheme_stx_extract_marks(argv[0]); + m2 = scheme_stx_extract_marks(argv[1]); + + l1 = scheme_list_length(m1); + l2 = scheme_list_length(m2); + + delta = scheme_null; + while (l1 > l2) { + delta = CONS(SCHEME_CAR(m1), delta); + m1 = SCHEME_CDR(m1); + l1--; + } + + if (!scheme_equal(m1, m2)) { + /* tails don't match, so keep all marks */ + while (l1) { + delta = CONS(SCHEME_CAR(m1), delta); + m1 = SCHEME_CDR(m1); + l1--; + } + } + + a[0] = delta; + + return scheme_make_prim_closure_w_arity(delta_introducer, 1, a, "delta-introducer", 1, 1); +} + static Scheme_Object *bound_eq(int argc, Scheme_Object **argv) { Scheme_Object *phase;