cbsg_0.0.1_afef1379/src/delirium.adb

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
-------------------------------------------------------------------------
--  Delirium - Helper package for random recursive grammar
--
--  Package body
--
--  Legal licensing note:
--
--  Copyright (c) Gautier de Montmollin 2006 .. 2019
--  CH-8810 Horgen
--  SWITZERLAND
--
--  Permission is hereby granted, free of charge, to any person obtaining a copy
--  of this software and associated documentation files (the "Software"), to deal
--  in the Software without restriction, including without limitation the rights
--  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
--  copies of the Software, and to permit persons to whom the Software is
--  furnished to do so, subject to the following conditions:
--
--  The above copyright notice and this permission notice shall be included in
--  all copies or substantial portions of the Software.
--
--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
--  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
--  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
--  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
--  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
--  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
--  THE SOFTWARE.
--
--  NB: this is the MIT License, as found 12-Sep-2007 on the site
--  http://www.opensource.org/licenses/mit-license.php
-------------------------------------------------------------------------

with Ada.Characters.Handling;           use Ada.Characters.Handling;
with Ada.Numerics.Float_Random;         use Ada.Numerics.Float_Random;
with Ada.Numerics.Discrete_Random;
with Ada.Strings.Fixed;                 use Ada.Strings.Fixed;

