default module name resolver: fix cache

The cache was keyed on `current-library-collection-paths`, but
not other parameters such as `current-library-collection-links`,
so it was too "sticky" in the case that some parameters changed.
Adjust the cache to be specific to loaded module in a namespace's
module registry.
This commit is contained in:
Matthew Flatt 2014-05-14 05:42:58 -06:00
parent 62ff915a56
commit a7ad0e3a01
4 changed files with 262 additions and 232 deletions

View File

@ -150,6 +150,16 @@ bytecode-file information recorded by the @tech{compiled-load handler}
for the source namespace's @tech{module registry} is transferred to for the source namespace's @tech{module registry} is transferred to
the target namespace's @tech{module registry}. the target namespace's @tech{module registry}.
The default module name resolver also maintains a small,
@tech{module registry}-specific cache that maps @racket[lib] and symbolic
module paths to their resolutions. This cache is consulted before
checking parameters such as @racket[current-library-collection-links]
and @racket[current-library-collection-paths], so results may
``stick'' even if those parameter values change. An entry is added to
the cache only when the fourth argument to the module name resolver is
true (indicating that a module should be loaded) and only when loading
succeeds.
Module loading is suppressed (i.e., @racket[#f] is supplied as a fourth Module loading is suppressed (i.e., @racket[#f] is supplied as a fourth
argument to the module name resolver) when resolving module paths in argument to the module name resolver) when resolving module paths in
@tech{syntax objects} (see @secref["stxobj-model"]). When a @tech{syntax objects} (see @secref["stxobj-model"]). When a

View File

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

View File

