]> git.saurik.com Git - apple/objc4.git/blob - runtime/phash.m
objc4-371.2.tar.gz
[apple/objc4.git] / runtime / phash.m
1 /* table for the mapping for the perfect hash */
2 #ifndef STANDARD
3 #include "standard.h"
4 #endif /* STANDARD */
5 #ifndef PHASH
6 #include "phash.h"
7 #endif /* PHASH */
8 #ifndef LOOKUPA
9 #include "lookupa.h"
10 #endif /* LOOKUPA */
11
12 /* A way to make the 1-byte values in tab bigger */
13 __private_extern__ const ub2 scramble[] = {
14 0x0000, 0x6b0f, 0x4c7d, 0x01b0, 0x1c38, 0x6c2c, 0x3596, 0x43b7,
15 0x754c, 0x0ad4, 0x18a7, 0x5131, 0x0a50, 0x291c, 0x6366, 0x7e81,
16 0x32bf, 0x19b3, 0x033b, 0x6346, 0x0df6, 0x58bd, 0x6c8d, 0x5de5,
17 0x26d1, 0x74a5, 0x35f8, 0x1bd7, 0x42e4, 0x0196, 0x4d64, 0x6e42,
18 0x1809, 0x007f, 0x2f2d, 0x0615, 0x73ac, 0x4dcd, 0x4cd9, 0x5767,
19 0x551b, 0x6aa5, 0x3587, 0x42c5, 0x329b, 0x3373, 0x5a4d, 0x5e6b,
20 0x0250, 0x40bf, 0x61fb, 0x5577, 0x344a, 0x54cc, 0x0533, 0x7055,
21 0x0be0, 0x65e9, 0x1963, 0x2549, 0x51a2, 0x77e2, 0x0498, 0x03f4,
22 0x2a77, 0x4d08, 0x2c45, 0x2978, 0x27a3, 0x73b0, 0x0ec5, 0x02e9,
23 0x4df7, 0x0858, 0x3124, 0x38dc, 0x3556, 0x34c5, 0x3fc5, 0x5b57,
24 0x1c13, 0x50d8, 0x3162, 0x5797, 0x16da, 0x5492, 0x7515, 0x3c25,
25 0x7d74, 0x2bbb, 0x490e, 0x068f, 0x751b, 0x4ccb, 0x7e7e, 0x6857,
26 0x6cdd, 0x2093, 0x726b, 0x0150, 0x472b, 0x5e5b, 0x5b20, 0x1b01,
27 0x5c2e, 0x63f5, 0x3cd6, 0x0ed0, 0x6a41, 0x16fe, 0x0069, 0x13fa,
28 0x1dcb, 0x44f0, 0x6f3a, 0x0cec, 0x0c4d, 0x7b40, 0x24f7, 0x5dff,
29 0x7929, 0x762f, 0x73bf, 0x396a, 0x155c, 0x2614, 0x7165, 0x5906,
30 0x7bcb, 0x51ba, 0x60e0, 0x2f88, 0x328d, 0x042b, 0x1175, 0x634b,
31 0x4cd1, 0x0893, 0x5e07, 0x708c, 0x5bb2, 0x00a5, 0x5ee3, 0x6f47,
32 0x34b9, 0x12a4, 0x0558, 0x0e61, 0x6744, 0x2f9f, 0x6b85, 0x36f9,
33 0x1a1e, 0x562d, 0x742e, 0x1655, 0x686d, 0x0bb6, 0x16fb, 0x2b8f,
34 0x5b7a, 0x0699, 0x5f40, 0x0130, 0x46d8, 0x0e8b, 0x7383, 0x0186,
35 0x7dc9, 0x05c4, 0x18f9, 0x6e8d, 0x7537, 0x05dc, 0x2076, 0x2b1e,
36 0x1a74, 0x6fcb, 0x6163, 0x645c, 0x14b9, 0x5995, 0x1387, 0x5bff,
37 0x1ad6, 0x3538, 0x6ad1, 0x3f04, 0x2ad8, 0x073c, 0x44d4, 0x3cee,
38 0x4d79, 0x0f50, 0x64a2, 0x52d7, 0x6930, 0x75a6, 0x24da, 0x58fe,
39 0x01ed, 0x7d35, 0x7afa, 0x662e, 0x3a3d, 0x4156, 0x1ba2, 0x6b0c,
40 0x0ca0, 0x4269, 0x2d22, 0x0a6e, 0x683e, 0x68aa, 0x5cb2, 0x18c3,
41 0x72c6, 0x6d37, 0x134d, 0x4801, 0x6a3a, 0x4904, 0x1cdd, 0x4565,
42 0x2e0f, 0x7534, 0x6c44, 0x537e, 0x6b70, 0x38eb, 0x16c4, 0x2e9c,
43 0x759d, 0x48ae, 0x6244, 0x12b2, 0x357d, 0x7a73, 0x6bd7, 0x604e,
44 0x6ca1, 0x3677, 0x7157, 0x3e55, 0x7d6e, 0x53d6, 0x36b3, 0x523b,
45 0x2991, 0x597e, 0x49c6, 0x5d92, 0x5076, 0x5857, 0x3c8c, 0x3e59,
46 };
47
48 /* small adjustments to _a_ to make values distinct */
49 __private_extern__ const ub1 tab[] = {
50 4,2,0,52,1,7,1,15,7,15,0,9,1,44,0,39,
51 34,4,1,3,13,8,37,3,5,2,56,0,0,1,6,3,
52 31,7,105,4,3,8,6,10,2,11,1,19,10,39,24,5,
53 7,11,7,38,0,4,3,0,0,38,12,2,7,12,19,0,
54 36,78,5,67,9,4,15,0,0,57,1,1,2,6,7,0,
55 6,0,1,2,8,5,3,17,3,23,8,35,0,0,29,13,
56 50,0,23,4,0,28,5,20,36,2,12,10,23,55,9,2,
57 2,3,1,1,27,63,12,4,6,9,18,5,9,9,35,0,
58 16,71,0,0,2,1,0,6,4,6,0,20,4,1,6,14,
59 1,18,14,0,16,88,1,5,14,3,0,0,4,49,65,7,
60 0,6,0,1,1,1,11,234,5,17,5,0,0,5,0,9,
61 0,15,7,21,5,4,11,8,1,2,2,17,0,5,32,6,
62 1,0,5,29,5,18,7,0,19,97,0,1,6,3,50,0,
63 0,0,6,0,0,2,4,0,8,10,1,5,3,1,18,2,
64 3,0,0,14,1,2,4,29,0,0,0,6,16,34,2,10,
65 8,11,11,1,17,43,12,12,7,22,1,0,25,205,1,4,
66 20,31,6,70,0,0,16,9,0,13,1,11,1,4,57,5,
67 12,0,2,0,1,2,4,2,0,7,20,89,3,0,0,0,
68 2,37,1,33,6,14,11,6,2,2,2,11,4,24,5,0,
69 30,10,6,6,1,49,0,6,4,5,14,2,10,17,12,0,
70 0,2,13,66,76,11,0,17,1,3,26,0,0,5,19,5,
71 0,129,1,1,36,6,5,0,7,0,9,44,0,0,72,30,
72 0,9,0,1,18,4,27,63,1,1,10,15,10,35,0,25,
73 9,21,1,6,28,0,12,15,4,50,0,12,3,25,3,12,
74 35,77,6,22,14,6,0,0,31,0,2,0,0,61,9,0,
75 0,0,13,8,6,6,41,14,18,1,8,8,20,3,0,6,
76 11,2,141,31,1,6,17,10,16,3,30,20,2,14,3,4,
77 16,15,18,6,72,5,1,12,41,16,11,0,33,6,8,26,
78 3,6,2,26,8,27,0,4,2,37,0,98,3,14,1,5,
79 0,20,2,2,3,1,65,1,0,5,6,0,0,4,3,26,
80 5,45,4,1,0,3,0,6,0,4,4,3,10,26,5,68,
81 11,7,0,3,17,44,1,37,4,15,9,1,4,9,40,0,
82 0,1,0,43,3,1,3,20,1,3,2,6,8,13,34,0,
83 16,2,13,25,7,1,5,16,0,9,6,26,1,46,76,2,
84 15,19,0,3,3,1,6,40,2,0,6,1,62,18,14,2,
85 9,19,6,8,5,0,60,41,22,216,16,46,26,6,1,46,
86 30,0,0,24,3,0,2,3,21,23,48,27,5,0,1,17,
87 6,8,3,0,5,0,6,12,0,0,0,3,2,2,0,13,
88 5,3,2,23,18,33,1,27,1,0,0,18,39,26,0,19,
89 13,0,2,0,23,6,68,0,16,1,0,1,36,16,15,28,
90 1,10,0,10,4,6,5,4,0,26,0,5,6,14,5,2,
91 1,4,0,14,12,46,5,0,8,64,51,36,36,33,1,0,
92 29,8,0,4,4,0,0,11,13,50,1,22,2,4,1,24,
93 1,4,0,20,43,76,0,0,16,36,50,14,1,2,0,13,
94 3,0,1,27,1,87,11,0,6,26,8,2,6,2,4,33,
95 0,0,4,4,72,3,0,6,0,42,11,1,8,4,0,0,
96 0,11,0,28,2,15,2,2,33,13,1,5,3,3,19,2,
97 0,12,46,0,6,9,0,0,3,1,4,226,1,17,6,8,
98 1,1,37,4,5,2,12,38,12,0,9,4,1,20,1,0,
99 22,18,0,11,3,6,16,37,3,5,18,4,0,44,5,6,
100 32,3,1,57,3,7,2,3,4,29,10,2,17,6,0,1,
101 25,44,1,2,7,29,83,9,15,6,1,10,0,8,1,5,
102 32,4,0,4,68,0,3,0,7,11,3,0,0,1,2,9,
103 4,6,4,53,20,6,0,5,2,3,0,24,9,2,0,0,
104 22,13,8,8,16,16,15,22,0,51,80,6,0,3,12,0,
105 1,3,14,1,4,2,0,6,2,4,28,3,1,16,26,20,
106 3,76,3,3,109,12,53,40,8,19,1,35,4,3,14,21,
107 5,103,2,8,5,0,3,7,4,8,20,1,31,69,0,0,
108 39,68,3,9,15,12,4,7,16,12,23,1,13,9,7,1,
109 29,80,10,8,3,0,24,0,15,29,8,0,4,30,30,0,
110 38,3,0,9,12,2,2,0,7,11,18,5,3,25,3,0,
111 2,1,0,9,3,0,35,0,17,1,15,4,0,0,52,24,
112 0,2,0,63,7,46,3,1,7,9,29,3,1,2,7,16,
113 0,9,6,101,6,1,21,18,0,6,21,9,11,0,4,0,
114 3,0,19,1,0,0,38,3,4,66,0,9,2,32,5,4,
115 11,3,9,8,24,23,1,2,3,2,2,6,3,4,1,4,
116 26,0,0,0,12,0,2,8,0,1,49,25,0,0,0,0,
117 10,5,0,0,44,54,11,5,53,8,26,0,54,1,8,14,
118 68,6,7,13,2,7,0,9,2,38,0,31,1,2,0,2,
119 48,38,5,0,11,16,0,13,0,61,0,8,12,0,1,11,
120 2,20,1,3,42,3,0,3,9,0,2,1,4,14,32,0,
121 3,0,5,25,7,26,2,117,15,18,2,6,33,9,3,0,
122 29,5,9,9,12,5,4,8,3,4,0,0,41,4,1,2,
123 38,2,5,15,12,1,2,0,0,2,15,2,3,39,11,3,
124 89,22,0,36,24,4,50,5,8,5,20,3,50,14,0,0,
125 0,17,11,41,16,5,3,48,7,27,47,1,2,1,3,1,
126 4,0,18,2,2,8,0,0,7,60,2,62,21,0,1,8,
127 55,55,23,2,13,3,3,29,10,4,19,16,4,5,0,3,
128 35,15,1,4,3,3,0,8,0,15,4,0,4,69,16,3,
129 10,1,18,4,18,9,6,48,2,2,31,15,80,21,47,1,
130 0,2,59,15,3,14,2,30,7,1,3,5,0,24,1,0,
131 5,23,14,0,30,4,0,1,0,1,18,5,8,19,13,78,
132 3,5,0,26,34,5,5,12,0,1,7,5,10,2,1,14,
133 7,0,10,2,10,0,2,0,7,1,1,46,4,3,23,0,
134 21,4,59,0,0,27,56,11,9,27,1,3,0,13,3,11,
135 10,13,4,1,7,8,6,1,78,0,31,10,3,9,40,80,
136 69,14,3,77,21,0,0,3,1,2,0,3,2,5,7,5,
137 21,50,96,3,3,0,20,9,0,6,1,1,2,4,0,14,
138 0,0,0,5,0,32,12,45,6,32,3,20,12,0,0,28,
139 24,3,1,4,0,41,2,0,12,2,4,10,4,10,11,0,
140 30,11,44,10,68,20,2,121,0,5,1,10,21,14,22,35,
141 2,6,2,1,45,10,12,4,1,26,3,9,8,10,1,0,
142 26,23,11,1,19,39,0,0,0,84,13,4,7,38,30,9,
143 8,12,5,12,18,10,60,2,8,41,1,1,174,10,1,63,
144 0,37,0,50,73,13,0,4,2,0,6,1,42,55,13,4,
145 1,1,3,0,4,4,21,3,2,24,30,12,40,0,11,8,
146 4,6,45,2,6,1,15,18,31,8,0,57,1,73,34,19,
147 14,27,3,20,19,0,9,15,8,3,5,3,1,0,7,38,
148 10,20,40,62,25,12,1,1,0,5,4,4,22,1,18,6,
149 74,3,2,72,6,8,6,25,2,14,13,2,94,63,39,50,
150 0,26,41,0,55,2,22,89,8,1,0,3,7,1,1,0,
151 7,2,19,2,17,3,7,5,2,34,1,20,2,7,3,17,
152 2,7,24,2,54,3,1,0,7,0,0,0,4,3,7,2,
153 10,1,0,22,6,0,7,1,14,53,84,11,7,19,1,6,
154 31,3,10,20,121,1,1,1,5,6,0,21,2,0,10,0,
155 35,23,72,8,64,5,1,46,8,29,4,13,0,33,75,7,
156 2,48,55,17,0,23,84,0,1,5,0,2,3,15,11,5,
157 41,16,21,0,5,1,14,12,16,8,34,36,13,1,0,0,
158 8,19,0,0,14,6,14,0,7,10,2,23,0,31,4,0,
159 55,6,15,13,13,3,7,1,0,3,1,16,0,16,4,0,
160 41,0,5,1,0,1,0,1,4,16,2,1,0,0,3,7,
161 29,14,10,31,5,1,7,13,0,0,20,0,5,122,1,4,
162 20,1,25,14,0,0,7,45,6,0,8,3,24,0,0,3,
163 50,80,74,3,4,41,57,38,25,4,0,0,3,0,3,0,
164 2,8,31,72,11,9,7,15,12,0,0,5,2,15,2,3,
165 25,4,1,0,16,40,4,76,80,0,0,79,28,19,10,14,
166 0,2,106,8,27,1,3,21,2,49,27,0,2,27,0,21,
167 39,81,30,31,2,20,13,11,0,1,3,8,195,39,18,82,
168 7,47,0,5,88,1,126,1,1,0,0,6,4,77,6,1,
169 61,33,0,19,7,2,3,70,35,18,17,23,5,0,5,15,
170 0,11,0,19,22,0,45,0,0,45,13,5,2,55,11,8,
171 41,3,15,9,11,51,26,3,2,0,3,2,3,15,12,11,
172 2,4,79,1,6,26,151,1,5,11,4,6,1,15,7,3,
173 2,3,0,1,29,5,9,20,0,45,0,2,23,0,0,102,
174 14,19,0,1,6,14,14,1,1,0,18,0,8,36,0,0,
175 103,0,54,10,13,19,19,9,30,7,0,0,6,18,32,0,
176 40,4,5,24,0,10,5,10,54,6,13,0,11,21,28,7,
177 25,34,0,0,1,6,2,0,6,27,22,10,23,15,29,0,
178 16,0,2,48,18,95,16,3,1,22,21,12,6,12,0,50,
179 8,2,3,18,16,0,60,1,2,6,28,9,3,1,3,31,
180 77,42,8,24,36,13,21,7,10,27,18,1,14,9,29,22,
181 107,13,0,0,50,23,19,10,1,0,13,63,1,0,0,14,
182 13,7,0,19,0,27,14,1,3,4,5,1,7,9,35,10,
183 2,26,50,22,19,6,53,1,1,4,3,34,4,97,18,12,
184 30,1,4,29,14,22,27,0,0,3,6,0,33,1,20,3,
185 21,14,59,2,3,25,0,0,2,70,16,8,10,8,0,1,
186 0,4,9,16,4,20,3,5,1,61,10,22,86,7,0,0,
187 3,35,56,147,6,0,4,52,0,28,4,32,1,9,22,33,
188 3,33,0,29,0,3,11,0,7,2,2,20,2,3,57,49,
189 3,11,14,16,13,4,19,6,0,32,33,0,0,8,8,19,
190 6,9,69,45,15,4,2,3,74,11,8,3,3,28,27,9,
191 6,43,51,22,1,7,1,4,0,9,24,32,1,0,7,23,
192 22,53,25,0,57,0,56,0,10,1,65,0,0,6,53,21,
193 0,6,1,0,20,7,132,7,31,0,10,19,41,41,6,3,
194 1,7,22,2,0,12,10,19,65,0,5,40,7,5,171,9,
195 5,1,10,12,36,5,15,7,18,41,10,1,19,8,2,0,
196 62,23,1,11,7,4,54,3,7,11,179,56,0,21,18,2,
197 0,4,4,43,0,2,5,30,1,2,20,81,66,16,7,4,
198 6,10,3,0,26,0,20,0,7,11,0,18,5,0,2,9,
199 0,52,0,47,0,10,20,31,49,57,0,9,6,17,37,65,
200 13,1,26,2,100,1,7,1,16,33,29,5,8,51,15,0,
201 24,0,13,2,17,5,10,29,0,21,1,0,0,6,33,0,
202 2,20,0,0,3,0,10,12,0,3,16,9,14,2,0,0,
203 32,4,1,12,24,0,5,28,8,41,16,11,2,23,0,91,
204 0,18,5,15,16,0,3,88,3,11,0,2,38,0,15,55,
205 11,0,12,2,12,25,29,0,4,4,22,51,15,53,18,0,
206 0,2,10,29,0,37,5,14,3,0,7,13,0,34,71,7,
207 1,47,13,10,14,10,6,0,13,0,3,2,2,7,7,0,
208 8,22,39,0,35,29,17,15,54,18,33,2,14,24,102,4,
209 0,1,0,37,33,2,3,0,3,8,6,22,20,30,0,8,
210 12,2,27,7,4,1,2,17,2,1,79,19,1,5,36,26,
211 77,96,18,51,8,15,0,64,16,15,1,4,0,3,8,2,
212 6,4,12,1,5,33,1,5,0,13,2,83,71,41,1,7,
213 2,17,2,184,0,26,5,25,102,4,0,3,17,10,17,0,
214 5,1,16,47,4,2,105,0,4,5,3,12,14,0,4,37,
215 0,0,1,20,8,26,1,3,20,75,4,0,18,0,0,11,
216 2,0,0,0,1,0,50,4,31,3,0,0,32,1,0,22,
217 5,22,3,23,38,2,0,0,0,0,68,14,4,0,32,21,
218 7,91,8,7,0,40,13,8,19,14,1,47,6,62,3,36,
219 23,7,16,8,2,26,49,14,18,13,0,2,9,24,92,14,
220 37,18,28,30,1,1,0,36,2,7,3,15,11,55,0,6,
221 2,32,2,28,7,3,10,4,9,0,0,12,16,19,51,21,
222 1,1,7,10,8,3,11,2,8,21,2,3,33,23,10,97,
223 13,57,19,0,6,0,13,3,0,15,0,14,58,15,17,2,
224 5,2,0,38,11,0,0,15,5,0,2,21,6,0,3,0,
225 29,5,1,4,37,3,87,26,38,2,0,6,3,11,0,9,
226 0,10,6,6,4,20,7,27,18,23,25,9,19,6,5,5,
227 9,4,7,19,6,9,11,0,0,8,52,42,13,15,0,45,
228 2,105,13,7,18,17,46,0,1,7,14,10,44,23,17,28,
229 0,4,19,5,3,11,32,0,136,0,28,10,2,29,4,2,
230 41,4,9,19,0,11,3,3,0,40,13,4,0,3,3,49,
231 74,54,12,4,0,39,3,53,0,5,10,43,5,8,120,4,
232 4,13,2,5,83,13,28,2,25,5,6,66,3,1,4,52,
233 2,21,1,0,24,17,37,22,0,8,11,0,15,3,21,9,
234 0,29,5,69,22,87,4,12,3,27,5,30,3,7,3,25,
235 4,45,8,61,29,43,28,5,3,12,5,0,28,0,84,19,
236 0,100,28,53,8,56,8,4,2,62,0,30,16,8,5,8,
237 9,50,8,27,7,0,0,0,0,80,0,13,7,94,34,0,
238 42,6,79,0,0,11,11,25,2,3,10,2,23,30,1,12,
239 10,10,7,110,0,1,0,1,7,8,0,0,10,4,36,37,
240 1,32,9,34,2,26,5,11,32,7,0,8,4,0,37,1,
241 24,8,17,54,25,11,3,0,4,18,1,12,2,35,14,1,
242 11,28,3,5,0,13,32,5,0,14,2,11,7,5,51,4,
243 7,10,5,0,17,38,4,0,0,59,3,12,8,17,0,29,
244 24,148,0,34,39,15,48,25,29,16,33,0,22,4,8,38,
245 1,14,8,181,7,14,24,12,7,5,9,25,23,12,0,3,
246 0,9,0,2,2,25,0,37,52,61,5,6,44,15,4,4,
247 5,4,0,43,22,0,2,5,8,9,7,3,7,21,39,0,
248 109,4,22,88,17,29,92,70,5,25,10,38,28,21,52,14,
249 14,5,0,1,0,1,7,28,11,11,45,176,19,9,6,15,
250 65,1,65,5,97,109,1,19,0,1,52,157,4,39,16,0,
251 29,6,2,3,6,7,14,0,41,119,20,25,3,1,5,0,
252 41,36,6,47,0,81,5,3,42,79,7,6,0,7,16,3,
253 8,49,3,3,52,7,1,59,102,0,125,0,33,0,6,58,
254 20,22,12,30,99,19,63,2,2,42,3,26,0,4,3,36,
255 0,1,57,37,22,0,87,9,58,9,7,5,16,0,4,2,
256 61,4,4,3,9,0,3,21,2,93,88,0,0,2,1,7,
257 10,5,14,16,42,5,2,8,9,5,11,5,5,0,0,86,
258 0,0,14,0,2,3,44,70,2,60,80,1,32,61,13,5,
259 11,128,25,12,32,44,31,6,0,3,5,0,17,3,121,15,
260 45,20,2,4,62,27,18,4,8,58,98,14,0,28,60,43,
261 46,27,20,69,119,24,4,5,4,111,12,140,8,10,29,11,
262 0,50,23,18,53,1,13,0,1,0,1,2,30,10,17,3,
263 74,0,57,28,1,17,41,20,0,10,4,0,0,7,0,0,
264 25,86,18,12,80,62,27,0,72,4,74,0,2,5,42,0,
265 7,0,11,2,42,32,0,1,6,31,19,0,0,2,7,1,
266 6,16,17,29,15,4,53,0,12,30,12,14,7,4,59,16,
267 0,49,54,0,43,11,19,9,127,3,5,0,134,7,19,3,
268 3,0,0,25,5,6,3,38,10,2,97,0,11,4,1,24,
269 6,23,93,29,3,36,9,0,0,4,1,12,0,0,18,18,
270 0,1,89,3,2,3,2,37,0,5,28,5,1,21,9,22,
271 5,155,4,36,39,12,10,12,16,16,182,13,4,4,40,9,
272 3,0,28,44,5,2,58,15,13,7,26,12,48,0,30,8,
273 2,39,11,30,11,5,15,22,30,0,15,0,85,4,130,0,
274 14,25,15,3,3,10,2,2,17,0,19,0,4,0,156,51,
275 0,19,9,140,102,4,50,11,5,3,4,2,24,24,10,5,
276 33,4,0,29,0,37,6,5,22,0,25,31,102,22,11,6,
277 38,17,36,8,2,1,99,8,56,71,68,23,3,12,3,0,
278 0,0,22,123,83,5,28,25,3,20,0,8,16,4,1,18,
279 0,1,2,0,9,39,25,61,198,13,58,3,11,1,3,11,
280 7,5,6,7,19,102,1,14,16,24,68,35,13,6,7,97,
281 65,9,17,8,0,29,0,11,14,29,0,2,2,27,55,28,
282 9,15,8,1,10,15,4,3,17,1,0,6,67,0,14,4,
283 90,0,8,88,26,6,55,32,8,4,1,17,3,9,5,3,
284 17,211,59,13,20,60,37,0,0,5,10,39,44,6,12,47,
285 32,14,1,105,1,3,13,27,8,3,10,98,152,3,4,9,
286 45,17,9,4,3,18,65,0,82,73,1,10,4,8,9,0,
287 3,1,20,14,0,93,9,3,0,15,2,13,0,33,11,13,
288 2,30,39,47,8,1,32,100,39,17,3,10,61,19,0,2,
289 7,0,101,5,3,2,0,4,0,6,8,52,9,2,2,38,
290 17,0,0,97,108,32,0,1,28,38,18,10,18,10,26,178,
291 29,173,16,0,9,15,84,69,17,21,7,21,20,28,77,16,
292 3,0,1,14,77,49,1,1,2,9,9,7,16,39,7,1,
293 2,4,10,16,6,0,1,12,19,0,0,60,74,32,9,6,
294 56,6,1,6,10,1,10,1,1,27,52,0,28,46,25,164,
295 3,3,0,5,1,11,3,29,11,15,16,27,7,28,0,4,
296 4,27,7,3,19,2,2,2,3,1,51,11,14,5,20,125,
297 2,8,2,8,47,0,56,54,21,154,10,4,7,3,21,0,
298 65,1,6,35,1,16,12,45,32,60,7,3,16,109,1,0,
299 8,0,8,0,1,5,12,20,0,82,3,81,48,8,30,0,
300 8,3,1,12,0,45,3,22,2,1,4,0,85,2,11,7,
301 94,0,32,14,12,18,5,0,121,2,5,2,3,199,20,30,
302 51,42,23,8,35,13,1,15,0,6,2,5,17,9,1,49,
303 0,1,49,40,26,45,5,21,45,19,8,9,0,146,3,14,
304 1,4,2,52,6,10,0,0,0,16,0,0,12,6,2,3,
305 13,97,25,1,1,58,86,22,12,0,7,2,20,0,18,1,
306 3,1,22,6,45,3,72,77,44,4,1,6,2,24,2,1,
307 30,43,3,5,5,8,11,1,8,48,6,36,15,18,105,96,
308 59,12,2,2,5,1,12,1,19,0,70,0,17,0,24,1,
309 2,6,117,13,29,1,23,7,61,26,6,0,109,0,5,47,
310 13,92,61,22,0,30,4,9,2,4,172,41,0,3,50,5,
311 23,38,22,2,85,15,6,4,2,25,0,8,8,10,10,1,
312 26,0,1,21,18,86,21,15,9,46,84,4,43,29,24,16,
313 156,6,3,1,2,13,1,8,2,10,61,5,6,10,0,92,
314 12,25,48,27,13,51,30,54,57,0,10,11,7,51,2,119,
315 0,2,47,8,29,29,21,3,29,0,25,2,101,4,21,4,
316 30,14,14,36,2,6,1,1,0,29,0,31,0,12,4,26,
317 2,3,41,0,15,1,44,3,2,7,115,24,12,5,2,51,
318 7,1,4,2,7,104,29,21,6,5,14,5,0,42,0,37,
319 3,101,11,2,30,5,8,34,6,69,0,5,16,16,13,3,
320 34,0,1,55,2,46,10,18,32,3,2,3,0,5,7,1,
321 6,41,0,6,81,36,1,7,4,3,11,5,47,2,43,0,
322 0,1,9,4,14,34,16,12,27,2,107,0,4,60,154,14,
323 55,0,1,0,4,55,3,56,40,41,0,47,26,121,3,0,
324 67,33,5,2,1,44,91,29,5,69,5,4,61,2,10,3,
325 6,2,2,13,9,24,0,15,1,4,0,36,61,3,19,35,
326 34,4,0,1,91,0,80,6,3,0,7,3,6,4,16,1,
327 27,83,1,0,4,22,12,0,0,0,4,4,15,5,73,0,
328 6,8,5,1,3,25,71,97,37,9,13,110,13,70,10,8,
329 4,34,3,1,3,55,23,140,0,3,0,3,1,0,10,5,
330 17,3,42,15,9,0,27,8,59,13,11,15,75,13,2,25,
331 19,26,46,0,23,4,1,0,109,9,2,21,19,37,1,0,
332 58,28,75,12,32,15,0,97,0,1,17,3,1,28,12,7,
333 39,28,34,25,33,22,3,44,32,13,7,0,15,2,178,4,
334 6,13,0,44,1,0,22,0,0,52,15,3,94,12,12,34,
335 34,24,105,7,0,1,5,11,88,48,65,21,46,105,5,28,
336 0,34,22,36,2,82,0,7,117,1,29,27,17,24,2,0,
337 153,33,16,9,2,0,11,5,5,3,76,33,20,2,12,16,
338 2,30,109,6,6,11,84,49,5,2,23,0,18,174,18,22,
339 80,3,44,9,26,6,124,38,50,68,17,9,23,50,5,114,
340 1,0,0,0,19,14,41,26,13,2,2,1,44,2,9,76,
341 10,13,36,1,5,0,1,34,20,5,5,5,2,34,1,76,
342 7,48,3,4,6,1,197,0,33,12,0,1,10,61,92,13,
343 4,1,24,25,4,10,3,4,4,26,1,9,7,24,5,24,
344 1,46,7,10,65,16,31,1,6,66,6,9,9,14,0,28,
345 62,7,33,2,18,25,3,0,7,14,52,110,18,116,7,145,
346 4,15,17,69,1,5,0,22,131,6,57,20,39,3,5,0,
347 2,58,8,114,1,8,16,19,2,7,3,12,1,28,9,33,
348 5,29,1,30,8,2,19,21,78,103,17,2,99,71,36,16,
349 9,18,16,62,0,16,9,7,68,1,22,0,2,12,24,0,
350 19,15,110,0,20,12,16,110,60,4,147,1,5,56,17,7,
351 0,3,19,15,7,0,0,41,0,0,6,5,21,26,16,0,
352 5,11,44,38,0,1,6,40,23,93,4,63,2,9,56,5,
353 6,32,9,6,7,23,8,9,9,73,0,5,37,27,120,1,
354 57,41,176,0,1,6,57,36,9,93,89,0,1,5,6,78,
355 124,34,12,0,5,7,8,15,1,46,0,15,18,103,0,41,
356 5,24,4,29,4,55,1,155,8,38,53,17,2,52,0,236,
357 2,7,13,17,13,0,28,6,40,33,200,3,22,13,5,0,
358 0,15,13,1,71,82,1,111,24,34,28,0,25,15,6,33,
359 0,16,29,141,1,2,6,0,1,99,6,3,1,38,0,37,
360 0,31,66,42,0,0,47,0,3,1,115,26,8,22,19,2,
361 2,13,27,11,35,14,31,7,18,15,6,12,0,38,5,18,
362 195,15,12,0,7,42,26,10,38,30,33,13,63,48,10,8,
363 3,4,9,3,2,40,17,0,7,4,38,7,7,46,9,37,
364 41,2,4,5,6,0,5,5,17,2,78,7,4,36,36,0,
365 42,23,5,12,21,0,8,229,34,52,29,0,11,0,1,6,
366 23,165,11,9,0,20,6,3,24,14,15,21,48,95,24,39,
367 20,48,7,64,61,83,8,7,4,23,44,82,15,9,12,4,
368 7,16,7,15,0,2,7,49,10,18,2,24,58,0,79,166,
369 35,13,8,0,69,4,40,24,72,20,30,12,17,1,4,9,
370 9,75,7,21,8,86,7,0,0,138,0,54,13,44,151,42,
371 85,82,67,34,0,2,9,50,39,107,7,192,2,5,8,2,
372 52,1,10,7,6,69,12,34,15,0,11,6,45,11,8,29,
373 20,19,190,12,8,137,3,14,3,50,9,7,19,17,4,17,
374 26,34,0,7,7,21,1,4,85,185,5,62,2,0,62,63,
375 117,0,44,178,2,18,2,3,31,32,1,80,172,34,1,6,
376 1,4,12,1,42,5,40,5,8,2,4,47,4,0,0,38,
377 5,27,25,6,80,22,61,82,1,60,9,20,0,5,35,7,
378 1,0,6,9,3,0,41,21,21,0,24,20,45,0,1,0,
379 26,11,1,9,13,0,14,41,19,9,0,30,74,0,16,0,
380 16,47,5,2,97,38,5,0,46,18,2,6,10,51,0,2,
381 0,37,1,4,5,20,4,2,14,141,1,47,68,1,8,16,
382 4,27,7,38,8,0,20,0,5,45,53,1,1,4,15,1,
383 0,0,3,0,70,25,39,48,27,0,2,3,9,4,2,5,
384 3,0,10,10,8,2,6,89,4,1,87,3,99,41,33,34,
385 26,4,123,6,2,5,3,20,79,1,0,155,10,2,71,1,
386 15,9,20,33,6,2,18,0,88,0,2,3,38,21,5,36,
387 56,1,35,7,0,18,0,0,7,12,3,2,20,5,117,32,
388 11,6,33,17,49,112,9,67,147,24,31,14,2,0,184,56,
389 4,100,1,0,77,9,11,212,5,25,146,43,66,9,0,94,
390 1,5,16,16,14,11,66,7,85,1,4,5,47,11,84,0,
391 32,10,14,6,50,11,1,9,12,66,41,137,3,26,13,8,
392 28,31,7,9,59,5,13,2,116,8,19,18,4,21,6,14,
393 51,5,57,6,2,0,0,1,46,12,19,5,80,13,35,0,
394 18,156,38,33,18,1,146,11,0,10,12,1,3,1,63,6,
395 48,24,3,22,53,21,64,33,85,89,0,6,24,3,27,13,
396 9,1,32,35,30,15,1,2,47,13,4,63,33,0,1,0,
397 48,0,12,32,30,39,0,25,17,4,27,53,11,2,19,0,
398 3,7,45,43,4,16,37,37,62,59,5,1,0,83,7,37,
399 8,3,7,30,31,8,0,0,2,5,42,39,13,1,2,19,
400 15,11,0,18,20,4,1,0,0,45,5,3,0,4,1,11,
401 9,13,167,1,11,2,17,72,42,46,0,20,54,11,86,4,
402 21,5,2,4,3,0,142,4,7,81,0,55,19,61,19,158,
403 8,37,25,95,9,1,28,1,1,88,2,44,0,39,21,24,
404 31,4,37,17,121,107,2,7,11,2,13,52,127,2,12,51,
405 6,1,1,115,0,7,0,25,123,25,46,46,2,2,0,8,
406 0,18,12,34,1,3,19,1,11,33,82,15,99,0,9,77,
407 26,0,80,10,16,15,9,0,26,75,55,33,26,23,158,0,
408 37,74,50,61,10,0,17,81,4,6,19,2,23,16,2,30,
409 11,1,39,137,9,0,11,6,55,1,27,56,15,42,6,37,
410 9,35,17,68,20,0,1,2,31,93,24,38,64,1,4,11,
411 3,3,2,3,25,0,17,80,13,13,0,75,4,30,7,14,
412 2,0,0,5,85,34,6,26,25,46,38,3,0,6,7,128,
413 103,23,33,22,45,32,27,0,26,2,47,80,13,115,3,0,
414 2,0,70,181,1,227,0,31,4,19,234,3,0,76,7,9,
415 0,10,1,10,16,0,0,86,13,74,109,1,0,26,19,9,
416 1,46,0,89,1,143,57,37,7,0,43,127,55,89,13,5,
417 1,3,27,26,15,6,26,90,61,3,0,16,0,7,14,34,
418 22,0,19,2,111,80,44,52,2,10,127,6,44,15,24,11,
419 2,4,0,77,13,8,21,2,35,9,2,29,66,45,24,1,
420 0,7,10,2,2,2,16,46,174,14,101,3,1,6,88,0,
421 100,50,48,51,10,5,48,0,18,88,28,0,69,26,1,10,
422 10,20,10,1,2,36,13,142,91,3,21,186,0,12,11,3,
423 4,71,3,18,8,48,38,94,1,16,2,2,8,6,23,147,
424 0,157,2,52,3,156,0,68,34,0,2,20,83,29,42,4,
425 14,0,64,0,3,1,6,4,185,33,12,28,67,0,2,6,
426 45,10,0,2,20,86,40,10,61,9,5,48,3,18,0,1,
427 1,7,37,4,0,1,0,16,165,8,1,92,2,70,1,0,
428 74,7,2,12,75,31,0,3,3,27,0,1,40,0,10,4,
429 179,137,92,26,76,43,0,6,0,9,129,7,40,2,82,29,
430 8,31,146,3,44,90,3,12,1,73,10,6,35,95,16,10,
431 0,91,0,81,0,6,3,113,140,46,23,34,7,5,1,8,
432 3,31,20,139,64,9,2,50,50,16,0,0,11,5,37,31,
433 2,4,15,4,6,32,7,6,19,71,0,15,179,0,30,110,
434 8,2,0,33,7,29,35,1,0,37,3,3,102,1,1,37,
435 125,0,1,17,2,14,1,133,68,18,1,67,93,87,28,45,
436 23,9,20,58,16,31,59,4,17,71,0,18,2,1,58,81,
437 1,7,6,18,7,0,72,52,49,1,17,89,0,83,9,253,
438 92,1,2,66,5,100,8,73,3,3,0,22,24,34,19,24,
439 32,15,92,9,91,50,0,31,11,31,24,0,9,3,121,22,
440 22,24,44,124,14,35,73,5,0,66,72,8,14,42,28,8,
441 17,102,35,65,1,1,14,123,20,1,73,1,3,35,72,12,
442 15,2,7,138,1,62,79,20,3,26,0,3,5,1,185,3,
443 9,3,10,19,0,4,1,52,22,19,60,16,11,7,19,14,
444 29,101,16,80,159,1,0,65,1,6,112,108,4,11,171,33,
445 28,2,12,9,23,10,4,7,10,125,187,6,8,0,0,73,
446 42,6,77,91,5,64,113,3,0,12,31,6,50,27,23,131,
447 0,0,6,76,4,5,35,20,54,44,6,3,9,0,0,99,
448 0,20,38,106,88,16,4,0,8,12,4,18,234,1,113,0,
449 45,62,75,32,13,0,146,3,8,2,6,16,0,3,1,54,
450 99,97,3,18,35,7,18,101,1,31,16,210,22,150,9,27,
451 3,3,11,7,13,2,1,0,3,14,50,6,6,6,6,3,
452 0,13,0,0,8,1,36,11,12,187,15,7,17,3,18,63,
453 4,1,15,59,54,0,111,12,11,133,32,53,79,2,68,29,
454 0,0,86,0,41,3,24,4,12,35,206,11,18,2,0,7,
455 91,65,22,34,0,0,39,0,13,29,114,123,122,15,5,26,
456 0,0,42,68,7,15,1,0,3,0,0,8,45,17,1,89,
457 95,30,2,32,1,5,71,16,3,13,16,8,62,1,2,54,
458 42,14,150,39,8,39,18,64,88,0,106,98,71,13,19,13,
459 18,4,1,103,17,1,0,26,10,21,8,27,44,165,7,18,
460 0,0,85,0,211,19,0,11,0,13,0,1,0,85,16,6,
461 7,4,2,0,1,109,120,132,0,11,29,97,0,14,68,93,
462 3,11,2,16,117,22,3,145,10,18,50,33,37,10,1,19,
463 71,106,4,8,13,90,4,82,13,60,59,8,14,32,35,8,
464 4,61,0,70,14,9,21,6,200,7,75,36,20,48,1,18,
465 13,2,38,1,0,94,11,0,1,102,28,20,22,25,13,2,
466 44,69,219,56,4,5,4,8,52,49,29,37,9,36,43,56,
467 9,26,63,253,156,0,159,101,4,32,150,8,1,24,91,8,
468 13,0,62,0,0,0,209,99,36,31,24,71,119,71,0,16,
469 37,10,29,1,217,1,9,1,20,3,2,7,85,5,6,5,
470 4,4,85,49,126,2,100,7,5,229,10,58,99,54,14,33,
471 11,12,41,15,45,19,5,5,0,105,69,5,10,4,61,34,
472 0,8,3,182,9,0,61,41,0,9,0,5,13,38,46,0,
473 22,6,0,1,9,106,36,0,1,0,56,98,5,138,1,4,
474 70,0,5,17,34,25,42,14,58,0,0,0,7,14,0,19,
475 7,0,4,80,43,3,1,9,66,13,3,13,87,22,126,14,
476 1,217,9,2,91,2,54,58,3,0,34,29,1,6,31,24,
477 60,33,73,3,80,14,1,82,23,0,44,205,32,28,0,64,
478 50,154,16,18,69,0,8,2,2,37,53,70,6,7,19,25,
479 7,65,57,97,34,213,0,2,1,0,17,70,8,3,147,8,
480 2,35,7,122,0,81,32,0,0,13,28,253,171,50,51,110,
481 21,26,9,0,0,0,5,29,3,10,134,0,177,248,195,0,
482 3,75,8,85,0,12,66,110,0,37,12,0,157,46,4,3,
483 60,0,32,14,1,33,0,0,85,39,12,8,10,0,38,56,
484 3,7,27,35,2,15,42,49,11,26,0,113,6,9,0,23,
485 2,15,10,53,12,2,68,0,11,82,27,24,67,70,12,6,
486 127,21,3,0,0,0,54,2,27,66,1,137,0,2,9,54,
487 90,1,9,10,3,1,15,8,0,8,82,107,15,7,0,0,
488 0,3,131,2,6,24,34,70,41,12,8,62,138,5,39,114,
489 5,234,115,26,18,166,5,21,0,133,44,23,13,188,5,5,
490 0,17,1,7,13,13,2,17,30,84,26,46,155,26,0,37,
491 55,1,0,0,111,0,2,10,0,16,2,6,56,15,120,50,
492 187,0,16,1,131,72,0,29,21,179,34,15,3,2,11,20,
493 218,19,0,66,8,6,54,133,0,0,11,151,1,3,1,2,
494 9,12,41,64,5,241,7,73,10,20,11,6,58,2,28,237,
495 20,1,5,9,30,11,41,75,39,23,20,0,1,35,50,4,
496 4,13,44,23,4,5,63,9,22,14,3,0,99,7,0,31,
497 20,3,26,7,52,98,198,20,28,2,4,0,0,13,2,1,
498 2,16,9,10,6,0,21,12,174,3,81,24,171,9,42,0,
499 44,2,5,9,52,8,16,73,16,28,12,5,0,24,35,1,
500 48,172,6,0,43,121,79,31,43,51,1,10,58,63,29,6,
501 18,62,11,1,53,10,71,61,161,42,4,36,154,82,56,8,
502 5,2,32,35,100,13,10,159,8,104,10,0,7,12,11,77,
503 2,88,1,53,70,0,79,8,80,109,139,0,38,131,10,4,
504 7,2,23,61,1,0,18,51,9,5,18,172,5,110,4,10,
505 14,12,0,1,30,9,79,218,48,51,35,75,0,93,1,40,
506 79,72,124,6,0,0,11,19,43,1,5,94,1,26,191,3,
507 31,9,0,3,0,7,20,15,1,54,6,0,34,6,52,43,
508 27,5,147,1,0,30,162,50,14,35,0,39,2,37,139,25,
509 50,162,20,12,25,14,4,3,63,4,0,20,0,11,44,1,
510 1,20,5,4,0,68,49,0,145,6,36,0,29,3,42,115,
511 0,15,3,2,2,60,0,53,1,0,105,6,0,63,49,11,
512 7,5,10,56,1,11,8,5,4,9,92,1,31,197,51,2,
513 0,2,3,33,21,2,0,16,4,6,11,6,26,12,12,77,
514 16,5,24,10,114,3,10,70,4,19,17,0,3,0,4,81,
515 62,5,3,40,51,117,2,1,44,116,3,2,0,97,30,5,
516 4,0,13,1,3,12,21,20,102,1,54,1,5,126,15,12,
517 18,34,234,179,166,0,1,25,0,70,7,32,187,20,3,0,
518 57,9,65,1,78,10,82,31,0,3,96,2,15,13,19,0,
519 10,7,1,6,86,91,1,93,23,1,114,0,245,90,4,180,
520 14,39,16,3,68,1,5,74,1,7,136,20,5,14,4,31,
521 54,0,33,32,7,16,4,5,25,50,0,7,128,23,0,160,
522 29,46,112,0,5,19,104,41,70,6,7,237,0,9,18,13,
523 43,250,34,111,12,89,9,140,34,24,26,25,58,17,0,128,
524 20,36,83,44,34,250,0,61,0,0,110,13,107,177,14,0,
525 66,77,1,39,9,2,28,21,0,8,77,86,93,6,23,156,
526 34,15,11,18,7,37,4,14,96,10,23,0,95,80,3,61,
527 7,10,39,18,49,67,3,105,18,5,132,61,7,41,1,2,
528 38,40,3,92,4,0,90,9,0,87,34,22,2,5,130,248,
529 3,0,178,0,94,15,71,29,26,6,1,0,0,22,93,97,
530 86,63,6,13,20,10,1,52,5,93,3,57,40,2,0,1,
531 6,20,7,8,38,0,0,3,7,15,12,3,5,8,25,48,
532 14,89,76,77,72,0,71,20,20,3,0,0,42,42,11,18,
533 1,40,18,9,80,3,136,20,35,2,19,30,171,159,4,2,
534 94,18,0,1,33,91,44,5,0,10,0,3,37,9,115,15,
535 27,136,22,4,40,33,26,15,7,0,37,28,4,9,44,32,
536 17,35,5,1,25,21,10,1,20,31,0,5,11,1,26,183,
537 1,5,37,111,9,79,28,86,21,30,5,25,5,35,9,65,
538 6,0,97,45,2,117,8,44,7,11,225,5,70,99,157,0,
539 1,2,4,132,15,44,0,115,28,24,0,12,22,0,42,3,
540 25,89,40,244,33,82,26,156,49,58,52,0,47,2,117,24,
541 35,66,45,15,82,66,67,13,8,80,68,11,22,2,0,10,
542 1,47,30,1,203,68,19,76,157,34,110,33,21,135,6,51,
543 31,12,24,177,10,0,2,37,0,34,23,36,46,7,4,11,
544 5,5,17,21,226,7,33,7,22,149,52,0,78,59,5,52,
545 0,148,41,57,71,16,2,11,165,117,5,18,87,50,58,31,
546 2,1,12,49,2,0,1,42,2,94,0,7,72,94,4,130,
547 172,28,2,44,0,7,38,87,6,52,28,8,1,38,20,36,
548 0,13,184,40,0,59,147,0,20,80,7,165,16,1,18,36,
549 0,0,12,59,97,45,0,70,93,70,165,12,111,20,0,82,
550 36,0,202,23,35,49,149,4,1,1,128,15,1,49,100,11,
551 6,13,14,28,24,9,15,11,37,204,10,0,15,17,15,12,
552 39,0,17,16,80,97,84,4,16,70,58,121,75,148,67,5,
553 21,0,12,51,4,9,3,18,5,105,71,173,166,18,83,174,
554 5,11,208,19,123,0,29,0,4,0,88,23,109,61,66,97,
555 1,59,8,29,53,1,31,19,197,152,4,41,28,10,2,60,
556 112,2,5,58,9,193,45,80,10,57,9,36,104,131,1,212,
557 28,11,142,0,224,70,14,38,6,1,9,85,31,72,5,61,
558 8,77,9,8,7,38,0,21,0,63,53,0,8,4,9,3,
559 0,18,13,86,73,5,2,0,71,21,0,14,89,88,2,37,
560 41,19,25,1,69,28,18,132,2,4,3,29,0,82,26,8,
561 19,63,26,3,0,16,93,37,22,0,33,2,27,3,62,12,
562 };
563
564 /* The hash function */
565 __private_extern__ ub4 phash(key, len)
566 char *key;
567 int len;
568 {
569 ub4 rsl, val = lookup(key, len, 0x5384540f);
570 rsl = ((val>>17)^scramble[tab[val&0x1fff]]);
571 return rsl;
572 }
573