]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
Additional slh-dsa test cases. master master-updates
authorNiels Möller <nisse@lysator.liu.se>
Thu, 3 Jul 2025 20:22:42 +0000 (22:22 +0200)
committerNiels Möller <nisse@lysator.liu.se>
Sat, 5 Jul 2025 07:52:43 +0000 (09:52 +0200)
ChangeLog
testsuite/Makefile.in
testsuite/slh-dsa-shake-128f-tc64.msg [new file with mode: 0644]
testsuite/slh-dsa-shake-128f-tc64.sig [new file with mode: 0644]
testsuite/slh-dsa-shake-128s-tc215.msg [new file with mode: 0644]
testsuite/slh-dsa-shake-128s-tc215.sig [new file with mode: 0644]
testsuite/slh-dsa-test.c

index 267730ecf266a093b14cdc88a1ae014e3f83bc2f..e6fa8d811828ed6392a5ce8f4f831d53695248d4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,7 @@
 2025-07-03  Niels Möller  <nisse@lysator.liu.se>
 
-       * testsuite/slh-dsa-test.c (test_main): Additional key generation
-       test cases, from https://github.com/usnistgov/ACVP-Server.
+       * testsuite/slh-dsa-test.c (test_main): Additional test cases,
+       from https://github.com/usnistgov/ACVP-Server.
 
 2025-07-01  Niels Möller  <nisse@lysator.liu.se>
 
index 5806a6684311678a7c25a14e8df4bfdd2c729cd4..3914ec4baa653b9753f6ac9e7d73e95d9fa08a6d 100644 (file)
@@ -95,7 +95,9 @@ SOURCES = $(TS_SOURCES) $(EXTRA_SOURCES) testutils.c dlopen-test.c
 
 DISTFILES = $(SOURCES) $(CXX_SOURCES) Makefile.in \
            $(TS_SH) $(TS_SC_NETTLE) $(TS_SC_HOGWEED) sc-valgrind.sh testutils.h sha3.awk \
-           gold-bug.txt slh-dsa-shake-128s.ref slh-dsa-shake-128f.ref
+           gold-bug.txt slh-dsa-shake-128s.ref slh-dsa-shake-128f.ref \
+           slh-dsa-shake-128f-tc64.msg slh-dsa-shake-128f-tc64.sig \
+           slh-dsa-shake-128s-tc215.msg slh-dsa-shake-128s-tc215.sig
 
 all: $(EXTRA_TARGETS)
 
