Commit | Line | Data |
8d063cd8 |
1 | case $CONFIG in |
2 | '') |
3 | if test ! -f config.sh; then |
4 | ln ../config.sh . || \ |
5 | ln ../../config.sh . || \ |
6 | ln ../../../config.sh . || \ |
7 | (echo "Can't find config.sh."; exit 1) |
8 | echo "Using config.sh from above..." |
9 | fi |
378cc40b |
10 | . ./config.sh |
8d063cd8 |
11 | ;; |
12 | esac |
13 | echo "Extracting config.h (with variable substitutions)" |
13281fa4 |
14 | sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#undef!' |
8d063cd8 |
15 | /* config.h |
16 | * This file was produced by running the config.h.SH script, which |
17 | * gets its values from config.sh, which is generally produced by |
18 | * running Configure. |
19 | * |
20 | * Feel free to modify any of this as the need arises. Note, however, |
21 | * that running config.h.SH again will wipe out any changes you've made. |
22 | * For a more permanent change edit config.sh and rerun config.h.SH. |
23 | */ |
24 | |
25 | |
26 | /* EUNICE: |
27 | * This symbol, if defined, indicates that the program is being compiled |
28 | * under the EUNICE package under VMS. The program will need to handle |
29 | * things like files that don't go away the first time you unlink them, |
30 | * due to version numbering. It will also need to compensate for lack |
31 | * of a respectable link() command. |
32 | */ |
33 | /* VMS: |
34 | * This symbol, if defined, indicates that the program is running under |
35 | * VMS. It is currently only set in conjunction with the EUNICE symbol. |
36 | */ |
37 | #$d_eunice EUNICE /**/ |
38 | #$d_eunice VMS /**/ |
39 | |
a687059c |
40 | /* BIN: |
41 | * This symbol holds the name of the directory in which the user wants |
42 | * to put publicly executable images for the package in question. It |
43 | * is most often a local directory such as /usr/local/bin. |
44 | */ |
45 | #define BIN "$bin" /**/ |
46 | |
47 | /* BYTEORDER: |
48 | * This symbol contains an encoding of the order of bytes in a long. |
49 | * Usual values (in octal) are 01234, 04321, 02143, 03412... |
50 | */ |
51 | #define BYTEORDER 0$byteorder /**/ |
52 | |
378cc40b |
53 | /* CPPSTDIN: |
36ce8bec |
54 | * This symbol contains the first part of the string which will invoke |
55 | * the C preprocessor on the standard input and produce to standard |
56 | * output. Typical value of "cc -E" or "/lib/cpp". |
57 | */ |
58 | /* CPPMINUS: |
59 | * This symbol contains the second part of the string which will invoke |
60 | * the C preprocessor on the standard input and produce to standard |
378cc40b |
61 | * output. This symbol will have the value "-" if CPPSTDIN needs a minus |
36ce8bec |
62 | * to specify standard input, otherwise the value is "". |
63 | */ |
378cc40b |
64 | #define CPPSTDIN "$cppstdin" |
36ce8bec |
65 | #define CPPMINUS "$cppminus" |
66 | |
a687059c |
67 | /* BCMP: |
68 | * This symbol, if defined, indicates that the bcmp routine is available |
69 | * to compare blocks of memory. If undefined, use memcmp. If that's |
70 | * not available, roll your own. |
71 | */ |
72 | #$d_bcmp BCMP /**/ |
73 | |
c51b80d1 |
74 | /* BCOPY: |
75 | * This symbol, if defined, indicates that the bcopy routine is available |
76 | * to copy blocks of memory. Otherwise you should probably use memcpy(). |
77 | */ |
78 | #$d_bcopy BCOPY /**/ |
79 | |
8d063cd8 |
80 | /* CHARSPRINTF: |
81 | * This symbol is defined if this system declares "char *sprintf()" in |
82 | * stdio.h. The trend seems to be to declare it as "int sprintf()". It |
83 | * is up to the package author to declare sprintf correctly based on the |
84 | * symbol. |
85 | */ |
86 | #$d_charsprf CHARSPRINTF /**/ |
87 | |
2e1b3b7e |
88 | /* CRYPT: |
89 | * This symbol, if defined, indicates that the crypt routine is available |
90 | * to encrypt passwords and the like. |
91 | */ |
92 | #$d_crypt CRYPT /**/ |
93 | |
bf38876a |
94 | /* CSH: |
95 | * This symbol, if defined, indicates that the C-shell exists. |
96 | * If defined, contains the full pathname of csh. |
97 | */ |
98 | #$d_csh CSH "$csh" /**/ |
99 | |
13281fa4 |
100 | /* DOSUID: |
101 | * This symbol, if defined, indicates that the C program should |
102 | * check the script that it is executing for setuid/setgid bits, and |
103 | * attempt to emulate setuid/setgid on systems that have disabled |
104 | * setuid #! scripts because the kernel can't do it securely. |
105 | * It is up to the package designer to make sure that this emulation |
106 | * is done securely. Among other things, it should do an fstat on |
107 | * the script it just opened to make sure it really is a setuid/setgid |
108 | * script, it should make sure the arguments passed correspond exactly |
109 | * to the argument on the #! line, and it should not trust any |
110 | * subprocesses to which it must pass the filename rather than the |
111 | * file descriptor of the script to be executed. |
112 | */ |
113 | #$d_dosuid DOSUID /**/ |
114 | |
a687059c |
115 | /* DUP2: |
116 | * This symbol, if defined, indicates that the dup2 routine is available |
117 | * to dup file descriptors. Otherwise you should use dup(). |
118 | */ |
119 | #$d_dup2 DUP2 /**/ |
120 | |
378cc40b |
121 | /* FCHMOD: |
122 | * This symbol, if defined, indicates that the fchmod routine is available |
123 | * to change mode of opened files. If unavailable, use chmod(). |
124 | */ |
125 | #$d_fchmod FCHMOD /**/ |
126 | |
127 | /* FCHOWN: |
128 | * This symbol, if defined, indicates that the fchown routine is available |
129 | * to change ownership of opened files. If unavailable, use chown(). |
130 | */ |
131 | #$d_fchown FCHOWN /**/ |
132 | |
a687059c |
133 | /* FCNTL: |
134 | * This symbol, if defined, indicates to the C program that it should |
135 | * include fcntl.h. |
136 | */ |
137 | #$d_fcntl FCNTL /**/ |
138 | |
139 | /* FLOCK: |
140 | * This symbol, if defined, indicates that the flock() routine is |
141 | * available to do file locking. |
142 | */ |
143 | #$d_flock FLOCK /**/ |
144 | |
378cc40b |
145 | /* GETGROUPS: |
146 | * This symbol, if defined, indicates that the getgroups() routine is |
147 | * available to get the list of process groups. If unavailable, multiple |
148 | * groups are probably not supported. |
149 | */ |
150 | #$d_getgrps GETGROUPS /**/ |
151 | |
a687059c |
152 | /* GETHOSTENT: |
153 | * This symbol, if defined, indicates that the gethostent() routine is |
154 | * available to lookup host names in some data base or other. |
155 | */ |
156 | #$d_gethent GETHOSTENT /**/ |
157 | |
158 | /* GETPGRP: |
159 | * This symbol, if defined, indicates that the getpgrp() routine is |
160 | * available to get the current process group. |
161 | */ |
162 | #$d_getpgrp GETPGRP /**/ |
163 | |
164 | /* GETPRIORITY: |
165 | * This symbol, if defined, indicates that the getpriority() routine is |
166 | * available to get a process's priority. |
167 | */ |
168 | #$d_getprior GETPRIORITY /**/ |
169 | |
170 | /* HTONS: |
171 | * This symbol, if defined, indicates that the htons routine (and friends) |
172 | * are available to do network order byte swapping. |
173 | */ |
174 | /* HTONL: |
175 | * This symbol, if defined, indicates that the htonl routine (and friends) |
176 | * are available to do network order byte swapping. |
177 | */ |
178 | /* NTOHS: |
179 | * This symbol, if defined, indicates that the ntohs routine (and friends) |
180 | * are available to do network order byte swapping. |
181 | */ |
182 | /* NTOHL: |
183 | * This symbol, if defined, indicates that the ntohl routine (and friends) |
184 | * are available to do network order byte swapping. |
185 | */ |
186 | #$d_htonl HTONS /**/ |
187 | #$d_htonl HTONL /**/ |
188 | #$d_htonl NTOHS /**/ |
189 | #$d_htonl NTOHL /**/ |
190 | |
8d063cd8 |
191 | /* index: |
192 | * This preprocessor symbol is defined, along with rindex, if the system |
193 | * uses the strchr and strrchr routines instead. |
194 | */ |
195 | /* rindex: |
196 | * This preprocessor symbol is defined, along with index, if the system |
197 | * uses the strchr and strrchr routines instead. |
198 | */ |
199 | #$d_index index strchr /* cultural */ |
200 | #$d_index rindex strrchr /* differences? */ |
201 | |
a687059c |
202 | /* IOCTL: |
203 | * This symbol, if defined, indicates that sys/ioctl.h exists and should |
204 | * be included. |
205 | */ |
206 | #$d_ioctl IOCTL /**/ |
207 | |
378cc40b |
208 | /* KILLPG: |
209 | * This symbol, if defined, indicates that the killpg routine is available |
210 | * to kill process groups. If unavailable, you probably should use kill |
211 | * with a negative process number. |
212 | */ |
213 | #$d_killpg KILLPG /**/ |
214 | |
a687059c |
215 | /* MEMCMP: |
216 | * This symbol, if defined, indicates that the memcmp routine is available |
217 | * to compare blocks of memory. If undefined, roll your own. |
218 | */ |
219 | #$d_memcmp MEMCMP /**/ |
220 | |
378cc40b |
221 | /* MEMCPY: |
222 | * This symbol, if defined, indicates that the memcpy routine is available |
223 | * to copy blocks of memory. Otherwise you should probably use bcopy(). |
224 | * If neither is defined, roll your own. |
225 | */ |
226 | #$d_memcpy MEMCPY /**/ |
227 | |
a687059c |
228 | /* MKDIR: |
229 | * This symbol, if defined, indicates that the mkdir routine is available |
230 | * to create directories. Otherwise you should fork off a new process to |
231 | * exec /bin/mkdir. |
232 | */ |
233 | #$d_mkdir MKDIR /**/ |
234 | |
235 | /* NDBM: |
236 | * This symbol, if defined, indicates that ndbm.h exists and should |
237 | * be included. |
238 | */ |
239 | #$d_ndbm NDBM /**/ |
240 | |
241 | /* ODBM: |
242 | * This symbol, if defined, indicates that dbm.h exists and should |
243 | * be included. |
244 | */ |
245 | #$d_odbm ODBM /**/ |
246 | |
247 | /* READDIR: |
248 | * This symbol, if defined, indicates that the readdir routine is available |
249 | * from the C library to create directories. |
250 | */ |
251 | #$d_readdir READDIR /**/ |
252 | |
378cc40b |
253 | /* RENAME: |
254 | * This symbol, if defined, indicates that the rename routine is available |
255 | * to rename files. Otherwise you should do the unlink(), link(), unlink() |
256 | * trick. |
257 | */ |
258 | #$d_rename RENAME /**/ |
259 | |
a687059c |
260 | /* RMDIR: |
261 | * This symbol, if defined, indicates that the rmdir routine is available |
262 | * to remove directories. Otherwise you should fork off a new process to |
263 | * exec /bin/rmdir. |
264 | */ |
265 | #$d_rmdir RMDIR /**/ |
266 | |
378cc40b |
267 | /* SETEGID: |
268 | * This symbol, if defined, indicates that the setegid routine is available |
269 | * to change the effective gid of the current program. |
270 | */ |
271 | #$d_setegid SETEGID /**/ |
272 | |
273 | /* SETEUID: |
274 | * This symbol, if defined, indicates that the seteuid routine is available |
275 | * to change the effective uid of the current program. |
276 | */ |
277 | #$d_seteuid SETEUID /**/ |
278 | |
a687059c |
279 | /* SETPGRP: |
280 | * This symbol, if defined, indicates that the setpgrp() routine is |
281 | * available to set the current process group. |
282 | */ |
283 | #$d_setpgrp SETPGRP /**/ |
284 | |
285 | /* SETPRIORITY: |
286 | * This symbol, if defined, indicates that the setpriority() routine is |
287 | * available to set a process's priority. |
288 | */ |
289 | #$d_setprior SETPRIORITY /**/ |
290 | |
291 | /* SETREGID: |
292 | * This symbol, if defined, indicates that the setregid routine is |
293 | * available to change the real and effective gid of the current program. |
294 | */ |
295 | /* SETRESGID: |
296 | * This symbol, if defined, indicates that the setresgid routine is |
297 | * available to change the real, effective and saved gid of the current |
298 | * program. |
299 | */ |
300 | #$d_setregid SETREGID /**/ |
301 | #$d_setresgid SETRESGID /**/ |
302 | |
303 | /* SETREUID: |
304 | * This symbol, if defined, indicates that the setreuid routine is |
305 | * available to change the real and effective uid of the current program. |
306 | */ |
307 | /* SETRESUID: |
308 | * This symbol, if defined, indicates that the setresuid routine is |
309 | * available to change the real, effective and saved uid of the current |
310 | * program. |
311 | */ |
312 | #$d_setreuid SETREUID /**/ |
313 | #$d_setresuid SETRESUID /**/ |
314 | |
378cc40b |
315 | /* SETRGID: |
316 | * This symbol, if defined, indicates that the setrgid routine is available |
317 | * to change the real gid of the current program. |
318 | */ |
319 | #$d_setrgid SETRGID /**/ |
320 | |
321 | /* SETRUID: |
322 | * This symbol, if defined, indicates that the setruid routine is available |
323 | * to change the real uid of the current program. |
324 | */ |
325 | #$d_setruid SETRUID /**/ |
326 | |
a687059c |
327 | /* SOCKET: |
328 | * This symbol, if defined, indicates that the BSD socket interface is |
329 | * supported. |
330 | */ |
331 | /* SOCKETPAIR: |
332 | * This symbol, if defined, indicates that the BSD socketpair call is |
333 | * supported. |
334 | */ |
335 | /* OLDSOCKET: |
336 | * This symbol, if defined, indicates that the 4.1c BSD socket interface |
337 | * is supported instead of the 4.2/4.3 BSD socket interface. |
338 | */ |
339 | #$d_socket SOCKET /**/ |
340 | |
341 | #$d_sockpair SOCKETPAIR /**/ |
342 | |
343 | #$d_oldsock OLDSOCKET /**/ |
344 | |
c51b80d1 |
345 | /* STATBLOCKS: |
346 | * This symbol is defined if this system has a stat structure declaring |
347 | * st_blksize and st_blocks. |
348 | */ |
349 | #$d_statblks STATBLOCKS /**/ |
350 | |
36ce8bec |
351 | /* STDSTDIO: |
352 | * This symbol is defined if this system has a FILE structure declaring |
353 | * _ptr and _cnt in stdio.h. |
354 | */ |
355 | #$d_stdstdio STDSTDIO /**/ |
356 | |
8d063cd8 |
357 | /* STRUCTCOPY: |
358 | * This symbol, if defined, indicates that this C compiler knows how |
359 | * to copy structures. If undefined, you'll need to use a block copy |
360 | * routine of some sort instead. |
361 | */ |
362 | #$d_strctcpy STRUCTCOPY /**/ |
363 | |
2e1b3b7e |
364 | /* SYMLINK: |
365 | * This symbol, if defined, indicates that the symlink routine is available |
366 | * to create symbolic links. |
367 | */ |
368 | #$d_symlink SYMLINK /**/ |
369 | |
a687059c |
370 | /* SYSCALL: |
371 | * This symbol, if defined, indicates that the syscall routine is available |
372 | * to call arbitrary system calls. If undefined, that's tough. |
373 | */ |
374 | #$d_syscall SYSCALL /**/ |
375 | |
c51b80d1 |
376 | /* TMINSYS: |
377 | * This symbol is defined if this system declares "struct tm" in |
378 | * in <sys/time.h> rather than <time.h>. We can't just say |
379 | * -I/usr/include/sys because some systems have both time files, and |
380 | * the -I trick gets the wrong one. |
381 | */ |
a687059c |
382 | /* I_SYSTIME: |
383 | * This symbol is defined if this system has the file <sys/time.h>. |
384 | */ |
bf38876a |
385 | /* I_TIMETOO: |
386 | * This symbol is defined if <sys/time.h> exists but doesn't include |
387 | * <time.h>. |
388 | */ |
c51b80d1 |
389 | #$d_tminsys TMINSYS /**/ |
a687059c |
390 | #$i_systime I_SYSTIME /**/ |
bf38876a |
391 | #$i_timetoo I_TIMETOO /**/ |
a687059c |
392 | |
393 | /* VARARGS: |
394 | * This symbol, if defined, indicates to the C program that it should |
395 | * include varargs.h. |
396 | */ |
397 | #$d_varargs VARARGS /**/ |
c51b80d1 |
398 | |
03a14243 |
399 | /* VFORK: |
400 | * This symbol, if defined, indicates that vfork() exists. |
8d063cd8 |
401 | */ |
03a14243 |
402 | #$d_vfork VFORK /**/ |
8d063cd8 |
403 | |
36ce8bec |
404 | /* VOIDSIG: |
405 | * This symbol is defined if this system declares "void (*signal())()" in |
406 | * signal.h. The old way was to declare it as "int (*signal())()". It |
407 | * is up to the package author to declare things correctly based on the |
408 | * symbol. |
409 | */ |
410 | #$d_voidsig VOIDSIG /**/ |
411 | |
a687059c |
412 | /* VPRINTF: |
413 | * This symbol, if defined, indicates that the vprintf routine is available |
414 | * to printf with a pointer to an argument list. If unavailable, you |
415 | * may need to write your own, probably in terms of _doprnt(). |
416 | */ |
417 | /* CHARVSPRINTF: |
418 | * This symbol is defined if this system has vsprintf() returning type |
419 | * (char*). The trend seems to be to declare it as "int vsprintf()". It |
420 | * is up to the package author to declare vsprintf correctly based on the |
421 | * symbol. |
422 | */ |
423 | #$d_vprintf VPRINTF /**/ |
424 | #$d_charvspr CHARVSPRINTF /**/ |
425 | |
bf38876a |
426 | /* WAIT4: |
427 | * This symbol, if defined, indicates that wait4() exists. |
428 | */ |
429 | #$d_wait4 WAIT4 /**/ |
430 | |
378cc40b |
431 | /* GIDTYPE: |
432 | * This symbol has a value like gid_t, int, ushort, or whatever type is |
433 | * used to declare group ids in the kernel. |
434 | */ |
435 | #define GIDTYPE $gidtype /**/ |
436 | |
a687059c |
437 | /* I_DIRENT: |
438 | * This symbol, if defined, indicates to the C program that it should |
439 | * include dirent.h. |
440 | */ |
441 | /* DIRNAMLEN: |
442 | * This symbol, if defined, indicates to the C program that the length |
443 | * of directory entry names is provided by a d_namlen field. Otherwise |
444 | * you need to do strlen() on the d_name field. |
445 | */ |
446 | #$i_dirent I_DIRENT /**/ |
447 | #$d_dirnamlen DIRNAMLEN /**/ |
448 | |
449 | /* I_FCNTL: |
450 | * This symbol, if defined, indicates to the C program that it should |
451 | * include fcntl.h. |
452 | */ |
453 | #$i_fcntl I_FCNTL /**/ |
454 | |
455 | /* I_GRP: |
456 | * This symbol, if defined, indicates to the C program that it should |
457 | * include grp.h. |
458 | */ |
459 | #$i_grp I_GRP /**/ |
460 | |
03a14243 |
461 | /* I_NETINET_IN: |
462 | * This symbol, if defined, indicates to the C program that it should |
463 | * include netinet/in.h. |
464 | */ |
465 | #$i_niin I_NETINET_IN /**/ |
466 | |
a687059c |
467 | /* I_PWD: |
468 | * This symbol, if defined, indicates to the C program that it should |
469 | * include pwd.h. |
470 | */ |
471 | /* PWQUOTA: |
472 | * This symbol, if defined, indicates to the C program that struct passwd |
473 | * contains pw_quota. |
474 | */ |
475 | /* PWAGE: |
476 | * This symbol, if defined, indicates to the C program that struct passwd |
477 | * contains pw_age. |
478 | */ |
03a14243 |
479 | /* PWCHANGE: |
480 | * This symbol, if defined, indicates to the C program that struct passwd |
481 | * contains pw_change. |
482 | */ |
483 | /* PWCLASS: |
484 | * This symbol, if defined, indicates to the C program that struct passwd |
485 | * contains pw_class. |
486 | */ |
487 | /* PWEXPIRE: |
488 | * This symbol, if defined, indicates to the C program that struct passwd |
489 | * contains pw_expire. |
490 | */ |
a687059c |
491 | #$i_pwd I_PWD /**/ |
492 | #$d_pwquota PWQUOTA /**/ |
493 | #$d_pwage PWAGE /**/ |
bf38876a |
494 | #$d_pwchange PWCHANGE /**/ |
495 | #$d_pwclass PWCLASS /**/ |
496 | #$d_pwexpire PWEXPIRE /**/ |
a687059c |
497 | |
498 | /* I_SYSDIR: |
499 | * This symbol, if defined, indicates to the C program that it should |
500 | * include sys/dir.h. |
501 | */ |
502 | #$i_sysdir I_SYSDIR /**/ |
503 | |
504 | /* I_SYSIOCTL: |
505 | * This symbol, if defined, indicates that sys/ioctl.h exists and should |
506 | * be included. |
507 | */ |
508 | #$i_sysioctl I_SYSIOCTL /**/ |
509 | |
510 | /* I_VARARGS: |
511 | * This symbol, if defined, indicates to the C program that it should |
512 | * include varargs.h. |
513 | */ |
514 | #$i_varargs I_VARARGS /**/ |
515 | |
516 | /* I_VFORK: |
517 | * This symbol, if defined, indicates to the C program that it should |
518 | * include vfork.h. |
519 | */ |
520 | #$i_vfork I_VFORK /**/ |
521 | |
522 | /* INTSIZE: |
523 | * This symbol contains the size of an int, so that the C preprocessor |
524 | * can make decisions based on it. |
525 | */ |
526 | #define INTSIZE $intsize /**/ |
527 | |
528 | /* RANDBITS: |
529 | * This symbol contains the number of bits of random number the rand() |
530 | * function produces. Usual values are 15, 16, and 31. |
531 | */ |
532 | #define RANDBITS $randbits /**/ |
533 | |
534 | /* SIG_NAME: |
535 | * This symbol contains an list of signal names in order. |
536 | */ |
537 | #define SIG_NAME "`echo $sig_name | sed 's/ /","/g'`" /**/ |
538 | |
36ce8bec |
539 | /* STDCHAR: |
540 | * This symbol is defined to be the type of char used in stdio.h. |
541 | * It has the values "unsigned char" or "char". |
542 | */ |
543 | #define STDCHAR $stdchar /**/ |
544 | |
378cc40b |
545 | /* UIDTYPE: |
546 | * This symbol has a value like uid_t, int, ushort, or whatever type is |
547 | * used to declare user ids in the kernel. |
548 | */ |
549 | #define UIDTYPE $uidtype /**/ |
550 | |
8d063cd8 |
551 | /* VOIDFLAGS: |
552 | * This symbol indicates how much support of the void type is given by this |
553 | * compiler. What various bits mean: |
554 | * |
555 | * 1 = supports declaration of void |
556 | * 2 = supports arrays of pointers to functions returning void |
557 | * 4 = supports comparisons between pointers to void functions and |
558 | * addresses of void functions |
559 | * |
560 | * The package designer should define VOIDUSED to indicate the requirements |
561 | * of the package. This can be done either by #defining VOIDUSED before |
562 | * including config.h, or by defining defvoidused in Myinit.U. If the |
a687059c |
563 | * latter approach is taken, only those flags will be tested. If the |
8d063cd8 |
564 | * level of void support necessary is not present, defines void to int. |
565 | */ |
566 | #ifndef VOIDUSED |
567 | #define VOIDUSED $defvoidused |
568 | #endif |
569 | #define VOIDFLAGS $voidflags |
570 | #if (VOIDFLAGS & VOIDUSED) != VOIDUSED |
571 | #$define void int /* is void to be avoided? */ |
572 | #$define M_VOID /* Xenix strikes again */ |
573 | #endif |
574 | |
378cc40b |
575 | /* PRIVLIB: |
576 | * This symbol contains the name of the private library for this package. |
577 | * The library is private in the sense that it needn't be in anyone's |
a687059c |
578 | * execution path, but it should be accessible by the world. The program |
579 | * should be prepared to do ~ expansion. |
378cc40b |
580 | */ |
581 | #define PRIVLIB "$privlib" /**/ |
582 | |
8d063cd8 |
583 | !GROK!THIS! |