more keyword-argument performance improvements, including general fast path for applying simple applicable-struct wrappers over plain procedures

svn: r15403
This commit is contained in:
Matthew Flatt 2009-07-08 13:57:16 +00:00
parent e1deed8b41
commit ab1db74ecc
10 changed files with 777 additions and 420 deletions

View File

@ -22,7 +22,18 @@
;; ----------------------------------------
(-define-struct keyword-procedure (proc required allowed checker))
(define-values (struct:keyword-procedure make-keyword-procedure keyword-procedure?
keyword-procedure-ref keyword-procedure-set!)
(make-struct-type 'keyword-procedure #f 4 0 #f
(list (cons prop:checked-procedure #t))
(current-inspector)
#f
'(0 1 2 3)))
(define keyword-procedure-checker (make-struct-field-accessor keyword-procedure-ref 0))
(define keyword-procedure-proc (make-struct-field-accessor keyword-procedure-ref 1))
(define keyword-procedure-required (make-struct-field-accessor keyword-procedure-ref 2))
(define keyword-procedure-allowed (make-struct-field-accessor keyword-procedure-ref 3))
(define-values (struct:keyword-method make-km keyword-method? km-ref km-set!)
(make-struct-type 'procedure
struct:keyword-procedure
@ -135,10 +146,10 @@
(apply proc null null args)))]
[(proc plain-proc)
(make-optional-keyword-procedure
(make-keyword-checker null #f (procedure-arity proc))
proc
null
#f
(make-keyword-checker null #f (procedure-arity proc))
plain-proc)])])
make-keyword-procedure))
@ -465,12 +476,12 @@
[with-kws (mk-with-kws)])
(syntax/loc stx
(make-okp
with-kws
null
'kws
(lambda (given-kws given-argc)
(and (in-range?/static given-argc with-kw-min-args with-kw-max-arg)
(subset?/static given-kws 'kws)))
with-kws
null
'kws
no-kws))))]
[else
;; just the keywords part dispatches to core,
@ -486,12 +497,12 @@
#'(make-required 'n call-fail method?)))])
(syntax/loc stx
(mk-id
with-kws
'needed-kws
'kws
(lambda (given-kws given-argc)
(and (in-range?/static given-argc with-kw-min-args with-kw-max-arg)
(subsets?/static 'needed-kws given-kws 'kws)))))))]))))))])
(subsets?/static 'needed-kws given-kws 'kws)))
with-kws
'needed-kws
'kws))))]))))))])
#`(#%expression #,stx)))])
(values new-lambda new-lambda)))
@ -763,7 +774,11 @@
[cnt (+ 1 (length args))])
(quasisyntax/loc stx
(let #,(reverse bind-accum)
((keyword-procedure-extract/method '#,(map car sorted-kws) #,cnt #,(car args) 0)
((checked-procedure-check-and-extract struct:keyword-procedure
#,(car args)
keyword-procedure-extract
'#,(map car sorted-kws)
#,cnt)
'#,(map car sorted-kws)
(list #,@(map cdr sorted-kws))
. #,(cdr args)))))]
@ -955,7 +970,7 @@
(proc-name p)
(- n 2) (if (= 1 (- n 2)) "" "s") args-str)))
(current-continuation-marks)))))))))
(define (keyword-procedure-extract kws n p)
(define (keyword-procedure-extract p kws n)
(keyword-procedure-extract/method kws n p 0))
;; setting procedure arity
@ -1020,9 +1035,9 @@
[else
(map loop a)]))])
(make-optional-keyword-procedure
(make-keyword-checker req-kw allowed-kw new-arity)
(procedure-reduce-arity (keyword-procedure-proc proc)
new-arity)
req-kw
allowed-kw
(make-keyword-checker req-kw allowed-kw new-arity)
plain-proc)))))

View File