diff --git a/testsuite/slh-dsa-shake-128f-tc64.msg b/testsuite/slh-dsa-shake-128f-tc64.msg
new file mode 100644 (file)
index 0000000..6655a5d
--- /dev/null
@@ -0,0 +1,72 @@
+14AD3E6BE94E5F92 6241041A9D7F9889 BDFF5BA185052A6D B3132990E37AE6C6
+0390B0A2BA50DF65 9F140E1A2EEF2C83 D8FC6AA0F6B707C4 50F9BCC8B4FEA771
+5C320AC902708527 9F52598CCA7A666F DCDE8E8BEB42F90D 5AB21240787EB8F8
+A1D995955F086166 8755E2EFC5627762 3A34466CF7494AF2 C869D263D60D7D81
+421EEE41DDA1A422 4A85D43534C1762C 16E94EF500FA1690 1A7336032BACEC5C
+8B17B13C8E8D4C88 2A46660ED96465FE 6CFD0FC3690999F3 5A7DCF2929CE69B1
+93AE9A9AC0E32A26 ADB8FF99ED710EE9 9D5FD2945D800A25 B2711FB9B4F94029
+E0547FE84E035E3F 926D44742F4B647A 3783236AF8490613 96E89E1E23BC94F1
+2C2EE552EC456DC0 CACADE6394A10E50 90427548EA6D57C5 A66B2DBCC4280A70
+D1D8153D9CF4BDAC CC0ED7500FAC7FC4 A462472D2D65C942 6C8146A9F23ACFA1
+1BED101365B3B3D7 70A3AEB4AFC446ED 1520F693C9255EE2 EB7BF14FCC2D507B
+C28614569A94E49B F611528C48B5BD5E D013D642B691272F 44ABA84A4FA9E9C3
+2FF76A6C221701EC 62AC25F155A38D94 C541F8B5F07F722D F2366E9B8047471B
+02A82FD549829FC9 C9C7C228BF1966B2 46299297C4EC6B5E CDB4EEC1E1CAB325
+D5E40BBC55D4BD57 D8BDA15BDE3FE1E1 F84F65346C1D000D 6484AA07DA77866B
+23A068A0FB5F02AC 5DFEB4C5F9D0E377 BBC9386835D6C53D 85061B57801A568C
+829B2CC1B79CAA31 B79B0B325A851480 DC2A21300309064F 621F3CA590BA4769
+300F4A0D51C0A1DD FA3C713C26275DC1 ACAC11C783879BCC A97D815879A46D29
+D73259B847C02DEE F2A5B89ED6B0CDE3 78B64AFDE31E9B8A C791CE7EAE9483B2
+DB48ECF30BD678F6 AAF5E61F11635E77 FC30EDFC564871C4 26648FBFB7D7E3D9
+C5C9013528C91465 B3A14655E3C1EF56 518555926D487CDD 7D15BD1F3C2C98F0
+4ACAE000B9B0FD51 C25B45D325EED9E3 84CBEC4FC82DA3A5 CABBE5261BD6C1F8
+746B43BDA473223D D51EC011ED469862 3BD8F5FD250D5C8E 878474DCEED27082
+6C3319BE5015BB7A C8115D24BC2A2A3F 97D3F88B582D2B8E 2A94D260EDEA4F32
+427C3B1886303534 634E2A519B86225A E562C73E04B2FEA8 4BA0EE86491FC8F3
+63F8AADE840FA15E 11FD3D57D5772E18 1B1C7FB6DEB22BED 5AC027278F4732A1
+A5FFC8CA9F3E7664 18A5F0309F596873 C77ECE7CC06EF32B C34A1CFB74BA0402
+2DDDB03EEAF697E9 984025D1DEEE3777 BC9CE29449607E56 3EB3C136270FA43E
+77CF1FD6D0250FA9 1218DC3FC431DF84 80440B18F87BD14D B48163FAA0AA0274
+7FE903BD73B8BCC7 B5DA0F1BAD33D7A1 AD61E12A8424287A 8D928F8DECC48422
+3489739CD28CE662 6F8F3D20F65EDF43 0E4FBE25CC36FDF3 86D64A591A2B56F2
+FB067A8C76E6F16C 86AE608117AE50D7 ECA9B943B78028AE 15EA82C4F96C10CF
+1155CE4736CCECC7 9375A5F5E413DD08 9A43C62AFA6847CA 4DB15963AD84E22B
+A34595F4B6EB1BB3 D3B4ABFE4A75606F 4D3048DB98B314A6 498532527FC07B3E
+74EF6B45822A38E2 1F5FDE0F0E914F7F 03D92429C2571B0F 8A181FEECE3A13B2
+C3BA9099F5634872 590B32B4C29FBE69 73008C93733FF805 8960A8CA9D91EE52
+14A1AECDFBC37F90 6C9869BB5CA56F33 E2BD80BC8C275372 888B5D75F4B40AC2
+C78F5932D2A126F4 BD19BAC6B28091E7 D69C7FA854B5E16E D3816F21B73DAA27
+5E1B3CED8C46D062 66D4726E9527F3F7 AD15B29EDB69DD03 7DE679A2048CC92F
+8850EDA6783EFC88 3B5A1232B95F544D 2374AE816C33774C C1B42C88CF0BBD78
+072BCEEA74176B5C 961FD152B69FB8AA 6F48ADC105D05B57 3A62BDE49A92A80D
+ADC9D17109C395D1 35B451C78AB2AE7F 99C71B77186A41D8 9DD7AE09E9A110E8
+E65C05651E51718A BFC62C47A8F82EE8 6BA685AB7B8E69B2 2EEFC37B4E559861
+FBFAC0B99A1A251F 739605821D70C761 53FC5F81030CE2A6 159F7F4470E421C5
+484AB7705A82E5CB 2888B85D357E52AE 33345F701BE0ACB3 6B1A3B80E54EA72B
+F43B00701EFB96B2 6D7A62AFC04EC150 2065921810160149 BAD56BF03552458A
+3878ABF6CF7213C5 4D70861C2A6789D7 0B70D22BD8E0A4A0 32CFE331C0E423F3
+978C164925CCC0F2 906BF8B4B633199E 072CD45846DC174E C1D1C39065A43046
+243D5043059003DF C81807F02E6671F5 5F49D5F12A4731E7 CF1BD929AC890B98
+5B271A282978E8DD 1EFFA077C4E76A9B FA6F19713C8B6D3F 6579BCED6D22DE68
+8FCBD798016C6579 BB127D988796618C 09474B8BF29B6432 C01C948FF2A3EF9C
+97270D257373E346 FB0B0DA0BE2D5CFA 09AE905DBE76909D F04A0CE5B26084C8
+B33BC6E3916A3A9A A50A018239557CCC 0146F0766BA3D85D 0B9F8FAE0E8850FC
+8D46F63BFA5E40F9 25FC0196D39B3D80 F81A6E025D120FA9 77C041D2635F97A6
+A1D51D76D575E76F 494D887B4C4F1E4C 71F30EA52FF1D2AB BDCBB0E2CE8A47AE
+774EE6F2E8AE7307 C09DF32FBDCC7528 A30F5CAA0E0EF487 C70625497CA80D3D
+7D4647C277C15CCD 9D1CB3247899B1E2 142D8ADBC7C5F4BF 105DB3457B112374
+C16CC96FAF89562D EB237002CE05E47A 4BA15AA01CCFA947 B5F74BCDEE48F10D
+1E82295C14FD836F CEA6AB700CAAB75C 2AA28D6D1F42F6EB C9DD6C33F924D496
+947CAC85610F1DD9 0E7AE212BA732422 2B45F1C2DE858ACB 078A6C31D692E9B0
+B966E331CCE2A11C 656CF2A90DFD7635 0F43C5E2D48DFC78 AD7967022B824500
+23F01031A83365F0 28C550DBFD37456F 8D98B31C920DA0C9 978C6532D3C9E2B5
+48F0E1536D03CDC2 5F58F07456930412 AB3ACC0D378DF105 437D3576F6C44918
+3AA66F024AF1AA59 A6EBAA8412E347CC 035BF61CE11C5CB7 F32B44175D73AE09
+DC02589D60086EA2 57AE2A9345E43088 9592EAA5CE251B93 44CF0BB8930108D0
+7FEF68436CDD5FEE 01C541FDAFA087FE E4D81965442DF945 46C47BBFF66F6799
+ABDA34CCE21460AF F82FD3C76A6157BF 8F0128FB9AB3AAB4 BC4A58CC8C571DD4
+8CAC5F076016FF0C D3B419EFE1B58F9F 9107171444F4450A E195E2E221346312
+1EB57DFA00E9C7A6 156CEFE0BE8C499F 2D7901F06A3B8909 A75FF028BD1578C3
+94D77B2B54BD1893 F78150CEFDED6AD2 BDA0F799F8F8E99A E0D1B7197CBF2865
+3AEDCE285E063F25 13F9E853D66ADB5F 796CE7E57BB3B063 00DA3194E22B8CE0
+D52638D84CE3
diff --git a/testsuite/slh-dsa-shake-128f-tc64.sig b/testsuite/slh-dsa-shake-128f-tc64.sig
new file mode 100644 (file)
index 0000000..2ccb3f9
--- /dev/null
@@ -0,0 +1,534 @@
+0F38CC7ADE876B45 7F320394A92FF67C DDF11D943F3F82BB 68637E340AD3B4AB
+527CA5BEA54635B4 48D276149AE6ED58 E800F544238A355E A53C9206D10C0DBF
+11A7DFFD2F573291 B71D9C8820888CF8 B5384F2EC55496BD F2629798A3205816
+55B050F4A4639EBC E2EAC4ACB68C562B 55C38A219C0C1BE7 DD1A258A93580C22
+B29CDD083117ECC1 D941F76A83292412 9F8257225D4FC7A3 F0764B6C0A373E37
+25BECC287038FAF6 29C3301E249E87CB A6BE61E6B61B55F2 08736402275B22BC
+05344D994D54F5A6 23D16ABDC24F357A FA284436B8B3B541 1AFFF41C08D63793
+23748E062713ECD8 E58B48371CC93F8E 6F8DBA23723014E0 52967A9FF627143C
+F67F90ADD6A74096 BDE443EFDE017869 EFEA20650C587A38 14B2005657C3A583
+9FFE956E38A8DD8F 1D75A8110D855C17 D4A8860B70D4F180 6677118E6F8DF193
+B61F90F1DD854331 D6BD84E96037F75D 311E2F46EAEB93BD CB0A857A92D7154A
+4E297D100F994399 5A0197F2ED97B0F6 EC4BAB2F6D0273E9 290CF61FA966FE9D
+59044896565E8E6F 4F8AD5450A853D5E C69FB6317B50A7E4 AF91991FAE7BDBCA
+C5E0AED8A2F1FEA3 C692618EF0FD541B A22A9E47D561AF4A 80FA584E9EC86E29
+ED619448AD7CB66C 76547AF8013755D8 334B7B61C720729D 4404FE51A299BC7B
+28F46EC7B3161279 46671160836272FF 44865BD8FD03F594 4BAAB493C30095D7
+DF7B008CA5CA0172 6EFFACBE63D5A887 1A158E3E95ECF469 2076C5F7CC96DCB0
+3BD1DB90B4B50CA4 60ABCF9647B238B6 F81B4B2BB5521A56 1CAC9E6EF256CD09
+1A3096C383679440 4AE110AD65D4B6B3 E9872A01DF798F25 CE3B58BE1D84A4F1
+3F7240AB5299523F D06F835B82F024A4 68B8B7CC58DA0017 69F4C92581C2D24E
+CAEE03B7F4532F1B A552D4911AC71595 78F8D8E3466F35E2 80E7DEDF075A9CDC
+0685262F57DD96BA 3414FFD69A94712F 2A35CCE8D8C3553D 9CDA268047BF0C3C
+B9746E859185DE87 125D518AFC98EFC4 C70466683A3E4F2B 9AD2F9BD426A8CB8
+06FC43F84F353F56 CA50919CD84E1163 057B6C2222116780 EF4961EE97753CF0
+D8969BA19D0DAC7D CB6E4A4DA1E95640 2C8BF5494ACF77CF 56AF6795F3FD916F
+103D2E474CD2F9A0 F45F39A943564EB3 522C8D16B8BC275F DC964E3CBCAA78E9
+90751B862332935B F2384AC1ECAD7246 97F1437A16322BE9 80F8F6D9399D93C6
+F689F8D441037910 1163E7255C93C4F1 FD63A0A7FF4FF6F1 6ED409F20502A435
+D2F6F23C5D4314A8 C822800671EB1BE2 61C2EECAF648890E 45162EB2AFD0FAA4
+70A1C6876275860B 09FB3F756E9BA651 D09997D1D532F780 97A4798BDD4E73A7
+9EBD4A08E1F174C3 DB7D84FB5D22ED8E 64760EFDCB621C8E 290633116DB1B89B
+0EB0862B56235D0D CA56F38007633650 10815249D12D7D3F 4F98487374565636
+E4A66AB60622F2AE 28879E2D36222FC6 82DEB51A81796E6B 0C347D3282E840B1
+A1E24590321F33D7 26C63013EA9912F2 E1D61E76901827EE 375D2128460278A0
+DCE34A5C295074D3 B6658F4A754B1DDA 07E9DF63FE037ED2 B32C1EA8DB8F94DA
+5437D66EE738AA74 F6F1365E2C571943 CF1719CD4FC3E2B2 9F8963C79E2DB105
+F933AC3FD132C23B 2D7F20F0BF0F73AB 3E6C40A90984BE32 48806042D414F536
+A32FEF91E8021FD5 4657E70C64F41286 EBC8C52DECAEE002 7DDDCF7BF9BF4E65
+FA425231EA9EE534 8732CB34D981398C 1523B184BB56C41B 3E959FA9443742F4
+2E17BCAC777EF383 D17A185032E88F91 8A19CDFEF32C5418 B5D541F36C13262C
+0DF6A7A704D4CA10 D4EE49B811EF9440 D3AA99F6DCFFEE49 4539716044ADE2ED
+7718AB8352A840B9 974DB20DB7B024A5 776CE032C6CA088F 6537EEC291DF4F8A
+039F8BCAFB3D2DCD F7CDE3A8A76F0127 5A1998A99DEDF69B 5A49E5F0A048677D
+CCF6C22D63D1A540 441D9FF47568B45D 064B3A892673BBC5 7A20ADEE921F7657
+A4AAAEDBA3232242 6AB5E38BCCED5CBE D3F95138727854F1 5092F107C3CBB07E
+6C44D4476F6595F7 D4D82E0D98CC86C7 7AEDB47FD3E1A171 5641F48F5F666D7B
+0E2F764E97A489BF 010130D1E9ADC5BB 195761092011E1CB 931DA22A02FB36FA
+7E7F94544A1F1EF5 275C95B675ED4022 6EC75F6E76CF4958 609956ECFA34F60F
+DB06E093234CDB23 24D553BB46BDBB8F F81DD5C576CB66DF 74DD7B57AD23467A
+D439EB98EBBDF589 5B54A7F21A9CC3CB C9AC384E9B6E80B7 9E794FB9A46BE308
+13A027B840F73BCB F5DACB9D7C0C9F47 25CF8547496740B5 C659AE12F2FEFD88
+846F925260D795FF 8BFF64B47AB8B40A 20AD1E52852DE61F 8AEB2D2572B464D9
+83EF2EDFE05D17A5 E72145E56D881BDB 5DE580DA47FDF6F0 765D43FD33D46FD6
+EB1866ED7EEEFD3C 4F7D4F6E0C7AC77F F2278BABD2A6A04A 90F48CEE61DB7BA9
+78EAAE6BBC04290F F32A39535A92262A BC5599024F2A38A5 4B3FCD444B73B356
+C2C14FA46D75788D CB0D01272DB6EA5E C3EE0CCB5F1C5621 D6FCEFD1B3E9B986
+95E2DC5A5FEE6598 C504903F4F0E541A A602DD6B59207E90 C6EAB28348AD2731
+5E0855D51D6AC6D3 C78DD9D2597C643F 3C05D0AB9F237A13 0E45B8E53D4138E0
+719A1DF565CB3485 08B39CC70978A48A F9AF8245729DD3DF 14E4AB3F952EC8A8
+13851E13BDF70922 E5184222A3A04266 FDAE1E6E8ACDF6C5 EDF13F3EA5440953
+A6EBFF8E9B43FAFC 0D5CAA46322CE172 C776090612355CF8 A9C70EED0BE44608
+284C4CF48729EA50 3C97B8707612B782 95D627EC4A332B14 38DB5FCAF2292CE4
+0EE0F93CAD597F06 206354B9178AD47F FCD0E5ED829A48ED A32F3F3EFBC756AC
+52844A64972B0635 A824673215BB1A22 8F1BFCD1D97325F9 A4307519296FBD36
+45EBFB231AEF8232 D8F71059350C8C9A 6ECCA270B76A0D01 EF1489FF0A9E2D85
+CCC48335551AD008 41E086935B9829C9 CF9830CE7E4445FB B4A20BDDACDD5026
+5971A4851DD2BE7E 9DBC779A529ADE38 C07BE7BC8925A15B EF234A368A17377C
+120604045302EBD7 E5C6C9177D2D1F84 85D28705CE74D43C 95326ABA51572B40
+6A45D4796A746162 BA1528409433E5C4 567FCA58EB1B94E2 F6DF50BA601AFBFF
+92E7A66710AA964E C1057F616B9EC5DB 4A320D050CE8570E 3376217A459C3075
+BCA9D4463923A214 AB40B9C6DED96AA8 CA6C2DC4D2754326 D30A0C3BFD24D6E8
+A4870C7636FDE263 727DC5544A8E1503 17E17FD153697CB6 0E70549FE990745C
+E163137AA746AABF 3E76E991EDC1393D AB591AA4E7343A3D 2124BA40D5BC1280
+FCEEDA9B1DC4A394 064E332BE317F2A9 9C4E65EB0EF62D31 F764C4881EE7CA78
+84863FD482B06246 19B113AE68EFC6DC 410098DE2CE30F89 C330A3E6A24DD89B
+0C240E2BF704100A C0CF4A7D98E81E77 E9F987D69FC013D2 87CCE854EB5655BA
+F3AC439758FB2757 332AF52252AE90CD 0FEE40A78EEBC12E 149E129C5A3A1B0D
+C3F90AB93E171974 6ADCA04CECFCE18D 03ACD62E4403EDB2 CA3FDBBD30616E1D
+A0BB1EFC1CA91C79 09CA79E4008D45F6 4E25A345C7908581 D65B2900FFE91479
+EA3F50C6C5DB110C ACE1FA3382D39788 0216FF4C30C96E22 EC7F08F16DAFE374
+726D2EF2DB70F1A0 E7D3FA436D3CBE0F 2A85094113FDEEB8 F7B430B8C36304D0
+1AD89353B616BC14 1C413B924D1567F7 663364506D943FDC B3F022297ED6CE92
+553EAD49985F9F6A AFD2C28D60F3A99E D513BCDCBAEFD19D C711450B4D43988E
+3CCA06F5D70B9760 FC78AC37A598D383 A3F483E4B6CB2B6E BA4D5F03CD6EF066
+DCEBCB6C276444C4 6295A453D093CCBD 5C0B856B513089FB 9566E125D356231B
+F34CC67B0ADD2A54 13298CA2839DB005 64EF98BDC1D63F64 0ED8EF268AF304F5
+0667CE7C82720EC8 B25EDE12A323CFDC 296ACB4F67201C75 2DBE248269405254
+B44A20266C8970D6 230ECC0A87377B3B E7312D8A9E89B745 3C01E0ECA98AC2EF
+6F10CDD23F8037C1 EF8CEE1A1D2727C5 AA3A3FAEDF691CC5 D3CEFBCC24D45EBE
+8EF93909C1D675DF DBB974976EBF7565 B6B041D6EF3C2761 BF969D9F3C7911F0
+24292414A5C3042E 251A22FD8BA33E0D 6BD34E4E07E6A7F1 2240632C0EFD6627
+D26349613208DD70 D9305C439692FBD1 DE0805463025573C 11214CB23D0A8D6D
+D19D7A0E3A0E7394 AD617679F17414F8 B87EFA419397F116 6D86B73BDBB34946
+444EC1F9CE55489C B958FD10AD3DC535 82EDED6C003709A4 41FBEFEDE39A04C0
+93C0C7FF4869F2C4 D12CD5F46C70D499 5786C9B735341810 ACEE4902E13322C2
+E14BF8FD418B8B75 1ACF9D5034B3E560 1CF9290D63956CFD 017C8D672BC98ECE
+25C0ECE8907C032E 6F35AE96F00D4204 22D68FAF4F91D4AB 828C55EE618EA64E
+95BF08948E6ADDC0 2D8592D3BA481712 294C110E4AB9D0CA FCF753612831A538
+B0DE1A02DF51306C BE1969C076E52E87 CB4BC5B9D79A8B29 CF00E5A0088163C9
+CB539D1C9741561B 620CC859CF74B18C 65DF29D7D0A06726 2C5FCAFF43BDD220
+1FFD7E56383360FF 239394135978E26F C8728882FAD6A9EC 56A9673FC3C0F9DB
+F7DD1E5A39880A82 B28742733BA77B68 40F0D9ED641D3F01 0A17ADED75467E4D
+CDE0A492E091FEE0 191CA1CBFD56F183 6A67389FDCA16062 543528E78F07AB40
+EFEB333B606A86FB CEF53FA1F58E036F 4B86134B58A81EF3 B20408D3DFED9D52
+71CE26F9261A6BE4 20D97889F567C6BA F4BAE0ED0557B8B6 D0ED96499CC05E52
+0B437102F5CB98BD 8EDCF4856B248165 1796E45F2BCBC159 468CE9803BAA76BE
+16CE3436B4AB01C1 A15214E46BF200CE FF583AAB584AF0F2 C7230E868C8051D1
+6187D30B97EC71C3 D2D47DA9227682EB 01459548051B14CD 8897C4B366B320D7
+63EBF2AE7326F4F9 0EB94E19DEBBA2C7 B26FE3E572C961DD AC24B16CD7FBAC6A
+B4D7903BB5A4E040 B691BC2A76F1D44A F5A2E40D43C8630B 7ACABA3EF73BF71C
+83E3996092804A95 231FD0B3FDE8D60A CBFAA07D89D44709 C4093B12E0FDD250
+4D994687398DE6CB 05E46F15F26E6717 CCE265E27E9AD891 CE9CAF13B8DD1FD6
+33FA9CC00CC75259 C4B41B2E639BD489 32F40BA13E1B4F5A 452482EAAE212F09
+BEA6B8334F11E1C9 2FE27E6A1D2206A9 4074F4AA751C3517 B3A16696A6C19678
+4314270CA8EDE719 3912AD43224A81CB 9F1FC452D5122C7B C11A4F38DC2BBB7C
+39F548D867149E8A 5876F760BF713905 10EAABCFE0A87CF9 F8996BAD2939C7FD
+F86E6CE3170F932F 84925312603B1E2D D283D831473FA068 7D5F407F780BBC4D
+BB8A3CFCF0FAD516 7AE338C79DCE4A7B CE16DFD274427333 3298D7E5815A51D4
+308F00878722D57A E56E5A683C806198 92A6584A4A8212F5 5F376DCC5EC57645
+4AD109684D7E9FB1 73B68D809387C7ED C54E35E2DB1E3654 BB55CA525430F1AB
+4733075D9A953066 4BEA4FE550C8A438 C38BB0C71CB30C10 2192B2869B6CDC3F
+DEE14E670015F686 5EDBDBC1A9284CA9 A9FE6E4A6271B010 09F3D6B417D3D14F
+6B622ABC3DF5EAC4 16F2AE2E015478C7 2BE5B2444DCFE52A 33646385756BE1C5
+2B02C2F9E0C41D2E 060FA524FDB94EC0 385D6886EB54F3D2 B92DB084EC3BA614
+C0F1151E8428A7AB B6B850056611D1F3 FFF3DFB5DE2DE608 4A8EC1EDE17E8914
+446DDA3AC44F0BD9 80412A8ADF90B17A BFF212D7DF3C1DD0 4E7C613C9028D77D
+82C7C65C0DC21C4B 2178C35A69E0DB21 9DD7169C20B9C2A2 2E166AA73AEB7355
+9397742B806A4626 1273DF9797E867FD C4DB4F02B8E589CE E2055F407E7B1D78
+4CC2B15ABC9B9405 4D1A0F763E3E5146 08E5B94D6EC7D1EC 46BBD778E52B0F8F
+4F8A94C92AD17B6A 2DAC56E3990E0A15 433FFD23CBC43FBA C71C824A067F0CCC
+B72769ED43B86953 984712C4E0BF8DA7 B5E2DEC500AEBAA2 DBEDA0CD74DEF3DE
+EB99BF1ADC37B058 4C8A724EBEC83CAB 0922F540F9352906 A1054D89A2A8061A
+103B7651FD06FE41 9A502E3C6A6A0368 9434E7113076940A DF9EDB1FD1E9AA51
+8FA707FA0B155ED6 DB50D587E32DD4B1 E17ABE7DBE3CCB17 B2ED0A25DEBE8A6F
+39552C810DF1D33C 75C7DFA208BD6832 ED3C4363077E99AF B300CEC7042E3A91
+E39454234341C36B EE01FE7204E75DF4 C885F0F30CD373C6 795FB69FA5270D91
+1836A5B02AB74879 B06A3706A559B8B1 85D3F0D57C771912 85379E94E5D4006F
+FCDA367F9ECE0BC2 D9AF84C84E22ABED 8F95023648FDA58F 78A3FF3C2556F6AE
+1ACD907DA444DEB2 27E4D58F1C5D6777 84E80D4DD3ED5AFD 8F2D239079FCB1D1
+8544AF85E28E448E 765794DEF6933144 1A4BDB63E407CE48 87C9A0D00B9A0A5D
+546E771606644C02 E2AE6EFF04CDF653 8EEF15FA9B4910F4 3E9B3165330EB5E4
+DEF3397A5641DCC3 526DAEEFC9330618 E4C4DCC90A3F92AD 477645E51304A6A5
+494DA2B0AAE3316A 5AA9EFED02489412 70215BABCC9A7D59 C56AF674FD20E58A
+8AB3B67E4318971B 5B4FDFF2299FAB10 3EE2632D5E9A9A1D 5D87BFFA6596E85F
+7B08F0097351B8EA EC812323CE7A4EE5 48184F651A47D7B5 AE0F802DB172DDC9
+A0BC1F8C4709280A 8775C7F942D1A72B C810D571B628BFBF 67A52E21D8399117
+182B8A2D2FD959AB 94965EA7DA607D4C CEB200350922156E 4D524D2162F95492
+EB698AC06A8EB93D 082675BC04C4EAB9 E2205A9E5FD29B34 D8F2B049C253B479
+72983681600899AE 8AC14689D92151F0 205165194F956048 65961EF7209484E5
+ABFF0E4F7ED2A627 555905A75F8400BE BD2A4A387B56D365 0629CFA917EB9FD6
+28F66C0F7BC1A2FB 733999BE8B7384E0 EEBC1C611F056D7F BF28BD0A2AED5D87
+DC901411310B3E68 C7F4E746C99D63E1 214E3F7621E1522D 3A5B81A08BE889B5
+18BBC6E4619FDCAD 88C70FCFBEC2B5A5 F7BC2C1F894AFD46 39B7C0762C7D8892
+00CBEA2A4F668BEF 6258A3BD20DA069F EB6F876AC98260DB 9BE52FB5A7EF6971
+A42768AD18339C8D 4E5EA9D06D443A1F C291BB208805EE1D 237274E3A518E1D1
+EE5425CDB1E4B06D 6F1B6A7D37FC9705 97BAA3C913934862 662DFA14339CF0B3
+599A79C9BABBCE76 007CE4B931E013BA 1F07C9BF8E76E67E 6FC78248E2130071
+EEAA92855870E4FF ED50D2258D1F0E6C 72854E43D9E4AB39 A65DA5EAD6A920B8
+878AB5E9A5777153 1491C0B9E0886364 A090188AC39B3203 CDA07CD0F3267AAA
+926EC147DB272146 DF69853E336CA652 13268B1668D0E05B 13E14C1CDB7A7F37
+EC626001B617EF93 F0D4F84E8C33B31F 0DEC7B76C9DEE410 917EAB47D5747167
+CC5FF97C73E1E516 9522E47CAF372ACA CA6D40FB8B94F61C 6D3EA8F4FD05581E
+DFC035C665816307 52C92A034286BA2F F61CC0E29D3D7D74 7710BBAE0B45C82D
+5F2C4DDB29955A7A B16E5B14F5FC1328 E5B9612E1D21BAA8 671D74FA3EB629A3
+2A26CBEEF56911D7 72CFF13583D98B62 53CECC52DDDA9F61 AD19D1241B26D42B
+0A1DA3956E47F45E E1FB62A8239ABEBF 8BD8BE95E315BA21 2BF15DB0ADF22740
+1005451E146CCD82 9E3047DD5388B9C3 9D772023DF0F5754 7902A264441C1B6A
+566E268724545483 D92201D5E3C5E3F4 5DAB300C536FBAEC 7AA243573DD6CDF1
+1230AC2C49CF5C18 48DA61410255FF88 E706C6246C91F15E 7F408DDBD064B01B
+FE3E9E2C60C4E22E 02D3B54D33A77FB0 2E3D5459212E6A8A BCBD931C37F9A84C
+B2C2AA58904333F6 9A8511B04E1695C5 9959E83233305316 A6F0DBAE6913CF38
+6FC900B879F1D085 961FF13AC981BA12 43304012AAE8862E D9BCF79052881146
+005DBAF4A2583CAE C10D9C5243481AF2 C71A096731F0276E E092C9CD9000B787
+C5963E7BD96E96C2 38F9A7EAA68A4119 72170D43A7E3C9C2 82FF27553C9A1D46
+566CE8882099B1ED 9E09903F291DA882 19D6EE166DCDC806 FFD572C05C26945B
+DC9F733B12908870 6255801CA29C7C92 BF27126A0507E420 95B5CF3D445DE321
+E466BCEDE5985B27 111BB9A8F45FC084 5FC0D432FC03B0F4 B94FB48EEE855B0F
+F01E60A379930BAC 4CAD273AC3AE9602 25AC1114A01724DA FCA0E843E813B5B1
+E7C4BC7C55456194 A41582EA4B274B65 1500A9CA54542C53 5CEB08197B6727D7
+213CB1158744613F 3208AD498B11EC8C 8D0D0721A37F6B6E 0787D396B2B9EDC1
+9714C542C2A7ED28 30450A9B142C2E1A 956397859E6E75C5 4613790334B52DA0
+D1238E68EC3B204B 91D8F4801FD8C6C7 7728403485D1AECF 289ACB7EE6DA064F
+1FE6DE85351F5987 077E1D1AECFBF35B A6515A77C81F5907 3FFF7A502F3A38C7
+7E05C3F4ACBD856D CFC560C7288A03E2 5EE7EAD52CD59E46 EB8ED761E92D59CF
+A19908172DC55BB3 95C2C60DD928243A BB54D94E03424C6B DE7456140D9EEB2E
+58F890AC0995CA91 18CA4AD7F3FDB056 7B676CE5D629238B 10C47E50723B3A5C
+486BBAEDCB7934FE F5FC231FEE0C5538 9585223976F91FC0 03C2A4CE4B51D92F
+B57A44A254F6284A B24FA2BAD23340B8 3B1EDA3A57436DDB 6513474B8F7F61BE
+AA0D55708EB7473F 74452E68EBD3DE7D 9E17E3B8B289655F D6A195FD9D3D5D62
+406FBDDE5812DE5E 1C3CAC18858E1169 C53EC741D6DA3F43 E7D77AC9C42D783D
+BD0B14FBC3EB83CA E937ED685FBC350B 03FE2496B51B9DD7 5A70F67F6217D38D
+304840A85ACBAC0D 78C1AE0D54823F9F 62AD711A5C0970F4 FAAB32702679B040
+3B010A2ED0AF1D10 88EF5B1E0E3B9D48 B02DB7A0C3CC900D 90BB58CFC917651F
+E08787B2907192E7 A2384887CF94A309 77AEB8A624D3E2E7 DA911DC69391076D
+7E508608C34E4FA4 4AB674A7D155A3C5 AEC3B1116C036591 7628E1A419FFE625
+92C6B9734D7E4163 1CF671446346204D 710C23FB5CD9199A 8113A8F57C7312AB
+ACA5BAC4EF5C8AE4 9055D1DDC56DBB49 20EA7CCD6205956B 5B31B045078DFD04
+108139CF522E2F3B 0E4F6D2C644E1FA8 0A4152F4F9740177 F8B0DC20CA49F531
+DB6FDBA37CDBA0EE E6B0D8EE9B78E18A 4DE91823C672DB3A 6E3A3420CD073CB6
+5D3028DA03B930BB 48FAD1C4CCB1B08A 854F1EC4AD8FB5EC E619B313F377B2F0
+D5B13BBE6EFFF453 AFDCE2399A29DC70 710F2B9E70564090 058FD79378002F4A
+7A6402F689EA566D 6974877C8274D535 D9767F23D884186F DED30A619F05BE44
+48F678BA92BE38CB 80B30950262D1295 28FA11BA650A1DC1 A9DAC8AA0EF9C14A
+49384BE64D054F5E C60D4987E5900786 26D8E8C7D5AD2F19 85A245F56971574D
+A87BDD1444CEDD9A 43B920DB8C32F1D8 D45A5987BED5537D 81BE28EFA067DEDC
+37D2803D2E7B935D 99E1A512502DAD9D B516AD735D91209B 3A977410DBD0D1C5
+09D5627D57A9BBB6 0DA1BAE98460EAF1 45620802ECBA0466 DD375DD02A495D6E
+427647D9E32DB59B F84E2290E9E2E3D9 F11518320999FB54 C91FD2D0A27BCB7D
+A4F8BD379A6D13C0 919C58E87729121F 2F62B01725569ED0 2A40C4DA407EC987
+648845A7B6B4106C B703DEC1E2B4E8E3 E4642EC866ADAB26 A54C4FE1FEB2903A
+F0D25475ECB5918C 0D073096CA6680EA EF170A1522AE4CCB 6A110A75DE4EFEF0
+FC21250049E7F048 2788A7099E1B0EDD 3DD6F791BCED0B94 B077FCAF89F67E4A
+FD36AA3688198580 4A2D5C5058C73949 6031335A073637A6 711DE822D9800C46
+7E7C4EDE233083D7 829E6B15002E3BA8 D71297651B305BDF 9555A01BB03B2882
+E28B5AC723CA6F36 ECFE37F7AE7DC698 88942A80566FE993 CCE805FA30DF05AE
+330DCDEBE40080E5 D0464A937BCAF441 7089FD18BC725D99 75EC6A0BB051D882
+33AFC32842BCDB19 6957AFEBDE379642 9628DFD988858894 EDE2C27E760B84F3
+E69FC85AE1C510C9 FD509EC78D5379DF 42FB8CF0649B8A91 8C2A72AA41E21B3E
+0A32C41600D1B9B8 25625AA3B04ADD77 F6A7C50AA0BD4D79 7927FB53C68730E9
+DF45B22608B6A84A 917F72B8C42BFAFC 7E4D5A0924016D9F 3C122D30BD775530
+2277148A52CBA3A9 41083DAC7F61ED93 B59FFCA444EAC2DC D0968F7218A368A5
+2EBDCA0B2DF1C0DD 800F90BF0F45EFC6 A5BBD1B8D1AC9EB9 77CE04F1D67C2D5E
+572704335D76B7EA 79813D04FC5A1631 7070AD03ECBA641D 2186DE6C73CF42A2
+3D00BA452B9CB2E5 7B47570BDD26D0CD 73A887611B23B461 8D45C40742355D0B
+FC9565769562F90E 9CC807461745A76C B1D6ED67089B51B5 90865DD1711E7F7F
+239BB58E126BF69E 04FADBC5CF0EF7AB 60BAAD72752E0867 FF60005C4B804CFC
+C296B49EE695FA07 1E177F728C177DA6 C97BFC78355219E0 6092282B287307DB
+E830665AA28C9841 21514044FC3AB9DD F445DC5C20EFD597 4AE9599A798DD941
+3FC9C4E604A794A3 9EE7138F0CFC841E BE236434AFB307C4 470F77405A9E90C8
+A44444ECF6C20654 C28CB48CBF03FE94 DE19946F5DD853BF 6BD5A844F70A2F70
+073698001B05C878 06E3C926D76C706C CC6070ECDCDF6A55 E65A6AE7540C0B94
+E191994A13CCF716 40A98905C28E6EDA B2BDFCDDF4820BD1 D8D32DB587449FC2
+F4C10AD3B02B64C4 BB817769AA96742F EE3EC141EF6A28F5 675119D4A50B1E0A
+7D949F7B382555EE 229B57E41A208355 B08A5095FDAC54F1 0FA3E14AC598A3D0
+10E8C0317230EF39 D14064482055CAEA 18C924CF6A678A48 71965E21DAD99B34
+98A05A46890C2FFF ECD96120BB7B1788 E5417FE71DCDD81D 7E9440769772E5B1
+1461E53FE7F33F21 D941B69C5F4046B5 53EB66C96722CBA1 D98A7F91CDFAE7BB
+F95D12EA241BC91C 73E674B4C09EF0F0 DD9EE9A72A276EFF 4C5829F52BCED28E
+86B3932037C33216 77545D9DB71ED098 DD0A9A9BB76E153F D129322075B9DD3B
+0CA8DC307B768F3E 82A3E8ED447F0DA9 1162DDE9F8E63E4E 9986D0C3E7C04F0B
+677963C05A391586 1617AF42A4CB81B1 762A246DABE70B9E 876507DF6DD1AEC0
+096C339A06BB7320 F32EF5A89B4177CC 7F2A91D1D71E58EE D9CC770681C7A7A7
+538DB77134BAFF39 31C6344F19B6F97C 8B7F36939441854F 81C878555432D584
+326BE02402C7BF62 7E7B81AC07F3DFFD 1FD6D8BEB8D589F2 EFB717CB15497FF2
+13E5C5C487AA029E 808412170740C00D 2D27383797F8B62B 3024AC8BFF4BE975
+61A468F6EADBC2B9 7790C468D7606035 38B431FB3F1C845C 43B4EC51C308D5C7
+55AAA3FE1328C15C E15835F8E100D35B 1262EEA0C138542C 9CFA28125379DF48
+9B573C98A9527512 1105052E96114673 44442254FA3E8EB5 E18E5CD30A573F6F
+D0C8FEA7B4A2728A 9E85E451B4F0183B DDE2D9B74B3DE935 35003456857796D3
+1DAAF8663723F26B D125E41E1060DAAA 6CC0F8F445554AE6 9FF2D1542F31CA44
+B5E68240F41D555D D2C0C205769454C7 052BB3CBC4041A4D CC928A1D3CEB1BD3
+586C31D44C489BDB 3DBCFE39B5A2B731 22EABD3CF5E65804 49573B10714A6BDA
+C0DE6E79BD43993B 895527E9165F7302 66CE1089EE92505E 99448737A7F0DFA2
+BD6139299307F7DC 00DE7AF6E1B9D445 50D9D867464A63F6 FF9CA2825BB940A9
+5B1C9364DBF50181 310295571EE26E3C 66934FA871137189 2EF695B0944B86D2
+CB317EDF6AF8D455 B12B7F48EB4C770D FBA58D1FB606922E 4B70060ACDF352D5
+B3D011531E641267 B76B8E1D71372494 1920D850D444D7CE 3432CD777ED994A2
+F22DA07672D7B33D 98BF095A200812C1 8C77B4A33B18ADF7 0523E9660443AA53
+9F0E29F5A8725496 102A7DB2F99CA0A7 D3647025D12F9EDB 0FDC5CEFD02053A8
+11DCA60AB46C4915 FF5A664E10351469 3A73ACA609FC019F 810B606911CFC010
+BDB539281885A39C 97D5FCCB2C8E1F11 9C426AB6DC6ACDD9 E9D6D8C11676181B
+65243751415C1F65 5714271A3E2FD7F3 AEB7CCB1E6C5CE4B B1F84AFEF486EB3F
+B40FA7BD1A621E02 E999B848ECA26D25 E9E5860568E78DC7 9B51D86C00F648CC
+4CBEBDA205650B2A FA52B2C53C1DE15E 83C5E16E55EFBC86 7F8EE0C300E35FAB
+A13760830AB6C7D1 092BADF3FA097A1D 606D1776AB594ACA 8D8BD12D33C7FEF2
+F008131FD2882412 90234ECE160B7E0E 91D32CD24BDD7B82 4B1A35D0C3E38E60
+EA9E19D5AFA614CD 47530C79A0DF79FC 672ED76F21F37EF7 6DBCD246C92BD65B
+386959F7D8FE3A05 79FCB4937642A433 B4F201B3A11602E2 8DACF28026FC8BCA
+38FDAAE4CA527C6D 3374D52363938179 9B810A214FB2581B 5E44357C7DD4F8F8
+95A3CED6210AC099 7272B2D6EB4A2005 BC433478A9612055 3A7889372FCFB9FE
+3FD676ED217A2D6E D3C058E349A5462F 3FD23DE696E2477B 87435BDF61A27BD1
+6A5E962862D02771 A8C6ABBF9F7CDD96 0B675349F58313F9 45AF84EEDAA7C114
+B133E9F489BEB781 67F860A6154012AA 40DBC70D66AD0B6F 5B317C4C8B3F4A53
+F7F099059FCAC290 7476E34571AAA3D0 BB83A935B47A8674 9FB735F8B35F3724
+DA8C672F168D18D2 1D78C50E38A9F218 414A438CC7067EFE 1EA228AB6A3EF653
+A9031A1708942B2E A98217BD1F7F760A F70E2E62FCB45B3E 1A196F717D53F548
+10100518ABCDA865 E56285D298845A6F 0E8DD4CD5BCEA73A 9FC33AA15B6DD43D
+E4F97F01D657EF63 1C5C4CB1CD00EC01 DBBC3792A8C1CF13 0F4062DECAB080DA
+0ECD6697531B3A7A 83FBA91F581D3229 98370A819724B22D 2DB2C75592E58BE6
+3523E7B966C460ED 3058246AE78849E6 6B8D4431D8E33472 DD06EC4DFA6796EB
+1521455D4C93491C 3B70D37D3B1109F2 513FE738AAD61370 9D1697E77CFC606A
+56A0A83482E5390D 685486EFFD2E3D04 958689281B7DD84A C6358BA7539FA31E
+77E736B0C96787D6 5F2D65BDE5777FC8 210B4BCBFFB66C8B F6E0BA4F5A3093D0
+B8AC0EF120B90914 0296DAA3F5706E19 D5789A49AD79547B 8814F69A2D0AA1C7
+1BCABD9033C047F6 BA56F57BAB2507F2 7F9D3C2E60F43559 32CE3FFC220AFA76
+10ED015502FDE996 1945FB9B0CD92E90 A3BC603278776D7A FB03439F5DA8F38B
+CC944ED5629FCA9C 5249E1EB651B8DA4 89852C6AF857D4CA F1541AE93EB3B774
+E3F46F3BB64B181E C2F395F36AB7D0EF F9987652C7C35C20 433AF37E8BE1E630
+C32EC4226938B762 C09735BA402A5D15 E0EACCB3E958DF4F C9311DA2B0061199
+5C48C02AD6E09EDE FB40D2DDA174C7C7 5C5BE6FE956D0EB0 E468A8358F5CE601
+2EC8E2C88FFB793E B753D2B942D58CF6 2E0119F9ED825F04 EE11323A270921D9
+AD06A701BC1351CB 781FDCB59E1AA236 76FC0D924962D0CF 18C5E3DAEB24CEBE
+E3C94D0B89438EAC C8686AFDF4035192 3D59E3453D0A6C38 800ED3A49FD33889
+E7DFC66BB2C17C5E 35F10775520818B6 133CC0D7C3C7EAA9 16E4C23360CC6B18
+9A27CA1FDC01DF85 81257B7FAAB8B796 C55048A47FB8629A CF2D22D65E000A0E
+DB1C61A57B1C782F 2DC521B673067FF6 C1B1944128CBEE1A 2A32143694FED66D
+62FED4F10ECFC31D 5E6D1F6647897A94 CBF70D604FF31EC3 A6C00990DA95CD0A
+82BBA1652F49D18A A17DCBB53E1CE969 7F43DB29FE6883D6 26584C2421B17D2D
+4C1327F5AF191951 2D6CD7B6BC009AD1 EDA1113B5AF9B1EF B9DB30AB7DECC04A
+A3F36BE49E6AD400 3356CAEDB7EECA92 D00315CA3C72E017 E21D381F4A7ACEE9
+5DF85D281C46BC46 72546311B44751F8 A6298CCF170E8C92 E51F7716D1E73936
+C6B8D0239D8E79A1 0FE49CD51AD268C5 06B503036804A60C 7BCE14F365E03676
+0A86AA1DE846F70D 2835BFDB91F77799 CC04C80D5DE37A73 BD77E977CAF7C913
+BDE8C2A296953563 B9D9D246986E5772 C9554206AAC9DF09 8AEA20F76972DAA7
+E7EAC56B084CAEE6 72DF58B6878E88F9 4A23203526FA6435 5B255CE22822F1C7
+EF41053F0330ED02 450D63FB3BA1F233 F3EEA4C13768C32C D30B0FAF2A1E0E55
+E5FB38D0E8EE86D7 0C87992AC3BE024E D490C35A85B4048A FCB55404B04AC2CE
+1DFC90D2D367E47B 17AB0C4F3CE09861 4802763F0E07DC73 0D46E7BDCF258F43
+9BC5345F5ECD605D 9B126717DF90A34D 63CE1CEF40A82CE9 5D7DF7E37947B06E
+DF4F5A5565D834A7 20AA0DF46F59BF61 3BB937ECD00A12AA FAC088BDEAA75475
+898ACA5054DA40FD 339866CBB7E9577A FCC9302CCA22B3C3 5CA8CD81E17B2119
+3DE53D9294C75A4F 2D5DAF6225247F70 70AF2B01D67A2C2D 0BFFF7C94800FAC9
+ECFFF2A4F52519C5 E0350908F98A8263 01484734BE58B270 7C66CD338BE8B00B
+41BC0224CA66FD31 DEBC0C548F2D11B7 7E872CCCB2C1C4A8 877DEE6D92D3C6A6
+A890804C62A583B7 7D537B9BCD09B372 9EDFD5509F0055FE 1C94BBB080331941
+82BAE8DAAC51B293 2F87B5C18AFFF66A 6FC73C8E244EA8F6 B30E9277B1DEBE39
+3739D7D0A98840E6 095C9046E189EA3C D0B23738CEDC2AEB 6185F9256753B7C8
+D289DE6BF1069C70 DF6981FC59B774BE BA1BE7BE4617A321 67E530E6161F365E
+4CA7C2BFACD3311F D8AABBA2C8E45F58 1AE7F6FB870249E5 3B697B61375DC865
+D5E193D0A56A11FA BDC5E1ABF0565B8A 3E62F0D17F26CF28 94CFC25E7FBEB9E0
+CDBCC29A687E8FD6 C022A1F0EFA2D7B4 CC0310BD38D12074 4D362AD6BFC94136
+CFA1E615BE0AE582 CB011F6E4F9BC232 F505AEC809D581A8 FF60BB5C7A91C414
+77257BA0602F0FCE 384D28BC527CDC8B 535FEFB67B39EEEA 5EF211590288A0FC
+D2AD9CC30B162CC3 22CF062EAB60D519 B9CC4105D34FE120 CDD6DD285985545F
+A1B0C803D37E8E97 6BB19B0FBFEEC525 8FBA117CC554BA4D 28CEA7D56742EB06
+A4DDA0A165D94A6E 8E5FD864D434D501 4C8CC9FB757CC71D 870A23E762AFED8B
+003AD08BCAA2E31E 6CB30D7593D6C273 F80886EF7AC8A3C3 DAFE3970ECF316A0
+92DB4DE3B974B0A4 C6EE44AD88D1CE18 A2929CEB51BEF6D2 4E14F750B71E4294
+9996FED74C43015E 2107475923210D31 07A506AB9A8022DF A63E093F0550E038
+5878840114EAD1DD CA5D8AAAEEDCE118 D42E8E005979D99F 778FF62B119061CB
+332742B4946A47B2 40151AEC15D6F3FE C2B87015986DFDA3 268AA8516A95B052
+9C7C7EECC3AC80E1 B195487FF16B534A 3350862A71C04FD8 5F0DB8890F469FD3
+FB2299B907FAE756 BC8A06008B2A99BC B9F2AF1B5CF99649 81627492F47DB587
+FAD7F0EFFD51247E 976A4FF06644237E 11E4D4B4E6CD1F7A 6527A6F889EC2D3A
+574B4F6726454513 FA9FECD9E362BDD5 5DC967B5368F7E92 D6411380D9E2017D
+5A8A6722AE5B392E 04681564AF93390D 8E7473A3DB5C22CE C2305746EDB9E748
+4386EEC834167833 13B64924D4B9D398 F68722B6F752D17F 5D5BAA283D8CAF38
+B1271CEFE61837AE 7E76E860E28C014E 046346EA76702DF1 F0E3891930582DF3
+BDB995A2AB95864E E0201D9EF3052968 39227B2723A1F1EE 8B48E971AD568A79
+9B7E2B0A4365F685 6F44E6A1E6D09332 226CB2DB7470104F 0AE8041EA13360E0
+E3D053FD760B1ECB 1C605BF1D4C7CB85 3C4445DA050F1E3A 72F104701CC9ADF3
+C6348D35643F2A98 912BE8916680F223 F60CC47DA31448CF 61074B036AC90CF3
+BEAD963E8F1F6CB5 75696C83A614C871 412733AF29300BB8 ED40DA54BA1755E4
+DAB0419C18174415 7C989EEE88F3AFF5 D1B7303BD301344D E02C64F24D7E6D88
+C4CB9FDDC5107ACB 9C9076AF94675174 437DBA2357AA9673 BC26E3BFAA5938BF
+BC517AC8E44F0015 BD60D4E49F7AB720 AE8D3047C53B033D 514C7E5A5E665E51
+5A0DF2CB9881589D F4FEE41634AA99C3 A77A185528C204A5 B840D0CEB8106CB6
+4616367F720FC5D8 C9D4E1C945CA78D8 E691167A62F2F573 424D9021D2D34F11
+E66C4F1FAF3B346F E96D2190172E1051 548994CD171DB7DC 6BF7E494A4E7BA96
+2396F9F54499D0B0 4C6871A7A01E1964 DC9DDBA169FE7CFC 601729A9AA734D32
+789CEDF0562B020D BB1DC89D5B02A0D9 320ECFBF5F59D7F7 2461375CB14C232E
+0C504E28E01B4BF7 61E0445D2959CE9D 1D4D918B43DC7120 A873079550231C0B
+A658E87CA6AF1552 3B028E285A7A59AF 51E7124A9B9A0EA7 0A35FFC784CCBAFC
+1594FB7A32275C69 5B7319D6AED6C6BB 8C652426E9582A8C 2BAA83C7662282C6
+8D5FA5ABF5F311D0 FC76C545775B8991 9355E4398A42F478 3F9C2F198CF28713
+7ED3125997378269 85CA820D750DBD96 369EC5D99105EB62 BDF686C05EE89478
+66AB5B86BD78D1C8 B9784E382323F6E3 D9765070685EBF2A 3AC16212EACFF1D1
+5629E61266288436 85C82CE350D121A3 5C33930628652D1C 2424DBDA800C1C58
+C0D8E69F0B8918D4 C34C614F2DCCE947 C3ABA60ACC4D50CA 9978BED41AA50580
+5D0CA2DDC26B6FB8 15A34CFF368EBEC9 4B12B3138D0B4192 40E2A0006B05910F
+E3E9C1743A0F5628 DDE5E95B98861689 77E0794FC1DC71D1 6CE78ADC864F808C
+F8E995D127EEB303 BA7EB37415CA1F41 22B557AC476A4C4C F013E74DE75D4142
+0C52ABA83ED03F75 71EC38621A6C4D9A 70F2CC5A4D0E49BF 423734D79FDAA68F
+0F3D6DAAE8926103 3F6544BAADE76891 05921EF8B1DC93A2 9DF38E674F84552A
+E16E8A06FCB8F972 63F9E856B16EB486 39CC06D6C824DBF0 42902CB3DEAB5C34
+9706FB251CE9E565 60F03838BB101392 C126730BAAB5AF33 F5C14EA193009EFB
+E0822C2329F109B2 E7EE7D67AF014F65 DE3D95EE420B47BF C0A8932CECAE6837
+D4950E73CFF0FAE8 7227DA3AF7E84C59 1C5A4F5F019D7F43 B1690148776B2D77
+8F4413B49D46D673 156ECABD34409214 F3FC40E98ECFDA49 027D56ABEB6EF50A
+5592F8ADED7B6E85 93FB94293B930406 1946E6D747C9DC6C 4E78BC9FB3A7CD90
+358D63FA8869DE31 382BBCB2C52DF264 B61CE641E0A58A3A 0848B63F5E1B1EB9
+A0FB1ACF4E061B5E 5A846E3B740C2C18 8BDFE7E589EE367D 8C6E5085DD461464
+2F76C606E7D89B1D 5B53A5BBD03208FD 215253A99A51659E 391C97B81B609D48
+87AEEE3FAB1DB3AF 656A584C0B59772D C20968187FA1883F CF60CA21E9D5B111
+00B5B50B9D49CC9B 0DD6DEC01C3B9BD8 07E03751BB0B50AB F566F50957F72169
+20831AFAC6214E1B B7B88DAB6A4E9175 7E5971964E44BB00 3F66519B26A48844
+CDF9DB144D406E87 B10DC433B7BDD71A 21C1589040AB466A A7FDBD70BA8C3284
+7D31F7BAD5D376B2 FE7350D5E5021B56 487AC15FDA42727C CDC78B1363860B1E
+17871901B46AE17D 29C92EF97F8ED177 E9E01C3EBAB43240 A5A7331F879A43E1
+D8D7912089E9ECC0 CC4E2B4B6312897E CE1BADB19A7F76CC 4CE3B6CE3E3563C8
+146EEC3385D1A5FD 751FB6051ADDFF64 AAE7F6E813EB8CA0 B3CBFC3CF6249409
+4147FA78F3C890A6 40DC8B8E07B92B6D 3D51C799732836FC A2E001C149EE99FF
+A884AE72A2CD9333 85EF9FD75A0BE015 F26E66DF42ADFA58 ECB9957E1234B0CF
+60C7FA5ECD74DCEE 918F2FA284B7864A D51C849D9CDE8BBD A7FF47B57544A6FD
+EDFFDFFF6B62427F 69FD262B5D2FFD8D 014134C9AD38F600 749237080856F695
+E62AB85CAD013D2C 863D9BE9A17FEFFB B41712A8850DFD39 91730BE847371A9A
+C8F46E0B9DE3FB3D 3E6165BC2ACBE48C 5C32456F5B492687 AC8A7D00A341684F
+040E574A4F0EB5C0 33B8492E2AF4F252 A2DB05CF6C3FC85B 5CC24C865957481E
+E002AA49525E03FA C8F7DA262CE2AD89 D7DD507AE52D5FFC 22FAA19512E891F2
+9514E21434F410B0 89C32B6A4F01BB1A ECD169EF5F6FB2A0 EB3ED83160901237
+D9008F6A06561536 F754550F09359DA1 4535C6BEB8E53D2E CDAE99385F3633A4
+1CDE33CF662A1C08 23C124D3A9042BFB 050A68572427EB32 DA2B7CF2B1C6022A
+67FA2275EA6A0479 244533AB000073C8 028F173514C2EFDE CC8DCDFCABCB4579
+C17ECFB83BF79907 E1D3B8FA59CD37BF FA58EDD088426037 25D606E360AD4732
+9F4732F7D9C96B19 7749C132205F5A51 2991CF2FFDE076C6 8C2539AD3FD62174
+CF200969E4417410 CE72D8A947E9C122 DC93F31289C70FE7 3D1EF77695DA8D3D
+8172D37683463EB4 B67578898AE5800C A7D92BC7C9106BE5 CF5FA9C9C3451DFD
+2697A0B443193686 F32D73081CAFCDDD 5B64D07803308282 F8F12EA53B79A5C6
+9AB7BACF82BC4AE2 2E41135FD38A8597 35B4143AA2C4DDCE 7B331F990F1E9BDA
+A8DAC0B011BC685C DF618A4E94707531 0D909E5E727178D3 77EB65EA912A9954
+9C19903B7B772752 7A576CCBEDAEAC47 A3C5A4F04A6F39A3 A6D646B35F0AD5FF
+C29CEFF45C3EFF4C C876CE7F38AECF58 B2E471A4CA4135D0 8D6F9FCC63F771B4
+6097BF0D0C478760 C3D822BF48208731 F14113E984ED6135 2E1D7EA9C577C9EF
+912FE6FE33AE0486 F634B1D70F5A3734 639F459A1DCE49C0 49C689130796735A
+D5281499A111600A 180AEAEDA2DFFAA2 C3CA9ACA45E6E485 2E6F8B20234F8860
+9510740FB697277E 5D52650DF855E05A 077D525066C999C2 D7B4B4AC5D4372CD
+34AC82949CE27BC2 141C6C671B56518A BFFF30D159EDBB73 9D33954E41CB1680
+9E981789FCE36F4B CF76617FE31177BC D0977F8143129967 83387732A0E9D1F6
+E6AE9A669C0C6CE5 B54D0E7BCEF899B4 D52B1C43D789BEA3 6CBF6A76C43881F3
+5336A0D79B9DE725 AB30F59362CB2A80 FBC3BD1B56C6BB15 D3D756C0E83C6FE0
+BF62559D030DEF61 020336C8F8D4D5FA 05DD100E584B850F 8BC602D7D7AF5529
+2B4CBBE559F532F9 6C4A3925C1D3B8CA FCCFFB5338691770 404FCB05F3FA3620
+5A393E5313E2B4EC 290E13FECBA12F5A 944240DE8391E102 E3C09928A3B53754
+6E40751A262AC659 D5E1B49CDA73A18D 022081500EF3438A A4EC84433E3D3021
+841E06175818F36D 37EF279B34E3D7BA 938AF83FB95FF0F2 DA5A3495CCE026C2
+911752932B1435A0 672C8DE0B41B3EE9 7AE30DDD86F659F2 006870184FB18CF3
+F3CB91B50347CF00 F6009F203DA2C202 F67EA57A2A56651D E5E73A110184C38D
+3A9D74AC7558851F 37ECFFAA092A78C3 AC252C17085BAF4B D29E60E3E1DE6FFB
+3109C098B3649CEC 21C2009EA15BC447 93B5BBB5383E2D0A 40C0FC19323724D7
+B69699572968632C 9BBEA21FA1431838 30D97977A9DDFB6A FFF068B17F5BD6AA
+10A6F14B7498A73A 406E8F926043C46D 5A7649D78AF11192 1080BC3B4BFD58C0
+7F09C81A7F31A221 53F5AB24FAB5D0E5 D8C047911DF88F66 73B20D2143164E69
+D03363D8DA64E738 651C39B8CE83EE96 C1ACB8EFA78A056F 6CAB0A4B2B95DFE0
+B5078066BE5EEEBD 746ABD0204B1AF20 452779F6A847DBE9 B9A62E9B42960199
+66673ED36B1A6C3B 3D822B25AC4D735A 47B244F721A218C7 9D026CFDDB094EE0
+08AF4DB2A50732C0 DB09FAD330C4EC09 9B07DAC70FF7EE39 0FDE994D1503B555
+5AE4AB5FB43BE3A4 E266C82BAF2BA2D7 1BF7F9F7E6C2E676 47C28C69916668B8
+EE2DAFCC6647B1FB DD4E06F36A02A62B 50E8F3C5D192EC8C 2074FE0F67D3A579
+C8C9C36C03B46846 13C65737D88F5BF1 D787D8AAD7825DA3 A4952F0044921D28
+E118BFFC3B93389D 4C9802FAF435DE3B 9F27163FA5D6F3C3 03AA96D42C297A06
+96019F6320066053 95F00499AEBF068B AD27D008A9A42B4C 15B90578F3080DA9
+15B21FA504C4CA57 6F669C32D9B7D9C1 C42B1365B6E0128B 978552913D09A5B3
+F38EF7E8A35C116A CFDD9673C6F45220 0B4A3A934AFE8894 D1516A40526662B5
+7C412D237C2412DA FF99F87517D4B1C0 22DB6645965BF018 680AA3340E6E5A6C
+E3CD8004E6930E4D 0A34372CC3AF7189 71B727638FD6C401 F2E731C4C6AE1C23
+70B0881ED731C677 98CA21E89FAFF0BD C672FD8FE306483C 74F50192105B12A5
+1CD72AB7D384143B 0C05F0C3F1589A4A BE4087C65C7F2277 6AA1B1DCB527C134
+1E77A8FEF1B9ECEC 67BB926EEA488871 36EF55B177B732AD FA8EDDB87083DD30
+1CB565D17CAE918A D494A5F6CF532FA7 0DD90A509639DF87 BAB1BC0BF6DC7D6A
+C65A5C4AC489B47E 46F022DF0272E5E9 9EC17C0F4D794151 732845490617D733
+94612F6DEE4961B1 F79D41B3ABF4DFA0 D9766D465AD648DF 4EAA6200AF6AC5BC
+64C32AA69526CCF2 B4F20E2746AEE8C9 0FA235E59BAB18EE A158962C8C2029DB
+B11414F3B8E8F6A6 AEE9DE9A4ECDA95A 04A480584E7D3332 570537786AC51549
+0508771EE40898EF FF6E20E51E030E1B 625227B1ED135F28 62D85E2CAF059044
+8FF4C3B2DC383A1D C43B9A0E0D528C2D 7EB8F3610CB6BE38 20A9CF13C64C6DF7
+7790F9EDC4EE2C99 541938EC1F3A6D83 C333C426BD4E983C B998D9CC98144AC7
+BB41FAA73FC73B4C 2FE95C8959D0FBF2 765EE5E5043F998D 845903DF47689C7C
+CB01F128A70F25F3 C4FF09A220D7634B 7362DAE362C66BD7 99472FA8DEDBA36F
+00648B9F015111B5 4F5A0DEFE0D4F980 1747506D7672CE02 3F359EB2D4FEE09C
+716DF1E9DC548986 AFFC6B9506895BB9 12D4061700EE3F1A 1741DF444125ABD9
+9A8168B5DD3E643E E835EA1F7787E1F5 0D32869DC598EC4C 111984AC16396D99
+28C639C3BF65720A B9260D5A9C49E014 A3715412661ED355 4CFE3AC19F9B0499
+4F8DFBB3703D7A33 E2E40258EA4749EF 3647DAE1D26C0F1F C9E5B077EEDAFC98
+F868871007ABD86C D6BCB8A867C278E0 3E1D77E460D92EB9 64F4F8383B527DAE
+C4C5952E71E6CB6B BA36BC3A4EBC4E10 0CC2878BCBEE9106 13BD3C8384201666
+39B295D6A687E4F2 B502E52253461C9B 62C441FEDF60ACC8 BB58FECFF39A1B25
+5A757C1E6EDD4FD7 6A45BFDBAE34D975 5227E982A77D01F9 ACA8ED16C1F48E4F
+E9A783C56352B263 4422080B31CD759D 0B0590FC175D72D5 42BD027D67559D71
+6BE1014CF846A333 0C6087D7BEA4A7DD 4E4EF4D1B99FF746 EF12A017192BD542
+A8F57025AB74A192 A06CB02C31B9D258 25759F3DB5758825 37BA10630728BBF5
+8CE74287A2F379D2 ECA4E40A463E668E 10AD56A8A4CBB10E 1A38B4544C2F642B
+0243FE3D96FD6D23 8B2394CB9CB59DDA AD7EA1F682C11D1B 24173685A2AEAB04
+BBB037B37E2C97DE 1D4E0B1D7337D3CD 5D4B18613FF777A3 8C2051C738906E94
+EC4B7D6B2C0A6A1F F82A50F030F0D1B0 BA9905F27E1190F9 F633E609CD992C13
+2C41BE9074D7D55D D9575E60E1357101 B59AFEBE752793C7 9439BFE982941A06
+80021BE84CDC39E6 4280C9CE3F25D16B B4C701224EE3F926 712957AA730FAD1B
+2801066A0D10FC41 7F5FB3FD4DF53EDC 42D3BF5119924392 B8BCF1B520BBF85A
+4B7DCA115BA78D25 1455788E16E33F6F 6455C5B34EE7D7BB 37124D9F9B4A18A8
+52E9696DA7EFB94C 2129B942066ADA64 70BCB3A00B389D46 5E9277E07A533CA3
+3F0F1CA9888AC28C D059EF5EFDC0926A B0946A5B51ACA4D0 36F5AEBC0C5C5AB3
+EAA9F2785360FDA3 06EBE8D9F2CAAC14 6332513765DCBBE2 B7A7AAA642A7CEB7
+70FBA06E47DBA76C 17D3C8B75B58271A 17A43EB2A3584B7B F34E458D616B6F93
+C24DA72391C50CCA ADDB692D0037809B 90088ACC6B85D19C 3D0D0639DA42C0A4
+5FD56A363984CE6D 97D78FF806EBE19A EFCD4D9DE9393E11 47108CF7E7557444
+DDFE41183A59524F 844B9EAC510D0847 60606A7E8A8E2F2F 26D4D56C398762F0
+BC318997F0BB4B0D 67DB0D4205B0A47B 938C17EE2E21FF3A B049B92AE9EF5884
+3FD31236233FE13E CA49721047055C5C 430099B73E853F43 56B30D0346613FF2
+EE5C4CF29A3D4BE7 87522B1EC2229DF0 8433B364FE2D43EA 853AEF0C601E1E4E
+CE4733DB53023EF4 53CEC1A7965F007E 6AE8054A4086B6E7 4441BCA5F779C06B
+A433744A117A38AA 87FFCFBAF0464352 A7C5F36C9E8BF430 F09101D4BB8092E4
+6A7CB9288AAD8F05 91E3E9A055716D67 244D699C95262EA1 F52877A822FF9475
+CCA9229C0E2E06E0 17CAD892B486AD95 6148D58043C0A8B7 C3A842AC83035512
+F1E429D9D0E658CB 77C44E80DA58E10D CC8081B76C0E35B3 DF7FF78C6BF4BC20
+B088D32A98D6D808 36B94E96A5577FC1 6E0F5B2D6B60F103 D75E8325E69711E3
+933B864412A19590 1D461BAFF315583C 0ADFA1E38B434BC1 F5B4BA76CD4B108C
+633A917D15CBE270 594FA0961AB6811E E34A64CB61C7C799 849E31B0D8493051
+030D6AB773F0F39B A00FD558D1C0ED97 629A628787A7751A C933A196E5BB4E0E
+A3AAE2E165B563EE 49A658AADF0309D5 D63471CEFB8E1C29 918D29341CC3F7CC
+A5929E4A82834629 66AF91DB0EC9103F 94F6CCEFDBE1FFC8 9764DC96E67D1101
+8AC912537D958F09 574449A41C25EC73 D70FE3E5A759AEC0 7376802DE1B5A09F
+5A9B2B35094CDB54 74D990FBBE496AC4 79E6A8A38AF57773 663082EE790EC375
+339F4B714461FF63 94B7A57478773BEC 1AF54402789A90C6 27B5ED80328185C3
+19500BF8F20AF5BB AAE7193D7F813495 17443B9CCBD8BC5E A10D71652235875B
+881EF6174845343B 369ADC2F3C3EEF6C 30123D16A9E81759 207E2BABA1E8031F
+E93C6F2E9EA6CC1B 620042FF8829B19B 88E69337EE52ECC6 A5D31A6EFDDD0509
+4FA77DA39A325DE3 FC0216E4FC86A046 A17106302B53C95A 2863ADEAE08369EC
+C507D3BBEE30ED5E C16B61DC6F8B0C00 7B11CD25A7299EF4 A1DC1DC6C0ED885F
+F1CB1619CF403823 C85A72EB826DBFB9 93C48F14C0DA87A1 EEB628576F4BB181
+268F7DD050A6CEE1 9468BDE85C0A7E81 08D467631431CDBA 2C74AF3A300B09A9
+4416807BFE116A95 27F3A12A32BDEF8E 08505B388E460CFD D0E86EC78CDC0B7E
+7E93FB05C2C306B1 65127D00BF93B48F 0DA5DA5648076EC4 FDE763EA26925591
+D1C70D50C96EE35E 42A7F533DFE91521 B7F90C30ED2F0140 77E31394A9AB94F9
+8D708D7D12D18102 0D5C732675E3382C 72D9E3011639348C 2F3A159F95A74441
+A1C49BC6AEC54986 E25156CDC6F9311B FC985987C962AE62 61BAE92C133CD7E0
+A662005BF62055C9 90679967AE5AF1A2 D58DACD223DEE0D0 5DBB3022982E9C75
+7A6BAEC0E62ACEF9 C97A30AACE3EE19E 6E6B09EC6F38CAD2 917D183472D535AC
+5B463291E14BC38D 3D89F968FA015F47 61C57611C88077A8 AEDBF9CE5BDBE1DE
+A21380B90878BDA3 58EFF42CBC2768F2 BC22FD5C8C38279F FA4C5BE0740C3BD2
+AC839CEA447E068C 7003EACBFBF59D4E 2410E8B1B538EA29 CC35FD7D91D4FC2B
+4A0B4FF1373A5993 E3773040CCE5EE7C 9ADCD6F2F218B6B0 ACAE7F76CC6387A6
+6DAA3A2A7C2147FE 43460A6D94FFAD67 55C3AA0426E41186 1FD19A98896C661E
+C4C535CCB77C1896 485100AE23775E43 E641A510E51C7A49 92F5336B8F070A29
+E13367D0EA9D30EE B63E9851FF2D9620 7B37096DF34148F4 20ACAD5227EE274E
+C3D9238CEBB03776 3D92C4FC6DC4B0B1 BBBE20010C688B37 F8FC1E332FF431CC
+0701AE223F01E7CF F93B99B3A9474520 89F4A15156B4C27D 1F45CF780D58B56B
+1881D30150D16A6E FFF4DB6BC4363494 F821F249754E8684 5F41004C569CB1AB
+7E10CB6829752A63 EE98E8A37EA10D37 0FD480CEC6CF45CB 0E4AE24725AE2E4B
+492229EF3F551AA2 0DD08CA6424FC271 8A7DD88EA1956DA6 0E7C3E1F41181036
+5EEF58B6E1A63B7B 67D4D0E1AE1F0E2D B0220ED20E390921 38FFA1A831A46D77
+07785DC120B3B4E5 4B7E4FC0F69562C2 7EF1C760A13A5034 3ADD9B002EFF5510
+40D95BB139D80F4E CA9CD2E01853265B 508EDA82EE5ED0E2 441B9A9F3E26BA45
+B46C51A7ADC80F4D 069E9EA3008F26D8 78D317EB706A25BB D66AE008318E56D4
+A1057696B2AD1D13 1F8ED17724389CB0 28296DE133566BC7 34E7D4818FA6A3E7
+A72880C6A3DF5C79 58217C6F23E06BD3 4EB3E3826E63AA12 6B546A139DD80C28
+C08411D9ACAF6EBA 8AE1FDEF535F83FD 055B1D79643C049B ED15568AC6FDD70B
+A6930E3555D93072 7C59F90882329098 46D874CD9C012604 ACC54D816B8B88E8
+67B3A3AFAEB446B0 B787521672791635 C593029EF8F9E334 9153D633B0BF3445
+A33EDF4DD71ED24A 17E25235EBF38C84 287023D3C0191AA4 76AB7DF167159BBA
+194C13B8E10A812E 6AFC8CBD6420B7C5 7A579AC52F13D23C A582FD27E6E92B15
+FD5436E97ACA71FD 8E28E6811EF73069 6BD0F6192D9754EE 384E1763CF64F08A
+9276264DBAC52380 8E388FAEA9637414 CC22B29B9935A63E 85B726F9D1B42EFB
+4363D81FDBC202E2 6EB3F8B06101CDAF 5FF15501B92D6582 B89243EE9AFE68EA
+B22FCB0ABE1A5F2A 515E5027A31BE7E9 F99BC785C4AF173E 42839284C15C72EB
+3C3B031BE2126AAD 0FF303B0447A06C5 21C5A3595A4B1EB1 8EBB576007E0494C
diff --git a/testsuite/slh-dsa-shake-128s-tc215.msg b/testsuite/slh-dsa-shake-128s-tc215.msg
new file mode 100644 (file)
index 0000000..89c3f27
--- /dev/null
@@ -0,0 +1,169 @@
+2C44957090A80E5E 80211F485C69B504 64DABC318A9731F1 AF3B352C068A2264
+4CC00EC771C9A333 D2A24079674F89AA 2F9A0ECA7472DA3A 0C073A34DBE100C0
+9B8798E613E59F73 A431A465D23DF8EA 6F110E074ABEEBE4 A621AC103D486477
+0713B76039F9BB3D A259896056815CB9 17777C405808D352 E7D1DFCF2241CC2D
+91FBE72FF61061EB 5167101E10D2B686 F1CF520976F572EF 42AD709AE40CA4B2
+7799320D074E886A 81F235CBF7160057 6CC3DCC7F444C7C4 08EE7D7F7AE2DD86
+320735112A2349CD 97464E3DBA7ADDC0 2CEB7DC293D6B9AD AB5D30511C1FB0CF
+30EF45D5D72C42EA 86709EAEF1722138 409A9F2BB10D7677 DC0C3D6D0DD03E35
+F53FB0DBB31E5ACB 162FD00A4E96B9E8 CA3D215A55A60FE1 CBF9F332F8591956
+7AED45AB5BEB7662 F4F4D1C1EF4170D0 3E36C62626B9223A EA0CC729804FC0E8
+F0BF4CBF67F71F91 63481478E0FAED92 227481B9420A15C7 ACACA27B7CD9AA08
+6DB2BBDCD39344C0 EF09303C80CFE68D 8743032A582D9AAC 9C2053ABB70E9A94
+849447C78875D626 9EDAE6DDB6B1E7FF 585A8A176E2E9DB4 794352AAB9E39AD6
+E6E6ED67CE3EE711 5B7159F6E214F0EE CA0C8E52E5817B71 FC16066F873197F8
+D0C9F1A6A0B10CE7 AC6F98E9A099CB7F B3DADB51DB6BA0D7 8D8D19DB259481F3
+5BFA90AE93A3C8A5 5D6ABD855808FF15 F12B040825F3F260 77844A68576A5169
+F5F1F2A0AFBDABB7 E30144CDCB185CD7 F6704577FD76E54D 9A3F6B3F5BABA6A2
+38899DB5E0F68537 A3017F0A408CA0E3 C3A514FD0C89F293 A6D29635F44EB962
+0C845A6CFB207D0B 6E5201F00A8C1F30 745F8D150EB22792 F599D55D01F389A4
+F2899660BD154351 BA22B0341CE72C7C 2F98287DF3ABECA2 E518813E72382E1F
+861DD836084FC99D DD81C0FA550CAA76 D848952F120FC2CA C09FAF86B220D27B
+1D0640C75E05C5C5 C83B8DB576AD4294 9E345F45B34C26C6 E5373BCD1491D96A
+3636A798A049AB37 8D497C38D6A801FC 6DC3188C8B09B2C5 9FE1110A3C520E44
+74635D77A9AF58B7 C0EA4E6612C5A7F7 41782023D54ECD94 AE5148F8016B22DC
+AF8EFE7D9F42758D E6EEDA599E6117E7 D912755F2FBED273 E1FDBA1E3D3FA59B
+44EDC729AD810AB6 D74FE1A7C1AF9268 708637A60766C977 B7ABFFA9F94CDDC8
+969C0830C9876E11 B97CC5F936891FE0 A7B36B1B073B374C 1E91B11B93C4339D
+481831E08F391CDB A13FE23EB2E70868 C7936E2DE926E1C7 7D986AE66310519C
+BB78E13FF2E67315 E15541E803B5E488 77142BE460EF152A 5724C7034FFD31E3
+28E5F39770807DF3 77CE1CFF5038EC45 9CB9E394F37982AF 0F51BF6FDAEBE3FD
+549221EFFA80415B A81F5EE29E257B16 94A1EF32FB857649 D5ED18B1DC2612D6
+B1BA24CC4F80E78B ECDF1A6AC3579D28 039B95ECC295B879 5E7070E10C2D3AC3
+89223A3B4D7FB22A 8EB1C7B3FFD5BA46 CF25DF16E99CF9EB F6724B02AA753DB4
+92193F7E9D6C4DE3 B27F89BB80AEECAA 721B574AE2CDDDC8 A0D8A79B6265A917
+6D4862EB7F2D6126 6FC1E4C66499C49E 0EAD67548DABFCF5 05BEABFF93BDA597
+46ED55444DFA57DA 6FE5F5DEC3E3874C D73B5807FCEF05C2 8DAFE6D707D00B65
+A0A7A9ECE69BD966 B46344936D8AA5EB 95B3CF9F22453EEF DA3BE026610C3DB3
+78636968CF1DFFA7 DA7B4D3ADFDFFD6E D647E3458384C80A 0F7809E642B3E201
+9E23736BF87B3379 F85323EB504E68E3 2123DA430EDCD7EC CE62E30296F8FAFD
+669D8948C31F91B0 8BF2215B70976CF3 7B9FDE3DB1499E28 6B368A8A2CBE6B1A
+AE9482BC42E38200 608B8DAD04432259 EC10C00113A992E9 59CC2B451FF13C18
+9F269E93F058043B A1F1E64432F8F497 7CAA7C68D60B414D 287315461F24F246
+CFC0A6F8DA9F0468 78970C54F6BB5C6F 124B6A11380CD845 1F7932F4C17DD3AE
+46DCFF8F6706E3E6 BCB474AF5060C65B 67D7C3F3D23823CF 4F0DFFBE85C01DED
+465DB4BC16C446D6 3E3C4A5BDB27531E 37B8B5DF6A1A0BFA 981553ADDD212306
+1050D6A37EFD141D B62E0DDE33BCE5A2 BBDCDFA9C72E3E1D 0133BA2AE1FC044C
+1A7D18C0CA0FFB17 627D0DA9380D2D53 4035AAE26E3E8429 11A1B37914769AC4
+D746EB600F25D766 BE4EE74B574FBEB4 ACCFA17CC0DC9306 DE27E6A275B96549
+C865F9F7C1DA22E1 B16BBE01446250F7 4328337AC06329D0 3DAD3B310789D17D
+502CADA84702DCE0 4961DFEAADD0B319 58ED2B4636B57676 0D40F99EBA6B4390
+556CD2F87BA9E56E 6E6A3036D9371137 4BF59D4A1927E922 2429512C704B4A79
+98B822BE08FE0EF5 38456D20D89B9F5F 6D6AE905E5DB4978 2ADAF78A9F1DB4DC
+8A08D179967EA134 FA8226639F13FD1B B3F04A2427D5816A 32B93CAA3309785E
+A80D34D5B6534FB7 8F11DA66457B3167 852B94177B5DE9BE DD88CCE6353145D4
+E86BDFD17B824747 07C58111935FF3FF A072DB79DE61CA88 DEAF58FE9B577C11
+226EC6397AD1DA61 A5727845E5C86E36 86683EB2426843AF A55AA255E3ECBA80
+0B67D902957A67DE 241EE221106FE281 053CEA55D88878FB 705CB3E1B0FF7F87
+9488B5C74A747270 BD173ABB64B30B58 3C535463734E08C0 2E237708EA25F55F
+DA46D51CC71ED55A 9F5DA4E148A71FE7 649E06A65E59CD6A A47CE51FCE12CE62
+F88362839B70F643 FAB3BD40B9AD3C14 42451AB987EEE23C C9718CBD61CF0D5C
+9E5D8E85BB622D7F 578E94419697DB31 3946EEDC6F6CC086 081DE5C9F04DD18E
+F453D895DF765A31 2289254875EB5AAF 3B7C0A325E02B076 F26EFB169450097D
+D6092CF04717AE44 794DDE1FE2B3F504 337919F9CAA89821 431FAC8DBAD47E01
+A908FB6AEF8E2954 76D5DBF723F3959F FBB6EA1251B286D2 731C7E706B241A54
+4402137852F0BA1E 8C6BAC517A0C3DC2 9017B2D429C303BC 814E5AAAACB6BF23
+26560360B625B7AE 8B14D5546F0720CE C62B272B4740AB47 63C99D099F463262
+C01B589BDB04EEB7 43FA15D40A66861F 57FAF0DF19803E7F F1DE64A5DDFAA9A1
+E8E0BBF52678C9B7 0B40AB86C09D26C8 6E7A0448E71B437B 117F14A4BBF9F8EF
+81D671312EF59A5C 42D8FB5DFB50FE06 83209ED5EA2A775A 12EAEBC0D50C9006
+9EA7D6BFA3A9E90D 50EF735F755666FC 40E9B04C00969758 9515DB1703EA4BB5
+3771B3624C3FF033 6D9F6C82820C6FED 02EEAB20C1C87751 0923FE93DD56ACBC
+71F56BE54368EAEB 0A721478E8A17B93 A8B86EB0A7BCABA3 56F7CA362BFAA582
+175423FEA017A570 9E52DD6D6BCE48D4 5A298E82D8C41194 F30CFDE9D9883EE8
+DF80463175D5BD36 3B4674B8519FB054 E0A4BF69E385025E 8598D35D4EE0B712
+0B2F0C1B22297819 937108DB22972DC7 6A4CCA919B4917EC 9C695AEEEF50A743
+22964F7E661AA0AA 355AB3FA729FC7E0 87C3AEF624D9A95B AE7336C2D4AE7446
+6B7A7AE977B48A18 42EE6A44A5C55FD2 2B2E9C649713BE9C 80C733F032E299A0
+9F58C0D272F30F23 27450AE3762922E1 6468A56E4E139F2C 4DECDC86D8B15D4D
+D2E16EC7A7C43BD1 9CEB7737400C895D 4E0BA290306C810D 206796ADC4AC0E9F
+7C4AEFFF8771ED06 F9D5DAD021C093E3 9AA132E750DA97C1 E1F53994CB35A776
+BB99F7D4EF23FF81 F3F36BC82D630259 FC61E26C22CA3874 1EDF2386F2E0FA64
+9E0733231A90457D 0D55B1894EB6A005 7B2B74C599457EEE BC116435A10DD7A4
+7CB97ECE687E8571 277CB1A1B8F58583 14C593C984771E1D D69BA19F016DFABF
+F7697ED439B5CA0E F4F93CB762558A5E B165A29BCCCE0DFA 8EB884338C7A6A64
+3414F7425337E8B7 6160989272ACD55B CE2E196BD12ED4EF ACD20B226D2B6E8D
+8CAE6338B0588DCA D174CAA1BDBACD99 DBF15EFB07F61397 4DA89BE002B92B2B
+01564C3F45B14D2D 292062E4C6219747 B30DDC995770E3D8 EEA9E9FD86B7EB33
+5990C2550180A7B8 8AB66BEACF014136 A62197EDED84BBC4 AB4EBFED69D7E395
+0B31E607583D694B FBCA1D12348F27AD 9653D56A4CF7653F 981B926BCBA382A8
+C8A07AF7AED88A7C 8BE4E552C454DF3E BA8A90EB80AC3685 2894E0E2B9F52FE0
+1CE26714CDE13727 3E5616837D8ED378 FE4C60FA849E8A30 B548D8E6FFC8D2A2
+6862E097CCDE8B1A 85148A0BDCECCD01 7ADFAB8C989843FD 7933F358FCBC3BC8
+62F3704A8F4E58A9 D8F893C79C0463A8 A0D5A33B913596D8 AD70E62487631318
+DB261040956ED71D 1B3DC12E70F06E60 587ABC10D517EF73 3405B9666C73E69A
+2703B70A65BC235D E5785381A9CADE66 D752976EFE3B1C93 3176FCB9CCBC966E
+BE6AF94E5745B3EF E9BA4BF1AA21E930 BE852302E1A50520 520E5018AC0C1831
+69FDA392FB9DECFB 557814035C6EA182 8EA8C6E4EE006C62 FDF4EB43410868FD
+BEA85F4CA378D985 6A11024D0702153D 529121150AD6D9C9 4A470BD522570D58
+C61B0672ACF414AF BDD0BBC7C9B6A908 C90E9A4E612F19C4 1A0B40B728975525
+D9CC04B00BDF4BED E08244239BF3D58B FE336C787CE625CA CC1251F7E1F43202
+F456BB9F42A73C36 86173586FAE6D76C 0322AB5A994A7C95 6C46584815D20515
+083E09725FD8AEAA 8E06C2F97C911125 5A67C9E7093A41FE C91B78F052CA3C48
+10B1170B0B31D3CD 09B594DA4845B0E4 37AB12521B16C620 4A15A333A6B85F23
+E10B3F2D7549D06D BAE4FDD05A8B146D 4F1EA9B2ED1D5450 DE8D54DC9E8EB207
+85EF665CB30002E0 5D00706F66A5AD9F F142C158BFE51247 68F22D78292E6D2A
+546375082B05AF11 7668970065BC420B 057E0B0BB8066AFA F8926263117949F5
+00D52CA9B0B31EFD 4E7A5F2ADF0AD9CB 553EF172246E0080 0D25BB4903FE8BD6
+92770B3F87984AF6 F12F79B8877720B3 DB65619D4FDB6C0B 15B442FAA90F2CC8
+33E6A1FFBEB530B7 DB404E907915344F 2065582FC6BFBD34 76C9F4B85025373F
+C0F3CDBCC7411834 95275C0C10E3D509 6D9220E14FECBB00 A36840D7E9C6DF38
+4D5E744E1EA2E141 46A71C82C0609DB7 A0DD7F2F5D859E34 42EC5EA8825FDCB1
+AA1C6CAD9B75E7EC C17E66ED21FEED01 11C336C5778954BA 0C0FC4068EA3BFAD
+953D80AD61AF7AD6 A3F6B8B23FAB4407 F2EC4B410C71EE2B C9CE5D154C8BE37A
+30A6986505DFEE5D 04423766B41E8969 251191711DEF532E A2868D500C7F19DA
+5D6DD0C914691983 5E69315FA091B157 1E6995666541E800 6FADCE1E634DC736
+A2D7F86675A8D3BA 78F7B306F0C2DC71 A5F19DD3B5BCB256 D44571E824917B11
+6F22227D035748BC 3D4B231897BC46E0 96F2B0DF5F3758C5 55FCBEBD6410069B
+0F4AC237A3726455 D0FC0B0E82075292 03D5F92A2C8A5C32 5AC6F068AD18B848
+59A520EA4E4AB58F 1DDC69BB69B28B45 656BD61C595F402F 341182580281323A
+B774C10D4CB7FDDA F1528A6CBA9043DC 1FF2EADF536FBD1B B36CA24C25A7E2A7
+48244CAD8FAB374F 4B298C177BF39CD6 5DA700E4297B5E03 2250B9840748047D
+69055F5767A0841F D6135AB173DF6C6C F0A9952A254BACA8 7BB44E13CA0E63A5
+DB00F6E75F8D80F2 D22530D523DAB770 6483926AEEE07E60 ECBFE4E893564407
+E97E8C2B4FD0EF82 13830AA3AC996860 9CE16A0E154C2468 2B46B74E109476DC
+C8DC6F8C3A5351CE 92A7B71248AAA6A4 0EF47C0A330CE359 0AC77FA19E812ACB
+96534D533E765518 EB9D1BF9A62F2FAB E856D03A5F0D3015 30AD02906C3D6BAD
+A05D4178558FFBDE 2FDB17632214070C 57EBDF0A2FCA28D8 CBA3E2395484F303
+003D0DAD3B8697C8 61FF0587E6FBB812 E7571460416CEBAD 0A7DFEED575CDE34
+63FD5EDB26EE646B 4C21761A783356CA 903A9633B957015F 18349CA0F2E3E9D7
+197DBA3DC5484C7D 8ACEB742CB04E1A6 1EF1D04034F8B21E 3B2424736CEE3A03
+64411E59DA74BB61 7ACA2B6C753C833C A7088E2CE74D1937 D795B181A9C748B5
+3A2C7F4F4089AFAC 1EB88E4E2F8AB3EC A6CD3BB4A47430E3 915FE38921D91908
+185BF628292A0AE3 BD33A11730AB97BB 1ED35BC3D0601130 55A8794B6D6DE0BF
+CFBEF9C745D2C001 910C15B5A5868C0A AB50F70199E8C711 223BFBEA2B9BEFD2
+E8479DBCB6420B15 D5F5AB9872336C50 92A5E75D3FC9076D 7BAF0951E895F63C
+A487E811D71EB092 AD36CAA05642C02B 8CE38022D89459D1 5974DB66D5B94CA0
+9501DB335EF93412 C8C0F1999A60E257 15DE0A35368C3E7F BA470A0B3178539F
+D06501389AD60997 18B6AF1714141963 800DDF28581D0596 3A750968904CC977
+D705ADB4C46264F4 0663523C2378F4C4 B09B58FAEF2BA57E 19C59BFECB10FA6B
+F2D29009D8CAFFD9 08CF53FE9B1F5CD5 74D5798BB7BB4A67 0F867EC33B6DC35A
+61EE5B7F4E689929 2610B63A93B40498 88D76B8F6A5C594E 52DF7271F426E9BE
+09E6B2A0B8E5ADDF 64E4E711099C4781 F772E9252BCD4014 8E1364FC48FE0E0E
+21BFD6DA35FC0A72 FC975CAB70E862B7 DBBB6F02340B7EDF C0E89CC257AA77C1
+9058F96B54223C67 741E30AAAC01FC2B D6BCA6C0BF9E671B 2B2AFC72637F902D
+4209AD6D13387381 7B2FA09C26A90ABD 5AFF42E8D7B9CA3D C50CA4C7A4B89615
+BA5654B7BE572B18 A47D7A8ADB2C27CF F2A02AF9944B8396 C06CC43E5118FFF5
+B97CC94D79FD5D85 F9D6335B508BA989 4BF5E0A4AE4F9283 A4CDB41CDC24EFD8
+D8CA1585B672C4D2 44D84926CF286475 88A06340F0D8C0CF 027FC03ED0A25E43
+FD0283B401322AAE 35D07C6E1E940365 0C85BF3A68ECDB5C 7E17B7E121FAA3C1
+4668BBD38D70FB48 DBCB2DCB343EE6B9 61E1397364A4ABB8 D61024FC7A057A63
+9CB1AC054E644745 F823DF14A5B16CA3 1332E79B5E3F73F3 6D0937D4B6F36CBB
+DFD27CA1E1FAEB48 7D97B2D79819C10D E4DBF0E6C05A3618 538EFF39ADC4DDAB
+FB772D67BF517E04 18A8F59458C6826D 43E598939F68320D 3A3BF360FE04F072
+2B0A9E1A8604F37D 6E8F4EF367705446 EFFD3E9D3609B69A 92B46CB2CEEC9367
+9C5D05AC0D716A81 83CF9C5502C5C2A6 EEC14D916B8CCF31 B7AC8BF186764C0A
+E551B92A1742083C 8FAA2A063A6D461E A6F2281BF778B855 871CEE15ADFA2BAD
+D5D6C349E3689916 DC440A23E2574DA6 C139ECB22321E1A9 9A9D93B059E5819A
+CE0C5D8714085792 A54C3CD82252F21B CC48FA2E95F9BA32 5DD8513AFB3E6219
+1D2D76D47219EEBC 6781ACDD533F81EC D78FEEBCFE9FC745 E1CFA102C4BF1451
+2A9018A33FCAAABB 04F8CD5C3E9B01FF DA15F9108F8DA935 D0B69F1CD5F2B435
+DEEB79553E5C02D1 9F7E49A8D498FB80 EB76F579F4F33CA3 E656FF419C49394D
+A1A2F4391BED75D0 8FEE03CC308F8CCF F73B650F4055D8D3 259442B42C91C0A2
+4A7A386167F2BB50 8535CFCDC6613828 0A2BD25CEB84C7D9 035C2CD73EFB055E
+BBC92D69B896FBC9 985093082FDC3051 6C80AF32EF7C6B78 E3F0F763BB53A119
+3DFEA9F7B2A4A9BA 5EC1D956FCABC9FB C0E82BDF15435C65 C0E00E62505A8B71
+A790B3F8D7F13997 60C4754BE12C58F1 5347BD47C548A9F1 F781E8EC3C0A7ED3
+0DBA83559D1C437E 2FF027BE3453E6A9 CD4A6CCF2D992C2A E551151B6F698787
+83AA9FC8D5263CBF 17EBE0F1728F420C 9C5855C391027DAC 83587BD9DC5A6A10
+E1
diff --git a/testsuite/slh-dsa-shake-128s-tc215.sig b/testsuite/slh-dsa-shake-128s-tc215.sig
new file mode 100644 (file)
index 0000000..cea7a20
--- /dev/null
@@ -0,0 +1,246 @@
+EC05CF2F20AD5120 CBC0D76A2DC35776 F0CB66EE5E957D99 684CEE3E20E40F71
+DB7F084B8CD5D17E 2D8FB01943B5B665 4D944255FF18DF17 FEFDCED047AC0BB7
+B6BD643975F77490 479FB404B3901C37 EAD64C45769B77B6 5BAF437C1905059B
+D52EF67DAAE4081B F63EA79A6BFFEEFD 2B0988A2D564DD47 BBCC710E13838AC9
+07AFCCDC7A36DAA3 08144AE2DE131C96 98329FF102DED179 27351DD0853A71C1
+D3C1F43813DD037A A77BD15A80DC2096 36F1C731178304F2 EC2DB62883FC45CC
+2EA85C5A27C9F2CB 30FABC1474BED318 F834125C71D59085 4B0965A7896F6B4E
+F03BC5835BB95700 C004AF78F3CFD5BD 1772F645B11B5E84 B176E81522B22900
+23BA386B439025DE 5A72A0F3F20E1A56 3F0BED91A94256C6 19E2B213C5D5EBC1
+6EB1C387F0EBFE5D 1A0F5AD70A5463D5 F2D8F184A371132F 68F3DC9BB11C9461
+339B282000B0419D E44C5005D57FA44A 4EB22FF11A9A3B09 8350C9D85C5646C2
+68ACB6752F958AE3 E3DA87B7CC59280C 750EDAE217444192 0A20F9D90CF84FE4
+78FB376A610C0190 61ACA014C6761883 8953F40A61AC32EF 9CB7B295E69322DA
+4F79BB85305CE1F5 1077703182500A42 C3233C723C0DF971 1A45BCB740387A23
+CC3BD1FB3B9895CC 204403C58DCC85B7 66E6E0F402D43356 C8BA56F863C6435B
+16311A6AAF6BF0D7 3EE556BED9C75F1D 2D43CEC3D2ED4984 B29E67130CE1E5F4
+11DA8764C9A49BC9 5D4EB84854737CA9 3AD32DF3AC4BFABD B1F41B87D203BEA7
+9BC00C7FC54129FE F210A54382D8A78A 271014E2023E1231 DDD8707058C5F206
+9B759ED79CA57DC3 FD379F390F18EF0D 3CDC3D5805C82FFD D6DF50138987DB5D
+31308C42CF7F32BE AE2D07B082D37517 6E951DF6365DCF84 BD52E0463015BCF9
+B6EDDEF826EAEE37 B2B7F6AC11D7A1FA 0734D564CB0D956F D0F3F9EC308A36D3
+0D22548EBC600826 BADE1CD54C5D1BD6 D9BEFA6DC0EC74B5 B3AC37E148B58434
+8619C359D051231E 31A33102C7D42084 CB4ABB62801E1C20 C90D8B75D0108C1C
+140B8D44858A8E07 38AFC66F089B5E90 1B37EED4C13D887D 0FF2395798849AD0
+AB82D0889BB04C56 368A0764131CB221 5BC5597DFA88EC5B 6C587A09077C5066
+89DA0F822D14ED17 E00C971BED9ADD8E 520CCFC555ECA1A8 37A08341EFBCD9D5
+D4743EAFE3C257BB F7DD431EA36F01CB 0B7425AF69F38830 3A2A0C98FF9709E0
+89759932A5DF5DCA 6D56723F9A889CB3 FE801F324E4DB625 6AFBF9873E699E2B
+D3269648D8ECDFDD E1613293ECFA266C D001C40722A86F58 C873358F4AA62CC4
+DE38D1EC76252664 29114491A5F6FF41 EEE4652B3B163752 30D7B5443642342D
+BAD17CDABC2EC4ED C672F009BCB0CB28 0DBC9315496719FA 8401869C81BBA095
+BBB0FFB79225BC5F 4C604E06DB2BA1F0 556046A28C26B301 22027DE2ACDA5C09
+73B38C72E5474199 81D8C0B298E98F46 5C3DA44F9EB0627A 4EBD5143833614F6
+30DA7113AAB1DC8B DCB3CAFBA1173030 22DAB7C28F5DA20E C9A12AF892EFA73C
+AE6D04D277933D41 F881D58F06B53A9D 728CF34A0D9DBA7D C0830CB9C202FE0F
+91C459B6F588D570 7D1833E1BAAA81BD 6F778250BC449B06 5F769971830A600D
+ECA2068ACE817A0B F75AFACAC1C07F33 A8A662618C1C5D2D 6C91CC6D8975BFA4
+35887F083DC3E28A 97B5F37977820B1C 64E36B44774AFF8C ECF493E9D9C4E757
+ADCA0408E88AA160 D95ACC51ABE9A5A5 6CC9010F1447BFAF 1DE4FC110D0D364F
+4A2C946E08D72C10 7A7F705CC12A3FC2 D0468B58C08CDFE6 B1BD37778F39506B
+45C8975CF0D88549 3EA44580A13CEFC5 74A4C708ED7BAE60 F3473F26A13C3002
+4BFFB4CC469301EE CF422C7D8DFF7B6A 4CA964BF31FF8080 9DB11F097406783D
+298F0BE8B00DBC25 68010411EF5A7742 0947B63E69DF2611 E13CE3EA79E8C49F
+FA2835FBEADB33BE 2F499FD04CEC72B4 008E9672B1233336 105BE3B90D8F886D
+5A7104F9CFA02522 1B993DA498FC7322 2812AA0B2C979EF0 9D6D2AE396290B52
+85C97491379DFE92 F19B8055120FE664 9B61BBEAB81F78C0 8FAF0534E70B8D5B
+445DDDC7730AD683 8494A66645901937 CE98692FA21B0B69 8DF860CFDAE516D8
+594193F9CD4BD7FE 6A67BFE46DC7D8D5 E07CBBD6F303C18B 42BB783DD98BD04D
+6D4D87A9E63B49CA D882E0A5090450B6 CDD3F1DA88F7AC34 CB858F51D08042E2
+C790A17AAFBF2272 E5BDA5533DC9B1FF ADA0A6E1A8019997 F814394BFC82306D
+F795D9A5E14533DE 17830E5DCF2206A7 4FE969DF9B92C76A C8276E92E06030EE
+5851892FCC1B867A 459E101D4AC1C4A6 2A097E2CF3BC125C E134774EA8F87BF3
+181F0D15200148EC 69E9A03E75785609 078C8E652957921B D32129B18B944CBC
+8F81306B61CB5338 978412699FC498ED 9B405E34F36B5898 265E1484BD72CCBB
+62B5B6B81D2368E0 6F8379123B43D5F9 AB57D50FFFB816CE C6942AEC9A8E68A1
+E5236366049EE7AF 840ED6AF2E422A77 E7D868D38F636F7F 2C9D8BFC323F8C35
+3F2CF09F10A5F0C3 C3C4BB34CE797640 0F49E985609AD994 C241F6E072AF1FC4
+EC1AD0D8CD197A8C 27F3E9A0D74A6FF7 511A20CFB030DB95 784857C17B7DA4CF
+82D92C5F9AB92AB4 E71B7515F3A7C5D8 A2EDDE281C30834E 843BD36866976EE5
+6D4A5AA80F6A4AC0 3E48D5BEC86F98CA 6D48BFA649D2EFC9 04F9411D2D8D1722
+1488F2F27FA0CBAA 98ADCA7B372692FF AB5C326C37939B52 B44B7347F09DE1FD
+CB8B521E4BC2DAA3 90F8CE0B0BF14F41 5B1FAF3D7A22B70B 91F89BD2FC1CBC88
+F476B4CCF003CA11 E7F435349EB98FBA 059F8E5403EEBAD5 CD5380356010824B
+4009C54B1C750350 A88BAEEB82A01E3F 093157B434337385 1C1CC17F28E810D3
+220B2415A9A44092 F1424B2B842F4938 24CC48148A836132 047B6F6B37F2399D
+87CD2E0112C752A8 78F1923303040987 3AB8243C96EC0439 C1C8221AF5FB2C75
+8AAF83F0C0CA7DA2 FF36D3CE3232A13A 6CF5B73E0F256FBD D1198191AF68D86D
+3BE5D3EFFDCAC0F5 A82D07C3CAE9CCA1 ADE3E79535D1C702 A65B2A9CEC9F1644
+4A483BFB09E858BE 8EB9A9CF1D6D9B5B A8E31775B4AE868D 77314754124E4CD7
+CC2A8A2FC03B8F69 CE5A4A7D962F967C F276CFB99ECBA695 AF50D9F06C026E8F
+C2FF826BEE4AD762 8156C8E78A3B5368 AD421E624C5B30FD E76075499DD11FC6
+CD14E29A25D0E9C1 00E7A1DA917DD90C 2B855EB2904FA816 343F44DC03D5844C
+13916181975854DA B75CD1173DC55360 F789E9777FFBEFE2 588E7495568A9FC5
+42DEA478964C1B06 B92083C2E1601677 A93CFFE00AD541DF 6BBA279CD1DC7912
+448997303AF1BD71 73963010E58C35B4 5054E8DB28C119A8 62D2740B67A35787
+644DB2DB2EB2E151 A0217FBF47C25EEE 66CE0FA8480C536B 36BD3528127BE3D0
+D109723D22E9BE7E D05F94EA31E0D17D AC6679543417E2BB 8D33B3B684BE88EA
+A6F617142FC8077C B78485691BBADE66 5932A57EA82D3B2B E371F60830284DF0
+DDA56DD929DE9FD1 E2C7D9F2B42784D3 FAD345E7FB996C0B 9B590E8754BFD485
+A1E140A2299BBC93 B8262881F018B88E FBC26146D79DCE45 FE8A8E66A88596B1
+279467ED16D4EEBA 7A141C2A89D80AA6 566DA3D512C9C08D 4EA7539F0032C1B1
+6AD87EF57BEF0B5A D33CB589EEFB9442 5C5CD494F8337C45 D3ED37E9A100A3D9
+C8E4449DA61A83C7 A633B422745F726A F580E7DA6F63E724 3705DFE0757DA1B1
+2B7B7DAD0CBB8C15 FB15C0B0DD645D3B 0AA89A11738CE85E 3CF48AA5D74AA78A
+0D056B4D0D2D7411 D0BA6F04494DD525 EC5918CC106D8B44 0760F1FCDCA828A4
+527DD9EE9BB99B94 919896AEF265FC28 3F6F414FC1411CA2 4B4793BD47EF0AD8
+8C5FF5EA4403A95A 2966FD801E5B2328 5050DDC3310AD383 7E3D2C03BA7BE437
+9DFE50F822C23CF8 3B1F1E786F4913FD 76A9B857FFB1DF01 6166A0577AC99CAE
+EBE75DDEE09B0A6C CA94924D9684CEAE F1B1CD6771B627EA 8E0B6D2BA107B09D
+D568F218AA453301 BFEBE6E8D99BF610 F6080072D068A815 3351DA8F1C094FF7
+23AF0BE51AFD0B6C 04FD2DC52634B5BD 22211B965374FDE9 75AF11D07AE00040
+24C6842B7AF6E314 68D953C1D54B693C 5ACB72CABB210626 967F8D17A22A0BE9
+D64ABFC21DC125D4 13F44AFC8104961E 23468BB65C24C509 10C4426852492DA0
+639EEFB4DF2D40B6 5DC3D1012A6DCF84 E0BB5B9582B94684 E0E5CE6063457CA0
+1F4E61426DBCBCD6 41EC0F9C1811E56E D9B758E328F07BBD 4E12FCC5C2382CBC
+189FAE8EC49F9B0A 5694CD9DD4121C9F 2F35602A419AB963 BB97AAC580F615CD
+B02613804D2BB48A 825707E1B81087FD 06A601DE6CAD86E2 A9A066EDE483CD16
+3CB88D83922CFCB7 FEC0D783608C7B6A F06902FAF3CAAFC2 20461A11A6E84220
+7F28436FC3BE57F8 B432418616B79A53 10890EAE143C7AC9 28C73BD783BBE910
+B75E790E87AD055A F45A7226C1AEB159 5CFB964883565714 036097625A65C834
+BD51A1C5AAA589AA 87822077477AD5B6 327919F1A1D02653 591188845959C387
+955D3C042382143E 15C78005AD512BC6 89B9882C471BDF84 7E0E1215B688A04A
+7132E878B9850D9E 6E2A01BF59EF865A DA260F6D594671E4 FA9AAC5C2F1DEF8A
+4896A7C6E1D4F469 67D42C87AF8E6F50 C78564CCDBABD804 B88F4BF0583767A0
+D9F14D9A7BD2B8D8 DF83A776426F6504 11500AA8E3900314 D084C397D698CC53
+CA2E61B17145B0A7 9770995A42870BA9 40FA5D4D4CAFDA7D D17CA23134B4A9BD
+EB2CE339FE0954EB 0FF35736319C4547 6ADADFBC08CBC3BA 460501480665F1F6
+B47CA2EDD0752E25 A42586039B20ADC9 7AC6E6CF3F2E2567 94978FC90CE21EDD
+48AD92E897ABDCE7 670484D627DC5411 B724841057D0200A 03251A8C866D0974
+6588B125748C6DE5 2287545C8D29BE30 4D3F1B2CF3FF9F29 22EB51FA0A6084A0
+BC8D118AAE7F7267 9130BF04CA84C8E8 86736B37E32E6BD1 723D3C292ECE66CD
+443C87EA88E95FDF A067A0A25CBE24C4 557BF3271C2544CC A6871FA072B129FC
+6DA02570520A3205 27B5C415A69DAE83 C210BF00E486092F 927D27163166FC36
+D0DB68B378E998C2 BCEFC5A51B51CBC0 5137C852EEC1E579 E09F09C6661F4135
+9C98A85A92E5DD87 C5683626D403B5F8 4455EB981E347B64 682B34F7701270C0
+152C18BFC152113A 3AE77CC11DE05136 24104F9FD70321D2 A40CE0515C0E2907
+A106831B00AA641C A0FBFA6C5476ED06 2F231B638541611D 2429A1C6C2254FC5
+71C8A3E6B4DC35D4 E12FA01257E9C821 5FC9F7838023579B 8939EB1EC332CD20
+D51077D1819C518C E48C34F52F51A69A E484AD9C24D506CB 87AA0F70CD7CF7F8
+09BE6565931040F2 D08DEE84A4EE7FAC 72205C0AF6CC598F 2E4F6BF1CF77BABA
+A618DCC73ABBAB38 F6ECD3A74BA3B699 DAEE6DFD0E4CF7E9 76A964520E9074E1
+5735A8524BBF8111 3D9E5F4BE0EB94BA 495AA9F7476C8329 F80BCBAE5150F962
+1209A44ED3CC2EFD EAD0255443062D2F 7ED3AA9EB07D65AE 9A50CAF90F2FA159
+E94E3F3556812D0C 906CBD81A1954343 2AEF48D3F7456BD8 2FF746B7CED6A79F
+4BE5C609C7916408 3103F1CCE81110BF 0D60D94A51594D18 F63950B974F3EBDB
+6651CF99D3D66334 9457B4DF2912DE6D 76776AAF92AD63F4 E0BC6D5BC7001A70
+FE74F2B499897635 4DA9A0CAEAFF6303 51FBDE5F6210401F EB927B76D23CD7C2
+A352BD1CE3542A16 89AF1B5B7057AD54 D4F825A39CA752F3 0F8553F08EC389EC
+7CA7370D2627CEDF B13E3DC34FDA3959 97531C68AC790387 AF31E070366DB7B1
+80D6C8A19C6A260D 184DA6D363600955 366FAB2BED82E708 3163D59F192A3E17
+EEF3807ED37ADAFA 3689AD9BC135B2E6 035251CE69BDC3FB E1BE9FCA9A92CC90
+80974FE9ABFD1567 79F348AB0CA45412 702390950C3DB6AF 1010B908CA9B9E5C
+9071D78D25C6ADC8 444720629EDA9343 402A8F49B9842E28 A8BD3705D9391DE9
+D49E79C25FE862B0 13B9C938652008E2 DBF17D074A36E179 548F29CECE6EF258
+3FFBC966350487AC B51444730689C528 637CA9F93319E7AC 65B7B1E65E628703
+0E9E0D5E6CAC906D 9857E5BB4510CA0F 51870CC9FC77C3D7 8328A034907F60E4
+9EA189A0968138A9 EF662461DD9D7857 DCA980467F72EEFC E40B4666B7C49D8D
+0B33BCD12573C4B7 B1C3EDD69D744A05 01092851FFB38A9A 743F2969BFCBA15A
+9D1EBA3B3BB6F09F 1C8C5241202EFAD8 4CE1D986E7FC1A72 78864D85387187DC
+1E03AB02A62591BB C96FD6237F9C3B80 FF1DC915FEDFCCAC 3A7D47D647977574
+5151B3F90CFB02B8 942E1DB62626C2BD 5378209A8E969EDE 1A3C18BF4240C151
+C44A36A657C86CF3 2AB91B8D3A95A86E FCAD66BAC6E6E145 2AC1E9EAF0C2B230
+26CE6FDF84BBC823 C9CE1307DC362B9D 572B6DE0BAFDDCC3 69EC554E4CBD845F
+0E19C3ADBE04E05A 4E71C3482EA8FC7A 724BDDD0DD985E61 D2417B5E15595049
+B2E609D517426D88 205B5CC6045BC66C 5FAFE7F733CC970F CEDEE3C0083AAAF3
+419ADBB5BDAD84FA B94B426440BC4581 F1CA5636DD97EB10 0AEB019735590A09
+C663B1C45F82405C FDE78C9DC8CA4DEB E8556B0493311AE7 483C4B2586AE08AD
+7D22964523C25D6F F44BC10358352A2E 9C082A0C64ECA890 69190C8FEB41A4DB
+9004C620521C1D15 80D80E2697EC79CC 8E5D6AA218F164E7 773A6961393680B4
+1E1C1E55CEAB7DB8 83184DA962211FDE 031F5F6C92C5E2D1 928ECC2503F9BD95
+BCCAA522EC86BB45 5DA887017439131F 81A36245EF6A556B C9D26A74D9303B3A
+9F9EA9E76380F1ED 778083DB19DF0635 020DFEB596E22A1F BDB03DE20B35A75D
+5236D998E6C465CB 42D6B54A34BB7238 DC004FAF4D6BCC31 0C091485755D238C
+CFD226276BFCA0CC 786BBD51F92979C3 FD0CB104F293DD1C A5BF80082BDA375E
+2ABE3F564B00BD81 088B487D6654F41F B021953133A0A6CE 24A7E1A495C0E62F
+54C81D4266E7A04B C9F2F7FA882634EB FBBE3BDB0CEA10AB 5B11B977FFF3B6A1
+DA666F882E8ABE3F B6F287939773F22E 9C5D2ABF86AFA050 69C2DA14EED66002
+A0EAF9488D8DCBE0 6D69E473F40CBBBB 400E31D9CA1C336C 7B57EED8BD9BAADF
+F1C700E36738A735 3C219B3C9B546E70 CCA04C738D177CE0 0F8A4BF9BD31291E
+667CE709331034A4 21A382621448E259 4529730CD390C855 C12C95CB1ECA32C9
+1D61458456A67C8E CA1C05E0E72CC416 523231047F5FAD87 EB37B2725B7C09BE
+D82713845B72CF84 F31EF02034D16E26 B6514261654F655C 3812FE9E5D558B93
+0D4469324918E6F2 A5369FD8CDD7B912 F11DBFD709D4AAA4 9DDC184B78E05B44
+120050860205A924 A81DF62BE4192866 52EE0206060E4F73 C0E554CF54FFBC00
+98D5A91975F0E3DF 3C2850C3874F130C 5081E26003AFB01F B2D8C3F6BC49FF5C
+B5F328D38502F729 6245C8A3887776ED 3EE0AF3F74A38E15 83CEE6FB1B582685
+3DFE010276331068 28E1720F954DDA16 145D3B2F522F8438 11A1120C81C3EAAE
+EC879222F01EFA2A 4036C9092D02EB46 43AFF3D429A16B66 43446551EBB7CEEA
+C528325517A55416 A1F246890FB9CFF1 8B8E8CFD513AA6CA E709EAB8177BF3AB
+CF606B300F38158C 07C46955A65E641F 17246235CEBFB628 A1468E3A85999DD8
+BA1487834034D043 692D2BD411E8D3FF 0218256DE4CF41F4 6689B18F8C759491
+82023558DC3AEA20 98FAD949DA4703F8 6A552B2E10F7D524 AD6263EF7F85488F
+F8AFE718000F7DEB 7A29C0170D436CF8 4161202283069FBA A37F345ABF310D59
+7B49620FCEC633A3 505ADF966EE08F01 8A5AA8E00C1235E7 728F1B832B89081E
+28B7A7C4B52447CF 4B2BA9FB225C4BA9 817E81077690D6DA 73408FC38A829125
+5D5D079A719EB784 0BD0DCA02EABE360 DEC3CEBF3CE1A6BB A36B284EE7C6B711
+3BC75EE5C4C77F15 98E5D2A4942C1813 BB8FC1951A13AF68 70FB8A61977D541C
+8F1D4ED649046AF7 9347E164B6A275F8 4508D5553B264178 FA957A9F0B306597
+EC2D98C3466C5EB6 56F65AB1983F749F A189E5D68C83A4D3 394E9D963625F3DD
+671D2D6B54297DC5 94807E82C4B40873 85A0E365BB61EF36 15F14B48F2833BAA
+0BA54BD584227714 E9E48AB4236F45EF A2A7116F76A43001 298455B5AB1322C9
+33F37A6AE31E23A7 97763497827C1043 A9851AC9F743A3B9 8695D0C128BF5D41
+B8BF1190773A6F2E 23B970F0D182AAA2 3262F4D5013B7A13 DAD6CE1F7A926E53
+C66F6639C809BA58 9A775C7987347BB3 1ED9AB9C31485EE6 257DA4F258146661
+F459411BC43B4B37 B11F6E3CB879D23F 81D3CC4C49262353 92F2BC8659DDD9E7
+DABCB3478E52397F F17351DFCC8BAB9A E1F13187F5F78A6C 20F5F1722D9977AC
+08BD6BB4300172A5 15624E3299FC1F39 1699B9B094EDD863 CEFCD59C07C5475C
+B765D859EE747165 95C6EB1E6E7C56D2 4A3748DE4D72C9E7 53A055014EBF40BA
+7AE26E2DD5A246AB 0DE413295A0D23D5 1D28EED96A89138C 3D54FA40A5017D93
+3D88775FD5CFA5DD AD7EBD70B314C80A 922D7E50F9AEECC9 71E032059964142B
+F32AACD86D6917AA 36B6AB906C7289B1 A09DA9DE85453527 16F5CC3643A480F6
+6A1FDEDC4AA05827 E3C545D1F1F8E52D BE4843A5811DE115 981CEDDAA0B30E39
+CADC31EDD9C70334 030E52495121B8CA 75ACF119AF3890DC BA370C4E4FB062C4
+69A8117561CD7364 66B6380C14E51697 90A656DA6FB67A15 97ADF28268B20954
+6A7082B0574F1D42 9931CC240BEE4181 E063171FE8D628D8 D12F2AE792D79294
+66E797461CBA57FA 6D9F467D4C41518B A8C443F01FB12512 511F8A5414168F6C
+09CF3DEE4BE1FAB9 0120CCFC434567E1 BFE0782C87C18C28 8100BB364160A150
+E91EA92BB7CC6105 F9DAB46D7BACC1DD 527799E2A0D01EA2 EF4EF4C9ACA86ADB
+51A38DFC6E471E15 DD0DA2396D0728BD E3634517D6D51E98 523968C919C827CB
+B1D395192B1BACF6 69A94D6D4918A3EF 667B716376974871 DE3F8908B1D36FB5
+3E11E232DE64639A A0569EBB95EEFC64 E9580F278D3CAD1D C0EC908BDBAE21FF
+B36B726F779D8797 2EEFDEBA77CFEC02 7A9E94E8A8AD3B1E 1F5A84B257961F4E
+8F8658B407C0A3CB 37B5193986F6A5CB 2BBD6401A51FBE44 E797142CCBBE4128
+B3ED764B1A57283C 41D48A93AB21E048 571680D7180076FC 11FCCB4ADF936F66
+3A9D903F5C3D3040 00577B22223E00FE D51B394D7A24CE89 BE322C8A7E03F87A
+73DAD8830855D920 22E87686EAF4A8EE 5057A616961F8B25 9453C3BA659ED679
+E0E0A5AD7C955DC5 D995220DD76BA72F A231E01B8CA81466 E7402616E3C982A0
+537D79B6981F3BB0 54BDD4A442C4082F D9D2184F4F5F5F55 B39908A2EDA5659F
+7C0FC8D53A942985 226CD312BEB50E60 EDBEF228F2CE117B 33DC4BB9B84A0E27
+02CE5D685D5FB5EF F2933EDFBCD8847E 133F56E0D28F5555 5E76FD2C955361B8
+BE0EEF9EC29652F1 9CF9B26CA8D5A52E E221ED9886C21793 61FF720C425D3CAD
+67033CD0FE3AE487 C9FC511D36005789 D4D534C2A6BADBC4 4F255F9551F60B11
+118378651784C9FA 8BBA5CE29984DE1D C63A45CC2F4B09AB 43165F543A855086
+4FA9BD1EE1A6D449 C1BAE4F710884124 C96272918313C081 EE4F2D1FAA439C46
+7A42D223BB347A40 D6F2BA07E845BBD0 6564D48DAC6BFBC5 7BFAD2C5E4C6034A
+C973B66B611950F3 EB9137535F5A6AF8 37A32B18C026C3EC 9DC09BFA31A2013E
+7124DAA8E512BCC9 B03BD5CBFACE8434 423246BE9DA38B23 4E4FBAC11C0C5312
+546E08D671C6C057 5EFF6CCA57A9C5A7 70FEB7CC3E6507DF FDAD7F455B47DA69
+B5CF09BD8DFEA121 D197F5B753385B9D F41411995D8946BC 10F61B1A09846756
+B0CF5D7B0F54A93C 71C95E2BA1BD8249 64570D50EAFB26C1 55E10CF2A2CDCAC2
+E5680049094ED132 AA031BD9A0600CDD 7290634255510C06 7D9D95F4728B9E0F
+4280C1A74598F101 AB04EA73768CC77E 7578B23BD084142B 8E86B00542AD939C
+2609EEAF247E381E B8DFB7A8F840014F 4F110AFBF12C9126 6ECB2645C596FF5B
+D1B71E603C491CA4 61CF4C2ADBB3F52E AA53B3BC9C374AC8 2FE978DACF9B38A7
+A890890F52A86D11 074411C04E1F56CD 5D24BF3783A7945F 51DFBDD57DBD158E
+74CEAD4ED159F85E 34773AB2A75F725E 054335C1577BE821 870E0C964A88D3BB
+65DCA668F58C725F E0DCC6C63575A3D2 291F1DF6740CF886 E27FB054749E5775
+4AA1D68C216EB27A F5007844F369765D EDC952D76D335F1D 590F15A2D5CD831D
+06C3C49BEA0209CA E698E283177D2197 3439F29DD6445627 825499FEDA114BA1
+032D2A9B56BE300F EBCF6AEC1A623C5C 5EA5C01694992F8C A9531D325EEC11D9
+A65011A00D34C5B5 2C3173739BAD9D4E EFF54403DB9EA948 5AD94658EB672B23
+CF4DF3985BD93522 0B5FEFE1337F3548 73AC388EAF502F00 DC21FEB144E23B6F
+0CEAEAA76BC802F1 0FB2C47CC72843DB AF0E0E0A8EB713C0 D074BE86C8DB0A9D
+EE4A02CA85FD5525 E3F91F583168FD8C 6E190593A87B4A05 FA6A8B273609C84A
+697B99683548132A 6B5337A8DF678F0A 9ACD66092A7A3409 E25D7D68FA14DAB7
+A02D329CC1A8D187 33ADFE0824EB71E0 47F982E5905C1332 68F4694A137A9BF3
+9F3A2CAD1255F21C 0AAA6F77D0F77513 09A2335D21206978 5EC2AEB90CEDA800
+F4212529703375A2 075464E3405945EA D04C70CE6CC6D876 7F5C20D66A884097
+4D35FA9BB16D4E50 F6C489F05F793ED0 1F1DBC0A444594C8 686DBDF13A7AE771
+14B49C944C56E8C2 BBCC1351A070F412 83B1A2923CFC0DC8 AE860D7E31480CF0
+48670CBE89CD29A2 FA63034A407BF8CE 9F6D54B4CC42B71B 9E4C528300210118
+26C4BF97C6189AD5 91583F5F21C0A719 D140D57B3B1B97BC C6C658A4FBEF2874
+3F4AACDBE9505D37 3A617A5DBC385CE4 999A9B867DDB9EDA D0BB20950EA2A19E
+83C1D42C1AC6DC19 EAB97D8951254585 ABE5A699CBB55542 0FCE39444BB44E5D
+D6D495BE60EED01F 1FEF88C1F804D349 EFD82F102F9EE150 E101A6F9670AAFCA
+243FEE3B1075FB0C 76CC03B59C7103E7
index 95d9a3725bbcf1d8c3919cd8cbc486688b55bdf4..081af29282304d68aaccadf329e9593a6f1c8ec1 100644 (file)
 
 #define MIN(a, b) ((a) < (b) ? (a) : (b))
 
