File Coverage

blib/lib/Crypt/AppleTwoFish.pm
Criterion Covered Total %
statement 71 271 26.2
branch 0 30 0.0
condition n/a
subroutine 20 41 48.7
pod 12 12 100.0
total 103 354 29.1


line stmt bran cond sub pod time code
1             package Crypt::AppleTwoFish;
2              
3 1     1   34655 use strict;
  1         2  
  1         46  
4 1     1   6 use warnings;
  1         2  
  1         34  
5 1     1   7620 use Digest::SHA;
  1         23108  
  1         93  
6 1     1   21880 use Math::BigInt;
  1         49475  
  1         7  
7 1     1   33394 use Carp qw( carp );
  1         3  
  1         159  
8              
9             our $VERSION = "0.051";
10              
11             #--- lookup tables declared here are defined after the other package code ---#
12              
13             my ( @apple_tf_iTMS, @apple_tf_DRMS );
14              
15             my ( %veggies, @planter_table, %veggie_table );
16              
17             #-------------- non-member functions ----------------#
18              
19             sub _combine_keys {
20              
21             # note: the arguments are binary bytes and
22             # two ints: 6, 4, and 4 bytes each
23 0     0   0 my ( $hwID, $keyID, $userID ) = @_;
24 0         0 return $hwID . pack( 'N', $keyID ) . pack( 'N', $userID ) . "\xFF\xFF";
25             }
26              
27             sub _compost_cow {
28 0     0   0 my $i = shift;
29 1     1   5 use integer;
  1         3  
  1         4  
30 0         0 return $i * 0xA2ED4502 + 0x6CD8D601;
31             }
32              
33             sub _compost_horse {
34 0     0   0 my ( $i, $j, $k ) = @_;
35 1     1   48 use integer;
  1         1  
  1         5  
36 0         0 return ( $i + $j ) * 0xA2ED4502 + $k * 0xFFFFFFFE + 0xD9B1AC01;
37             }
38              
39             sub _compost_sheep {
40 0     0   0 my ( $b, $c, $d, $e, $f ) = @_;
41 1     1   55 use integer;
  1         2  
  1         3  
42 0         0 return ( $b + $c + $d ) * 0xA2ED4502 + ( $e + $f ) * 0xFFFFFFFE +
43             0x468A8201;
44             }
45              
46             sub _till {
47 0     0   0 my ( $bytes, $veggie ) = @_;
48 1     1   168 use integer;
  1         2  
  1         5  
49 0         0 for my $byte ( @{$bytes} ) {
  0         0  
50 0         0 $byte = ( $veggie_table{$veggie}->[$byte] ^ 0x5D ) & 0xFF;
51             }
52 0         0 return $bytes;
53             }
54              
55             sub _weed {
56 0     0   0 my ( $bytes, $veggie ) = @_;
57 1     1   95 use integer;
  1         1  
  1         4  
58 0         0 my ( $i, $j ) = @{ $veggies{$veggie} };
  0         0  
59 0         0 for my $byte ( @{$bytes} ) {
  0         0  
60 0         0 $byte = ( $byte * $i + $j ) & 0xFF;
61             }
62 0         0 return $bytes;
63             }
64              
65             sub _dust {
66 0     0   0 my (@hex_bytes) = @_;
67 1     1   245 use integer;
  1         2  
  1         4  
68 0         0 my $num_bytes = scalar @hex_bytes;
69 0         0 my $num_ints = $num_bytes / 4;
70 0         0 my @b;
71             my $count;
72 0         0 while ( 0 < ( $count = scalar @hex_bytes ) ) {
73 0         0 my @digits;
74 0 0       0 if ( $count > 4 ) {
75 0         0 @digits = @hex_bytes[ 0 .. 3 ];
76 0         0 @hex_bytes = @hex_bytes[ 4 .. $count - 1 ];
77             }
78             else {
79 0         0 @digits = @hex_bytes;
80 0         0 @hex_bytes = ();
81             }
82 0         0 my $n = _fumigate(@digits);
83 0         0 push @b, sprintf "%02X", ($n) & 0xFF;
84 0         0 push @b, sprintf "%02X", ( $n >> 8 ) & 0xFF;
85 0         0 push @b, sprintf "%02X", ( $n >> 16 ) & 0xFF;
86 0         0 push @b, sprintf "%02X", ( $n >> 24 ) & 0xFF;
87             }
88 0         0 return @b;
89             }
90              
91             sub _fumigate {
92 0     0   0 my (@bytes) = @_;
93 1     1   313 use integer;
  1         7  
  1         4  
94 0         0 my $i = 0;
95 0         0 my $sum = 0;
96 0         0 for my $byte (@bytes) {
97 0         0 my $lshifter = $i * 8;
98 0         0 my $shifted = 1 << $lshifter;
99 0         0 my $n = _crop_duster($byte) << $lshifter;
100 0         0 my $m = ( $n + $shifted + 0xFFFFFFFF ) | ( -1 - $sum );
101 0         0 $sum += $m - $shifted - $n + 1;
102 0         0 ++$i;
103             }
104 0         0 return $sum;
105             }
106              
107             sub _crop_duster {
108 0     0   0 my $i = shift;
109 1     1   122 use integer;
  1         1  
  1         3  
110 0         0 my $a = $i * 0xFFFFFA29 + 0x307E;
111 0         0 my $b = ( $i * 0xFFF38978 + 0x2327B048 ) ^ ( $a | 0xFF );
112 0         0 my $c = ( $a | ( $i * 0xC7688 + 0xDCD84FB7 ) ) | 0xFF;
113 0         0 return $i * 0xC70B1 + $b * 0xFFFFFFFF + $c * 0xFFFFFFFE + 0xDCD88033;
114             }
115              
116             #-------------- class member methods ---------------------#
117              
118             sub new {
119 1     1 1 43 my ( $class, %args ) = @_;
120 1         4 my $self = {};
121 1         3 bless( $self, $class );
122              
123 1         7 $self->{DEBUG} = $args{DEBUG};
124              
125             # iTMS crypt-apple-twofish scrambler
126 1         4 $self->{key} = $args{key};
127              
128             # iTunes veggie tales scrambler
129 1         2 $self->{veggie} = $args{veggie};
130 1         4 $self->{byte_table} = $args{byte_table};
131 1         2 $self->{int_table} = $args{int_table};
132 1         4 $self->{hwID} = $args{hwID};
133 1         3 $self->{keyID} = $args{keyID};
134 1         3 $self->{userID} = $args{userID};
135              
136 1         25 return $self;
137             }
138              
139             #------------ iTMS methods ---------------------------------#
140              
141             sub _process_iTMS_key {
142 1     1   3 my ($self) = @_;
143 1         2 my $k = '';
144 1         3 my $key = $self->{key};
145 1         2 my $siz = length $key;
146 1         5 for ( my $i = 0 ; $i < $siz ; $i++ ) {
147 16         153 $k .= chr $apple_tf_iTMS[ $i % 16 ]->[ ord substr( $key, $i % 16, 1 ) ];
148             }
149 1         4 return $k;
150             }
151              
152 1     1 1 1357 sub decrypted_for_iTMS { return shift->_process_iTMS_key() }
153              
154             sub _process_DRMS_key {
155 0     0     my ($self) = @_;
156 0           my $k = '';
157 0           my $key = $self->{key};
158 0           my $siz = length $key;
159 0           for ( my $i = 0 ; $i < $siz ; $i++ ) {
160 0           $k .= chr $apple_tf_DRMS[ $i % 16 ]->[ ord substr( $key, $i % 16, 1 ) ];
161             }
162 0           return $k;
163             }
164              
165 0     0 1   sub decrypted_for_DRMS { return shift->_process_DRMS_key() }
166              
167             #-------------- SC Info methods -------------------------------------#
168              
169             sub key {
170 0     0 1   my ( $self, $new_key ) = @_;
171 0 0         $self->{key} = $new_key if defined $new_key;
172 0           return $self->{key};
173             }
174              
175             sub int_table {
176 0     0 1   my ( $self, $new_table ) = @_;
177 0 0         $self->{int_table} = $new_table if defined $new_table;
178 0           return $self->{int_table};
179             }
180              
181             sub byte_table {
182 0     0 1   my ( $self, $new_table ) = @_;
183 0 0         $self->{byte_table} = $new_table if defined $new_table;
184 0           return $self->{byte_table};
185             }
186              
187             sub veggie {
188 0     0 1   my ( $self, $new_veg ) = @_;
189 0 0         $self->{veggie} = $new_veg if defined $new_veg;
190 0           return $self->{veggie};
191             }
192              
193             sub hwID {
194 0     0 1   my ( $self, $newhwID ) = @_;
195 0 0         $self->{hwID} = $newhwID if defined $newhwID;
196 0           return $self->{hwID};
197             }
198              
199             sub keyID {
200 0     0 1   my ( $self, $newkeyID ) = @_;
201 0 0         $self->{keyID} = $newkeyID if defined $newkeyID;
202 0           return $self->{keyID};
203             }
204              
205             sub userID {
206 0     0 1   my ( $self, $newuser ) = @_;
207 0 0         $self->{userID} = $newuser if defined $newuser;
208 0           return $self->{userID};
209             }
210              
211             sub _hoe_hoe_hoe {
212 0     0     my ( $self, $byte, $i, $j, $k, $n ) = @_;
213 1     1   1430 use integer;
  1         2  
  1         5  
214 0           my $offset = 0x24004;
215 0           my $table_idx =
216             ord( $self->{byte_table}->[ $i * 0x100 + $byte + $offset ] ) + $j * 0x100;
217 0           return ( $planter_table[$table_idx] * $k + $n ) & 0xFF;
218             }
219              
220             sub plant_veggies {
221 0     0 1   my ($self) = @_;
222 0           my $table = $self->{int_table};
223 0           my $combine =
224             _combine_keys( $self->{hwID}, $self->{keyID}, $self->{userID} );
225 0           $self->{combine_key} = $combine;
226 0           my @bytes = map { ord } split //, $combine;
  0            
227 1     1   380 use integer;
  1         2  
  1         4  
228 0           for my $i ( 0 .. 8 ) {
229 0           my @planter;
230 0           for my $j ( 0 .. 15 ) {
231 0           my $idx = $i * 0x1000 + $j * 0x100 + $bytes[ ( $j * 5 ) & 0xF ];
232 0           $planter[$j] = $table->[$idx] * 0x50A19981 + 0x5E39C9C0;
233             }
234 0           for my $j ( 0 .. 3 ) {
235 0           my $a = $planter[ $j * 4 ];
236 0           my $b = $planter[ $j * 4 + 1 ];
237 0           my $c = $planter[ $j * 4 + 2 ];
238 0           my $d = $planter[ $j * 4 + 3 ];
239 0           my $e = _compost_cow($c) | _compost_cow($b);
240 0           my $f = _compost_horse( $b, $c, $e ) | _compost_cow($d);
241 0           my $g = _compost_sheep( $b, $c, $d, $e, $f ) | _compost_cow($a);
242 0           my $h =
243             ( $a + $b + $c + $d + ( $e + $f + $g ) * 0xD3F0627F + 0x8DC2C100 )
244             * 0x2E895D7F + 0xC99394FF;
245              
246 0           for my $k ( 0 .. 3 ) {
247 0           $bytes[ $j * 4 + $k ] = ( $h >> ( 24 - $k * 8 ) ) & 0xFF;
248             }
249             }
250             }
251 0 0         print "\nprecultivation bytes are ", ( join q{}, map { chr } @bytes ), "\n"
  0            
252             if $self->{DEBUG};
253 0           $bytes[0] = $self->_hoe_hoe_hoe( $bytes[0], 0, 2, 0x99, 0xDF );
254 0           $bytes[4] = $self->_hoe_hoe_hoe( $bytes[4], 4, 3, 0xB5, 0xFF );
255 0           $bytes[8] = $self->_hoe_hoe_hoe( $bytes[8], 8, 4, 0x59, 0xD3 );
256 0           $bytes[12] = $self->_hoe_hoe_hoe( $bytes[12], 12, 5, 0x2F, 0x1E );
257 0           my $tmp = $bytes[1];
258 0           $bytes[1] = $self->_hoe_hoe_hoe( $bytes[5], 1, 6, 0x95, 0xFC );
259 0           $bytes[5] = $self->_hoe_hoe_hoe( $bytes[9], 5, 7, 0x05, 0x36 );
260 0           $bytes[9] = $self->_hoe_hoe_hoe( $bytes[13], 9, 0, 0x05, 0x6D );
261 0           $bytes[13] = $self->_hoe_hoe_hoe( $tmp, 13, 9, 0x05, 0xE1 );
262 0           $tmp = $bytes[2];
263 0           $bytes[2] = $self->_hoe_hoe_hoe( $bytes[10], 2, 10, 0x4D, 0xB0 );
264 0           $bytes[10] = $self->_hoe_hoe_hoe( $tmp, 10, 11, 0x0B, 0x2E );
265 0           $tmp = $bytes[6];
266 0           $bytes[6] = $self->_hoe_hoe_hoe( $bytes[14], 6, 12, 0x93, 0x4E );
267 0           $bytes[14] = $self->_hoe_hoe_hoe( $tmp, 14, 13, 0x9b, 0x75 );
268              
269 0           $tmp = $bytes[3];
270 0           $bytes[3] = $self->_hoe_hoe_hoe( $bytes[15], 3, 14, 0x93, 0xC8 );
271 0           $bytes[15] = $self->_hoe_hoe_hoe( $bytes[11], 15, 15, 0x33, 0x8B );
272 0           $bytes[11] = $self->_hoe_hoe_hoe( $bytes[7], 11, 1, 0x5B, 0x25 );
273 0           $bytes[7] = $self->_hoe_hoe_hoe( $tmp, 7, 8, 0xED, 0xC5 );
274 0 0         print "cultivated bytes are ", ( join q{}, map { chr } @bytes ), "\n"
  0            
275             if $self->{DEBUG};
276 0           return @bytes;
277             }
278              
279             sub harvest_veggies {
280 0     0 1   my ( $self, @bytes ) = @_;
281 0           my $veggie = $self->{veggie};
282              
283 1     1   1196 use integer;
  1         2  
  1         6  
284 0 0         if ( $veggie =~ m/carrot|garlic|potato|radish|tomato/ ) {
285 0           _till( \@bytes, $veggie );
286             }
287              
288 0           _weed( \@bytes, $veggie );
289 0           my $sha1 = Digest::SHA->new(1);
290 0           $sha1->add( $self->{combine_key} );
291 0           my @digest_bytes = map { ord } split //, $sha1->digest;
  0            
292 0           _weed( \@digest_bytes, 'pepcid' );
293              
294 0           for my $i ( 0 .. 13 ) {
295 0           my $a = $bytes[ $i + 2 ];
296 0           my $b = $digest_bytes[ $i + 1 ];
297 0           my $c = ( $a * 0xFFFF9129 + 0xA07E ) | 0xFF;
298 0           my $d = ( $a * 0xFFAD8735 + 0x109ABD82 ) ^ $c;
299 0           my $e = ( $a * 0xFFFF9129 + 0xA07E ) | ( $a * 0x5278CB + 0xEF65427D );
300 0           my $f = $e | 0xFF;
301 0           my $g = ( $b * 0xFFFFCB29 + 0x417E ) | 0xFF;
302 0           my $h = ( $b * 0xFFFFCB29 + 0x417E ) | ( $b * 0x698AC6 + 0xD597C97D );
303 0           my $j = $h | 0xFF;
304 0           my $k = ( $b * 0xFF96753A + 0x2A683682 ) ^ $g;
305 0           my $m =
306             ( $b * 0xD2ABDE + $j * 0xFFFFFFFC + $k * 0xFFFFFFFE + 0xAB3015F3 ) |
307             ( $a * 0xA413E8 + $d * 0xFFFFFFFE + $f * 0xFFFFFFFC + 0xDECBC5F3 );
308 0           $digest_bytes[ $i + 1 ] = (
309             (
310             $a * 0x3FC1ACD4 +
311             $b * 0x5B76357 +
312             ( $d + $k + $m ) * 0x71070EE7 +
313             ( $f + $j ) * 0xE20E1DCE + 0xB7ABCB54
314             )
315             ) & 0xFF;
316             }
317 0           my $a = ord substr $self->{hwID}, 4, 1;
318 0           my $b = $a * 0xFFFF9CFF + 0xB8FF;
319 0           my $c = $b | 0xFF;
320 0           my $d = $b | ( $a * 0x32FA52 + 0x21E2D7AB );
321 0           my $e = ( $a * 0xFFCD05AE + 0xDE1D2854 ) ^ $c;
322 0           my $f = $d | 0xFF;
323 0           my $nsize = ( $a * 0xFFCD68AF + $e + $f * 2 + 0xDE1C6F57 ) & 0x80000003 + 8;
324 1     1   3744 use bigint;
  1         6377  
  1         5  
325 0           my $ndigest_bytes = '0x' . join q{},
326             _dust( @digest_bytes[ 0 .. $nsize - 1 ] );
327 0           $ndigest_bytes = substr $ndigest_bytes, 0, ( $nsize * 2 ) + 2;
328 0           my $nd = Math::BigInt->new($ndigest_bytes);
329 0 0         my $nbytes_str = '0x' . join q{},
330 0           map { length $_ > 1 ? $_ : '0' . $_ } _dust(@bytes);
331 0           my $nbytes = Math::BigInt->new($nbytes_str);
332             # print "nbytes_str is $nbytes_str, nybytes is $nbytes\n" if $self->{DEBUG};
333 0           my $nB2 = 0xFFFFFFFFFFFFFFF9C31A00000000000933CCD065;
334 0           my $n00 = 0x100000000000000063CE600000000001DB577CE3F;
335 0           my $n1 = 1;
336 0           my $bits_in_digest = length( ( Math::BigInt->new($nd) )->as_bin ) - 2;
337              
338 0           for ( my $i = $bits_in_digest - 1 ; $i >= 0 ; --$i ) {
339 0           $n1 *= $n1;
340 0           $nbytes *= $nbytes;
341 0 0         if ( $nd & ( 1 << $i ) ) {
342 0           $n1 = $nbytes - $n1;
343 0           my $m = ( ( ( $n1 >> 159 ) * $n00 ) >> 161 ) * $nB2;
344 0           $n1 = ( $n1 - $m ) % $nB2;
345 0           $m = ( ( ( $nbytes >> 159 ) * $n00 )>> 161 ) * $nB2;
346 0           $nbytes = ( $nbytes - $m ) % $nB2;
347             }
348             else {
349 0           $nbytes -= $n1;
350 0           my $m = ( ( ( $nbytes >> 159 ) * $n00 ) >> 161 )* $nB2;
351 0           $nbytes = ( $nbytes - $m )% $nB2;
352 0           $m = ( ( ( $n1 >> 159 ) * $n00 ) >> 161 ) * $nB2;
353 0           $n1 -= $m;
354 0           $nbytes %= $nB2;
355             }
356             } # now $n1 is right
357 0           my @digits =
358             ( substr( ( Math::BigInt->new($n1) )->as_hex, 2 ) ) =~ m/[\d\w]{2}/g;
359 0           my $digit_count = scalar @digits;
360 0           my $digest_fodder = join q{}, map { chr( hex $_ ) } @digits;
  0            
361 0 0         if ( $digit_count < 32 ) {
362 0           my $zeroes = "\x00" x ( 32 - $digit_count );
363 0           $digest_fodder = $zeroes . $digest_fodder;
364             }
365 0           $sha1->reset;
366 0           $sha1->add($digest_fodder);
367 0           my $key_key = substr $sha1->digest, 1, 16;
368 0 0         print "The key key (for the priv keys) is $key_key\n" if $self->{DEBUG};
369 0           return $key_key;
370             }
371              
372             #------------- scramble tables --------------------------------------#
373              
374             @apple_tf_iTMS = (
375             [
376             4, 145, 105, 51, 65, 245, 121, 233, 87, 85, 24, 110, 118, 149,
377             117, 2, 83, 91, 246, 57, 53, 251, 126, 69, 129, 144, 199, 164,
378             198, 181, 132, 35, 206, 214, 21, 152, 146, 103, 93, 227, 23, 68,
379             44, 248, 169, 217, 50, 92, 131, 224, 14, 204, 140, 114, 124, 143,
380             120, 171, 56, 158, 232, 183, 48, 176, 37, 192, 41, 28, 36, 155,
381             231, 201, 221, 52, 189, 125, 122, 191, 242, 178, 249, 111, 109, 170,
382             6, 180, 237, 174, 254, 202, 17, 223, 230, 195, 141, 47, 67, 182,
383             99, 104, 15, 238, 45, 7, 27, 20, 166, 207, 159, 196, 244, 162,
384             133, 54, 138, 116, 8, 168, 156, 16, 0, 38, 148, 66, 19, 86,
385             115, 73, 239, 188, 136, 61, 108, 33, 247, 142, 193, 39, 90, 82,
386             34, 200, 197, 26, 88, 10, 25, 71, 1, 119, 130, 100, 98, 18,
387             154, 72, 106, 78, 70, 213, 173, 12, 229, 235, 228, 186, 77, 209,
388             84, 147, 160, 127, 76, 64, 139, 112, 60, 222, 177, 253, 49, 30,
389             81, 161, 13, 123, 243, 62, 212, 31, 97, 80, 250, 9, 225, 153,
390             40, 46, 172, 218, 220, 184, 63, 29, 102, 194, 22, 79, 59, 179,
391             96, 55, 11, 157, 175, 95, 113, 107, 185, 210, 208, 167, 236, 89,
392             32, 128, 137, 43, 241, 75, 150, 42, 135, 234, 215, 5, 187, 163,
393             151, 3, 94, 165, 203, 134, 211, 101, 216, 190, 58, 205, 219, 252,
394             74, 226, 255, 240,
395             ],
396             [
397             201, 226, 95, 10, 98, 222, 106, 146, 254, 86, 109, 137, 35, 39,
398             56, 243, 245, 241, 57, 181, 158, 250, 104, 89, 23, 154, 40, 42,
399             132, 179, 195, 48, 76, 22, 167, 34, 25, 68, 62, 58, 235, 209,
400             125, 221, 206, 174, 147, 242, 251, 194, 208, 220, 200, 63, 193, 11,
401             156, 9, 0, 4, 46, 164, 41, 144, 212, 38, 101, 90, 85, 117,
402             28, 186, 159, 18, 183, 173, 97, 213, 207, 94, 187, 72, 114, 157,
403             7, 6, 126, 53, 203, 121, 188, 171, 78, 54, 202, 100, 130, 172,
404             232, 227, 224, 233, 122, 19, 108, 236, 150, 69, 75, 43, 103, 142,
405             123, 70, 238, 45, 169, 211, 44, 120, 71, 140, 124, 148, 197, 133,
406             113, 163, 88, 216, 79, 175, 199, 234, 80, 99, 231, 110, 81, 92,
407             182, 37, 170, 155, 27, 84, 180, 33, 31, 111, 13, 2, 136, 127,
408             105, 196, 59, 102, 184, 249, 73, 165, 237, 185, 15, 160, 239, 112,
409             178, 162, 20, 47, 219, 192, 8, 66, 217, 161, 1, 55, 91, 177,
410             246, 26, 198, 191, 17, 83, 141, 93, 32, 21, 30, 61, 52, 253,
411             36, 96, 119, 116, 139, 252, 74, 51, 151, 145, 77, 255, 225, 176,
412             248, 12, 3, 152, 134, 240, 230, 60, 118, 5, 210, 190, 129, 244,
413             205, 14, 149, 166, 247, 204, 67, 189, 50, 153, 131, 135, 143, 214,
414             128, 223, 229, 228, 64, 218, 138, 87, 29, 49, 168, 82, 215, 65,
415             115, 107, 16, 24,
416             ],
417             [
418             208, 110, 109, 139, 9, 100, 10, 132, 96, 133, 5, 220, 250, 92,
419             36, 61, 244, 117, 171, 68, 52, 8, 144, 162, 146, 67, 107, 200,
420             240, 147, 213, 54, 253, 72, 85, 234, 11, 29, 38, 178, 184, 91,
421             44, 215, 202, 101, 247, 46, 190, 1, 88, 229, 173, 114, 16, 99,
422             104, 26, 186, 148, 89, 183, 137, 53, 185, 206, 175, 164, 218, 20,
423             225, 87, 231, 57, 121, 168, 3, 120, 254, 83, 28, 80, 201, 60,
424             158, 76, 39, 0, 243, 166, 204, 49, 189, 82, 255, 95, 62, 97,
425             69, 224, 63, 156, 154, 199, 246, 212, 237, 56, 32, 149, 176, 163,
426             228, 252, 211, 24, 214, 188, 14, 222, 84, 138, 221, 203, 55, 122,
427             35, 58, 127, 22, 71, 34, 170, 210, 98, 7, 31, 226, 43, 151,
428             191, 59, 152, 23, 90, 66, 42, 223, 12, 187, 33, 130, 118, 113,
429             41, 245, 6, 48, 238, 81, 242, 141, 78, 161, 21, 179, 103, 249,
430             65, 216, 4, 155, 77, 159, 25, 18, 251, 174, 239, 111, 169, 73,
431             230, 209, 241, 129, 160, 196, 2, 192, 150, 47, 45, 125, 75, 30,
432             182, 51, 124, 13, 37, 227, 123, 15, 108, 126, 233, 248, 207, 119,
433             131, 70, 136, 74, 180, 153, 172, 181, 193, 219, 217, 195, 236, 17,
434             143, 79, 102, 19, 128, 235, 198, 27, 115, 194, 112, 177, 157, 165,
435             94, 140, 86, 93, 142, 64, 145, 105, 205, 135, 106, 232, 116, 167,
436             50, 197, 134, 40,
437             ],
438             [
439             117, 161, 170, 193, 109, 111, 58, 80, 55, 160, 8, 56, 106, 239,
440             53, 247, 128, 65, 232, 173, 74, 105, 244, 188, 233, 190, 49, 159,
441             210, 110, 212, 137, 92, 60, 67, 18, 107, 100, 115, 211, 185, 27,
442             31, 230, 7, 32, 102, 77, 44, 199, 217, 13, 150, 252, 23, 62,
443             200, 255, 0, 29, 54, 36, 103, 12, 162, 133, 191, 57, 240, 242,
444             2, 94, 194, 28, 147, 157, 192, 213, 6, 43, 204, 154, 51, 153,
445             222, 121, 11, 254, 151, 180, 71, 172, 225, 123, 127, 97, 25, 171,
446             249, 79, 227, 40, 136, 177, 4, 229, 35, 243, 195, 39, 120, 168,
447             138, 9, 148, 184, 5, 113, 218, 101, 45, 186, 140, 85, 143, 253,
448             181, 63, 228, 134, 75, 112, 219, 95, 108, 96, 33, 201, 37, 3,
449             165, 226, 182, 175, 14, 223, 235, 87, 93, 251, 198, 231, 183, 205,
450             220, 206, 16, 84, 119, 26, 238, 15, 73, 126, 82, 78, 86, 88,
451             207, 141, 118, 89, 10, 236, 68, 216, 187, 114, 130, 144, 131, 59,
452             64, 164, 241, 189, 214, 42, 41, 224, 197, 245, 208, 237, 48, 24,
453             76, 129, 19, 1, 135, 30, 125, 38, 90, 99, 209, 166, 149, 47,
454             83, 174, 203, 234, 46, 132, 142, 98, 202, 50, 81, 91, 248, 34,
455             246, 250, 66, 196, 124, 69, 156, 22, 158, 145, 167, 176, 152, 17,
456             221, 179, 52, 70, 104, 163, 61, 116, 139, 20, 146, 21, 215, 178,
457             72, 122, 169, 155,
458             ],
459             [
460             12, 23, 233, 120, 139, 254, 24, 182, 41, 64, 69, 13, 98, 230,
461             65, 190, 251, 172, 115, 144, 71, 155, 79, 111, 97, 208, 19, 143,
462             192, 209, 219, 57, 250, 39, 119, 116, 34, 2, 134, 215, 84, 141,
463             61, 122, 59, 27, 92, 194, 50, 17, 72, 51, 93, 245, 96, 177,
464             117, 226, 83, 153, 135, 88, 175, 74, 160, 32, 29, 252, 110, 213,
465             114, 229, 63, 66, 1, 113, 179, 176, 62, 90, 253, 157, 21, 5,
466             60, 94, 15, 185, 180, 168, 235, 241, 107, 220, 9, 127, 99, 217,
467             211, 76, 212, 188, 45, 0, 68, 26, 161, 75, 149, 239, 178, 35,
468             10, 214, 218, 131, 159, 20, 224, 30, 199, 148, 163, 228, 195, 58,
469             78, 128, 154, 54, 193, 123, 101, 255, 196, 244, 125, 25, 67, 187,
470             234, 170, 55, 186, 231, 236, 87, 232, 104, 124, 103, 11, 207, 80,
471             138, 95, 109, 38, 223, 202, 47, 173, 189, 204, 4, 147, 150, 200,
472             248, 167, 43, 40, 142, 133, 203, 53, 174, 22, 158, 171, 184, 7,
473             242, 183, 197, 44, 249, 89, 81, 121, 85, 246, 164, 210, 166, 82,
474             52, 18, 31, 151, 206, 49, 46, 238, 145, 240, 14, 130, 112, 3,
475             77, 100, 205, 191, 243, 16, 8, 56, 106, 28, 225, 181, 108, 227,
476             136, 221, 48, 237, 73, 146, 37, 91, 105, 6, 42, 118, 36, 33,
477             137, 156, 247, 222, 216, 165, 86, 152, 140, 129, 169, 70, 126, 162,
478             198, 132, 201, 102,
479             ],
480             [
481             32, 147, 54, 169, 8, 64, 100, 21, 49, 220, 73, 79, 236, 154,
482             232, 210, 14, 132, 204, 188, 39, 241, 121, 170, 237, 224, 95, 126,
483             130, 173, 211, 53, 19, 151, 202, 68, 219, 226, 229, 139, 22, 103,
484             96, 15, 93, 1, 182, 111, 145, 52, 2, 149, 218, 84, 255, 207,
485             125, 178, 233, 90, 28, 118, 193, 69, 75, 209, 5, 253, 26, 194,
486             82, 197, 98, 248, 114, 215, 55, 243, 222, 57, 133, 245, 199, 51,
487             144, 198, 244, 59, 179, 16, 3, 161, 155, 200, 213, 30, 61, 252,
488             135, 235, 146, 136, 143, 33, 113, 124, 203, 206, 94, 238, 105, 36,
489             189, 24, 142, 186, 223, 87, 166, 76, 181, 81, 184, 160, 176, 104,
490             46, 175, 44, 120, 85, 20, 177, 138, 190, 56, 65, 71, 4, 106,
491             196, 134, 247, 108, 60, 109, 246, 48, 153, 119, 62, 122, 250, 195,
492             234, 163, 74, 140, 31, 180, 63, 92, 230, 35, 101, 227, 158, 0,
493             9, 13, 167, 239, 89, 17, 67, 38, 43, 192, 7, 29, 70, 137,
494             240, 102, 117, 12, 172, 187, 34, 171, 99, 141, 150, 165, 97, 41,
495             127, 66, 159, 91, 216, 83, 225, 6, 212, 47, 107, 164, 205, 152,
496             251, 40, 249, 115, 191, 208, 214, 86, 37, 156, 128, 25, 88, 183,
497             116, 129, 77, 157, 112, 221, 45, 174, 50, 123, 217, 27, 18, 168,
498             201, 72, 185, 131, 78, 11, 148, 58, 23, 42, 162, 228, 10, 80,
499             242, 110, 231, 254,
500             ],
501             [
502             240, 192, 203, 158, 19, 171, 135, 225, 193, 126, 67, 121, 100, 246,
503             186, 195, 233, 7, 131, 55, 166, 39, 14, 64, 167, 173, 188, 127,
504             160, 125, 59, 57, 237, 26, 56, 241, 189, 137, 23, 34, 86, 185,
505             37, 44, 17, 8, 245, 165, 80, 35, 199, 175, 169, 43, 48, 176,
506             92, 0, 210, 178, 238, 198, 208, 224, 105, 216, 141, 95, 150, 140,
507             236, 249, 235, 129, 106, 138, 134, 103, 10, 73, 13, 212, 143, 219,
508             211, 252, 112, 229, 142, 155, 108, 183, 244, 170, 18, 128, 184, 214,
509             96, 149, 254, 82, 88, 116, 230, 97, 40, 60, 78, 79, 177, 85,
510             205, 6, 242, 49, 218, 123, 239, 54, 201, 72, 151, 221, 107, 132,
511             75, 84, 94, 154, 182, 215, 174, 248, 213, 99, 28, 231, 22, 70,
512             157, 164, 41, 172, 253, 5, 191, 200, 98, 247, 45, 163, 32, 223,
513             24, 227, 89, 161, 16, 251, 130, 104, 30, 120, 145, 91, 52, 65,
514             122, 4, 27, 93, 111, 124, 181, 250, 255, 217, 21, 29, 179, 190,
515             206, 33, 196, 168, 46, 102, 71, 66, 81, 87, 76, 68, 147, 162,
516             20, 207, 234, 117, 133, 36, 180, 204, 226, 209, 50, 159, 25, 119,
517             101, 197, 15, 2, 202, 232, 31, 11, 113, 194, 38, 243, 9, 51,
518             69, 61, 62, 58, 12, 228, 144, 115, 1, 42, 83, 156, 220, 3,
519             109, 77, 114, 152, 187, 74, 146, 47, 136, 110, 90, 63, 222, 139,
520             148, 153, 53, 118,
521             ],
522             [
523             159, 5, 106, 136, 30, 230, 132, 176, 109, 91, 85, 66, 222, 112,
524             226, 71, 211, 245, 209, 34, 111, 197, 247, 26, 13, 153, 168, 215,
525             167, 121, 194, 203, 244, 239, 148, 126, 69, 80, 7, 115, 0, 33,
526             131, 208, 25, 94, 243, 249, 200, 97, 82, 8, 145, 221, 119, 207,
527             108, 22, 19, 163, 155, 198, 170, 35, 120, 107, 231, 89, 98, 156,
528             86, 4, 241, 195, 44, 157, 186, 224, 219, 164, 165, 54, 135, 143,
529             113, 116, 28, 59, 104, 90, 125, 227, 218, 139, 63, 216, 27, 225,
530             220, 166, 41, 151, 100, 75, 193, 37, 161, 150, 88, 129, 213, 16,
531             242, 147, 64, 49, 171, 117, 180, 29, 252, 192, 60, 238, 114, 237,
532             236, 14, 202, 79, 96, 240, 189, 9, 36, 196, 101, 2, 191, 68,
533             57, 124, 234, 250, 138, 46, 187, 123, 67, 253, 81, 174, 62, 210,
534             169, 205, 146, 51, 162, 199, 23, 72, 178, 179, 18, 160, 47, 184,
535             42, 65, 154, 38, 78, 92, 12, 20, 133, 223, 52, 11, 212, 177,
536             201, 48, 55, 102, 134, 251, 206, 141, 110, 128, 56, 137, 1, 74,
537             173, 158, 83, 255, 144, 181, 217, 17, 15, 127, 31, 190, 228, 24,
538             84, 93, 204, 182, 149, 73, 21, 248, 61, 233, 103, 122, 3, 152,
539             50, 140, 10, 39, 70, 118, 214, 142, 254, 229, 43, 32, 6, 45,
540             53, 235, 246, 183, 99, 232, 87, 95, 185, 76, 188, 105, 77, 175,
541             130, 40, 58, 172,
542             ],
543             [
544             211, 130, 35, 117, 136, 59, 57, 156, 143, 181, 42, 9, 63, 60,
545             132, 195, 150, 183, 221, 33, 249, 171, 226, 191, 111, 68, 194, 229,
546             20, 26, 77, 190, 179, 31, 86, 164, 103, 200, 122, 233, 167, 125,
547             159, 206, 168, 104, 36, 222, 232, 234, 65, 245, 127, 94, 0, 210,
548             14, 67, 4, 173, 16, 217, 186, 38, 92, 64, 43, 85, 71, 116,
549             30, 91, 45, 10, 53, 49, 121, 139, 120, 62, 113, 72, 254, 144,
550             198, 23, 185, 252, 214, 141, 225, 79, 46, 112, 172, 11, 27, 146,
551             81, 131, 74, 3, 213, 248, 95, 8, 138, 51, 238, 18, 239, 178,
552             123, 228, 37, 90, 100, 251, 157, 151, 166, 124, 187, 165, 203, 212,
553             240, 22, 73, 246, 48, 107, 34, 70, 61, 78, 227, 153, 97, 40,
554             101, 69, 21, 50, 155, 25, 66, 148, 175, 205, 242, 12, 87, 184,
555             55, 255, 76, 193, 28, 231, 58, 54, 17, 208, 137, 202, 133, 96,
556             236, 41, 80, 39, 174, 163, 98, 6, 158, 224, 169, 161, 47, 149,
557             147, 106, 189, 29, 89, 176, 152, 145, 83, 32, 2, 250, 52, 118,
558             220, 142, 192, 93, 196, 253, 82, 128, 56, 88, 170, 237, 218, 247,
559             140, 199, 204, 230, 7, 244, 209, 154, 15, 24, 201, 44, 99, 84,
560             223, 135, 182, 243, 180, 160, 177, 129, 19, 119, 102, 115, 5, 219,
561             235, 162, 109, 1, 13, 75, 241, 197, 216, 215, 126, 134, 114, 108,
562             105, 188, 110, 207,
563             ],
564             [
565             90, 102, 154, 161, 197, 61, 105, 120, 16, 230, 127, 128, 36, 23,
566             103, 92, 57, 212, 9, 169, 158, 123, 216, 232, 0, 231, 139, 153,
567             35, 104, 144, 116, 142, 150, 87, 49, 113, 94, 206, 55, 3, 51,
568             151, 84, 214, 133, 165, 201, 38, 60, 202, 54, 176, 119, 195, 166,
569             43, 252, 79, 72, 107, 21, 219, 227, 18, 233, 88, 213, 243, 75,
570             41, 143, 164, 160, 147, 46, 73, 225, 137, 210, 193, 240, 226, 152,
571             25, 218, 203, 101, 11, 254, 220, 141, 209, 135, 115, 207, 148, 248,
572             157, 156, 68, 236, 234, 228, 253, 196, 177, 63, 187, 12, 70, 204,
573             28, 114, 172, 200, 198, 31, 215, 8, 159, 122, 132, 222, 19, 149,
574             44, 191, 26, 45, 7, 124, 192, 171, 67, 29, 69, 24, 10, 199,
575             100, 173, 6, 98, 244, 89, 34, 81, 181, 255, 80, 40, 109, 74,
576             211, 188, 118, 58, 130, 30, 239, 138, 71, 251, 146, 145, 242, 163,
577             246, 66, 235, 97, 245, 167, 178, 241, 249, 221, 247, 53, 62, 121,
578             237, 117, 110, 140, 131, 184, 2, 1, 48, 76, 217, 112, 136, 15,
579             223, 78, 64, 99, 20, 205, 86, 83, 185, 174, 37, 183, 82, 13,
580             65, 129, 125, 134, 186, 208, 27, 47, 190, 126, 52, 85, 155, 93,
581             50, 22, 106, 224, 194, 180, 238, 95, 108, 96, 59, 111, 17, 182,
582             162, 250, 56, 91, 32, 5, 175, 77, 42, 229, 39, 170, 14, 168,
583             4, 189, 33, 179,
584             ],
585             [
586             164, 73, 41, 48, 14, 20, 92, 34, 57, 198, 27, 107, 119, 243,
587             188, 140, 122, 97, 127, 62, 19, 46, 146, 224, 77, 245, 225, 210,
588             123, 230, 26, 176, 191, 6, 169, 89, 218, 180, 227, 182, 148, 120,
589             234, 108, 156, 209, 238, 167, 170, 183, 65, 186, 163, 141, 248, 145,
590             239, 112, 187, 247, 79, 195, 222, 184, 82, 244, 3, 181, 233, 241,
591             11, 236, 161, 5, 117, 153, 175, 205, 152, 98, 85, 76, 162, 40,
592             37, 229, 64, 160, 72, 24, 157, 135, 16, 172, 174, 0, 90, 4,
593             190, 86, 61, 31, 80, 249, 149, 151, 166, 138, 133, 110, 197, 189,
594             171, 78, 52, 214, 173, 54, 226, 116, 237, 32, 179, 105, 22, 70,
595             150, 254, 131, 137, 12, 36, 235, 255, 66, 60, 147, 193, 109, 211,
596             240, 212, 199, 38, 228, 154, 10, 30, 178, 42, 7, 43, 88, 75,
597             130, 21, 47, 55, 231, 139, 124, 84, 177, 253, 196, 29, 102, 39,
598             206, 221, 232, 81, 125, 136, 202, 83, 59, 53, 99, 192, 201, 67,
599             216, 2, 94, 68, 33, 13, 159, 208, 242, 246, 69, 18, 185, 58,
600             63, 104, 9, 252, 158, 115, 8, 118, 103, 132, 100, 194, 91, 87,
601             142, 74, 213, 223, 106, 101, 165, 15, 251, 121, 25, 50, 51, 45,
602             168, 93, 113, 250, 204, 126, 35, 28, 49, 143, 56, 200, 219, 128,
603             17, 207, 95, 111, 215, 217, 96, 155, 144, 1, 129, 134, 220, 44,
604             71, 23, 203, 114,
605             ],
606             [
607             245, 217, 174, 135, 25, 2, 99, 176, 57, 159, 150, 226, 243, 205,
608             55, 109, 129, 203, 42, 253, 138, 105, 120, 111, 254, 74, 207, 110,
609             75, 147, 36, 81, 255, 172, 53, 160, 238, 3, 199, 119, 169, 103,
610             244, 197, 189, 45, 102, 193, 116, 232, 15, 16, 0, 41, 114, 167,
611             173, 247, 151, 158, 191, 101, 68, 60, 54, 154, 77, 61, 219, 96,
612             231, 182, 47, 156, 95, 155, 229, 82, 195, 26, 44, 89, 29, 200,
613             56, 49, 22, 213, 87, 28, 124, 251, 133, 131, 126, 179, 225, 130,
614             220, 184, 67, 214, 187, 198, 65, 218, 175, 48, 234, 71, 141, 127,
615             241, 192, 212, 239, 123, 165, 27, 40, 107, 148, 34, 21, 108, 79,
616             227, 84, 221, 4, 181, 235, 90, 35, 223, 85, 104, 201, 233, 112,
617             106, 190, 118, 146, 216, 248, 33, 163, 8, 24, 73, 194, 246, 121,
618             117, 13, 140, 139, 149, 14, 37, 170, 98, 64, 128, 88, 91, 94,
619             228, 78, 144, 152, 166, 252, 153, 115, 157, 46, 93, 113, 58, 204,
620             177, 72, 188, 38, 183, 39, 11, 242, 145, 100, 164, 186, 132, 66,
621             80, 10, 230, 162, 23, 202, 209, 43, 69, 249, 30, 59, 224, 196,
622             211, 18, 178, 134, 208, 20, 125, 215, 83, 70, 122, 168, 62, 86,
623             92, 143, 19, 206, 237, 97, 236, 6, 185, 180, 52, 76, 137, 12,
624             136, 1, 51, 5, 171, 142, 161, 63, 7, 50, 210, 9, 240, 31,
625             250, 32, 222, 17,
626             ],
627             [
628             194, 224, 115, 126, 70, 203, 214, 192, 157, 97, 146, 200, 10, 61,
629             238, 129, 85, 84, 195, 50, 28, 218, 53, 136, 124, 169, 247, 229,
630             121, 88, 57, 252, 153, 137, 141, 199, 81, 201, 11, 227, 144, 130,
631             120, 234, 216, 98, 172, 119, 34, 46, 95, 44, 83, 249, 168, 72,
632             156, 237, 104, 245, 179, 63, 189, 239, 159, 29, 110, 71, 36, 162,
633             65, 20, 160, 147, 107, 246, 205, 251, 142, 17, 212, 230, 184, 235,
634             67, 41, 190, 128, 133, 92, 102, 25, 22, 58, 149, 161, 174, 196,
635             4, 86, 5, 26, 135, 7, 117, 167, 74, 62, 69, 170, 150, 176,
636             96, 166, 38, 106, 131, 180, 132, 202, 134, 191, 254, 158, 250, 233,
637             78, 89, 109, 197, 105, 64, 68, 178, 118, 240, 47, 56, 18, 209,
638             39, 100, 94, 24, 211, 173, 165, 45, 15, 12, 164, 3, 19, 48,
639             213, 220, 243, 30, 187, 111, 181, 35, 13, 140, 222, 186, 206, 151,
640             6, 113, 255, 145, 215, 54, 175, 55, 99, 125, 228, 27, 101, 217,
641             244, 9, 139, 207, 33, 138, 91, 198, 232, 177, 80, 93, 90, 73,
642             163, 122, 236, 14, 127, 226, 171, 66, 108, 219, 193, 112, 75, 40,
643             223, 248, 60, 79, 210, 123, 32, 116, 52, 2, 114, 87, 204, 148,
644             143, 241, 103, 1, 182, 42, 253, 59, 155, 188, 82, 76, 43, 49,
645             16, 37, 221, 183, 154, 185, 242, 8, 31, 77, 0, 208, 51, 152,
646             231, 21, 23, 225,
647             ],
648             [
649             110, 197, 222, 126, 246, 32, 225, 173, 0, 247, 204, 135, 35, 189,
650             87, 148, 73, 206, 43, 75, 140, 1, 12, 141, 58, 113, 103, 166,
651             20, 33, 236, 46, 172, 233, 229, 227, 85, 40, 152, 186, 223, 104,
652             88, 219, 97, 124, 255, 25, 47, 59, 116, 81, 2, 90, 107, 60,
653             214, 109, 19, 108, 6, 22, 41, 192, 48, 16, 61, 234, 155, 24,
654             118, 163, 147, 131, 7, 72, 251, 79, 17, 162, 242, 129, 171, 184,
655             240, 138, 199, 183, 30, 66, 217, 96, 212, 237, 21, 31, 74, 209,
656             28, 64, 82, 52, 123, 70, 94, 198, 119, 182, 78, 29, 150, 228,
657             49, 5, 196, 215, 62, 9, 133, 232, 65, 105, 159, 137, 180, 93,
658             51, 188, 208, 136, 158, 181, 231, 8, 80, 4, 250, 13, 193, 125,
659             106, 11, 176, 156, 53, 54, 143, 86, 177, 55, 239, 167, 202, 44,
660             238, 226, 187, 221, 15, 134, 178, 244, 216, 99, 114, 207, 102, 38,
661             100, 146, 175, 200, 57, 151, 149, 203, 69, 169, 128, 160, 121, 63,
662             161, 10, 224, 120, 190, 36, 249, 27, 243, 77, 185, 245, 92, 98,
663             254, 165, 18, 101, 145, 170, 195, 39, 174, 76, 252, 95, 130, 248,
664             111, 83, 179, 230, 91, 68, 218, 112, 210, 211, 235, 122, 37, 14,
665             115, 220, 45, 127, 213, 164, 132, 89, 168, 50, 84, 3, 191, 139,
666             157, 154, 194, 205, 67, 201, 142, 34, 153, 117, 26, 71, 241, 144,
667             23, 56, 42, 253,
668             ],
669             [
670             175, 153, 20, 104, 23, 169, 5, 110, 234, 70, 161, 46, 210, 75,
671             254, 174, 133, 225, 237, 118, 88, 59, 224, 68, 111, 69, 143, 87,
672             215, 248, 36, 7, 168, 138, 177, 184, 229, 121, 142, 152, 77, 117,
673             182, 43, 85, 176, 127, 12, 82, 81, 188, 231, 151, 226, 14, 65,
674             228, 206, 38, 211, 204, 124, 180, 19, 22, 191, 157, 27, 9, 49,
675             72, 63, 24, 48, 141, 134, 186, 18, 159, 230, 56, 219, 119, 245,
676             171, 105, 30, 158, 26, 155, 189, 160, 57, 249, 207, 123, 112, 165,
677             251, 131, 154, 29, 95, 172, 192, 200, 6, 67, 92, 106, 144, 255,
678             220, 198, 223, 140, 147, 130, 167, 145, 61, 190, 54, 240, 202, 0,
679             13, 8, 58, 193, 238, 212, 203, 62, 129, 173, 93, 187, 102, 214,
680             45, 47, 32, 40, 178, 170, 185, 205, 78, 218, 103, 99, 16, 21,
681             52, 3, 42, 243, 71, 86, 94, 196, 120, 89, 232, 31, 28, 73,
682             74, 90, 128, 137, 241, 217, 108, 76, 60, 209, 247, 183, 44, 55,
683             125, 79, 4, 156, 233, 239, 216, 235, 98, 11, 15, 132, 181, 163,
684             194, 222, 2, 17, 242, 96, 64, 35, 50, 246, 33, 115, 236, 139,
685             164, 197, 53, 150, 135, 80, 84, 213, 113, 100, 107, 136, 208, 114,
686             97, 166, 83, 25, 41, 66, 109, 10, 122, 1, 51, 91, 37, 250,
687             146, 195, 148, 116, 227, 244, 199, 252, 39, 253, 126, 179, 201, 149,
688             221, 162, 34, 101,
689             ],
690             [
691             10, 243, 251, 143, 29, 186, 72, 113, 185, 127, 94, 13, 47, 220,
692             193, 188, 77, 207, 160, 181, 49, 116, 238, 81, 165, 85, 204, 100,
693             153, 123, 236, 163, 159, 109, 3, 158, 133, 69, 192, 12, 125, 73,
694             48, 215, 247, 245, 103, 146, 219, 168, 30, 52, 40, 120, 218, 101,
695             140, 230, 224, 86, 58, 20, 149, 21, 114, 203, 142, 172, 104, 5,
696             174, 19, 75, 87, 56, 148, 107, 232, 96, 4, 248, 129, 92, 246,
697             183, 249, 170, 57, 214, 226, 150, 198, 144, 175, 110, 179, 233, 83,
698             212, 16, 61, 71, 234, 59, 205, 45, 74, 36, 216, 34, 65, 119,
699             162, 190, 66, 115, 8, 196, 27, 237, 176, 95, 197, 68, 76, 63,
700             108, 189, 97, 223, 187, 222, 79, 173, 199, 126, 253, 89, 42, 156,
701             241, 18, 43, 182, 200, 152, 50, 24, 23, 221, 70, 250, 157, 41,
702             124, 136, 178, 208, 90, 225, 244, 255, 184, 64, 210, 195, 62, 44,
703             145, 78, 84, 242, 28, 130, 93, 213, 155, 132, 60, 154, 161, 25,
704             167, 105, 39, 164, 7, 202, 91, 211, 0, 118, 106, 235, 254, 191,
705             31, 147, 135, 131, 239, 228, 82, 122, 171, 26, 138, 134, 128, 121,
706             33, 53, 54, 169, 88, 112, 55, 6, 117, 102, 252, 2, 206, 17,
707             1, 32, 227, 98, 99, 11, 15, 14, 80, 35, 177, 22, 51, 9,
708             180, 166, 46, 209, 111, 151, 194, 38, 37, 229, 141, 201, 67, 137,
709             240, 139, 231, 217,
710             ]
711             );
712              
713             @apple_tf_DRMS = (
714             [
715             157, 170, 213, 240, 230, 43, 19, 202, 225, 32, 247, 42, 63, 160,
716             132, 182, 233, 244, 228, 187, 104, 245, 198, 140, 46, 231, 72, 16,
717             83, 212, 24, 224, 156, 229, 163, 175, 162, 218, 54, 249, 30, 250,
718             185, 35, 118, 189, 171, 139, 4, 8, 103, 253, 211, 21, 141, 20,
719             165, 128, 146, 243, 114, 2, 93, 242, 10, 74, 84, 121, 34, 3,
720             36, 81, 252, 1, 14, 69, 108, 91, 246, 110, 92, 6, 119, 207,
721             248, 38, 130, 55, 251, 194, 28, 180, 201, 178, 148, 67, 236, 107,
722             22, 222, 147, 142, 18, 123, 197, 59, 190, 78, 125, 109, 127, 186,
723             237, 66, 5, 234, 137, 100, 169, 52, 85, 117, 80, 70, 7, 60,
724             105, 183, 138, 0, 235, 23, 145, 47, 129, 62, 77, 232, 149, 203,
725             172, 12, 68, 181, 73, 255, 133, 53, 40, 45, 15, 150, 82, 90,
726             155, 79, 238, 111, 113, 112, 71, 39, 88, 196, 205, 199, 27, 195,
727             215, 239, 41, 241, 122, 57, 217, 184, 191, 44, 177, 216, 11, 226,
728             65, 50, 76, 95, 158, 136, 159, 210, 254, 134, 151, 98, 61, 89,
729             164, 86, 33, 208, 99, 209, 152, 97, 179, 37, 168, 223, 31, 102,
730             144, 167, 51, 192, 87, 166, 116, 49, 188, 13, 200, 221, 25, 9,
731             64, 153, 219, 154, 94, 214, 204, 131, 220, 26, 75, 29, 227, 161,
732             48, 174, 101, 124, 176, 193, 56, 96, 58, 206, 135, 17, 115, 173,
733             126, 120, 143, 106,
734             ],
735             [
736             79, 114, 199, 94, 3, 36, 212, 117, 193, 121, 182, 76, 32, 137,
737             190, 231, 104, 248, 210, 58, 213, 33, 21, 246, 101, 252, 46, 229,
738             133, 203, 96, 165, 177, 53, 119, 171, 255, 127, 204, 161, 45, 24,
739             184, 111, 34, 55, 61, 168, 202, 200, 169, 20, 142, 245, 150, 19,
740             4, 174, 77, 164, 62, 145, 48, 41, 100, 249, 197, 147, 159, 240,
741             113, 99, 72, 124, 30, 154, 196, 211, 74, 223, 0, 80, 207, 40,
742             185, 17, 37, 81, 15, 110, 148, 152, 160, 106, 85, 130, 225, 22,
743             131, 47, 235, 52, 233, 189, 179, 68, 221, 51, 218, 173, 146, 97,
744             181, 50, 157, 149, 14, 122, 241, 54, 59, 162, 89, 60, 87, 214,
745             39, 134, 69, 5, 250, 139, 216, 11, 56, 31, 198, 155, 129, 67,
746             128, 236, 232, 175, 105, 13, 84, 143, 95, 209, 75, 98, 219, 43,
747             224, 6, 156, 239, 27, 244, 208, 205, 222, 25, 103, 135, 188, 86,
748             26, 228, 220, 2, 215, 8, 153, 186, 115, 191, 195, 194, 243, 237,
749             170, 126, 178, 227, 163, 102, 91, 88, 254, 12, 38, 66, 44, 63,
750             82, 151, 23, 35, 238, 242, 206, 118, 73, 16, 29, 158, 172, 132,
751             42, 57, 138, 247, 234, 166, 176, 125, 116, 141, 107, 49, 78, 1,
752             136, 217, 90, 109, 83, 192, 10, 187, 9, 120, 108, 123, 7, 28,
753             144, 70, 230, 140, 18, 93, 183, 65, 180, 167, 64, 71, 253, 226,
754             201, 251, 92, 112,
755             ],
756             [
757             234, 49, 53, 46, 190, 129, 148, 57, 174, 159, 74, 24, 51, 87,
758             76, 40, 208, 196, 173, 91, 115, 82, 149, 120, 206, 68, 62, 10,
759             204, 209, 79, 253, 108, 188, 214, 104, 243, 36, 164, 160, 21, 230,
760             19, 7, 229, 61, 23, 111, 84, 151, 201, 71, 94, 152, 210, 17,
761             197, 205, 89, 232, 3, 156, 72, 241, 220, 14, 8, 31, 179, 101,
762             110, 213, 216, 116, 75, 170, 70, 222, 227, 142, 73, 6, 48, 167,
763             103, 117, 223, 171, 123, 128, 114, 38, 130, 145, 225, 132, 168, 240,
764             112, 127, 247, 133, 161, 252, 172, 97, 88, 238, 184, 194, 125, 180,
765             249, 66, 106, 9, 99, 203, 144, 33, 29, 195, 69, 22, 126, 176,
766             154, 45, 13, 32, 131, 166, 44, 81, 119, 18, 221, 52, 12, 39,
767             41, 11, 92, 139, 30, 255, 98, 34, 2, 153, 83, 212, 181, 86,
768             100, 239, 236, 85, 27, 54, 141, 102, 250, 182, 163, 147, 96, 215,
769             157, 122, 124, 224, 56, 113, 134, 25, 136, 107, 242, 146, 178, 219,
770             26, 158, 155, 198, 20, 246, 50, 16, 43, 67, 237, 193, 254, 15,
771             140, 95, 1, 42, 105, 137, 218, 60, 187, 231, 47, 217, 202, 162,
772             251, 80, 59, 207, 192, 183, 135, 118, 169, 175, 77, 226, 248, 244,
773             78, 55, 233, 186, 211, 235, 63, 200, 121, 191, 245, 4, 150, 5,
774             109, 189, 143, 0, 185, 28, 37, 93, 35, 199, 90, 165, 138, 65,
775             177, 228, 58, 64,
776             ],
777             [
778             45, 196, 144, 81, 131, 53, 52, 59, 178, 174, 191, 237, 219, 186,
779             109, 125, 247, 235, 19, 106, 1, 165, 95, 221, 38, 63, 117, 83,
780             244, 65, 4, 139, 172, 26, 103, 159, 194, 220, 211, 160, 189, 13,
781             47, 3, 223, 215, 119, 147, 50, 200, 171, 156, 225, 184, 89, 201,
782             169, 222, 78, 175, 255, 98, 15, 182, 116, 213, 10, 249, 66, 21,
783             56, 48, 167, 203, 168, 240, 105, 33, 154, 5, 73, 46, 254, 241,
784             31, 14, 180, 128, 0, 101, 87, 24, 68, 96, 107, 11, 2, 157,
785             40, 250, 121, 236, 227, 140, 60, 64, 239, 115, 177, 179, 207, 246,
786             198, 197, 166, 173, 233, 8, 202, 146, 205, 111, 170, 104, 248, 120,
787             187, 155, 35, 55, 88, 90, 138, 152, 126, 6, 148, 110, 22, 86,
788             145, 124, 224, 84, 62, 242, 39, 228, 135, 51, 85, 232, 226, 41,
789             77, 230, 37, 190, 231, 133, 153, 9, 113, 57, 118, 93, 130, 143,
790             134, 58, 7, 245, 70, 23, 36, 76, 199, 20, 183, 43, 163, 192,
791             136, 185, 92, 209, 72, 195, 204, 97, 251, 216, 44, 214, 149, 34,
792             164, 114, 181, 122, 82, 99, 100, 75, 253, 30, 218, 25, 29, 229,
793             162, 91, 71, 69, 210, 137, 27, 142, 243, 234, 42, 238, 102, 123,
794             17, 193, 28, 151, 217, 252, 80, 61, 212, 54, 176, 94, 79, 18,
795             67, 150, 12, 188, 49, 74, 127, 112, 208, 108, 141, 132, 32, 129,
796             161, 158, 16, 206,
797             ],
798             [
799             240, 230, 183, 118, 16, 224, 217, 82, 219, 153, 156, 157, 5, 126,
800             100, 172, 72, 160, 105, 176, 89, 63, 149, 91, 233, 4, 18, 192,
801             211, 216, 191, 46, 99, 236, 200, 19, 25, 179, 62, 64, 71, 142,
802             237, 202, 108, 28, 54, 234, 181, 50, 162, 39, 167, 141, 81, 229,
803             13, 185, 151, 83, 205, 186, 44, 196, 210, 125, 146, 111, 165, 178,
804             35, 218, 103, 171, 119, 120, 2, 43, 7, 148, 116, 93, 32, 24,
805             56, 232, 169, 70, 33, 241, 137, 253, 6, 98, 94, 128, 154, 96,
806             17, 166, 66, 107, 67, 104, 212, 209, 40, 174, 213, 235, 51, 132,
807             138, 255, 12, 21, 227, 190, 117, 173, 86, 163, 87, 225, 193, 0,
808             244, 27, 243, 135, 139, 215, 187, 246, 97, 75, 80, 175, 206, 76,
809             189, 170, 38, 9, 238, 144, 223, 79, 124, 101, 251, 22, 129, 3,
810             204, 214, 90, 220, 77, 195, 26, 140, 134, 58, 112, 152, 59, 57,
811             68, 95, 245, 222, 41, 11, 31, 55, 113, 102, 208, 45, 85, 250,
812             84, 36, 147, 133, 114, 106, 228, 150, 53, 201, 121, 158, 248, 131,
813             188, 194, 30, 65, 110, 34, 221, 177, 226, 8, 69, 127, 198, 164,
814             254, 109, 123, 14, 74, 61, 92, 161, 115, 88, 252, 231, 15, 155,
815             73, 42, 168, 143, 249, 23, 78, 159, 207, 197, 1, 239, 29, 136,
816             49, 20, 48, 10, 184, 130, 199, 242, 145, 60, 52, 247, 122, 182,
817             180, 47, 37, 203,
818             ],
819             [
820             2, 128, 152, 3, 185, 50, 231, 58, 65, 124, 68, 36, 156, 59,
821             213, 165, 180, 31, 89, 146, 252, 164, 76, 141, 228, 254, 119, 101,
822             183, 48, 159, 212, 5, 86, 225, 221, 9, 195, 30, 20, 78, 81,
823             127, 19, 218, 120, 189, 223, 147, 163, 170, 239, 148, 115, 17, 44,
824             167, 245, 63, 208, 74, 11, 202, 184, 77, 102, 34, 206, 134, 217,
825             16, 246, 149, 140, 109, 25, 190, 151, 186, 236, 69, 53, 203, 153,
826             150, 121, 92, 227, 187, 4, 15, 75, 113, 96, 251, 66, 226, 49,
827             240, 40, 215, 143, 112, 204, 220, 238, 171, 83, 22, 1, 224, 244,
828             234, 47, 242, 194, 41, 229, 26, 166, 100, 7, 211, 118, 80, 255,
829             130, 32, 54, 175, 237, 232, 176, 168, 99, 73, 181, 29, 95, 135,
830             98, 188, 37, 111, 233, 210, 79, 46, 55, 93, 247, 103, 248, 104,
831             137, 169, 154, 88, 117, 21, 198, 173, 33, 132, 230, 178, 14, 38,
832             72, 18, 172, 129, 158, 201, 199, 97, 214, 107, 139, 216, 142, 196,
833             138, 91, 64, 52, 123, 133, 131, 82, 27, 192, 136, 197, 209, 126,
834             12, 191, 56, 243, 193, 110, 174, 6, 235, 253, 177, 61, 122, 42,
835             125, 157, 108, 144, 200, 57, 205, 87, 8, 13, 114, 10, 23, 182,
836             51, 106, 24, 62, 160, 67, 162, 241, 90, 35, 145, 179, 84, 85,
837             28, 250, 116, 161, 94, 155, 71, 39, 222, 60, 43, 70, 105, 207,
838             45, 0, 249, 219,
839             ],
840             [
841             152, 51, 46, 10, 108, 109, 173, 157, 35, 119, 74, 164, 70, 37,
842             254, 174, 147, 183, 62, 99, 165, 248, 205, 145, 59, 223, 21, 246,
843             175, 120, 132, 83, 187, 117, 128, 76, 63, 131, 27, 130, 72, 44,
844             189, 71, 203, 103, 106, 188, 79, 206, 151, 148, 146, 249, 182, 200,
845             167, 125, 141, 49, 234, 38, 242, 171, 22, 111, 34, 8, 82, 96,
846             154, 184, 161, 45, 105, 181, 155, 85, 232, 252, 26, 43, 81, 69,
847             211, 153, 65, 133, 88, 89, 77, 142, 110, 222, 215, 224, 239, 57,
848             0, 13, 66, 235, 9, 127, 163, 243, 238, 162, 75, 41, 11, 54,
849             18, 25, 29, 197, 241, 80, 24, 98, 20, 87, 137, 214, 23, 217,
850             229, 124, 225, 1, 30, 255, 169, 7, 114, 123, 4, 129, 227, 84,
851             28, 210, 190, 50, 55, 101, 126, 247, 3, 186, 236, 115, 170, 212,
852             113, 48, 191, 64, 193, 202, 56, 213, 149, 250, 185, 94, 140, 42,
853             194, 199, 156, 6, 244, 52, 216, 15, 160, 231, 33, 135, 144, 168,
854             228, 97, 92, 172, 245, 104, 209, 220, 68, 230, 195, 180, 138, 118,
855             179, 177, 139, 226, 31, 102, 233, 251, 5, 2, 32, 12, 95, 208,
856             112, 14, 166, 122, 67, 36, 58, 158, 218, 39, 53, 86, 16, 159,
857             107, 93, 192, 221, 207, 91, 237, 240, 198, 121, 196, 134, 73, 116,
858             78, 178, 61, 150, 143, 176, 136, 219, 100, 201, 253, 40, 60, 47,
859             19, 204, 90, 17,
860             ],
861             [
862             17, 92, 106, 71, 15, 76, 148, 14, 184, 69, 182, 145, 165, 189,
863             133, 176, 223, 134, 234, 114, 249, 157, 137, 161, 41, 229, 48, 197,
864             169, 131, 65, 30, 28, 55, 232, 104, 9, 132, 174, 124, 33, 213,
865             73, 190, 45, 151, 250, 116, 154, 105, 158, 218, 98, 81, 27, 89,
866             42, 153, 253, 24, 150, 96, 110, 200, 163, 143, 225, 85, 52, 1,
867             102, 83, 181, 94, 144, 29, 77, 123, 128, 79, 7, 167, 117, 100,
868             194, 224, 210, 59, 171, 46, 62, 173, 159, 78, 51, 139, 187, 162,
869             84, 11, 245, 72, 236, 152, 179, 108, 149, 64, 178, 99, 103, 129,
870             109, 140, 192, 34, 227, 66, 240, 217, 204, 220, 57, 31, 122, 47,
871             22, 246, 135, 39, 40, 2, 199, 231, 146, 3, 10, 58, 203, 242,
872             243, 170, 18, 138, 172, 130, 191, 255, 221, 119, 202, 82, 118, 198,
873             97, 87, 86, 75, 25, 209, 37, 16, 248, 20, 141, 80, 193, 74,
874             188, 201, 8, 19, 251, 233, 32, 70, 147, 212, 126, 208, 230, 196,
875             219, 237, 186, 4, 120, 43, 26, 50, 35, 23, 244, 222, 0, 226,
876             211, 53, 155, 254, 205, 195, 56, 91, 164, 241, 206, 160, 107, 115,
877             235, 185, 38, 125, 13, 61, 238, 63, 111, 112, 252, 239, 90, 175,
878             183, 101, 156, 67, 214, 121, 177, 168, 180, 54, 127, 207, 166, 228,
879             68, 93, 44, 215, 142, 88, 49, 60, 113, 21, 36, 6, 216, 136,
880             247, 95, 12, 5,
881             ],
882             [
883             213, 255, 153, 71, 239, 226, 145, 120, 124, 97, 233, 245, 121, 177,
884             212, 85, 218, 112, 251, 180, 225, 73, 42, 94, 221, 95, 27, 47,
885             205, 165, 111, 98, 247, 183, 2, 141, 56, 93, 129, 198, 31, 119,
886             7, 248, 211, 184, 171, 250, 249, 66, 26, 9, 38, 133, 96, 228,
887             53, 237, 122, 50, 105, 37, 139, 11, 219, 104, 126, 68, 18, 147,
888             25, 206, 240, 82, 158, 170, 178, 227, 234, 163, 3, 208, 216, 176,
889             203, 92, 217, 128, 229, 109, 181, 215, 182, 114, 156, 75, 10, 241,
890             244, 6, 34, 54, 232, 19, 209, 134, 195, 21, 159, 1, 67, 155,
891             102, 46, 152, 90, 99, 74, 231, 35, 107, 58, 61, 127, 236, 235,
892             220, 57, 254, 138, 223, 91, 191, 117, 130, 169, 62, 188, 36, 40,
893             246, 115, 135, 199, 81, 100, 200, 230, 146, 150, 45, 222, 157, 72,
894             43, 15, 83, 214, 197, 175, 39, 5, 193, 78, 161, 185, 55, 137,
895             101, 253, 87, 194, 166, 252, 210, 154, 88, 41, 84, 140, 201, 143,
896             204, 60, 44, 123, 142, 192, 190, 187, 202, 80, 12, 13, 29, 89,
897             33, 172, 242, 125, 160, 28, 76, 23, 64, 103, 52, 69, 113, 136,
898             189, 167, 174, 164, 16, 168, 22, 24, 108, 59, 30, 32, 106, 79,
899             173, 162, 224, 77, 86, 148, 63, 116, 179, 131, 238, 8, 48, 14,
900             149, 65, 144, 20, 243, 196, 151, 118, 186, 110, 4, 207, 70, 51,
901             49, 0, 17, 132,
902             ],
903             [
904             195, 179, 81, 140, 48, 69, 167, 183, 86, 26, 24, 161, 231, 2,
905             219, 133, 254, 114, 240, 230, 128, 27, 163, 165, 82, 221, 17, 97,
906             202, 95, 223, 182, 215, 246, 136, 15, 217, 113, 229, 177, 243, 239,
907             242, 213, 91, 11, 210, 204, 160, 12, 200, 63, 252, 116, 33, 45,
908             147, 52, 3, 170, 162, 249, 1, 4, 255, 209, 212, 85, 174, 236,
909             184, 18, 164, 145, 110, 238, 55, 60, 218, 74, 67, 234, 20, 31,
910             0, 137, 142, 130, 253, 157, 192, 155, 190, 108, 84, 14, 54, 40,
911             197, 92, 65, 119, 43, 208, 152, 94, 191, 189, 214, 25, 104, 80,
912             153, 211, 76, 10, 90, 44, 149, 154, 121, 41, 247, 34, 58, 194,
913             127, 206, 241, 22, 169, 248, 98, 88, 146, 46, 175, 102, 109, 68,
914             132, 126, 50, 232, 235, 158, 135, 225, 101, 237, 23, 37, 13, 32,
915             185, 61, 173, 99, 47, 7, 233, 205, 59, 123, 77, 124, 39, 6,
916             251, 49, 199, 115, 181, 62, 56, 203, 66, 19, 228, 207, 138, 78,
917             141, 166, 122, 111, 73, 151, 134, 112, 87, 53, 72, 156, 226, 148,
918             159, 89, 178, 196, 75, 139, 5, 168, 8, 9, 21, 188, 131, 28,
919             16, 103, 176, 150, 96, 172, 180, 227, 117, 144, 79, 57, 143, 107,
920             105, 93, 51, 245, 220, 186, 38, 35, 193, 64, 42, 201, 71, 120,
921             216, 244, 198, 171, 83, 70, 250, 125, 129, 36, 118, 100, 222, 106,
922             187, 30, 224, 29,
923             ],
924             [
925             122, 103, 120, 2, 33, 215, 203, 170, 76, 174, 61, 232, 183, 60,
926             42, 82, 137, 84, 246, 96, 223, 62, 55, 228, 48, 193, 151, 123,
927             133, 64, 6, 58, 30, 87, 16, 191, 105, 218, 165, 239, 107, 97,
928             206, 19, 175, 126, 116, 187, 222, 69, 237, 88, 135, 98, 238, 155,
929             171, 247, 91, 149, 66, 169, 93, 241, 44, 160, 54, 0, 176, 113,
930             75, 125, 202, 4, 45, 199, 121, 118, 8, 94, 51, 12, 147, 243,
931             73, 15, 65, 31, 146, 158, 159, 225, 46, 28, 86, 13, 172, 140,
932             251, 230, 26, 185, 161, 21, 178, 106, 198, 144, 108, 85, 227, 119,
933             109, 49, 217, 67, 205, 81, 102, 139, 134, 29, 233, 209, 71, 131,
934             186, 130, 14, 250, 40, 92, 179, 212, 127, 34, 25, 214, 150, 167,
935             7, 95, 195, 182, 240, 52, 37, 77, 138, 156, 115, 22, 90, 111,
936             63, 79, 249, 18, 245, 190, 173, 177, 197, 236, 252, 216, 57, 201,
937             10, 80, 229, 89, 180, 196, 74, 9, 213, 153, 157, 117, 100, 253,
938             208, 78, 56, 11, 224, 184, 143, 39, 124, 242, 168, 38, 59, 41,
939             235, 23, 164, 43, 83, 136, 145, 112, 53, 194, 110, 254, 1, 5,
940             181, 221, 207, 162, 204, 72, 104, 99, 101, 154, 210, 152, 129, 255,
941             244, 141, 163, 220, 20, 50, 192, 36, 219, 47, 24, 211, 188, 142,
942             70, 231, 3, 68, 226, 148, 234, 132, 17, 248, 200, 32, 27, 166,
943             35, 128, 114, 189,
944             ],
945             [
946             59, 55, 181, 60, 64, 203, 17, 19, 4, 100, 248, 43, 96, 148,
947             38, 173, 91, 182, 110, 141, 13, 87, 193, 134, 185, 40, 174, 68,
948             168, 10, 66, 81, 71, 241, 57, 105, 90, 254, 221, 124, 192, 200,
949             160, 218, 189, 121, 247, 27, 42, 99, 226, 191, 210, 211, 177, 135,
950             30, 48, 164, 97, 8, 5, 183, 33, 171, 11, 122, 21, 46, 94,
951             18, 41, 109, 147, 49, 229, 154, 9, 178, 236, 239, 184, 116, 199,
952             132, 88, 216, 194, 54, 227, 86, 80, 158, 67, 228, 25, 166, 22,
953             215, 212, 39, 136, 157, 152, 198, 85, 83, 172, 7, 26, 204, 61,
954             34, 225, 169, 65, 126, 220, 98, 250, 156, 235, 159, 240, 69, 77,
955             186, 107, 79, 31, 252, 104, 155, 29, 75, 78, 20, 163, 133, 249,
956             84, 3, 139, 108, 230, 103, 222, 76, 12, 93, 195, 50, 35, 162,
957             117, 52, 58, 232, 47, 245, 234, 202, 89, 246, 196, 112, 170, 62,
958             201, 131, 238, 111, 53, 56, 253, 114, 140, 231, 153, 118, 180, 28,
959             143, 73, 37, 72, 237, 190, 208, 150, 179, 244, 197, 146, 206, 113,
960             217, 142, 224, 138, 92, 74, 119, 63, 137, 32, 255, 125, 24, 82,
961             144, 0, 102, 161, 149, 129, 151, 123, 95, 188, 242, 214, 223, 70,
962             187, 2, 14, 120, 36, 16, 15, 128, 207, 6, 44, 106, 127, 45,
963             167, 101, 1, 205, 251, 130, 51, 209, 243, 115, 165, 219, 175, 213,
964             145, 233, 176, 23,
965             ],
966             [
967             251, 31, 207, 102, 22, 224, 76, 54, 108, 41, 70, 242, 104, 120,
968             160, 98, 221, 48, 131, 121, 93, 79, 223, 141, 219, 177, 149, 36,
969             71, 17, 243, 62, 164, 97, 56, 6, 55, 103, 234, 241, 38, 186,
970             53, 45, 231, 25, 193, 172, 250, 27, 96, 249, 208, 2, 167, 145,
971             125, 150, 142, 137, 99, 138, 248, 205, 80, 12, 107, 240, 105, 201,
972             85, 106, 86, 40, 34, 73, 196, 128, 52, 130, 140, 233, 153, 65,
973             78, 47, 163, 44, 229, 169, 132, 174, 162, 21, 23, 225, 237, 109,
974             139, 188, 58, 214, 143, 4, 7, 16, 67, 32, 185, 147, 89, 61,
975             91, 247, 175, 14, 244, 90, 230, 181, 228, 220, 18, 178, 19, 37,
976             113, 134, 235, 171, 168, 253, 199, 15, 66, 77, 211, 226, 83, 95,
977             239, 254, 69, 24, 115, 42, 64, 245, 135, 10, 92, 206, 116, 51,
978             192, 252, 9, 82, 203, 100, 212, 28, 176, 127, 200, 60, 26, 46,
979             33, 94, 72, 173, 119, 43, 101, 110, 213, 136, 222, 122, 155, 59,
980             20, 146, 232, 0, 81, 50, 216, 148, 183, 154, 210, 152, 227, 35,
981             187, 112, 118, 88, 3, 170, 1, 114, 158, 39, 191, 184, 124, 218,
982             215, 182, 166, 133, 49, 194, 117, 159, 126, 202, 63, 11, 29, 75,
983             8, 156, 68, 123, 30, 111, 5, 189, 84, 204, 157, 190, 13, 197,
984             144, 57, 255, 151, 236, 165, 238, 217, 209, 161, 87, 246, 180, 179,
985             198, 74, 195, 129,
986             ],
987             [
988             216, 20, 160, 73, 253, 2, 47, 246, 49, 159, 12, 76, 100, 69,
989             105, 213, 0, 113, 143, 85, 94, 64, 180, 174, 40, 184, 254, 166,
990             83, 17, 252, 203, 68, 16, 212, 13, 1, 206, 151, 177, 35, 176,
991             175, 54, 56, 89, 31, 157, 240, 61, 59, 104, 186, 15, 82, 164,
992             133, 210, 72, 167, 170, 250, 226, 62, 232, 245, 9, 211, 130, 162,
993             101, 168, 43, 75, 219, 197, 185, 200, 191, 107, 215, 14, 91, 205,
994             63, 50, 96, 21, 58, 207, 106, 209, 111, 172, 204, 178, 224, 169,
995             214, 201, 255, 229, 29, 146, 145, 22, 165, 150, 7, 27, 99, 87,
996             41, 19, 26, 188, 92, 46, 81, 52, 51, 225, 187, 117, 93, 241,
997             28, 228, 251, 235, 182, 227, 98, 67, 115, 221, 244, 102, 142, 114,
998             116, 153, 4, 34, 33, 218, 6, 5, 154, 161, 42, 152, 132, 192,
999             247, 23, 121, 70, 148, 48, 238, 103, 39, 144, 11, 230, 84, 136,
1000             198, 60, 128, 38, 122, 208, 45, 149, 119, 202, 127, 53, 24, 118,
1001             36, 66, 195, 135, 141, 222, 179, 171, 239, 88, 110, 220, 44, 234,
1002             80, 125, 112, 37, 139, 134, 126, 183, 190, 131, 86, 10, 173, 147,
1003             78, 193, 248, 231, 8, 25, 140, 129, 95, 223, 236, 77, 18, 32,
1004             237, 249, 156, 243, 79, 196, 109, 155, 124, 137, 57, 217, 3, 97,
1005             158, 199, 120, 55, 30, 242, 65, 163, 194, 108, 90, 138, 123, 71,
1006             233, 189, 181, 74,
1007             ],
1008             [
1009             46, 125, 92, 69, 40, 159, 217, 37, 43, 186, 19, 250, 247, 16,
1010             205, 50, 156, 103, 68, 187, 132, 184, 70, 11, 130, 163, 200, 74,
1011             105, 89, 44, 248, 77, 212, 143, 101, 98, 39, 241, 53, 116, 29,
1012             84, 166, 1, 14, 23, 237, 177, 196, 85, 142, 236, 6, 65, 88,
1013             73, 117, 128, 172, 102, 213, 90, 233, 180, 118, 107, 9, 173, 157,
1014             195, 144, 160, 15, 243, 71, 136, 227, 152, 87, 232, 223, 216, 79,
1015             140, 182, 104, 194, 149, 168, 100, 93, 191, 120, 228, 175, 51, 218,
1016             34, 58, 208, 78, 48, 28, 226, 75, 113, 17, 225, 192, 244, 246,
1017             134, 253, 82, 60, 176, 52, 170, 126, 167, 30, 178, 8, 5, 188,
1018             121, 4, 135, 235, 10, 183, 59, 252, 27, 31, 76, 179, 254, 45,
1019             222, 220, 138, 99, 122, 209, 41, 202, 238, 33, 197, 147, 131, 38,
1020             171, 239, 26, 215, 127, 63, 169, 21, 151, 111, 207, 106, 229, 129,
1021             133, 20, 83, 2, 193, 112, 13, 139, 124, 119, 49, 245, 12, 95,
1022             7, 224, 62, 240, 249, 55, 109, 36, 206, 198, 108, 148, 165, 203,
1023             61, 137, 96, 22, 164, 189, 158, 35, 153, 97, 154, 242, 86, 24,
1024             221, 91, 115, 3, 94, 72, 201, 161, 42, 123, 255, 64, 230, 204,
1025             150, 251, 146, 210, 162, 114, 190, 185, 66, 25, 67, 234, 145, 54,
1026             110, 56, 81, 32, 155, 219, 174, 0, 214, 47, 57, 181, 211, 18,
1027             231, 141, 199, 80,
1028             ],
1029             [
1030             55, 223, 107, 214, 197, 109, 99, 16, 239, 155, 33, 188, 217, 96,
1031             241, 69, 4, 52, 122, 208, 179, 92, 141, 64, 173, 160, 63, 50,
1032             86, 162, 201, 46, 0, 140, 98, 85, 71, 75, 175, 195, 41, 167,
1033             60, 131, 249, 245, 135, 228, 9, 56, 84, 58, 221, 205, 233, 77,
1034             13, 111, 49, 161, 152, 8, 32, 19, 82, 106, 231, 229, 235, 67,
1035             171, 124, 150, 80, 35, 73, 7, 242, 66, 211, 236, 114, 250, 27,
1036             51, 100, 14, 207, 1, 237, 138, 15, 157, 213, 72, 137, 209, 177,
1037             128, 47, 230, 108, 43, 119, 42, 127, 248, 144, 110, 24, 168, 74,
1038             54, 65, 184, 17, 206, 218, 104, 199, 253, 97, 11, 181, 126, 102,
1039             191, 225, 18, 254, 133, 81, 23, 232, 129, 26, 227, 186, 12, 244,
1040             243, 22, 2, 123, 185, 76, 154, 120, 178, 174, 116, 238, 89, 37,
1041             193, 117, 166, 203, 31, 222, 40, 25, 148, 79, 240, 113, 134, 83,
1042             251, 139, 164, 130, 44, 48, 101, 61, 182, 255, 147, 53, 183, 210,
1043             192, 190, 39, 59, 176, 158, 95, 115, 216, 94, 196, 34, 172, 118,
1044             136, 88, 5, 252, 28, 151, 156, 112, 146, 247, 165, 93, 21, 163,
1045             215, 234, 212, 202, 194, 20, 159, 87, 200, 170, 125, 70, 38, 180,
1046             224, 132, 45, 62, 143, 121, 105, 226, 149, 246, 91, 30, 145, 142,
1047             90, 103, 220, 3, 189, 219, 78, 57, 10, 204, 153, 187, 169, 29,
1048             198, 36, 68, 6,
1049             ],
1050             );
1051              
1052             #---------- lookup tables for veggie tales crypto -------------#
1053              
1054             %veggies = (
1055             carrot => [ 113, 28 ],
1056             celery => [ 235, 135 ],
1057             fennel => [ 197, 217 ],
1058             garlic => [ 197, 240 ],
1059             peanut => [ 103, 109 ],
1060             potato => [ 55, 250 ],
1061             radish => [ 155, 70 ],
1062             squash => [ 249, 74 ],
1063             tomato => [ 23, 239 ],
1064             turnip => [ 239, 4 ],
1065             pepcid => [ 231, 153 ], # not a real veggie, therein lies a tale
1066             );
1067              
1068             # 4096 byte table
1069             @planter_table = (
1070             210, 245, 177, 209, 93, 29, 141, 138, 162, 14, 70, 204, 5, 253,
1071             2, 28, 251, 51, 81, 115, 50, 110, 250, 167, 255, 195, 241, 65,
1072             8, 139, 242, 236, 113, 72, 107, 0, 32, 85, 198, 132, 127, 38,
1073             230, 73, 172, 225, 82, 17, 171, 21, 202, 170, 48, 125, 120, 67,
1074             159, 121, 131, 156, 114, 47, 66, 239, 89, 160, 183, 122, 146, 190,
1075             104, 154, 134, 105, 192, 10, 39, 232, 49, 83, 228, 108, 116, 74,
1076             235, 151, 194, 22, 33, 133, 52, 27, 244, 174, 35, 91, 3, 103,
1077             135, 80, 130, 178, 30, 191, 203, 237, 64, 180, 211, 20, 161, 112,
1078             119, 79, 247, 212, 164, 199, 186, 143, 173, 168, 185, 24, 84, 166,
1079             252, 36, 106, 7, 31, 90, 53, 176, 61, 254, 23, 99, 100, 109,
1080             62, 140, 102, 87, 34, 95, 157, 163, 220, 42, 11, 19, 249, 25,
1081             136, 226, 165, 181, 196, 152, 137, 76, 207, 200, 96, 12, 215, 213,
1082             18, 231, 63, 78, 15, 188, 234, 55, 37, 46, 58, 184, 1, 92,
1083             60, 187, 9, 44, 71, 13, 153, 148, 246, 224, 169, 205, 69, 147,
1084             123, 214, 26, 155, 45, 43, 41, 68, 189, 118, 217, 216, 223, 238,
1085             6, 101, 175, 221, 218, 59, 233, 222, 57, 201, 193, 117, 144, 98,
1086             54, 248, 142, 243, 111, 182, 158, 229, 129, 179, 219, 75, 94, 97,
1087             124, 197, 206, 240, 16, 227, 208, 126, 149, 4, 128, 56, 150, 88,
1088             77, 40, 145, 86, 198, 3, 199, 167, 155, 219, 107, 14, 246, 10,
1089             210, 12, 243, 251, 150, 188, 189, 133, 39, 69, 102, 170, 158, 145,
1090             57, 245, 135, 55, 80, 45, 166, 236, 7, 16, 77, 88, 56, 163,
1091             82, 84, 185, 242, 50, 47, 44, 151, 70, 103, 13, 227, 206, 238,
1092             40, 123, 224, 117, 153, 255, 53, 60, 38, 9, 86, 73, 31, 184,
1093             129, 30, 6, 90, 240, 254, 146, 15, 152, 142, 17, 112, 71, 101,
1094             244, 108, 100, 78, 205, 161, 214, 2, 87, 115, 164, 157, 228, 106,
1095             149, 93, 181, 209, 177, 8, 22, 230, 250, 121, 237, 11, 24, 36,
1096             229, 196, 215, 232, 193, 233, 65, 4, 52, 113, 222, 169, 75, 176,
1097             191, 64, 132, 114, 220, 180, 46, 49, 25, 62, 195, 168, 187, 26,
1098             33, 85, 116, 139, 218, 76, 178, 225, 118, 217, 91, 21, 252, 110,
1099             173, 165, 127, 95, 208, 182, 83, 67, 20, 192, 239, 140, 105, 144,
1100             248, 204, 97, 35, 134, 81, 249, 202, 41, 28, 174, 1, 211, 234,
1101             94, 160, 119, 124, 156, 253, 111, 172, 241, 235, 223, 68, 34, 120,
1102             207, 43, 179, 37, 61, 66, 126, 29, 203, 141, 79, 148, 59, 162,
1103             159, 128, 89, 42, 18, 147, 137, 27, 190, 125, 143, 58, 63, 175,
1104             183, 131, 200, 54, 226, 96, 138, 197, 201, 98, 122, 19, 247, 5,
1105             221, 109, 186, 23, 92, 51, 74, 104, 72, 213, 136, 154, 99, 212,
1106             216, 32, 130, 0, 171, 48, 231, 194, 232, 111, 251, 155, 183, 119,
1107             39, 64, 120, 244, 204, 26, 63, 215, 88, 42, 61, 21, 27, 85,
1108             200, 212, 240, 249, 113, 101, 59, 75, 38, 141, 136, 186, 187, 102,
1109             237, 190, 94, 79, 76, 114, 241, 44, 236, 179, 122, 107, 104, 219,
1110             45, 15, 128, 224, 46, 87, 214, 229, 145, 35, 37, 170, 8, 225,
1111             152, 161, 131, 222, 201, 112, 168, 228, 6, 16, 12, 83, 126, 192,
1112             121, 134, 123, 181, 82, 58, 162, 0, 109, 41, 24, 92, 171, 191,
1113             98, 221, 34, 20, 69, 29, 165, 185, 89, 206, 216, 72, 196, 49,
1114             205, 7, 254, 226, 53, 194, 43, 110, 137, 129, 9, 130, 18, 153,
1115             176, 193, 199, 70, 99, 246, 2, 172, 138, 146, 160, 217, 17, 208,
1116             175, 174, 23, 36, 169, 133, 210, 135, 100, 218, 108, 233, 248, 81,
1117             247, 197, 234, 96, 13, 117, 163, 67, 166, 184, 95, 47, 178, 118,
1118             243, 154, 1, 230, 158, 90, 105, 207, 40, 57, 177, 52, 65, 74,
1119             32, 73, 223, 148, 48, 22, 11, 106, 202, 253, 115, 250, 25, 167,
1120             195, 66, 188, 30, 147, 103, 127, 245, 189, 28, 144, 93, 71, 173,
1121             19, 50, 151, 60, 3, 182, 209, 84, 140, 31, 97, 55, 80, 125,
1122             211, 132, 227, 51, 203, 239, 14, 56, 252, 86, 116, 213, 33, 124,
1123             68, 159, 139, 149, 157, 77, 4, 235, 10, 255, 180, 238, 142, 5,
1124             78, 164, 143, 242, 62, 150, 220, 54, 231, 198, 91, 156, 104, 187,
1125             55, 87, 163, 99, 211, 160, 56, 100, 28, 2, 203, 67, 152, 82,
1126             33, 217, 215, 25, 200, 196, 16, 141, 101, 105, 119, 199, 254, 177,
1127             136, 34, 247, 62, 145, 118, 150, 27, 156, 58, 229, 252, 188, 79,
1128             226, 103, 232, 151, 209, 219, 224, 192, 166, 195, 110, 233, 5, 127,
1129             41, 210, 8, 149, 216, 85, 95, 22, 157, 144, 40, 20, 94, 176,
1130             92, 111, 54, 32, 13, 222, 183, 249, 154, 162, 42, 96, 17, 125,
1131             88, 236, 167, 75, 234, 65, 170, 4, 201, 129, 169, 77, 109, 198,
1132             24, 72, 116, 37, 241, 51, 182, 106, 121, 202, 39, 230, 93, 181,
1133             221, 138, 90, 173, 208, 245, 243, 158, 191, 14, 10, 124, 50, 218,
1134             128, 237, 133, 112, 251, 38, 131, 84, 253, 9, 26, 179, 148, 194,
1135             60, 61, 184, 197, 227, 73, 18, 64, 49, 185, 255, 31, 126, 120,
1136             107, 123, 122, 142, 143, 130, 53, 190, 214, 66, 189, 155, 168, 205,
1137             165, 164, 117, 242, 0, 29, 235, 132, 80, 174, 135, 146, 114, 225,
1138             15, 98, 45, 83, 159, 74, 204, 86, 175, 19, 11, 57, 161, 172,
1139             48, 193, 115, 81, 47, 250, 3, 76, 223, 206, 69, 68, 220, 43,
1140             21, 35, 240, 97, 239, 52, 63, 207, 71, 59, 6, 248, 12, 238,
1141             228, 153, 213, 140, 244, 171, 7, 89, 1, 113, 180, 231, 178, 139,
1142             36, 102, 134, 137, 70, 212, 91, 186, 246, 46, 108, 78, 147, 30,
1143             23, 44, 212, 27, 167, 71, 99, 35, 211, 44, 100, 224, 184, 134,
1144             235, 131, 68, 150, 105, 65, 199, 129, 180, 192, 220, 37, 157, 145,
1145             231, 247, 146, 185, 116, 38, 103, 210, 25, 42, 202, 251, 56, 222,
1146             29, 24, 216, 95, 230, 23, 84, 135, 89, 187, 108, 204, 154, 3,
1147             66, 17, 189, 207, 81, 22, 244, 13, 132, 205, 47, 74, 245, 92,
1148             148, 208, 114, 252, 248, 255, 234, 172, 165, 242, 39, 225, 190, 166,
1149             14, 236, 153, 85, 4, 72, 87, 107, 206, 9, 142, 0, 113, 73,
1150             209, 229, 133, 58, 196, 52, 176, 93, 249, 179, 106, 78, 97, 46,
1151             215, 218, 181, 173, 53, 238, 126, 197, 156, 237, 115, 178, 15, 98,
1152             110, 152, 246, 254, 140, 5, 61, 188, 91, 26, 195, 16, 213, 177,
1153             62, 51, 80, 70, 88, 21, 228, 125, 163, 241, 86, 76, 57, 161,
1154             79, 239, 18, 164, 11, 219, 30, 226, 159, 6, 45, 82, 10, 198,
1155             149, 123, 20, 101, 221, 32, 109, 182, 12, 117, 139, 128, 28, 130,
1156             183, 214, 54, 41, 31, 102, 69, 83, 111, 174, 168, 138, 63, 19,
1157             43, 33, 233, 8, 124, 137, 243, 217, 191, 158, 67, 40, 175, 34,
1158             253, 64, 120, 203, 141, 227, 60, 169, 127, 112, 143, 223, 119, 155,
1159             122, 36, 232, 194, 96, 1, 77, 104, 48, 75, 55, 193, 201, 121,
1160             240, 151, 118, 171, 160, 90, 250, 49, 186, 144, 59, 94, 170, 2,
1161             200, 162, 147, 50, 7, 136, 231, 104, 124, 220, 224, 32, 240, 207,
1162             215, 123, 227, 165, 24, 192, 247, 21, 170, 18, 92, 210, 7, 155,
1163             159, 14, 214, 66, 60, 172, 57, 218, 71, 5, 188, 249, 122, 225,
1164             65, 136, 99, 141, 86, 131, 195, 4, 69, 140, 103, 156, 58, 200,
1165             143, 47, 241, 64, 9, 194, 182, 20, 130, 149, 199, 230, 183, 38,
1166             180, 193, 190, 31, 39, 11, 89, 127, 163, 100, 33, 79, 142, 217,
1167             252, 114, 173, 133, 221, 15, 250, 94, 55, 211, 76, 152, 29, 10,
1168             93, 91, 98, 202, 2, 78, 174, 81, 119, 135, 43, 22, 154, 16,
1169             161, 157, 242, 189, 204, 177, 254, 70, 126, 253, 237, 110, 223, 6,
1170             80, 25, 212, 233, 125, 3, 181, 109, 111, 46, 54, 191, 40, 113,
1171             128, 203, 222, 34, 45, 144, 139, 229, 67, 158, 87, 246, 160, 226,
1172             85, 175, 90, 178, 148, 244, 185, 151, 248, 168, 77, 105, 196, 37,
1173             198, 121, 1, 101, 30, 8, 167, 206, 150, 59, 134, 245, 239, 62,
1174             120, 219, 95, 201, 236, 213, 117, 234, 68, 197, 238, 112, 116, 61,
1175             115, 129, 36, 176, 216, 50, 42, 19, 255, 138, 208, 186, 164, 205,
1176             0, 243, 52, 41, 118, 27, 35, 56, 102, 96, 63, 106, 228, 107,
1177             84, 132, 44, 232, 17, 23, 51, 137, 251, 82, 166, 179, 171, 184,
1178             108, 146, 74, 26, 235, 12, 53, 88, 187, 49, 145, 162, 209, 75,
1179             72, 13, 97, 73, 83, 169, 48, 153, 28, 147, 159, 210, 206, 238,
1180             186, 122, 234, 215, 111, 27, 211, 121, 226, 90, 207, 201, 248, 176,
1181             110, 240, 255, 123, 71, 228, 188, 64, 14, 94, 245, 136, 191, 153,
1182             142, 53, 104, 109, 141, 50, 83, 177, 60, 179, 115, 230, 89, 254,
1183             31, 46, 168, 242, 23, 247, 157, 218, 101, 192, 92, 22, 0, 73,
1184             63, 236, 15, 172, 246, 13, 244, 199, 95, 203, 85, 231, 19, 6,
1185             45, 87, 100, 213, 78, 208, 17, 25, 161, 151, 232, 212, 143, 163,
1186             62, 98, 97, 24, 33, 187, 160, 88, 128, 164, 196, 189, 79, 127,
1187             43, 124, 200, 74, 173, 225, 80, 65, 190, 221, 180, 12, 52, 1,
1188             209, 4, 7, 76, 10, 149, 86, 5, 129, 51, 169, 81, 183, 68,
1189             220, 167, 18, 29, 154, 11, 84, 224, 145, 202, 75, 57, 243, 148,
1190             239, 28, 250, 32, 137, 119, 8, 144, 150, 182, 117, 175, 130, 146,
1191             241, 133, 38, 249, 140, 181, 205, 185, 20, 178, 223, 36, 252, 91,
1192             204, 105, 55, 116, 2, 59, 135, 165, 30, 9, 233, 184, 166, 217,
1193             132, 106, 54, 193, 131, 77, 70, 42, 34, 16, 120, 99, 103, 152,
1194             138, 40, 198, 113, 26, 3, 118, 197, 156, 251, 147, 66, 108, 58,
1195             39, 56, 134, 235, 214, 102, 222, 82, 253, 47, 195, 229, 155, 112,
1196             44, 67, 171, 194, 158, 48, 216, 72, 107, 126, 41, 162, 219, 93,
1197             125, 96, 61, 139, 114, 49, 237, 37, 35, 69, 170, 21, 174, 227,
1198             221, 0, 188, 220, 104, 40, 152, 149, 173, 25, 81, 215, 16, 8,
1199             13, 39, 6, 62, 92, 126, 61, 121, 5, 178, 10, 206, 252, 76,
1200             19, 150, 253, 247, 124, 83, 118, 11, 43, 96, 209, 143, 138, 49,
1201             241, 84, 183, 236, 93, 28, 182, 32, 213, 181, 59, 136, 131, 78,
1202             170, 132, 142, 167, 125, 58, 77, 250, 100, 171, 194, 133, 157, 201,
1203             115, 165, 145, 116, 203, 21, 50, 243, 60, 94, 239, 119, 127, 85,
1204             246, 162, 205, 33, 44, 144, 63, 38, 255, 185, 46, 102, 14, 114,
1205             146, 91, 141, 189, 41, 202, 214, 248, 75, 191, 222, 31, 172, 123,
1206             130, 90, 2, 223, 175, 210, 197, 154, 184, 179, 196, 35, 95, 177,
1207             7, 47, 117, 18, 42, 101, 64, 187, 72, 9, 34, 110, 111, 120,
1208             73, 151, 113, 98, 45, 106, 168, 174, 231, 53, 22, 30, 4, 36,
1209             147, 237, 176, 192, 207, 163, 148, 87, 218, 211, 107, 23, 226, 224,
1210             29, 242, 74, 89, 26, 199, 245, 66, 48, 57, 69, 195, 12, 103,
1211             71, 198, 20, 55, 82, 24, 164, 159, 1, 235, 180, 216, 80, 158,
1212             134, 225, 37, 166, 56, 54, 52, 79, 200, 129, 228, 227, 234, 249,
1213             17, 112, 186, 232, 229, 70, 244, 233, 68, 212, 204, 128, 155, 109,
1214             65, 3, 153, 254, 122, 193, 169, 240, 140, 190, 230, 86, 105, 108,
1215             135, 208, 217, 251, 27, 238, 219, 137, 160, 15, 139, 67, 161, 99,
1216             88, 51, 156, 97, 138, 21, 241, 17, 61, 253, 237, 130, 218, 230,
1217             94, 180, 165, 221, 58, 132, 235, 99, 145, 163, 234, 70, 114, 55,
1218             207, 115, 49, 1, 16, 251, 170, 212, 177, 80, 219, 72, 104, 117,
1219             222, 172, 79, 62, 254, 201, 148, 161, 10, 81, 27, 53, 194, 162,
1220             248, 93, 0, 243, 111, 121, 51, 4, 42, 127, 122, 63, 89, 232,
1221             199, 242, 74, 22, 112, 18, 158, 233, 8, 2, 183, 240, 113, 131,
1222             12, 84, 28, 66, 91, 167, 250, 174, 225, 37, 220, 11, 156, 134,
1223             211, 75, 179, 247, 23, 24, 186, 106, 118, 143, 59, 77, 136, 92,
1224             3, 188, 97, 56, 135, 159, 7, 124, 204, 87, 50, 223, 13, 176,
1225             185, 160, 252, 190, 100, 76, 98, 151, 239, 210, 85, 120, 29, 86,
1226             39, 19, 140, 205, 150, 116, 126, 103, 90, 47, 125, 83, 68, 34,
1227             123, 67, 249, 25, 144, 26, 69, 213, 236, 32, 9, 52, 31, 208,
1228             168, 244, 231, 245, 202, 119, 15, 38, 95, 36, 226, 71, 197, 6,
1229             178, 64, 193, 196, 164, 171, 137, 20, 215, 109, 153, 60, 142, 40,
1230             41, 45, 229, 195, 107, 110, 146, 139, 141, 155, 169, 108, 157, 14,
1231             217, 96, 175, 198, 30, 5, 255, 189, 82, 43, 105, 54, 57, 73,
1232             129, 149, 88, 154, 206, 128, 102, 35, 191, 78, 246, 133, 65, 227,
1233             203, 187, 182, 33, 228, 101, 166, 184, 216, 147, 152, 214, 181, 44,
1234             200, 192, 46, 224, 173, 48, 209, 238, 238, 17, 205, 237, 121, 57,
1235             169, 166, 190, 42, 98, 232, 33, 25, 30, 56, 23, 79, 109, 143,
1236             78, 138, 22, 195, 27, 223, 13, 93, 36, 167, 14, 8, 141, 100,
1237             135, 28, 60, 113, 226, 160, 155, 66, 2, 101, 200, 253, 110, 45,
1238             199, 49, 230, 198, 76, 153, 148, 95, 187, 149, 159, 184, 142, 75,
1239             94, 11, 117, 188, 211, 150, 174, 218, 132, 182, 162, 133, 220, 38,
1240             67, 4, 77, 111, 0, 136, 144, 102, 7, 179, 222, 50, 61, 161,
1241             80, 55, 16, 202, 63, 119, 31, 131, 163, 108, 158, 206, 58, 219,
1242             231, 9, 92, 208, 239, 48, 189, 140, 147, 107, 19, 240, 192, 227,
1243             214, 171, 201, 196, 213, 52, 112, 194, 24, 64, 134, 35, 59, 118,
1244             81, 204, 89, 26, 51, 127, 128, 137, 90, 168, 130, 115, 62, 123,
1245             185, 191, 248, 70, 39, 47, 21, 53, 164, 254, 193, 209, 224, 180,
1246             165, 104, 235, 228, 124, 40, 243, 241, 46, 3, 91, 106, 43, 216,
1247             6, 83, 65, 74, 86, 212, 29, 120, 88, 215, 37, 72, 99, 41,
1248             181, 176, 18, 252, 197, 233, 97, 175, 151, 242, 54, 183, 73, 71,
1249             69, 96, 217, 146, 245, 244, 251, 10, 34, 129, 203, 249, 246, 87,
1250             5, 250, 85, 229, 221, 145, 172, 126, 82, 20, 170, 15, 139, 210,
1251             186, 1, 157, 207, 247, 103, 122, 125, 152, 225, 234, 12, 44, 255,
1252             236, 154, 177, 32, 156, 84, 178, 116, 105, 68, 173, 114, 179, 158,
1253             250, 26, 198, 134, 118, 171, 3, 143, 7, 29, 46, 102, 99, 237,
1254             52, 172, 154, 236, 19, 239, 155, 0, 152, 188, 58, 10, 249, 68,
1255             211, 61, 186, 57, 36, 49, 81, 254, 135, 21, 24, 231, 167, 210,
1256             253, 170, 51, 90, 100, 190, 235, 203, 225, 230, 233, 60, 56, 130,
1257             124, 109, 83, 72, 163, 8, 98, 209, 144, 27, 115, 191, 89, 59,
1258             71, 242, 241, 43, 128, 217, 122, 204, 117, 189, 133, 107, 164, 112,
1259             35, 87, 234, 174, 69, 84, 5, 47, 28, 148, 252, 192, 224, 1,
1260             227, 147, 31, 88, 132, 214, 113, 197, 76, 37, 106, 33, 80, 104,
1261             208, 229, 53, 32, 91, 168, 150, 153, 194, 137, 101, 103, 205, 181,
1262             139, 96, 184, 251, 222, 97, 166, 255, 240, 92, 245, 86, 63, 221,
1263             39, 48, 131, 248, 6, 156, 173, 75, 196, 140, 2, 34, 121, 67,
1264             206, 94, 85, 9, 18, 157, 232, 185, 145, 93, 176, 126, 243, 64,
1265             216, 207, 40, 141, 11, 16, 78, 175, 219, 41, 202, 45, 13, 244,
1266             146, 125, 160, 246, 162, 165, 55, 17, 50, 182, 110, 12, 180, 23,
1267             187, 212, 22, 228, 178, 213, 38, 183, 226, 73, 120, 111, 199, 142,
1268             200, 70, 123, 116, 114, 223, 66, 82, 138, 30, 65, 195, 119, 105,
1269             15, 108, 136, 247, 159, 14, 74, 44, 20, 4, 95, 42, 77, 238,
1270             79, 161, 193, 220, 129, 127, 62, 149, 177, 169, 215, 201, 54, 25,
1271             218, 151, 171, 24, 156, 124, 48, 112, 0, 115, 219, 175, 247, 145,
1272             8, 144, 123, 65, 50, 122, 252, 58, 75, 79, 3, 198, 238, 234,
1273             92, 12, 149, 162, 139, 113, 220, 85, 194, 29, 253, 184, 119, 89,
1274             110, 23, 87, 132, 177, 108, 43, 60, 130, 248, 51, 83, 237, 16,
1275             37, 106, 78, 84, 42, 193, 11, 190, 59, 254, 116, 125, 182, 131,
1276             235, 255, 53, 99, 183, 100, 93, 243, 70, 181, 28, 90, 249, 241,
1277             105, 179, 66, 214, 187, 39, 44, 136, 169, 18, 233, 15, 138, 210,
1278             170, 6, 230, 205, 251, 203, 159, 46, 98, 160, 221, 41, 218, 201,
1279             172, 173, 246, 158, 118, 9, 57, 166, 67, 94, 224, 245, 20, 133,
1280             137, 151, 97, 185, 147, 102, 206, 163, 216, 109, 80, 191, 86, 74,
1281             121, 32, 127, 209, 215, 22, 91, 142, 240, 10, 129, 211, 34, 154,
1282             212, 180, 21, 155, 104, 88, 25, 5, 68, 17, 30, 213, 189, 81,
1283             150, 56, 107, 134, 174, 111, 222, 161, 19, 54, 232, 143, 195, 229,
1284             76, 1, 33, 114, 196, 49, 38, 128, 52, 73, 71, 61, 36, 192,
1285             200, 26, 178, 103, 227, 146, 96, 2, 164, 153, 208, 199, 244, 197,
1286             14, 207, 55, 168, 62, 176, 35, 242, 228, 223, 148, 4, 140, 152,
1287             141, 27, 7, 165, 47, 186, 126, 135, 31, 40, 204, 250, 82, 226,
1288             95, 236, 225, 72, 239, 45, 13, 202, 77, 63, 120, 217, 157, 101,
1289             167, 69, 64, 117, 188, 231, 131, 120, 156, 124, 80, 144, 160, 139,
1290             51, 39, 175, 89, 232, 176, 211, 137, 162, 42, 252, 234, 35, 199,
1291             155, 86, 190, 26, 92, 140, 253, 146, 99, 57, 220, 189, 178, 197,
1292             165, 24, 47, 97, 62, 207, 15, 196, 121, 236, 3, 60, 114, 88,
1293             75, 107, 21, 48, 13, 154, 30, 20, 90, 9, 227, 14, 147, 78,
1294             52, 37, 198, 27, 195, 247, 157, 251, 111, 164, 5, 11, 214, 29,
1295             28, 10, 1, 185, 241, 203, 50, 230, 19, 95, 172, 104, 49, 130,
1296             113, 135, 186, 66, 218, 150, 118, 245, 83, 163, 151, 254, 82, 64,
1297             133, 177, 138, 81, 44, 213, 6, 238, 134, 145, 65, 54, 219, 174,
1298             128, 93, 212, 109, 17, 79, 169, 193, 171, 246, 158, 59, 56, 149,
1299             112, 183, 102, 122, 129, 192, 119, 153, 143, 38, 179, 94, 16, 58,
1300             201, 235, 18, 74, 148, 116, 125, 243, 72, 184, 33, 237, 132, 217,
1301             110, 61, 101, 25, 166, 152, 67, 22, 126, 231, 46, 233, 43, 70,
1302             200, 7, 91, 205, 204, 73, 105, 226, 4, 249, 182, 32, 244, 209,
1303             127, 229, 100, 96, 168, 202, 34, 159, 123, 2, 0, 242, 228, 161,
1304             240, 255, 180, 173, 222, 71, 239, 136, 142, 208, 187, 98, 36, 215,
1305             84, 68, 12, 248, 181, 115, 63, 141, 167, 106, 206, 191, 23, 8,
1306             76, 170, 194, 210, 87, 108, 41, 40, 103, 85, 53, 250, 117, 55,
1307             216, 225, 69, 77, 223, 45, 224, 221, 188, 31, 86, 211, 151, 119,
1308             107, 171, 59, 158, 134, 154, 98, 28, 195, 203, 38, 204, 13, 213,
1309             247, 149, 246, 58, 46, 225, 137, 69, 87, 7, 96, 125, 54, 252,
1310             215, 32, 157, 104, 72, 115, 226, 100, 9, 130, 194, 255, 60, 103,
1311             214, 55, 93, 179, 94, 126, 56, 75, 240, 197, 233, 207, 133, 76,
1312             182, 89, 230, 153, 239, 200, 209, 174, 150, 234, 0, 142, 34, 223,
1313             168, 30, 97, 128, 23, 181, 4, 124, 116, 222, 29, 241, 102, 146,
1314             39, 67, 180, 237, 244, 250, 229, 173, 5, 33, 1, 24, 166, 118,
1315             138, 201, 61, 219, 40, 52, 53, 212, 167, 248, 17, 57, 145, 20,
1316             68, 193, 110, 249, 27, 192, 143, 80, 148, 2, 236, 196, 190, 129,
1317             105, 206, 147, 184, 139, 170, 113, 165, 132, 91, 106, 92, 66, 49,
1318             6, 41, 43, 101, 12, 254, 253, 245, 79, 47, 224, 70, 35, 19,
1319             36, 208, 191, 156, 185, 160, 8, 220, 177, 243, 22, 161, 73, 90,
1320             121, 44, 62, 81, 163, 122, 238, 176, 71, 140, 172, 77, 63, 188,
1321             65, 187, 175, 84, 178, 136, 159, 251, 131, 117, 141, 210, 14, 109,
1322             155, 221, 31, 164, 11, 50, 111, 144, 169, 186, 162, 99, 217, 235,
1323             78, 205, 95, 202, 15, 127, 135, 83, 216, 198, 114, 112, 26, 21,
1324             25, 242, 10, 227, 199, 85, 45, 189, 74, 231, 108, 3, 218, 120,
1325             88, 37, 152, 42, 51, 228, 232, 48, 18, 16, 123, 64, 183, 82,
1326             165, 154, 190, 158, 114, 178, 194, 173, 85, 73, 209, 123, 10, 210,
1327             245, 171, 196, 76, 30, 12, 69, 233, 189, 120, 224, 60, 126, 174,
1328             31, 180, 133, 91, 254, 223, 212, 231, 199, 58, 81, 131, 96, 241,
1329             49, 230, 155, 14, 37, 94, 148, 122, 109, 141, 55, 82, 47, 188,
1330             64, 54, 124, 43, 5, 48, 181, 112, 86, 71, 232, 61, 229, 25,
1331             191, 29, 145, 198, 39, 45, 248, 63, 62, 44, 35, 219, 19, 237,
1332             84, 8, 53, 129, 206, 138, 83, 164, 147, 169, 220, 100, 252, 184,
1333             152, 23, 117, 197, 185, 32, 116, 98, 167, 211, 172, 115, 78, 247,
1334             40, 16, 168, 179, 99, 88, 253, 208, 162, 127, 246, 143, 51, 113,
1335             203, 227, 205, 24, 192, 93, 90, 183, 146, 217, 136, 156, 163, 226,
1336             153, 187, 177, 72, 213, 128, 50, 92, 235, 13, 52, 108, 182, 150,
1337             159, 21, 106, 218, 67, 15, 166, 251, 144, 95, 135, 59, 200, 186,
1338             101, 56, 160, 9, 80, 11, 77, 104, 234, 41, 125, 239, 238, 107,
1339             139, 4, 38, 27, 216, 66, 22, 243, 161, 7, 134, 130, 202, 236,
1340             68, 193, 157, 36, 34, 20, 6, 195, 18, 33, 214, 207, 0, 105,
1341             17, 170, 176, 242, 221, 132, 70, 249, 118, 102, 46, 26, 215, 149,
1342             97, 175, 201, 140, 240, 225, 57, 42, 110, 204, 228, 244, 121, 142,
1343             75, 74, 137, 119, 87, 28, 151, 89, 250, 3, 103, 111, 1, 79,
1344             2, 255, 222, 65, 20, 169, 77, 45, 129, 193, 209, 28, 196, 56,
1345             192, 170, 25, 225, 100, 218, 19, 155, 173, 91, 180, 216, 44, 71,
1346             175, 139, 13, 61, 206, 3, 244, 138, 141, 142, 35, 150, 118, 73,
1347             64, 178, 47, 224, 32, 117, 202, 157, 148, 237, 227, 137, 220, 252,
1348             230, 97, 222, 11, 15, 197, 203, 90, 116, 255, 36, 63, 229, 246,
1349             183, 172, 84, 8, 110, 140, 128, 85, 214, 156, 199, 238, 205, 123,
1350             82, 10, 66, 92, 163, 215, 164, 112, 93, 153, 130, 243, 194, 152,
1351             43, 179, 75, 135, 103, 198, 228, 52, 168, 239, 195, 113, 86, 2,
1352             251, 162, 221, 166, 247, 223, 119, 226, 146, 39, 108, 159, 177, 46,
1353             133, 62, 98, 96, 250, 18, 60, 231, 143, 204, 105, 102, 161, 200,
1354             87, 235, 210, 241, 136, 234, 160, 23, 68, 79, 65, 171, 26, 124,
1355             131, 187, 69, 37, 78, 132, 121, 233, 114, 190, 53, 42, 95, 14,
1356             54, 106, 151, 201, 212, 7, 111, 248, 31, 58, 188, 55, 249, 24,
1357             236, 158, 125, 154, 186, 83, 181, 74, 167, 81, 165, 34, 144, 182,
1358             21, 145, 217, 59, 147, 176, 12, 115, 49, 99, 149, 242, 33, 16,
1359             101, 126, 207, 88, 0, 185, 127, 1, 76, 211, 213, 232, 5, 245,
1360             189, 41, 134, 4, 80, 94, 184, 219, 191, 208, 40, 57, 253, 27,
1361             51, 67, 104, 29, 122, 89, 120, 38, 6, 107, 70, 72, 9, 50,
1362             22, 30, 240, 254, 17, 174, 109, 48,
1363             );
1364              
1365             %veggie_table = (
1366             tomato => [
1367             168, 144, 40, 133, 43, 117, 252, 212, 147, 148, 94, 211, 113, 84,
1368             185, 178, 201, 114, 88, 245, 71, 5, 171, 53, 135, 163, 165, 96,
1369             118, 210, 125, 59, 173, 204, 219, 246, 105, 169, 115, 214, 131, 110,
1370             34, 140, 0, 66, 167, 194, 166, 227, 142, 7, 223, 254, 75, 159,
1371             41, 78, 130, 99, 209, 9, 180, 63, 67, 205, 104, 164, 70, 55,
1372             153, 137, 208, 42, 4, 82, 149, 61, 16, 31, 25, 73, 215, 126,
1373             207, 17, 8, 150, 224, 183, 199, 3, 18, 11, 120, 36, 30, 10,
1374             20, 24, 49, 106, 161, 37, 217, 83, 200, 57, 181, 249, 128, 162,
1375             62, 175, 48, 127, 233, 50, 151, 111, 87, 44, 14, 187, 172, 229,
1376             69, 56, 85, 232, 247, 170, 155, 33, 81, 1, 154, 251, 191, 184,
1377             58, 77, 51, 39, 19, 203, 60, 236, 23, 29, 255, 74, 116, 157,
1378             12, 202, 64, 101, 193, 145, 242, 38, 89, 225, 152, 76, 65, 143,
1379             15, 237, 47, 98, 79, 121, 2, 156, 213, 238, 28, 240, 198, 93,
1380             26, 206, 253, 241, 221, 160, 32, 46, 239, 248, 216, 177, 189, 123,
1381             119, 134, 220, 243, 192, 54, 139, 186, 68, 91, 190, 146, 250, 100,
1382             174, 138, 231, 218, 92, 112, 235, 197, 97, 234, 136, 226, 6, 108,
1383             107, 21, 103, 176, 179, 35, 228, 195, 22, 109, 27, 188, 52, 230,
1384             122, 95, 72, 132, 222, 182, 158, 80, 102, 86, 244, 196, 13, 45,
1385             141, 90, 124, 129,
1386             ],
1387             carrot => [
1388             207, 110, 211, 170, 253, 115, 1, 88, 142, 252, 80, 24, 113, 25,
1389             50, 238, 244, 78, 166, 151, 210, 206, 177, 127, 150, 198, 216, 148,
1390             137, 81, 220, 232, 191, 75, 90, 235, 102, 186, 212, 122, 70, 248,
1391             96, 241, 42, 183, 169, 143, 41, 217, 6, 134, 161, 132, 84, 199,
1392             171, 230, 116, 93, 77, 99, 229, 62, 233, 164, 46, 94, 213, 52,
1393             129, 35, 152, 100, 228, 33, 63, 218, 9, 15, 136, 173, 49, 181,
1394             121, 112, 43, 146, 26, 71, 67, 97, 56, 225, 221, 240, 195, 89,
1395             201, 141, 250, 107, 231, 120, 27, 74, 4, 239, 13, 160, 126, 82,
1396             234, 36, 209, 123, 249, 7, 45, 247, 53, 202, 51, 87, 105, 158,
1397             255, 22, 47, 59, 193, 243, 60, 34, 196, 182, 106, 69, 203, 138,
1398             153, 145, 215, 73, 162, 208, 251, 222, 130, 223, 224, 165, 95, 131,
1399             135, 156, 174, 157, 189, 61, 55, 254, 32, 28, 194, 30, 17, 139,
1400             109, 37, 16, 65, 192, 178, 39, 2, 58, 40, 204, 101, 175, 111,
1401             3, 219, 167, 237, 119, 124, 23, 172, 72, 57, 188, 5, 104, 10,
1402             19, 133, 246, 44, 21, 31, 149, 8, 180, 76, 187, 200, 48, 245,
1403             185, 0, 242, 159, 179, 205, 20, 226, 18, 155, 227, 118, 168, 197,
1404             86, 214, 103, 190, 128, 140, 147, 108, 184, 236, 144, 125, 54, 64,
1405             14, 66, 11, 83, 85, 38, 163, 154, 91, 114, 29, 98, 12, 79,
1406             92, 117, 68, 176,
1407             ],
1408             potato => [
1409             207, 150, 249, 92, 224, 35, 18, 80, 131, 86, 163, 23, 149, 217,
1410             42, 110, 173, 177, 143, 214, 154, 83, 45, 8, 219, 232, 128, 209,
1411             30, 28, 221, 245, 192, 85, 79, 168, 213, 63, 97, 51, 243, 114,
1412             171, 255, 194, 230, 153, 200, 20, 37, 169, 111, 74, 117, 135, 246,
1413             98, 147, 127, 29, 157, 183, 189, 184, 62, 215, 115, 138, 34, 82,
1414             238, 90, 130, 237, 195, 102, 166, 71, 109, 68, 226, 47, 229, 233,
1415             14, 1, 65, 96, 99, 43, 24, 212, 146, 118, 156, 197, 59, 190,
1416             12, 227, 39, 126, 91, 134, 142, 58, 236, 223, 179, 199, 54, 50,
1417             60, 176, 133, 242, 164, 125, 105, 208, 21, 172, 103, 228, 57, 75,
1418             95, 252, 89, 141, 113, 234, 175, 148, 106, 101, 48, 76, 36, 132,
1419             38, 187, 139, 140, 202, 162, 193, 26, 196, 205, 165, 7, 136, 185,
1420             56, 121, 55, 52, 94, 61, 152, 174, 203, 53, 22, 248, 123, 4,
1421             9, 129, 120, 27, 87, 44, 137, 201, 222, 15, 198, 72, 244, 220,
1422             124, 6, 3, 254, 112, 235, 218, 64, 151, 225, 160, 81, 5, 10,
1423             181, 25, 250, 122, 247, 32, 69, 66, 67, 78, 88, 0, 231, 167,
1424             239, 144, 182, 211, 70, 49, 180, 178, 159, 108, 241, 84, 11, 16,
1425             161, 41, 158, 216, 145, 253, 251, 33, 116, 77, 104, 13, 119, 19,
1426             191, 204, 170, 206, 31, 107, 93, 240, 186, 210, 17, 73, 46, 155,
1427             100, 2, 40, 188,
1428             ],
1429             radish => [
1430             68, 94, 16, 181, 225, 234, 166, 157, 57, 78, 106, 62, 158, 52,
1431             201, 211, 10, 88, 87, 193, 191, 194, 38, 243, 169, 253, 204, 95,
1432             152, 31, 76, 241, 147, 131, 221, 29, 50, 163, 86, 232, 216, 127,
1433             197, 233, 214, 173, 164, 224, 145, 123, 167, 92, 49, 215, 160, 161,
1434             44, 80, 3, 17, 61, 120, 144, 110, 151, 178, 6, 89, 250, 71,
1435             99, 226, 190, 19, 183, 26, 236, 200, 125, 230, 112, 34, 2, 235,
1436             205, 247, 65, 217, 22, 149, 227, 67, 46, 82, 208, 240, 5, 195,
1437             251, 90, 138, 121, 101, 117, 115, 32, 207, 129, 206, 107, 244, 126,
1438             220, 218, 45, 185, 242, 134, 43, 72, 189, 177, 136, 20, 79, 150,
1439             7, 24, 30, 27, 0, 202, 25, 60, 14, 248, 159, 70, 182, 223,
1440             102, 114, 245, 11, 12, 73, 93, 40, 51, 156, 56, 55, 142, 8,
1441             21, 48, 198, 254, 135, 13, 84, 41, 239, 176, 238, 85, 255, 168,
1442             128, 228, 180, 59, 213, 219, 222, 53, 47, 231, 209, 122, 137, 187,
1443             15, 83, 109, 39, 174, 192, 141, 58, 9, 113, 28, 116, 1, 103,
1444             75, 210, 153, 165, 172, 140, 111, 130, 199, 196, 42, 118, 74, 91,
1445             37, 23, 146, 252, 64, 203, 108, 98, 96, 63, 179, 69, 246, 4,
1446             188, 81, 104, 162, 124, 54, 171, 237, 132, 133, 249, 148, 139, 18,
1447             77, 170, 154, 100, 119, 186, 33, 155, 212, 66, 175, 97, 105, 35,
1448             36, 184, 143, 229,
1449             ],
1450             garlic => [
1451             64, 125, 53, 199, 27, 95, 196, 166, 146, 139, 238, 67, 98, 239,
1452             158, 85, 255, 180, 66, 204, 150, 112, 163, 236, 216, 226, 74, 90,
1453             73, 47, 171, 54, 41, 108, 22, 75, 51, 227, 229, 44, 93, 11,
1454             164, 113, 96, 38, 59, 220, 176, 23, 88, 182, 173, 230, 133, 21,
1455             42, 121, 107, 179, 198, 8, 170, 242, 246, 50, 245, 135, 29, 68,
1456             80, 76, 48, 91, 141, 177, 203, 45, 190, 186, 213, 62, 195, 30,
1457             222, 52, 253, 55, 148, 254, 243, 5, 202, 123, 117, 58, 153, 120,
1458             56, 234, 144, 14, 24, 140, 126, 178, 212, 20, 157, 210, 69, 110,
1459             127, 1, 240, 183, 237, 3, 197, 191, 15, 241, 231, 78, 156, 102,
1460             10, 128, 167, 206, 218, 60, 28, 181, 247, 37, 81, 71, 134, 49,
1461             248, 0, 97, 94, 217, 89, 215, 228, 131, 4, 205, 132, 40, 36,
1462             63, 116, 145, 159, 82, 46, 143, 18, 165, 100, 223, 147, 65, 192,
1463             9, 39, 225, 168, 32, 154, 233, 136, 194, 169, 7, 235, 12, 103,
1464             209, 87, 25, 119, 26, 31, 252, 172, 201, 188, 57, 249, 130, 250,
1465             17, 79, 70, 6, 35, 211, 61, 72, 142, 214, 122, 232, 101, 84,
1466             16, 105, 137, 155, 193, 224, 208, 86, 138, 118, 152, 161, 151, 124,
1467             104, 184, 187, 34, 160, 207, 13, 175, 83, 185, 77, 19, 219, 244,
1468             109, 92, 251, 43, 221, 149, 33, 162, 200, 2, 174, 115, 111, 106,
1469             129, 189, 99, 114,
1470             ],
1471             );
1472              
1473             =head1 NAME
1474              
1475             Crypt::AppleTwoFish -- two Apple iTMS/iTunes key descrambling algorithms
1476              
1477             =head1 DESCRIPTION
1478              
1479             The first algorithm appears to have only cursory resemblance to Bruce Schneier's
1480             blowfish and twofish algorithms in that it too has a table-based decoder.
1481              
1482             The second algorithm is more standard encryption using S-box type permutations
1483             and lookup tables, and might have started out something like Twofish or Blowfish.
1484              
1485             =head1 SYNOPSIS
1486              
1487             for iTMS usages:
1488              
1489             use Crypt::AppleTwoFish;
1490            
1491             my $scrambled_key = '=sixteen uchars=';
1492            
1493             my $apple_twofish = new Crypt::AppleTwoFish(key => $scrambled_key);
1494            
1495             my $descrambled_key = $apple_twofish->decrypted_for_iTMS;
1496            
1497             my $descrambled_another_way = $apple_twofish->decrypted_for_DRMS;
1498            
1499              
1500             ..and for iTunes 7 compatible usages:
1501            
1502             Functions cloned from lower level compiled code which was likely intended
1503             to be difficult to reconstruct cannot easily be given sensible names. Ada
1504             Pro is good, but dull. We chose to be amused during the tedium by coming
1505             up with function names from a vegetable farm.
1506            
1507             For actual usage, see also:
1508            
1509             L.
1510              
1511             =head1 METHODS
1512              
1513             =over 4
1514              
1515             =item B
1516              
1517             Call with the key as a scalar argument. When passed (LWP simulating iTunes) over iTMS,
1518             encrypted M4P keys for your purchased music are currently 16 unsigned chars in length.
1519              
1520             =item B
1521              
1522             Returns the unscrambled key for use with the Apple Music Store.
1523              
1524             =item B
1525              
1526             Returns the unscrambled key for use with iTunes/iPod DRM.
1527              
1528             =item B
1529              
1530             Get/set initial key.
1531              
1532             =item B
1533              
1534             Get/set veggie integer table.
1535              
1536             =item B
1537              
1538             Get/set veggie byte table.
1539              
1540             =item B
1541              
1542             Get/set veggie.
1543              
1544             =item B
1545              
1546             Get/set hardware ID (MAC address or other machine based data). 6 bytes.
1547              
1548             =item B
1549              
1550             Get/set key ID. 4 bytes.
1551              
1552             =item B
1553              
1554             Get/set user ID. 4 bytes.
1555              
1556             =item B
1557              
1558             Key munging, spring season
1559              
1560             =item B
1561              
1562             Key munging, harvest season
1563              
1564             =back
1565              
1566             =head1 AUTHOR
1567              
1568             iTMS decrambler adapted from FairKeys 0.5, by Jon Lech Johansen, and from
1569             the alterate scramble table found by FutureProof.
1570            
1571             Veggie Tales algorithm courtesy of Ada and other anonymous pros :-).
1572              
1573             =head1 SUPPORT
1574              
1575             Questions, feature requests and bug reports should go to
1576             .
1577              
1578             =head1 COPYRIGHT
1579              
1580             =over 4
1581              
1582             Copyright (c) 2005, 2008 William Herrera. All rights reserved.
1583            
1584             Licensing Terms
1585              
1586             a) The terms of Perl itself, plus the following:
1587              
1588             b) UNDER NO CIRCUMSTANCES CAN THIS CODE BE USED FOR CIRCUMVENTION OF ANY
1589             TECHNOLOGICAL MEASURE WHICH EFFECTIVELY CONTROLS A PROTECTED MEDIA WORK
1590             UNDER THE DCMA (USA, 1998) OR EU COPYRIGHT DIRECTIVE (EUCD, ARTICLE 6,
1591             OF 2001), UNDER ANY OPERATING SYSTEM PLATFORM SUPPORTED BY APPLE COMPUTER
1592             CORPORATION FOR ITS ITUNES OR IPOD PLAYER SOFTWARE IN ANY APPLE CORPORATION
1593             DISTRIBUTED BINARY FORMAT OF ITUNES FOR THE PLATFORM UNDER WHICH THAT MEDIA
1594             IS TO BE PLAYED. AS OF 2008, PROHIBITED PLATFORMS INCLUDE THE IPOD, IPHONE,
1595             APPLE OS X, AND MICROSOFT WINDOWS, BUT NOT LINUX, BSD, OR SOLARIS. UNDER NO
1596             CIRCUMSTANCES CAN THE AUTHOR(S) OF THIS CODE BE HELD LIABLE FOR ANY
1597             INFRINGEMENT INVOLVING THE PROHIBITED PLATFORMS ABOVE.
1598              
1599             c) Use, storage, or distribution of this code implies that you accept that
1600             its intended purpose is legal and legitimate under any applicable US or EU
1601             law, as above, and agree that any and all risk as to the quality,
1602             performance, and legality of this code lies with you.
1603            
1604             =back
1605              
1606             =cut
1607              
1608             return 1;