Commit 8b11e73e authored by OptimismBot's avatar OptimismBot Committed by GitHub

Merge pull request #5989 from ethereum-optimism/aj/deterministic-test

op-batcher: Fix intermittency in TestChannelBuilder_PendingFrames_TotalFrames
parents b317ddec 0c1c291f
...@@ -8,14 +8,12 @@ import ( ...@@ -8,14 +8,12 @@ import (
"math/big" "math/big"
"math/rand" "math/rand"
"testing" "testing"
"time"
"github.com/ethereum-optimism/optimism/op-batcher/compressor" "github.com/ethereum-optimism/optimism/op-batcher/compressor"
"github.com/ethereum-optimism/optimism/op-node/eth" "github.com/ethereum-optimism/optimism/op-node/eth"
"github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup"
"github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/derive"
dtest "github.com/ethereum-optimism/optimism/op-node/rollup/derive/test" dtest "github.com/ethereum-optimism/optimism/op-node/rollup/derive/test"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/trie" "github.com/ethereum/go-ethereum/trie"
...@@ -686,7 +684,7 @@ func TestFramePublished(t *testing.T) { ...@@ -686,7 +684,7 @@ func TestFramePublished(t *testing.T) {
func TestChannelBuilder_PendingFrames_TotalFrames(t *testing.T) { func TestChannelBuilder_PendingFrames_TotalFrames(t *testing.T) {
const tnf = 8 const tnf = 8
rng := rand.New(rand.NewSource(time.Now().UnixNano())) rng := rand.New(rand.NewSource(94572314))
require := require.New(t) require := require.New(t)
cfg := defaultTestChannelConfig cfg := defaultTestChannelConfig
cfg.CompressorConfig.TargetFrameSize = 1000 cfg.CompressorConfig.TargetFrameSize = 1000
...@@ -729,7 +727,7 @@ func TestChannelBuilder_PendingFrames_TotalFrames(t *testing.T) { ...@@ -729,7 +727,7 @@ func TestChannelBuilder_PendingFrames_TotalFrames(t *testing.T) {
func TestChannelBuilder_InputBytes(t *testing.T) { func TestChannelBuilder_InputBytes(t *testing.T) {
require := require.New(t) require := require.New(t)
rng := rand.New(rand.NewSource(time.Now().UnixNano())) rng := rand.New(rand.NewSource(4982432))
cb, _ := defaultChannelBuilderSetup(t) cb, _ := defaultChannelBuilderSetup(t)
require.Zero(cb.InputBytes()) require.Zero(cb.InputBytes())
...@@ -747,7 +745,7 @@ func TestChannelBuilder_InputBytes(t *testing.T) { ...@@ -747,7 +745,7 @@ func TestChannelBuilder_InputBytes(t *testing.T) {
func TestChannelBuilder_OutputBytes(t *testing.T) { func TestChannelBuilder_OutputBytes(t *testing.T) {
require := require.New(t) require := require.New(t)
rng := rand.New(rand.NewSource(time.Now().UnixNano())) rng := rand.New(rand.NewSource(9860372))
cfg := defaultTestChannelConfig cfg := defaultTestChannelConfig
cfg.CompressorConfig.TargetFrameSize = 1000 cfg.CompressorConfig.TargetFrameSize = 1000
cfg.MaxFrameSize = 1000 cfg.MaxFrameSize = 1000
......
...@@ -2,16 +2,16 @@ package testutils ...@@ -2,16 +2,16 @@ package testutils
import ( import (
"crypto/ecdsa" "crypto/ecdsa"
"fmt"
"math/big" "math/big"
"math/rand" "math/rand"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/trie"
"github.com/ethereum-optimism/optimism/op-node/eth" "github.com/ethereum-optimism/optimism/op-node/eth"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/trie"
) )
func RandomBool(rng *rand.Rand) bool { func RandomBool(rng *rand.Rand) bool {
...@@ -102,10 +102,14 @@ func NextRandomL2Ref(rng *rand.Rand, l2BlockTime uint64, parent eth.L2BlockRef, ...@@ -102,10 +102,14 @@ func NextRandomL2Ref(rng *rand.Rand, l2BlockTime uint64, parent eth.L2BlockRef,
} }
} }
// InsecureRandomKey returns a random private key from a limited set of keys.
// Output is deterministic when the supplied rng generates the same random sequence.
func InsecureRandomKey(rng *rand.Rand) *ecdsa.PrivateKey { func InsecureRandomKey(rng *rand.Rand) *ecdsa.PrivateKey {
key, err := ecdsa.GenerateKey(crypto.S256(), rng) idx := rng.Intn(len(randomEcdsaKeys))
key, err := crypto.ToECDSA(common.Hex2Bytes(randomEcdsaKeys[idx]))
if err != nil { if err != nil {
panic(err) // Should never happen because the list of keys is hard coded and known to be valid.
panic(fmt.Errorf("invalid pre-generated ecdsa key at index %v: %w", idx, err))
} }
return key return key
} }
......
package testutils
// randomEcdsaKeys provides a fixed set of ECDSA keys, encoded as hex.
// This avoids the need to use ecdsa.GenerateKey in tests which is
// non-deterministic even if the supplied RNG has a fixed seed.
var randomEcdsaKeys = []string{
"F7EBE63D0BFF8A86A6F4B8767FAFDEC11706D62307D3B43FF020988013F5FA7C",
"0BDFDD6367CD6FC0FFEA535FBA0E9970970869635A09DBF9AC48AF11DD09F19E",
"6C71BFD03FEC0A3CF4CF6E880986890DCDEB726970328A722D3029FE5B751818",
"43CD7E7BBF28011A89E39CBC4F0BEC0E20642F055BF7150827F44593AA10917F",
"C2B7A8E07E655EDE4FFBA3BBA7D0AB5F07CC1B7956ACEF14D4A6538A79C91B67",
"0641B4AD396E9892041E4A9DFA3926798A5544A48EECD5253CBC52C965590C6B",
"6142461F0B68AAF3C2867F8F3C30381DC83A88073A47EA62FD2C51D566A32DAB",
"94E9D3B09425AA916A80AB01F0F80A1246F1BECF94562E7FFE9E3028E58EBB2C",
"C52FB595133CDAEB4EE02DDB7AD9D52332857FD0E47C2FB465629B47EB966FDD",
"711D1720A733A8AE0943EA9B52FD6AFBB8D371D6D4CE77A49F980C047836280D",
"7C12625DF7D1BF61EA7D2F7BC07B44A1BC5EA2AF723990A978E7D4C0DB48F640",
"01C538A77E804E05777688C9E0A2A0CD9BA9D70C20CF883B3F817688B6061078",
"F1DD2504F7DB7D1DF556B2E3E4CAB89245C6B1A09DFE05C9D68B330570845BF8",
"6D87E94406EAA259F34A85EA1AF89276B99D8C9FFD24943B888466818151B3E7",
"CDB7DE820E856C12CA142E84DC73887C3B8EBEE84680BE61DB5C57878E26F4E8",
"2ABBFDB79BC5D9E17155A278D892C1A8FF51153FF5C5F8515923463162AF77F9",
"5DF8AF85FB8FB19CA9956B8F9903B61521EA5ADB23B0253C171C2CA90B2C93E4",
"5C0A5EB30E5D33C06BE14AA40A7E4C88D6390A7E5F81169E654ED0C4C599160D",
"47B6EDB176A0190B36DCF74CC9B16B5FE9566795EDDFC72913A0D384F3805B50",
"B1063D7C5F694AEFB9EE0C0744117619CE1837B911B33C839E458367B83D203F",
"8B18265C427431CBE298D7F0AE03B678AFF9AF219136B3435635320A0F706787",
"83DBFF9C3D0230F92AD6BE9DE2998BF0D61CB8BA54F607D54C5DB6052E238CE4",
"73ADBC50EA8DC08767237EA0CB585848825EEFE7E59DCCE2CF37221279FDB5B0",
"4D4A5271A2262C908ADB4A8AB66EF64B4F725B885D6639B8D358F15F94C8F76B",
"5B3EEAB923B1D6F4CFB9F922149FD554A91DDF0E6B9840DFA28DF2FC0128FBA9",
"7A6D00ED6122665D35A971E16B797663D39F5F64B2C46BD5A356EEF909B92E50",
"A4170002F72888680F83843BD7145867B5FE91B60FF3465953F61462A3D7918A",
"65EB70B98CA2C87C1348C30438AED45030B3A30E7B24C8149F5DFC69731D50C8",
"D6FDEB85C6BB6C9E6571489B90919E38214598B8B98F8879C7BE3ACFEC3B7474",
"6D2F73A8E88C1E8E3AE8CA0ECB9E7B4E47E37849F57A0228F609C62CA3A7A0AD",
"021941FEA8FF3BD9B41BB174B9CC060D1CEEC2D732DCDC245AA55D203542D334",
"B17BBA64AAA90C405D09383F16EAF520E41530530793FBA0831D6B5907D4D1FC",
"97150E580F86EF006267F337D606AAE8D8CEA9DB22DA06671B41767F48324916",
"9193D03D8FC7B055A08CFE061458EF68ABCDBD43A839E66C2764817BE47ECBC2",
"40875341310CFF8E4B87AB5DCE5D54258B496E9047DD963655DD72DAB150F0A0",
"302D0E40BC7A8C27BFCC7FFBE8C273610D4E20EC3D1C94EC1CE4183D71C477EF",
"412276F8AD6EE65977077E8DDFD7A29480D7F35C4425395E5010949E481FAD0C",
"4CB697B0FF2A687D3B47B37C6BFBB55E6668661A94FB85ED3F7A460692AD7D51",
"9C19ABB6E323AAE1D78F5BC1C02BA8118DF12828A3D35021B2360C54F04DD2AE",
"60A33279EB94EEF3738DF85F32FA8171A9ACFE439D7B160D6FA4703A2DFC910A",
"98FC88C1FCAAFED47CBB28FC264B200DB4C1D16805B0029600DD564FC0FF5B26",
"F8411262E805A5E9411FBA2710B38B7626B47F714FA5785C1A7651D68C9DC949",
"D019BDB5D5CAB4BE16E6B4089E7D8A1DE581ADFDD0C1E891E56BF5196D724C51",
"7E20AF19BC4CD9D33E5D4BA2787F23887974A772ADD0160A3775AEB87C42272F",
"3A4340389F56D571FEC51550061AB3BFB0FEBB82381629065015F51F9F54823B",
"63BE49E64AEA2D6D633837E9B76FF00670555FDD4C95F331C1F5C3A2438FD33B",
"5F97C5247247EFE2F7B1AD45527FE1901147B5CE03F83584F14A9EF70911D8DA",
"5B548B3E6FD61CB83ECBBBFAFF703F11C2BECB3BC21762BC5B94B5B07B10BF61",
"B5CC13CB251C984185AA48973A74D0446D13401FEF8BDDF584FC9F513EA4DDF2",
"4C5B41EDD900025C18B8941284739F3DE819F843BAF4D55A235F98E5A11B08DC",
"FC60717E7CDEAA932A5F6BADC98C8C5B71B28F7059655BCA2A6C2E6F03ECEC1B",
"236D63D4F1009CE68ADAE4A56236F2952DCA60FD2F84EDCDB3476D6AAC727534",
"1DAD9226FBCF8AF6A1CF3B12E96D3502F23A6A098C4B52717422A73ADC68BF52",
"450BE690B74D48EC625EE8BC1318496134360F0BF307E9FC4EC9F96F96678A73",
"771C0BF2C3CECA5B71048292B540F6E50AAEA4DC68720E48F36130962863315B",
"7F32D1CAE1947A6D4D13DD084FDB2FB9602A700D5E8324986C0E4CD69023D0F6",
"92604E998EEDBC97BF7EE018F08A1A9BCAD5A1AE59E7AF9F420638BAADA6A1DE",
"D8659E0A877D1A1222BEB334189ED9ADE2EF4147681BC5122B612C41C2B82BE8",
"B241A53168DE2C9439E515D268D17C155FB98CF2A51685F43C693C763E7AAEC5",
"7A333D5F62AE5A23BB20279872B41773476BC301EC3A1A2734992E7726F5B240",
"ABABF87715EFEDE95D5E32D20779C7BFD7937B7FFC86FF3ADFD6159AC3ED28E0",
"DED68681153477B7B164F546713C1986C543ADFD15584D3B845F15A1585F4222",
"0CD571DBF6F9B08CBA1E1C9FED3A7C19D8DD3E7AAC686CFD2BD1852A6A2384A8",
"ED125EECD99D0F571CBCB1BD863E1414D2EE874B508F0C716F4F21A3CC887970",
"F1820687FD0FD35D24F4FFA8021C3A1ED1C852537984344D1DAB906CA7BF28F9",
"0FC7573EF4335201491AD109C0BF76A2697DF2B42F6CEDBB426271409D68837A",
"7461E82F4789FA142125625C91FB48A0EFC335296848D5AA6414838C321AE3A3",
"A53CC25F57FD06A40BBBCF19338073FA710A16569360E8C8325AD48430CC03A1",
"EBBBE484567B9D0C2E983698A001295E0E70FAA1FEA54BD18DDE33CD9699B7A6",
"68F5A2760B0FD41D5AC09D7BB53E7101612185294946F41C78FD3FB2D0E174B1",
"6043C1603B84B9F1DD2EBCBADABD44CE6CFE1E1B0FFA4DE1284D07A831148300",
"B1AFA94D1D0A1A237D697EFD040A282FFB38D3E92A73C79409FA6A401276041C",
"F1A48773CD7A2B7533A68797DA95E51BA6F43C978B9E4586A7899434D1EBDCBA",
"AA4B152D2F04C7C7A5D1A79D61024827F4039E20EDC9FA110767ADABFF978DA9",
"E04F274F9804FEF275CB0912E6D6BCB38860C36C7FDA0B2E0CBA19731A335645",
"D2138C0AD10FE6056E5BDC0A574C2D7B4C364DC7974D8B95BEE7A6ADBEFF97AE",
"B7D4DFE7864C480909BEA67567AD16105F47ED380F49B7369E8F49AF82B2D97B",
"A16A961624D8276E6762717DFC60D241E4EC17CED38AA0C153BA5185D148D44C",
"14FF2D8496E70420C41694E6C2AE6338B156D2353276B6771CFACA82826349C6",
"81EE2D183FE943EBF7469D89A7B11007ED2FA16D8D77845231985FEB334FD815",
"54F15922C03A3846942D7AF31A324D2530FC399FE9095B139D42D9574819D02C",
"9E81C3646F4910B947ECC806106A42C474146BC99DBCCC0D95E89A8890B3B7E5",
"F4F6C9D2D623084BE7BCF67748317994094DC1B4D3B3A9414DE6C2B0BBE0AFD1",
"9406F2406A9E9D5604222D83FDF2093A56C7EC4AD551A659A89F289C304CE512",
"5D3E0D73164A6A049FE2D252F4DEF3F53281CE6F7DA79899F4743DC910DCAD63",
"369DDB2037EDBD58B8715C43F09CA27B8CFC2BDD116DD5886CEDF95F5F8000D3",
"FD19E6B9EDDB9E4A475093387248B9406060AC310B00A64194848A3C39889DE3",
"95A50F7A80FF405BC41569362A7A36AF2B698A61F9D4492C49FCC574E87EEDFF",
"395C5C8E059A72D8ADD9CBF826BD4C141DA35121901F49921C143979E891F6F6",
"5B9A259452ACB8DA7F259D40D4B3BCE86745475DD7719FB95718AC6212ECC9BA",
"815F2CF416E3CC0E8C13AED1B820329DA6447A7D3ABBF02B7B73BDA84A64DDDD",
"EE80CB0235DBA13CC5004CC84B7A5F5E024EF8FC8D5A214044E00AC7538DAD5E",
"6F03213207FE760E76FC4A10D645219450CCEB0B9DEF436C0D781602CB78216F",
"28396654A6485CFD24C1B24C064FCFD9112A9987F11E4DD083ED8E9515D52158",
"38ABA55E53A598B99C2A75CB4070E8D7BDCD8824D3B22F88ED5D8E77BF3EB394",
"037AB8D51AB113E830EA2B54BB5F08976042E7E16073C95A70E01C9E4EB71C3F",
"863FE9140C268FB8704E93585F06DE1F698F7CAECD4BEBB63FC2C548EA50806A",
"BB38BC998D282C7C72858E7A09A1E0959F154530931A6F06FBBDA2682E6626A6",
"DCDD530BAA5F621390F89F285FE435EE62E8FDE16F54C07F01BFB3A49FC8CF8F",
"970E15CCF62CADC07956C47591B5AD0E46B36CDDDF8B48B13C790DBA320E051E",
"283C3003901E68475FAE4462BBF6962F7FBBE1E57AF1D8822627427937633945",
"7C597D42724CE1124D9FEA5097291328047C9B1738B214FF941AF76200C2F205",
"E5653CD7D921BEDD4796E745F27B8AD4667ECBA6A7DC8B61FB99E3CBBF38FE97",
"BCF1581A9469A1A160713306FBFF586DB9916C13AAE37BCFBA917ED42E76596F",
"737D4D499EFF5C259651A7D5526D428E3541554AC79E8A3A0423BD86403A700A",
"48C3D752EF7E626F7A6B46BDF76FB32286D5A77F262A9C19639752CBF3C54541",
"39A73369603C288AF3292980F4A4E44E14A1CC30D01E8494C84F2940F55C30E5",
"99BAC09CB6F2873B55D9CE39B080D1A366D8178975AF46D5317ACCC885E68BE4",
"5ACFD7A0C6EC698594F77229E7BED5A7634BC7619C48360DA39E07CA51140F37",
"2D02B99FF15DD477B2D7D4F0C6EAF5E9460DB7357C4BBA7A0B209BC3B153CEF3",
"72A2057FD13053AAFD58BB38F97CC43FD2E82A9F9755CDB9483B694965819E1B",
"29F5D56714E400C90E9A22E9ACEBA537372E94EDA781B6BA6DEF76A859E81B94",
"E5D072A3F974678AE5FE136AFFC83297C69FE39391A6EDE964CCEB6B93D3F6CA",
"385AF978B0242070868197EBBD31BDC836E6549E0FB7B732B257C4E24F9D390E",
"CD3CEA5A1F7D7CCB41B2B74034F1E9392FA9A505BAF50EB6F9E3ED465A10C4EA",
"84F87008BEEBC57807E356504EA277E14DE2B72A2D46023BD7DCF84024CB1764",
"A505140F0F39D0E78E83D33A909652509DE926ADEB10A3FD78FCF4C928FCCE31",
"D1A82E3FB3AFEE13D51ECD714AB772EA6B99FA9023EF77DD954C76AB18F7F31B",
"A10AFFFE3E30FBA4635949FC4FD130F245098E1755C959E71C9F8543205AAA8F",
"769418024428F88B908FDA548BD1E0F854688B3404D2F8D763E7D046C1FBABA7",
"1BA9C1273DA658AD15128CC4CBB086BC8873EEE6A97EC4619CDB61D69C0F9AEC",
"1C6E03F9455D0BAC2E20E8E90E18F39342996A82AF22076ABBA6F6D4D54A4B39",
"E572F2B40A6E27928B24D207CDEC0A4CE4FB2C9A08851ABB065C43809129574C",
"ADE292CF2DB470676E47172D4F7B5E8EE58E9C20674C66A7130FB1565375BF24",
"9286534087406CD05D4B66838FCF42BA822811A10B8E6FA62332408BCB4E2405",
"FC94D2D606E2C1AFD570331E1AB0768C83CADA56DFB36773D2C6BDE8D2D8098B",
"6FBFC916CE87D4BCA9C5E3239DFDF7E60D82291CBF2AB5AF8BE1709DD65EB76F",
"C84C76D32F0F333C45279CD57EA67AF2F76D22E38BDCC1CBBF1F373A1E40BE20",
"6B11C8922D39B1EA68063E5E448733545E0EF662D00679309828E5603F847913",
"5CD5BF865C3064613AF9235CF4FFB9101BA5550CFFFB10884F04A538770076B3",
"3BA10D363602A783DFA0C1F105104D1874DD2D57CA88DB5E8CC3ABE8906EB1D8",
"B6FBD99A400E5A45C3DDBDFA12BB9271FAC597AA2CB5E4E0D737B62AF39096D1",
"88A5BCFAFC1B11E1978B0B078447D3D50BB3AF5CBDDCA17E4757520FF88E840E",
"E7453A921B6C60CA8074D32CDCB1647E5B3CE317CF8F4B6E8802508F4B33D229",
"E80A182C16435B4DDF7B3BA8BEAD55B289047B51BE4F7F7C716F7DC065ECAA26",
"0462611D385976172B62668FBB38CC0A44E3D3284CCE40811B5618D084BC6A2C",
"8CB1FF6BB722DA5C972891A6BAA9B0DC7DA683B6DEDDB3FFAD725A1E39EC40DB",
"C7A643A6D016FBCB2B73395E0C7D1CD8B3A46DCF3126AF0EDEAF0C328352C2D0",
"C496F9369694B9F701C6BCC4F79B0C762382597DEEA6601407CBE90496FCAB88",
"746FA853C93D64D2A400E1B6CE9D6FBDAEE42D6FC7258BED43A845B56B13798C",
"549AE93302C93DB39A49E3E26D3D54D9110D1FC395C32FCA4752EE9B91380E86",
"627D71BCE9EDD736B9BFFA447D2C91160DC20BA7FC51B196593B85728F6F1514",
"DFCD02D023CA8EB31163E7BBD2109127D030562EACA83DC338B7541A8B900BA1",
"1CE783AD8BE539A5A496D07FD4385432CC9E64F998C1BF49354D913C877D7A2A",
"4343D369EFB9A93A2F1B8921C0189AF13B09EE3EAD47334EB7B180286B2600A5",
"B378CB2C07C1EE8347FF48A72CEF6CDB02991B13B03022A4C79E234C41D55362",
"7196FD3CEEFBF7D27987C46A5E505A4B2D6D727A5E75ECE1DCE5AFBF57EC3FA2",
"08443D73CEAE3CDE366FF8C60147CC3665BEC51F650CCDFE5200BA4D34F1856C",
"BCCAC9A7BE203B932272C3A6DEED0F050828DD71FB28F910710633D5CC0D2219",
"A906D8DC5F3D180A89043C325A4564CE90FFFF663E049B15E41A6BE0344D2495",
"49CC445D3E65487895BB5FAB3911F966C3AB9848E79218C68457B27752FDE996",
"4DFF24000189853ED1B5E1029F4FF32476761CE87D894E54210C292B695F7F7C",
"FADFBD4CA32323078A2D08326ED44ED552FEA6797309C3917242C66B2DC67623",
"3985F582BD4D9F5FD0BD5B9A6AF40AD54101EB123F2B0D890506172AA64860F6",
"FB9D9E9FE077A32DBA90F4C67B9FB5B86429EF38D888F98CA1D6629B5D33B9CE",
"49A35745A33C763E1549B7A96E1F3CC048ECDE3A6C40B6EA3DE28CA9186E650A",
"6F94A5F2D5582DDA6D53A50175B89B1E8D2428354B62BA68305D4F2E45EDD68F",
"E536766BF7AD9EBA15F32835BC3BF4F6D1F797118C04198F10825C32608B2814",
"BA31E56E4EA6F42835C428330EC80B3BDCF5BBCE8C416B9030FA8AE41295DA95",
"D8B9F8D8FDE665A753AF50BF0735A8A4B5C0C5BE9A9BAFA8AA0B22D29AE7B72A",
"3D5BACB0C8ED3134107308A306A49121FEDEB7A635C8DC651903F1AEE4A1158B",
"D23297149DF461E03E6207435AF0004D3AAC963D6D187D3BF3624123C931B623",
"A8B78B5692171C2B536000B532F030153D83A38C8EBB6B4484B17E9E627EAFB0",
"37332B403A80A4FC4864683CA8708B3D1DD36C4D394E1A1078FFD1DF9D636351",
"F692BA5EE316147B3B18ED08F2FC0B01A20E1BE425D392524707764D86C8F2BA",
"14BD0A86DE18B572EE84ECC1E54AF6A9A3AAD0D484696F596D039DEC5F7DC179",
"8D1CB2DB49AFB6E61C5A9CBDED3753F5FBA1B2200B4D21BCEE3E7E94FACAB446",
"DE1E54CC412829774A1D4403FBE0C19BD7F53A9155BAAFEABD610214399FAA3D",
"00536EC8CF2D113E3D57E07EF16F344D317B82DD67F85CBCB46E6837F29D5479",
"95DA92F17E520EE6AC612120988FF39A61ABEB451A8CF79B0C7CDE6C330A179D",
"82CEC646DE823AB846202D4A67BC44A6D20428D57D48C505ECFF6956931A6862",
"8C9B9F20C0879799C0E5D20478352DC77C3AE351A64910CFC42D7DF5BBFC6F22",
"9C1833D834D3FBFCA74B6B2F8162419200CBEFE54355FBFB27DE9F057303C31C",
"229F63BDFA06E92634653D05B3D2CB14159A1F27685B07D4610EF673CC10C495",
"C355BCAA366BE8008157FEC2FB728EEB845766E3A988296A11203978C321EDD5",
"CB295F155383A73F818FBDC8AC7B56EDFE1BCD8A6525389E5FB3130F47B85F9F",
"E165286A1FDF1A45742C4E974C661C2D8FBD33677E4B19F5E33BD08A3EE3FE98",
"AC4491AFDC3475A0FECA53C9657637542C0F5FDA31C27CFAD9CE5EC980AC2ED3",
"E3BD3E2869CBA1519820C793F85A11C31FEAB44D0997C4358613D5C6D1C3B3EA",
"46D2853D9221E656F9D70BCF7548666973E348D002067ACEAE31DEFC73ED1ECA",
"B1DA6F8F1FCE5DD003075CAD8817F48DE14708A985C3826ED136BCC9B5C31D86",
"69D9D45B18B12D797F7C7BA54957F7C474B389BEF2485E15B596BA209FE22EB6",
"8E550DD07D09C37C45BF8B15138AEE1A94D311C081268B28926CB7728D56DE36",
"2910A8E246B99B85810AADC30E73631280B016E1FF9AFFDD105A0A95B3E21AC3",
"6940A96CE9887C7F4EE6859776D2C3532D7D61E3682E485B06502696618397E1",
"F9D83E3C7A241A8308A68BE9EA9B2A071E17DF210AD4CE31BD36A2B9932E0B4E",
"9C5C46194E7677043807A56205CCA5072449D01796AF5A0A15B85081B9AA5680",
"EAD07068491F2EE95E22FD2900BD4F4A80A5BB36D0E29207E0625279FADF4603",
"7742861FEE2D3BFACDAD9C005DECBD27C40E3CE97B4567F1A2E8A5657D463F9E",
"2F3BBDC4B6935AD78C62772D6A20FDE00DD09BF5FF21260B1D7727F4E93839FD",
"EE687D00E304566DC7D205B86589999667CF0B1571662D51E842D77CE2801DD2",
"EA056F3FCA5D12804B07AB698732ACE3BC1781555CF115FD206F35EC106EC74F",
"C69223122F76BB4469F5372AC2083AF96F1CCBCFCD9DA3A8EE8D55E6354459E6",
"0E26C7CF156BFB1A29E33AC72D90C87E27BA2A4CAB4DF799E7E3E994FE136C62",
"3ABB47B092D3DC1FEDCDCF4C9EF9CB2E24B8583FB0D03CF9E458FE2C4D1E0FB8",
"69C7F537818B283AA9D6E3CEAD46F9D62F6312011D5903C6C5F8143ABCD76D9B",
"C44A4DCD748D0A68CC3C937A1D22608461929CCA20127E7220BA454BC8257F29",
"7D1F8FCE1827281856F3E4AC65E7B782E5367C0B791B4E7637B0DF4F2D5536CF",
"FF50D0E16F8D741A14374198E1C7C43AC1CFAFEEBD47182D75816FB43C78B638",
"40AF9FD56B4BD1E183E4969B62490CAF1D69E194BDA87B1F853548DF767B1DD9",
"8090074898D4347439B67E8DB29B360B529B19CAAED50B0C67E740D058D53F09",
"878915A7BD6FCC3DA500A07D8F46EB3F507B8DD18ACAE0E8689D8B41BB4A6A04",
"C7AE62A323A19BDAA703348D05B6C9D7C02DCBB9B4755F0741A36E1FB2AB10BE",
"DE226031D209B16E3D660DD788C7A733C554D1C782889D5DE3157215D2E27C92",
"F4AC929521A90191CE20F20AFCEF621625B797CF4FC736B1F52BB6A389C02E01",
"E171C3DC8B6D9B2712D9BA0E99EC4C868C81A6FA4F00E3159D2111B6CF12154D",
"59D31C98BA41C644F37C9302842C5612ABFACAB4A500BEB9E5E2A85A4C0A4317",
"B1C7DEE1088A1FDAB63D34FD3D177194A899B842C0F3B80C50A7AF8CAFBF2AB0",
"04CEA47A7B06009D049C2951E65ED38A070058556669ECB3B4817D3894BECD62",
"2C625E295F0C7C7E0E0E72C24F39F9DD0EFF5EAF129107D915C118366B857A17",
"64E944747D846E3F89B4AF56E05417E4A95F02DB7FEC80F75C7A4175D36D611C",
"A0F784E9B750817D473A7F93044B0FF1E7B0D486A6056ACA8ADF3B5A4E14A5FC",
"E964CCCD06E74B99C46B04ACB87FE9ACCA88CE0B39A271A08EA7DD5D2E55EDC5",
"6F75C3E8C28AEAB0083DF8F433BF0526DEC2EC81CA467364871E7C0D04DA620C",
"E4C1E340937A6042CCB49C785992873536B48C129A5E8A657EBDF5FD801867AD",
"180920C331795026F8F553AB91510EF397B2F2FA535DA59A183E219B3ADC1BD4",
"8C2E9B5C13CE648578ACD896725DF4C3EE9D71EE177D6F5692BF0B28E7B74BCB",
"3C8193737C14BC6B8010C57B3C5668FF974111D2C47E14214C1D78799A6D5F08",
"537EE6A60218C5B9F531AFDE53E1295020946FF9D4F307E8468266A52A77B708",
"3ECE87A40CBE4CD39B2D61DE351B8109C8C5E725F835172A28CD330C81516D58",
"6749AC3C6064FF47170DADE9B47FF3F314DFB736930B0FA335B5FB703C4D07E4",
"7F6D75E42AB7660ED26D5322CDBB81FD20C749AB97BFF76E27E9C65B8D9F1203",
"36601BDCBC69FD942CB4B607CF8D8B15D0FAA75A8E5EF082C6256D4BC25EC1F9",
"B3EC65E18C22F13763FDDE371EA0516EFA26811517FF5FBF1D7818FFE961A63D",
"70DA8461117012469F0EEC99C582B5D4695C7688BC29F1F02B827552E3D1C5C7",
"573A9C544FA0B98411882EA83BCDB96F3A45DEFF5044DC9B0C0CBA0968DB5322",
"841743DA8A324E2E2F4F9C20A46E567D78371A23B418D2E230D7ED615A3F3DF5",
"07B9421D64CC0F50CD84C893530F9AEB6CE4A62A089F25A8F9B7E63EC91545D6",
"ACB70EA773D58D9D921D1D6EA4028C81E52FD1272F27EBE467F1AC7FCBE8F46C",
"23BCD64562A68240DA5F5C6D05B63A16386646A77440C0E95752CE0C02556B2F",
"B8CE9C6390ED92937ECEF9A25832E8F19759B6EDAE50762E32350A2A55AA1D51",
"2F5D0F2C00376AD376E01086F4BBC18615C310DCE1A2CF7888992A05961B86D8",
"3954842B9980464F5252BD1CAC3EAD472BE4F61E0C1323F508E70727958548C2",
"8F9CA7BFDAA215DC0A9259D4DD00E23A4A2754D011EEAB9A735D05B995DCC9C0",
"D8D144DCC1D3EA305F291EAF5CE8FE743A44F7914B48432FE3C9D83634CEAA3A",
"D540DD9C2C64E37389732D9E0DF27FFCFFC19CBFA063BC81C60A8F61A085D8F6",
"4FC0F79F0BC88F7D2DC343D0BCF44B9CC28160076AFC20046B772C18FFF9C6A9",
"0280AFA272D5BAF85CEF1DEC843A43148F999C1D3890665632595B9A12DD2A3C",
"2FB62283BBA017968EFE56B19D3F38AD93C8A1A66C52E637A68D43491F9996E3",
"C1FB737A9D3471CAF3C5321D0E67B7C806DE50E80E4AD06D7FF2D65862255031",
"E80B891A6ACD6ADC50F357212CE88A5FA97305000093910051352CBF7DF2670C",
"5D498072838894AD9869886ECEC2E7975812E4A8ACC5227E5F2600AEF69F43B7",
"C72BCB0B3C8F029A650B76D2A8954CBF6B564E182D2FED859210C502A359C31C",
"5C3D52BAFB1F79C34D107D75E62D53F5AFF8A90812DCECAC3D10FB2D6F0275FD",
"A37796739DCAA72816126A8287E838DBDF15085F72DEE87468541158115BEBD5",
"6AA4E68A60D223B58370A4B783E53B15330A473F5460C40AC7067B9C989DDAFA",
"5B2ACE179FF11C0EC2A207A0A69ACE4733181EC54A320DA954B4D1BC3F439B0D",
"8393334F09DDE66CE8EB6F916254A58E39182F8E9E8EF94862F64234683D2B09",
"EFF6873C89163F1266413F3FCA5158870EE06BBB209C40669FD17F84AFA80760",
"1C840F556C0603015CC9E2E292B7A03B07B76FBB683D0B3164FF1FA3150945B0",
"FEB55E7614C473FF36FA160C016F8EF879AAC47C4A01F3670D4FF83E0E11C23E",
"CA2DD837E3810F4DE53FD494FEC41FA38758418C8A516D52B78211A62F831EC0",
"EC836EF46086EEE6F54D78B28D3FADBE8E44B879490AEB5350A50A41389985F4",
"238588E78D14605B717001981B2F043D3BDD6A457EFF130589909EA0E1DDB574",
"CA50B9DCAA10442BE6DA957435BD48A19D3DC04F2C6D0C24EB122BE25A0911DD",
"D320B4144BD49C9ADEE0A0B12FC71B15C4DBC11D0CE2C6DD778B53F1CD4D821B",
"A1EF2D0AD905C955E0830167F971BA46E6CFFA01DEAA82A60D15280FD98AC08F",
"865BFCEED0E0067C0565C232A8DC3118DA0643E2240D5125DA4E15EF8E2878EC",
"4B3F7AE014C029BE3737C8B22910614FB6A03458E150F56716B1995D97A9EBA1",
"DAC50DE65EA2BCBCEBF622695FB0A90F2D7FDB843CFF0F26319759B91CE35ED5",
"1AA0309FDFF9C3D98346A5506B20E3DD89C6F170B7A1307A324BE0B7C968BC98",
"25481FBA48C525931503E24B9E5B22833D51BE93044F56B0205DE937B5D9FCFA",
"E063F6311B2408EA435A182E8BEC7BF4376C7E351BCC9C0862794EC97C524F8F",
"1EC5127266ACFD11803736EC306A472C0DA4D82F3C8308B3814FB30F75C8B7FD",
"6EA7D9FBF1924D8E3B759EB104E8BD89111F902E84252461451B46E776C8BB27",
"E65709A0405C0F3E2CEB03675D84CF2FF7BE0D39625418D80C6F2FC2380ACC40",
"4226C27850CE689663CDD2A960B3DD9B16E93F874DD1C205A57F44E71A315A56",
"E7BD2277613352E28C187D3BE47DFED81C48CA67B42FF092B2F7B9A3072A046D",
"DD9279DA39E5FBAD4576FAE6B2031DE2C22D88249FC8429D08CCD9343D090B77",
"04D442ACB11C9C190F80B6D5255DD9696F9EBD8E4840BD72F7184C7F9D5D27F9",
"46849E5138052CC6BF852092358B33D991B06A299EF6595A68FDDD58C85A8135",
"CDC634425F53C9CC8F38C622E54AAF9063246A0D2876A7DB6100AED16E3DED67",
"C526E6CC6A78C42023401913E15335702E1BCEBE9A339E91AD7331F854724863",
"12F07E2B2C6BF56EF108C51D3A6A8FE0932A6633C1B9CFBBC72CA914C1DF18FD",
"B1DD2FF94F28228EC7D00624C7F2C19E33DAFD6AD0876D585BCE0659D39F56A1",
"CD74325613C68DE615840738632A206BAE03DAF259DF983874364F3C2647EC47",
"C32C6E940C7B85FD94EE041D146BE091C4516EC13F18BEB9A0DDA6E0573DFF54",
"B5ED042965184C88A07ADF9C66476E665D3363438BDA360FF57D70CBAC50FBBF",
"A14A6A3F15A513470B0F921E8BB6FA368F349A325F810BBB8C1CEDB5CFF82A2E",
"063848400C27439AD201EFBC3EBBE8809E5EAE0CE24280DCB08D8F8E8D318F43",
"0F865DABD1F7B357662B183B97BF5EAD2B84DB3FA80AF3378384B06C063642F2",
"19FF7F6449EBC0090CA1C1510A88CBADB8851147B5737106EA4F78D921163864",
"866475EF5533719976743A8D757CA79B0167530B6ECF685FD05901690B50CF92",
"320FA14FAFBD06D830C55D0E28986A9F8B38E355148C33850012788825AF07CF",
"D5CD070C8B150AA439E9D49245C7AD4B37C7926DE16A4C74CD7739D627D1ED0E",
"F2C9DA34631DF917EDD287DD070BBBB9D07A0331A2D8523A721123AD6F679570",
"C13ED268585195DB03E3EA508B04E365F89C2906F8D17FC52574B1E269339068",
"764A48125631835AE76C46BC4B131AB25367E8FB45449A68A9ADD547DDF8ABD1",
"FB271BA9634BF4A13A9E453858FBE356E79B12D7C761185AC4774A1F7802CD74",
"EECB8DF61025A521C2288B4632FCBE7675BA85A4A73542F2E9C1740F24CC4FDE",
"EB9B0F71D7D4CA45848658903E4734C5B43EC691FA7AD33B3C56D6DBF2FF1A40",
"EF50BCB1B5EA318888400AF1DA9B3EAFE48CAE883971743EBD4AD07548731F2F",
"36BE3F44428D8144D15E285831B0CA1D36D1CF2C01FC9A7692E59F92E8EA7FB0",
"781352D53AF929827B5D80B2865667F19F122FEC53DF3F1BDC1475ABBC9E6DD8",
"967C45632AD96711EFF99E9977DC9AEE9FE86E1C21A095036E198610E82127E6",
"6F87B4AF8A520476FDC212865B52EB914C0EB178CD356B6590CFB56775FC043A",
"31997B5B82682E390A01032EE0038136983FCCA282007D1AA5B240DA9F605426",
"550730858FDEBF47E2D958AE4E9640558521B555F63E2FE412901EC0075B4685",
"D40C0AD931A9AA21C6A8104890084DE3B1339221AB33586A20D9A42021695F69",
"3F6ADE9AE3394D310E14DEB82D897B3161D0434FE7D4EB1863279F17BC96547B",
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment