fix a kill-safety problem in the module name resolver

This commit is contained in:
Matthew Flatt 2011-08-06 08:15:38 -06:00
parent fc50be1caa
commit 2d4e14dca8
5 changed files with 399 additions and 345 deletions

View File

@ -185,6 +185,23 @@
(parameterize ([current-namespace ns1]) (parameterize ([current-namespace ns1])
(namespace-attach-module-declaration ns0 ''sample ns1))) (namespace-attach-module-declaration ns0 ''sample ns1)))
;; ----------------------------------------
;; Check that `make-base-empty-namespace' is kill-safe,
;; which amounts to a test that the module-name resolver
;; is kill-safe. When the test fails, it probably gets
;; stuck.
(let ()
(for ([i 100])
(let ([th (thread (lambda ()
(let loop ()
(make-base-empty-namespace)
;;(printf "made\n")
(loop))))])
(sleep)
;;(printf "~s\n" i)
(kill-thread th)))
(test #t namespace? (make-base-empty-namespace)))
;; ---------------------------------------- ;; ----------------------------------------
(report-errs) (report-errs)

View File

@ -35,6 +35,7 @@ libffi/libffi@FOREIGN_CONVENIENCE@.la:
foreign.@LTO@: $(srcdir)/foreign.c \ foreign.@LTO@: $(srcdir)/foreign.c \
$(srcdir)/../racket/include/scheme.h \ $(srcdir)/../racket/include/scheme.h \
$(srcdir)/../racket/include/schthread.h \
$(srcdir)/../racket/src/schemef.h \ $(srcdir)/../racket/src/schemef.h \
$(srcdir)/../racket/src/schpriv.h $(srcdir)/../racket/src/schpriv.h
$(CC) $(CFLAGS) -c $(srcdir)/foreign.c -o foreign.@LTO@ $(CC) $(CFLAGS) -c $(srcdir)/foreign.c -o foreign.@LTO@

View File

@ -15,13 +15,13 @@
116,120,61,115,70,108,101,116,45,118,97,108,117,101,115,61,120,73,108,101,116, 116,120,61,115,70,108,101,116,45,118,97,108,117,101,115,61,120,73,108,101,116,
114,101,99,45,118,97,108,117,101,115,66,108,97,109,98,100,97,1,20,112,97, 114,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, 114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,61,118,73,
100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240,152,73,0, 100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240,91,74,0,
0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36,16,20,2,4, 0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36,16,20,2,4,
2,2,2,6,2,2,2,7,2,2,2,8,2,2,2,9,2,2,2,10,2, 2,2,2,6,2,2,2,7,2,2,2,8,2,2,2,9,2,2,2,10,2,
2,2,5,2,2,2,11,2,2,2,12,2,2,2,13,2,2,97,37,11,8, 2,2,5,2,2,2,11,2,2,2,12,2,2,2,13,2,2,97,37,11,8,
240,152,73,0,0,93,159,2,16,36,37,16,2,2,3,161,2,2,37,2,3, 240,91,74,0,0,93,159,2,16,36,37,16,2,2,3,161,2,2,37,2,3,
2,2,2,3,96,38,11,8,240,152,73,0,0,16,0,96,11,11,8,240,152, 2,2,2,3,96,38,11,8,240,91,74,0,0,16,0,96,11,11,8,240,91,
73,0,0,16,0,18,98,64,104,101,114,101,13,16,5,36,2,14,2,2,11, 74,0,0,16,0,18,98,64,104,101,114,101,13,16,5,36,2,14,2,2,11,
11,8,32,8,31,8,30,8,29,27,248,22,155,4,195,249,22,148,4,80,158, 11,8,32,8,31,8,30,8,29,27,248,22,155,4,195,249,22,148,4,80,158,
39,36,251,22,83,2,18,248,22,98,199,12,249,22,73,2,19,248,22,100,201, 39,36,251,22,83,2,18,248,22,98,199,12,249,22,73,2,19,248,22,100,201,
27,248,22,155,4,195,249,22,148,4,80,158,39,36,251,22,83,2,18,248,22, 27,248,22,155,4,195,249,22,148,4,80,158,39,36,251,22,83,2,18,248,22,
@ -30,14 +30,14 @@
74,193,249,22,148,4,80,158,39,36,251,22,83,2,18,248,22,74,199,249,22, 74,193,249,22,148,4,80,158,39,36,251,22,83,2,18,248,22,74,199,249,22,
73,2,10,248,22,75,201,11,18,100,10,13,16,5,36,2,14,2,2,11,11, 73,2,10,248,22,75,201,11,18,100,10,13,16,5,36,2,14,2,2,11,11,
8,32,8,31,8,30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49, 8,32,8,31,8,30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49,
51,57,54,52,16,4,11,11,2,21,3,1,8,101,110,118,49,51,57,54,53, 52,49,49,52,16,4,11,11,2,21,3,1,8,101,110,118,49,52,49,49,53,
27,248,22,75,248,22,155,4,196,28,248,22,81,193,20,14,159,37,36,37,28, 27,248,22,75,248,22,155,4,196,28,248,22,81,193,20,14,159,37,36,37,28,
248,22,81,248,22,75,194,248,22,74,193,249,22,148,4,80,158,39,36,250,22, 248,22,81,248,22,75,194,248,22,74,193,249,22,148,4,80,158,39,36,250,22,
83,2,22,248,22,83,249,22,83,248,22,83,2,23,248,22,74,201,251,22,83, 83,2,22,248,22,83,249,22,83,248,22,83,2,23,248,22,74,201,251,22,83,
2,18,2,23,2,23,249,22,73,2,13,248,22,75,204,18,100,11,13,16,5, 2,18,2,23,2,23,249,22,73,2,13,248,22,75,204,18,100,11,13,16,5,
36,2,14,2,2,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,20, 36,2,14,2,2,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,20,
3,1,8,101,110,118,49,51,57,54,55,16,4,11,11,2,21,3,1,8,101, 3,1,8,101,110,118,49,52,49,49,55,16,4,11,11,2,21,3,1,8,101,
110,118,49,51,57,54,56,248,22,155,4,193,27,248,22,155,4,194,249,22,73, 110,118,49,52,49,49,56,248,22,155,4,193,27,248,22,155,4,194,249,22,73,
248,22,83,248,22,74,196,248,22,75,195,27,248,22,75,248,22,155,4,23,197, 248,22,83,248,22,74,196,248,22,75,195,27,248,22,75,248,22,155,4,23,197,
1,249,22,148,4,80,158,39,36,28,248,22,58,248,22,149,4,248,22,74,23, 1,249,22,148,4,80,158,39,36,28,248,22,58,248,22,149,4,248,22,74,23,
198,2,27,249,22,2,32,0,88,163,8,36,37,43,11,9,222,33,40,248,22, 198,2,27,249,22,2,32,0,88,163,8,36,37,43,11,9,222,33,40,248,22,
@ -67,8 +67,8 @@
140,9,248,22,149,4,248,22,74,200,64,101,108,115,101,10,248,22,74,197,250, 140,9,248,22,149,4,248,22,74,200,64,101,108,115,101,10,248,22,74,197,250,
22,84,2,22,9,248,22,75,200,249,22,73,2,5,248,22,75,202,99,13,16, 22,84,2,22,9,248,22,75,200,249,22,73,2,5,248,22,75,202,99,13,16,
5,36,2,14,2,2,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2, 5,36,2,14,2,2,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,
20,3,1,8,101,110,118,49,51,57,57,48,16,4,11,11,2,21,3,1,8, 20,3,1,8,101,110,118,49,52,49,52,48,16,4,11,11,2,21,3,1,8,
101,110,118,49,51,57,57,49,18,158,94,10,64,118,111,105,100,8,48,27,248, 101,110,118,49,52,49,52,49,18,158,94,10,64,118,111,105,100,8,48,27,248,
22,75,248,22,155,4,196,249,22,148,4,80,158,39,36,28,248,22,58,248,22, 22,75,248,22,155,4,196,249,22,148,4,80,158,39,36,28,248,22,58,248,22,
149,4,248,22,74,197,250,22,83,2,28,248,22,83,248,22,74,199,248,22,98, 149,4,248,22,74,197,250,22,83,2,28,248,22,83,248,22,74,199,248,22,98,
198,27,248,22,149,4,248,22,74,197,250,22,83,2,28,248,22,83,248,22,74, 198,27,248,22,149,4,248,22,74,197,250,22,83,2,28,248,22,83,248,22,74,
@ -621,318 +621,333 @@
} }
{ {
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,50,46,51,0,0,0,0,0,0,0,0,0,0,0, SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,50,46,51,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,60,0,0,0,1,0,0,7,0,18,0,45, 0,0,0,0,0,0,0,0,0,65,0,0,0,1,0,0,7,0,18,0,45,
0,51,0,64,0,73,0,80,0,102,0,124,0,150,0,162,0,180,0,200,0, 0,51,0,64,0,73,0,80,0,102,0,124,0,150,0,158,0,170,0,185,0,
212,0,228,0,251,0,7,1,38,1,45,1,50,1,55,1,60,1,65,1,70, 201,0,219,0,239,0,251,0,11,1,34,1,46,1,77,1,84,1,89,1,94,
1,79,1,84,1,88,1,96,1,105,1,113,1,174,1,21,2,42,2,63,2, 1,99,1,104,1,109,1,118,1,123,1,127,1,135,1,144,1,152,1,213,1,
93,2,123,2,181,2,239,2,32,3,81,3,15,9,34,9,48,9,206,9,220, 60,2,81,2,102,2,132,2,162,2,220,2,22,3,71,3,120,3,54,9,105,
9,150,11,244,13,111,14,117,14,131,14,158,14,178,14,238,14,69,15,71,15, 9,168,9,187,9,201,9,103,10,117,10,47,12,141,14,8,15,14,15,28,15,
140,15,152,21,204,21,227,21,0,0,233,24,0,0,66,35,37,98,111,111,116, 55,15,75,15,135,15,222,15,224,15,37,16,121,22,174,22,198,22,0,0,34,
70,100,108,108,45,115,117,102,102,105,120,1,25,100,101,102,97,117,108,116,45, 26,0,0,66,35,37,98,111,111,116,70,100,108,108,45,115,117,102,102,105,120,
108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,65,113,117,111, 1,25,100,101,102,97,117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,
116,101,29,94,2,4,67,35,37,117,116,105,108,115,11,68,35,37,112,97,114, 109,112,105,108,101,100,65,113,117,111,116,101,29,94,2,4,67,35,37,117,116,
97,109,122,29,94,2,4,2,6,11,1,20,112,97,114,97,109,101,116,101,114, 105,108,115,11,68,35,37,112,97,114,97,109,122,29,94,2,4,2,6,11,1,
105,122,97,116,105,111,110,45,107,101,121,1,20,100,101,102,97,117,108,116,45, 20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,
114,101,97,100,101,114,45,103,117,97,114,100,1,24,45,109,111,100,117,108,101, 1,20,100,101,102,97,117,108,116,45,114,101,97,100,101,114,45,103,117,97,114,
45,104,97,115,104,45,116,97,98,108,101,45,116,97,98,108,101,71,45,112,97, 100,1,24,45,109,111,100,117,108,101,45,104,97,115,104,45,116,97,98,108,101,
116,104,45,99,97,99,104,101,77,45,108,111,97,100,105,110,103,45,102,105,108, 45,116,97,98,108,101,67,67,65,67,72,69,45,78,71,45,112,97,116,104,45,
101,110,97,109,101,79,45,108,111,97,100,105,110,103,45,112,114,111,109,112,116, 99,97,99,104,101,74,112,97,116,104,45,99,97,99,104,101,45,103,101,116,75,
45,116,97,103,71,45,112,114,101,118,45,114,101,108,116,111,75,45,112,114,101, 112,97,116,104,45,99,97,99,104,101,45,115,101,116,33,77,45,108,111,97,100,
118,45,114,101,108,116,111,45,100,105,114,1,21,115,112,108,105,116,45,114,101, 105,110,103,45,102,105,108,101,110,97,109,101,79,45,108,111,97,100,105,110,103,
108,97,116,105,118,101,45,115,116,114,105,110,103,71,111,114,105,103,45,112,97, 45,112,114,111,109,112,116,45,116,97,103,71,45,112,114,101,118,45,114,101,108,
114,97,109,122,1,29,115,116,97,110,100,97,114,100,45,109,111,100,117,108,101, 116,111,75,45,112,114,101,118,45,114,101,108,116,111,45,100,105,114,1,21,115,
45,110,97,109,101,45,114,101,115,111,108,118,101,114,29,94,2,4,2,6,11, 112,108,105,116,45,114,101,108,97,116,105,118,101,45,115,116,114,105,110,103,71,
64,98,111,111,116,64,115,101,97,108,64,115,97,109,101,5,3,46,122,111,5, 111,114,105,103,45,112,97,114,97,109,122,1,29,115,116,97,110,100,97,114,100,
3,46,122,111,6,6,6,110,97,116,105,118,101,64,108,111,111,112,63,108,105, 45,109,111,100,117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,
98,67,105,103,110,111,114,101,100,249,22,14,195,80,159,38,46,38,249,80,159, 29,94,2,4,2,6,11,64,98,111,111,116,64,115,101,97,108,64,115,97,109,
38,49,37,195,10,90,159,39,11,89,161,39,36,11,248,22,167,14,197,86,95, 101,5,3,46,122,111,5,3,46,122,111,6,6,6,110,97,116,105,118,101,64,
23,195,1,23,193,1,28,249,22,133,15,0,11,35,114,120,34,91,46,93,115, 108,111,111,112,63,108,105,98,67,105,103,110,111,114,101,100,249,22,14,195,80,
115,36,34,248,22,151,14,23,197,1,249,80,159,41,53,38,198,5,4,46,114, 159,38,49,38,249,80,159,38,52,37,195,10,90,159,39,11,89,161,39,36,11,
107,116,196,27,28,23,195,2,28,249,22,140,9,23,197,2,80,158,39,47,86, 248,22,167,14,197,86,95,23,195,1,23,193,1,28,249,22,133,15,0,11,35,
94,23,195,1,80,158,37,48,27,248,22,137,5,23,197,2,28,248,22,146,14, 114,120,34,91,46,93,115,115,36,34,248,22,151,14,23,197,1,249,80,159,41,
23,194,2,90,159,39,11,89,161,39,36,11,248,22,167,14,23,197,1,86,95, 56,38,198,5,4,46,114,107,116,196,27,28,23,195,2,28,249,22,140,9,23,
20,18,159,11,80,158,41,47,198,20,18,159,11,80,158,41,48,192,192,11,11, 197,2,80,158,39,50,86,94,23,195,1,80,158,37,51,27,248,22,137,5,23,
28,23,193,2,192,86,94,23,193,1,27,247,22,159,5,28,192,192,247,22,187, 197,2,28,248,22,146,14,23,194,2,90,159,39,11,89,161,39,36,11,248,22,
14,250,22,164,14,23,197,1,23,199,1,249,80,159,43,39,38,23,198,1,2, 167,14,23,197,1,86,95,20,18,159,11,80,158,41,50,198,20,18,159,11,80,
23,250,22,164,14,23,197,1,23,199,1,249,80,159,43,39,38,23,198,1,2, 158,41,51,192,192,11,11,28,23,193,2,192,86,94,23,193,1,27,247,22,159,
24,252,22,164,14,23,199,1,23,201,1,2,25,247,22,153,8,249,80,159,45, 5,28,192,192,247,22,187,14,250,22,164,14,23,197,1,23,199,1,249,80,159,
39,38,23,200,1,80,159,45,36,38,252,22,164,14,23,199,1,23,201,1,2, 43,39,38,23,198,1,2,26,250,22,164,14,23,197,1,23,199,1,249,80,159,
25,247,22,153,8,249,80,159,45,39,38,23,200,1,80,159,45,36,38,27,252, 43,39,38,23,198,1,2,27,252,22,164,14,23,199,1,23,201,1,2,28,247,
22,164,14,23,200,1,23,202,1,2,25,247,22,153,8,249,80,159,46,39,38, 22,153,8,249,80,159,45,39,38,23,200,1,80,159,45,36,38,252,22,164,14,
23,201,1,80,159,46,36,38,27,250,22,181,14,196,11,32,0,88,163,8,36, 23,199,1,23,201,1,2,28,247,22,153,8,249,80,159,45,39,38,23,200,1,
36,41,11,9,222,11,28,192,249,22,73,195,194,11,27,252,22,164,14,23,200, 80,159,45,36,38,27,252,22,164,14,23,200,1,23,202,1,2,28,247,22,153,
1,23,202,1,2,25,247,22,153,8,249,80,159,46,39,38,23,201,1,80,159, 8,249,80,159,46,39,38,23,201,1,80,159,46,36,38,27,250,22,181,14,196,
46,36,38,27,250,22,181,14,196,11,32,0,88,163,8,36,36,41,11,9,222, 11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,73,195,194,11,
11,28,192,249,22,73,195,194,11,27,250,22,164,14,23,198,1,23,200,1,249, 27,252,22,164,14,23,200,1,23,202,1,2,28,247,22,153,8,249,80,159,46,
80,159,44,39,38,23,199,1,2,23,27,250,22,181,14,196,11,32,0,88,163, 39,38,23,201,1,80,159,46,36,38,27,250,22,181,14,196,11,32,0,88,163,
8,36,36,41,11,9,222,11,28,192,249,22,73,195,194,11,27,250,22,164,14, 8,36,36,41,11,9,222,11,28,192,249,22,73,195,194,11,27,250,22,164,14,
23,198,1,23,200,1,249,80,159,44,39,38,23,199,1,2,24,27,250,22,181, 23,198,1,23,200,1,249,80,159,44,39,38,23,199,1,2,26,27,250,22,181,
14,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,73,195, 14,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,73,195,
194,11,86,94,28,248,80,159,37,38,38,23,195,2,12,250,22,176,9,77,108, 194,11,27,250,22,164,14,23,198,1,23,200,1,249,80,159,44,39,38,23,199,
111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,6,25,25,112,97, 1,2,27,27,250,22,181,14,196,11,32,0,88,163,8,36,36,41,11,9,222,
116,104,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105, 11,28,192,249,22,73,195,194,11,86,94,28,248,80,159,37,38,38,23,195,2,
110,103,23,197,2,90,159,46,11,89,161,37,36,11,28,248,22,170,14,23,205, 12,250,22,176,9,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,
2,23,204,2,27,247,22,159,5,28,23,193,2,249,22,171,14,23,207,2,23, 101,100,6,25,25,112,97,116,104,32,111,114,32,118,97,108,105,100,45,112,97,
195,1,23,205,2,89,161,39,37,11,248,22,167,14,23,205,1,86,94,23,196, 116,104,32,115,116,114,105,110,103,23,197,2,90,159,46,11,89,161,37,36,11,
1,89,161,38,40,11,28,23,205,2,27,248,22,151,14,23,197,2,27,248,22, 28,248,22,170,14,23,205,2,23,204,2,27,247,22,159,5,28,23,193,2,249,
188,7,23,195,2,28,28,249,22,188,3,23,195,2,40,249,22,191,7,5,4, 22,171,14,23,207,2,23,195,1,23,205,2,89,161,39,37,11,248,22,167,14,
46,114,107,116,249,22,130,8,23,198,2,249,22,176,3,23,199,2,40,11,249, 23,205,1,86,94,23,196,1,89,161,38,40,11,28,23,205,2,27,248,22,151,
22,7,23,199,2,248,22,155,14,249,22,131,8,250,22,130,8,23,202,1,36, 14,23,197,2,27,248,22,188,7,23,195,2,28,28,249,22,188,3,23,195,2,
249,22,176,3,23,203,1,40,5,3,46,115,115,249,22,7,23,199,2,11,249, 40,249,22,191,7,5,4,46,114,107,116,249,22,130,8,23,198,2,249,22,176,
22,7,23,197,2,11,89,161,37,42,11,28,249,22,140,9,23,199,2,23,197, 3,23,199,2,40,11,249,22,7,23,199,2,248,22,155,14,249,22,131,8,250,
2,23,193,2,249,22,164,14,23,196,2,23,199,2,89,161,37,43,11,28,23, 22,130,8,23,202,1,36,249,22,176,3,23,203,1,40,5,3,46,115,115,249,
198,2,28,249,22,140,9,23,200,2,23,197,1,23,193,1,86,94,23,193,1, 22,7,23,199,2,11,249,22,7,23,197,2,11,89,161,37,42,11,28,249,22,
249,22,164,14,23,196,2,23,200,2,86,94,23,195,1,11,89,161,37,44,11, 140,9,23,199,2,23,197,2,23,193,2,249,22,164,14,23,196,2,23,199,2,
28,249,22,140,9,23,196,2,68,114,101,108,97,116,105,118,101,86,94,23,194, 89,161,37,43,11,28,23,198,2,28,249,22,140,9,23,200,2,23,197,1,23,
1,2,22,23,194,1,89,161,37,45,11,247,22,189,14,27,250,22,181,14,23, 193,1,86,94,23,193,1,249,22,164,14,23,196,2,23,200,2,86,94,23,195,
203,2,11,32,0,88,163,8,36,36,41,11,9,222,11,27,28,23,194,2,249, 1,11,89,161,37,44,11,28,249,22,140,9,23,196,2,68,114,101,108,97,116,
22,73,23,203,2,23,196,1,86,94,23,194,1,11,27,28,23,203,2,28,23, 105,118,101,86,94,23,194,1,2,25,23,194,1,89,161,37,45,11,247,22,189,
194,2,11,27,250,22,181,14,23,207,2,11,32,0,88,163,8,36,36,41,11, 14,27,250,22,181,14,23,203,2,11,32,0,88,163,8,36,36,41,11,9,222,
9,222,11,28,192,249,22,73,23,206,2,194,11,11,27,28,23,195,2,23,195, 11,27,28,23,194,2,249,22,73,23,203,2,23,196,1,86,94,23,194,1,11,
2,23,194,2,27,88,163,36,37,50,44,62,122,111,225,15,13,9,33,33,27, 27,28,23,203,2,28,23,194,2,11,27,250,22,181,14,23,207,2,11,32,0,
88,163,36,37,50,44,66,97,108,116,45,122,111,225,16,14,11,33,34,27,88, 88,163,8,36,36,41,11,9,222,11,28,192,249,22,73,23,206,2,194,11,11,
163,36,37,52,45,9,225,17,15,11,33,35,27,88,163,36,37,52,45,9,225, 27,28,23,195,2,23,195,2,23,194,2,27,88,163,36,37,50,44,62,122,111,
18,16,13,33,36,27,28,23,200,2,23,200,2,248,22,138,9,23,200,2,27, 225,15,13,9,33,36,27,88,163,36,37,50,44,66,97,108,116,45,122,111,225,
28,23,208,2,28,23,200,2,86,94,23,201,1,23,200,2,248,22,138,9,23, 16,14,11,33,37,27,88,163,36,37,52,45,9,225,17,15,11,33,38,27,88,
202,1,11,27,28,23,195,2,28,23,197,1,27,249,22,5,88,163,8,36,37, 163,36,37,52,45,9,225,18,16,13,33,39,27,28,23,200,2,23,200,2,248,
53,45,9,225,24,22,18,33,37,23,216,2,27,28,23,202,2,11,193,28,192, 22,138,9,23,200,2,27,28,23,208,2,28,23,200,2,86,94,23,201,1,23,
192,28,193,28,23,202,2,28,249,22,188,3,248,22,75,196,248,22,75,23,205, 200,2,248,22,138,9,23,202,1,11,27,28,23,195,2,28,23,197,1,27,249,
2,193,11,11,11,11,86,94,23,197,1,11,28,23,193,2,86,105,23,213,1, 22,5,88,163,8,36,37,53,45,9,225,24,22,18,33,40,23,216,2,27,28,
23,211,1,23,210,1,23,209,1,23,208,1,23,201,1,23,200,1,23,199,1, 23,202,2,11,193,28,192,192,28,193,28,23,202,2,28,249,22,188,3,248,22,
23,198,1,23,196,1,23,195,1,23,194,1,20,13,159,80,159,57,40,38,250, 75,196,248,22,75,23,205,2,193,11,11,11,11,86,94,23,197,1,11,28,23,
80,159,8,24,41,38,249,22,27,11,80,159,8,26,40,38,22,180,4,11,20, 193,2,86,105,23,213,1,23,211,1,23,210,1,23,209,1,23,208,1,23,201,
13,159,80,159,57,40,38,250,80,159,8,24,41,38,249,22,27,11,80,159,8, 1,23,200,1,23,199,1,23,198,1,23,196,1,23,195,1,23,194,1,20,13,
26,40,38,22,159,5,28,248,22,146,14,23,216,2,23,215,1,86,94,23,215, 159,80,159,57,40,38,250,80,159,8,24,41,38,249,22,27,11,80,159,8,26,
1,247,22,187,14,249,247,22,128,15,248,22,74,195,23,25,86,94,23,193,1, 40,38,22,180,4,11,20,13,159,80,159,57,40,38,250,80,159,8,24,41,38,
27,28,23,195,2,28,23,197,1,27,249,22,5,88,163,8,36,37,53,45,9, 249,22,27,11,80,159,8,26,40,38,22,159,5,28,248,22,146,14,23,216,2,
225,25,23,20,33,38,23,217,2,27,28,23,204,2,11,193,28,192,192,28,193, 23,215,1,86,94,23,215,1,247,22,187,14,249,247,22,128,15,248,22,74,195,
28,203,28,249,22,188,3,248,22,75,196,248,22,75,206,193,11,11,11,11,86, 23,25,86,94,23,193,1,27,28,23,195,2,28,23,197,1,27,249,22,5,88,
94,23,197,1,11,28,23,193,2,86,102,23,214,1,23,211,1,23,210,1,23, 163,8,36,37,53,45,9,225,25,23,20,33,41,23,217,2,27,28,23,204,2,
209,1,23,201,1,23,200,1,23,199,1,23,196,1,23,195,1,20,13,159,80, 11,193,28,192,192,28,193,28,203,28,249,22,188,3,248,22,75,196,248,22,75,
159,58,40,38,250,80,159,8,25,41,38,249,22,27,11,80,159,8,27,40,38, 206,193,11,11,11,11,86,94,23,197,1,11,28,23,193,2,86,102,23,214,1,
22,180,4,23,215,1,20,13,159,80,159,58,40,38,250,80,159,8,25,41,38, 23,211,1,23,210,1,23,209,1,23,201,1,23,200,1,23,199,1,23,196,1,
249,22,27,11,80,159,8,27,40,38,22,159,5,28,248,22,146,14,23,217,2, 23,195,1,20,13,159,80,159,58,40,38,250,80,159,8,25,41,38,249,22,27,
23,216,1,86,94,23,216,1,247,22,187,14,249,247,22,128,15,248,22,74,195, 11,80,159,8,27,40,38,22,180,4,23,215,1,20,13,159,80,159,58,40,38,
23,26,86,94,23,193,1,27,28,23,197,2,28,23,201,1,27,249,22,5,20, 250,80,159,8,25,41,38,249,22,27,11,80,159,8,27,40,38,22,159,5,28,
20,94,88,163,8,36,37,51,44,9,225,26,24,20,33,39,23,213,1,23,218, 248,22,146,14,23,217,2,23,216,1,86,94,23,216,1,247,22,187,14,249,247,
2,27,28,23,204,2,11,193,28,192,192,28,193,28,23,204,2,28,249,22,188, 22,128,15,248,22,74,195,23,26,86,94,23,193,1,27,28,23,197,2,28,23,
3,248,22,75,196,248,22,75,23,207,2,193,11,11,11,86,94,23,210,1,11, 201,1,27,249,22,5,20,20,94,88,163,8,36,37,51,44,9,225,26,24,20,
86,94,23,201,1,11,28,23,193,2,86,101,23,215,1,23,213,1,23,212,1, 33,42,23,213,1,23,218,2,27,28,23,204,2,11,193,28,192,192,28,193,28,
23,211,1,23,202,1,23,200,1,23,197,1,23,196,1,20,13,159,80,159,59, 23,204,2,28,249,22,188,3,248,22,75,196,248,22,75,23,207,2,193,11,11,
40,38,250,80,159,8,26,41,38,249,22,27,11,80,159,8,28,40,38,22,180, 11,86,94,23,210,1,11,86,94,23,201,1,11,28,23,193,2,86,101,23,215,
4,11,20,13,159,80,159,59,40,38,250,80,159,8,26,41,38,249,22,27,11, 1,23,213,1,23,212,1,23,211,1,23,202,1,23,200,1,23,197,1,23,196,
80,159,8,28,40,38,22,159,5,28,248,22,146,14,23,218,2,23,217,1,86, 1,20,13,159,80,159,59,40,38,250,80,159,8,26,41,38,249,22,27,11,80,
94,23,217,1,247,22,187,14,249,247,22,157,5,248,22,74,195,23,27,86,94, 159,8,28,40,38,22,180,4,11,20,13,159,80,159,59,40,38,250,80,159,8,
23,193,1,27,28,23,197,1,28,23,201,1,27,249,22,5,20,20,94,88,163, 26,41,38,249,22,27,11,80,159,8,28,40,38,22,159,5,28,248,22,146,14,
8,36,37,51,44,9,225,27,25,22,33,40,23,215,1,23,219,1,27,28,23, 23,218,2,23,217,1,86,94,23,217,1,247,22,187,14,249,247,22,157,5,248,
205,2,11,193,28,192,192,28,193,28,204,28,249,22,188,3,248,22,75,196,248, 22,74,195,23,27,86,94,23,193,1,27,28,23,197,1,28,23,201,1,27,249,
22,75,23,15,193,11,11,11,86,95,23,216,1,23,212,1,11,86,94,23,201, 22,5,20,20,94,88,163,8,36,37,51,44,9,225,27,25,22,33,43,23,215,
1,11,28,23,193,2,86,95,23,213,1,23,198,1,20,13,159,80,159,8,24, 1,23,219,1,27,28,23,205,2,11,193,28,192,192,28,193,28,204,28,249,22,
40,38,250,80,159,8,27,41,38,249,22,27,11,80,159,8,29,40,38,22,180, 188,3,248,22,75,196,248,22,75,23,15,193,11,11,11,86,95,23,216,1,23,
4,23,217,1,20,13,159,80,159,8,24,40,38,250,80,159,8,27,41,38,249, 212,1,11,86,94,23,201,1,11,28,23,193,2,86,95,23,213,1,23,198,1,
22,27,11,80,159,8,29,40,38,22,159,5,28,248,22,146,14,23,219,2,23, 20,13,159,80,159,8,24,40,38,250,80,159,8,27,41,38,249,22,27,11,80,
218,1,86,94,23,218,1,247,22,187,14,249,247,22,157,5,248,22,74,195,23, 159,8,29,40,38,22,180,4,23,217,1,20,13,159,80,159,8,24,40,38,250,
28,86,94,23,193,1,27,28,23,199,2,86,94,23,215,1,23,214,1,86,94, 80,159,8,27,41,38,249,22,27,11,80,159,8,29,40,38,22,159,5,28,248,
23,214,1,23,215,1,20,13,159,80,159,8,25,40,38,250,80,159,8,28,41, 22,146,14,23,219,2,23,218,1,86,94,23,218,1,247,22,187,14,249,247,22,
38,249,22,27,11,80,159,8,30,40,38,22,180,4,28,23,30,28,23,202,1, 157,5,248,22,74,195,23,28,86,94,23,193,1,27,28,23,199,2,86,94,23,
11,195,86,94,23,202,1,11,20,13,159,80,159,8,25,40,38,250,80,159,8, 215,1,23,214,1,86,94,23,214,1,23,215,1,20,13,159,80,159,8,25,40,
28,41,38,249,22,27,11,80,159,8,30,40,38,22,159,5,28,248,22,146,14, 38,250,80,159,8,28,41,38,249,22,27,11,80,159,8,30,40,38,22,180,4,
23,220,2,23,219,1,86,94,23,219,1,247,22,187,14,249,247,22,157,5,194, 28,23,30,28,23,202,1,11,195,86,94,23,202,1,11,20,13,159,80,159,8,
23,29,0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42,41,36,34, 25,40,38,250,80,159,8,28,41,38,249,22,27,11,80,159,8,30,40,38,22,
32,43,88,163,8,36,37,59,11,2,26,222,33,44,27,249,22,133,15,2,42, 159,5,28,248,22,146,14,23,220,2,23,219,1,86,94,23,219,1,247,22,187,
23,196,2,28,23,193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2, 14,249,247,22,157,5,194,23,29,27,249,22,160,8,80,159,39,45,38,249,22,
27,248,22,107,23,197,1,27,249,22,133,15,2,42,23,196,2,28,23,193,2, 183,3,248,22,179,3,248,22,166,2,200,8,128,8,27,28,193,248,22,169,2,
86,94,23,194,1,249,22,73,248,22,98,23,196,2,27,248,22,107,23,197,1, 194,11,28,192,27,249,22,96,198,195,28,192,248,22,75,193,11,11,27,249,22,
27,249,22,133,15,2,42,23,196,2,28,23,193,2,86,94,23,194,1,249,22, 183,3,248,22,179,3,248,22,166,2,198,8,128,8,27,249,22,160,8,80,159,
73,248,22,98,23,196,2,27,248,22,107,23,197,1,27,249,22,133,15,2,42, 40,45,38,195,27,28,193,248,22,169,2,194,11,250,22,161,8,80,159,42,45,
23,196,2,28,23,193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2, 38,197,248,22,168,2,249,22,73,249,22,73,204,205,28,198,198,9,0,17,35,
248,2,43,248,22,107,23,197,1,248,22,83,194,248,22,83,194,248,22,83,194, 114,120,34,94,40,46,42,63,41,47,40,46,42,41,36,34,32,48,88,163,8,
248,22,83,194,32,45,88,163,36,37,8,40,11,2,26,222,33,46,28,248,22, 36,37,59,11,2,29,222,33,49,27,249,22,133,15,2,47,23,196,2,28,23,
81,248,22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90, 193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,27,248,22,107,23,
159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7, 197,1,27,249,22,133,15,2,47,23,196,2,28,23,193,2,86,94,23,194,1,
9,248,22,74,197,90,159,38,11,89,161,38,36,11,27,248,22,75,198,28,248, 249,22,73,248,22,98,23,196,2,27,248,22,107,23,197,1,27,249,22,133,15,
22,81,248,22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194, 2,47,23,196,2,28,23,193,2,86,94,23,194,1,249,22,73,248,22,98,23,
90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22, 196,2,27,248,22,107,23,197,1,27,249,22,133,15,2,47,23,196,2,28,23,
7,9,248,22,74,197,90,159,38,11,89,161,38,36,11,27,248,22,75,198,28, 193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,248,2,48,248,22,
248,22,81,248,22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75, 107,23,197,1,248,22,83,194,248,22,83,194,248,22,83,194,248,22,83,194,32,
194,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249, 50,88,163,36,37,8,40,11,2,29,222,33,51,28,248,22,81,248,22,75,23,
22,7,9,248,22,74,197,90,159,38,11,89,161,38,36,11,27,248,22,75,198, 195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,11,89,161,
28,248,22,81,248,22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22, 38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,
75,194,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2, 90,159,38,11,89,161,38,36,11,27,248,22,75,198,28,248,22,81,248,22,75,
249,22,7,9,248,22,74,197,90,159,38,11,89,161,38,36,11,27,248,22,75, 23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,11,89,
198,28,248,22,81,248,22,75,23,195,2,249,22,7,9,248,22,74,195,27,248, 161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,
22,75,194,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197, 197,90,159,38,11,89,161,38,36,11,27,248,22,75,198,28,248,22,81,248,22,
2,249,22,7,9,248,22,74,197,90,159,38,11,89,161,38,36,11,248,2,45,
248,22,75,198,249,22,7,249,22,73,248,22,74,201,196,195,249,22,7,249,22,
73,248,22,74,200,196,195,249,22,7,249,22,73,248,22,74,201,196,195,249,22,
7,249,22,73,248,22,74,200,196,195,249,22,7,249,22,73,248,22,74,201,196,
195,249,22,7,249,22,73,248,22,74,200,196,195,249,22,7,249,22,73,248,22,
74,201,196,195,249,22,7,249,22,73,248,22,74,200,196,195,249,22,7,249,22,
73,248,22,74,201,196,195,249,22,7,249,22,73,248,22,74,200,196,195,27,27,
249,22,133,15,2,42,23,197,2,28,23,193,2,86,94,23,195,1,249,22,73,
248,22,98,23,196,2,27,248,22,107,23,197,1,27,249,22,133,15,2,42,23,
196,2,28,23,193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,27,
248,22,107,23,197,1,27,249,22,133,15,2,42,23,196,2,28,23,193,2,86,
94,23,194,1,249,22,73,248,22,98,23,196,2,27,248,22,107,23,197,1,27,
249,22,133,15,2,42,23,196,2,28,23,193,2,86,94,23,194,1,249,22,73,
248,22,98,23,196,2,248,2,43,248,22,107,23,197,1,248,22,83,194,248,22,
83,194,248,22,83,194,248,22,83,195,28,23,195,1,192,28,248,22,81,248,22,
75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,11, 75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,11,
89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22, 89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,
74,197,27,248,22,75,196,90,159,38,11,89,161,38,36,11,28,248,22,81,248, 74,197,90,159,38,11,89,161,38,36,11,27,248,22,75,198,28,248,22,81,248,
22,75,23,197,2,249,22,7,9,248,22,74,197,27,248,22,75,196,90,159,38, 22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,
11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248, 11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,
22,74,197,27,248,22,75,196,90,159,38,11,89,161,38,36,11,28,248,22,81, 22,74,197,90,159,38,11,89,161,38,36,11,27,248,22,75,198,28,248,22,81,
248,22,75,23,197,2,249,22,7,9,248,22,74,197,27,248,22,75,196,90,159, 248,22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,
38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9, 38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,
248,22,74,197,27,248,22,75,196,90,159,38,11,89,161,38,36,11,28,248,22, 248,22,74,197,90,159,38,11,89,161,38,36,11,248,2,50,248,22,75,198,249,
81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,27,248,22,75,196,90, 22,7,249,22,73,248,22,74,201,196,195,249,22,7,249,22,73,248,22,74,200,
159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7, 196,195,249,22,7,249,22,73,248,22,74,201,196,195,249,22,7,249,22,73,248,
9,248,22,74,197,27,248,22,75,196,90,159,38,11,89,161,38,36,11,28,248, 22,74,200,196,195,249,22,7,249,22,73,248,22,74,201,196,195,249,22,7,249,
22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,27,248,22,75,196, 22,73,248,22,74,200,196,195,249,22,7,249,22,73,248,22,74,201,196,195,249,
90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22, 22,7,249,22,73,248,22,74,200,196,195,249,22,7,249,22,73,248,22,74,201,
7,9,248,22,74,197,90,159,38,11,89,161,38,36,11,248,2,45,248,22,75, 196,195,249,22,7,249,22,73,248,22,74,200,196,195,27,27,249,22,133,15,2,
198,249,22,7,249,22,73,248,22,74,201,196,195,249,22,7,249,22,73,248,22, 47,23,197,2,28,23,193,2,86,94,23,195,1,249,22,73,248,22,98,23,196,
74,202,196,195,249,22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,22, 2,27,248,22,107,23,197,1,27,249,22,133,15,2,47,23,196,2,28,23,193,
73,248,22,74,202,196,195,249,22,7,249,22,73,248,22,74,202,196,195,249,22, 2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,27,248,22,107,23,197,
7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22,74,202,196, 1,27,249,22,133,15,2,47,23,196,2,28,23,193,2,86,94,23,194,1,249,
195,249,22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22, 22,73,248,22,98,23,196,2,27,248,22,107,23,197,1,27,249,22,133,15,2,
74,202,196,195,249,22,7,249,22,73,248,22,74,200,196,195,86,95,28,248,22, 47,23,196,2,28,23,193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,
135,5,195,12,250,22,176,9,2,18,6,20,20,114,101,115,111,108,118,101,100, 2,248,2,48,248,22,107,23,197,1,248,22,83,194,248,22,83,194,248,22,83,
45,109,111,100,117,108,101,45,112,97,116,104,197,28,24,193,2,248,24,194,1, 194,248,22,83,195,28,23,195,1,192,28,248,22,81,248,22,75,23,195,2,249,
195,86,94,23,193,1,12,27,250,22,153,2,80,159,41,43,38,248,22,158,15, 22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,11,89,161,38,36,11,
247,22,188,12,11,27,28,23,194,2,193,86,94,23,194,1,27,247,22,133,2, 28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,27,248,22,
86,94,250,22,151,2,80,159,43,43,38,248,22,158,15,247,22,188,12,195,192, 75,196,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,
250,22,151,2,195,199,66,97,116,116,97,99,104,251,211,197,198,199,10,28,192, 249,22,7,9,248,22,74,197,27,248,22,75,196,90,159,38,11,89,161,38,36,
250,22,175,9,11,196,195,248,22,173,9,194,28,249,22,136,7,194,6,1,1, 11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,27,248,
46,2,22,28,249,22,136,7,194,6,2,2,46,46,62,117,112,192,32,52,88, 22,75,196,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,
163,8,36,37,50,11,67,115,115,45,62,114,107,116,222,33,53,27,248,22,133, 2,249,22,7,9,248,22,74,197,27,248,22,75,196,90,159,38,11,89,161,38,
7,194,28,249,22,188,3,194,39,28,249,22,136,7,6,3,3,46,115,115,249, 36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,27,
22,152,7,197,249,22,176,3,198,39,249,22,153,7,250,22,152,7,198,36,249, 248,22,75,196,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,
22,176,3,199,39,6,4,4,46,114,107,116,193,193,28,249,22,142,9,248,22, 197,2,249,22,7,9,248,22,74,197,27,248,22,75,196,90,159,38,11,89,161,
75,23,200,2,23,197,1,28,249,22,140,9,248,22,74,23,200,2,23,196,1, 38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,
251,22,173,9,2,18,6,28,28,99,121,99,108,101,32,105,110,32,108,111,97, 27,248,22,75,196,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,
100,105,110,103,32,97,116,32,126,46,115,58,32,126,46,115,23,200,1,249,22, 23,197,2,249,22,7,9,248,22,74,197,27,248,22,75,196,90,159,38,11,89,
2,22,75,248,22,88,249,22,73,23,206,1,23,202,1,12,12,247,192,20,13, 161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,
159,80,159,40,45,38,249,22,73,248,22,158,15,247,22,188,12,23,197,1,20, 197,90,159,38,11,89,161,38,36,11,248,2,50,248,22,75,198,249,22,7,249,
13,159,80,159,40,40,38,250,80,159,43,41,38,249,22,27,11,80,159,45,40, 22,73,248,22,74,201,196,195,249,22,7,249,22,73,248,22,74,202,196,195,249,
38,22,179,4,23,196,1,249,247,22,158,5,23,198,1,248,22,61,248,22,150, 22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22,74,202,
14,23,198,1,86,94,28,28,248,22,146,14,23,196,2,10,248,22,143,5,23, 196,195,249,22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,
196,2,12,28,23,197,2,250,22,175,9,11,6,15,15,98,97,100,32,109,111, 22,74,202,196,195,249,22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,
100,117,108,101,32,112,97,116,104,23,200,2,250,22,176,9,2,18,6,19,19, 22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22,74,202,196,195,249,
109,111,100,117,108,101,45,112,97,116,104,32,111,114,32,112,97,116,104,23,198, 22,7,249,22,73,248,22,74,200,196,195,86,95,28,248,22,135,5,195,12,250,
2,28,28,248,22,71,23,196,2,249,22,140,9,248,22,74,23,198,2,2,4, 22,176,9,2,21,6,20,20,114,101,115,111,108,118,101,100,45,109,111,100,117,
11,248,22,136,5,248,22,98,196,28,28,248,22,71,23,196,2,249,22,140,9, 108,101,45,112,97,116,104,197,28,24,193,2,248,24,194,1,195,86,94,23,193,
248,22,74,23,198,2,66,112,108,97,110,101,116,11,86,94,28,207,12,20,13, 1,12,27,250,22,153,2,80,159,41,43,38,248,22,158,15,247,22,188,12,11,
159,80,159,37,52,38,80,158,37,50,89,161,37,36,10,249,22,181,4,21,94, 27,28,23,194,2,193,86,94,23,194,1,27,247,22,133,2,86,94,250,22,151,
2,27,6,19,19,112,108,97,110,101,116,47,114,101,115,111,108,118,101,114,46, 2,80,159,43,43,38,248,22,158,15,247,22,188,12,195,192,250,22,151,2,195,
114,107,116,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101,45,110,97, 199,66,97,116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,175,9,11,
109,101,45,114,101,115,111,108,118,101,114,12,252,212,199,200,201,202,80,158,42, 196,195,248,22,173,9,194,28,249,22,136,7,194,6,1,1,46,2,25,28,249,
50,86,94,23,193,1,27,88,163,8,36,37,46,11,79,115,104,111,119,45,99, 22,136,7,194,6,2,2,46,46,62,117,112,192,32,57,88,163,8,36,37,50,
111,108,108,101,99,116,105,111,110,45,101,114,114,223,5,33,50,27,28,248,22, 11,67,115,115,45,62,114,107,116,222,33,58,27,248,22,133,7,194,28,249,22,
58,23,198,2,27,250,22,153,2,80,159,43,44,38,249,22,73,23,203,2,247, 188,3,194,39,28,249,22,136,7,6,3,3,46,115,115,249,22,152,7,197,249,
22,188,14,11,28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38, 22,176,3,198,39,249,22,153,7,250,22,152,7,198,36,249,22,176,3,199,39,
36,11,249,80,159,44,49,37,248,22,64,23,203,2,11,27,28,248,22,81,23, 6,4,4,46,114,107,116,193,193,28,249,22,142,9,248,22,75,23,200,2,23,
195,2,6,8,8,109,97,105,110,46,114,107,116,249,22,153,7,23,197,2,6, 197,1,28,249,22,140,9,248,22,74,23,200,2,23,196,1,251,22,173,9,2,
4,4,46,114,107,116,27,252,80,159,49,54,38,2,18,23,204,1,28,248,22, 21,6,28,28,99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,
81,23,201,2,23,201,1,86,94,23,201,1,248,22,74,23,201,2,28,248,22, 97,116,32,126,46,115,58,32,126,46,115,23,200,1,249,22,2,22,75,248,22,
81,23,201,2,86,94,23,200,1,9,248,22,75,23,201,1,23,199,2,249,22, 88,249,22,73,23,206,1,23,202,1,12,12,247,192,20,13,159,80,159,40,48,
164,14,23,195,1,23,196,1,28,248,22,130,7,23,198,2,86,94,23,194,1, 38,249,22,73,248,22,158,15,247,22,188,12,23,197,1,20,13,159,80,159,40,
27,248,80,159,41,59,37,23,200,2,27,250,22,153,2,80,159,44,44,38,249, 40,38,250,80,159,43,41,38,249,22,27,11,80,159,45,40,38,22,179,4,23,
22,73,23,204,2,23,199,2,11,28,23,193,2,192,86,94,23,193,1,90,159, 196,1,249,247,22,158,5,23,198,1,248,22,61,248,22,150,14,23,198,1,86,
38,11,89,161,38,36,11,249,80,159,45,49,37,23,203,2,11,250,22,1,22, 94,28,28,248,22,146,14,23,196,2,10,248,22,143,5,23,196,2,12,28,23,
164,14,23,199,1,249,22,87,249,22,2,32,0,88,163,8,36,37,44,11,9, 197,2,250,22,175,9,11,6,15,15,98,97,100,32,109,111,100,117,108,101,32,
222,33,51,23,200,1,248,22,83,248,2,52,23,201,1,28,248,22,146,14,23, 112,97,116,104,23,200,2,250,22,176,9,2,21,6,19,19,109,111,100,117,108,
198,2,86,94,23,194,1,28,248,22,169,14,23,198,2,248,80,159,40,8,24, 101,45,112,97,116,104,32,111,114,32,112,97,116,104,23,198,2,28,28,248,22,
37,248,22,173,14,23,199,2,248,22,83,6,26,26,32,40,97,32,112,97,116, 71,23,196,2,249,22,140,9,248,22,74,23,198,2,2,4,11,248,22,136,5,
104,32,109,117,115,116,32,98,101,32,97,98,115,111,108,117,116,101,41,28,249, 248,22,98,196,28,28,248,22,71,23,196,2,249,22,140,9,248,22,74,23,198,
22,140,9,248,22,74,23,200,2,2,27,27,250,22,153,2,80,159,43,44,38, 2,66,112,108,97,110,101,116,11,86,94,28,207,12,20,13,159,80,159,37,55,
249,22,73,23,203,2,247,22,188,14,11,28,23,193,2,192,86,94,23,193,1, 38,80,158,37,53,89,161,37,36,10,249,22,181,4,21,94,2,30,6,19,19,
90,159,39,11,89,161,38,36,11,249,80,159,45,49,37,248,22,98,23,204,2, 112,108,97,110,101,116,47,114,101,115,111,108,118,101,114,46,114,107,116,1,27,
11,89,161,37,38,11,28,248,22,81,248,22,100,23,203,2,28,248,22,81,23, 112,108,97,110,101,116,45,109,111,100,117,108,101,45,110,97,109,101,45,114,101,
194,2,249,22,137,15,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10, 115,111,108,118,101,114,12,252,212,199,200,201,202,80,158,42,53,86,94,23,193,
27,28,23,196,2,248,2,52,23,196,2,28,248,22,81,23,195,2,6,8,8, 1,27,88,163,8,36,37,46,11,79,115,104,111,119,45,99,111,108,108,101,99,
109,97,105,110,46,114,107,116,28,249,22,137,15,0,8,35,114,120,34,91,46, 116,105,111,110,45,101,114,114,223,5,33,55,27,28,248,22,58,23,198,2,27,
93,34,23,197,2,248,2,52,23,196,2,249,22,153,7,23,197,2,6,4,4, 248,80,159,41,46,37,249,22,73,23,201,2,247,22,188,14,28,23,193,2,192,
46,114,107,116,27,28,23,197,1,86,94,23,196,1,249,22,87,28,248,22,81, 86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,159,44,52,37,248,
248,22,100,23,207,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,87, 22,64,23,203,2,11,27,28,248,22,81,23,195,2,6,8,8,109,97,105,110,
249,22,2,80,159,51,8,25,37,248,22,100,23,210,2,23,197,1,28,248,22, 46,114,107,116,249,22,153,7,23,197,2,6,4,4,46,114,107,116,27,252,80,
81,23,196,2,86,94,23,195,1,248,22,83,23,197,1,86,94,23,196,1,23, 159,49,57,38,2,21,23,204,1,28,248,22,81,23,201,2,23,201,1,86,94,
195,1,27,252,80,159,51,54,38,2,18,23,206,1,248,22,74,23,200,2,248, 23,201,1,248,22,74,23,201,2,28,248,22,81,23,201,2,86,94,23,200,1,
22,75,23,200,1,23,200,2,249,22,164,14,23,195,1,23,197,1,28,249,22, 9,248,22,75,23,201,1,23,199,2,249,22,164,14,23,195,1,23,196,1,28,
140,9,248,22,74,23,200,2,64,102,105,108,101,248,80,159,40,8,24,37,248, 248,22,130,7,23,198,2,86,94,23,194,1,27,248,80,159,41,8,26,37,23,
22,173,14,249,22,171,14,248,22,175,14,248,22,98,23,203,2,248,80,159,44, 200,2,27,248,80,159,42,46,37,249,22,73,23,202,2,23,197,2,28,23,193,
59,37,23,203,2,12,86,94,28,28,248,22,146,14,23,194,2,10,248,22,155, 2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,159,45,52,
8,23,194,2,86,94,23,199,1,12,28,23,199,2,250,22,175,9,67,114,101, 37,23,203,2,11,250,22,1,22,164,14,23,199,1,249,22,87,249,22,2,32,
113,117,105,114,101,249,22,178,7,6,17,17,98,97,100,32,109,111,100,117,108, 0,88,163,8,36,37,44,11,9,222,33,56,23,200,1,248,22,83,248,2,57,
101,32,112,97,116,104,126,97,28,23,198,2,248,22,74,23,199,2,6,0,0, 23,201,1,28,248,22,146,14,23,198,2,86,94,23,194,1,28,248,22,169,14,
23,202,1,86,94,23,199,1,250,22,176,9,2,18,249,22,178,7,6,13,13, 23,198,2,248,80,159,40,8,27,37,248,22,173,14,23,199,2,248,22,83,6,
109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,74,23, 26,26,32,40,97,32,112,97,116,104,32,109,117,115,116,32,98,101,32,97,98,
199,2,6,0,0,23,200,2,27,28,248,22,155,8,23,195,2,249,22,160,8, 115,111,108,117,116,101,41,28,249,22,140,9,248,22,74,23,200,2,2,30,27,
23,196,2,36,249,22,173,14,248,22,174,14,23,197,2,11,27,28,248,22,155, 248,80,159,41,46,37,249,22,73,23,201,2,247,22,188,14,28,23,193,2,192,
8,23,196,2,249,22,160,8,23,197,2,37,248,80,159,42,55,38,23,195,2, 86,94,23,193,1,90,159,39,11,89,161,38,36,11,249,80,159,45,52,37,248,
90,159,39,11,89,161,39,36,11,28,248,22,155,8,23,199,2,250,22,7,2, 22,98,23,204,2,11,89,161,37,38,11,28,248,22,81,248,22,100,23,203,2,
28,249,22,160,8,23,203,2,38,2,28,248,22,167,14,23,198,2,86,95,23, 28,248,22,81,23,194,2,249,22,137,15,0,8,35,114,120,34,91,46,93,34,
195,1,23,193,1,27,28,248,22,155,8,23,200,2,249,22,160,8,23,201,2, 23,196,2,11,10,27,28,23,196,2,248,2,57,23,196,2,28,248,22,81,23,
39,249,80,159,47,53,38,23,197,2,5,0,27,28,248,22,155,8,23,201,2, 195,2,6,8,8,109,97,105,110,46,114,107,116,28,249,22,137,15,0,8,35,
249,22,160,8,23,202,2,40,248,22,136,5,23,200,2,27,27,250,22,153,2, 114,120,34,91,46,93,34,23,197,2,248,2,57,23,196,2,249,22,153,7,23,
80,159,51,43,38,248,22,158,15,247,22,188,12,11,28,23,193,2,192,86,94, 197,2,6,4,4,46,114,107,116,27,28,23,197,1,86,94,23,196,1,249,22,
23,193,1,27,247,22,133,2,86,94,250,22,151,2,80,159,52,43,38,248,22, 87,28,248,22,81,248,22,100,23,207,2,21,93,6,5,5,109,122,108,105,98,
158,15,247,22,188,12,195,192,86,95,28,23,208,1,27,250,22,153,2,23,197, 249,22,1,22,87,249,22,2,80,159,51,8,28,37,248,22,100,23,210,2,23,
2,197,11,28,23,193,1,12,86,95,27,27,28,248,22,17,80,159,51,46,38, 197,1,28,248,22,81,23,196,2,86,94,23,195,1,248,22,83,23,197,1,86,
80,159,50,46,38,247,22,19,250,22,25,248,22,23,23,197,2,80,159,53,45, 94,23,196,1,23,195,1,27,252,80,159,51,57,38,2,21,23,206,1,248,22,
38,23,196,1,27,248,22,158,15,247,22,188,12,249,22,3,20,20,94,88,163, 74,23,200,2,248,22,75,23,200,1,23,200,2,249,22,164,14,23,195,1,23,
8,36,37,55,11,9,226,12,11,2,3,33,54,23,195,1,23,196,1,248,28, 197,1,28,249,22,140,9,248,22,74,23,200,2,64,102,105,108,101,248,80,159,
248,22,17,80,159,50,46,38,32,0,88,163,36,37,42,11,9,222,33,55,80, 40,8,27,37,248,22,173,14,249,22,171,14,248,22,175,14,248,22,98,23,203,
159,49,8,26,37,88,163,36,36,51,8,176,8,9,227,13,9,8,4,3,33, 2,248,80,159,44,8,26,37,23,203,2,12,86,94,28,28,248,22,146,14,23,
56,250,22,151,2,23,197,1,197,10,12,28,28,248,22,155,8,23,202,1,11, 194,2,10,248,22,155,8,23,194,2,86,94,23,199,1,12,28,23,199,2,250,
28,248,22,130,7,23,206,2,10,28,248,22,58,23,206,2,10,28,248,22,71, 22,175,9,67,114,101,113,117,105,114,101,249,22,178,7,6,17,17,98,97,100,
23,206,2,249,22,140,9,248,22,74,23,208,2,2,27,11,250,22,151,2,80, 32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,74,
159,50,44,38,28,248,22,130,7,23,209,2,249,22,73,23,210,1,248,80,159, 23,199,2,6,0,0,23,202,1,86,94,23,199,1,250,22,176,9,2,21,249,
53,59,37,23,212,1,86,94,23,209,1,249,22,73,23,210,1,247,22,188,14, 22,178,7,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,
252,22,157,8,23,208,1,23,207,1,23,205,1,23,203,1,201,12,193,86,96, 198,2,248,22,74,23,199,2,6,0,0,23,200,2,27,28,248,22,155,8,23,
20,18,159,11,80,158,36,50,248,80,159,37,58,38,249,22,27,11,80,159,39, 195,2,249,22,160,8,23,196,2,36,249,22,173,14,248,22,174,14,23,197,2,
52,38,248,22,178,4,80,159,37,51,38,248,22,158,5,80,159,37,37,37,248, 11,27,28,248,22,155,8,23,196,2,249,22,160,8,23,197,2,37,248,80,159,
22,179,13,80,159,37,42,37,20,18,159,11,80,158,36,50,248,80,159,37,58, 42,58,38,23,195,2,90,159,39,11,89,161,39,36,11,28,248,22,155,8,23,
38,249,22,27,11,80,159,39,52,38,159,36,20,112,159,36,16,1,11,16,0, 199,2,250,22,7,2,31,249,22,160,8,23,203,2,38,2,31,248,22,167,14,
20,26,142,2,1,2,1,29,11,11,11,11,11,10,38,80,158,36,36,20,112, 23,198,2,86,95,23,195,1,23,193,1,27,28,248,22,155,8,23,200,2,249,
159,40,16,23,2,2,2,3,30,2,5,72,112,97,116,104,45,115,116,114,105, 22,160,8,23,201,2,39,249,80,159,47,56,38,23,197,2,5,0,27,28,248,
110,103,63,11,30,2,5,75,112,97,116,104,45,97,100,100,45,115,117,102,102, 22,155,8,23,201,2,249,22,160,8,23,202,2,40,248,22,136,5,23,200,2,
105,120,8,30,2,7,2,8,5,30,2,7,1,23,101,120,116,101,110,100,45, 27,27,250,22,153,2,80,159,51,43,38,248,22,158,15,247,22,188,12,11,28,
112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,3,2,9,2,10, 23,193,2,192,86,94,23,193,1,27,247,22,133,2,86,94,250,22,151,2,80,
2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,30,2,19,2,8, 159,52,43,38,248,22,158,15,247,22,188,12,195,192,86,95,28,23,208,1,27,
5,30,2,5,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102, 250,22,153,2,23,197,2,197,11,28,23,193,1,12,86,95,27,27,28,248,22,
102,105,120,10,30,2,5,73,102,105,110,100,45,99,111,108,45,102,105,108,101, 17,80,159,51,49,38,80,159,50,49,38,247,22,19,250,22,25,248,22,23,23,
3,30,2,5,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104, 197,2,80,159,53,48,38,23,196,1,27,248,22,158,15,247,22,188,12,249,22,
7,2,20,2,21,30,2,19,74,114,101,112,97,114,97,109,101,116,101,114,105, 3,20,20,94,88,163,8,36,37,55,11,9,226,12,11,2,3,33,59,23,195,
122,101,6,16,0,16,0,36,16,0,36,16,11,2,12,2,13,2,10,2,11, 1,23,196,1,248,28,248,22,17,80,159,50,49,38,32,0,88,163,36,37,42,
2,14,2,15,2,3,2,9,2,2,2,16,2,18,47,11,11,39,36,11,11, 11,9,222,33,60,80,159,49,8,29,37,88,163,36,36,51,8,176,64,9,227,
16,3,2,20,2,17,2,21,16,3,11,11,11,16,3,2,20,2,17,2,21, 13,9,8,4,3,33,61,250,22,151,2,23,197,1,197,10,12,28,28,248,22,
39,39,37,11,11,16,0,16,0,16,0,36,36,11,11,11,16,0,16,0,16, 155,8,23,202,1,11,28,248,22,130,7,23,206,2,10,28,248,22,58,23,206,
0,36,36,16,0,16,18,20,15,16,2,88,163,36,37,45,8,128,16,9,223, 2,10,28,248,22,71,23,206,2,249,22,140,9,248,22,74,23,208,2,2,30,
0,33,29,80,159,36,8,26,37,20,15,16,2,88,163,8,36,37,45,8,128, 11,27,28,248,22,130,7,23,207,2,249,22,73,23,208,1,248,80,159,51,8,
128,9,223,0,33,30,80,159,36,8,25,37,20,15,16,2,88,163,36,37,49, 26,37,23,210,1,86,94,23,207,1,249,22,73,23,208,1,247,22,188,14,27,
8,240,0,0,2,0,72,112,97,116,104,45,115,115,45,62,114,107,116,223,0, 249,22,183,3,248,22,179,3,248,22,166,2,23,198,2,8,128,8,27,249,22,
33,31,80,159,36,8,24,37,20,15,16,2,88,163,36,37,49,8,128,96,67, 160,8,80,159,52,45,38,23,196,2,27,28,23,194,2,248,22,169,2,23,195,
103,101,116,45,100,105,114,223,0,33,32,80,159,36,59,37,20,15,16,2,248, 1,86,94,23,194,1,11,250,22,161,8,80,159,54,45,38,23,198,1,248,22,
22,152,8,69,115,111,45,115,117,102,102,105,120,80,159,36,36,37,20,15,16, 168,2,249,22,73,249,22,73,23,204,1,252,22,157,8,23,217,1,23,216,1,
2,88,163,36,38,8,38,8,61,2,3,223,0,33,41,80,159,36,37,37,20, 23,214,1,23,212,1,23,18,28,23,199,2,23,199,1,86,94,23,199,1,9,
15,16,2,32,0,88,163,8,36,37,42,11,2,9,222,192,80,159,36,42,37, 12,193,86,96,20,18,159,11,80,158,36,53,248,80,159,37,8,25,38,249,22,
20,15,16,2,247,22,136,2,80,159,36,43,37,20,15,16,2,247,22,135,2, 27,11,80,159,39,55,38,248,22,178,4,80,159,37,54,38,248,22,158,5,80,
80,159,36,44,37,20,15,16,2,247,22,69,80,159,36,45,37,20,15,16,2, 159,37,37,37,248,22,179,13,80,159,37,42,37,20,18,159,11,80,158,36,53,
248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105,110,103,80,159,36, 248,80,159,37,8,25,38,249,22,27,11,80,159,39,55,38,159,36,20,112,159,
46,37,20,15,16,2,11,80,158,36,47,20,15,16,2,11,80,158,36,48,20, 36,16,1,11,16,0,20,26,142,2,1,2,1,29,11,11,11,11,11,10,38,
15,16,2,32,0,88,163,36,38,8,42,11,2,16,222,33,47,80,159,36,49, 80,158,36,36,20,112,159,40,16,26,2,2,2,3,30,2,5,72,112,97,116,
37,20,15,16,2,11,80,158,36,50,20,15,16,2,27,11,20,19,158,36,90, 104,45,115,116,114,105,110,103,63,11,30,2,5,75,112,97,116,104,45,97,100,
159,37,10,89,161,37,36,10,20,25,96,2,18,88,163,8,36,37,51,8,128, 100,45,115,117,102,102,105,120,8,30,2,7,2,8,5,30,2,7,1,23,101,
2,9,224,2,1,33,48,88,163,36,39,49,11,9,223,0,33,49,88,163,36, 120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,
40,8,29,8,240,176,103,143,7,9,224,2,1,33,57,207,80,159,36,51,37, 110,3,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,
20,15,16,2,88,163,36,36,45,8,240,66,192,65,0,2,20,223,0,33,58, 18,2,19,2,20,2,21,30,2,22,2,8,5,30,2,5,79,112,97,116,104,
80,159,36,56,37,20,15,16,2,88,163,8,36,36,45,8,240,0,64,65,0, 45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,10,30,2,5,73,102,
2,21,223,0,33,59,80,159,36,57,37,96,29,94,2,4,68,35,37,107,101, 105,110,100,45,99,111,108,45,102,105,108,101,3,30,2,5,76,110,111,114,109,
114,110,101,108,11,29,94,2,4,69,35,37,109,105,110,45,115,116,120,11,2, 97,108,45,99,97,115,101,45,112,97,116,104,7,2,23,2,24,30,2,22,74,
5,2,19,9,9,9,36,0}; 114,101,112,97,114,97,109,101,116,101,114,105,122,101,6,16,0,16,0,36,16,
EVAL_ONE_SIZED_STR((char *)expr, 6538); 0,36,16,14,2,15,2,16,2,10,2,12,2,17,2,18,2,11,2,3,2,
9,2,2,2,13,2,14,2,19,2,21,50,11,11,39,36,11,11,16,3,2,
23,2,20,2,24,16,3,11,11,11,16,3,2,23,2,20,2,24,39,39,37,
11,11,16,0,16,0,16,0,36,36,11,11,11,16,0,16,0,16,0,36,36,
16,0,16,21,20,15,16,2,88,163,36,37,45,8,128,128,9,223,0,33,32,
80,159,36,8,29,37,20,15,16,2,88,163,8,36,37,45,8,240,0,0,1,
0,9,223,0,33,33,80,159,36,8,28,37,20,15,16,2,88,163,36,37,49,
8,240,0,0,16,0,72,112,97,116,104,45,115,115,45,62,114,107,116,223,0,
33,34,80,159,36,8,27,37,20,15,16,2,88,163,36,37,49,8,240,0,192,
0,0,67,103,101,116,45,100,105,114,223,0,33,35,80,159,36,8,26,37,20,
15,16,2,248,22,152,8,69,115,111,45,115,117,102,102,105,120,80,159,36,36,
37,20,15,16,2,88,163,36,38,8,38,8,61,2,3,223,0,33,44,80,159,
36,37,37,20,15,16,2,32,0,88,163,8,36,37,42,11,2,9,222,192,80,
159,36,42,37,20,15,16,2,247,22,136,2,80,159,36,43,37,20,15,16,2,
8,128,8,80,159,36,44,37,20,15,16,2,249,22,156,8,8,128,8,11,80,
159,36,45,37,20,15,16,2,88,163,8,36,37,50,8,128,8,2,13,223,0,
33,45,80,159,36,46,37,20,15,16,2,88,163,8,36,38,55,8,128,8,2,
14,223,0,33,46,80,159,36,47,37,20,15,16,2,247,22,69,80,159,36,48,
37,20,15,16,2,248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105,
110,103,80,159,36,49,37,20,15,16,2,11,80,158,36,50,20,15,16,2,11,
80,158,36,51,20,15,16,2,32,0,88,163,36,38,8,42,11,2,19,222,33,
52,80,159,36,52,37,20,15,16,2,11,80,158,36,53,20,15,16,2,27,11,
20,19,158,36,90,159,37,10,89,161,37,36,10,20,25,96,2,21,88,163,8,
36,37,51,8,128,2,9,224,2,1,33,53,88,163,36,39,49,11,9,223,0,
33,54,88,163,36,40,8,38,16,2,8,176,218,8,187,241,9,224,2,1,33,
62,207,80,159,36,54,37,20,15,16,2,88,163,36,36,45,8,240,66,0,14,
2,2,23,223,0,33,63,80,159,36,59,37,20,15,16,2,88,163,8,36,36,
45,8,240,0,0,10,2,2,24,223,0,33,64,80,159,36,8,24,37,96,29,
94,2,4,68,35,37,107,101,114,110,101,108,11,29,94,2,4,69,35,37,109,
105,110,45,115,116,120,11,2,5,2,22,9,9,9,36,0};
EVAL_ONE_SIZED_STR((char *)expr, 6861);
} }
{ {
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,50,46,51,0,0,0,0,0,0,0,0,0,0,0, SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,50,46,51,0,0,0,0,0,0,0,0,0,0,0,
@ -943,7 +958,7 @@
107,11,29,94,2,2,68,35,37,112,97,114,97,109,122,11,29,94,2,2,74, 107,11,29,94,2,2,68,35,37,112,97,114,97,109,122,11,29,94,2,2,74,
35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,2,66,35, 35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,2,66,35,
37,98,111,111,116,11,29,94,2,2,68,35,37,101,120,112,111,98,115,11,29, 37,98,111,111,116,11,29,94,2,2,68,35,37,101,120,112,111,98,115,11,29,
94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,0,75,0, 94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,223,75,0,
0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,2,6,36, 0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,2,6,36,
36,159,2,7,36,36,159,2,8,36,36,159,2,9,36,36,159,2,9,36,36, 36,159,2,7,36,36,159,2,8,36,36,159,2,9,36,36,159,2,9,36,36,
16,0,159,36,20,112,159,36,16,1,11,16,0,20,26,142,2,1,2,1,29, 16,0,159,36,20,112,159,36,16,1,11,16,0,20,26,142,2,1,2,1,29,

View File

@ -100,8 +100,7 @@
" '(continuation-mark-set-first #f parameterization-key)" " '(continuation-mark-set-first #f parameterization-key)"
" bindings)" " bindings)"
"(list* 'let-values()" "(list* 'let-values()"
"(cdr s))))" "(cdr s)))))))))"
" #f #f)))))"
"(define-syntaxes(cond)" "(define-syntaxes(cond)"
"(lambda(stx)" "(lambda(stx)"
"(let-values(((s)(cdr(syntax->list stx))))" "(let-values(((s)(cdr(syntax->list stx))))"
@ -553,7 +552,20 @@
"(define-values(default-reader-guard)" "(define-values(default-reader-guard)"
"(lambda(path) path))" "(lambda(path) path))"
"(define-values(-module-hash-table-table)(make-weak-hasheq)) " "(define-values(-module-hash-table-table)(make-weak-hasheq)) "
"(define-values(-path-cache)(make-weak-hash)) " "(define CACHE-N 512)"
"(define-values(-path-cache)(make-vector CACHE-N #f)) "
"(define(path-cache-get p)"
"(let*((i(modulo(abs(equal-hash-code p)) CACHE-N))"
"(w(vector-ref -path-cache i))"
"(l(and w(weak-box-value w))))"
"(and l"
"(let((a(assoc p l)))"
"(and a(cdr a))))))"
"(define(path-cache-set! p v)"
"(let*((i(modulo(abs(equal-hash-code p)) CACHE-N))"
"(w(vector-ref -path-cache i))"
"(l(and w(weak-box-value w))))"
"(vector-set! -path-cache i(make-weak-box(cons(cons p v)(or l null))))))"
"(define-values(-loading-filename)(gensym))" "(define-values(-loading-filename)(gensym))"
"(define-values(-loading-prompt-tag)(make-continuation-prompt-tag 'module-loading))" "(define-values(-loading-prompt-tag)(make-continuation-prompt-tag 'module-loading))"
"(define-values(-prev-relto) #f)" "(define-values(-prev-relto) #f)"
@ -650,9 +662,7 @@
"(let((s-parsed" "(let((s-parsed"
"(cond" "(cond"
"((symbol? s)" "((symbol? s)"
"(or(hash-ref -path-cache" "(or(path-cache-get(cons s(current-library-collection-paths)))"
"(cons s(current-library-collection-paths))"
" #f)"
"(let-values(((cols file)(split-relative-string(symbol->string s) #f)))" "(let-values(((cols file)(split-relative-string(symbol->string s) #f)))"
"(let*((f-file(if(null? cols)" "(let*((f-file(if(null? cols)"
" \"main.rkt\"" " \"main.rkt\""
@ -665,7 +675,7 @@
"(build-path p f-file)))))" "(build-path p f-file)))))"
"((string? s)" "((string? s)"
"(let*((dir(get-dir)))" "(let*((dir(get-dir)))"
"(or(hash-ref -path-cache(cons s dir) #f)" "(or(path-cache-get(cons s dir))"
"(let-values(((cols file)(split-relative-string s #f)))" "(let-values(((cols file)(split-relative-string s #f)))"
"(apply build-path " "(apply build-path "
" dir" " dir"
@ -682,9 +692,7 @@
"(path-ss->rkt(simplify-path s))" "(path-ss->rkt(simplify-path s))"
" (list \" (a path must be absolute)\")))" " (list \" (a path must be absolute)\")))"
"((eq?(car s) 'lib)" "((eq?(car s) 'lib)"
"(or(hash-ref -path-cache" "(or(path-cache-get(cons s(current-library-collection-paths)))"
"(cons s(current-library-collection-paths))"
" #f)"
"(let*-values(((cols file)(split-relative-string(cadr s) #f))" "(let*-values(((cols file)(split-relative-string(cadr s) #f))"
"((old-style?)(if(null?(cddr s))" "((old-style?)(if(null?(cddr s))"
"(and(null? cols)" "(and(null? cols)"
@ -794,8 +802,7 @@
"(symbol? s)" "(symbol? s)"
"(and(pair? s)" "(and(pair? s)"
"(eq?(car s) 'lib))))" "(eq?(car s) 'lib))))"
"(hash-set! -path-cache" "(path-cache-set!(if(string? s)"
"(if(string? s)"
"(cons s(get-dir))" "(cons s(get-dir))"
"(cons s(current-library-collection-paths)))" "(cons s(current-library-collection-paths)))"
"(vector filename" "(vector filename"

View File

@ -642,7 +642,26 @@
(lambda (path) path)) (lambda (path) path))
(define-values (-module-hash-table-table) (make-weak-hasheq)) ; weak map from namespace to module ht (define-values (-module-hash-table-table) (make-weak-hasheq)) ; weak map from namespace to module ht
(define-values (-path-cache) (make-weak-hash)) ; weak map from `lib' path + corrent-library-paths to symbols
;; weak map from `lib' path + corrent-library-paths to symbols:
;; We'd like to use a weak `equal?'-based hash table here,
;; but that's not kill-safe. Instead, we use a non-thread-safe
;; custom hash table; a race could lose cache entries, but
;; that's ok.
(define CACHE-N 512)
(define-values (-path-cache) (make-vector CACHE-N #f))
(define (path-cache-get p)
(let* ([i (modulo (abs (equal-hash-code p)) CACHE-N)]
[w (vector-ref -path-cache i)]
[l (and w (weak-box-value w))])
(and l
(let ([a (assoc p l)])
(and a (cdr a))))))
(define (path-cache-set! p v)
(let* ([i (modulo (abs (equal-hash-code p)) CACHE-N)]
[w (vector-ref -path-cache i)]
[l (and w (weak-box-value w))])
(vector-set! -path-cache i (make-weak-box (cons (cons p v) (or l null))))))
(define-values (-loading-filename) (gensym)) (define-values (-loading-filename) (gensym))
(define-values (-loading-prompt-tag) (make-continuation-prompt-tag 'module-loading)) (define-values (-loading-prompt-tag) (make-continuation-prompt-tag 'module-loading))
@ -748,9 +767,7 @@
;; Non-string result represents an error ;; Non-string result represents an error
(cond (cond
[(symbol? s) [(symbol? s)
(or (hash-ref -path-cache (or (path-cache-get (cons s (current-library-collection-paths)))
(cons s (current-library-collection-paths))
#f)
(let-values ([(cols file) (split-relative-string (symbol->string s) #f)]) (let-values ([(cols file) (split-relative-string (symbol->string s) #f)])
(let* ([f-file (if (null? cols) (let* ([f-file (if (null? cols)
"main.rkt" "main.rkt"
@ -763,7 +780,7 @@
(build-path p f-file))))] (build-path p f-file))))]
[(string? s) [(string? s)
(let* ([dir (get-dir)]) (let* ([dir (get-dir)])
(or (hash-ref -path-cache (cons s dir) #f) (or (path-cache-get (cons s dir))
(let-values ([(cols file) (split-relative-string s #f)]) (let-values ([(cols file) (split-relative-string s #f)])
(apply build-path (apply build-path
dir dir
@ -781,9 +798,7 @@
(path-ss->rkt (simplify-path s)) (path-ss->rkt (simplify-path s))
(list " (a path must be absolute)"))] (list " (a path must be absolute)"))]
[(eq? (car s) 'lib) [(eq? (car s) 'lib)
(or (hash-ref -path-cache (or (path-cache-get (cons s (current-library-collection-paths)))
(cons s (current-library-collection-paths))
#f)
(let*-values ([(cols file) (split-relative-string (cadr s) #f)] (let*-values ([(cols file) (split-relative-string (cadr s) #f)]
[(old-style?) (if (null? (cddr s)) [(old-style?) (if (null? (cddr s))
(and (null? cols) (and (null? cols)
@ -898,8 +913,7 @@
(symbol? s) (symbol? s)
(and (pair? s) (and (pair? s)
(eq? (car s) 'lib)))) (eq? (car s) 'lib))))
(hash-set! -path-cache (path-cache-set! (if (string? s)
(if (string? s)
(cons s (get-dir)) (cons s (get-dir))
(cons s (current-library-collection-paths))) (cons s (current-library-collection-paths)))
(vector filename (vector filename