@ -748,13 +748,18 @@
"(define finish" "(define finish"
"(lambda(i sep i2)" "(lambda(i sep i2)"
"(bytes->path-element" "(bytes->path-element"
"(bytes-append" "(let((res(bytes-append"
"(subbytes bs 0 i)" "(subbytes bs 0 i)"
" sep" " sep"
"(rest-bytes bs i2)" "(rest-bytes bs i2)"
"(if(string? sfx)" "(if(string? sfx)"
"(string->bytes/locale sfx(char->integer #\\?))" "(string->bytes/locale sfx(char->integer #\\?))"
" sfx))" " sfx))))"
"(if(zero?(bytes-length res))"
"(raise-arguments-error 'path-replace-suffix"
" \"removing suffix makes path element empty\""
" \"given path\" s)"
" res))"
"(if(path-for-some-system? s)" "(if(path-for-some-system? s)"
"(path-convention-type s)" "(path-convention-type s)"
"(system-path-convention-type)))))" "(system-path-convention-type)))))"
@ -1171,6 +1176,8 @@
" base))))))" " base))))))"
"(current-load-relative-directory)" "(current-load-relative-directory)"
"(current-directory))))" "(current-directory))))"
"(get-reg(lambda()"
"(namespace-module-registry(current-namespace))))"
"(show-collection-err(lambda(msg)" "(show-collection-err(lambda(msg)"
"(let((msg(string-append" "(let((msg(string-append"
"(or(and stx" "(or(and stx"
@ -1196,7 +1203,9 @@
"(ss->rkt(lambda(s)" "(ss->rkt(lambda(s)"
"(let((len(string-length s)))" "(let((len(string-length s)))"
"(if(and(len . >= . 3)" "(if(and(len . >= . 3)"
" (string=? \".ss\" (substring s (- len 3))))" "(equal? #\\.(string-ref s(- len 3)))"
"(equal? #\\s(string-ref s(- len 2)))"
"(equal? #\\s(string-ref s(- len 1))))"
" (string-append (substring s 0 (- len 3)) \".rkt\")" " (string-append (substring s 0 (- len 3)) \".rkt\")"
" s))))" " s))))"
"(path-ss->rkt(lambda(p)" "(path-ss->rkt(lambda(p)"
@ -1240,7 +1249,7 @@
"(let((s-parsed" "(let((s-parsed"
"(cond" "(cond"
"((symbol? s)" "((symbol? s)"
"(or(path-cache-get(cons s(current-library-collection-paths)))" "(or(path-cache-get(cons s(get-reg)))"
"(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\""
@ -1253,6 +1262,8 @@
"(let*((dir(get-dir)))" "(let*((dir(get-dir)))"
"(or(path-cache-get(cons s dir))" "(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)))"
"(if(null? cols)"
"(build-path dir(ss->rkt file))"
"(apply build-path " "(apply build-path "
" dir" " dir"
"(append" "(append"
@ -1262,13 +1273,13 @@
" ((string=? s \"..\") 'up)" " ((string=? s \"..\") 'up)"
"(else s)))" "(else s)))"
" cols)" " cols)"
"(list(ss->rkt file))))))))" "(list(ss->rkt file)))))))))"
"((path? s) " "((path? s) "
"(path-ss->rkt(simplify-path(if(complete-path? s)" "(path-ss->rkt(simplify-path(if(complete-path? s)"
" s" " s"
"(path->complete-path s(get-dir))))))" "(path->complete-path s(get-dir))))))"
"((eq?(car s) 'lib)" "((eq?(car s) 'lib)"
"(or(path-cache-get(cons s(current-library-collection-paths)))" "(or(path-cache-get(cons s(get-reg)))"
"(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)"
@ -1329,11 +1340,11 @@
"(vector-ref s-parsed 4)" "(vector-ref s-parsed 4)"
"(make-resolved-module-path filename)))" "(make-resolved-module-path filename)))"
"(hts(or(hash-ref -module-hash-table-table" "(hts(or(hash-ref -module-hash-table-table"
"(namespace-module-registry(current-namespace))" "(get-reg)"
" #f)" " #f)"
"(let((hts(cons(make-hasheq)(make-hasheq))))" "(let((hts(cons(make-hasheq)(make-hasheq))))"
"(hash-set! -module-hash-table-table" "(hash-set! -module-hash-table-table"
"(namespace-module-registry(current-namespace))" "(get-reg)"
" hts)" " hts)"
" hts)))" " hts)))"
"(modname(if subm-path" "(modname(if subm-path"
@ -1353,7 +1364,7 @@
" -loading-filename" " -loading-filename"
" null" " null"
" tag)))" " tag)))"
"(nsr(namespace-module-registry(current-namespace))))" "(nsr(get-reg)))"
"(for-each" "(for-each"
"(lambda(s)" "(lambda(s)"
"(when(and(equal?(cdr s) normal-filename)" "(when(and(equal?(cdr s) normal-filename)"
@ -1372,9 +1383,7 @@
"(lambda(f)(f))" "(lambda(f)(f))"
"(lambda(f)(call-with-continuation-prompt f -loading-prompt-tag)))" "(lambda(f)(call-with-continuation-prompt f -loading-prompt-tag)))"
"(lambda()" "(lambda()"
"(with-continuation-mark -loading-filename(cons(cons " "(with-continuation-mark -loading-filename(cons(cons nsr normal-filename)"
"(namespace-module-registry(current-namespace))"
" normal-filename)"
" loading)" " loading)"
"(parameterize((current-module-declare-name root-modname)" "(parameterize((current-module-declare-name root-modname)"
"(current-module-path-for-load" "(current-module-path-for-load"
@ -1399,13 +1408,14 @@
"(cons sym subm-path))" "(cons sym subm-path))"
" sym)))))))))))" " sym)))))))))))"
"(when(and(not(vector? s-parsed))" "(when(and(not(vector? s-parsed))"
" load?"
"(or(string? s)" "(or(string? s)"
"(symbol? s)" "(symbol? s)"
"(and(pair? s)" "(and(pair? s)"
"(eq?(car s) 'lib))))" "(eq?(car s) 'lib))))"
"(path-cache-set!(if(string? s)" "(path-cache-set!(if(string? s)"
"(cons s(get-dir))" "(cons s(get-dir))"
"(cons s(current-library-collection-paths)))" "(cons s(get-reg)))"
"(vector filename" "(vector filename"
" normal-filename" " normal-filename"
" name" " name"

View File