-/* The buffer size should be at least one larger than expected data
-   size. This function expects to read up to EOF without exhausting
-   the buffer, and makes the test fail if the file is too large. */
-static size_t
-read_hex_file (const char *name, size_t size, uint8_t *out)
+static const struct tstring *
+read_hex_file (const char *name, size_t max_size)
 {
   char input_buf[1000];
   FILE *input = open_srcdir_file (name);
   size_t done;
+  struct tstring *s;
   struct base16_decode_ctx ctx;
   base16_decode_init (&ctx);
 
-  for (done = 0; size > 0;)
+  /* This function expects to read up to EOF without exhausting the
+     buffer, and fails if the file is too large. */
+  s = tstring_alloc (max_size + 1);
+
+  for (done = 0;;)
     {
-      size_t got = fread (input_buf, 1, MIN (size, sizeof (input_buf)), input);
-      size_t decoded_length;
+      size_t left = s->length - done;
+      size_t got = fread (input_buf, 1, MIN (left, sizeof (input_buf)), input);
+      size_t i;
+
       if (!got)
        {
          if (ferror (input))
@@ -66,11 +70,28 @@ read_hex_file (const char *name, size_t size, uint8_t *out)
            }
          fclose (input);
          ASSERT (base16_decode_final (&ctx));
-         return done;
+         s->length = done;
+         return s;
        }
 
-      ASSERT (base16_decode_update (&ctx, &decoded_length, out, got, input_buf));
-      out += decoded_length; done += decoded_length; size -= decoded_length;
+      /* Use base16_decode_single, to make handling of excess input
+        straight-forward. */
+      for (i = 0; i < got; i++)
+       {
+         int res = base16_decode_single (&ctx, s->data + done, input_buf[i]);
+         if (res < 0)
+           {
+             fprintf (stderr, "hex decoding %s failed\n", name);
+             FAIL ();
+           }
+         done += res;
+         if (done == s->length)
+           {
+             fprintf (stderr, "hex file %s exceeds maximum size %ld\n",
+                      name, (long) s->length);
+             FAIL ();
+           }
+       }
     }
   fprintf (stderr, "file %s larger than expected\n", name);
   FAIL ();