@ -237,7 +237,7 @@ must require no more keywords than the ones listed din
@defstruct[arity-at-least ([value exact-nonnegative-integer?])]{
This structure type is used for the result of @scheme[procedure-arity].
A structure type used for the result of @scheme[procedure-arity].
See also @scheme[procedure-arity?].}
@ -357,7 +357,7 @@ called with a suitable first argument.}
@defthing[prop:arity-string struct-type-property?]{
This property is used for reporting arity-mismatch errors when a
A @tech{structure type property} that is used for reporting arity-mismatch errors when a
structure type with the @scheme[prop:procedure] property is applied to
the wrong number of arguments. The value of the
@scheme[prop:arity-string] property must be a procedure that takes a
@ -387,6 +387,35 @@ property is not associated with a procedure structure type.
(pairs 1 2 3 4)
(pairs 5)]}
@defthing[prop:checked-procedure struct-type-property?]{
A @tech{structure type property} that is used with
@scheme[checked-procedure-check-and-extract], which is a hook to allow
the compiler to improve the performance of keyword arguments. The
property can only be attached to a @tech{structure type} without a
supertype and with at least two fields.}
@defproc[(checked-procedure-check-and-extract [type struct-type?]
[v any/c]
[proc (any/c any/c any/c . -> . any/c)]
[v1 any/c]
[v2 any/c]) any/c]{
Extracts a value from @scheme[v] if it is an instance of
@scheme[type], which must have the property
@scheme[prop:checked-procedure]. If @scheme[v] is such an instance,
then the first field of @scheme[v] is extracted and applied to
@scheme[v1] and @scheme[v2]; if the result is a true value, the result
is the value of the second field of @scheme[v].
If @scheme[v] is not an instance of @scheme[type], or if the first
field of @scheme[v] applied to @scheme[v1] and @scheme[v2] produces
@scheme[#f], then @scheme[proc] is applied to @scheme[v], @scheme[v1],
and @scheme[v2], and its result is returned by
@scheme[checked-procedure-check-and-extract].}
@; ----------------------------------------------------------------------
@section{Reflecting on Primitives}

View File

@ -1,10 +1,10 @@
{
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,48,46,53,50,0,0,0,1,0,0,3,0,12,0,
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,48,46,54,50,0,0,0,1,0,0,3,0,12,0,
17,0,20,0,27,0,40,0,47,0,51,0,58,0,63,0,68,0,72,0,78,
0,92,0,106,0,109,0,115,0,119,0,121,0,132,0,134,0,148,0,155,0,
177,0,179,0,193,0,1,1,27,1,35,1,43,1,53,1,89,1,128,1,167,
1,236,1,44,2,132,2,196,2,201,2,221,2,112,3,132,3,183,3,249,3,
134,4,36,5,86,5,109,5,188,5,0,0,135,7,0,0,29,11,11,68,104,
177,0,179,0,193,0,1,1,27,1,35,1,43,1,53,1,89,1,122,1,155,
1,214,1,24,2,102,2,168,2,173,2,193,2,84,3,104,3,155,3,221,3,
106,4,248,4,44,5,67,5,146,5,0,0,93,7,0,0,29,11,11,68,104,
101,114,101,45,115,116,120,64,99,111,110,100,62,111,114,66,108,101,116,114,101,
99,72,112,97,114,97,109,101,116,101,114,105,122,101,66,117,110,108,101,115,115,
63,108,101,116,66,100,101,102,105,110,101,64,119,104,101,110,64,108,101,116,42,
@ -14,63 +14,61 @@
115,61,120,73,108,101,116,114,101,99,45,118,97,108,117,101,115,66,108,97,109,
98,100,97,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,
45,107,101,121,61,118,73,100,101,102,105,110,101,45,118,97,108,117,101,115,97,
35,11,8,159,239,95,159,2,15,35,35,159,2,14,35,35,159,2,14,35,35,
35,11,8,160,243,95,159,2,15,35,35,159,2,14,35,35,159,2,14,35,35,
16,20,2,3,2,1,2,5,2,1,2,6,2,1,2,7,2,1,2,8,2,
1,2,9,2,1,2,10,2,1,2,4,2,1,2,11,2,1,2,12,2,1,
97,36,11,8,159,239,93,159,2,14,35,36,16,2,2,2,161,2,1,36,2,
2,2,1,2,2,96,11,11,8,159,239,16,0,96,37,11,8,159,239,16,0,
97,36,11,8,160,243,93,159,2,14,35,36,16,2,2,2,161,2,1,36,2,
2,2,1,2,2,96,11,11,8,160,243,16,0,96,37,11,8,160,243,16,0,
13,16,4,35,29,11,11,2,1,11,18,16,2,99,64,104,101,114,101,8,31,
8,30,8,29,8,28,8,27,93,8,224,230,59,0,0,95,9,8,224,230,59,
0,0,2,1,27,248,22,137,4,23,196,1,249,22,130,4,80,158,38,35,251,
22,77,2,16,248,22,92,23,200,2,12,249,22,67,2,17,248,22,94,23,202,
1,27,248,22,137,4,23,196,1,249,22,130,4,80,158,38,35,251,22,77,2,
16,248,22,92,23,200,2,249,22,67,2,17,248,22,94,23,202,1,12,27,248,
22,69,248,22,137,4,23,197,1,28,248,22,75,23,194,2,20,15,159,36,35,
36,28,248,22,75,248,22,69,23,195,2,248,22,68,193,249,22,130,4,80,158,
38,35,251,22,77,2,16,248,22,68,23,200,2,249,22,67,2,12,248,22,69,
23,202,1,11,18,16,2,101,10,8,31,8,30,8,29,8,28,8,27,16,4,
11,11,2,18,3,1,7,101,110,118,57,57,53,54,16,4,11,11,2,19,3,
1,7,101,110,118,57,57,53,55,93,8,224,231,59,0,0,95,9,8,224,231,
59,0,0,2,1,27,248,22,69,248,22,137,4,23,197,1,28,248,22,75,23,
194,2,20,15,159,36,35,36,28,248,22,75,248,22,69,23,195,2,248,22,68,
193,249,22,130,4,80,158,38,35,250,22,77,2,20,248,22,77,249,22,77,248,
22,77,2,21,248,22,68,23,202,2,251,22,77,2,16,2,21,2,21,249,22,
67,2,4,248,22,69,23,205,1,18,16,2,101,11,8,31,8,30,8,29,8,
28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,57,57,53,57,16,4,
11,11,2,19,3,1,7,101,110,118,57,57,54,48,93,8,224,232,59,0,0,
95,9,8,224,232,59,0,0,2,1,248,22,137,4,193,27,248,22,137,4,194,
249,22,67,248,22,77,248,22,68,196,248,22,69,195,27,248,22,69,248,22,137,
4,23,197,1,249,22,130,4,80,158,38,35,28,248,22,53,248,22,131,4,248,
22,68,23,198,2,27,249,22,2,32,0,89,162,8,44,36,42,9,222,33,39,
248,22,137,4,248,22,92,23,200,2,250,22,77,2,22,248,22,77,249,22,77,
248,22,77,248,22,68,23,204,2,250,22,78,2,23,249,22,2,22,68,23,204,
2,248,22,94,23,206,2,249,22,67,248,22,68,23,202,1,249,22,2,22,92,
23,200,1,250,22,78,2,20,249,22,2,32,0,89,162,8,44,36,46,9,222,
33,40,248,22,137,4,248,22,68,201,248,22,69,198,27,248,22,137,4,194,249,
22,67,248,22,77,248,22,68,196,248,22,69,195,27,248,22,69,248,22,137,4,
23,197,1,249,22,130,4,80,158,38,35,250,22,78,2,22,249,22,2,32,0,
89,162,8,44,36,46,9,222,33,42,248,22,137,4,248,22,68,201,248,22,69,
198,27,248,22,69,248,22,137,4,196,27,248,22,137,4,248,22,68,195,249,22,
130,4,80,158,39,35,28,248,22,75,195,250,22,78,2,20,9,248,22,69,199,
250,22,77,2,8,248,22,77,248,22,68,199,250,22,78,2,11,248,22,69,201,
248,22,69,202,27,248,22,69,248,22,137,4,23,197,1,27,249,22,1,22,81,
249,22,2,22,137,4,248,22,137,4,248,22,68,199,249,22,130,4,80,158,39,
35,251,22,77,1,22,119,105,116,104,45,99,111,110,116,105,110,117,97,116,105,
111,110,45,109,97,114,107,2,24,250,22,78,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,21,95,1,27,99,
111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,45,115,101,116,45,
102,105,114,115,116,11,2,24,201,250,22,78,2,20,9,248,22,69,203,27,248,
22,69,248,22,137,4,23,197,1,28,248,22,75,23,194,2,20,15,159,36,35,
36,249,22,130,4,80,158,38,35,27,248,22,137,4,248,22,68,23,198,2,28,
249,22,167,8,62,61,62,248,22,131,4,248,22,92,23,197,2,250,22,77,2,
20,248,22,77,249,22,77,21,93,2,25,248,22,68,199,250,22,78,2,3,249,
22,77,2,25,249,22,77,248,22,101,203,2,25,248,22,69,202,251,22,77,2,
16,28,249,22,167,8,248,22,131,4,248,22,68,23,201,2,64,101,108,115,101,
10,248,22,68,23,198,2,250,22,78,2,20,9,248,22,69,23,201,1,249,22,
67,2,3,248,22,69,23,203,1,100,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,11,11,2,19,
3,1,7,101,110,118,57,57,56,51,93,8,224,233,59,0,0,18,16,2,158,
94,10,64,118,111,105,100,8,47,95,9,8,224,233,59,0,0,2,1,27,248,
8,30,8,29,8,28,8,27,93,8,224,231,60,0,0,95,9,8,224,231,60,
0,0,2,1,27,248,22,137,4,195,249,22,130,4,80,158,38,35,251,22,77,
2,16,248,22,92,199,12,249,22,67,2,17,248,22,94,201,27,248,22,137,4,
195,249,22,130,4,80,158,38,35,251,22,77,2,16,248,22,92,199,249,22,67,
2,17,248,22,94,201,12,27,248,22,69,248,22,137,4,196,28,248,22,75,193,
20,15,159,36,35,36,28,248,22,75,248,22,69,194,248,22,68,193,249,22,130,
4,80,158,38,35,251,22,77,2,16,248,22,68,199,249,22,67,2,12,248,22,
69,201,11,18,16,2,101,10,8,31,8,30,8,29,8,28,8,27,16,4,11,
11,2,18,3,1,8,101,110,118,49,48,50,50,51,16,4,11,11,2,19,3,
1,8,101,110,118,49,48,50,50,52,93,8,224,232,60,0,0,95,9,8,224,
232,60,0,0,2,1,27,248,22,69,248,22,137,4,196,28,248,22,75,193,20,
15,159,36,35,36,28,248,22,75,248,22,69,194,248,22,68,193,249,22,130,4,
80,158,38,35,250,22,77,2,20,248,22,77,249,22,77,248,22,77,2,21,248,
22,68,201,251,22,77,2,16,2,21,2,21,249,22,67,2,4,248,22,69,204,
18,16,2,101,11,8,31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,
3,1,8,101,110,118,49,48,50,50,54,16,4,11,11,2,19,3,1,8,101,
110,118,49,48,50,50,55,93,8,224,233,60,0,0,95,9,8,224,233,60,0,
0,2,1,248,22,137,4,193,27,248,22,137,4,194,249,22,67,248,22,77,248,
22,68,196,248,22,69,195,27,248,22,69,248,22,137,4,23,197,1,249,22,130,
4,80,158,38,35,28,248,22,53,248,22,131,4,248,22,68,23,198,2,27,249,
22,2,32,0,89,162,8,44,36,42,9,222,33,39,248,22,137,4,248,22,92,
23,200,2,250,22,77,2,22,248,22,77,249,22,77,248,22,77,248,22,68,23,
204,2,250,22,78,2,23,249,22,2,22,68,23,204,2,248,22,94,23,206,2,
249,22,67,248,22,68,23,202,1,249,22,2,22,92,23,200,1,250,22,78,2,
20,249,22,2,32,0,89,162,8,44,36,46,9,222,33,40,248,22,137,4,248,
22,68,201,248,22,69,198,27,248,22,137,4,194,249,22,67,248,22,77,248,22,
68,196,248,22,69,195,27,248,22,69,248,22,137,4,23,197,1,249,22,130,4,
80,158,38,35,250,22,78,2,22,249,22,2,32,0,89,162,8,44,36,46,9,
222,33,42,248,22,137,4,248,22,68,201,248,22,69,198,27,248,22,69,248,22,
137,4,196,27,248,22,137,4,248,22,68,195,249,22,130,4,80,158,39,35,28,
248,22,75,195,250,22,78,2,20,9,248,22,69,199,250,22,77,2,8,248,22,
77,248,22,68,199,250,22,78,2,11,248,22,69,201,248,22,69,202,27,248,22,
69,248,22,137,4,23,197,1,27,249,22,1,22,81,249,22,2,22,137,4,248,
22,137,4,248,22,68,199,249,22,130,4,80,158,39,35,251,22,77,1,22,119,
105,116,104,45,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,
2,24,250,22,78,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,21,95,1,27,99,111,110,116,105,110,117,97,
116,105,111,110,45,109,97,114,107,45,115,101,116,45,102,105,114,115,116,11,2,
24,201,250,22,78,2,20,9,248,22,69,203,27,248,22,69,248,22,137,4,196,
28,248,22,75,193,20,15,159,36,35,36,249,22,130,4,80,158,38,35,27,248,
22,137,4,248,22,68,197,28,249,22,167,8,62,61,62,248,22,131,4,248,22,
92,196,250,22,77,2,20,248,22,77,249,22,77,21,93,2,25,248,22,68,199,
250,22,78,2,3,249,22,77,2,25,249,22,77,248,22,101,203,2,25,248,22,
69,202,251,22,77,2,16,28,249,22,167,8,248,22,131,4,248,22,68,200,64,
101,108,115,101,10,248,22,68,197,250,22,78,2,20,9,248,22,69,200,249,22,
67,2,3,248,22,69,202,100,8,31,8,30,8,29,8,28,8,27,16,4,11,
11,2,18,3,1,8,101,110,118,49,48,50,52,57,16,4,11,11,2,19,3,
1,8,101,110,118,49,48,50,53,48,93,8,224,234,60,0,0,18,16,2,158,
94,10,64,118,111,105,100,8,47,95,9,8,224,234,60,0,0,2,1,27,248,
22,69,248,22,137,4,196,249,22,130,4,80,158,38,35,28,248,22,53,248,22,
131,4,248,22,68,197,250,22,77,2,26,248,22,77,248,22,68,199,248,22,92,
198,27,248,22,131,4,248,22,68,197,250,22,77,2,26,248,22,77,248,22,68,
@ -97,16 +95,16 @@
20,103,159,35,16,1,2,2,16,1,33,48,11,16,5,2,9,89,162,8,44,
36,53,9,223,0,33,49,35,20,103,159,35,16,1,2,2,16,0,11,16,0,
94,2,14,2,15,93,2,14,9,9,35,0};
EVAL_ONE_SIZED_STR((char *)expr, 2048);
EVAL_ONE_SIZED_STR((char *)expr, 2006);
}
{
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,48,46,53,59,0,0,0,1,0,0,13,0,18,0,
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,48,46,54,59,0,0,0,1,0,0,13,0,18,0,
35,0,50,0,68,0,84,0,94,0,112,0,132,0,148,0,166,0,197,0,226,
0,248,0,6,1,12,1,26,1,31,1,41,1,49,1,77,1,109,1,154,1,
199,1,223,1,6,2,8,2,65,2,155,3,196,3,31,5,135,5,239,5,100,
6,114,6,148,6,164,6,14,8,28,8,191,8,194,9,194,10,201,10,209,10,
217,10,92,11,105,11,60,12,162,12,175,12,197,12,149,13,53,14,125,15,134,
15,143,15,169,15,24,16,0,0,13,19,0,0,72,112,97,116,104,45,115,116,
217,10,86,11,99,11,52,12,154,12,167,12,189,12,141,13,45,14,115,15,124,
15,133,15,159,15,14,16,0,0,3,19,0,0,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,74,45,99,104,101,99,107,45,114,101,108,112,97,116,104,
77,45,99,104,101,99,107,45,99,111,108,108,101,99,116,105,111,110,75,99,111,
@ -132,222 +130,222 @@
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,187,12,10,248,22,160,5,23,196,2,28,248,
249,22,27,11,80,158,41,50,22,189,12,10,248,22,160,5,23,196,2,28,248,
22,157,6,23,194,2,12,87,94,248,22,171,8,23,194,1,248,80,159,37,53,
36,195,28,248,22,75,23,195,2,9,27,248,22,68,23,196,2,27,28,248,22,
168,13,23,195,2,23,194,1,28,248,22,167,13,23,195,2,249,22,169,13,23,
196,1,250,80,158,42,48,248,22,183,13,2,19,11,10,250,80,158,40,48,248,
22,183,13,2,19,23,197,1,10,28,23,193,2,249,22,67,248,22,171,13,249,
22,169,13,23,198,1,247,22,184,13,27,248,22,69,23,200,1,28,248,22,75,
23,194,2,9,27,248,22,68,23,195,2,27,28,248,22,168,13,23,195,2,23,
194,1,28,248,22,167,13,23,195,2,249,22,169,13,23,196,1,250,80,158,47,
48,248,22,183,13,2,19,11,10,250,80,158,45,48,248,22,183,13,2,19,23,
197,1,10,28,23,193,2,249,22,67,248,22,171,13,249,22,169,13,23,198,1,
247,22,184,13,248,80,159,45,52,36,248,22,69,23,199,1,87,94,23,193,1,
170,13,23,195,2,23,194,1,28,248,22,169,13,23,195,2,249,22,171,13,23,
196,1,250,80,158,42,48,248,22,185,13,2,19,11,10,250,80,158,40,48,248,
22,185,13,2,19,23,197,1,10,28,23,193,2,249,22,67,248,22,173,13,249,
22,171,13,23,198,1,247,22,186,13,27,248,22,69,23,200,1,28,248,22,75,
23,194,2,9,27,248,22,68,23,195,2,27,28,248,22,170,13,23,195,2,23,
194,1,28,248,22,169,13,23,195,2,249,22,171,13,23,196,1,250,80,158,47,
48,248,22,185,13,2,19,11,10,250,80,158,45,48,248,22,185,13,2,19,23,
197,1,10,28,23,193,2,249,22,67,248,22,173,13,249,22,171,13,23,198,1,
247,22,186,13,248,80,159,45,52,36,248,22,69,23,199,1,87,94,23,193,1,
248,80,159,43,52,36,248,22,69,23,197,1,87,94,23,193,1,27,248,22,69,
23,198,1,28,248,22,75,23,194,2,9,27,248,22,68,23,195,2,27,28,248,
22,168,13,23,195,2,23,194,1,28,248,22,167,13,23,195,2,249,22,169,13,
23,196,1,250,80,158,45,48,248,22,183,13,2,19,11,10,250,80,158,43,48,
248,22,183,13,2,19,23,197,1,10,28,23,193,2,249,22,67,248,22,171,13,
249,22,169,13,23,198,1,247,22,184,13,248,80,159,43,52,36,248,22,69,23,
199,1,248,80,159,41,52,36,248,22,69,196,27,248,22,144,13,23,195,2,28,
23,193,2,192,87,94,23,193,1,28,248,22,162,6,23,195,2,27,248,22,166,
13,195,28,192,192,248,22,167,13,195,11,87,94,28,28,248,22,145,13,23,195,
2,10,27,248,22,144,13,23,196,2,28,23,193,2,192,87,94,23,193,1,28,
248,22,162,6,23,196,2,27,248,22,166,13,23,197,2,28,23,193,2,192,87,
94,23,193,1,248,22,167,13,23,197,2,11,12,250,22,135,9,76,110,111,114,
22,170,13,23,195,2,23,194,1,28,248,22,169,13,23,195,2,249,22,171,13,
23,196,1,250,80,158,45,48,248,22,185,13,2,19,11,10,250,80,158,43,48,
248,22,185,13,2,19,23,197,1,10,28,23,193,2,249,22,67,248,22,173,13,
249,22,171,13,23,198,1,247,22,186,13,248,80,159,43,52,36,248,22,69,23,
199,1,248,80,159,41,52,36,248,22,69,196,27,248,22,146,13,23,195,2,28,
23,193,2,192,87,94,23,193,1,28,248,22,162,6,23,195,2,27,248,22,168,
13,195,28,192,192,248,22,169,13,195,11,87,94,28,28,248,22,147,13,23,195,
2,10,27,248,22,146,13,23,196,2,28,23,193,2,192,87,94,23,193,1,28,
248,22,162,6,23,196,2,27,248,22,168,13,23,197,2,28,23,193,2,192,87,
94,23,193,1,248,22,169,13,23,197,2,11,12,250,22,135,9,76,110,111,114,
109,97,108,45,112,97,116,104,45,99,97,115,101,6,42,42,112,97,116,104,32,
40,102,111,114,32,97,110,121,32,115,121,115,116,101,109,41,32,111,114,32,118,
97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,23,197,2,28,28,
248,22,145,13,23,195,2,249,22,167,8,248,22,146,13,23,197,2,2,20,249,
248,22,147,13,23,195,2,249,22,167,8,248,22,148,13,23,197,2,2,20,249,
22,167,8,247,22,181,7,2,20,27,28,248,22,162,6,23,196,2,23,195,2,
248,22,171,7,248,22,149,13,23,197,2,28,249,22,132,14,0,21,35,114,120,
248,22,171,7,248,22,151,13,23,197,2,28,249,22,134,14,0,21,35,114,120,
34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34,23,195,2,
28,248,22,162,6,195,248,22,152,13,195,194,27,248,22,137,7,23,195,1,249,
22,153,13,248,22,174,7,250,22,138,14,0,6,35,114,120,34,47,34,28,249,
22,132,14,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91,47,
92,92,93,42,36,34,23,201,2,23,199,1,250,22,138,14,0,19,35,114,120,
28,248,22,162,6,195,248,22,154,13,195,194,27,248,22,137,7,23,195,1,249,
22,155,13,248,22,174,7,250,22,140,14,0,6,35,114,120,34,47,34,28,249,
22,134,14,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91,47,
92,92,93,42,36,34,23,201,2,23,199,1,250,22,140,14,0,19,35,114,120,
34,91,32,46,93,43,40,91,47,92,92,93,42,41,36,34,23,202,1,6,2,
2,92,49,80,159,43,36,37,2,20,28,248,22,162,6,194,248,22,152,13,194,
193,87,94,28,27,248,22,144,13,23,196,2,28,23,193,2,192,87,94,23,193,
1,28,248,22,162,6,23,196,2,27,248,22,166,13,23,197,2,28,23,193,2,
192,87,94,23,193,1,248,22,167,13,23,197,2,11,12,250,22,135,9,23,196,
2,2,21,23,197,2,28,248,22,166,13,23,195,2,12,248,22,163,11,249,22,
172,10,248,22,191,6,250,22,146,7,2,22,23,200,1,23,201,1,247,22,23,
87,94,28,27,248,22,144,13,23,196,2,28,23,193,2,192,87,94,23,193,1,
28,248,22,162,6,23,196,2,27,248,22,166,13,23,197,2,28,23,193,2,192,
87,94,23,193,1,248,22,167,13,23,197,2,11,12,250,22,135,9,23,196,2,
2,21,23,197,2,28,248,22,166,13,23,195,2,12,248,22,163,11,249,22,172,
2,92,49,80,159,43,36,37,2,20,28,248,22,162,6,194,248,22,154,13,194,
193,87,94,28,27,248,22,146,13,23,196,2,28,23,193,2,192,87,94,23,193,
1,28,248,22,162,6,23,196,2,27,248,22,168,13,23,197,2,28,23,193,2,
192,87,94,23,193,1,248,22,169,13,23,197,2,11,12,250,22,135,9,23,196,
2,2,21,23,197,2,28,248,22,168,13,23,195,2,12,248,22,165,11,249,22,
174,10,248,22,191,6,250,22,146,7,2,22,23,200,1,23,201,1,247,22,23,
87,94,28,27,248,22,146,13,23,196,2,28,23,193,2,192,87,94,23,193,1,
28,248,22,162,6,23,196,2,27,248,22,168,13,23,197,2,28,23,193,2,192,
87,94,23,193,1,248,22,169,13,23,197,2,11,12,250,22,135,9,23,196,2,
2,21,23,197,2,28,248,22,168,13,23,195,2,12,248,22,165,11,249,22,174,
10,248,22,191,6,250,22,146,7,2,22,23,200,1,23,201,1,247,22,23,87,
94,87,94,28,27,248,22,144,13,23,196,2,28,23,193,2,192,87,94,23,193,
1,28,248,22,162,6,23,196,2,27,248,22,166,13,23,197,2,28,23,193,2,
192,87,94,23,193,1,248,22,167,13,23,197,2,11,12,250,22,135,9,195,2,
21,23,197,2,28,248,22,166,13,23,195,2,12,248,22,163,11,249,22,172,10,
94,87,94,28,27,248,22,146,13,23,196,2,28,23,193,2,192,87,94,23,193,
1,28,248,22,162,6,23,196,2,27,248,22,168,13,23,197,2,28,23,193,2,
192,87,94,23,193,1,248,22,169,13,23,197,2,11,12,250,22,135,9,195,2,
21,23,197,2,28,248,22,168,13,23,195,2,12,248,22,165,11,249,22,174,10,
248,22,191,6,250,22,146,7,2,22,199,23,201,1,247,22,23,249,22,3,89,
162,8,44,36,49,9,223,2,33,33,196,248,22,163,11,249,22,138,11,23,196,
162,8,44,36,49,9,223,2,33,33,196,248,22,165,11,249,22,140,11,23,196,
1,247,22,23,87,94,250,80,159,38,39,36,2,6,196,197,251,80,159,39,41,
36,2,6,32,0,89,162,8,44,36,44,9,222,33,35,197,198,32,37,89,162,
43,41,58,65,99,108,111,111,112,222,33,38,28,248,22,75,23,199,2,87,94,
23,198,1,248,23,196,1,251,22,146,7,2,23,23,199,1,28,248,22,75,23,
203,2,87,94,23,202,1,23,201,1,250,22,1,22,162,13,23,204,1,23,205,
1,23,198,1,27,249,22,162,13,248,22,68,23,202,2,23,199,2,28,248,22,
157,13,23,194,2,27,250,22,1,22,162,13,23,197,1,23,202,2,28,248,22,
157,13,23,194,2,192,87,94,23,193,1,27,248,22,69,23,202,1,28,248,22,
203,2,87,94,23,202,1,23,201,1,250,22,1,22,164,13,23,204,1,23,205,
1,23,198,1,27,249,22,164,13,248,22,68,23,202,2,23,199,2,28,248,22,
159,13,23,194,2,27,250,22,1,22,164,13,23,197,1,23,202,2,28,248,22,
159,13,23,194,2,192,87,94,23,193,1,27,248,22,69,23,202,1,28,248,22,
75,23,194,2,87,94,23,193,1,248,23,199,1,251,22,146,7,2,23,23,202,
1,28,248,22,75,23,206,2,87,94,23,205,1,23,204,1,250,22,1,22,162,
13,23,207,1,23,208,1,23,201,1,27,249,22,162,13,248,22,68,23,197,2,
23,202,2,28,248,22,157,13,23,194,2,27,250,22,1,22,162,13,23,197,1,
204,28,248,22,157,13,193,192,253,2,37,203,204,205,206,23,15,248,22,69,201,
1,28,248,22,75,23,206,2,87,94,23,205,1,23,204,1,250,22,1,22,164,
13,23,207,1,23,208,1,23,201,1,27,249,22,164,13,248,22,68,23,197,2,
23,202,2,28,248,22,159,13,23,194,2,27,250,22,1,22,164,13,23,197,1,
204,28,248,22,159,13,193,192,253,2,37,203,204,205,206,23,15,248,22,69,201,
253,2,37,202,203,204,205,206,248,22,69,200,87,94,23,193,1,27,248,22,69,
23,201,1,28,248,22,75,23,194,2,87,94,23,193,1,248,23,198,1,251,22,
146,7,2,23,23,201,1,28,248,22,75,23,205,2,87,94,23,204,1,23,203,
1,250,22,1,22,162,13,23,206,1,23,207,1,23,200,1,27,249,22,162,13,
248,22,68,23,197,2,23,201,2,28,248,22,157,13,23,194,2,27,250,22,1,
22,162,13,23,197,1,203,28,248,22,157,13,193,192,253,2,37,202,203,204,205,
206,248,22,69,201,253,2,37,201,202,203,204,205,248,22,69,200,27,247,22,185,
13,253,2,37,198,199,200,201,202,198,87,95,28,28,248,22,145,13,23,194,2,
10,27,248,22,144,13,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,
22,162,6,23,195,2,27,248,22,166,13,23,196,2,28,23,193,2,192,87,94,
23,193,1,248,22,167,13,23,196,2,11,12,252,22,135,9,23,200,2,2,24,
1,250,22,1,22,164,13,23,206,1,23,207,1,23,200,1,27,249,22,164,13,
248,22,68,23,197,2,23,201,2,28,248,22,159,13,23,194,2,27,250,22,1,
22,164,13,23,197,1,203,28,248,22,159,13,193,192,253,2,37,202,203,204,205,
206,248,22,69,201,253,2,37,201,202,203,204,205,248,22,69,200,27,247,22,187,
13,253,2,37,198,199,200,201,202,198,87,95,28,28,248,22,147,13,23,194,2,
10,27,248,22,146,13,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,
22,162,6,23,195,2,27,248,22,168,13,23,196,2,28,23,193,2,192,87,94,
23,193,1,248,22,169,13,23,196,2,11,12,252,22,135,9,23,200,2,2,24,
35,23,198,2,23,199,2,28,28,248,22,162,6,23,195,2,10,248,22,150,7,
23,195,2,87,94,23,194,1,12,252,22,135,9,23,200,2,2,25,36,23,198,
2,23,199,1,91,159,38,11,90,161,38,35,11,248,22,165,13,23,197,2,87,
2,23,199,1,91,159,38,11,90,161,38,35,11,248,22,167,13,23,197,2,87,
94,23,195,1,87,94,28,192,12,250,22,136,9,23,201,1,2,26,23,199,1,
249,22,7,194,195,91,159,37,11,90,161,37,35,11,87,95,28,28,248,22,145,
13,23,196,2,10,27,248,22,144,13,23,197,2,28,23,193,2,192,87,94,23,
193,1,28,248,22,162,6,23,197,2,27,248,22,166,13,23,198,2,28,23,193,
2,192,87,94,23,193,1,248,22,167,13,23,198,2,11,12,252,22,135,9,2,
249,22,7,194,195,91,159,37,11,90,161,37,35,11,87,95,28,28,248,22,147,
13,23,196,2,10,27,248,22,146,13,23,197,2,28,23,193,2,192,87,94,23,
193,1,28,248,22,162,6,23,197,2,27,248,22,168,13,23,198,2,28,23,193,
2,192,87,94,23,193,1,248,22,169,13,23,198,2,11,12,252,22,135,9,2,
9,2,24,35,23,200,2,23,201,2,28,28,248,22,162,6,23,197,2,10,248,
22,150,7,23,197,2,12,252,22,135,9,2,9,2,25,36,23,200,2,23,201,
2,91,159,38,11,90,161,38,35,11,248,22,165,13,23,199,2,87,94,23,195,
2,91,159,38,11,90,161,38,35,11,248,22,167,13,23,199,2,87,94,23,195,
1,87,94,28,192,12,250,22,136,9,2,9,2,26,23,201,2,249,22,7,194,
195,27,249,22,154,13,250,22,137,14,0,20,35,114,120,35,34,40,63,58,91,
46,93,91,94,46,93,42,124,41,36,34,248,22,150,13,23,201,1,28,248,22,
162,6,23,203,2,249,22,174,7,23,204,1,8,63,23,202,1,28,248,22,145,
13,23,199,2,248,22,146,13,23,199,1,87,94,23,198,1,247,22,147,13,28,
248,22,144,13,194,249,22,162,13,195,194,192,91,159,37,11,90,161,37,35,11,
87,95,28,28,248,22,145,13,23,196,2,10,27,248,22,144,13,23,197,2,28,
23,193,2,192,87,94,23,193,1,28,248,22,162,6,23,197,2,27,248,22,166,
13,23,198,2,28,23,193,2,192,87,94,23,193,1,248,22,167,13,23,198,2,
195,27,249,22,156,13,250,22,139,14,0,20,35,114,120,35,34,40,63,58,91,
46,93,91,94,46,93,42,124,41,36,34,248,22,152,13,23,201,1,28,248,22,
162,6,23,203,2,249,22,174,7,23,204,1,8,63,23,202,1,28,248,22,147,
13,23,199,2,248,22,148,13,23,199,1,87,94,23,198,1,247,22,149,13,28,
248,22,146,13,194,249,22,164,13,195,194,192,91,159,37,11,90,161,37,35,11,
87,95,28,28,248,22,147,13,23,196,2,10,27,248,22,146,13,23,197,2,28,
23,193,2,192,87,94,23,193,1,28,248,22,162,6,23,197,2,27,248,22,168,
13,23,198,2,28,23,193,2,192,87,94,23,193,1,248,22,169,13,23,198,2,
11,12,252,22,135,9,2,10,2,24,35,23,200,2,23,201,2,28,28,248,22,
162,6,23,197,2,10,248,22,150,7,23,197,2,12,252,22,135,9,2,10,2,
25,36,23,200,2,23,201,2,91,159,38,11,90,161,38,35,11,248,22,165,13,
25,36,23,200,2,23,201,2,91,159,38,11,90,161,38,35,11,248,22,167,13,
23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,136,9,2,10,2,26,
23,201,2,249,22,7,194,195,27,249,22,154,13,249,22,160,7,250,22,138,14,
0,9,35,114,120,35,34,91,46,93,34,248,22,150,13,23,203,1,6,1,1,
23,201,2,249,22,7,194,195,27,249,22,156,13,249,22,160,7,250,22,140,14,
0,9,35,114,120,35,34,91,46,93,34,248,22,152,13,23,203,1,6,1,1,
95,28,248,22,162,6,23,202,2,249,22,174,7,23,203,1,8,63,23,201,1,
28,248,22,145,13,23,199,2,248,22,146,13,23,199,1,87,94,23,198,1,247,
22,147,13,28,248,22,144,13,194,249,22,162,13,195,194,192,249,247,22,129,5,
28,248,22,147,13,23,199,2,248,22,148,13,23,199,1,87,94,23,198,1,247,
22,149,13,28,248,22,146,13,194,249,22,164,13,195,194,192,249,247,22,129,5,
194,11,249,80,159,37,46,36,9,9,249,80,159,37,46,36,195,9,27,247,22,
187,13,249,80,158,38,47,28,23,195,2,27,248,22,179,7,6,11,11,80,76,
189,13,249,80,158,38,47,28,23,195,2,27,248,22,179,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,162,13,248,22,183,13,69,97,100,100,111,110,45,100,105,114,247,
196,1,250,22,164,13,248,22,185,13,69,97,100,100,111,110,45,100,105,114,247,
22,177,7,6,8,8,99,111,108,108,101,99,116,115,11,27,248,80,159,41,52,
36,250,22,81,23,203,1,248,22,77,248,22,183,13,72,99,111,108,108,101,99,
116,115,45,100,105,114,23,204,1,28,23,194,2,249,22,67,23,196,1,23,195,
1,192,32,47,89,162,8,44,38,54,2,18,222,33,48,27,249,22,130,14,23,
197,2,23,198,2,28,23,193,2,87,94,23,196,1,27,248,22,92,23,195,2,
27,27,248,22,101,23,197,1,27,249,22,130,14,23,201,2,23,196,2,28,23,
193,2,87,94,23,194,1,27,248,22,92,23,195,2,27,250,2,47,23,203,2,
23,204,1,248,22,101,23,199,1,28,249,22,156,7,23,196,2,2,27,249,22,
81,23,202,2,194,249,22,67,248,22,153,13,23,197,1,23,195,1,87,95,23,
199,1,23,193,1,28,249,22,156,7,23,196,2,2,27,249,22,81,23,200,2,
9,249,22,67,248,22,153,13,23,197,1,9,28,249,22,156,7,23,196,2,2,
27,249,22,81,197,194,87,94,23,196,1,249,22,67,248,22,153,13,23,197,1,
194,87,94,23,193,1,28,249,22,156,7,23,198,2,2,27,249,22,81,195,9,
87,94,23,194,1,249,22,67,248,22,153,13,23,199,1,9,87,95,28,28,248,
22,150,7,194,10,248,22,162,6,194,12,250,22,135,9,2,13,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,76,195,249,22,4,22,144,13,196,11,12,250,22,135,9,2,13,
6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,197,250,2,47,197,
195,28,248,22,162,6,197,248,22,173,7,197,196,32,50,89,162,8,44,39,57,
2,18,222,33,53,32,51,89,162,8,44,38,54,70,102,111,117,110,100,45,101,
120,101,99,222,33,52,28,23,193,2,91,159,38,11,90,161,38,35,11,248,22,
165,13,23,199,2,87,95,23,195,1,23,194,1,27,28,23,198,2,27,248,22,
170,13,23,201,2,28,249,22,169,8,23,195,2,23,202,2,11,28,248,22,166,
13,23,194,2,250,2,51,23,201,2,23,202,2,249,22,162,13,23,200,2,23,
198,1,250,2,51,23,201,2,23,202,2,23,196,1,11,28,23,193,2,192,87,
94,23,193,1,27,28,248,22,144,13,23,196,2,27,249,22,162,13,23,198,2,
23,201,2,28,28,248,22,157,13,193,10,248,22,156,13,193,192,11,11,28,23,
193,2,192,87,94,23,193,1,28,23,199,2,11,27,248,22,170,13,23,202,2,
28,249,22,169,8,23,195,2,23,203,1,11,28,248,22,166,13,23,194,2,250,
2,51,23,202,1,23,203,1,249,22,162,13,23,201,1,23,198,1,250,2,51,
201,202,195,194,28,248,22,75,23,197,2,11,27,248,22,169,13,248,22,68,23,
199,2,27,249,22,162,13,23,196,1,23,197,2,28,248,22,156,13,23,194,2,
250,2,51,198,199,195,87,94,23,193,1,27,248,22,69,23,200,1,28,248,22,
75,23,194,2,11,27,248,22,169,13,248,22,68,23,196,2,27,249,22,162,13,
23,196,1,23,200,2,28,248,22,156,13,23,194,2,250,2,51,201,202,195,87,
94,23,193,1,27,248,22,69,23,197,1,28,248,22,75,23,194,2,11,27,248,
22,169,13,248,22,68,195,27,249,22,162,13,23,196,1,202,28,248,22,156,13,
193,250,2,51,204,205,195,251,2,50,204,205,206,248,22,69,199,87,95,28,27,
248,22,144,13,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,162,
6,23,196,2,27,248,22,166,13,23,197,2,28,23,193,2,192,87,94,23,193,
1,248,22,167,13,23,197,2,11,12,250,22,135,9,2,14,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,144,13,23,197,2,28,23,
193,2,192,87,94,23,193,1,28,248,22,162,6,23,197,2,27,248,22,166,13,
23,198,2,28,23,193,2,192,87,94,23,193,1,248,22,167,13,23,198,2,11,
248,22,166,13,23,196,2,11,10,12,250,22,135,9,2,14,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,166,13,23,195,2,91,159,38,
11,90,161,38,35,11,248,22,165,13,23,198,2,249,22,167,8,194,68,114,101,
108,97,116,105,118,101,11,27,248,22,179,7,6,4,4,80,65,84,72,251,2,
50,23,199,1,23,200,1,23,201,1,28,23,197,2,27,249,80,159,43,47,37,
23,200,1,9,28,249,22,167,8,247,22,181,7,2,20,249,22,67,248,22,153,
13,5,1,46,23,195,1,192,9,27,248,22,169,13,23,196,1,28,248,22,156,
13,193,250,2,51,198,199,195,11,250,80,159,38,48,36,196,197,11,250,80,159,
38,48,36,196,11,11,87,94,249,22,153,6,247,22,189,4,195,248,22,179,5,
249,22,174,3,35,249,22,158,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,183,13,2,19,27,249,80,
159,40,48,36,23,196,1,11,27,27,248,22,177,3,23,200,1,28,192,192,35,
27,27,248,22,177,3,23,202,1,28,192,192,35,249,22,156,5,23,197,1,83,
158,39,20,97,95,89,162,8,44,35,47,9,224,3,2,33,57,23,195,1,23,
196,1,27,248,22,141,5,23,195,1,248,80,159,38,53,36,193,159,35,20,103,
159,35,16,1,11,16,0,83,158,41,20,100,144,67,35,37,117,116,105,108,115,
29,11,11,11,11,11,10,42,80,158,35,35,20,103,159,37,16,17,2,1,2,
2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,
2,13,2,14,2,15,30,2,17,1,20,112,97,114,97,109,101,116,101,114,105,
122,97,116,105,111,110,45,107,101,121,4,30,2,17,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,3,16,0,
16,0,35,16,0,35,16,4,2,5,2,4,2,2,2,8,39,11,11,38,35,
11,11,11,16,11,2,7,2,6,2,15,2,14,2,12,2,11,2,3,2,10,
2,13,2,9,2,1,16,11,11,11,11,11,11,11,11,11,11,11,11,16,11,
2,7,2,6,2,15,2,14,2,12,2,11,2,3,2,10,2,13,2,9,2,
1,46,46,36,11,11,11,16,0,16,0,16,0,35,35,11,11,11,11,16,0,
16,0,16,0,35,35,16,0,16,17,83,158,35,16,2,89,162,43,36,48,2,
18,223,0,33,28,80,159,35,53,36,83,158,35,16,2,89,162,8,44,36,55,
2,18,223,0,33,29,80,159,35,52,36,83,158,35,16,2,32,0,89,162,43,
36,44,2,1,222,33,30,80,159,35,35,36,83,158,35,16,2,249,22,164,6,
7,92,7,92,80,159,35,36,36,83,158,35,16,2,89,162,43,36,53,2,3,
223,0,33,31,80,159,35,37,36,83,158,35,16,2,32,0,89,162,8,44,37,
49,2,4,222,33,32,80,159,35,38,36,83,158,35,16,2,32,0,89,162,8,
44,38,50,2,5,222,33,34,80,159,35,39,36,83,158,35,16,2,89,162,8,
45,37,47,2,6,223,0,33,36,80,159,35,40,36,83,158,35,16,2,32,0,
89,162,43,39,51,2,7,222,33,39,80,159,35,41,36,83,158,35,16,2,32,
0,89,162,43,38,49,2,8,222,33,40,80,159,35,42,36,83,158,35,16,2,
32,0,89,162,43,37,52,2,9,222,33,41,80,159,35,43,36,83,158,35,16,
2,32,0,89,162,43,37,53,2,10,222,33,42,80,159,35,44,36,83,158,35,
16,2,32,0,89,162,43,36,43,2,11,222,33,43,80,159,35,45,36,83,158,
35,16,2,83,158,38,20,96,96,2,12,89,162,43,35,43,9,223,0,33,44,
89,162,43,36,44,9,223,0,33,45,89,162,43,37,54,9,223,0,33,46,80,
159,35,46,36,83,158,35,16,2,27,248,22,190,13,248,22,173,7,27,28,249,
22,167,8,247,22,181,7,2,20,6,1,1,59,6,1,1,58,250,22,146,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,13,223,0,33,49,80,159,35,47,36,83,158,
35,16,2,83,158,38,20,96,96,2,14,89,162,8,44,38,53,9,223,0,33,
54,89,162,43,37,46,9,223,0,33,55,89,162,43,36,45,9,223,0,33,56,
80,159,35,48,36,83,158,35,16,2,89,162,43,38,51,2,15,223,0,33,58,
80,159,35,49,36,94,29,94,2,16,68,35,37,107,101,114,110,101,108,11,29,
94,2,16,69,35,37,109,105,110,45,115,116,120,11,9,9,9,35,0};
EVAL_ONE_SIZED_STR((char *)expr, 5016);
36,250,22,81,23,203,1,248,22,77,248,22,185,13,72,99,111,108,108,101,99,
116,115,45,100,105,114,23,204,1,28,193,249,22,67,195,194,192,32,47,89,162,
8,44,38,54,2,18,222,33,48,27,249,22,132,14,23,197,2,23,198,2,28,
23,193,2,87,94,23,196,1,27,248,22,92,23,195,2,27,27,248,22,101,23,
197,1,27,249,22,132,14,23,201,2,23,196,2,28,23,193,2,87,94,23,194,
1,27,248,22,92,23,195,2,27,250,2,47,23,203,2,23,204,1,248,22,101,
23,199,1,28,249,22,156,7,23,196,2,2,27,249,22,81,23,202,2,194,249,
22,67,248,22,155,13,23,197,1,194,87,95,23,199,1,23,193,1,28,249,22,
156,7,23,196,2,2,27,249,22,81,23,200,2,9,249,22,67,248,22,155,13,
23,197,1,9,28,249,22,156,7,23,196,2,2,27,249,22,81,197,194,87,94,
23,196,1,249,22,67,248,22,155,13,23,197,1,194,87,94,23,193,1,28,249,
22,156,7,23,198,2,2,27,249,22,81,195,9,87,94,23,194,1,249,22,67,
248,22,155,13,23,199,1,9,87,95,28,28,248,22,150,7,194,10,248,22,162,
6,194,12,250,22,135,9,2,13,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,76,195,249,22,
4,22,146,13,196,11,12,250,22,135,9,2,13,6,13,13,108,105,115,116,32,
111,102,32,112,97,116,104,115,197,250,2,47,197,195,28,248,22,162,6,197,248,
22,173,7,197,196,32,50,89,162,8,44,39,57,2,18,222,33,53,32,51,89,
162,8,44,38,54,70,102,111,117,110,100,45,101,120,101,99,222,33,52,28,23,
193,2,91,159,38,11,90,161,38,35,11,248,22,167,13,23,199,2,87,95,23,
195,1,23,194,1,27,28,23,198,2,27,248,22,172,13,23,201,2,28,249,22,
169,8,23,195,2,23,202,2,11,28,248,22,168,13,23,194,2,250,2,51,23,
201,2,23,202,2,249,22,164,13,23,200,2,23,198,1,250,2,51,23,201,2,
23,202,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,
146,13,23,196,2,27,249,22,164,13,23,198,2,23,201,2,28,28,248,22,159,
13,193,10,248,22,158,13,193,192,11,11,28,23,193,2,192,87,94,23,193,1,
28,23,199,2,11,27,248,22,172,13,23,202,2,28,249,22,169,8,23,195,2,
23,203,1,11,28,248,22,168,13,23,194,2,250,2,51,23,202,1,23,203,1,
249,22,164,13,23,201,1,23,198,1,250,2,51,201,202,195,194,28,248,22,75,
23,197,2,11,27,248,22,171,13,248,22,68,23,199,2,27,249,22,164,13,23,
196,1,23,197,2,28,248,22,158,13,23,194,2,250,2,51,198,199,195,87,94,
23,193,1,27,248,22,69,23,200,1,28,248,22,75,23,194,2,11,27,248,22,
171,13,248,22,68,23,196,2,27,249,22,164,13,23,196,1,23,200,2,28,248,
22,158,13,23,194,2,250,2,51,201,202,195,87,94,23,193,1,27,248,22,69,
23,197,1,28,248,22,75,23,194,2,11,27,248,22,171,13,248,22,68,195,27,
249,22,164,13,23,196,1,202,28,248,22,158,13,193,250,2,51,204,205,195,251,
2,50,204,205,206,248,22,69,199,87,95,28,27,248,22,146,13,23,196,2,28,
23,193,2,192,87,94,23,193,1,28,248,22,162,6,23,196,2,27,248,22,168,
13,23,197,2,28,23,193,2,192,87,94,23,193,1,248,22,169,13,23,197,2,
11,12,250,22,135,9,2,14,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,146,13,23,197,2,28,23,193,2,192,87,94,23,193,1,
28,248,22,162,6,23,197,2,27,248,22,168,13,23,198,2,28,23,193,2,192,
87,94,23,193,1,248,22,169,13,23,198,2,11,248,22,168,13,23,196,2,11,
10,12,250,22,135,9,2,14,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,168,13,23,195,2,91,159,38,11,90,161,38,35,11,248,22,
167,13,23,198,2,249,22,167,8,194,68,114,101,108,97,116,105,118,101,11,27,
248,22,179,7,6,4,4,80,65,84,72,251,2,50,23,199,1,23,200,1,23,
201,1,28,23,197,2,27,249,80,159,43,47,37,23,200,1,9,28,249,22,167,
8,247,22,181,7,2,20,249,22,67,248,22,155,13,5,1,46,194,192,9,27,
248,22,171,13,23,196,1,28,248,22,158,13,193,250,2,51,198,199,195,11,250,
80,159,38,48,36,196,197,11,250,80,159,38,48,36,196,11,11,87,94,249,22,
153,6,247,22,189,4,195,248,22,179,5,249,22,174,3,35,249,22,158,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,185,13,2,19,27,249,80,159,40,48,36,23,196,1,11,27,27,
248,22,177,3,23,200,1,28,192,192,35,27,27,248,22,177,3,23,202,1,28,
192,192,35,249,22,156,5,23,197,1,83,158,39,20,97,95,89,162,8,44,35,
47,9,224,3,2,33,57,23,195,1,23,196,1,27,248,22,141,5,23,195,1,
248,80,159,38,53,36,193,159,35,20,103,159,35,16,1,11,16,0,83,158,41,
20,100,144,67,35,37,117,116,105,108,115,29,11,11,11,11,11,10,42,80,158,
35,35,20,103,159,37,16,17,2,1,2,2,2,3,2,4,2,5,2,6,2,
7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,30,2,17,1,
20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,
4,30,2,17,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,3,16,0,16,0,35,16,0,35,16,4,2,5,
2,4,2,2,2,8,39,11,11,38,35,11,11,11,16,11,2,7,2,6,2,
15,2,14,2,12,2,11,2,3,2,10,2,13,2,9,2,1,16,11,11,11,
11,11,11,11,11,11,11,11,11,16,11,2,7,2,6,2,15,2,14,2,12,
2,11,2,3,2,10,2,13,2,9,2,1,46,46,36,11,11,11,16,0,16,
0,16,0,35,35,11,11,11,11,16,0,16,0,16,0,35,35,16,0,16,17,
83,158,35,16,2,89,162,43,36,48,2,18,223,0,33,28,80,159,35,53,36,
83,158,35,16,2,89,162,8,44,36,55,2,18,223,0,33,29,80,159,35,52,
36,83,158,35,16,2,32,0,89,162,43,36,44,2,1,222,33,30,80,159,35,
35,36,83,158,35,16,2,249,22,164,6,7,92,7,92,80,159,35,36,36,83,
158,35,16,2,89,162,43,36,53,2,3,223,0,33,31,80,159,35,37,36,83,
158,35,16,2,32,0,89,162,8,44,37,49,2,4,222,33,32,80,159,35,38,
36,83,158,35,16,2,32,0,89,162,8,44,38,50,2,5,222,33,34,80,159,
35,39,36,83,158,35,16,2,89,162,8,45,37,47,2,6,223,0,33,36,80,
159,35,40,36,83,158,35,16,2,32,0,89,162,43,39,51,2,7,222,33,39,
80,159,35,41,36,83,158,35,16,2,32,0,89,162,43,38,49,2,8,222,33,
40,80,159,35,42,36,83,158,35,16,2,32,0,89,162,43,37,52,2,9,222,
33,41,80,159,35,43,36,83,158,35,16,2,32,0,89,162,43,37,53,2,10,
222,33,42,80,159,35,44,36,83,158,35,16,2,32,0,89,162,43,36,43,2,
11,222,33,43,80,159,35,45,36,83,158,35,16,2,83,158,38,20,96,96,2,
12,89,162,43,35,43,9,223,0,33,44,89,162,43,36,44,9,223,0,33,45,
89,162,43,37,54,9,223,0,33,46,80,159,35,46,36,83,158,35,16,2,27,
248,22,128,14,248,22,173,7,27,28,249,22,167,8,247,22,181,7,2,20,6,
1,1,59,6,1,1,58,250,22,146,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,13,
223,0,33,49,80,159,35,47,36,83,158,35,16,2,83,158,38,20,96,96,2,
14,89,162,8,44,38,53,9,223,0,33,54,89,162,43,37,46,9,223,0,33,
55,89,162,43,36,45,9,223,0,33,56,80,159,35,48,36,83,158,35,16,2,
89,162,43,38,51,2,15,223,0,33,58,80,159,35,49,36,94,29,94,2,16,
68,35,37,107,101,114,110,101,108,11,29,94,2,16,69,35,37,109,105,110,45,
115,116,120,11,9,9,9,35,0};
EVAL_ONE_SIZED_STR((char *)expr, 5006);
}
{
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,48,46,53,8,0,0,0,1,0,0,6,0,19,0,
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,48,46,54,8,0,0,0,1,0,0,6,0,19,0,
34,0,48,0,62,0,76,0,115,0,0,0,6,1,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,
11,29,94,2,1,68,35,37,101,120,112,111,98,115,11,29,94,2,1,68,35,
37,107,101,114,110,101,108,11,97,35,11,8,165,241,98,159,2,2,35,35,159,
37,107,101,114,110,101,108,11,97,35,11,8,166,245,98,159,2,2,35,35,159,
2,3,35,35,159,2,4,35,35,159,2,5,35,35,159,2,6,35,35,159,2,
6,35,35,16,0,159,35,20,103,159,35,16,1,11,16,0,83,158,41,20,100,
144,69,35,37,98,117,105,108,116,105,110,29,11,11,11,11,11,18,96,11,42,
@ -360,12 +358,12 @@
EVAL_ONE_SIZED_STR((char *)expr, 299);
}
{
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,48,46,53,52,0,0,0,1,0,0,11,0,38,0,
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,48,46,54,52,0,0,0,1,0,0,11,0,38,0,
44,0,57,0,71,0,93,0,119,0,131,0,149,0,169,0,181,0,197,0,220,
0,0,1,5,1,10,1,15,1,24,1,29,1,60,1,64,1,72,1,81,1,
89,1,192,1,237,1,1,2,30,2,61,2,117,2,127,2,174,2,184,2,191,
2,78,4,91,4,110,4,229,4,241,4,137,5,151,5,17,6,23,6,37,6,
64,6,149,6,151,6,217,6,172,12,231,12,9,13,0,0,146,15,0,0,70,
2,78,4,91,4,110,4,229,4,241,4,119,5,133,5,255,5,5,6,19,6,
46,6,131,6,133,6,199,6,154,12,213,12,247,12,0,0,128,15,0,0,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,29,94,2,3,67,35,37,117,116,105,108,115,11,29,94,2,3,68,35,37,
@ -384,30 +382,30 @@
63,108,105,98,67,105,103,110,111,114,101,100,249,22,14,195,80,159,37,45,37,
249,80,159,37,48,36,195,10,27,28,23,195,2,28,249,22,167,8,23,197,2,
80,158,38,46,87,94,23,195,1,80,158,36,47,27,248,22,176,4,23,197,2,
28,248,22,144,13,23,194,2,91,159,38,11,90,161,38,35,11,248,22,165,13,
28,248,22,146,13,23,194,2,91,159,38,11,90,161,38,35,11,248,22,167,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,130,5,28,
192,192,247,22,184,13,20,14,159,80,158,35,39,250,80,158,38,40,249,22,27,
11,80,158,40,39,22,130,5,28,248,22,144,13,23,198,2,23,197,1,87,94,
23,197,1,247,22,184,13,247,194,250,22,162,13,23,197,1,23,199,1,249,80,
158,42,38,23,198,1,2,17,252,22,162,13,23,199,1,23,201,1,2,18,247,
192,192,247,22,186,13,20,14,159,80,158,35,39,250,80,158,38,40,249,22,27,
11,80,158,40,39,22,130,5,28,248,22,146,13,23,198,2,23,197,1,87,94,
23,197,1,247,22,186,13,247,194,250,22,164,13,23,197,1,23,199,1,249,80,
158,42,38,23,198,1,2,17,252,22,164,13,23,199,1,23,201,1,2,18,247,
22,182,7,249,80,158,44,38,23,200,1,80,159,44,35,37,87,94,23,194,1,
27,250,22,179,13,196,11,32,0,89,162,8,44,35,40,9,222,11,28,192,249,
22,67,195,194,11,27,252,22,162,13,23,200,1,23,202,1,2,18,247,22,182,
7,249,80,158,45,38,23,201,1,80,159,45,35,37,27,250,22,179,13,196,11,
27,250,22,181,13,196,11,32,0,89,162,8,44,35,40,9,222,11,28,192,249,
22,67,195,194,11,27,252,22,164,13,23,200,1,23,202,1,2,18,247,22,182,
7,249,80,158,45,38,23,201,1,80,159,45,35,37,27,250,22,181,13,196,11,
32,0,89,162,8,44,35,40,9,222,11,28,192,249,22,67,195,194,11,249,247,
22,189,13,248,22,68,195,195,27,250,22,162,13,23,198,1,23,200,1,249,80,
158,43,38,23,199,1,2,17,27,250,22,179,13,196,11,32,0,89,162,8,44,
22,191,13,248,22,68,195,195,27,250,22,164,13,23,198,1,23,200,1,249,80,
158,43,38,23,199,1,2,17,27,250,22,181,13,196,11,32,0,89,162,8,44,
35,40,9,222,11,28,192,249,22,67,195,194,11,249,247,22,128,5,248,22,68,
195,195,249,247,22,128,5,194,195,87,94,28,248,80,158,36,37,23,195,2,12,
250,22,135,9,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,
100,6,25,25,112,97,116,104,32,111,114,32,118,97,108,105,100,45,112,97,116,
104,32,115,116,114,105,110,103,23,197,2,91,159,41,11,90,161,36,35,11,28,
248,22,168,13,23,201,2,23,200,1,27,247,22,130,5,28,23,193,2,249,22,
169,13,23,203,1,23,195,1,200,90,161,38,36,11,248,22,165,13,23,194,2,
248,22,170,13,23,201,2,23,200,1,27,247,22,130,5,28,23,193,2,249,22,
171,13,23,203,1,23,195,1,200,90,161,38,36,11,248,22,167,13,23,194,2,
87,94,23,196,1,90,161,36,39,11,28,249,22,167,8,23,196,2,68,114,101,
108,97,116,105,118,101,87,94,23,194,1,2,16,23,194,1,90,161,36,40,11,
247,22,186,13,27,89,162,43,36,49,62,122,111,225,7,5,3,33,27,27,89,
247,22,188,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,46,
9,223,5,33,29,23,203,2,27,28,23,195,1,27,249,22,5,89,162,8,44,
36,52,9,225,13,11,9,33,30,23,205,2,27,28,23,196,2,11,193,28,192,
@ -420,141 +418,140 @@
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,130,14,2,37,23,196,2,28,23,193,2,87,94,23,194,1,249,22,67,
248,22,92,23,196,2,27,248,22,101,23,197,1,27,249,22,130,14,2,37,23,
249,22,132,14,2,37,23,196,2,28,23,193,2,87,94,23,194,1,249,22,67,
248,22,92,23,196,2,27,248,22,101,23,197,1,27,249,22,132,14,2,37,23,
196,2,28,23,193,2,87,94,23,194,1,249,22,67,248,22,92,23,196,2,27,
248,22,101,23,197,1,27,249,22,130,14,2,37,23,196,2,28,23,193,2,87,
248,22,101,23,197,1,27,249,22,132,14,2,37,23,196,2,28,23,193,2,87,
94,23,194,1,249,22,67,248,22,92,23,196,2,248,2,36,248,22,101,23,197,
1,248,22,77,194,248,22,77,194,248,22,77,194,32,39,89,162,43,36,54,2,
19,222,33,40,28,248,22,75,248,22,69,23,195,2,249,22,7,9,248,22,68,
195,91,159,37,11,90,161,37,35,11,27,248,22,69,23,197,2,28,248,22,75,
248,22,69,23,195,2,249,22,7,9,248,22,68,195,91,159,37,11,90,161,37,
35,11,27,248,22,69,23,197,2,28,248,22,75,248,22,69,23,195,2,249,22,
7,9,248,22,68,195,91,159,37,11,90,161,37,35,11,248,2,39,248,22,69,
23,197,2,249,22,7,249,22,67,248,22,68,23,200,1,23,197,1,195,249,22,
7,249,22,67,248,22,68,23,200,1,23,197,1,195,249,22,7,249,22,67,248,
22,68,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,174,4,195,12,250,22,135,9,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,141,2,80,
159,41,42,37,248,22,150,14,247,22,191,11,11,28,23,193,2,192,87,94,23,
193,1,27,247,22,125,87,94,250,22,139,2,80,159,42,42,37,248,22,150,14,
247,22,191,11,195,192,250,22,139,2,195,198,66,97,116,116,97,99,104,251,211,
197,198,199,10,28,192,250,22,134,9,11,196,195,248,22,132,9,194,28,249,22,
168,6,194,6,1,1,46,2,16,28,249,22,168,6,194,6,2,2,46,46,62,
117,112,192,28,249,22,169,8,248,22,69,23,200,2,23,197,1,28,249,22,167,
8,248,22,68,23,200,2,23,196,1,251,22,132,9,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,69,248,22,82,249,22,67,23,206,1,23,
202,1,12,12,247,192,20,14,159,80,159,39,44,37,249,22,67,248,22,150,14,
247,22,191,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,156,4,23,196,1,249,247,22,129,5,23,198,1,248,
22,55,248,22,148,13,23,198,1,87,94,28,28,248,22,144,13,23,197,2,10,
248,22,180,4,23,197,2,12,28,23,198,2,250,22,134,9,11,6,15,15,98,
97,100,32,109,111,100,117,108,101,32,112,97,116,104,23,201,2,250,22,135,9,
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,65,23,197,2,249,22,167,8,248,22,68,
23,199,2,2,3,11,248,22,175,4,248,22,92,197,28,28,248,22,65,23,197,
2,249,22,167,8,248,22,68,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,191,11,23,197,1,90,161,36,35,10,249,22,157,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,53,23,199,2,27,250,22,141,
2,80,159,43,43,37,249,22,67,23,204,2,247,22,185,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,58,23,204,2,11,27,251,80,158,47,50,2,20,23,202,1,28,248,22,
75,23,199,2,23,199,2,248,22,68,23,199,2,28,248,22,75,23,199,2,9,
248,22,69,23,199,2,249,22,162,13,23,195,1,28,248,22,75,23,197,1,87,
94,23,197,1,6,7,7,109,97,105,110,46,115,115,249,22,185,6,23,199,1,
6,3,3,46,115,115,28,248,22,162,6,23,199,2,87,94,23,194,1,27,248,
80,159,41,55,36,23,201,2,27,250,22,141,2,80,159,44,43,37,249,22,67,
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,162,13,
23,199,1,249,22,81,249,22,2,32,0,89,162,8,44,36,43,9,222,33,45,
23,200,1,248,22,77,23,200,1,28,248,22,144,13,23,199,2,87,94,23,194,
1,28,248,22,167,13,23,199,2,23,198,2,248,22,77,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,167,8,248,22,68,23,201,2,2,21,27,250,22,141,2,80,
159,43,43,37,249,22,67,23,204,2,247,22,185,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,
92,23,205,2,11,90,161,36,37,11,28,248,22,75,248,22,94,23,204,2,28,
248,22,75,23,194,2,249,22,132,14,0,8,35,114,120,34,91,46,93,34,23,
196,2,11,10,27,27,28,23,197,2,249,22,81,28,248,22,75,248,22,94,23,
208,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,81,249,22,2,80,
159,51,56,36,248,22,94,23,211,2,23,197,2,28,248,22,75,23,196,2,248,
22,77,23,197,2,23,195,2,251,80,158,49,50,2,20,23,204,1,248,22,68,
23,198,2,248,22,69,23,198,1,249,22,162,13,23,195,1,28,23,198,1,87,
94,23,196,1,23,197,1,28,248,22,75,23,197,1,87,94,23,197,1,6,7,
7,109,97,105,110,46,115,115,28,249,22,132,14,0,8,35,114,120,34,91,46,
93,34,23,199,2,23,197,1,249,22,185,6,23,199,1,6,3,3,46,115,115,
28,249,22,167,8,248,22,68,23,201,2,64,102,105,108,101,249,22,169,13,248,
22,173,13,248,22,92,23,202,2,248,80,159,42,55,36,23,202,2,12,87,94,
28,28,248,22,144,13,23,194,2,10,248,22,184,7,23,194,2,87,94,23,200,
1,12,28,23,200,2,250,22,134,9,67,114,101,113,117,105,114,101,249,22,146,
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,68,23,199,2,6,0,0,23,203,1,87,94,23,200,1,
250,22,135,9,2,20,249,22,146,7,6,13,13,109,111,100,117,108,101,32,112,
97,116,104,126,97,28,23,198,2,248,22,68,23,199,2,6,0,0,23,201,2,
27,28,248,22,184,7,23,195,2,249,22,189,7,23,196,2,35,249,22,171,13,
248,22,172,13,23,197,2,11,27,28,248,22,184,7,23,196,2,249,22,189,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,184,7,23,199,2,250,22,7,2,22,249,22,189,7,23,203,2,37,
2,22,248,22,165,13,23,198,2,87,95,23,195,1,23,193,1,27,28,248,22,
184,7,23,200,2,249,22,189,7,23,201,2,38,249,80,158,47,52,23,197,2,
5,0,27,28,248,22,184,7,23,201,2,249,22,189,7,23,202,2,39,248,22,
175,4,23,200,2,27,27,250,22,141,2,80,159,51,42,37,248,22,150,14,247,
22,191,11,11,28,23,193,2,192,87,94,23,193,1,27,247,22,125,87,94,250,
22,139,2,80,159,52,42,37,248,22,150,14,247,22,191,11,195,192,87,95,28,
23,209,1,27,250,22,141,2,23,197,2,197,11,28,23,193,1,12,87,95,27,
27,28,248,22,17,80,159,51,45,37,80,159,50,45,37,247,22,19,250,22,25,
248,22,23,23,197,2,80,159,53,44,37,23,196,1,27,248,22,150,14,247,22,
191,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,159,50,45,37,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,139,2,23,197,1,197,10,12,28,28,248,
22,184,7,23,202,1,11,27,248,22,162,6,23,208,2,28,192,192,27,248,22,
53,23,209,2,28,192,192,28,248,22,65,23,209,2,249,22,167,8,248,22,68,
23,211,2,2,21,11,250,22,139,2,80,159,50,43,37,28,248,22,162,6,23,
210,2,249,22,67,23,211,1,248,80,159,53,55,36,23,213,1,87,94,23,210,
1,249,22,67,23,211,1,247,22,185,13,252,22,186,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,155,4,248,80,159,37,49,36,247,22,191,11,
248,22,129,5,80,159,36,36,36,248,22,182,12,80,159,36,41,36,159,35,20,
103,159,35,16,1,11,16,0,83,158,41,20,100,144,66,35,37,98,111,111,116,
29,11,11,11,11,11,10,36,80,158,35,35,20,103,159,39,16,19,2,1,2,
2,30,2,4,72,112,97,116,104,45,115,116,114,105,110,103,63,10,30,2,4,
75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,7,30,2,5,1,
20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,
4,30,2,5,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,3,2,6,2,7,2,8,2,9,2,10,2,11,
2,12,2,13,2,14,30,2,4,69,45,102,105,110,100,45,99,111,108,0,30,
2,4,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,6,30,
2,4,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,
120,9,2,15,16,0,16,0,35,16,0,35,16,11,2,9,2,10,2,7,2,
8,2,11,2,12,2,2,2,6,2,1,2,14,2,13,46,11,11,38,35,11,
11,11,16,1,2,15,16,1,11,16,1,2,15,36,36,36,11,11,11,16,0,
16,0,16,0,35,35,11,11,11,11,16,0,16,0,16,0,35,35,16,0,16,
16,83,158,35,16,2,89,162,43,36,44,9,223,0,33,23,80,159,35,57,36,
83,158,35,16,2,89,162,43,36,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,181,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,2,223,0,33,35,80,159,35,36,36,83,158,35,16,2,32,
0,89,162,8,44,36,41,2,6,222,192,80,159,35,41,36,83,158,35,16,2,
247,22,128,2,80,159,35,42,36,83,158,35,16,2,247,22,127,80,159,35,43,
36,83,158,35,16,2,247,22,63,80,159,35,44,36,83,158,35,16,2,248,22,
18,74,109,111,100,117,108,101,45,108,111,97,100,105,110,103,80,159,35,45,36,
83,158,35,16,2,11,80,158,35,46,83,158,35,16,2,11,80,158,35,47,83,
158,35,16,2,32,0,89,162,43,37,44,2,13,222,33,41,80,159,35,48,36,
83,158,35,16,2,89,162,8,44,36,44,2,14,223,0,33,50,80,159,35,49,
36,83,158,35,16,2,89,162,43,35,43,2,15,223,0,33,51,80,159,35,53,
36,95,29,94,2,3,68,35,37,107,101,114,110,101,108,11,29,94,2,3,69,
35,37,109,105,110,45,115,116,120,11,2,4,9,9,9,35,0};
EVAL_ONE_SIZED_STR((char *)expr, 4111);
195,91,159,37,11,90,161,37,35,11,27,248,22,69,196,28,248,22,75,248,22,
69,23,195,2,249,22,7,9,248,22,68,195,91,159,37,11,90,161,37,35,11,
27,248,22,69,196,28,248,22,75,248,22,69,23,195,2,249,22,7,9,248,22,
68,195,91,159,37,11,90,161,37,35,11,248,2,39,248,22,69,196,249,22,7,
249,22,67,248,22,68,199,196,195,249,22,7,249,22,67,248,22,68,199,196,195,
249,22,7,249,22,67,248,22,68,199,196,195,27,248,2,36,23,195,1,28,194,
192,248,2,39,193,87,95,28,248,22,174,4,195,12,250,22,135,9,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,
141,2,80,159,41,42,37,248,22,152,14,247,22,129,12,11,28,23,193,2,192,
87,94,23,193,1,27,247,22,125,87,94,250,22,139,2,80,159,42,42,37,248,
22,152,14,247,22,129,12,195,192,250,22,139,2,195,198,66,97,116,116,97,99,
104,251,211,197,198,199,10,28,192,250,22,134,9,11,196,195,248,22,132,9,194,
28,249,22,168,6,194,6,1,1,46,2,16,28,249,22,168,6,194,6,2,2,
46,46,62,117,112,192,28,249,22,169,8,248,22,69,23,200,2,23,197,1,28,
249,22,167,8,248,22,68,23,200,2,23,196,1,251,22,132,9,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,69,248,22,82,249,22,67,23,
206,1,23,202,1,12,12,247,192,20,14,159,80,159,39,44,37,249,22,67,248,
22,152,14,247,22,129,12,23,197,1,20,14,159,80,158,39,39,250,80,158,42,
40,249,22,27,11,80,158,44,39,22,156,4,23,196,1,249,247,22,129,5,23,
198,1,248,22,55,248,22,150,13,23,198,1,87,94,28,28,248,22,146,13,23,
197,2,10,248,22,180,4,23,197,2,12,28,23,198,2,250,22,134,9,11,6,
15,15,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,23,201,2,250,
22,135,9,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,65,23,197,2,249,22,167,8,
248,22,68,23,199,2,2,3,11,248,22,175,4,248,22,92,197,28,28,248,22,
65,23,197,2,249,22,167,8,248,22,68,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,129,12,23,197,1,90,161,36,35,10,249,22,157,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,53,23,199,2,27,
250,22,141,2,80,159,43,43,37,249,22,67,23,204,2,247,22,187,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,58,23,204,2,11,27,251,80,158,47,50,2,20,23,202,1,
28,248,22,75,23,199,2,23,199,2,248,22,68,23,199,2,28,248,22,75,23,
199,2,9,248,22,69,23,199,2,249,22,164,13,23,195,1,28,248,22,75,23,
197,1,87,94,23,197,1,6,7,7,109,97,105,110,46,115,115,249,22,185,6,
23,199,1,6,3,3,46,115,115,28,248,22,162,6,23,199,2,87,94,23,194,
1,27,248,80,159,41,55,36,23,201,2,27,250,22,141,2,80,159,44,43,37,
249,22,67,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,164,13,23,199,1,249,22,81,249,22,2,32,0,89,162,8,44,36,43,9,
222,33,45,23,200,1,248,22,77,23,200,1,28,248,22,146,13,23,199,2,87,
94,23,194,1,28,248,22,169,13,23,199,2,23,198,2,248,22,77,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,167,8,248,22,68,23,201,2,2,21,27,250,22,
141,2,80,159,43,43,37,249,22,67,23,204,2,247,22,187,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,92,23,205,2,11,90,161,36,37,11,28,248,22,75,248,22,94,23,
204,2,28,248,22,75,23,194,2,249,22,134,14,0,8,35,114,120,34,91,46,
93,34,23,196,2,11,10,27,27,28,23,197,2,249,22,81,28,248,22,75,248,
22,94,23,208,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,81,249,
22,2,80,159,51,56,36,248,22,94,23,211,2,23,197,2,28,248,22,75,23,
196,2,248,22,77,23,197,2,23,195,2,251,80,158,49,50,2,20,23,204,1,
248,22,68,23,198,2,248,22,69,23,198,1,249,22,164,13,23,195,1,28,23,
198,1,87,94,23,196,1,23,197,1,28,248,22,75,23,197,1,87,94,23,197,
1,6,7,7,109,97,105,110,46,115,115,28,249,22,134,14,0,8,35,114,120,
34,91,46,93,34,23,199,2,23,197,1,249,22,185,6,23,199,1,6,3,3,
46,115,115,28,249,22,167,8,248,22,68,23,201,2,64,102,105,108,101,249,22,
171,13,248,22,175,13,248,22,92,23,202,2,248,80,159,42,55,36,23,202,2,
12,87,94,28,28,248,22,146,13,23,194,2,10,248,22,184,7,23,194,2,87,
94,23,200,1,12,28,23,200,2,250,22,134,9,67,114,101,113,117,105,114,101,
249,22,146,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,68,23,199,2,6,0,0,23,203,1,87,94,
23,200,1,250,22,135,9,2,20,249,22,146,7,6,13,13,109,111,100,117,108,
101,32,112,97,116,104,126,97,28,23,198,2,248,22,68,23,199,2,6,0,0,
23,201,2,27,28,248,22,184,7,23,195,2,249,22,189,7,23,196,2,35,249,
22,173,13,248,22,174,13,23,197,2,11,27,28,248,22,184,7,23,196,2,249,
22,189,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,184,7,23,199,2,250,22,7,2,22,249,22,189,7,23,
203,2,37,2,22,248,22,167,13,23,198,2,87,95,23,195,1,23,193,1,27,
28,248,22,184,7,23,200,2,249,22,189,7,23,201,2,38,249,80,158,47,52,
23,197,2,5,0,27,28,248,22,184,7,23,201,2,249,22,189,7,23,202,2,
39,248,22,175,4,23,200,2,27,27,250,22,141,2,80,159,51,42,37,248,22,
152,14,247,22,129,12,11,28,23,193,2,192,87,94,23,193,1,27,247,22,125,
87,94,250,22,139,2,80,159,52,42,37,248,22,152,14,247,22,129,12,195,192,
87,95,28,23,209,1,27,250,22,141,2,23,197,2,197,11,28,23,193,1,12,
87,95,27,27,28,248,22,17,80,159,51,45,37,80,159,50,45,37,247,22,19,
250,22,25,248,22,23,23,197,2,80,159,53,44,37,23,196,1,27,248,22,152,
14,247,22,129,12,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,159,50,
45,37,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,139,2,23,197,1,197,10,12,
28,28,248,22,184,7,23,202,1,11,27,248,22,162,6,23,208,2,28,192,192,
27,248,22,53,23,209,2,28,192,192,28,248,22,65,23,209,2,249,22,167,8,
248,22,68,23,211,2,2,21,11,250,22,139,2,80,159,50,43,37,28,248,22,
162,6,23,210,2,249,22,67,23,211,1,248,80,159,53,55,36,23,213,1,87,
94,23,210,1,249,22,67,23,211,1,247,22,187,13,252,22,186,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,155,4,248,80,159,37,49,36,247,
22,129,12,248,22,129,5,80,159,36,36,36,248,22,184,12,80,159,36,41,36,
159,35,20,103,159,35,16,1,11,16,0,83,158,41,20,100,144,66,35,37,98,
111,111,116,29,11,11,11,11,11,10,36,80,158,35,35,20,103,159,39,16,19,
2,1,2,2,30,2,4,72,112,97,116,104,45,115,116,114,105,110,103,63,10,
30,2,4,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,7,30,
2,5,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,
107,101,121,4,30,2,5,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,3,2,6,2,7,2,8,2,9,2,
10,2,11,2,12,2,13,2,14,30,2,4,69,45,102,105,110,100,45,99,111,
108,0,30,2,4,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,
104,6,30,2,4,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,
102,102,105,120,9,2,15,16,0,16,0,35,16,0,35,16,11,2,9,2,10,
2,7,2,8,2,11,2,12,2,2,2,6,2,1,2,14,2,13,46,11,11,
38,35,11,11,11,16,1,2,15,16,1,11,16,1,2,15,36,36,36,11,11,
11,16,0,16,0,16,0,35,35,11,11,11,11,16,0,16,0,16,0,35,35,
16,0,16,16,83,158,35,16,2,89,162,43,36,44,9,223,0,33,23,80,159,
35,57,36,83,158,35,16,2,89,162,43,36,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,181,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,2,223,0,33,35,80,159,35,36,36,83,158,35,
16,2,32,0,89,162,8,44,36,41,2,6,222,192,80,159,35,41,36,83,158,
35,16,2,247,22,128,2,80,159,35,42,36,83,158,35,16,2,247,22,127,80,
159,35,43,36,83,158,35,16,2,247,22,63,80,159,35,44,36,83,158,35,16,
2,248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105,110,103,80,159,
35,45,36,83,158,35,16,2,11,80,158,35,46,83,158,35,16,2,11,80,158,
35,47,83,158,35,16,2,32,0,89,162,43,37,44,2,13,222,33,41,80,159,
35,48,36,83,158,35,16,2,89,162,8,44,36,44,2,14,223,0,33,50,80,
159,35,49,36,83,158,35,16,2,89,162,43,35,43,2,15,223,0,33,51,80,
159,35,53,36,95,29,94,2,3,68,35,37,107,101,114,110,101,108,11,29,94,
2,3,69,35,37,109,105,110,45,115,116,120,11,2,4,9,9,9,35,0};
EVAL_ONE_SIZED_STR((char *)expr, 4093);
}

View File

@ -499,6 +499,7 @@ static void make_kernel_env(void)
MZTIMEIT(exn, scheme_init_exn(env));
#endif
MZTIMEIT(process, scheme_init_thread(env));
MZTIMEIT(reduced, scheme_init_reduced_proc_struct(env));
#ifndef NO_SCHEME_THREADS
MZTIMEIT(sema, scheme_init_sema(env));
#endif

View File

@ -3460,17 +3460,16 @@ static int is_arity(Scheme_Object *a, int at_least_ok, int list_ok)
return 0;
}
static void init_reduced_proc_struct()
void scheme_init_reduced_proc_struct(Scheme_Env *env)
{
if (!scheme_reduced_procedure_struct) {
Scheme_Object *pr, *orig;
Scheme_Object *pr;
REGISTER_SO(scheme_reduced_procedure_struct);
pr = scheme_get_param(scheme_current_config(), MZCONFIG_INSPECTOR);
while (((Scheme_Inspector *)pr)->superior->superior) {
pr = (Scheme_Object *)((Scheme_Inspector *)pr)->superior;
}
orig = scheme_builtin_value("prop:procedure");
scheme_reduced_procedure_struct = scheme_make_proc_struct_type(NULL,
NULL,
pr,
@ -3511,8 +3510,6 @@ static Scheme_Object *procedure_reduce_arity(int argc, Scheme_Object *argv[])
scheme_wrong_type("procedure-reduce-arity", "arity", 1, argc, argv);
}
init_reduced_proc_struct();
/* Check whether current arity covers the requested arity. This is
a bit complicated, because both the source and target can be
lists that include arity-at-least records. */
@ -3656,8 +3653,6 @@ static Scheme_Object *procedure_rename(int argc, Scheme_Object *argv[])
if (!SCHEME_SYMBOLP(argv[1]))
scheme_wrong_type("procedure-rename", "symbol", 1, argc, argv);
init_reduced_proc_struct();
aty = get_or_check_arity(argv[0], -1, NULL);
return make_reduced_proc(argv[0], aty, argv[1]);

View File

@ -143,6 +143,7 @@ static void *struct_pred_code, *struct_pred_multi_code;
static void *struct_pred_branch_code;
static void *struct_get_code, *struct_get_multi_code;
static void *struct_set_code, *struct_set_multi_code;
static void *struct_proc_extract_code;
static void *bad_app_vals_target;
static void *app_values_slow_code, *app_values_multi_slow_code, *app_values_tail_slow_code;
static void *finish_tail_call_code, *finish_tail_call_fixup_code;
@ -650,6 +651,17 @@ static Scheme_Object *clear_runstack(long amt, Scheme_Object *sv)
return sv;
}
static Scheme_Object *apply_checked_fail(Scheme_Object **args)
{
Scheme_Object *a[3];
a[0] = args[1];
a[1] = args[3];
a[2] = args[4];
return _scheme_apply(args[2], 3, a);
}
/*========================================================================*/
/* code-gen utils */
/*========================================================================*/
@ -1825,6 +1837,58 @@ static int is_constant_and_avoids_r1(Scheme_Object *obj)
/* application codegen */
/*========================================================================*/
static jit_insn *generate_proc_struct_retry(mz_jit_state *jitter, int num_rands, GC_CAN_IGNORE jit_insn *refagain)
{
GC_CAN_IGNORE jit_insn *ref2, *refz1, *refz2, *refz3, *refz5;
ref2 = jit_bnei_i(jit_forward(), JIT_R1, scheme_proc_struct_type);
jit_ldxi_p(JIT_R1, JIT_V1, &((Scheme_Structure *)0x0)->stype);
refz3 = jit_beqi_p(jit_forward(), JIT_R1, scheme_reduced_procedure_struct);
jit_ldxi_p(JIT_R1, JIT_R1, &((Scheme_Struct_Type *)0x0)->proc_attr);
refz1 = jit_bmci_i(jit_forward(), JIT_R1, 0x1);
CHECK_LIMIT();
/* Proc is a field in the record */
jit_rshi_ul(JIT_R1, JIT_R1, 1);
jit_lshi_ul(JIT_R1, JIT_R1, JIT_LOG_WORD_SIZE);
jit_addi_p(JIT_R1, JIT_R1, &((Scheme_Structure *)0x0)->slots);
jit_ldxr_p(JIT_R1, JIT_V1, JIT_R1);
/* JIT_R1 now has the wrapped procedure */
jit_ldr_s(JIT_R2, JIT_R1);
refz2 = jit_bnei_i(jit_forward(), JIT_R2, scheme_native_closure_type);
CHECK_LIMIT();
/* It's a native closure, but we can't just jump to it, in case
the arity is wrong. */
mz_prepare(2);
jit_movi_i(JIT_R0, num_rands);
jit_pusharg_i(JIT_R0); /* argc */
jit_pusharg_p(JIT_R1); /* closure */
(void)mz_finish(scheme_native_arity_check);
CHECK_LIMIT();
jit_retval(JIT_R0);
refz5 = jit_beqi_i(jit_forward(), JIT_R0, 0);
CHECK_LIMIT();
/* Extract proc again, then loop */
jit_ldxi_p(JIT_R1, JIT_V1, &((Scheme_Structure *)0x0)->stype);
jit_ldxi_p(JIT_R1, JIT_R1, &((Scheme_Struct_Type *)0x0)->proc_attr);
jit_rshi_ul(JIT_R1, JIT_R1, 1);
jit_lshi_ul(JIT_R1, JIT_R1, JIT_LOG_WORD_SIZE);
jit_addi_p(JIT_R1, JIT_R1, &((Scheme_Structure *)0x0)->slots);
jit_ldxr_p(JIT_V1, JIT_V1, JIT_R1);
(void)jit_jmpi(refagain);
CHECK_LIMIT();
mz_patch_branch(refz1);
mz_patch_branch(refz2);
mz_patch_branch(refz3);
mz_patch_branch(refz5);
return ref2;
}
static int generate_direct_prim_tail_call(mz_jit_state *jitter, int num_rands)
{
/* JIT_V1 must have the target function pointer.
@ -1851,13 +1915,14 @@ static int generate_direct_prim_tail_call(mz_jit_state *jitter, int num_rands)
return 1;
}
static int generate_tail_call(mz_jit_state *jitter, int num_rands, int direct_native, int need_set_rs)
/* If num_rands < 0, then argc is in LOCAL2 and arguments are already below RUNSTACK_BASE.
static int generate_tail_call(mz_jit_state *jitter, int num_rands, int direct_native, int need_set_rs, int is_inline)
/* Proc is in V1, args are at RUNSTACK.
If num_rands < 0, then argc is in LOCAL2 and arguments are already below RUNSTACK_BASE.
If direct_native == 2, then some arguments are already in place (shallower in the runstack
than the arguments to move). */
{
int i;
GC_CAN_IGNORE jit_insn *ref, *ref2, *ref4, *ref5;
GC_CAN_IGNORE jit_insn *refagain, *ref, *ref2, *ref4, *ref5;
__START_SHORT_JUMPS__(num_rands < 100);
@ -1870,6 +1935,9 @@ static int generate_tail_call(mz_jit_state *jitter, int num_rands, int direct_na
} else {
ref = ref2 = NULL;
}
refagain = _jit.x.pc;
/* Right kind of function. Extract data and check stack depth: */
jit_ldxi_p(JIT_R0, JIT_V1, &((Scheme_Native_Closure *)0x0)->code);
jit_ldxi_i(JIT_R2, JIT_R0, &((Scheme_Native_Closure_Data *)0x0)->max_let_depth);
@ -1945,6 +2013,13 @@ static int generate_tail_call(mz_jit_state *jitter, int num_rands, int direct_na
jit_jmpr(JIT_V1);
CHECK_LIMIT();
if (!direct_native && !is_inline && (num_rands >= 0)) {
/* Handle simple applicable struct: */
mz_patch_branch(ref2);
ref2 = generate_proc_struct_retry(jitter, num_rands, refagain);
CHECK_LIMIT();
}
/* The slow way: */
/* V1 and RUNSTACK must be intact! */
if (!direct_native) {
@ -2137,7 +2212,7 @@ static int generate_non_tail_call(mz_jit_state *jitter, int num_rands, int direc
If num_rands < 0, then argc is in R0, and need to pop runstack before returning.
If num_rands == -1, skip prolog. */
GC_CAN_IGNORE jit_insn *ref, *ref2, *ref4, *ref5, *ref6, *ref7, *ref8, *ref9;
GC_CAN_IGNORE jit_insn *ref10, *reftop = NULL;
GC_CAN_IGNORE jit_insn *ref10, *reftop = NULL, *refagain;
#ifndef FUEL_AUTODECEREMENTS
GC_CAN_IGNORE jit_insn *ref11;
#endif
@ -2162,6 +2237,8 @@ static int generate_non_tail_call(mz_jit_state *jitter, int num_rands, int direc
ref = ref2 = NULL;
}
refagain = _jit.x.pc;
/* Before inlined native, check max let depth */
if (!nontail_self) {
jit_ldxi_p(JIT_R2, JIT_V1, &((Scheme_Native_Closure *)0x0)->code);
@ -2347,6 +2424,13 @@ static int generate_non_tail_call(mz_jit_state *jitter, int num_rands, int direc
}
CHECK_LIMIT();
ref8 = jit_jmpi(jit_forward());
/* Check for simple applicable struct wrapper */
if (num_rands >= 0) {
mz_patch_branch(ref2);
ref2 = generate_proc_struct_retry(jitter, num_rands, refagain);
CHECK_LIMIT();
}
} else {
ref2 = ref7 = ref8 = ref10 = NULL;
}
@ -2514,7 +2598,7 @@ int do_generate_shared_call(mz_jit_state *jitter, void *_data)
if (data->direct_prim)
ok = generate_direct_prim_tail_call(jitter, data->num_rands);
else
ok = generate_tail_call(jitter, data->num_rands, data->direct_native, 1);
ok = generate_tail_call(jitter, data->num_rands, data->direct_native, 1, 0);
register_helper_func(jitter, code);
@ -2920,7 +3004,7 @@ static int generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_
jit_movi_l(JIT_R2, args_already_in_place);
mz_set_local_p(JIT_R2, JIT_LOCAL2);
}
generate_tail_call(jitter, num_rands, direct_native, jitter->need_set_rs);
generate_tail_call(jitter, num_rands, direct_native, jitter->need_set_rs, 1);
}
} else {
if (direct_prim)
@ -5134,6 +5218,18 @@ static int generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int
mz_runstack_popped(jitter, c);
}
return 1;
} else if (IS_NAMED_PRIM(rator, "checked-procedure-check-and-extract")) {
generate_app(app, NULL, 5, jitter, 0, 0, 2); /* sync'd below */
CHECK_LIMIT();
mz_rs_sync();
(void)jit_calli(struct_proc_extract_code);
CHECK_LIMIT();
mz_rs_inc(5);
mz_runstack_popped(jitter, 5);
return 1;
}
}
@ -7770,6 +7866,123 @@ static int do_generate_common(mz_jit_state *jitter, void *_data)
return 1;
}
static int do_generate_more_common(mz_jit_state *jitter, void *_data)
{
/* *** check_proc_extract_code *** */
/* arguments are on the Scheme stack */
{
void *code_end;
jit_insn *ref, *ref2, *ref3, *refslow;
struct_proc_extract_code = jit_get_ip().ptr;
mz_prolog(JIT_V1);
__START_SHORT_JUMPS__(1);
mz_rs_ldr(JIT_R0);
ref = jit_bmci_ul(jit_forward(), JIT_R0, 0x1);
CHECK_LIMIT();
/* Slow path: call C implementation */
refslow = _jit.x.pc;
JIT_UPDATE_THREAD_RSPTR();
jit_movi_i(JIT_V1, 5);
jit_prepare(2);
jit_pusharg_p(JIT_RUNSTACK);
jit_pusharg_p(JIT_V1);
(void)mz_finish(scheme_extract_checked_procedure);
jit_retval(JIT_R0);
VALIDATE_RESULT(JIT_R0);
mz_epilog(JIT_V1);
/* Continue trying fast path: check proc */
mz_patch_branch(ref);
jit_ldxi_s(JIT_R2, JIT_R0, &((Scheme_Object *)0x0)->type);
(void)jit_bnei_i(refslow, JIT_R2, scheme_struct_type_type);
jit_ldxi_s(JIT_R2, JIT_R0, &MZ_OPT_HASH_KEY(&((Scheme_Struct_Type *)0x0)->iso));
(void)jit_bmci_ul(refslow, JIT_R2, STRUCT_TYPE_CHECKED_PROC);
CHECK_LIMIT();
mz_rs_ldxi(JIT_R1, 1);
(void)jit_bmsi_ul(refslow, JIT_R1, 0x1);
jit_ldxi_s(JIT_R2, JIT_R1, &((Scheme_Object *)0x0)->type);
__START_INNER_TINY__(1);
ref2 = jit_beqi_i(jit_forward(), JIT_R2, scheme_structure_type);
__END_INNER_TINY__(1);
(void)jit_bnei_i(refslow, JIT_R2, scheme_proc_struct_type);
__START_INNER_TINY__(1);
mz_patch_branch(ref2);
__END_INNER_TINY__(1);
CHECK_LIMIT();
/* Put argument struct type in R2, target struct type is in R0 */
jit_ldxi_p(JIT_R2, JIT_R1, &((Scheme_Structure *)0x0)->stype);
jit_ldxi_i(JIT_R2, JIT_R2, &((Scheme_Struct_Type *)0x0)->name_pos);
jit_ldxi_i(JIT_V1, JIT_R0, &((Scheme_Struct_Type *)0x0)->name_pos);
/* Now R2 is argument depth, V1 is target depth */
(void)jit_bltr_i(refslow, JIT_R2, JIT_V1);
CHECK_LIMIT();
/* Lookup argument type at target type depth, put it in R2: */
jit_lshi_ul(JIT_R2, JIT_V1, JIT_LOG_WORD_SIZE);
jit_addi_p(JIT_R2, JIT_R2, &((Scheme_Struct_Type *)0x0)->parent_types);
jit_ldxi_p(JIT_V1, JIT_R1, &((Scheme_Structure *)0x0)->stype);
jit_ldxr_p(JIT_R2, JIT_V1, JIT_R2);
CHECK_LIMIT();
(void)jit_bner_p(refslow, JIT_R2, JIT_R0);
/* Type matches. Extract checker. */
jit_ldxi_p(JIT_V1, JIT_R1, &(((Scheme_Structure *)0x0)->slots[0]));
/* Checker is in V1. Set up args on runstack, then apply it. */
mz_rs_dec(2);
mz_rs_ldxi(JIT_R2, 5);
mz_rs_str(JIT_R2);
mz_rs_ldxi(JIT_R2, 6);
mz_rs_stxi(1, JIT_R2);
CHECK_LIMIT();
mz_rs_sync();
__END_SHORT_JUMPS__(1);
generate_non_tail_call(jitter, 2, 0, 1, 0, 0, 0);
CHECK_LIMIT();
__START_SHORT_JUMPS__(1);
mz_rs_inc(2);
mz_rs_sync();
ref3 = jit_bnei_p(refslow, JIT_R0, scheme_false);
CHECK_LIMIT();
/* Check failed. Apply the failure procedure. */
JIT_UPDATE_THREAD_RSPTR();
jit_prepare(1);
jit_pusharg_p(JIT_RUNSTACK);
(void)mz_finish(apply_checked_fail);
CHECK_LIMIT();
jit_retval(JIT_R0);
VALIDATE_RESULT(JIT_R0);
mz_epilog(JIT_V1);
CHECK_LIMIT();
/* Check passed. Extract the procedure. */
mz_patch_branch(ref3);
mz_rs_ldxi(JIT_R1, 1);
jit_ldxi_p(JIT_R0, JIT_R1, &(((Scheme_Structure *)0x0)->slots[1]));
mz_epilog(JIT_V1);
CHECK_LIMIT();
__END_SHORT_JUMPS__(1);
if (jitter->retain_start) {
code_end = jit_get_ip().ptr;
add_symbol((unsigned long)struct_proc_extract_code, (unsigned long)code_end - 1, scheme_false, 0);
}
}
return 1;
}
#ifdef CAN_INLINE_ALLOC
static int generate_alloc_retry(mz_jit_state *jitter, int i)
{
@ -8156,6 +8369,7 @@ Scheme_Native_Closure_Data *scheme_generate_lambda(Scheme_Closure_Data *data, in
if (!check_arity_code) {
/* Create shared code used for stack-overflow handling, etc.: */
generate_one(NULL, do_generate_common, NULL, 0, NULL, NULL);
generate_one(NULL, do_generate_more_common, NULL, 0, NULL, NULL);
}
if (!case_lam) {

View File

@ -13,7 +13,7 @@
#define USE_COMPILED_STARTUP 1
#define EXPECTED_PRIM_COUNT 955
#define EXPECTED_PRIM_COUNT 957
#ifdef MZSCHEME_SOMETHING_OMITTED
# undef USE_COMPILED_STARTUP

View File

@ -188,6 +188,7 @@ void scheme_init_numstr(Scheme_Env *env);
void scheme_init_eval(Scheme_Env *env);
void scheme_init_promise(Scheme_Env *env);
void scheme_init_struct(Scheme_Env *env);
void scheme_init_reduced_proc_struct(Scheme_Env *env);
void scheme_init_fun(Scheme_Env *env);
void scheme_init_symbol(Scheme_Env *env);
void scheme_init_char(Scheme_Env *env);
@ -613,6 +614,7 @@ typedef struct Scheme_Struct_Type {
} Scheme_Struct_Type;
#define STRUCT_TYPE_ALL_IMMUTABLE 0x1
#define STRUCT_TYPE_CHECKED_PROC 0x2
typedef struct Scheme_Structure
{
@ -668,6 +670,8 @@ Scheme_Object *scheme_make_prefab_struct_instance(Scheme_Struct_Type *stype,
Scheme_Object *vec);
Scheme_Object *scheme_clone_prefab_struct_instance(Scheme_Structure *s);
Scheme_Object *scheme_extract_checked_procedure(int argc, Scheme_Object **argv);
/*========================================================================*/
/* syntax objects */
/*========================================================================*/

View File

@ -13,12 +13,12 @@
consistently.)
*/
#define MZSCHEME_VERSION "4.2.0.5"
#define MZSCHEME_VERSION "4.2.0.6"
#define MZSCHEME_VERSION_X 4
#define MZSCHEME_VERSION_Y 2
#define MZSCHEME_VERSION_Z 0
#define MZSCHEME_VERSION_W 5
#define MZSCHEME_VERSION_W 6
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)

View File

@ -72,6 +72,7 @@ static Scheme_Object *check_input_port_property_value_ok(int argc, Scheme_Object
static Scheme_Object *check_output_port_property_value_ok(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_rename_transformer_property_value_ok(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_set_transformer_property_value_ok(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_checked_proc_property_value_ok(int argc, Scheme_Object *argv[]);
static Scheme_Object *make_struct_type(int argc, Scheme_Object *argv[]);
@ -139,6 +140,7 @@ static Scheme_Object *procedure_extract_target(int argc, Scheme_Object **argv);
static Scheme_Object *rename_transformer_property;
static Scheme_Object *set_transformer_property;
static Scheme_Object *not_free_id_symbol;
static Scheme_Object *scheme_checked_proc_property;
#ifdef MZ_PRECISE_GC
static void register_traversers(void);
@ -351,6 +353,17 @@ scheme_init_struct (Scheme_Env *env)
scheme_add_global_constant("prop:set!-transformer", set_transformer_property, env);
}
{
guard = scheme_make_prim_w_arity(check_checked_proc_property_value_ok,
"guard-for-prop:checked-procedure",
2, 2);
REGISTER_SO(scheme_checked_proc_property);
scheme_checked_proc_property = scheme_make_struct_type_property_w_guard(scheme_intern_symbol("checked-procedure"),
guard);
scheme_add_global_constant("prop:checked-procedure", scheme_checked_proc_property, env);
}
REGISTER_SO(not_free_id_symbol);
not_free_id_symbol = scheme_intern_symbol("not-free-identifier=?");
@ -600,6 +613,15 @@ scheme_init_struct (Scheme_Env *env)
"exn:srclocs-accessor",
1, 1, 1),
env);
{
Scheme_Object *p;
p = scheme_make_prim_w_arity(scheme_extract_checked_procedure,
"checked-procedure-check-and-extract",
5, 5);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED;
scheme_add_global_constant("checked-procedure-check-and-extract", p, env);
}
}
/*========================================================================*/
@ -1349,6 +1371,75 @@ static Scheme_Object *check_set_transformer_property_value_ok(int argc, Scheme_O
argc, argv);
}
/*========================================================================*/
/* checked-proc property */
/*========================================================================*/
static Scheme_Object *check_checked_proc_property_value_ok(int argc, Scheme_Object *argv[])
{
Scheme_Object *parent, *l;
int num_islots, num_aslots;
l = argv[1];
l = SCHEME_CDR(l);
num_islots = SCHEME_INT_VAL(SCHEME_CAR(l));
l = SCHEME_CDR(l);
num_aslots = SCHEME_INT_VAL(SCHEME_CAR(l));
l = SCHEME_CDR(l);
l = SCHEME_CDR(l);
l = SCHEME_CDR(l);
l = SCHEME_CDR(l);
parent = SCHEME_CAR(l);
if (SCHEME_TRUEP(parent)) {
scheme_raise_exn(MZEXN_FAIL_CONTRACT,
"prop:checked-procedure: not allowed on a structure type with a supertype");
}
if (num_islots + num_aslots < 2) {
scheme_raise_exn(MZEXN_FAIL_CONTRACT,
"prop:checked-procedure: need at least two fields in the structure type");
}
return scheme_true;
}
Scheme_Object *scheme_extract_checked_procedure(int argc, Scheme_Object **argv)
{
Scheme_Struct_Type *stype;
Scheme_Object *v, *checker, *proc, *a[3];
v = argv[1];
if (SAME_TYPE(SCHEME_TYPE(argv[0]), scheme_struct_type_type))
stype = (Scheme_Struct_Type *)argv[0];
else
stype = NULL;
if (!stype || !(MZ_OPT_HASH_KEY(&stype->iso) & STRUCT_TYPE_CHECKED_PROC)) {
scheme_wrong_type("checked-procedure-check-and-extract", "structure type with prop:checked-procedure property",
0, argc, argv);
return NULL;
}
if (SCHEME_STRUCTP(v) && scheme_is_struct_instance((Scheme_Object *)stype, v)) {
checker = ((Scheme_Structure *)v)->slots[0];
proc = ((Scheme_Structure *)v)->slots[1];
a[0] = argv[3];
a[1] = argv[4];
v = _scheme_apply(checker, 2, a);
if (SCHEME_TRUEP(v))
return proc;
}
a[0] = argv[1];
a[1] = argv[3];
a[2] = argv[4];
return _scheme_apply(argv[2], 3, a);
}
/*========================================================================*/
/* struct ops */
/*========================================================================*/
@ -2950,7 +3041,7 @@ static Scheme_Object *_make_struct_type(Scheme_Object *basesym, const char *base
Scheme_Object *guard)
{
Scheme_Struct_Type *struct_type, *parent_type;
int j, depth;
int j, depth, checked_proc = 0;
parent_type = (Scheme_Struct_Type *)parent;
@ -3012,6 +3103,8 @@ static Scheme_Object *_make_struct_type(Scheme_Object *basesym, const char *base
if (parent_type) {
struct_type->num_props = parent_type->num_props;
struct_type->props = parent_type->props;
if (MZ_OPT_HASH_KEY(&parent_type->iso) & STRUCT_TYPE_CHECKED_PROC)
checked_proc = 1;
}
/* In principle, we should check for duplicate properties here
@ -3117,6 +3210,9 @@ static Scheme_Object *_make_struct_type(Scheme_Object *basesym, const char *base
a = SCHEME_CAR(l);
prop = SCHEME_CAR(a);
if (SAME_OBJ(prop, scheme_checked_proc_property))
checked_proc = 1;
propv = guard_property(prop, SCHEME_CDR(a), struct_type);
if (SAME_OBJ(prop, proc_property)) {
@ -3167,6 +3263,9 @@ static Scheme_Object *_make_struct_type(Scheme_Object *basesym, const char *base
prop = SCHEME_CAR(a);
if (SAME_OBJ(prop, scheme_checked_proc_property))
checked_proc = 1;
propv = guard_property(prop, SCHEME_CDR(a), struct_type);
/* Check whether already in table: */
@ -3228,6 +3327,9 @@ static Scheme_Object *_make_struct_type(Scheme_Object *basesym, const char *base
struct_type->guard = guard;
}
if (checked_proc)
MZ_OPT_HASH_KEY(&struct_type->iso) |= STRUCT_TYPE_CHECKED_PROC;
return (Scheme_Object *)struct_type;
}