Skip to main content

binius_field/arch/portable/
packed_ghash_128.rs

1// Copyright 2023-2025 Irreducible Inc.
2// Copyright 2026 The Binius Developers
3
4//! Portable implementation of packed GHASH field operations.
5
6use super::{
7	nibble_invert_128b::nibble_invert_128b,
8	packed_macros::{portable_macros::*, *},
9	univariate_mul_utils_128::{Underlier64bLanes, Underlier128bLanes, bmul64},
10};
11use crate::{
12	arithmetic_traits::{
13		TaggedInvertOrZero, TaggedMul, TaggedSquare, impl_invert_with, impl_mul_with,
14		impl_square_with,
15	},
16	ghash::BinaryField128bGhash,
17	packed::PackedField,
18	underlier::WithUnderlier,
19};
20
21/// Strategy for GHASH field arithmetic operations.
22pub struct GhashStrategy;
23
24/// Multiply two GHASH field elements using software implementation.
25///
26/// Method described at:
27/// * <https://www.bearssl.org/constanttime.html#ghash-for-gcm>
28/// * <https://crypto.stackexchange.com/questions/66448/how-does-bearssls-gcm-modular-reduction-work/66462#66462>
29///
30/// This code does not conform to the bit-endianness requirements of the GCM specification, but is
31/// a valid GHASH field multiplication with the modified representation.
32#[inline]
33pub fn ghash_mul<U: Underlier128bLanes>(x: U, y: U) -> U {
34	// Convert to U64x2 representation
35	let (x1, x0) = U::split_hi_lo_64(x);
36	let (y1, y0) = U::split_hi_lo_64(y);
37
38	// Perform multiplication
39	let x0r = x0.reverse_bits_64();
40	let x1r = x1.reverse_bits_64();
41	let x2 = x0 ^ x1;
42	let x2r = x0r ^ x1r;
43
44	let y0r = y0.reverse_bits_64();
45	let y1r = y1.reverse_bits_64();
46	let y2 = y0 ^ y1;
47	let y2r = y0r ^ y1r;
48
49	let z0 = bmul64(y0, x0);
50	let z1 = bmul64(y1, x1);
51	let mut z2 = bmul64(y2, x2);
52
53	let mut z0h = bmul64(y0r, x0r);
54	let mut z1h = bmul64(y1r, x1r);
55	let mut z2h = bmul64(y2r, x2r);
56
57	z2 ^= z0 ^ z1;
58	z2h ^= z0h ^ z1h;
59	z0h = z0h.reverse_bits_64().shr_64(1);
60	z1h = z1h.reverse_bits_64().shr_64(1);
61	z2h = z2h.reverse_bits_64().shr_64(1);
62
63	let v0 = z0;
64	let v1 = z0h ^ z2;
65	let v2 = z1 ^ z2h;
66	let v3 = z1h;
67
68	reduce_64(v0, v1, v2, v3)
69}
70
71#[inline]
72pub fn ghash_square<U: Underlier128bLanes>(x: U) -> U {
73	// Squared value in the polynomial basis is just a value with bits interleaved with zeroes.
74	let (hi, lo) = x.spread_bits_128();
75
76	let (v3, v2) = hi.split_hi_lo_64();
77	let (v1, v0) = lo.split_hi_lo_64();
78
79	reduce_64(v0, v1, v2, v3)
80}
81
82/// Reduce a 256-bit value represented as four 64-bit values by the GHASH polynomial.
83#[inline]
84fn reduce_64<U: Underlier128bLanes>(
85	mut v0: U::U64,
86	mut v1: U::U64,
87	mut v2: U::U64,
88	v3: U::U64,
89) -> U {
90	// Reduce modulo X^64 + X^7 + X^2 + X + 1.
91	v1 ^= v3 ^ v3.shl_64(1) ^ v3.shl_64(2) ^ v3.shl_64(7);
92	v2 ^= v3.shr_64(63) ^ v3.shr_64(62) ^ v3.shr_64(57);
93	v0 ^= v2 ^ v2.shl_64(1) ^ v2.shl_64(2) ^ v2.shl_64(7);
94	v1 ^= v2.shr_64(63) ^ v2.shr_64(62) ^ v2.shr_64(57);
95
96	// Convert back to 128-bit lanes
97	U::join_u64s(v1, v0)
98}
99
100// Define PackedBinaryGhash1x128b using the macro
101define_packed_binary_field!(
102	PackedBinaryGhash1x128b,
103	BinaryField128bGhash,
104	u128,
105	(GhashStrategy),
106	(GhashStrategy),
107	(GhashStrategy),
108	(None)
109);
110
111// Implement TaggedMul for GhashStrategy
112impl TaggedMul<GhashStrategy> for PackedBinaryGhash1x128b {
113	#[inline]
114	fn mul(self, rhs: Self) -> Self {
115		ghash_mul(self.0, rhs.0).into()
116	}
117}
118
119// Implement TaggedSquare for GhashStrategy
120impl TaggedSquare<GhashStrategy> for PackedBinaryGhash1x128b {
121	#[inline]
122	fn square(self) -> Self {
123		ghash_square(self.0).into()
124	}
125}
126
127// Implement WideMul (trivial: no CLMUL, just regular multiply)
128crate::arithmetic_traits::impl_trivial_wide_mul!(PackedBinaryGhash1x128b);
129
130// Implement TaggedInvertOrZero for GhashStrategy
131impl TaggedInvertOrZero<GhashStrategy> for PackedBinaryGhash1x128b {
132	fn invert_or_zero(self) -> Self {
133		// Use the generic nibble-based inversion algorithm
134		let result = nibble_invert_128b(
135			self.get(0),
136			|f| f.to_underlier(), // GHASH uses direct representation (no Montgomery form)
137			&GHASH_NIBBLE_POW_2_N_TABLE,
138		);
139		Self::set_single(result)
140	}
141}
142
143/// Table where `value[i][k][j] = BinaryField128bGhash(j << 4 * k) ^ (2^(2^(i+1)))`
144/// Generated using the `generate_ghash_nibble_pow_2_n_table` test.
145static GHASH_NIBBLE_POW_2_N_TABLE: [[[u128; 16]; 32]; 6] = [
146	[
147		[
148			0, 1, 16, 17, 256, 257, 272, 273, 4096, 4097, 4112, 4113, 4352, 4353, 4368, 4369,
149		],
150		[
151			0, 65536, 1048576, 1114112, 16777216, 16842752, 17825792, 17891328, 268435456,
152			268500992, 269484032, 269549568, 285212672, 285278208, 286261248, 286326784,
153		],
154		[
155			0,
156			4294967296,
157			68719476736,
158			73014444032,
159			1099511627776,
160			1103806595072,
161			1168231104512,
162			1172526071808,
163			17592186044416,
164			17596481011712,
165			17660905521152,
166			17665200488448,
167			18691697672192,
168			18695992639488,
169			18760417148928,
170			18764712116224,
171		],
172		[
173			0,
174			281474976710656,
175			4503599627370496,
176			4785074604081152,
177			72057594037927936,
178			72339069014638592,
179			76561193665298432,
180			76842668642009088,
181			1152921504606846976,
182			1153202979583557632,
183			1157425104234217472,
184			1157706579210928128,
185			1224979098644774912,
186			1225260573621485568,
187			1229482698272145408,
188			1229764173248856064,
189		],
190		[
191			0,
192			18446744073709551616,
193			295147905179352825856,
194			313594649253062377472,
195			4722366482869645213696,
196			4740813226943354765312,
197			5017514388048998039552,
198			5035961132122707591168,
199			75557863725914323419136,
200			75576310469988032970752,
201			75853011631093676244992,
202			75871458375167385796608,
203			80280230208783968632832,
204			80298676952857678184448,
205			80575378113963321458688,
206			80593824858037031010304,
207		],
208		[
209			0,
210			1208925819614629174706176,
211			19342813113834066795298816,
212			20551738933448695970004992,
213			309485009821345068724781056,
214			310693935640959697899487232,
215			328827822935179135520079872,
216			330036748754793764694786048,
217			4951760157141521099596496896,
218			4952969082961135728771203072,
219			4971102970255355166391795712,
220			4972311896074969795566501888,
221			5261245166962866168321277952,
222			5262454092782480797495984128,
223			5280587980076700235116576768,
224			5281796905896314864291282944,
225		],
226		[
227			0,
228			79228162514264337593543950336,
229			1267650600228229401496703205376,
230			1346878762742493739090247155712,
231			20282409603651670423947251286016,
232			20361637766165934761540795236352,
233			21550060203879899825443954491392,
234			21629288366394164163037498441728,
235			324518553658426726783156020576256,
236			324597781820940991120749564526592,
237			325786204258654956184652723781632,
238			325865432421169220522246267731968,
239			344800963262078397207103271862272,
240			344880191424592661544696815812608,
241			346068613862306626608599975067648,
242			346147842024820890946193519017984,
243		],
244		[
245			0,
246			5192296858534827628530496329220096,
247			83076749736557242056487941267521536,
248			88269046595092069685018437596741632,
249			1329227995784915872903807060280344576,
250			1334420292643450700532337556609564672,
251			1412304745521473114960295001547866112,
252			1417497042380007942588825497877086208,
253			21267647932558653966460912964485513216,
254			21272840229417188794089443460814733312,
255			21350724682295211208517400905753034752,
256			21355916979153746036145931402082254848,
257			22596875928343569839364720024765857792,
258			22602068225202104666993250521095077888,
259			22679952678080127081421207966033379328,
260			22685144974938661909049738462362599424,
261		],
262		[
263			0, 135, 2160, 2295, 34560, 34695, 36720, 36855, 552960, 553095, 555120, 555255, 587520,
264			587655, 589680, 589815,
265		],
266		[
267			0,
268			8847360,
269			141557760,
270			150405120,
271			2264924160,
272			2273771520,
273			2406481920,
274			2415329280,
275			36238786560,
276			36247633920,
277			36380344320,
278			36389191680,
279			38503710720,
280			38512558080,
281			38645268480,
282			38654115840,
283		],
284		[
285			0,
286			579820584960,
287			9277129359360,
288			9856949944320,
289			148434069749760,
290			149013890334720,
291			157711199109120,
292			158291019694080,
293			2374945115996160,
294			2375524936581120,
295			2384222245355520,
296			2384802065940480,
297			2523379185745920,
298			2523959006330880,
299			2532656315105280,
300			2533236135690240,
301		],
302		[
303			0,
304			37999121855938560,
305			607985949695016960,
306			645985071550955520,
307			9727775195120271360,
308			9765774316976209920,
309			10335761144815288320,
310			10373760266671226880,
311			155644403121924341760,
312			155682402243780280320,
313			156252389071619358720,
314			156290388193475297280,
315			165372178317044613120,
316			165410177438900551680,
317			165980164266739630080,
318			166018163388595568640,
319		],
320		[
321			0,
322			2490310449950789468160,
323			39844967199212631490560,
324			42335277649163420958720,
325			637519475187402103848960,
326			640009785637352893317120,
327			677364442386614735339520,
328			679854752836565524807680,
329			10200311602998433661583360,
330			10202801913448384451051520,
331			10240156570197646293073920,
332			10242646880647597082542080,
333			10837831078185835765432320,
334			10840321388635786554900480,
335			10877676045385048396922880,
336			10880166355834999186391040,
337		],
338		[
339			0,
340			163204985647974938585333760,
341			2611279770367599017365340160,
342			2774484756015573955950673920,
343			41780476325881584277845442560,
344			41943681311529559216430776320,
345			44391756096249183295210782720,
346			44554961081897158233796116480,
347			668487621214105348445527080960,
348			668650826199753323384112414720,
349			671098900984472947462892421120,
350			671262105970120922401477754880,
351			710268097539986932723372523520,
352			710431302525634907661957857280,
353			712879377310354531740737863680,
354			713042582296002506679323197440,
355		],
356		[
357			0,
358			10695801939425685575128433295360,
359			171132831030810969202054932725760,
360			181828632970236654777183366021120,
361			2738125296492975507232878923612160,
362			2748821098432401192808007356907520,
363			2909258127523786476434933856337920,
364			2919953929463212162010062289633280,
365			43810004743887608115726062777794560,
366			43820700545827033801301191211089920,
367			43981137574918419084928117710520320,
368			43991833376857844770503246143815680,
369			46548130040380583622958941701406720,
370			46558825842320009308534070134702080,
371			46719262871411394592160996634132480,
372			46729958673350820277736125067427840,
373		],
374		[
375			0,
376			700960075902201729851617004444712960,
377			11215361214435227677625872071115407360,
378			11916321290337429407477489075560120320,
379			179445779430963642842013953137846517760,
380			180146739506865844571865570142291230720,
381			190661140645398870519639825208961925120,
382			191362100721301072249491442213406638080,
383			148873535527910577765226390751398593592,
384			149574495603812779495078007755843306552,
385			160088896742345805442852262822514000952,
386			160789856818248007172703879826958713912,
387			328319314958874220607240343889245111352,
388			329020275034776422337091960893689824312,
389			339534676173309448284866215960360518712,
390			340235636249211650014717832964805231672,
391		],
392		[
393			0, 16405, 262480, 278853, 4199680, 4216085, 4461648, 4478021, 67194880, 67178517,
394			67457360, 67440965, 71386368, 71370005, 71648336, 71631941,
395		],
396		[
397			0,
398			1075118080,
399			17201889280,
400			18274910208,
401			275230228480,
402			276305346560,
403			292398563328,
404			293471584256,
405			4403683655680,
406			4402611290112,
407			4420885544960,
408			4419811082240,
409			4678377013248,
410			4677304647680,
411			4695545348096,
412			4694470885376,
413		],
414		[
415			0,
416			70458938490880,
417			1127343015854080,
418			1197664515391488,
419			18037488253665280,
420			18107947192156160,
421			19162632246263808,
422			19232953745801216,
423			288599812058644480,
424			288529533508780032,
425			289727155074498560,
426			289656739085680640,
427			306602115940220928,
428			306531837390356480,
429			307727259932819456,
430			307656843944001536,
431		],
432		[
433			0,
434			4617596992938311680,
435			73881551887012986880,
436			78490141680696557568,
437			1182104830192207790080,
438			1186722427185146101760,
439			1255842266891144921088,
440			1260450856684828491776,
441			18913677283075324641280,
442			18909071508031408177152,
443			18987558834962337628160,
444			18982944052719166423040,
445			20093476270258318737408,
446			20088870495214402273280,
447			20167213706957255868416,
448			20162598924714084663296,
449		],
450		[
451			0,
452			302618836529205194260480,
453			4841901384467283108167680,
454			5143929925186129596776448,
455			77470422151476529730682880,
456			77773040988005734924943360,
457			82302878802978073548423168,
458			82604907343696920037031936,
459			1239526754423624475690926080,
460			1239224910350346366297833472,
461			1244368655808091758799093760,
462			1244066221439003290700349440,
463			1316846060847649176774770688,
464			1316544216774371067381678080,
465			1321678517499150720592510976,
466			1321376083130062252493766656,
467		],
468		[
469			0,
470			19832428070777991611054817280,
471			317318849132447865776877076480,
472			337112591576998189254341296128,
473			5077101586119165852430033223680,
474			5096934014189943844041088040960,
475			5393801465231971028069460738048,
476			5413595207676521351546924957696,
477			81233625377906653638880531578880,
478			81213843724720299461694814420992,
479			81550944227039101504657408655360,
480			81531123888226519659338100899840,
481			86300823443711536449111371808768,
482			86281041790525182271925654650880,
483			86617523322824341624750799323136,
484			86597702984011759779431491567616,
485		],
486		[
487			0,
488			1299738006046506458222088505262080,
489			20795808096744103331553416084193280,
490			22093010801590153330972511183044608,
491			332732929547905653304854657347092480,
492			334032667553952159763076745852354560,
493			353488172825442453295560178928713728,
494			354785375530288503294979274027565056,
495			5323726872766490452877674517553479680,
496			5322430462343269545521631357894131712,
497			5344522680863234556209227933637672960,
498			5343223735138813192394381780571914240,
499			5655810765207079252728962862859419648,
500			5654514354783858345372919703200071680,
501			5676566008484616052719668384441040896,
502			5675267062760194688904822231375282176,
503		],
504		[
505			0,
506			85179629964263847246042792280855674880,
507			1744611744467702083186246766617952796,
508			86758088209258434845116063164938584604,
509			27913787911483233330979948265887244736,
510			113093417875747080577022740546742919616,
511			26999943664381103668358580911944508380,
512			112013420129171836430288397310265140188,
513			106338239662793269832304564822427704455,
514			21376686166587885346660053387399273607,
515			108082851407260971915490811589045657243,
516			22955144411582472945733324271482183323,
517			91716731709159195230362687159343922503,
518			6755178212953810744718175724315491655,
519			90802887462057065567741319805401186139,
520			5675180466378566597983832487837712219,
521		],
522		[
523			0, 2214635, 35434160, 37577819, 566946560, 569057771, 601245104, 603426651, 9071144960,
524			9069099755, 9104924336, 9102939227, 9619921664, 9617904107, 9654826416, 9652748123,
525		],
526		[
527			0,
528			145138319360,
529			2322213109760,
530			2462699945984,
531			37155409756160,
532			37293770080256,
533			39403199135744,
534			39546168999936,
535			594486556098560,
536			594352521543680,
537			596700321284096,
538			596570225180672,
539			630451186171904,
540			630318963556352,
541			632738703998976,
542			632602500988928,
543		],
544		[
545			0,
546			9511784897576960,
547			152188558361231360,
548			161395503660007424,
549			2435016933779701760,
550			2444084515979657216,
551			2582328058560118784,
552			2591697731579805696,
553			38960270940475228160,
554			38951486851886612480,
555			39105352255674515456,
556			39096826277440520192,
557			41317248936961900544,
558			41308583595629084672,
559			41467163705276891136,
560			41458237504810385408,
561		],
562		[
563			0,
564			623364335047603650560,
565			9973829360761658408960,
566			10577215727862246539264,
567			159581269772186534543360,
568			160175522839242815307776,
569			169235451645795944628224,
570			169849502536814146093056,
571			2553300316354984552693760,
572			2552724642325241035489280,
573			2562808365427885044924416,
574			2562249606918341931302912,
575			2707767226332735114051584,
576			2707199334523147693064192,
577			2717592040589026337488896,
578			2717007053115253418098688,
579		],
580		[
581			0,
582			40852805061679752843100160,
583			653644880986876045489602560,
584			693188409941180189197205504,
585			10458318095790016727833640960,
586			10497263064792617144010407936,
587			11091014559058883027155288064,
588			11131256998252651878354518016,
589			167333089532640267645338255360,
590			167295362159426996501825454080,
591			167956209036681874304166526976,
592			167919590239000456809867640832,
593			177456232944942128434484609024,
594			177419015587309007212654886912,
595			178100111972042430053672288256,
596			178061774232961248008515616768,
597		],
598		[
599			0,
600			2677329432522244282325412085760,
601			42837270920355908517206593372160,
602			45428795633905184879228059910144,
603			685396334725694536275305493954560,
604			687948632214248957149866094493696,
605			726860730142482958067648958562304,
606			729498058637485793499841692696576,
607			10966341355611112580404887903272960,
608			10963868854480207642743632958586880,
609			11007178115427983314397857511899136,
610			11004778265903133937491485709565952,
611			11629771682279727329082383336996864,
612			11627332605529883096688550668664832,
613			11671968938199772695997467083145216,
614			11669456436131348349486079460507648,
615		],
616		[
617			0,
618			175461461689777801286478206452367360,
619			2807383387036444820583651303237877760,
620			2977221550663610196245090134271197184,
621			44918134192583117129338420851806044160,
622			45085401560793019655773624368738861056,
623			47635544810617763139921442148339154944,
624			47808384770866268962805625172562804736,
625			38125413239452947142665518765360283918,
626			37963375405337961148097514710413345038,
627			40801691130811387565628775036285354254,
628			40644414592350858800692792598577807630,
629			81603983128007283311993859509890056462,
630			81444135794129491697831641758082007310,
631			84369422491983376478140787897468453134,
632			84204763156427118505170488660292796686,
633		],
634		[
635			0,
636			269724244910308690819273692813996331111,
637			232199515513677491547883795842722758740,
638			133395298592618256604576981193993556019,
639			312368579009455230132394659165882024054,
640			45084713622657908298530299626619146257,
641			92630575956261324892984054513287626786,
642			190552102411369639139440684786049421381,
643			233944127258145193631070042609357422666,
644			163386005247515420986969127991585542189,
645			40790684120649605849735579162369916958,
646			282268834120528834369803371945408925817,
647			120959747616427344434246442485529182268,
648			193958249150568486063756690378034516059,
649			326574703214406518524054097122645049448,
650			84213862748576369307136119963638632463,
651		],
652	],
653	[
654		[
655			0,
656			1,
657			65536,
658			65537,
659			4294967296,
660			4294967297,
661			4295032832,
662			4295032833,
663			281474976710656,
664			281474976710657,
665			281474976776192,
666			281474976776193,
667			281479271677952,
668			281479271677953,
669			281479271743488,
670			281479271743489,
671		],
672		[
673			0,
674			18446744073709551616,
675			1208925819614629174706176,
676			1208944266358702884257792,
677			79228162514264337593543950336,
678			79228162532711081667253501952,
679			79229371440083952222718656512,
680			79229371458530696296428208128,
681			5192296858534827628530496329220096,
682			5192296858534846075274570038771712,
683			5192296859743753448145125503926272,
684			5192296859743771894889199213477888,
685			5192376086697341892868089873170432,
686			5192376086697360339612163582722048,
687			5192376087906267712482719047876608,
688			5192376087906286159226792757428224,
689		],
690		[
691			0,
692			135,
693			8847360,
694			8847495,
695			579820584960,
696			579820585095,
697			579829432320,
698			579829432455,
699			37999121855938560,
700			37999121855938695,
701			37999121864785920,
702			37999121864786055,
703			37999701676523520,
704			37999701676523655,
705			37999701685370880,
706			37999701685371015,
707		],
708		[
709			0,
710			2490310449950789468160,
711			163204985647974938585333760,
712			163207475958424889374801920,
713			10695801939425685575128433295360,
714			10695801941915996025079222763520,
715			10695965144411333550067018629120,
716			10695965146901644000017808097280,
717			700960075902201729851617004444712960,
718			700960075902204220162066955234181120,
719			700960076065406715499591943030046720,
720			700960076065409205810041893819514880,
721			700970771704141155537192132878008320,
722			700970771704143645847642083667476480,
723			700970771867346141185167071463342080,
724			700970771867348631495617022252810240,
725		],
726		[
727			0,
728			16405,
729			1075118080,
730			1075134485,
731			70458938490880,
732			70458938507285,
733			70460013608960,
734			70460013625365,
735			4617596992938311680,
736			4617596992938328085,
737			4617596994013429760,
738			4617596994013446165,
739			4617667451876802560,
740			4617667451876818965,
741			4617667452951920640,
742			4617667452951937045,
743		],
744		[
745			0,
746			302618836529205194260480,
747			19832428070777991611054817280,
748			19832730689614520816249077760,
749			1299738006046506458222088505262080,
750			1299738006349125294751293699522560,
751			1299757838474577236213699560079360,
752			1299757838777196072742904754339840,
753			85179629964263847246042792280855674880,
754			85179629964264149864879321486049935360,
755			85179629984096275316820783891910492160,
756			85179629984096577935657313097104752640,
757			85180929702269893752501014369360936960,
758			85180929702270196371337543574555197440,
759			85180929722102321823279005980415754240,
760			85180929722102624442115535185610014720,
761		],
762		[
763			0,
764			2214635,
765			145138319360,
766			145136208619,
767			9511784897576960,
768			9511784899791595,
769			9511646568054784,
770			9511646565944043,
771			623364335047603650560,
772			623364335047605865195,
773			623364335192741969920,
774			623364335192739859179,
775			623355269484038324224,
776			623355269484040538859,
777			623355269345708802048,
778			623355269345706691307,
779		],
780		[
781			0,
782			40852805061679752843100160,
783			2677329432522244282325412085760,
784			2677290496223211396552724578304,
785			175461461689777801286478206452367360,
786			175461461730630606348157959295467520,
787			175458909960484382084479357963730944,
788			175458909921548083051593585276223488,
789			269724244910308690819273692813996331111,
790			269724244910349543624335372566839431271,
791			269724247587638123341517975139408416871,
792			269724247587599187042485089366720909415,
793			269557014779335169997077158262720172135,
794			269557014779376022802138838015563272295,
795			269557012227605876577875159414231535719,
796			269557012227566940278842273641544028263,
797		],
798		[
799			0,
800			268435729,
801			17592203935744,
802			17592472371473,
803			1152922677132918784,
804			1152922677401354513,
805			1152940269336854528,
806			1152940269605290257,
807			75557940568582965428224,
808			75557940568583233863953,
809			75557940586175169363968,
810			75557940586175437799697,
811			75559093491260098347008,
812			75559093491260366782737,
813			75559093508852302282752,
814			75559093508852570718481,
815		],
816		[
817			0,
818			4951765193102653222304088064,
819			324518883695175481576920715362304,
820			324523835460368584230143019450368,
821			21267669561847020360625076001983954944,
822			21267669566798785553727729224288043008,
823			21267994080730715536106652922699317248,
824			21267994085682480729209306145003405312,
825			1417497042380007942588825497877639168,
826			1417497047331773135691478720181727232,
827			1417821561263703118070402418593001472,
828			1417821566215468311173055640897089536,
829			22685166604227028303213901499861594112,
830			22685166609178793496316554722165682176,
831			22685491123110723478695478420576956416,
832			22685491128062488671798131642881044480,
833		],
834		[
835			0,
836			36238823415,
837			2374947531325440,
838			2374983770148855,
839			155644561412944035840,
840			155644561449182859255,
841			155646936360475361280,
842			155646936396714184695,
843			10200321976758700332810240,
844			10200321976758736571633655,
845			10200321979133647864135680,
846			10200321979133684102959095,
847			10200477621320113276846080,
848			10200477621320149515669495,
849			10200477623695060808171520,
850			10200477623695097046994935,
851		],
852		[
853			0,
854			668488301068858185011051888640,
855			43810049298848690012884296573911040,
856			43810717787149758871069307625799680,
857			148876455481840040977388400813688226872,
858			148876456150328342046246585824740115512,
859			148920265531138889667401285110262137912,
860			148920266199627190736259470121314026552,
861			191362100721301072249491442213473832960,
862			191362101389789373318349627224525721600,
863			191405910770599920939504326510047744000,
864			191405911439088222008362511521099632640,
865			340238556203141113226879843027162059832,
866			340238556871629414295738028038213948472,
867			340282366252439961916892727323735970872,
868			340282366920928262985750912334787859512,
869		],
870		[
871			0,
872			4403688133701,
873			288600105530228736,
874			288604506525094981,
875			18913696516029070442496,
876			18913696511628075619397,
877			18913984939628624674816,
878			18913984935224936584261,
879			1239528014874481160519417856,
880			1239528014874485564207551557,
881			1239528014586057563792801792,
882			1239528014586061964787668037,
883			1239546917003501546688741376,
884			1239546917003497145693918277,
885			1239546916714901443986128896,
886			1239546916714897040298038341,
887		],
888		[
889			0,
890			81233707982813997335800568610816,
891			5323732286361698129399026064478437376,
892			5323813470387665460513561301322039296,
893			106693025038323558335599544096455269511,
894			106692943854298386907704813131925691527,
895			112013501364118570257780825878750698631,
896			112013420130411383347003294350496111751,
897			112013420129171836430288397319336268764,
898			112013501362879819244285733119904879580,
899			106692943855537137921199905908913509340,
900			106693025039563105252314441145757111260,
901			5323813469148118543798664270162202459,
902			5323732285122947115903933305632624475,
903			81234946733827492428577556434779,
904			1239546916714897049301847899,
905		],
906		[
907			0,
908			594486085783387,
909			38960240117900050432,
910			38959672089371250523,
911			2553298296366697705111552,
912			2553298295808809705639771,
913			2553261070049034274275328,
914			2553261070580465833643867,
915			167332957150687900802190671872,
916			167332957150687369388369612635,
917			167332957114126152868808032256,
918			167332957114126710740186074971,
919			167330517486733510198907895808,
920			167330517486734078210815266651,
921			167330517521561408873684467712,
922			167330517521560814405336993627,
923		],
924		[
925			0,
926			10966332679827482266972367871803392,
927			38124844663296950921551885982970675470,
928			38114366386399613244842652547999072526,
929			196681920298776846728032015923978174538,
930			196671629081628796974407939701623226442,
931			190542299396731792838458836488544059716,
932			190552102578700156661001499182331068740,
933			190552102411369639139440685885559930949,
934			190542299556615327311193536268114853957,
935			196671629238657912558730592495217934667,
936			196681920149194714192535481045563212107,
937			38114366535981745780339189625437290511,
938			38124844506267835337229235388399222799,
939			10966172796293009532274787324264705,
940			167330517521560815495794393345,
941		],
942		[
943			0,
944			72057594037993729,
945			4722366482873957023744,
946			4722438540467994886401,
947			309485009821627647508086784,
948			309485009893685241546080513,
949			309489732188110512875175936,
950			309489732260168106913038593,
951			20282409603670189507089975476224,
952			20282409603670117449495937614081,
953			20282409608392555989963932499968,
954			20282409608392483932369894506753,
955			20282719088680010571787530141696,
956			20282719088679938514193492279553,
957			20282719093402377054652897230848,
958			20282719093402304997058859237633,
959		],
960		[
961			0,
962			1329227995786129539536648632809816064,
963			79538856449905297291443472128,
964			1329228075322568137802716665903875840,
965			5212658496300993563292039389380608,
966			1334440654282430533099940672199196672,
967			5212579578832414939914143744952064,
968			1334440575362544102837333518205355776,
969			1334420292643450700532485990679314567,
970			5192296859748494261520502928441479,
971			1334420372182307150437783282122786695,
972			5192376396187092527588536022501255,
973			1329248357422682038838717037410254983,
974			20361638979832567751549659381895,
975			1329248278505213460215339141765826439,
976			20282719093402305144395665540999,
977		],
978		[
979			0,
980			9727775195129153415,
981			637519475187984198205440,
982			637529202963179309664135,
983			41780476325919732413591715840,
984			41780476335647507608720869255,
985			41781113845394919238148751360,
986			41781113855122694433260210055,
987			2738125296495475583457146689290240,
988			2738125296495465855681951577900935,
989			2738125297132995058645130887495680,
990			2738125297132985330869935758411655,
991			2738167076971801427191316569128960,
992			2738167076971791699416121457739655,
993			2738167077609320902378141126164480,
994			2738167077609311174602945997080455,
995		],
996		[
997			0,
998			179445779431127487837447565429325168640,
999			10737745620737215134344868271360,
1000			179445790168546698603366749897022772480,
1001			703708897000634131044425287031848960,
1002			180149488328128121968491990716357017600,
1003			703698243142376016888409375033529600,
1004			180149477673943453883040024927188030720,
1005			180146739506865844571883607630544912405,
1006			700960076066046725303266784177045525,
1007			180146750244611465309098741975413183765,
1008			700970813485257491222451251874649365,
1009			179448528252062075243224798908687335445,
1010			2748821262277396644458062319468565,
1011			179448517598203817129068782996689016085,
1012			2738167077609311192492273150481685,
1013		],
1014		[
1015			0,
1016			1182104830193287124245,
1017			77470422151547264974520320,
1018			77471604256377456111408405,
1019			5077101586123801557370163691520,
1020			5077101587305906387563450815765,
1021			5077179056545952963717261230080,
1022			5077179057728057793908398118165,
1023			332732929548209458863811047687454720,
1024			332732929548208276758980856558998805,
1025			332732929625679881015358312661975040,
1026			332732929625678698910528119383282965,
1027			332738006649795573430174431974522880,
1028			332738006649794391325344240846066965,
1029			332738006727265995581580779072061440,
1030			332738006727264813476750585793369365,
1031		],
1032		[
1033			0,
1034			27913787931393434442745945611867005376,
1035			1304834940060696402066130160249600,
1036			27915092726668638997592028519917603520,
1037			85513662631817799405805906182117785600,
1038			113427450563211233848551851793984790976,
1039			85512367990745767089291528134160214784,
1040			113426155882474345390481490523917568704,
1041			113093417875747080579457757480524835627,
1042			85179629984174048360243806560617351915,
1043			113094722710687141275859823610684964907,
1044			85180934779449252915089889468667863531,
1045			28247820579037185493178006533163838251,
1046			334032687464153273964055613256354539,
1047			28246525937965153176663628485206147115,
1048			332738006727264815893694343189045739,
1049		],
1050		[
1051			0,
1052			159581269772332211118571,
1053			10458318095799563787866669056,
1054			10458166000881466722386387435,
1055			685396334726320212401630023254016,
1056			685396334885867615104480940401131,
1057			685386367033767803118314286940160,
1058			685386366881639017951767512687083,
1059			44918134192624121439953225203975192576,
1060			44918134192623969340279326933098963435,
1061			44918134203080220023487262910128521216,
1062			44918134203080379600001234034729099755,
1063			44917480949925006745161845108910325760,
1064			44917480949924854621132479769746612715,
1065			44917480939955094680487035711460671488,
1066			44917480939955254232645539767773766123,
1067		],
1068		[
1069			0,
1070			312368581696713730584212682923192615030,
1071			176112173085610346004959175609749760,
1072			312544693849373330282008867562966815094,
1073			312369266947590341489642487512209297511,
1074			685396334885867619570929739239441,
1075			312544040481642110825399466169234162023,
1076			175458909960644555167775050928554257,
1077			45084713622657908593678504972914790656,
1078			269724247597567191566239921917602566518,
1079			44918134203080220316200451390796005376,
1080			269557668157563492640553093799648231542,
1081			269724932848443802471669726506084467047,
1082			45085399018992794461298075902115053841,
1083			269557014789832273183943692405380812903,
1084			44917480939955254525363267265575850001,
1085		],
1086		[
1087			0,
1088			19342832785574900341411857,
1089			1267651889435436668774767460352,
1090			1267671232265916365343545167889,
1091			83076834226040777524823160281628672,
1092			83076834245383607860404541522448401,
1093			83078101877779094919154576122773504,
1094			83078101897121927560614287849361425,
1095			5537102792980452816913308525267056,
1096			5537102773637657068977066062387297,
1097			5538370444709325478314306887026800,
1098			5538370425366532036185751287830625,
1099			88613927115349207720581873792977008,
1100			88613927096006414134338130656893025,
1101			88615194767229198424249587458967664,
1102			88615194747886402532198156381263969,
1103		],
1104		[
1105			0,
1106			22597201719828492345855980080133570695,
1107			21351070755881385411218988578433398528,
1108			1412325028241846573730063091364788103,
1109			22680278543512548251249716780320979056,
1110			83076834245383608463887505475270903,
1111			1329248362394993935521534241799638896,
1112			21267994080711448595059189868588929015,
1113			21355916979153785881153653152136363888,
1114			1417822833864969703791996944310140919,
1115			5538370444748875337839919062517872,
1116			22602088507922517380474930001976166647,
1117			1334746158075911715368568048472590080,
1118			21272840313926054415208754343609141127,
1119			22685165341548779816675187321458356224,
1120			88615194747925952995206660287852679,
1121		],
1122		[
1123			0,
1124			2611282426052611546090600695,
1125			171133005073783950284593607147520,
1126			171135616355898709321378597665015,
1127			11215372620515504965851126638019870720,
1128			11215372623126787061154613105530534135,
1129			11215543753500177814085867776574423040,
1130			11215543756111460220682928859663792375,
1131			747508877052361130283296650911023440,
1132			747508874441083704311903918422260135,
1133			747680010035758939572431429748064592,
1134			747680007424481824885076423856585127,
1135			11962880160572143042278552962051866960,
1136			11962880157960865908135647638680533415,
1137			11963051293575941787273694306960081232,
1138			11963051290964664341846751111470086567,
1139		],
1140		[
1141			0,
1142			328363296809338758983560451361977943085,
1143			160135616676479322807566473564788113720,
1144			190663878812649287453558392262752470293,
1145			339578668006686306203518346222176130408,
1146			11215372623126786986854300946173071685,
1147			179448528923324181287210437217172395088,
1148			148920265528537852470223134753592266877,
1149			160789856818252849079011978893847773288,
1150			191406082571770449580640596925104849989,
1151			747680010030889594314755779088941392,
1152			329023013202022006819280404151931061629,
1153			180190731340247544396780622700692378880,
1154			149574507012509177759090307168349475117,
1155			340238385741567358959618068310493779000,
1156			11963051290959871660698932584983564309,
1157		],
1158		[
1159			0,
1160			317319171807580447641464803653,
1161			20795829243581592216631037372203008,
1162			20796146368720648804535214036488517,
1163			1745997623609373655633235497623487004,
1164			1745997306483632340518634820189098841,
1165			1766780736722586200521357368238604828,
1166			1766780419404021373834106693674341209,
1167			90824975428588171885853475178725289648,
1168			90824975111423780371339122165160722421,
1169			90804192276005344535383478838662639280,
1170			90804191958725500743593298311693254645,
1171			91737608732331659820309958084014156972,
1172			91737609049612105852180108548625776105,
1173			91716812942867178044649749840433622188,
1174			91716813260030962596717667643187576297,
1175		],
1176		[
1177			0,
1178			86427506898829809944716116451025745836,
1179			113094722689700189045067032641397409179,
1180			26668067691726662459979658748493738551,
1181			85512287230916561750726715277195616747,
1182			1745997306483642240458475816106579527,
1183			28247739058602629334931971724116059248,
1184			112013501680038783596092219944724239324,
1185			22955144412236117309602612501262560043,
1186			106672272350862390162547736415498214535,
1187			90804192276654146992802987286676876976,
1188			7087916238806786173244293368543205660,
1189			107750894676674853343834482850989263552,
1190			21378071729209093294365860779728125292,
1191			5344517616249458119320171912124403547,
1192			91716813260641081593438490180884658423,
1193		],
1194		[
1195			0,
1196			42837237030537673426895871661147,
1197			2807381166033316965705047845184929792,
1198			2807340235269149908933474560754898011,
1199			232053959852690394223727568884724727892,
1200			232053919655988742394667664289745261583,
1201			229371521292238161641900800478161797204,
1202			229371559592382899943030626146319979535,
1203			329052842256805204535373696166623445113,
1204			329052882538617529273836881130520040482,
1205			326418511217350935265466159592329904249,
1206			326418472841998742414462355404714726434,
1207			118460675663537869037576838450795053101,
1208			118460632912031104799771864928167842934,
1209			120970713949107171881831826865442652205,
1210			120970754804045499960977351402682176630,
1211		],
1212		[
1213			0,
1214			92631261352639365811555202387226394659,
1215			44918137031289639478747066524105703440,
1216			133560375321778269241077834524947120179,
1217			312554616480103920977397438996350500982,
1218			232053919655987524380470578679207952469,
1219			269715147681495778355311066992529637478,
1220			190542340412198445018168159795173916741,
1221			282268834199756996884067709538936094825,
1222			193958934626174689496592175845500584010,
1223			326418511137527156845263587419229323385,
1224			234119588501794113408563619339408834650,
1225			84368746358845688672103379222571057183,
1226			163209255529446082339520390256534814780,
1227			40802356158498995210551412919747280911,
1228			120970754883918452137752377073497866284,
1229		],
1230	],
1231	[
1232		[
1233			0,
1234			1,
1235			16405,
1236			16404,
1237			268435729,
1238			268435728,
1239			268452100,
1240			268452101,
1241			4403688133701,
1242			4403688133700,
1243			4403688117328,
1244			4403688117329,
1245			4403419698516,
1246			4403419698517,
1247			4403419682113,
1248			4403419682112,
1249		],
1250		[
1251			0,
1252			72057594037993729,
1253			1182104830193287124245,
1254			1182032772599249130516,
1255			19342832785574900341411857,
1256			19342832713517306303549712,
1257			19344012440446896336880900,
1258			19344012512504490374743045,
1259			317319171807580447641464803653,
1260			317319171807508390047426809924,
1261			317319170628357921209694831696,
1262			317319170628429978803732825425,
1263			317299829013994203898326614356,
1264			317299829014066261492364476501,
1265			317299827832609949645420909633,
1266			317299827832537892051383047488,
1267		],
1268		[
1269			0,
1270			5192296858534827628530500624252929,
1271			85179629964263847246042862740869300245,
1272			85174437667405312418414332240245047316,
1273			1417497042380007943741765767482929425,
1274			1412304745521473116113235266858676496,
1275			86420588913453671050414591487127597316,
1276			86425781210312205878043121987751850245,
1277			112013420129171855344273332544138626969,
1278			112008227832313320516644802052104308632,
1279			26999943664381122582343586605830932364,
1280			27005135961239657409972117097865250701,
1281			113420532577834793630452194309211338376,
1282			113425724874693328458080724801245656713,
1283			28251287207288016039666533334996219549,
1284			28246094910429481212038002842961901212,
1285		],
1286		[
1287			0,
1288			1334420292952940432792651898569097606,
1289			113093422952926138307335405204804845118,
1290			111759002659973197874686868494311604152,
1291			21272841581577792734305443815349677921,
1292			22596877280194684047464521225417125607,
1293			91820584065147051311233171959284519263,
1294			90496548366530159998218209737292927193,
1295			21357316467309570368040458229336701042,
1296			22681352166545441145431933947171502580,
1297			91738905459452145263982295909421237836,
1298			90414869760216274486446705003510581194,
1299			84477590011804080282960153599481619,
1300			1418897882345765048554983368249513621,
1301			113011747030466259144694781349116160301,
1302			111677326738132298176278642946390272171,
1303		],
1304		[
1305			0,
1306			10695801939444132319206437814273,
1307			175461461690080420123077870585135125,
1308			175451399713441090105459412498923540,
1309			148876455486791806171643976713393669417,
1310			148876444790989866727511657506955855144,
1311			149046283033845496627531479021516768572,
1312			149046293095822135957549097479602980157,
1313			196681839114751656398008445482943403023,
1314			196681849493640945785083414315205415950,
1315			196508999312959173612005636633828529178,
1316			196508989567895184339045368549918118939,
1317			303017347223234166816412488381357117734,
1318			303017336844344877429337519549095104807,
1319			302850090313141413554033247548092977459,
1320			302850100058205402826993515632003387698,
1321		],
1322		[
1323			0,
1324			2032936893096248680474759161387745537,
1325			337624593823310729666642987385496102066,
1326			339657469393187794953467395523734693299,
1327			316898389463173757952872112414934779390,
1328			318931305123122452810360280759585228031,
1329			21809133548725243640996179891819913548,
1330			23842029084099262522577776233401098317,
1331			227914676320065727733422495102033912963,
1332			227221453587594787369259108099225544066,
1333			113601709427120185024750006823613071409,
1334			112908507134898611691299354227862831408,
1335			91876029120362184261581788660856234365,
1336			91182787056219590417064144562028716156,
1337			248724250257225491558602374502547899855,
1338			248031068564326171933735381581851772110,
1339		],
1340		[
1341			0,
1342			695778415448662958640418671772975124,
1343			184594489252925259962698596818842702179,
1344			183898710837515282630285846280660324727,
1345			312242962625750439364311931613856100716,
1346			311547184844127076519786213690435252600,
1347			127898367237124071823368598482454913039,
1348			128594145018708749041666648272285163547,
1349			38114285272002373609548899101072383248,
1350			37439297277183760817053040351103753476,
1351			199981671542538964985143596357633248371,
1352			200656659537396263403867123241192475751,
1353			327380928607660506529099776132965477500,
1354			328055917236304419435710335631285185640,
1355			165597254813636485635112301074818694431,
1356			164922266184953887102274073442908388619,
1357		],
1358		[
1359			0,
1360			178117866173329044473053784985195542662,
1361			316615142237427581482614876828249076552,
1362			138497286215208094141146100521726626766,
1363			259229797813129857848435578409396283631,
1364			91745758153761976346640983665361637481,
1365			60085511830149268445646444431418235815,
1366			227569541358217103426706463444601856801,
1367			184410552800508748557466992571089694921,
1368			16929137482455250931557318022965774415,
1369			133659892980550725062162691836175418241,
1370			301141318429906691782163564149687712519,
1371			97999288480040791070725803158037403686,
1372			276114525216694202265842912593994145952,
1373			222687923438580010434254226049580313454,
1374			44572676550819464682206910156410901480,
1375		],
1376		[
1377			0,
1378			40852786614935679133548678,
1379			668488602912931463120447179518,
1380			668527539525558998146197064312,
1381			10966327728062289164319181538103014,
1382			10966327687819868417294404048424544,
1383			10965728564721386815028096380503064,
1384			10965728525174408319582168986748062,
1385			179445860664825761281489270595374013214,
1386			179445860664862356780932922994509208472,
1387			179445861283794913742740502958912459232,
1388			179445861283833271939260862747961872742,
1389			179456664732804283037384728912483014136,
1390			179456664732767079533256407046526555518,
1391			179456664084123952183866734745249570566,
1392			179456664084086201992031044423021420416,
1393		],
1394		[
1395			0,
1396			311039353700930018905970981149823370992,
1397			300449508877957302952381398077650833683,
1398			10677803307656651326140536697969154019,
1399			112570007077841712463779425679077566530,
1400			253468177178412850244314743284431777458,
1401			242876371329672109092289732986869217617,
1402			123245849280502166632487231818818125729,
1403			86427556787422385153307900684513129138,
1404			227325726882422497258953920675650450498,
1405			216732635643401100284447020700246483873,
1406			97102113599801588333783022981409580369,
1407			28855668795965950938913905093036038896,
1408			339895022491324929965426191119980157952,
1409			329301270756823179460032206016840485859,
1410			39529565192092953658033314116446113043,
1411		],
1412		[
1413			0,
1414			871226768194661964889893572803166342,
1415			333588196511201737985127016352299589281,
1416			332729950683243770488068824104479333927,
1417			23578546062738719894173881601851633570,
1418			22736314386982189250619397859021795108,
1419			312761570479769148399863402739446853891,
1420			313596013591414370495474003550437519749,
1421			11446783715886596112551683118638121216,
1422			10941970284269121654434372024986452358,
1423			322224489547556596069393632823038893985,
1424			322742283919372074056146439105070817063,
1425			33404683796296698028572389893775224482,
1426			33927945306387504170760547902106955300,
1427			302852355994008402285458308125714116611,
1428			302321305919767606100899055585249947781,
1429		],
1430		[
1431			0,
1432			180314795303607339336984920248768612469,
1433			69438557727259574183683485771932482264,
1434			238732661101028275785096241946067530413,
1435			339373395971153223956487630200125806876,
1436			160793377080589574408026767405038506345,
1437			270402194409478013008616711742828700612,
1438			102074323828865800872789418262938823601,
1439			269902713747524241033826260900977115044,
1440			101904078613890867647988636705504475089,
1441			339203627432123380981043095065346524540,
1442			160293419742691921090096364414756195593,
1443			69606298061013972951668454214269183672,
1444			239234808905954082582852549587032207053,
1445			502644763909748968680155227674975328,
1446			180482038678379004879471236684460348437,
1447		],
1448		[
1449			0,
1450			174154276277305276802430687789449488,
1451			127777315823677645032732442931220451432,
1452			127608775971909980924133338086247764344,
1453			217584687951497422282702966675533404389,
1454			217415812172321377559594347491013892597,
1455			259948717857470199773367233384418838669,
1456			260122536206337764394113083274839919005,
1457			90675047154998178658171667126301171101,
1458			90506490823775810628676741803940191373,
1459			47968485320835091943523354494027369973,
1460			48142623117651495193421198294011808997,
1461			307748279228251260815120841526232483192,
1462			307922103915370087572473794632191313000,
1463			180313819851318962401586678114486064400,
1464			180144950410397657837999795640277931008,
1465		],
1466		[
1467			0,
1468			276001459787216847813606545320977694977,
1469			329267928623619503630496534898670320928,
1470			74547120962662659453648975591855963169,
1471			338411528923437381575645370272906304135,
1472			65403510363338098766784744219493292934,
1473			12134455044341705924288056814746298279,
1474			263867015042691329125228938912539633318,
1475			2109837782170328669875726208280769076,
1476			274099517991174010342785005600115143477,
1477			327160891081864446459635803265415450388,
1478			76446670702247726448506512155255377429,
1479			338963028510504805860406317767646406835,
1480			64644522973791813203841748165335148978,
1481			11585755697365561018875987949342840211,
1482			264623610375484866312230794667504129170,
1483		],
1484		[
1485			0,
1486			185304315113767415059063994196106275359,
1487			5706940560249146267056535709003982755,
1488			190262915225715344554001447340602248636,
1489			200296010144888331937788389766303190369,
1490			39585009131913352654022485233970440062,
1491			195253856100633469751383144334182886082,
1492			33961967480734326630442392753277845725,
1493			85111129297462560227291922695575340693,
1494			270412846995128299750075689665318710410,
1495			90786403940742057168675752706640060726,
1496			275339781190145284435142123115707878185,
1497			285328822720560116217606843788293213172,
1498			124615226826823441936800212862842135019,
1499			280318010064808053209181460738428382295,
1500			119023526564108510575614469542820824648,
1501		],
1502		[
1503			0,
1504			239002003588595737316356854298986399629,
1505			264787596782762184100799166267265211023,
1506			155489190632269099706534461618448145666,
1507			222947545296415569800599136771257281549,
1508			27188127033288819108402894146218355584,
1509			128343818919665441402762211344178181762,
1510			280799462016010505747942793231080403215,
1511			268966711127226162452421394353513509467,
1512			161620750844758552107671429318787003862,
1513			17846710863899890872086226172057643220,
1514			253400845801435782420181177078663720793,
1515			146065640410673004167883812138355859030,
1516			295323010901599214370800025109462178267,
1517			227085191977148507051347964428054971609,
1518			33361013091098109845789555978144547668,
1519		],
1520		[
1521			0,
1522			594486085799880,
1523			9727775195399588968,
1524			9728369680926753696,
1525			159581269776760058477384,
1526			159581270362101512352896,
1527			159572118462316983547680,
1528			159572119047658953586920,
1529			2611282425981090918482748136,
1530			2611282425980558353048104224,
1531			2611282416397430911163739776,
1532			2611282416396898346278281544,
1533			2611436883379470828747774368,
1534			2611436883378929119771858536,
1535			2611436892386670083750516168,
1536			2611436892386128374251100672,
1537		],
1538		[
1539			0,
1540			42837237031728713398747722155976,
1541			700960075921702962378595367227909224,
1542			701002913119732305733772026917839776,
1543			269724245230065059558421969681992098607,
1544			269724287428485695749782655406367548647,
1545			269064823529011946940529269376030197575,
1546			269064865727470962072638718017460879503,
1547			191356950945134111488490079298527501032,
1548			191356908741761708203417624033050565920,
1549			190666375462968164196563142152858861184,
1550			190666333259557391416627811204996495688,
1551			91867351152933910181522565175757420999,
1552			91867308320648645841668842394768293391,
1553			92516388260231267131269450278634839471,
1554			92516345427984995730888062332486081127,
1555		],
1556		[
1557			0,
1558			276188654499187104477864813293211733901,
1559			16490734864487726404515074746773548058,
1560			260030226717207796955755555778046059415,
1561			334010757702195292349489082082004785556,
1562			69785155165072582306250128156545816089,
1563			328486153806027981458329124451817190798,
1564			75642065982813651337493156547757521411,
1565			226758170947292519292503118092091093406,
1566			134667593864321180818795495168124829203,
1567			221898181046541776798081327353227599236,
1568			139859890681693902411345086289744531977,
1569			108748301199204764694064266656180480010,
1570			210143474252670363585357184981756929927,
1571			124574422063324143617761482749667181584,
1572			194649660466107624492806078774023801757,
1573		],
1574		[
1575			0,
1576			227668491408281491920178131152544574540,
1577			134248813985490907407654413093459681587,
1578			276106770391237306059874268963619392895,
1579			128391486159371755022995225724356978023,
1580			270913762313164434061718981123944565035,
1581			5857832529486140460341037195966776404,
1582			232861334552962941655120285792087451672,
1583			75108090914900497356883108903581171557,
1584			196424945963807784778648662784293278505,
1585			122944082836004290750087614920359403094,
1586			328617547840146434088118295813359825434,
1587			117086420173103968233942920101654714882,
1588			323424874559246091720800422799301801550,
1589			80965588605123542074179345340048292657,
1590			201618123908131599317199758550108379005,
1591		],
1592		[
1593			0,
1594			179617737658595175273048320664653768,
1595			222583728481043129967452409635203844176,
1596			222430346991142647441885119333073536920,
1597			97881957548842354140846477659812567995,
1598			97708455673017604344134835660795761779,
1599			317474878661685108870534985467404260331,
1600			317633077776260940636549593448791890979,
1601			60305784876236901740983866876918155108,
1602			60463953884846176115788891184758065324,
1603			183653686679002128926364269839383318324,
1604			183480154695972879300072132974202257660,
1605			134236975090870910146870055140972584159,
1606			134083562860868747309378809339759006487,
1607			259910981508575428537581001824086938767,
1608			260090568504894396240192690619081399111,
1609		],
1610		[
1611			0,
1612			281714057279632116784118952921150863007,
1613			227184892929460730840056327637315597005,
1614			160972224147148438245474760087164322898,
1615			45030185732706864187236033717839894839,
1616			321758055801458576668532595798444715944,
1617			184816066306278319262938616958167493626,
1618			118272104448077708934954735434857586021,
1619			222656916183397801364450663376603491069,
1620			154782671417531786369025984715216886882,
1621			17820318066138784189700153323495168048,
1622			295878957186561088864683193554811498159,
1623			178627142557921117793507000345633633226,
1624			113744756230189403303184572083313247573,
1625			59194416727382440892633557862006227207,
1626			339577704140778191817982242287545530264,
1627		],
1628		[
1629			0,
1630			270880968783830611883930315277924943681,
1631			55548582640339506155877617167945108518,
1632			300423749616500225486809962735434124135,
1633			174646194111750395265995750032657314190,
1634			96589150854268022378353927482442430159,
1635			226850937503391722335152395901494918568,
1636			129434232521153455189574714931213875945,
1637			106816407247818917900291452160952673384,
1638			206808242700387913582312782684104647465,
1639			161617133966889060804633818350256498766,
1640			237098874343646180161397876793579958031,
1641			280797899826925794643000555243286681062,
1642			33181123728553560876992522960847245991,
1643			333584015416879096113919226306558089664,
1644			65444828165674471525818164046282301057,
1645		],
1646		[
1647			0,
1648			22866352714759349297743602837542803121,
1649			254281459605717326901985524762279762950,
1650			231946185466666070557062455368824081079,
1651			173190302710618635095586134900580503160,
1652			196024034492142140622785850296455223497,
1653			81124097033709363301495639697394111102,
1654			58756212746394732828367115329039238351,
1655			128436502185342762200985620912138895312,
1656			151096453172207109119681387209213487457,
1657			297514301286018888802373231438165271510,
1658			274988213094582319609815361067511674215,
1659			301510296708828440139269246054552793512,
1660			324202541258122411449996575420713887513,
1661			124407894153150099286090892931221826990,
1662			101914088739248058493758219012308744991,
1663		],
1664		[
1665			0,
1666			27924753620101420843633820506445538672,
1667			199394760774579740149692729321037372919,
1668			174129274443367004561516139532611057799,
1669			58523951287237609402189837453496698986,
1670			75793604376470989734768813246057229594,
1671			247263771096469840563449517516123428253,
1672			232653060777569031429027590251486458093,
1673			190133492778561400508386660448226697195,
1674			204745171493082636715363103483549563547,
1675			33274353041295324219751043299975938588,
1676			16005029632522731987007455251115255660,
1677			216732583532950025594269921071231309697,
1678			241998389222674661295138511963553657585,
1679			70527735723922931296732602621967764086,
1680			42603960821390825512801258511834017542,
1681		],
1682		[
1683			0,
1684			292061740055561918212990570935235088783,
1685			101265629379972656010373039278465548259,
1686			201492404577108928965205103601223954028,
1687			166339547895041701666103737559754588277,
1688			221455992825742546238190847279031800314,
1689			65198898845916303819211595697709989782,
1690			311983424889593214737171649867963870745,
1691			232160725235260287451933171699037011227,
1692			155610803707974261655737339774252084372,
1693			301109296013319323313367660276685767416,
1694			76090554198959528038546123224119710583,
1695			281190531927183732632097339572423867758,
1696			10895225138086296125248451009587064033,
1697			212200706610073834341428973030780256909,
1698			90539805779284807925946069642979496706,
1699		],
1700		[
1701			0,
1702			296903889884601195474115295030891355049,
1703			65210409289519969999595243727968494610,
1704			316784842780407290402730080803858874299,
1705			44655056928259743984355882187419693242,
1706			338651250425886036952536841837286501139,
1707			22053330332431489065390919800491431080,
1708			276203153211269808913568802871327379201,
1709			231865981974240820595292499837474009806,
1710			150464172372485412037596566184897472871,
1711			211849990062929747349893577772551902940,
1712			85388804633781375006951353637722754421,
1713			191364773956558799218351343341446185588,
1714			107221421467301603238354639996259719645,
1715			253843983119841885058348011229040223846,
1716			129792033579171398257409139988838202831,
1717		],
1718		[
1719			0,
1720			2395221375571483215993844512423612015,
1721			97441922403404435403948437926710356474,
1722			96389397817447838770036912623378179989,
1723			107596239770448714658183827571166528784,
1724			107994698480330614443772890522107169663,
1725			34211587684372209892781091531982761194,
1726			32491528428665690715331619983762580101,
1727			188851660926077037398663617662554271992,
1728			191236436855593557673902972857632685719,
1729			264999912906770905612480063451947915522,
1730			263937064569526474358477423490510608237,
1731			296260977845842704727221169231709418984,
1732			296648991119573466628156468927482968967,
1733			201624194028875259029780385055782542354,
1734			199893811031784725270245102141962326653,
1735		],
1736		[
1737			0,
1738			243359582578722362784265127125876674866,
1739			101560345486891580763158267152167133630,
1740			334231199425894683381948527940129517708,
1741			96266605955400214002651810814313303026,
1742			339582052642851380662430419695452297920,
1743			5376821120405390932324471928010828364,
1744			238091808254346471952700150387218905982,
1745			338447316672961592269959286938362341952,
1746			97759525793218853716485937274347158386,
1747			237897303948542193765179924415869258750,
1748			7871590577733662662799939756788652748,
1749			243180312498372005303472376229391851954,
1750			2531465173350398706364269329988087936,
1751			333081233506412190325444236712956755980,
1752			103016579277060851221388032635175866686,
1753		],
1754		[
1755			0,
1756			96119619389439446535927700287956323473,
1757			21644141032164225597569400447947752103,
1758			117010794603222219271639738641926180406,
1759			155852627946614749508463124444720347058,
1760			81165514034461891150563437944737970979,
1761			134296757290709435927437652074090263829,
1762			60186068449372268826679688729037044100,
1763			323943410653500533123292701830027865080,
1764			249867854471289369293824006417409959785,
1765			303052174263738634706542846565121599839,
1766			228223815196016999438939019070413153742,
1767			179389405754081066286273572367765462090,
1768			274791025288209933738380377888982290651,
1769			200368912480333034030586379449807019757,
1770			296346794231944296619134731735464940156,
1771		],
1772		[
1773			0,
1774			96882071401903854464403403281076010431,
1775			115638721301018368504442536235860930688,
1776			40032523641488209710926517610774891839,
1777			233579514493111402706436426185080688417,
1778			307524365961716731162705291596015006366,
1779			331346141832966410398571389627981856673,
1780			236126129051529528779074158280391016990,
1781			206104678867382772080400699962288464135,
1782			281695730557384884985518275895558954168,
1783			273745113254877513622157535942940676487,
1784			176889444560451957892401029715850095672,
1785			70073089362867830283817578245912964646,
1786			165267419623301674234011001882178589593,
1787			130641498687192209488313910412885892774,
1788			56712492770314358213207293541568422681,
1789		],
1790		[
1791			0,
1792			281278013933112223129124886439317643539,
1793			232763240781025309375583182858389294704,
1794			165492719344457554348899986740253470563,
1795			264290634909952735573225573565097174109,
1796			28291093732438528317579100830887789902,
1797			140607877685217234976910822841132902957,
1798			247673763294340294825212504102301813566,
1799			193210682473864347974881997460802058719,
1800			88763183688407033135831270020617443532,
1801			82783868003054674605024509109368469423,
1802			316167943023876688801987123839954425532,
1803			116387936100145418287855643060981915010,
1804			175560247880360813576363989225988193425,
1805			330412166109001451921205043271394841586,
1806			57235931536341809601345876491681428193,
1807		],
1808	],
1809	[
1810		[
1811			0,
1812			1,
1813			21272841581577792734377501409119104880,
1814			21272841581577792734377501409119104881,
1815			178123058470187579300754373079857658247,
1816			178123058470187579300754373079857658246,
1817			199385512912804893619196379359386572535,
1818			199385512912804893619196379359386572534,
1819			290775764610634935130283808291883004269,
1820			290775764610634935130283808291883004268,
1821			269502925722814680869854526785368088093,
1822			269502925722814680869854526785368088092,
1823			123286563107732257334485956577181255914,
1824			123286563107732257334485956577181255915,
1825			102024106288270075849803661332405790618,
1826			102024106288270075849803661332405790619,
1827		],
1828		[
1829			0,
1830			185309517472602589216710143146226674206,
1831			53295700386772120146877216687180379394,
1832			217251876240531835684360562341246574364,
1833			1256247540887053364915746426726458197,
1834			185555192509061293474965090844348631371,
1835			54381869598664157645570941315513538135,
1836			217332706166219359227015018334748916809,
1837			28816298555245860339710940901963387739,
1838			211038343804668740364384976426661198149,
1839			82026320171054915912161658638885758553,
1840			243066369934705605080193347963163790407,
1841			28392148302001632955173884020902850574,
1842			210295494920333362730824069501458782736,
1843			81437284202606244634270517673329001740,
1844			242153483325808563302535849099309182738,
1845		],
1846		[
1847			0,
1848			243359572833697916948025442825716044212,
1849			263453846404814789355711917085675839542,
1850			150400155940933880193075855785239146882,
1851			76537859274825941436293810699198731601,
1852			189425343693047209937201023160918476005,
1853			339825337293559780922630255076350522727,
1854			96631970667769021053620632211003368659,
1855			161196126388831825962169909265839409327,
1856			274238458691542478290889654611654531355,
1857			254497263831479677964139401202731755673,
1858			11149049180248455090685439280997054765,
1859			86158893687047170730818466366406581758,
1860			329340902171306088129783691131114998858,
1861			179293987301787271685950057092582063560,
1862			66417861006432030997913510866310311036,
1863		],
1864		[
1865			0,
1866			106994982540732669962548221424626373053,
1867			6493594693566525435436461231987003001,
1868			112469794920118108626654814139366088644,
1869			269255404193321228129233851448921676677,
1870			205941090588182377172473922766769670712,
1871			274413754936400199406703278607846823420,
1872			210081981180389462662379404269678380097,
1873			302766969745817943338580826238557290897,
1874			238890924666475551755833615589703815212,
1875			307240272122411028717310935661009407976,
1876			243716863942080578183354420028823739989,
1877			54947324554944703187575867798452492820,
1878			161044354115520474649780370687272274857,
1879			60754551890318512945207186907639338093,
1880			167205532902360064912872777748192249296,
1881		],
1882		[
1883			0,
1884			2242402909557391341593841539292758713,
1885			22214108599700981008182833648502209939,
1886			22729743679476267610288760910353334058,
1887			253190952722871515981553997793381301600,
1888			254988896652171446192093120029894459353,
1889			232347615099579947861168719789498941683,
1890			233130784905843761500816295338686235210,
1891			27123468159686532804805922160363363744,
1892			28952668579546808838325770909787119385,
1893			6404741853096268300020442598785458227,
1894			7302252525367569885727580255003746954,
1895			226119497584790110097659138222410260672,
1896			228226617961195871806200745805642982009,
1897			248125910492342588247937206163009903955,
1898			248589347414413501573910312387449298922,
1899		],
1900		[
1901			0,
1902			339131259562057497622948230322569977160,
1903			59915962713061617298807751527029353599,
1904			279393175059320657334616882648394805559,
1905			210430742635216460660379674164074574308,
1906			129502103336002857313807999277549448364,
1907			238410022978388071723076729726931033499,
1908			101677335451344687336785601806393295059,
1909			206582045058854843146102165027508004540,
1910			133296953592468071035439674131438418932,
1911			242548497776268081458886739218432264899,
1912			97508297614069054523030128542011201419,
1913			6839503669551644310506890088933480280,
1914			332345689417750189269332424450535213584,
1915			53451300890641182195999211776704445223,
1916			285888323857303070336683521733665711727,
1917		],
1918		[
1919			0,
1920			322148628221678689059434274821700697625,
1921			86013033000295427489367712929785813229,
1922			237838681290100797740932469596629116660,
1923			123695746843911268415686138874745135322,
1924			233058811063404178267588539719883464387,
1925			39520819890588520870042373477891487799,
1926			318853747290523050726030156710042076718,
1927			101158937162630737346756866420507424707,
1928			252891164267786377215171707111307839962,
1929			16859415387151633346209657199047454510,
1930			338893772107030647963372426638237241655,
1931			22702983899150565377544535806342666009,
1932			302150100878964708085523354564627310848,
1933			108508264157681556618095711327205625844,
1934			217964829899181002255162813398547378669,
1935		],
1936		[
1937			0,
1938			180734810469835153192423176261361776530,
1939			212414520340284147893387459698294877892,
1940			32180848132218354255557294605302094166,
1941			254754413577923282370680087297258965580,
1942			74933452902419083537360977025259601374,
1943			43087752584210005709484204766090306696,
1944			222739882947629355136200200924508558106,
1945			318772812891042678246567012390769182821,
1946			138453472380144678091160253745145217015,
1947			149023573942503627048469433261443753633,
1948			329506552468627970412341411633560752435,
1949			106953593953792282176277099936070926889,
1950			286525248311075959128544628325907314107,
1951			276121461715340208105205148408729562349,
1952			96053861393145735055464338408212224895,
1953		],
1954		[
1955			0,
1956			23534795660742517158384838884479883757,
1957			285135655629206829898443214626426699824,
1958			264804588463196308988640110346428062173,
1959			178710184928723039367604033838733875182,
1960			201746520080791346253315379312427142659,
1961			107591962785796325360196590993739061214,
1962			86762435130920146120357925012922814003,
1963			205533215505269172099003676130744240887,
1964			184871139369649309364823000698315789082,
1965			101205021693564986817841146406619269831,
1966			124406212236268894590316078638313837354,
1967			38309202526533556028283947604770610457,
1968			17813279900564303198233292935244973300,
1969			268925700179516639100183445707152104745,
1970			292293044212062605129298372172207178948,
1971		],
1972		[
1973			0,
1974			151157124857551230055894734808659633026,
1975			174172324068034001300256066326029014314,
1976			322667889482640823899438768734721259176,
1977			185087044422952134792519674300694464960,
1978			333022125260149163365999873394323663426,
1979			10915045056764309463414999514208869610,
1980			161511035972982217537032137124743004008,
1981			328347128361602002895890059781362174427,
1982			179043841332555353339413276884964862553,
1983			154258066358470548376720159483271470321,
1984			7615973213568392140884284930510028659,
1985			165131521537728134552885156273133928475,
1986			18011453915430918904204870791375545241,
1987			339220259155926103372008337189320348977,
1988			189439646379582541964626845521388828339,
1989		],
1990		[
1991			0,
1992			113551942339262267221907597845061488593,
1993			244383024636004965550777396952493198810,
1994			301356901422784449296304797978026885643,
1995			155788813373328758335012945427240838135,
1996			43026505811583965570719306307495734310,
1997			259083299757039174721677191820348485165,
1998			201403676238901643527717277121010147836,
1999			92494228540583749796866364941006300484,
2000			22560257143694189899830123352982858389,
2001			322087441702413439226178964228557531294,
2002			222160370329465781540061210762550749007,
2003			64666975149410337501531031336992343731,
2004			135306855524555260329560302101794081122,
2005			180090220696151550407874974249429470057,
2006			279227819563238152138409888457397060792,
2007		],
2008		[
2009			0,
2010			76603561807959376755843581990920496411,
2011			159827543308872812072444312587089216949,
2012			87214472066699553312968410985569689774,
2013			44202663409934364396069792166513810112,
2014			33066181736015767408338290451846971355,
2015			118948824567933931052707704121932193653,
2016			128758474105704414151530281758192745070,
2017			174589151404806096663496027305370441874,
2018			248534054354698831525609129439798263177,
2019			334160963909702883656715687339196407079,
2020			258889233894264454708068195777116928060,
2021			215468521717842144629206475213094699602,
2022			206990698817810266264127289861163280201,
2023			289958952072488443602894628639418271719,
2024			302427260467704020161948945296034980604,
2025		],
2026		[
2027			0,
2028			160866852277491510796613700893933628364,
2029			23793094133091128290195632538134470303,
2030			139422058723014087099900759680290108755,
2031			134850495782259835997795595390977992686,
2032			37834135778417719188979844103839845410,
2033			154964766420859005705591809183029213553,
2034			18032623089293705542094255738190418621,
2035			201414974860201928500967489705002147042,
2036			317035335587271996041011078678936876846,
2037			178622778364347505506289954639666954877,
2038			339475831946826333006249434868221716913,
2039			322942006122933403736145544858720959244,
2040			186016836453070821635047131878548213952,
2041			301829436570442096824065839845133067667,
2042			204825239989860051264065568206683229791,
2043		],
2044		[
2045			0,
2046			211940441100632940070728625152106637287,
2047			284972502400102471396005486951819933250,
2048			97124744734390519781685671849487454629,
2049			11801882612646346223213094179602092822,
2050			201475625050784189032997981941427729649,
2051			295770116672784470500220569271447496020,
2052			87653721080710243479390941825296335539,
2053			77081898498578571605447993215017836986,
2054			221395998777286199082960252043896505949,
2055			318510298061580324835998734166552221688,
2056			150103554915595269165400360126091833375,
2057			65285887050082768705407077668412633772,
2058			231865347350703319507822636486970152267,
2059			307706862063440649959697298684197651694,
2060			159570014354142054542414945962742899465,
2061		],
2062		[
2063			0,
2064			205372855596902200983869462061065523528,
2065			284623511121782780952344237278986612181,
2066			101857957305031135943850646160059989149,
2067			80182612356378361602942113246756999472,
2068			221751388320835534233373945909547974776,
2069			311635867514215255867655127971374415077,
2070			150139097425128883543712569458778500525,
2071			316980056009943044174527974044995267748,
2072			155485861154313111230752392810144529900,
2073			74895593000911761241740069286064947569,
2074			216461711334671827227851623968993792057,
2075			279359836818865108000191776716017221012,
2076			96596858235521612078247714884457131228,
2077			5372766412431546853590418587668189249,
2078			210742964378588198529416105837462372617,
2079		],
2080		[
2081			0,
2082			64186352456003766505740589822759856697,
2083			339707243862477062652413501692864161715,
2084			276276512820298889898314279984428092810,
2085			279252811694227862020117484520002814939,
2086			300903766699714346573929034555489184226,
2087			60516841306631984715146702121352619112,
2088			39621304564057975607624224618340027985,
2089			54809480066078311936294675347427567638,
2090			33823828652179083053620880117573009967,
2091			285341705257039122477609787515138264997,
2092			306901247536253612063054590536532764060,
2093			333874070989235883514296820397144550349,
2094			270353022144706504644386356024444895732,
2095			6297985097386080212929434671343520894,
2096			70392721656318205944321340072960861767,
2097		],
2098		[
2099			0,
2100			174985988737277424980776175160916846157,
2101			50293511405934303233594766437137148100,
2102			221250236174882363015125841161649409673,
2103			159660583917119289461557893343789601988,
2104			334594567904667564680056787541256860297,
2105			124675789524687954657487605637600787456,
2106			295663587581102271701990592213819464269,
2107			108675178376694273278143275471695213140,
2108			279672699552289657266858730881384535065,
2109			154295560434923758499386619551816161936,
2110			329239266746586044318509340697424510173,
2111			55659180280751384781156155080253449872,
2112			226604858981446069965508275017238642909,
2113			16001299640735639725183898620467039828,
2114			190976241514692633764037268615438624793,
2115		],
2116		[
2117			0,
2118			190598368330225402529695773509466399327,
2119			339836443325532539597788181362398969785,
2120			149922203373881895227068473736669732326,
2121			65027191086383698393307949368672154226,
2122			254589370852686124001500173787176718381,
2123			275492040702495525394032499377346825675,
2124			85248414924016422131581283974589640596,
2125			2382170743475434363981583883072574511,
2126			189628583462839604889155661228840138352,
2127			338126677723196288315603687131215932310,
2128			150219583100750048860442973444736715209,
2129			65303560122748179083746964674599478877,
2130			252900778200746945854829399677984785410,
2131			274543271603331543628141465017197517284,
2132			87609407638133864528974388600179325883,
2133		],
2134		[
2135			0,
2136			254796423731546912729959076250467369090,
2137			290032254665530641140529890491402170389,
2138			134927994084611968527887321265729515671,
2139			195123611585639426583294910730303724408,
2140			60456211393295503845816733477169748986,
2141			96999222110875421436315283737557494637,
2142			328700288729021253042425354258722417647,
2143			16188413194299230038794540878411540827,
2144			238751057311870686120468460903899343321,
2145			284620463821980475055159610603643148622,
2146			140482334763942467342703734993658976716,
2147			211215956423545196814774970909691703843,
2148			44314778043411333526550987739876324001,
2149			91491364198390656546477724118243689014,
2150			334158561230299029591566598179504145076,
2151		],
2152		[
2153			0,
2154			242385279711200124841234209675067490071,
2155			242091061330568221732716284110760824607,
2156			626932944198128323727700077178302472,
2157			128592951327823086066383881068852178872,
2158			285657721594331239467711478744604020911,
2159			285280754461133587050643575337331564711,
2160			128637366166828290927026872799104786352,
2161			117486595440614830906891457609076401885,
2162			316660916423733518931187948276588878282,
2163			316699334638691972358026946326440094146,
2164			117115628724318801052364813244178749141,
2165			75584298301507628788843231116948080997,
2166			189439438342715145987612742714704033394,
2167			190059062639543506432902312131166783098,
2168			75297384755196725539183404842213685613,
2169		],
2170		[
2171			0,
2172			233826335746774767334725881902034684809,
2173			28364881543290141075340211657291319977,
2174			248231721786338069224040260810187358496,
2175			91166461692831476885059003251748701622,
2176			313029744515410982542807263012565978687,
2177			108669037597370250106534416619582574367,
2178			337840473505354020100492412541396403350,
2179			242184335819148242854608259115745834461,
2180			34364279349163159098228102480106225236,
2181			217193149169596538939354996565110669172,
2182			16681255907748139504475829316617385213,
2183			322529989039529485478756872315121922155,
2184			124014529482362790985781167405349927906,
2185			308318031259184191456775925316768283330,
2186			95843086360637159098596753469290656075,
2187		],
2188		[
2189			0,
2190			244165419867394831798337502973186114680,
2191			239257892663744953125580631752732954211,
2192			5731818987841436080339036396500306459,
2193			82091832550983281202374204426377664963,
2194			184029349785624428404633789680626376123,
2195			189067978444966425412413718909921744800,
2196			76501510387581135052265201952382702552,
2197			5947261267765674175673704087157455424,
2198			238980213809381355330736456300876938808,
2199			243944536811363585425331568412713972771,
2200			283281889902295849956081792116060251,
2201			76737792863176433426053688400333841283,
2202			188810855792932741301298399977255512059,
2203			183788113351369047111271336244671737312,
2204			82353746902554919023316929093533526424,
2205		],
2206		[
2207			0,
2208			254140090249627817161425486013700371963,
2209			227266692154114686730695429716737734932,
2210			28954211955373644605695469591684893935,
2211			189533906487376286955364671158566438160,
2212			66001857031407416198364608939715145963,
2213			48429163121277539693524555480952077316,
2214			206521169622418690086161846981912168959,
2215			146050533386952718388573491696641303413,
2216			280227427798761839994909629495686534798,
2217			264649874448073191551739607456928488033,
2218			159716022565316658624951838115801739162,
2219			302350857258022203293120156209929397861,
2220			122658641972132457377626521920608392094,
2221			97777788250473781382585101105560362865,
2222			327980699066178775662257231700293642890,
2223		],
2224		[
2225			0,
2226			102160419725845536254942728958470165266,
2227			70639818787634668711315657407596496076,
2228			162165052728953558116433432182562756574,
2229			200087911737738523182012714770395903423,
2230			290254061899428750121331196055777158829,
2231			217511730081949985297995594404000149875,
2232			318310469869834061914146627099648139873,
2233			174038805751766388928154555097797543059,
2234			274100176008288565981855599528830064513,
2235			244298143647865583658532139742446501983,
2236			333727051033398770650611287443682546509,
2237			27130403866774069181565504839561244972,
2238			117897625854095512401950128316588319294,
2239			44267491688548594651133219932984931808,
2240			145669772685384784477530029717634410226,
2241		],
2242		[
2243			0,
2244			274165460966508248962977738184404225613,
2245			129325001000909013481606729817824767128,
2246			232663213133446211626733789233641611989,
2247			200266289476752292614578685026572787154,
2248			118196040898217889934428378690256278431,
2249			329497737205977787026639567377050923338,
2250			76600260123002239294193049664849428231,
2251			324307484315345262958348349988115031197,
2252			82043515712113258410792123718731852496,
2253			194982747880831036252747108944544696325,
2254			123545987182717923048758756775371294280,
2255			134681590962981517707140693140181023055,
2256			227385683925088841311306935997260445442,
2257			5450244226103078515608463043790886359,
2258			268981524858039991925556199499279375258,
2259		],
2260		[
2261			0,
2262			150190930591952928999051549319021236578,
2263			247955838794335913912499639684781343594,
2264			269123036281239584487528857491235148296,
2265			117697991270665662386115399114074291391,
2266			53784212552499483555000597910619057629,
2267			300412023269148533865395723335799046101,
2268			195380793878569942519347138658351115959,
2269			253545869294497234664812341129005849845,
2270			274166597777477014488177416424409386391,
2271			5595486468573194461664799526001696671,
2272			155229522897676679275355145398238400253,
2273			305997113685272603780354266785083007050,
2274			200429759398586659177997656548812206376,
2275			123277625718476991103837742652378522400,
2276			58838147262969434241922845770142954050,
2277		],
2278		[
2279			0,
2280			76044921903351956910449379581508441858,
2281			151490411794963421865491629783085958153,
2282			96713139231576342248818549163727557387,
2283			145485154680361139645104796631589179392,
2284			112022911341844913579702517953647609602,
2285			37906811571586787793337484005511042057,
2286			50101405847477811831992791902058922763,
2287			33197161827422926013044261870307957186,
2288			44924775173178069778269072717908479680,
2289			139644055782108809925492936197476687307,
2290			106648795910884456225106816090667502281,
2291			156240788615136482070778954658153695682,
2292			102014871805835261798485235301813640896,
2293			5966525326671106760628848046628687307,
2294			81460088938776370627147225297761835721,
2295		],
2296		[
2297			0,
2298			44860968154189657269525291506218078463,
2299			312263319042957525543917487673162762527,
2300			270271103622539950768430995768497281504,
2301			332869216908996075922647867897221137249,
2302			292200055408672635004504353628747355038,
2303			21973743590021455753787407716344416894,
2304			65423372290636429126395110010023369345,
2305			87312985084984365425211064006491851218,
2306			127690079253035788414832509957092006189,
2307			227653108129941476564503357382437617869,
2308			184739583445062335531124186558638280754,
2309			249581256227615017985616157874536549043,
2310			205347258555240497915371999976888408652,
2311			107875883608037560839992589192126596012,
2312			149661705863546977651085245309023523667,
2313		],
2314		[
2315			0,
2316			70353064301869517029262536637816759164,
2317			60991797157810419622450491228358644881,
2318			33309032683039403036449162925667317741,
2319			161076003495562422431102870331064413922,
2320			103366253196071821321047502906901302686,
2321			112717216872495527177256596618045979251,
2322			127777436542225440954983401362896558351,
2323			11825908901973321060217788685385397924,
2324			79795695779019478763301846575019791832,
2325			49217814102130352895007050206121943605,
2326			23814475400680322023707856524635406665,
2327			151259604932640361263919234938263541830,
2328			91914273680231563961409783004301392698,
2329			122502458827546282176670881202830871767,
2330			139260572707021139536462823272832266155,
2331		],
2332		[
2333			0,
2334			327886491922993379850026445637674341070,
2335			92413853274711730196397980268425816110,
2336			238154564239978357777983304693164194528,
2337			286649180655436901975056165765089400557,
2338			43917662437212841248194577852953592867,
2339			194237933214875002478744598762187898563,
2340			133652181653539572823607250442066045965,
2341			179627879657153472346896235055711381585,
2342			150948955176364525994687663804714449567,
2343			258728593278305714647442322907506098303,
2344			69171548825193317700837742763258630833,
2345			107031694762670491732804092717128285884,
2346			220865579915176567459478721435850042482,
2347			27933568872032303381101606450116581010,
2348			302645585762089251256286156975055717468,
2349		],
2350		[
2351			0,
2352			185164149955601967546043662523880755855,
2353			78211970635636700005201101374743220546,
2354			236074321586288879262937366794855072717,
2355			26643374221625459036362382978246964755,
2356			211710766285632279454965712495722767516,
2357			62288093378271513566951787878783608657,
2358			220075856384251516077044409798013203934,
2359			253759434861629535632351627013858522132,
2360			71306369952748547233176979330923177627,
2361			175787031175927305880673484903958603094,
2362			20530517313237365292328891635654637529,
2363			227147934448715439505335561659464876551,
2364			44769458757408782962197344269035491464,
2365			191679034626138244791671604771439285061,
2366			36519277381502945610686161759880102346,
2367		],
2368		[
2369			0,
2370			154234850404651760103686816084594797441,
2371			254043920054847924211686241281952990881,
2372			269955818101268587854311532641339862304,
2373			81176317495473733733332912473000263622,
2374			97165729050876354661413090631673582663,
2375			172877062404725073176415819529772235111,
2376			327023269322940998078417183928418194150,
2377			25199221918007262872930413628265371138,
2378			136898733354228721811218109559287102851,
2379			231172208609208727750210122125389385891,
2380			289619359417435748563495121748866169634,
2381			63661715230964840190273023712478276036,
2382			122186465753519172076870545385322873413,
2383			192716492787825447387849193480046702437,
2384			304327446942960353995045825749314880740,
2385		],
2386	],
2387	[
2388		[
2389			0,
2390			1,
2391			159741227827866894033846763158209103146,
2392			159741227827866894033846763158209103147,
2393			274834116766907886484561602157405644722,
2394			274834116766907886484561602157405644723,
2395			243156128595299382642129408133947499160,
2396			243156128595299382642129408133947499161,
2397			55008976269538663016419198910999408065,
2398			55008976269538663016419198910999408064,
2399			108079554591738039708662207834477078763,
2400			108079554591738039708662207834477078762,
2401			307890056846679400202471467367214353011,
2402			307890056846679400202471467367214353010,
2403			212076715034603801191751872258699497305,
2404			212076715034603801191751872258699497304,
2405		],
2406		[
2407			0,
2408			269592872973127703478481607229849893488,
2409			312649226179503618818986880900489253000,
2410			45067800966072441288706620337292438264,
2411			53237816746569889565727677660025948111,
2412			301550628313645758247283347920653909439,
2413			259506940325279124046440282710476199751,
2414			13180749580816940114013046633388338487,
2415			139654711933947200100621014866190158996,
2416			217667376501195380317199621861695960804,
2417			172999707585843830686870295627570338844,
2418			96988104915686264153583502265509062252,
2419			86554288294445261403427518413996149595,
2420			185822188588409515058020643960874578219,
2421			226195660671158225837016757474168298451,
2422			128903997872502945270679792260868481443,
2423		],
2424		[
2425			0,
2426			281740353144251213267627901976484830580,
2427			328229776524498961399803055515983817948,
2428			49326628294773656127508462162230047144,
2429			183586660042373972154958257915636779453,
2430			119509612171639252731792434695415026889,
2431			166087303328011672344901894841705342305,
2432			232648479912036651013231868435011106837,
2433			90884063080122744964242913755244485394,
2434			201599152908175370338151388980777027174,
2435			237523631419814372004072256981676160974,
2436			129289911823069504225477443766292425402,
2437			274164376959154571905319326856001082031,
2438			39498218718241710571105670857966686171,
2439			75334426922729601407066964676167204467,
2440			312835031586282348772471391518369587975,
2441		],
2442		[
2443			0,
2444			75543562454591962715598553805568298944,
2445			195751764331709878492277069338157731240,
2446			228052210297924375971059974911240700520,
2447			37585869812158619652644129085091747793,
2448			48620328406165074554688022316590520337,
2449			190093503557282432483086557294197955193,
2450			244367752279925512331993498980813641145,
2451			337969665455646327937272493754071492400,
2452			263975037715621147521751595904977266928,
2453			144922119305986566872538520053751933592,
2454			114084275972870462426429048033588651352,
2455			300427948548397486217606499829591159009,
2456			290859332707297996608425372052837826337,
2457			150536253797482188830687651949878902089,
2458			97807689528237774690923149792743633545,
2459		],
2460		[
2461			0,
2462			43449847600466687806806694967245739940,
2463			22069718849668725743867020678912632639,
2464			64022881809905454656888651484623958171,
2465			148992116711419416208333387544781381722,
2466			107205117550823657151936125977433012222,
2467			128336371791156623022653844103383910245,
2468			85384994989586921872269564408690741441,
2469			328431864650115618366698258097811061597,
2470			286643663757211179233582451319039749369,
2471			307798465897066474829312703956801297506,
2472			264848493652512677832047018403571633094,
2473			179463863746462168568063730259581901575,
2474			222912306789595533636237013209641225379,
2475			201507899972527770048524400457921068088,
2476			243462264665374730472392448736790375324,
2477		],
2478		[
2479			0,
2480			301454356020606947685679439859876229610,
2481			154686961524815924329159774475863246008,
2482			200164976206196667624978935621877314898,
2483			165368347797982660668479689847169082448,
2484			210855084269272723774617724019249649082,
2485			10921531172027492974402320573265551592,
2486			312361242932930549845592612744891650306,
2487			123337132595635849960617056943874308622,
2488			252553996428120849113301669895843154916,
2489			53950523031731419637024248315566636726,
2490			268999947722415366357517158554821840732,
2491			43371725447200909021577980603336171102,
2492			258414944075486456709785354719788724148,
2493			112977710405232449017625212678380968678,
2494			242206540500728859639160322766844341004,
2495		],
2496		[
2497			0,
2498			249549147410637409564777906670820754898,
2499			334823193354860390153800165380258610072,
2500			85537636305317817172117085993238576714,
2501			87101924435418538910923949832958268555,
2502			332609826285831016550395739708708082009,
2503			247753722209592300733127163246435856147,
2504			2486045052643321980533352994282072769,
2505			295755826912101156170874563118768613837,
2506			134573522807540069875146896518088879135,
2507			49701190582362273010670291060346933845,
2508			211147084721202024042340667043622999943,
2509			211387339054231818795635198584717983046,
2510			48822246975482554330926379818637572244,
2511			134102131403541687081375117703076579038,
2512			296907448502570619918930792559067693836,
2513		],
2514		[
2515			0,
2516			253847404586028018181029080079554530733,
2517			1279712523385686847216854076392293661,
2518			252632783715905267726793971232957401264,
2519			87570185202954557461318564061549104742,
2520			339079623593779858753939202597136909259,
2521			86519603498477812009833116316206779259,
2522			340189769969486089067037956915833145046,
2523			215469291265217194090491918635853538377,
2524			38385902092936784090249612747596540388,
2525			216578955693805315944450147258410246484,
2526			37336136367076899479519729049285946617,
2527			303025187495692669880091404769585981999,
2528			123627217756463445229397809757860243330,
2529			301812346171532779811917189050418835250,
2530			124904815434726643211170548917069996703,
2531		],
2532		[
2533			0,
2534			37727843099595198433684011782007776478,
2535			53606061494823315106233523825003848456,
2536			69401388657000695298037227808205080534,
2537			265042832065222898192477485037326271225,
2538			291139766945842834553641508305062913575,
2539			317941260253233666127837762253812949489,
2540			323435232347075539671223297310476272943,
2541			189310242767367471224074775030549109286,
2542			194118192506632466397299968288402947832,
2543			220983940423274977953421897709596129582,
2544			247724061298520478330335245450282425840,
2545			97110048909594922600551936299743271135,
2546			113548582260149837520958673144834571265,
2547			129405382455595190264229536213142256599,
2548			166447182828598173662656833008211582729,
2549		],
2550		[
2551			0,
2552			226054924360598956517975384196107827781,
2553			259112380395996063347134652237380316956,
2554			139567051663030578035029967339032581465,
2555			43758315098649486488428007882687708124,
2556			184737130891309040292109903719241843097,
2557			300429890000838632323491256615878071488,
2558			95809101737041064111258099391355448965,
2559			160921719238600071183913211550325097163,
2560			280472240270958150517049971000124913806,
2561			249891617941453521028028823722292587991,
2562			23841885880247159416818059502710937490,
2563			119609401933244845934825766658845423895,
2564			324224997897766178945916170202449625938,
2565			206138495142296214560445652676422686219,
2566			65154487050360425260761925667589532750,
2567		],
2568		[
2569			0,
2570			332481294037359652974242305148045186405,
2571			129064401436761631142847638906638456392,
2572			206328716537426160825064968576039322413,
2573			301031687957510047943264318450940696938,
2574			32363778098814316855390320043496672271,
2575			174629890266054928689279592576201428770,
2576			161178939060318221025004752386180635207,
2577			123638773195221315377342862895951032146,
2578			222159707698325475851210019984489445943,
2579			79894203924299262772796950393544440090,
2580			263490913540742404787156914003508309119,
2581			254523435011262748666452885248748582456,
2582			92189217742792415190820030887068377949,
2583			295605420820537018440828227871760719984,
2584			48195408155146346061187422296198051093,
2585		],
2586		[
2587			0,
2588			194971025333502407322093237661937576438,
2589			281342944568080906459905356558798124602,
2590			86434292714717581514821969527393574860,
2591			297216183681788942048266825407771378880,
2592			102640280061421827829617039303283649846,
2593			16207412821048801534932496542278644474,
2594			210845598650700882475934328528384187148,
2595			252736482527671839397060760757108435675,
2596			59219669282593379042995734573302498093,
2597			145612300972287413746445659725806181601,
2598			339149898616612648657248477036336002327,
2599			129903633405631802957061350922207915547,
2600			323109050887826936602499200040135706605,
2601			236696886605098432405544769912920807457,
2602			43512182533705599092809601015173689815,
2603		],
2604		[
2605			0,
2606			138884352222376334148028842790368571585,
2607			103566304444964575292548810760085588603,
2608			49960325356730109220618834361390709434,
2609			17870040119497504649224540626721925462,
2610			134322169013219938153423421233634253207,
2611			85877994736715512787787015973403042605,
2612			54371931975403353293809542303710499820,
2613			313134316475286053032657394897400389442,
2614			175371752637149102944314246720531443587,
2615			221281997629123016680343345111233729849,
2616			273849442554557667351172010974086161912,
2617			306900375936941347974086992773079053844,
2618			189575868915222428228993583184868329173,
2619			227344592389550430506876826342167379055,
2620			259806287500298644900261153277681372334,
2621		],
2622		[
2623			0,
2624			149724397639006323917506008232998420118,
2625			297721783471554507103983787878713609435,
2626			233077003897668704745383380142529999437,
2627			118118596618410594993004501724792323065,
2628			53828841765887169755209370391646324079,
2629			179653172854127963326958404136782542626,
2630			329005670802029909396698570041098439092,
2631			275473149740420234438430773726153285206,
2632			254702531572804057897308519423869919424,
2633			22290933336998246607555156839827198605,
2634			128139667391394271483186356716545272859,
2635			201891482053194939198741789751628228015,
2636			307390386530407240724307294550408583993,
2637			95838191918844227114367559501197879668,
2638			75403124507099045369568786390808729570,
2639		],
2640		[
2641			0,
2642			69821363637780533700886271028058839624,
2643			217816092710164083475575930114764069198,
2644			201184658799640394426673130934902489862,
2645			111962255448705891141749627185226909985,
2646			128583304760561505824882628801691636585,
2647			329518733306010536763743392394601779311,
2648			259707754276803411169688044525042895399,
2649			133007500352998933825843392428276203304,
2650			107123799247253001329563860946612839776,
2651			265583602636746833490624088572133533286,
2652			323389585537190352209496035055851846702,
2653			64028594548018833009542534516095923721,
2654			6212227068713978322009895334399437889,
2655			196677388997718916431212858456769785671,
2656			222571474692230309711390090002708149519,
2657		],
2658		[
2659			0,
2660			50495022096866406568503897268847678876,
2661			90978636064040292704409773986484114313,
2662			129667997509198526017154748452857464341,
2663			275304410605757146924225564698527960799,
2664			312209233234326073269235471716263926595,
2665			185325619216371855911847839555742096726,
2666			232036418852090657380953426761209661642,
2667			18283650025779862437303737233799741057,
2668			53489445486737559198125682306608917277,
2669			97950501809707249541525866703582506248,
2670			143953354217988307829404167318398122132,
2671			259017706257928772771745890200114819166,
2672			307217864800643053182004129376747218370,
2673			179015628867850926347004108355842155479,
2674			217089186112015227469217143144551134795,
2675		],
2676		[
2677			0,
2678			311928417185453978908537250809886516984,
2679			160075397901187037901320129744583710139,
2680			195097231636323077750143028446164775747,
2681			139037666108362947488616420472041365502,
2682			173062264563704005926989961242396752134,
2683			22538630472406405394514211838561552965,
2684			332805177889170439796502080736555740349,
2685			2525670471132589733209519034136353024,
2686			312770159599069621164522935539698434040,
2687			161558547441260228033898712446945955003,
2688			195563663275104726630673475628044397123,
2689			140232318333002825362850937512809498366,
2690			175234689927740629084128447133315178502,
2691			22693692576653071005918211708047741765,
2692			334600030992180400967112123430364640701,
2693		],
2694		[
2695			0,
2696			340143163387288190744589647244239701682,
2697			306520784437496675491638450963573835297,
2698			33879448912207215738603793105015341203,
2699			338882301611193943607021021472223377523,
2700			1450837442201182377971314754600419009,
2701			32460171533252643430633893889822211666,
2702			307792435821752698713098156694553147616,
2703			231564482928293347554576301648958196846,
2704			108750117770590940624526959065960155868,
2705			96599824363890416102719376142426901071,
2706			243629133933650168372422193704375487741,
2707			107376233375628850843516293784407880733,
2708			232795853130722972783604222002451821231,
2709			242408392347600128776140098387876033084,
2710			98005105295015725046055341453964915854,
2711		],
2712		[
2713			0,
2714			333436778690698339121255897036179453523,
2715			178283058960706767892636636107345699663,
2716			166119891939280524608021438162406872348,
2717			327190141948707425859537317927781327523,
2718			17275117226488126303218752702138275056,
2719			148907732662802073990316567586940240364,
2720			184591355571064912892038135829078538175,
2721			179477750550011735872652496687882738321,
2722			167315240195407453898723595064303398082,
2723			1527695825020062501398512019224246750,
2724			334963817848857679127876155736042540941,
2725			150372470616868983892564350368487077938,
2726			186056734939952210984082349061097213537,
2727			328323173749011151901172480937861012349,
2728			18407507612010074223420864530925645102,
2729		],
2730		[
2731			0,
2732			32127950352424566303436081758550322590,
2733			200848999037554680654631672940423060218,
2734			190336663681570538340963679032556910436,
2735			205150367611742113827843258944503856196,
2736			173449167517342964778290557683932713434,
2737			17677706448290244794726786221719299774,
2738			28448676239696020109114574858638150432,
2739			249769426355250653933414738613781408474,
2740			217724877846403605454010569984874334020,
2741			59803806532060275304634143004693934112,
2742			70232740244302340285409077751302053310,
2743			44785212738885789608441318833814673054,
2744			76569813685054876005711199310131100416,
2745			242808945167017177062795215673309662308,
2746			231954574641537644281543736206291722746,
2747		],
2748		[
2749			0,
2750			124445334396405856026779706148672543296,
2751			21527744852764283563681165185297724719,
2752			103250678153253230800208748721979797359,
2753			145586561549597729795808140585801921437,
2754			63936627214968289323154639357862750685,
2755			167092746100602059259400981897177466546,
2756			42761989612220591879148269226650017010,
2757			133210207424495923798884661397575517999,
2758			76638768069143101916577433254542302575,
2759			154217981649586678001853937063074853376,
2760			55297986572210190944285154867666315328,
2761			12885534510885230963237138513336857778,
2762			111898648704410575116115746794237161202,
2763			33914747142576986255602955980759450013,
2764			90537807806504562577444238431180938205,
2765		],
2766		[
2767			0,
2768			318140459698622874987124146942495666453,
2769			13085497989729359513880824696210224323,
2770			306468576650541059637154033099918001622,
2771			206207363044577476758931265501919225275,
2772			154800709827939552041239047533674828974,
2773			195366561871520840017109949958529012088,
2774			167055105660234126633202362502189899885,
2775			166810619277245536609120682834805001072,
2776			194280520287962162869712495578024098405,
2777			155055661935497988222208962383751839667,
2778			207282938913422670594460032354804682406,
2779			306203242485805599705676274326977818315,
2780			12020304187965916095640071461678161886,
2781			318374558953831438538600834438964894216,
2782			1096428721243435599449413075962784541,
2783		],
2784		[
2785			0,
2786			108326320909949853914032347504673910387,
2787			135461088477167509922502770676119119157,
2788			69899850634911702715177356828684405574,
2789			71407893171260866928850888521991835399,
2790			133952396397464390403968338100620009844,
2791			106755970941360690658632465111907822130,
2792			1570999772067994120563066235628192833,
2793			233901892999653684009967296131877694600,
2794			338336518941143863958356592768167215867,
2795			268665158227496959035471147098832488893,
2796			206538637413889907958931854557336348622,
2797			205113681174269889657080760394103268239,
2798			270090762822046383546174050215794527740,
2799			339823782692234730842728256168639989434,
2800			232413980791970309995893703806891026633,
2801		],
2802		[
2803			0,
2804			122450732891301223974250497191375703603,
2805			54348654585965712778739424063147407084,
2806			155499163835453083656236801551459973343,
2807			149756849874497640147346382715533387500,
2808			59427013737172430170289124599213418719,
2809			117352182591436016878886255328276582400,
2810			5763823486056148800719731738086448691,
2811			274017760192397250509475060126333392066,
2812			194372367329631218270294454927758940913,
2813			306754674875097219672261932260388708910,
2814			248367883614337146844503757095562751005,
2815			253300855915721919400350714194579829294,
2816			301157747763952849511915979156955380765,
2817			199949265590997134168383781423492940994,
2818			269106135117211385940108002725132126961,
2819		],
2820		[
2821			0,
2822			98174806057842261706032373851680930224,
2823			337938398338525624214299022816339835207,
2824			244449904188023354663685929646723940599,
2825			11093657726546231855682270662563655697,
2826			87081474118124098970193598412972689825,
2827			327509943120144730489434245583539194198,
2828			254878682657921445645378482076575936742,
2829			212618068593522496820999675519785747054,
2830			284698981717884886211139381272914181086,
2831			129975223998501150806772044272881367849,
2832			53270834513506835248653187726389281433,
2833			201608118592352675527866046967878070911,
2834			295709257504635165141380719043205581775,
2835			140321148510194481896197238733782453048,
2836			42925233252102432746433816523863159432,
2837		],
2838		[
2839			0,
2840			60467864449668594832417466459363706888,
2841			55774362219411176213938051657797958717,
2842			6025330395486221298207672117795025973,
2843			206586336350005940170327772076063159762,
2844			242037521139226679281315548596580580826,
2845			237427278160757240132151927483677411823,
2846			212528407414434160428450593409264353767,
2847			205981022915057072178325420221742681133,
2848			243971413968604366120102757398268609573,
2849			237948703876399157371880970294091640848,
2850			210677104863969255045874526507250972696,
2851			2147426090339771588232086292676671999,
2852			59650315907207842982787130903614812663,
2853			53710824502010696194458294849673987522,
2854			6760289273052451103395261228439702986,
2855		],
2856		[
2857			0,
2858			334168654379934727811248731379113241918,
2859			269997500270541460466600844650261705797,
2860			64432067739589545753955325321272580475,
2861			118655829119458400867996717637192282241,
2862			215515423350615985487041131846867344831,
2863			194544502991435909790862547568221521092,
2864			139887661841181282807102820504129841658,
2865			123048660271604818194071360685509759200,
2866			223252010022429755639427673186980953566,
2867			201450406462200929336042307378342143141,
2868			144778870463083240440323122968077240731,
2869			7757440158040639694799229007658655841,
2870			338540633313507294265392636045420596575,
2871			274868022736148971461268969044999164964,
2872			71358656098995993267227831913205070106,
2873		],
2874		[
2875			0,
2876			179092923292796650297188171113882278718,
2877			17932271284510039486268030158157771060,
2878			185768291165195946028205941396556261898,
2879			274473283218281685863584222254108025147,
2880			96710006467590820461390799418606615045,
2881			259199471114284842669617309573667180559,
2882			92693092665468895737442966105669765937,
2883			312076411152212326718959878616078748307,
2884			144198883343789553297006528225341559213,
2885			308017966581203103659853018605431815079,
2886			128966612150039570458201155328002662553,
2887			48818515853330242792399755421231786920,
2888			215366422559315189758875391882604310678,
2889			55535419565219236571286412395043576476,
2890			233257147862975966776853416460531663266,
2891		],
2892		[
2893			0,
2894			279167004645461804795467538856338358270,
2895			135384501888785483125039307949055629378,
2896			244409215879336955601414868172863580092,
2897			271112495847269452995007229826551116810,
2898			34496442809955527989321206515795790836,
2899			231515537293509633585729126580104113224,
2900			165041673141293348924822717492866831286,
2901			308088357111928026365486159468600219062,
2902			71457428491964754444423975792502286920,
2903			172953857951695165557568936718304579060,
2904			106463675036157886507900498164591227402,
2905			58745459855077229493582795804934283708,
2906			337896125415194277072150514721113464386,
2907			98258650634974393803239219915894651390,
2908			207268509364900131076072497658502841856,
2909		],
2910		[
2911			0,
2912			316619307468968141981438907470790321102,
2913			155726480300359648224732696126720099024,
2914			206141920128466264910322647435664957726,
2915			154801888389974564638039867169079397425,
2916			205071940103729699449503780425398054911,
2917			1755445053395545822840532457363689185,
2918			318187826031865334618292338823503129903,
2919			117351967140691611834732931795592758575,
2920			242560818088117338302291604111437702881,
2921			60391583451010830619664305790079567871,
2922			259678933678552485927865533558863258673,
2923			58802293887716538439359149801686485278,
2924			257944261071470424639837854556603296464,
2925			118442714521332220215093981114160384974,
2926			243464644048900682556097258056313792512,
2927		],
2928		[
2929			0,
2930			85783636161734797535930896338803372741,
2931			324523958073770877820587126060442665352,
2932			240155934274927305650322827876707955533,
2933			81413909935469282854544446925934060821,
2934			167103292153818766051689559467692677072,
2935			267313515598332942228456199109984724125,
2936			182872169305602807194853838725893264984,
2937			33232633037544643840312206283465997296,
2938			119012889959362976916927787744497797429,
2939			315220878663566990377657910075341011576,
2940			230849659434801793605254191936149899453,
2941			48183883930729308765932137581435215589,
2942			133871431541418710953230365748749331488,
2943			276619180490623488629397490302081539949,
2944			192175858881674454011767621708513389992,
2945		],
2946		[
2947			0,
2948			291661361074922655842354366869571944470,
2949			185712546631964697240589006003665714439,
2950			107485741019051418478966822863543860497,
2951			76264143017326624583430275246720857857,
2952			300676172615933489833707405178275395351,
2953			237813036504844378132671279588332898822,
2954			140248818687650161310005920444953479696,
2955			187211759858053782110754668177189438264,
2956			116620350213093690478476320673668776750,
2957			9809610203387463424531853216951975487,
2958			292485576542574463742560944114491915817,
2959			241298304269675217206076802377272243257,
2960			147397376591304435535803904040360178735,
2961			82737700231101771693951029801239087422,
2962			304836437824842044229379082365017934120,
2963		],
2964	],
2965	[
2966		[
2967			0,
2968			1,
2969			129460184901158119860735353079755610614,
2970			129460184901158119860735353079755610615,
2971			165640453935684170557382138895643060837,
2972			165640453935684170557382138895643060836,
2973			39836255764169703026635226017603302291,
2974			39836255764169703026635226017603302290,
2975			222294153997383401764937183219325326211,
2976			222294153997383401764937183219325326210,
2977			263650962786379132398137582729042414197,
2978			263650962786379132398137582729042414196,
2979			291939387998641605980921440043978586598,
2980			291939387998641605980921440043978586599,
2981			248256144994379785765491353120476454928,
2982			248256144994379785765491353120476454929,
2983		],
2984		[
2985			0,
2986			258895673196720778598706762360552858556,
2987			27063218609768643932917788526219613761,
2988			285250865834988261130025622655934756349,
2989			260179017805396665626514981564917641756,
2990			1961913186661992664627455796076401056,
2991			286949857861014220217084654876387812445,
2992			28110902180864821595525779512980342753,
2993			58493158769277158587225425118976484478,
2994			317374629079917184989308059736434902978,
2995			74921939542894960499370904840983605823,
2996			333096529858003495282851341580605739395,
2997			318671877399073807160854068122289002082,
2998			60441066833100749917289082442306811358,
2999			334808857687330910003115322409415770147,
3000			75956348158228136693892485004713010079,
3001		],
3002		[
3003			0,
3004			301930392259976828106625834641931740308,
3005			339512976143100605864628751429081147276,
3006			37625973146847249410275954368465797912,
3007			185331468997341362025044590971904164289,
3008			138614354186068866444994556926941209941,
3009			154223406228520671891948943918704043597,
3010			200900133731381907163896831868268085977,
3011			150829928715087325876518497809235445154,
3012			194552199968947199139110628664396325174,
3013			188849591443138120002463418025137316398,
3014			145169928421698267331681964346436159162,
3015			332417401805856316295182985515129472099,
3016			33484776306352369761823725306367713527,
3017			7303317691999231648922260732980437999,
3018			306196174338051118788199920451095791483,
3019		],
3020		[
3021			0,
3022			329301379369085461200549300647887694031,
3023			21432956166976134667167926219181944946,
3024			307897804847510792232883809202122823869,
3025			155048510920623540592328413310433054145,
3026			174255476060293626474065596595470312718,
3027			133891641607107555672004871377696013747,
3028			195436514360714776100319269598479242620,
3029			247820117257012386484161662555947743525,
3030			103416449780347975579800385540903391722,
3031			226548946781174442997077769906252106071,
3032			124711809604416946482390111693954851224,
3033			274927796790783403235971599433586472164,
3034			76306185561394780536626445320020859947,
3035			296142584861546533651350841595632813206,
3036			55120758774083446198437794088282549337,
3037		],
3038		[
3039			0,
3040			254590090333913220966971847449742103658,
3041			217608617971906376477166134700075566086,
3042			37538392473749037694316114510646448236,
3043			90974464482407656887638564165975262317,
3044			334930730780676710959326217371852247047,
3045			308074191060122882922011721778827165803,
3046			117370141585742499206245181351786337281,
3047			226978712722268354475385440877895496212,
3048			28302036131847298909051714088046651006,
3049			12583039052223539824660533484365739538,
3050			243244244048383567000601321813588943480,
3051			317288481442658253053529562525608703609,
3052			107977980816673426006256552699584619027,
3053			102383917647315664154472265288654336639,
3054			322411298667333041659655805945492170261,
3055		],
3056		[
3057			0,
3058			215334957161443308256238017905202491094,
3059			165768447186417014838257733400243996460,
3060			296032769424542188931267650570489620986,
3061			248388036854325041730056144710003913010,
3062			33053080031192729438057509857512267748,
3063			263727726210879212540480685177647986206,
3064			133463404308511103059622289916499990728,
3065			332588452385495237881745433691230401466,
3066			117253536125712948602236551377437302124,
3067			178801362675477800759897396571926262934,
3068			48537000209140698246905432666003970624,
3069			86295953527462395252031371017073820296,
3070			301630870122460150376791526498792860766,
3071			80242576187108396212371467334105793956,
3072			210506938991060153417215430821758856050,
3073		],
3074		[
3075			0,
3076			150916525710689040450533952436482243188,
3077			253974325944224067501038856442760482185,
3078			274614622570381976709068130144591230973,
3079			263190555856972012749712694382731529140,
3080			243964600017414680852474575801990738368,
3081			160924963698907924385960129810813961789,
3082			11425374934411959270833672035902307401,
3083			44009384694510427471659755352103191411,
3084			107099256081688275009091020476406331655,
3085			210071472111017129795794127444285279994,
3086			318366899712949519123795972045195261070,
3087			307193450179700987434428420902656346311,
3088			200143436166476182913234352849850561203,
3089			117028600237325883499866335844411000142,
3090			55181546299070163373539932453805244218,
3091		],
3092		[
3093			0,
3094			307502437099739679290628223154091667783,
3095			139712477971664465585081158946720236261,
3096			189152541618345746980427647788394345378,
3097			161936016585386327259238920759384986963,
3098			210710842889443448702085199341775021076,
3099			22306654247480858457171792688093665206,
3100			329143801985705524932091523056188401393,
3101			150866356267476052624275218482537419788,
3102			199597672659768042441201752432620922187,
3103			32422838252933069356840408745154254569,
3104			339216525562979834033900136798798620590,
3105			11529245442149258535139628508344746335,
3106			318986871386777831492038504190494060568,
3107			129889673175948876361643312187935736762,
3108			179284980221708691618338817776529830653,
3109		],
3110		[
3111			0,
3112			154605543219637426435106976091970670442,
3113			291575021340387056088136914697178823770,
3114			232722633722619431908455404980046967600,
3115			296398753267515011804200573158755190678,
3116			226901486502740588113264233006794524924,
3117			7513836085051250311093858853359156172,
3118			151412192595065138579346558932581643430,
3119			143987988207565556713929624730260820497,
3120			32051443130981071427086737948635979131,
3121			243292160474022311577195169463230459467,
3122			259571607440619966841400585222473769249,
3123			237512556690994996752865180126259025287,
3124			264353806054867654441776237746378939117,
3125			140836170876071330878349651298165074397,
3126			39523735759368915244493340639755314871,
3127		],
3128		[
3129			0,
3130			81413830974332724570705489473670526002,
3131			233262963768215492814036452480825675321,
3132			194417357529839964239822080041750329867,
3133			339807990323822413077442490629904446498,
3134			258675537596781598325573417103299969040,
3135			107462115993833290697820149916790127131,
3136			146089341906842570685006234842986958377,
3137			54841236444129388309403483618392832494,
3138			27237216219282576683763201432233364956,
3139			178442889919426175259709562882477897687,
3140			248572825060743460358144516533962998757,
3141			285652484763856109967431178958437797324,
3142			313495654546127178255961093645742537214,
3143			161638692719839971976910731799708632053,
3144			91248148563327475631813207445389031367,
3145		],
3146		[
3147			0,
3148			291481272294957222385031757479576000865,
3149			337701118878096572654454475144028868023,
3150			49553311310473292803077006273711379670,
3151			178791951727776655766752242561307794145,
3152			124673934340674660886134830617885180800,
3153			160238447464403109292064339932123731798,
3154			217689909290529885054945909488458223159,
3155			54906503110627522950668460874312376882,
3156			321713980565466038763066714358217194323,
3157			286117730540652618462847062392226393989,
3158			15997577834223465819511718731924240100,
3159			233676893031925237729714241832046344403,
3160			154885080804706954723014837212925026738,
3161			108676536595054263950443233953423914340,
3162			184155653282372748474815980384115469317,
3163		],
3164		[
3165			0,
3166			166991306136282304309598542496380304753,
3167			174232502038222126234486658341020783446,
3168			338551681164706292985277797496770489895,
3169			124337427979921187035267213746606044793,
3170			42763096565181375921853455675258358536,
3171			295885347073598108009017526614471714095,
3172			216955801980317283870820774378464778334,
3173			48592847970263793526116514996806153255,
3174			118550510332910386225864824374626339158,
3175			222797928187195439599739398974187284337,
3176			290083463541475867676808855015715871232,
3177			160858008191858970120996324945955062366,
3178			6176137090092210680063573458045255471,
3179			332430752952632633856944874106544541960,
3180			180393668171279744718818411670746983545,
3181		],
3182		[
3183			0,
3184			228230735440385249866480305713496940557,
3185			140395132218195176469696433182636694475,
3186			258102474398786219494302709504797948870,
3187			134583094860828619020506035603809150596,
3188			274549975903857308640516097332523419273,
3189			16785977129522523832250719209917545807,
3190			222082174957404264282002939358662565186,
3191			7712044082144793339494533756913326838,
3192			231944710911746804835762547835421424379,
3193			143984162817339207274277293670453526845,
3194			265689573608713487340888612431424364848,
3195			128865258027962561140388713364572912754,
3196			270171751670397445570447790078879849599,
3197			12532048414260214474008042101233575865,
3198			216488633642735759080726247826487838644,
3199		],
3200		[
3201			0,
3202			254450159849803639627277008297910375380,
3203			90729520002236181900188399729471440463,
3204			333867603806658725520154934407294637467,
3205			11748552933731693032145458397016865424,
3206			244224248130246252915559738774742968644,
3207			101807612511737413514793229794393029855,
3208			324301767913729242986479532546719870731,
3209			286559155729848500599803367628419207229,
3210			139527895030262300840117394114454029289,
3211			196500357290355950281396895772242957938,
3212			59450641450981202845038860207998748070,
3213			296770783485131860586753152054086871725,
3214			127848145181692950854275201447177533817,
3215			206041534762664425572594297743253499106,
3216			48430957287808358831842581978090340150,
3217		],
3218		[
3219			0,
3220			223180115983185267719353390057492949316,
3221			90747971499962617333504846358440023640,
3222			302583719207587081726657493579952963356,
3223			96057175664761665453081523505181009084,
3224			318542811799392920190544742334454369784,
3225			15985054408060024592239185440758248164,
3226			228463358995575476074871099265604033440,
3227			275447174567711004927851965562103647485,
3228			139402125821004952767643885757266421177,
3229			185408449790556937855931543053861542565,
3230			59289278438806350193229212502332797921,
3231			180083181982052717383883332659539437633,
3232			43346249540261970984295097034861756677,
3233			259530106851208653697648530068235812377,
3234			134050896226034480428602128890349967197,
3235		],
3236		[
3237			0,
3238			185334593043610961850724569751631951812,
3239			135225739503257733096887584649115585048,
3240			317465535313549646421524201074934955484,
3241			318814815845291352791259823296710245050,
3242			133876335152134324948790429727971020158,
3243			183942465064424073758488275134277431458,
3244			1392252620560775956099339385476007782,
3245			80601535769655947512048071508769057778,
3246			244315383619094992835853908296410127414,
3247			118430068754564862012589315315321594346,
3248			279755313576070183183344255146167834158,
3249			281104674841773766326764709080303653192,
3250			117080745136474781161527344324374701708,
3251			242923174114593152304083169001745947472,
3252			81993706863973221551675088058083962004,
3253		],
3254		[
3255			0,
3256			328554470600989978311552677909447941173,
3257			233293911246139407410795383981438913886,
3258			117883635085802680729905127321372610923,
3259			85442171128991614835445851426566403484,
3260			243803535085712787958293296842408389033,
3261			318710110748702028530198037554123028674,
3262			33106727945953487460983473735084090615,
3263			201772607691922050218375936159418614038,
3264			128803838825733048545694246852059372835,
3265			74816951321311610622031076919823092808,
3266			275671745754123091723318743344309948541,
3267			286513168580097833549602958666260313226,
3268			43372062606253048856084357284719880383,
3269			159583463551649793530844598351169567188,
3270			190265920878662481784486977330960016865,
3271		],
3272		[
3273			0,
3274			17977171217154897146424147799394706124,
3275			149345021129204070271126418903569533304,
3276			167298582212802738403597495318370020276,
3277			92696247531760275295933046806673756268,
3278			96010175805590621516865902221667168928,
3279			71645499008346520631635533991666391316,
3280			74936144440162402116666055274445241304,
3281			333043350366000399402415464366778916434,
3282			328379474287902076457364414129580801182,
3283			184550433888493621168602661396380686122,
3284			179868142672410516467119713025251866086,
3285			254139347090782947374830816263066783294,
3286			237553824351655216784224590248388717810,
3287			275709568669165944130329132549343446854,
3288			259105952696075309387222512647553279370,
3289		],
3290		[
3291			0,
3292			305976314916039610654819165710370072033,
3293			108471745528022358918792177944360811451,
3294			244131433486642980163670906115821903450,
3295			242510577272009511034996588825820594399,
3296			106676785096973915852727816615753737534,
3297			308272899891499222511978960584004565860,
3298			2470689206739877978106525651085205125,
3299			102856311075400584780710265159206496797,
3300			227721213246309736590439908826256183292,
3301			38524294671077462870610836080979120550,
3302			333363130899162698574823826365334778951,
3303			333722897692028718155463257731693537986,
3304			38715474053027396416008551663930838819,
3305			226687015761880466739313183264139219321,
3306			101990700996925629095632675634137298072,
3307		],
3308		[
3309			0,
3310			91866417362552189201565266512715370837,
3311			64089660912899739462308106603018217846,
3312			155747734429775800448400350360415549475,
3313			159997423824046379036544541763225786397,
3314			81429292951146236303340490477104712008,
3315			96251436695824618446977055180167737707,
3316			17890345730882898588108441411916177470,
3317			268702399558284530144589124342679870390,
3318			190385445726217994554781193231582284515,
3319			332395493371019851660529579948585415360,
3320			253954571151672653660337248536335524757,
3321			237227305163648910567287547713327465387,
3322			328841246766805068470508002390492238590,
3323			173211962287525304813230622035101248221,
3324			264951165757562227467029190664278293384,
3325		],
3326		[
3327			0,
3328			7078421143766996700989362761831908846,
3329			329126470368567046592278343876583493670,
3330			322712664866696941275821645033684571592,
3331			2645065904930838275163021944157480936,
3332			6221239519402756865891832247664255494,
3333			327520188403474276337917964003635607502,
3334			323279402355846274863962514389093986848,
3335			28469532136039252479795804563143546068,
3336			21559903918559474244926715785743159610,
3337			301654185372155612986294622728996537586,
3338			307899197987353791200192607005770105116,
3339			27365425009360635401860203680868856636,
3340			23620458508216184084652901821470373586,
3341			301802585328543387881342005126308946714,
3342			306212164302456793232479005949708232436,
3343		],
3344		[
3345			0,
3346			269904820219637802801964709189387872982,
3347			150890141058942392769884179318071699298,
3348			247951105527312142206939089240085351860,
3349			79807201891709232809254083220843275597,
3350			328358456574292489270673621675729014683,
3351			103088765370927959300387185738971152943,
3352			178801518878359654837900904502875252985,
3353			222388598907359847318517013393143036499,
3354			143908310052664066215001396478181118085,
3355			285504246319312945915897935719429954865,
3356			39585284035512764313887222054026295271,
3357			206384443552543031488746361542634954526,
3358			106722259495823554002395285430316316104,
3359			312037914514939527429084407272923854972,
3360			44932026971862300624258833193889764010,
3361		],
3362		[
3363			0,
3364			280807381278820373679765571057106777820,
3365			65554850319794119560448091008069779416,
3366			300493459441646370235477120826938804484,
3367			286940702509160289817186761063958762755,
3368			6144032046035939182746305299663135711,
3369			306468249554602336805818021516915075803,
3370			71519579525710457731079773389121526791,
3371			200251495206950179469366772904934800565,
3372			92913560229676611050561142215746456169,
3373			223260638442256681968827535286721299309,
3374			155145335325804455714505584584047506865,
3375			87032227261043123680883529303815530934,
3376			194359452214902303651540223597561110378,
3377			149084709658333549856313345544866567790,
3378			217210074474107020216901831674552017074,
3379		],
3380		[
3381			0,
3382			270206878596757861932062440717952602581,
3383			107726076504329635079178861176834346294,
3384			205099499563793887865584471538355674339,
3385			22709459431227892466504609754649903088,
3386			290199365776639709018217781506704109093,
3387			85231054129435302902031383599359423174,
3388			185225227148629817392837343311301354259,
3389			407749931852982653763855301114189219,
3390			269882370547844679003462196835902030966,
3391			108029919075984879934042056782298486933,
3392			204712744699689745625404978590459742528,
3393			23070213194381750284197953503958362707,
3394			289921528742711584914286344529653971846,
3395			85487942206714692683589198193080313701,
3396			184885102892838668942594224855284151984,
3397		],
3398		[
3399			0,
3400			233245066882131425602704202483991475684,
3401			180662135781601512391185064434870334945,
3402			53933023045897457111726383033702891525,
3403			12146996620149697412149018761730862339,
3404			221120137905231810889588201921478154471,
3405			189794997174701348180388143378242148578,
3406			44780690276821958786526641991011364102,
3407			90696232942714244373968156229326428749,
3408			312712085632414032149975846283309690793,
3409			260285774358323367567933053986407739308,
3410			144431095885199551005823284709632645704,
3411			102475671306755285283160604107609175886,
3412			300910579714257198153633977746952880810,
3413			269762422962797672523407598553079628463,
3414			134973918726028157495587708714029168459,
3415		],
3416		[
3417			0,
3418			66319342417042157384765357555354155645,
3419			43884691725742433415081829091781614286,
3420			22468495712954187708834871322236428467,
3421			103407759639455501234278338830674541711,
3422			165069448564222282991552133840339076850,
3423			144597647708424398819903969901710026305,
3424			123851095414352446909594724647824628796,
3425			165355364200542756242325210755771966821,
3426			103030358937470446053335040241371651864,
3427			124146088705963742954999261178913308587,
3428			144226728473532074796566422506089776598,
3429			66034755069895111674128945798539450858,
3430			381325577982941958780421570378245015,
3431			22172214298362606057991132536229233444,
3432			44251727048082747796629215210859739481,
3433		],
3434		[
3435			0,
3436			48373146324194797631189091460102841253,
3437			226241340500307628029812263278506358240,
3438			189166640589245038686799986370714687045,
3439			145204968183712350159452973269955709661,
3440			97496439295180682124050919939914623352,
3441			264563322475964497767963581186370584381,
3442			302302639624598049756348987368425086104,
3443			236917750037131689339821323130064198233,
3444			199845803235372324500230709038990277116,
3445			31947181376603110129215806083140874169,
3446			80317563162792930378240797181481552924,
3447			296427077127220385870721777076562874500,
3448			334163640077162874321636003601956320033,
3449			155798600230444283835150631378428618084,
3450			108092834394388941576541471333531682497,
3451		],
3452		[
3453			0,
3454			135131739006571270339221400356736629831,
3455			44078970063147717061726559429288956332,
3456			91052769032874395842979807845676281323,
3457			161642990351692888862753184646200752146,
3458			37478721632170310672610556371843187797,
3459			117896367938050126818441943428656032190,
3460			81225344115456868603308322597575202297,
3461			64487234016775272177327729710181750040,
3462			113205843558373817071376425212120131935,
3463			23482306998299363360247885480592606388,
3464			154210770487398884651425389949716363507,
3465			97160949386703259548397932842826820874,
3466			59409808781550989540873278495302422861,
3467			138498223893113441930951298993538858150,
3468			18072534205497009944055760663024468193,
3469		],
3470		[
3471			0,
3472			201824376608204411558228934958987704610,
3473			268595923623101105260401737497812692460,
3474			124637342874976115736914595343127876814,
3475			75976237930675835544674971838311947528,
3476			232602156487107134904658072919091487786,
3477			323302517546439743741041405390848110820,
3478			134149374237121452224648227925147306438,
3479			328957318588933338951763260599232494363,
3480			128514986324355233414362065146968310329,
3481			81640135798554106929446031262351202039,
3482			226958691727142041124844005204094676949,
3483			274249934763166984005437567072476341779,
3484			119004436684952650158125815912668421937,
3485			5665704431039131049961019857645620223,
3486			196179797739218870578684809496645939933,
3487		],
3488		[
3489			0,
3490			23636367202105732783654262325344897960,
3491			87697000169035368423293225567296025324,
3492			106597226972709203916402991782610041156,
3493			275777124787536045975336817485199676757,
3494			296005316964118678050329525444279607037,
3495			189422411161053202500337837424396363705,
3496			211728216751093104088717365173800463377,
3497			64515801420473559067821315066005956605,
3498			44204466575597798849307903005138660437,
3499			150787413419587984218538831377745040657,
3500			128564750496371159338210452704968138425,
3501			340209443809305434613451050823061713576,
3502			316656249699203951877593836197027199232,
3503			252595657771654037749190862041610993732,
3504			233612257877600750871031321506109901804,
3505		],
3506		[
3507			0,
3508			242252262331210651765502167970918377143,
3509			83062094243412187578491107859924356458,
3510			181092949641502444619461822554206284765,
3511			134004044265720044100430742903082473261,
3512			279886458950942874741729391952551440794,
3513			120529113333181463898435141475469220423,
3514			314928517669199884679448148446757190896,
3515			339291471787048269063027751177723323693,
3516			97040128225270306370782174367228298138,
3517			256852631377188613764727034678145558599,
3518			158822358821107476947107590290686250736,
3519			206783635927420194229690273579075662336,
3520			60900506643826516437957232743141561527,
3521			220549158580937476715630894857647685482,
3522			26149373038651234355292807822011455965,
3523		],
3524		[
3525			0,
3526			194183265356982953073287103825276384850,
3527			97732148631712114883613176902695030643,
3528			291852857362760226310677472571617556769,
3529			222685251903842598028106939376084112269,
3530			71206037368166262209045513395686335967,
3531			316361950114664907427392984256243719422,
3532			164945281588349558419330360187025582764,
3533			250755808204504816322732892273494064568,
3534			62077031981805295031952691064628890602,
3535			325844073640710764681665821761673720523,
3536			137186304814819463669127158355804570777,
3537			36067342860714764719057988251961470517,
3538			182374385402258777475782287331840366695,
3539			109852607644118339753148232394013385030,
3540			256138633123018227567579038582609188628,
3541		],
3542	],
3543];
3544
3545#[cfg(test)]
3546mod tests {
3547	use proptest::{arbitrary::any, proptest};
3548
3549	use super::{
3550		super::nibble_invert_128b::{generate_nibble_pow_2_n_table, print_nibble_table},
3551		*,
3552	};
3553	use crate::{
3554		BinaryField128bGhash, arch::portable::nibble_invert_128b::pow_2_2_n,
3555		underlier::WithUnderlier,
3556	};
3557
3558	proptest! {
3559		#[test]
3560		fn test_pow_2_2_n(a_val in any::<u128>(), n in 1..4usize) {
3561			let a = BinaryField128bGhash::new(a_val);
3562			let result = pow_2_2_n(a, n, &|val| val.to_underlier(), &GHASH_NIBBLE_POW_2_N_TABLE);
3563			let mut expected = a;
3564			for _ in 0..((1 << (1 << n)) - 1) {
3565				expected *= a;
3566			}
3567
3568			assert_eq!(result, expected);
3569		}
3570	}
3571
3572	// The following code is used to generate `GHASH_NIBBLE_POW_2_N_TABLE`
3573	#[test]
3574	#[ignore]
3575	fn generate_ghash_nibble_pow_2_n_table() {
3576		let table =
3577			generate_nibble_pow_2_n_table(BinaryField128bGhash::new, |field| field.to_underlier());
3578
3579		print_nibble_table(&table, "GHASH_NIBBLE_POW_2_N_TABLE");
3580	}
3581}