@@ -331,20 +352,19 @@ slh_dsa_shake_128f = {
 static void
 test_slh_dsa (const struct slh_dsa_alg *alg,
              const struct tstring *pub, const struct tstring *priv,
-             const struct tstring *msg, const char *sig_file)
+             const struct tstring *msg, const struct tstring *ref)
 {
   uint8_t *sig = xalloc (alg->signature_size);
-  uint8_t *ref = xalloc (alg->signature_size + 1);
   ASSERT (pub->length == alg->key_size);
   ASSERT (priv->length == alg->key_size);
-  ASSERT (read_hex_file (sig_file, alg->signature_size + 1, ref) == alg->signature_size);
+  ASSERT (ref->length == alg->signature_size);
 
   alg->sign (pub->data, priv->data, msg->length, msg->data, sig);
-  if (! MEMEQ (alg->signature_size, sig, ref))
+  if (! MEMEQ (alg->signature_size, sig, ref->data))
     {
       size_t i;
       for (i = 0; i < alg->signature_size; i++)
-       if (sig[i] != ref[i])
+       if (sig[i] != ref->data[i])
          break;
 
       fprintf (stderr, "failed %s sign, first diff at %zd\n", alg->name, i);
@@ -358,7 +378,6 @@ test_slh_dsa (const struct slh_dsa_alg *alg,
   ASSERT (!alg->verify (pub->data, msg->length, msg->data, sig));
 
   free (sig);
-  free (ref);
 }
 
 void
@@ -593,7 +612,7 @@ test_main (void)
                SHEX ("D81C4D8D734FCBFB EADE3D3F8A039FAA"
                      "2A2C9957E835AD55 B22E75BF57BB556A"
                      "C8"),
-               "slh-dsa-shake-128s.ref");
+               read_hex_file ("slh-dsa-shake-128s.ref", SLH_DSA_SHAKE_128S_SIGNATURE_SIZE));
 
   /* Test vector from
      https://github.com/smuellerDD/leancrypto/blob/master/slh-dsa/tests/sphincs_tester_vectors_shake_128f.h */