package body Delirium is

   ---------------------------
   -- English grammar tools --
   ---------------------------

   Vowel : constant array (Character) of Boolean :=
     ('a' | 'e' | 'i' | 'o' | 'u' | 'y' |
      'A' | 'E' | 'I' | 'O' | 'U' | 'Y' => True, others => False);

   function Make_Eventual_Plural (S : String; P : Plurality) return String is
      abbr : Natural;
   begin
      if S'Length < 3 or P = Singular then
         return S;
      end if;
      abbr := Index (S, " (");
      if abbr > 0 then
         --  Example: Quality Management Systems (QMS)
         return Make_Eventual_Plural (S (S'First .. abbr - 1), P) & S (abbr .. S'Last);
      elsif S = "matrix" then
         return "matrices";
      elsif S = "analysis" then
         return "analyses";
      elsif S (S'Last - 1 .. S'Last) = "gh" then  --  E.g.: breakthrough
         return S & 's';
      else
         case S (S'Last) is
            when 's' | 'x' | 'z' | 'h' =>
               return S & "es";
            when 'y' =>
               if Vowel (S (S'Last - 1)) then  --  wAy -> wAys
                  return S & 's';
               else  --  fLy -> fLies
                  return S (S'First .. S'Last - 1) & "ies";
               end if;
            when others =>
               return S & 's';
         end case;
      end if;
   end Make_Eventual_Plural;

   function Build_Plural_Verb (Verb : String; P : Plurality) return String is
      Last : Natural;
   begin
      Last := Verb'Last;
      for I in reverse Verb'First + 1 .. Verb'Last loop
         if Verb (I) = ' ' then
            Last := I - 1;
         end if;
      end loop;
      declare
         Rest : constant String := Verb (Last + 1 .. Verb'Last);
         Proper_Verb : constant String := Verb (Verb'First .. Last);
      begin
         if Proper_Verb = "be" then
            case P is
               when Singular => return "is" & Rest;
               when Plural   => return "are" & Rest;
            end case;
         elsif Proper_Verb = "have" then
            case P is
               when Singular => return "has" & Rest;
               when Plural   => return Verb;
            end case;
         end if;
         case P is
            when Plural   =>
               return Verb;
            when Singular =>
               case Verb (Last) is
                  when 'o' | 's' | 'z' =>  --  echo -> echoes; do -> does
                     return Proper_Verb & "es" & Rest;
                  when 'h' =>
                     case Verb (Last - 1) is
                        when 'c' | 's' => -- catch -> catches; establish -> establishes
                          return Proper_Verb & "es" & Rest;
                        when others => -- plough -> ploughs
                          return Proper_Verb & 's' & Rest;
                     end case;
                  when 'y' =>
                     if Vowel (Verb (Last - 1)) then  --  plOy -> plOys
                        return Proper_Verb & 's' & Rest;
                     else  --  tRy -> tRies
                        return Verb (Verb'First .. Last - 1) & "ies" & Rest;
                     end if;
                  when others =>
                     return Proper_Verb & 's' & Rest;
               end case;
         end case;
      end;
   end Build_Plural_Verb;

   function Add_Indefinite_Article (P : Plurality; To : String) return String is
   begin
      case P is
         when Singular =>
            if Vowel (To (To'First)) then
               return "an " & To;
            else
               return "a " & To;
            end if;
         when Plural =>
            return To;
      end case;
   end Add_Indefinite_Article;

   function Silly_Abbreviation_Generator_SAG (X : String) return String is
      space   : Natural;
      initial : Character;
      lower_X : constant String := To_Lower (X);
   begin
      if X'Length = 0 then
         return "";
      end if;
      if Index (lower_X, "experience") = lower_X'First then
         initial := 'X';  --  Special case: the 'x' in "experience"
      else
         initial := X (X'First);
      end if;
      space := Index (X, " ");
      if space > X'First then
         --  There is a space. We split the problem "a la Lisp".
         return initial & Silly_Abbreviation_Generator_SAG (X (space + 1 .. X'Last));
      end if;
      return (1 => initial);
   end Silly_Abbreviation_Generator_SAG;

   ----------------------
   -- Random functions --
   ----------------------

   package Rand_Pl is new Ada.Numerics.Discrete_Random (Plurality);

   Seed_Pl : Rand_Pl.Generator;

   function Random_Plural return Plurality is
   begin
      return Rand_Pl.Random (Seed_Pl);
   end Random_Plural;

   Seed : Generator;
   function R (N : Positive) return Positive is
      S : constant Natural := Integer (Float (N) * Random (Seed));
   begin
      if S >= N then -- this has a 0 probability of happening
         --  Same choice as GNAT's run-time library for Ada.Numerics.Discrete_Random:
         return 1;
      else
         return 1 + S;
      end if;
   end R;

   function Abbreviate (Long : String; Probability : Float) return String is
   begin
     if Random (Seed) < Probability then
        return Long & " (" & Silly_Abbreviation_Generator_SAG (Long) & ')';
     else
        return Long;
     end if;
   end Abbreviate;

   --  Below, a Windows CMD script for producing the function bodies:
   --
   --  for /l %i in (1,1,500) do echo    function R%i return T%i is (T%i (R (%i))); >>body.txt

   function R1 return T1 is (T1 (R (1)));
   function R2 return T2 is (T2 (R (2)));
   function R3 return T3 is (T3 (R (3)));
   function R4 return T4 is (T4 (R (4)));
   function R5 return T5 is (T5 (R (5)));
   function R6 return T6 is (T6 (R (6)));
   function R7 return T7 is (T7 (R (7)));
   function R8 return T8 is (T8 (R (8)));
   function R9 return T9 is (T9 (R (9)));
   function R10 return T10 is (T10 (R (10)));
   function R11 return T11 is (T11 (R (11)));
   function R12 return T12 is (T12 (R (12)));
   function R13 return T13 is (T13 (R (13)));
   function R14 return T14 is (T14 (R (14)));
   function R15 return T15 is (T15 (R (15)));
   function R16 return T16 is (T16 (R (16)));
   function R17 return T17 is (T17 (R (17)));
   function R18 return T18 is (T18 (R (18)));
   function R19 return T19 is (T19 (R (19)));
   function R20 return T20 is (T20 (R (20)));
   function R21 return T21 is (T21 (R (21)));
   function R22 return T22 is (T22 (R (22)));
   function R23 return T23 is (T23 (R (23)));
   function R24 return T24 is (T24 (R (24)));
   function R25 return T25 is (T25 (R (25)));
   function R26 return T26 is (T26 (R (26)));
   function R27 return T27 is (T27 (R (27)));
   function R28 return T28 is (T28 (R (28)));
   function R29 return T29 is (T29 (R (29)));
   function R30 return T30 is (T30 (R (30)));
   function R31 return T31 is (T31 (R (31)));
   function R32 return T32 is (T32 (R (32)));
   function R33 return T33 is (T33 (R (33)));
   function R34 return T34 is (T34 (R (34)));
   function R35 return T35 is (T35 (R (35)));
   function R36 return T36 is (T36 (R (36)));
   function R37 return T37 is (T37 (R (37)));
   function R38 return T38 is (T38 (R (38)));
   function R39 return T39 is (T39 (R (39)));
   function R40 return T40 is (T40 (R (40)));
   function R41 return T41 is (T41 (R (41)));
   function R42 return T42 is (T42 (R (42)));
   function R43 return T43 is (T43 (R (43)));
   function R44 return T44 is (T44 (R (44)));
   function R45 return T45 is (T45 (R (45)));
   function R46 return T46 is (T46 (R (46)));
   function R47 return T47 is (T47 (R (47)));
   function R48 return T48 is (T48 (R (48)));
   function R49 return T49 is (T49 (R (49)));
   function R50 return T50 is (T50 (R (50)));
   function R51 return T51 is (T51 (R (51)));
   function R52 return T52 is (T52 (R (52)));
   function R53 return T53 is (T53 (R (53)));
   function R54 return T54 is (T54 (R (54)));
   function R55 return T55 is (T55 (R (55)));
   function R56 return T56 is (T56 (R (56)));
   function R57 return T57 is (T57 (R (57)));
   function R58 return T58 is (T58 (R (58)));
   function R59 return T59 is (T59 (R (59)));
   function R60 return T60 is (T60 (R (60)));
   function R61 return T61 is (T61 (R (61)));
   function R62 return T62 is (T62 (R (62)));
   function R63 return T63 is (T63 (R (63)));
   function R64 return T64 is (T64 (R (64)));
   function R65 return T65 is (T65 (R (65)));
   function R66 return T66 is (T66 (R (66)));
   function R67 return T67 is (T67 (R (67)));
   function R68 return T68 is (T68 (R (68)));
   function R69 return T69 is (T69 (R (69)));
   function R70 return T70 is (T70 (R (70)));
   function R71 return T71 is (T71 (R (71)));
   function R72 return T72 is (T72 (R (72)));
   function R73 return T73 is (T73 (R (73)));
   function R74 return T74 is (T74 (R (74)));
   function R75 return T75 is (T75 (R (75)));
   function R76 return T76 is (T76 (R (76)));
   function R77 return T77 is (T77 (R (77)));
   function R78 return T78 is (T78 (R (78)));
   function R79 return T79 is (T79 (R (79)));
   function R80 return T80 is (T80 (R (80)));
   function R81 return T81 is (T81 (R (81)));
   function R82 return T82 is (T82 (R (82)));
   function R83 return T83 is (T83 (R (83)));
   function R84 return T84 is (T84 (R (84)));
   function R85 return T85 is (T85 (R (85)));
   function R86 return T86 is (T86 (R (86)));
   function R87 return T87 is (T87 (R (87)));
   function R88 return T88 is (T88 (R (88)));
   function R89 return T89 is (T89 (R (89)));
   function R90 return T90 is (T90 (R (90)));
   function R91 return T91 is (T91 (R (91)));
   function R92 return T92 is (T92 (R (92)));
   function R93 return T93 is (T93 (R (93)));
   function R94 return T94 is (T94 (R (94)));
   function R95 return T95 is (T95 (R (95)));
   function R96 return T96 is (T96 (R (96)));
   function R97 return T97 is (T97 (R (97)));
   function R98 return T98 is (T98 (R (98)));
   function R99 return T99 is (T99 (R (99)));
   function R100 return T100 is (T100 (R (100)));
   function R101 return T101 is (T101 (R (101)));
   function R102 return T102 is (T102 (R (102)));
   function R103 return T103 is (T103 (R (103)));
   function R104 return T104 is (T104 (R (104)));
   function R105 return T105 is (T105 (R (105)));
   function R106 return T106 is (T106 (R (106)));
   function R107 return T107 is (T107 (R (107)));
   function R108 return T108 is (T108 (R (108)));
   function R109 return T109 is (T109 (R (109)));
   function R110 return T110 is (T110 (R (110)));
   function R111 return T111 is (T111 (R (111)));
   function R112 return T112 is (T112 (R (112)));
   function R113 return T113 is (T113 (R (113)));
   function R114 return T114 is (T114 (R (114)));
   function R115 return T115 is (T115 (R (115)));
   function R116 return T116 is (T116 (R (116)));
   function R117 return T117 is (T117 (R (117)));
   function R118 return T118 is (T118 (R (118)));
   function R119 return T119 is (T119 (R (119)));
   function R120 return T120 is (T120 (R (120)));
   function R121 return T121 is (T121 (R (121)));
   function R122 return T122 is (T122 (R (122)));
   function R123 return T123 is (T123 (R (123)));
   function R124 return T124 is (T124 (R (124)));
   function R125 return T125 is (T125 (R (125)));
   function R126 return T126 is (T126 (R (126)));
   function R127 return T127 is (T127 (R (127)));
   function R128 return T128 is (T128 (R (128)));
   function R129 return T129 is (T129 (R (129)));
   function R130 return T130 is (T130 (R (130)));
   function R131 return T131 is (T131 (R (131)));
   function R132 return T132 is (T132 (R (132)));
   function R133 return T133 is (T133 (R (133)));
   function R134 return T134 is (T134 (R (134)));
   function R135 return T135 is (T135 (R (135)));
   function R136 return T136 is (T136 (R (136)));
   function R137 return T137 is (T137 (R (137)));
   function R138 return T138 is (T138 (R (138)));
   function R139 return T139 is (T139 (R (139)));
   function R140 return T140 is (T140 (R (140)));
   function R141 return T141 is (T141 (R (141)));
   function R142 return T142 is (T142 (R (142)));
   function R143 return T143 is (T143 (R (143)));
   function R144 return T144 is (T144 (R (144)));
   function R145 return T145 is (T145 (R (145)));
   function R146 return T146 is (T146 (R (146)));
   function R147 return T147 is (T147 (R (147)));
   function R148 return T148 is (T148 (R (148)));
   function R149 return T149 is (T149 (R (149)));
   function R150 return T150 is (T150 (R (150)));
   function R151 return T151 is (T151 (R (151)));
   function R152 return T152 is (T152 (R (152)));
   function R153 return T153 is (T153 (R (153)));
   function R154 return T154 is (T154 (R (154)));
   function R155 return T155 is (T155 (R (155)));
   function R156 return T156 is (T156 (R (156)));
   function R157 return T157 is (T157 (R (157)));
   function R158 return T158 is (T158 (R (158)));
   function R159 return T159 is (T159 (R (159)));
   function R160 return T160 is (T160 (R (160)));
   function R161 return T161 is (T161 (R (161)));
   function R162 return T162 is (T162 (R (162)));
   function R163 return T163 is (T163 (R (163)));
   function R164 return T164 is (T164 (R (164)));
   function R165 return T165 is (T165 (R (165)));
   function R166 return T166 is (T166 (R (166)));
   function R167 return T167 is (T167 (R (167)));
   function R168 return T168 is (T168 (R (168)));
   function R169 return T169 is (T169 (R (169)));
   function R170 return T170 is (T170 (R (170)));
   function R171 return T171 is (T171 (R (171)));
   function R172 return T172 is (T172 (R (172)));
   function R173 return T173 is (T173 (R (173)));
   function R174 return T174 is (T174 (R (174)));
   function R175 return T175 is (T175 (R (175)));
   function R176 return T176 is (T176 (R (176)));
   function R177 return T177 is (T177 (R (177)));
   function R178 return T178 is (T178 (R (178)));
   function R179 return T179 is (T179 (R (179)));
   function R180 return T180 is (T180 (R (180)));
   function R181 return T181 is (T181 (R (181)));
   function R182 return T182 is (T182 (R (182)));
   function R183 return T183 is (T183 (R (183)));
   function R184 return T184 is (T184 (R (184)));
   function R185 return T185 is (T185 (R (185)));
   function R186 return T186 is (T186 (R (186)));
   function R187 return T187 is (T187 (R (187)));
   function R188 return T188 is (T188 (R (188)));
   function R189 return T189 is (T189 (R (189)));
   function R190 return T190 is (T190 (R (190)));
   function R191 return T191 is (T191 (R (191)));
   function R192 return T192 is (T192 (R (192)));
   function R193 return T193 is (T193 (R (193)));
   function R194 return T194 is (T194 (R (194)));
   function R195 return T195 is (T195 (R (195)));
   function R196 return T196 is (T196 (R (196)));
   function R197 return T197 is (T197 (R (197)));
   function R198 return T198 is (T198 (R (198)));
   function R199 return T199 is (T199 (R (199)));
   function R200 return T200 is (T200 (R (200)));
   function R201 return T201 is (T201 (R (201)));
   function R202 return T202 is (T202 (R (202)));
   function R203 return T203 is (T203 (R (203)));
   function R204 return T204 is (T204 (R (204)));
   function R205 return T205 is (T205 (R (205)));
   function R206 return T206 is (T206 (R (206)));
   function R207 return T207 is (T207 (R (207)));
   function R208 return T208 is (T208 (R (208)));
   function R209 return T209 is (T209 (R (209)));
   function R210 return T210 is (T210 (R (210)));
   function R211 return T211 is (T211 (R (211)));
   function R212 return T212 is (T212 (R (212)));
   function R213 return T213 is (T213 (R (213)));
   function R214 return T214 is (T214 (R (214)));
   function R215 return T215 is (T215 (R (215)));
   function R216 return T216 is (T216 (R (216)));
   function R217 return T217 is (T217 (R (217)));
   function R218 return T218 is (T218 (R (218)));
   function R219 return T219 is (T219 (R (219)));
   function R220 return T220 is (T220 (R (220)));
   function R221 return T221 is (T221 (R (221)));
   function R222 return T222 is (T222 (R (222)));
   function R223 return T223 is (T223 (R (223)));
   function R224 return T224 is (T224 (R (224)));
   function R225 return T225 is (T225 (R (225)));
   function R226 return T226 is (T226 (R (226)));
   function R227 return T227 is (T227 (R (227)));
   function R228 return T228 is (T228 (R (228)));
   function R229 return T229 is (T229 (R (229)));
   function R230 return T230 is (T230 (R (230)));
   function R231 return T231 is (T231 (R (231)));
   function R232 return T232 is (T232 (R (232)));
   function R233 return T233 is (T233 (R (233)));
   function R234 return T234 is (T234 (R (234)));
   function R235 return T235 is (T235 (R (235)));
   function R236 return T236 is (T236 (R (236)));
   function R237 return T237 is (T237 (R (237)));
   function R238 return T238 is (T238 (R (238)));
   function R239 return T239 is (T239 (R (239)));
   function R240 return T240 is (T240 (R (240)));
   function R241 return T241 is (T241 (R (241)));
   function R242 return T242 is (T242 (R (242)));
   function R243 return T243 is (T243 (R (243)));
   function R244 return T244 is (T244 (R (244)));
   function R245 return T245 is (T245 (R (245)));
   function R246 return T246 is (T246 (R (246)));
   function R247 return T247 is (T247 (R (247)));
   function R248 return T248 is (T248 (R (248)));
   function R249 return T249 is (T249 (R (249)));
   function R250 return T250 is (T250 (R (250)));
   function R251 return T251 is (T251 (R (251)));
   function R252 return T252 is (T252 (R (252)));
   function R253 return T253 is (T253 (R (253)));
   function R254 return T254 is (T254 (R (254)));
   function R255 return T255 is (T255 (R (255)));
   function R256 return T256 is (T256 (R (256)));
   function R257 return T257 is (T257 (R (257)));
   function R258 return T258 is (T258 (R (258)));
   function R259 return T259 is (T259 (R (259)));
   function R260 return T260 is (T260 (R (260)));
   function R261 return T261 is (T261 (R (261)));
   function R262 return T262 is (T262 (R (262)));
   function R263 return T263 is (T263 (R (263)));
   function R264 return T264 is (T264 (R (264)));
   function R265 return T265 is (T265 (R (265)));
   function R266 return T266 is (T266 (R (266)));
   function R267 return T267 is (T267 (R (267)));
   function R268 return T268 is (T268 (R (268)));
   function R269 return T269 is (T269 (R (269)));
   function R270 return T270 is (T270 (R (270)));
   function R271 return T271 is (T271 (R (271)));
   function R272 return T272 is (T272 (R (272)));
   function R273 return T273 is (T273 (R (273)));
   function R274 return T274 is (T274 (R (274)));
   function R275 return T275 is (T275 (R (275)));
   function R276 return T276 is (T276 (R (276)));
   function R277 return T277 is (T277 (R (277)));
   function R278 return T278 is (T278 (R (278)));
   function R279 return T279 is (T279 (R (279)));
   function R280 return T280 is (T280 (R (280)));
   function R281 return T281 is (T281 (R (281)));
   function R282 return T282 is (T282 (R (282)));
   function R283 return T283 is (T283 (R (283)));
   function R284 return T284 is (T284 (R (284)));
   function R285 return T285 is (T285 (R (285)));
   function R286 return T286 is (T286 (R (286)));
   function R287 return T287 is (T287 (R (287)));
   function R288 return T288 is (T288 (R (288)));
   function R289 return T289 is (T289 (R (289)));
   function R290 return T290 is (T290 (R (290)));
   function R291 return T291 is (T291 (R (291)));
   function R292 return T292 is (T292 (R (292)));
   function R293 return T293 is (T293 (R (293)));
   function R294 return T294 is (T294 (R (294)));
   function R295 return T295 is (T295 (R (295)));
   function R296 return T296 is (T296 (R (296)));
   function R297 return T297 is (T297 (R (297)));
   function R298 return T298 is (T298 (R (298)));
   function R299 return T299 is (T299 (R (299)));
   function R300 return T300 is (T300 (R (300)));
   function R301 return T301 is (T301 (R (301)));
   function R302 return T302 is (T302 (R (302)));
   function R303 return T303 is (T303 (R (303)));
   function R304 return T304 is (T304 (R (304)));
   function R305 return T305 is (T305 (R (305)));
   function R306 return T306 is (T306 (R (306)));
   function R307 return T307 is (T307 (R (307)));
   function R308 return T308 is (T308 (R (308)));
   function R309 return T309 is (T309 (R (309)));
   function R310 return T310 is (T310 (R (310)));
   function R311 return T311 is (T311 (R (311)));
   function R312 return T312 is (T312 (R (312)));
   function R313 return T313 is (T313 (R (313)));
   function R314 return T314 is (T314 (R (314)));
   function R315 return T315 is (T315 (R (315)));
   function R316 return T316 is (T316 (R (316)));
   function R317 return T317 is (T317 (R (317)));
   function R318 return T318 is (T318 (R (318)));
   function R319 return T319 is (T319 (R (319)));
   function R320 return T320 is (T320 (R (320)));
   function R321 return T321 is (T321 (R (321)));
   function R322 return T322 is (T322 (R (322)));
   function R323 return T323 is (T323 (R (323)));
   function R324 return T324 is (T324 (R (324)));
   function R325 return T325 is (T325 (R (325)));
   function R326 return T326 is (T326 (R (326)));
   function R327 return T327 is (T327 (R (327)));
   function R328 return T328 is (T328 (R (328)));
   function R329 return T329 is (T329 (R (329)));
   function R330 return T330 is (T330 (R (330)));
   function R331 return T331 is (T331 (R (331)));
   function R332 return T332 is (T332 (R (332)));
   function R333 return T333 is (T333 (R (333)));
   function R334 return T334 is (T334 (R (334)));
   function R335 return T335 is (T335 (R (335)));
   function R336 return T336 is (T336 (R (336)));
   function R337 return T337 is (T337 (R (337)));
   function R338 return T338 is (T338 (R (338)));
   function R339 return T339 is (T339 (R (339)));
   function R340 return T340 is (T340 (R (340)));
   function R341 return T341 is (T341 (R (341)));
   function R342 return T342 is (T342 (R (342)));
   function R343 return T343 is (T343 (R (343)));
   function R344 return T344 is (T344 (R (344)));
   function R345 return T345 is (T345 (R (345)));
   function R346 return T346 is (T346 (R (346)));
   function R347 return T347 is (T347 (R (347)));
   function R348 return T348 is (T348 (R (348)));
   function R349 return T349 is (T349 (R (349)));
   function R350 return T350 is (T350 (R (350)));
   function R351 return T351 is (T351 (R (351)));
   function R352 return T352 is (T352 (R (352)));
   function R353 return T353 is (T353 (R (353)));
   function R354 return T354 is (T354 (R (354)));
   function R355 return T355 is (T355 (R (355)));
   function R356 return T356 is (T356 (R (356)));
   function R357 return T357 is (T357 (R (357)));
   function R358 return T358 is (T358 (R (358)));
   function R359 return T359 is (T359 (R (359)));
   function R360 return T360 is (T360 (R (360)));
   function R361 return T361 is (T361 (R (361)));
   function R362 return T362 is (T362 (R (362)));
   function R363 return T363 is (T363 (R (363)));
   function R364 return T364 is (T364 (R (364)));
   function R365 return T365 is (T365 (R (365)));
   function R366 return T366 is (T366 (R (366)));
   function R367 return T367 is (T367 (R (367)));
   function R368 return T368 is (T368 (R (368)));
   function R369 return T369 is (T369 (R (369)));
   function R370 return T370 is (T370 (R (370)));
   function R371 return T371 is (T371 (R (371)));
   function R372 return T372 is (T372 (R (372)));
   function R373 return T373 is (T373 (R (373)));
   function R374 return T374 is (T374 (R (374)));
   function R375 return T375 is (T375 (R (375)));
   function R376 return T376 is (T376 (R (376)));
   function R377 return T377 is (T377 (R (377)));
   function R378 return T378 is (T378 (R (378)));
   function R379 return T379 is (T379 (R (379)));
   function R380 return T380 is (T380 (R (380)));
   function R381 return T381 is (T381 (R (381)));
   function R382 return T382 is (T382 (R (382)));
   function R383 return T383 is (T383 (R (383)));
   function R384 return T384 is (T384 (R (384)));
   function R385 return T385 is (T385 (R (385)));
   function R386 return T386 is (T386 (R (386)));
   function R387 return T387 is (T387 (R (387)));
   function R388 return T388 is (T388 (R (388)));
   function R389 return T389 is (T389 (R (389)));
   function R390 return T390 is (T390 (R (390)));
   function R391 return T391 is (T391 (R (391)));
   function R392 return T392 is (T392 (R (392)));
   function R393 return T393 is (T393 (R (393)));
   function R394 return T394 is (T394 (R (394)));
   function R395 return T395 is (T395 (R (395)));
   function R396 return T396 is (T396 (R (396)));
   function R397 return T397 is (T397 (R (397)));
   function R398 return T398 is (T398 (R (398)));
   function R399 return T399 is (T399 (R (399)));
   function R400 return T400 is (T400 (R (400)));
   function R401 return T401 is (T401 (R (401)));
   function R402 return T402 is (T402 (R (402)));
   function R403 return T403 is (T403 (R (403)));
   function R404 return T404 is (T404 (R (404)));
   function R405 return T405 is (T405 (R (405)));
   function R406 return T406 is (T406 (R (406)));
   function R407 return T407 is (T407 (R (407)));
   function R408 return T408 is (T408 (R (408)));
   function R409 return T409 is (T409 (R (409)));
   function R410 return T410 is (T410 (R (410)));
   function R411 return T411 is (T411 (R (411)));
   function R412 return T412 is (T412 (R (412)));
   function R413 return T413 is (T413 (R (413)));
   function R414 return T414 is (T414 (R (414)));
   function R415 return T415 is (T415 (R (415)));
   function R416 return T416 is (T416 (R (416)));
   function R417 return T417 is (T417 (R (417)));
   function R418 return T418 is (T418 (R (418)));
   function R419 return T419 is (T419 (R (419)));
   function R420 return T420 is (T420 (R (420)));
   function R421 return T421 is (T421 (R (421)));
   function R422 return T422 is (T422 (R (422)));
   function R423 return T423 is (T423 (R (423)));
   function R424 return T424 is (T424 (R (424)));
   function R425 return T425 is (T425 (R (425)));
   function R426 return T426 is (T426 (R (426)));
   function R427 return T427 is (T427 (R (427)));
   function R428 return T428 is (T428 (R (428)));
   function R429 return T429 is (T429 (R (429)));
   function R430 return T430 is (T430 (R (430)));
   function R431 return T431 is (T431 (R (431)));
   function R432 return T432 is (T432 (R (432)));
   function R433 return T433 is (T433 (R (433)));
   function R434 return T434 is (T434 (R (434)));
   function R435 return T435 is (T435 (R (435)));
   function R436 return T436 is (T436 (R (436)));
   function R437 return T437 is (T437 (R (437)));
   function R438 return T438 is (T438 (R (438)));
   function R439 return T439 is (T439 (R (439)));
   function R440 return T440 is (T440 (R (440)));
   function R441 return T441 is (T441 (R (441)));
   function R442 return T442 is (T442 (R (442)));
   function R443 return T443 is (T443 (R (443)));
   function R444 return T444 is (T444 (R (444)));
   function R445 return T445 is (T445 (R (445)));
   function R446 return T446 is (T446 (R (446)));
   function R447 return T447 is (T447 (R (447)));
   function R448 return T448 is (T448 (R (448)));
   function R449 return T449 is (T449 (R (449)));
   function R450 return T450 is (T450 (R (450)));
   function R451 return T451 is (T451 (R (451)));
   function R452 return T452 is (T452 (R (452)));
   function R453 return T453 is (T453 (R (453)));
   function R454 return T454 is (T454 (R (454)));
   function R455 return T455 is (T455 (R (455)));
   function R456 return T456 is (T456 (R (456)));
   function R457 return T457 is (T457 (R (457)));
   function R458 return T458 is (T458 (R (458)));
   function R459 return T459 is (T459 (R (459)));
   function R460 return T460 is (T460 (R (460)));
   function R461 return T461 is (T461 (R (461)));
   function R462 return T462 is (T462 (R (462)));
   function R463 return T463 is (T463 (R (463)));
   function R464 return T464 is (T464 (R (464)));
   function R465 return T465 is (T465 (R (465)));
   function R466 return T466 is (T466 (R (466)));
   function R467 return T467 is (T467 (R (467)));
   function R468 return T468 is (T468 (R (468)));
   function R469 return T469 is (T469 (R (469)));
   function R470 return T470 is (T470 (R (470)));
   function R471 return T471 is (T471 (R (471)));
   function R472 return T472 is (T472 (R (472)));
   function R473 return T473 is (T473 (R (473)));
   function R474 return T474 is (T474 (R (474)));
   function R475 return T475 is (T475 (R (475)));
   function R476 return T476 is (T476 (R (476)));
   function R477 return T477 is (T477 (R (477)));
   function R478 return T478 is (T478 (R (478)));
   function R479 return T479 is (T479 (R (479)));
   function R480 return T480 is (T480 (R (480)));
   function R481 return T481 is (T481 (R (481)));
   function R482 return T482 is (T482 (R (482)));
   function R483 return T483 is (T483 (R (483)));
   function R484 return T484 is (T484 (R (484)));
   function R485 return T485 is (T485 (R (485)));
   function R486 return T486 is (T486 (R (486)));
   function R487 return T487 is (T487 (R (487)));
   function R488 return T488 is (T488 (R (488)));
   function R489 return T489 is (T489 (R (489)));
   function R490 return T490 is (T490 (R (490)));
   function R491 return T491 is (T491 (R (491)));
   function R492 return T492 is (T492 (R (492)));
   function R493 return T493 is (T493 (R (493)));
   function R494 return T494 is (T494 (R (494)));
   function R495 return T495 is (T495 (R (495)));
   function R496 return T496 is (T496 (R (496)));
   function R497 return T497 is (T497 (R (497)));
   function R498 return T498 is (T498 (R (498)));
   function R499 return T499 is (T499 (R (499)));
   function R500 return T500 is (T500 (R (500)));

begin
   Reset (Seed);
   Rand_Pl.Reset (Seed_Pl);
end Delirium;