@ -1349,6 +1349,8 @@
base)))))) base))))))
(current-load-relative-directory) (current-load-relative-directory)
(current-directory)))] (current-directory)))]
[get-reg (lambda ()
(namespace-module-registry (current-namespace)))]
[show-collection-err (lambda (msg) [show-collection-err (lambda (msg)
(let ([msg (string-append (let ([msg (string-append
(or (and stx (or (and stx
@ -1374,7 +1376,10 @@
[ss->rkt (lambda (s) [ss->rkt (lambda (s)
(let ([len (string-length s)]) (let ([len (string-length s)])
(if (and (len . >= . 3) (if (and (len . >= . 3)
(string=? ".ss" (substring s (- len 3)))) ;; ".ss"
(equal? #\. (string-ref s (- len 3)))
(equal? #\s (string-ref s (- len 2)))
(equal? #\s (string-ref s (- len 1))))
(string-append (substring s 0 (- len 3)) ".rkt") (string-append (substring s 0 (- len 3)) ".rkt")
s)))] s)))]
[path-ss->rkt (lambda (p) [path-ss->rkt (lambda (p)
@ -1421,7 +1426,7 @@
;; Non-string result represents an error ;; Non-string result represents an error
(cond (cond
[(symbol? s) [(symbol? s)
(or (path-cache-get (cons s (current-library-collection-paths))) (or (path-cache-get (cons s (get-reg)))
(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"
@ -1434,6 +1439,8 @@
(let* ([dir (get-dir)]) (let* ([dir (get-dir)])
(or (path-cache-get (cons s dir)) (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)])
(if (null? cols)
(build-path dir (ss->rkt file))
(apply build-path (apply build-path
dir dir
(append (append
@ -1443,14 +1450,14 @@
[(string=? s "..") 'up] [(string=? s "..") 'up]
[else s])) [else s]))
cols) cols)
(list (ss->rkt file)))))))] (list (ss->rkt file))))))))]
[(path? s) [(path? s)
;; Use filesystem-sensitive `simplify-path' here: ;; Use filesystem-sensitive `simplify-path' here:
(path-ss->rkt (simplify-path (if (complete-path? s) (path-ss->rkt (simplify-path (if (complete-path? s)
s s
(path->complete-path s (get-dir)))))] (path->complete-path s (get-dir)))))]
[(eq? (car s) 'lib) [(eq? (car s) 'lib)
(or (path-cache-get (cons s (current-library-collection-paths))) (or (path-cache-get (cons s (get-reg)))
(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)
@ -1513,11 +1520,11 @@
(vector-ref s-parsed 4) (vector-ref s-parsed 4)
(make-resolved-module-path filename))] (make-resolved-module-path filename))]
[hts (or (hash-ref -module-hash-table-table [hts (or (hash-ref -module-hash-table-table
(namespace-module-registry (current-namespace)) (get-reg)
#f) #f)
(let ([hts (cons (make-hasheq) (make-hasheq))]) (let ([hts (cons (make-hasheq) (make-hasheq))])
(hash-set! -module-hash-table-table (hash-set! -module-hash-table-table
(namespace-module-registry (current-namespace)) (get-reg)
hts) hts)
hts))] hts))]
[modname (if subm-path [modname (if subm-path
@ -1539,7 +1546,7 @@
-loading-filename -loading-filename
null null
tag))] tag))]
[nsr (namespace-module-registry (current-namespace))]) [nsr (get-reg)])
(for-each (for-each
(lambda (s) (lambda (s)
(when (and (equal? (cdr s) normal-filename) (when (and (equal? (cdr s) normal-filename)
@ -1558,9 +1565,7 @@
(lambda (f) (f)) (lambda (f) (f))
(lambda (f) (call-with-continuation-prompt f -loading-prompt-tag))) (lambda (f) (call-with-continuation-prompt f -loading-prompt-tag)))
(lambda () (lambda ()
(with-continuation-mark -loading-filename (cons (cons (with-continuation-mark -loading-filename (cons (cons nsr normal-filename)
(namespace-module-registry (current-namespace))
normal-filename)
loading) loading)
(parameterize ([current-module-declare-name root-modname] (parameterize ([current-module-declare-name root-modname]
[current-module-path-for-load [current-module-path-for-load
@ -1592,13 +1597,14 @@
sym))))))))))) sym)))))))))))
;; If a `lib' path, cache pathname manipulations ;; If a `lib' path, cache pathname manipulations
(when (and (not (vector? s-parsed)) (when (and (not (vector? s-parsed))
load?
(or (string? s) (or (string? s)
(symbol? s) (symbol? s)
(and (pair? s) (and (pair? s)
(eq? (car s) 'lib)))) (eq? (car s) 'lib))))
(path-cache-set! (if (string? s) (path-cache-set! (if (string? s)
(cons s (get-dir)) (cons s (get-dir))
(cons s (current-library-collection-paths))) (cons s (get-reg)))
(vector filename (vector filename
normal-filename normal-filename
name name