@@ -605,5 +624,19 @@ test_main (void)
                SHEX ("D81C4D8D734FCBFB EADE3D3F8A039FAA"
                      "2A2C9957E835AD55 B22E75BF57BB556A"
                      "C8"),
-               "slh-dsa-shake-128f.ref");
+               read_hex_file ("slh-dsa-shake-128f.ref", SLH_DSA_SHAKE_128F_SIGNATURE_SIZE));
+
+  /* From
+     https://raw.githubusercontent.com/usnistgov/ACVP-Server/refs/heads/master/gen-val/json-files/SLH-DSA-sigGen-FIPS205/internalProjection.json: */
+  test_slh_dsa (&slh_dsa_shake_128f, /* tcId 64 */
+               SHEX ("C9A7900E931AFBA2B52A5BC55A2DC4D12DDC9BF8E0B2ED0BDE83E674F1ECE7AA"),
+               SHEX ("0E87FF20256E0E499A53B52DF91467C01F0431C07250AFE93DE814117B5D66D3"),
+               read_hex_file ("slh-dsa-shake-128f-tc64.msg", 2280),
+               read_hex_file ("slh-dsa-shake-128f-tc64.sig", SLH_DSA_SHAKE_128F_SIGNATURE_SIZE));
+
+  test_slh_dsa (&slh_dsa_shake_128s, /* tcId 215 */
+               SHEX ("DD286FF370CB50BC1B23894AA3F7025A534A788E697B94942AB845EFB753A30B"),
+               SHEX ("4738AC60C561FFBE15AB96EFFA1A09291A79332E1CA3C38B2FEF40ACA7CFE285"),
+               read_hex_file ("slh-dsa-shake-128s-tc215.msg", 5377),
+               read_hex_file ("slh-dsa-shake-128s-tc215.sig", SLH_DSA_SHAKE_128S_SIGNATURE_SIZE));
 }