deploy: adca2c59c2ad1ed5105cc928b7756c1a3b33dd14

This commit is contained in:
s1fr0 2022-10-12 09:09:49 +00:00
parent c61b28dcc3
commit 8f182d4d93
5 changed files with 460 additions and 453 deletions

View File

@ -542,8 +542,8 @@ proc processInput(rfd: AsyncFD) {.async.} =
echo "failed to mount rln-relay: " & res.error()
else:
echo "your membership index is: ", node.wakuRlnRelay.membershipIndex
echo "your rln identity key is: ", node.wakuRlnRelay.membershipKeyPair.idKey.toHex()
echo "your rln identity commitment key is: ", node.wakuRlnRelay.membershipKeyPair.idCommitment.toHex()
echo "your rln identity key is: ", node.wakuRlnRelay.membershipKeyPair.idKey.inHex()
echo "your rln identity commitment key is: ", node.wakuRlnRelay.membershipKeyPair.idCommitment.inHex()
await chat.readWriteLoop()

View File

@ -56,7 +56,7 @@ procSuite "Waku rln relay":
contentTopic = RlnRelayContentTopic)
# get the root of Merkle tree which is constructed inside the mountRlnRelay proc
let calculatedRoot = node.wakuRlnRelay.rlnInstance.getMerkleRoot().value().toHex
let calculatedRoot = node.wakuRlnRelay.rlnInstance.getMerkleRoot().value().inHex
debug "calculated root by mountRlnRelay", calculatedRoot
# this part checks whether the Merkle tree is constructed correctly inside the mountRlnRelay proc
@ -177,10 +177,10 @@ suite "Waku rln relay":
root2.len == 32
var rootValue1 = cast[ptr array[32, byte]] (root1.`ptr`)
let rootHex1 = rootValue1[].toHex
let rootHex1 = rootValue1[].inHex
var rootValue2 = cast[ptr array[32, byte]] (root2.`ptr`)
let rootHex2 = rootValue2[].toHex
let rootHex2 = rootValue2[].inHex
# the two roots must be identical
check:
@ -195,13 +195,13 @@ suite "Waku rln relay":
var root1 = getMerkleRoot(rlnInstance.value())
check:
root1.isOk
let rootHex1 = root1.value().toHex
let rootHex1 = root1.value().inHex
# read the Merkle Tree root
var root2 = getMerkleRoot(rlnInstance.value())
check:
root2.isOk
let rootHex2 = root2.value().toHex
let rootHex2 = root2.value().inHex
# the two roots must be identical
check:
@ -310,15 +310,15 @@ suite "Waku rln relay":
root3.len == 32
var rootValue1 = cast[ptr array[32, byte]] (root1.`ptr`)
let rootHex1 = rootValue1[].toHex
let rootHex1 = rootValue1[].inHex
debug "The initial root", rootHex1
var rootValue2 = cast[ptr array[32, byte]] (root2.`ptr`)
let rootHex2 = rootValue2[].toHex
let rootHex2 = rootValue2[].inHex
debug "The root after insertion", rootHex2
var rootValue3 = cast[ptr array[32, byte]] (root3.`ptr`)
let rootHex3 = rootValue3[].toHex
let rootHex3 = rootValue3[].inHex
debug "The root after deletion", rootHex3
# the root must change after the insertion
@ -339,7 +339,7 @@ suite "Waku rln relay":
var root1 = rln.getMerkleRoot()
check:
root1.isOk
let rootHex1 = root1.value().toHex()
let rootHex1 = root1.value().inHex()
# generate a key pair
var keypair = rln.membershipKeyGen()
@ -353,7 +353,7 @@ suite "Waku rln relay":
var root2 = rln.getMerkleRoot()
check:
root2.isOk
let rootHex2 = root2.value().toHex()
let rootHex2 = root2.value().inHex()
# delete the first member
@ -366,7 +366,7 @@ suite "Waku rln relay":
var root3 = rln.getMerkleRoot()
check:
root3.isOk
let rootHex3 = root3.value().toHex()
let rootHex3 = root3.value().inHex()
debug "The initial root", rootHex1
@ -405,12 +405,12 @@ suite "Waku rln relay":
when defined(rln) or (not defined(rln) and not defined(rlnzerokit)):
check:
"efb8ac39dc22eaf377fe85b405b99ba78dbc2f3f32494add4501741df946bd1d" ==
outputArr.toHex()
"1dbd46f91d740145dd4a49323f2fbc8da79bb905b485fe77f3ea22dc39acb8ef" ==
outputArr.inHex()
when defined(rlnzerokit):
check:
"4c6ea217404bd5f10e243bac29dc4f1ec36bf4a41caba7b4c8075c54abb3321e" ==
outputArr.toHex()
"1e32b3ab545c07c8b4a7ab1ca4f46bc31e4fdc29ac3b240ef1d54b4017a26e4c" ==
outputArr.inHex()
var
hashOutput = cast[ptr array[32, byte]] (outputBuffer.`ptr`)[]
@ -432,12 +432,12 @@ suite "Waku rln relay":
when defined(rln) or (not defined(rln) and not defined(rlnzerokit)):
check:
"efb8ac39dc22eaf377fe85b405b99ba78dbc2f3f32494add4501741df946bd1d" ==
hash.toHex()
"1dbd46f91d740145dd4a49323f2fbc8da79bb905b485fe77f3ea22dc39acb8ef" ==
hash.inHex()
when defined(rlnzerokit):
check:
"4c6ea217404bd5f10e243bac29dc4f1ec36bf4a41caba7b4c8075c54abb3321e" ==
hash.toHex()
"1e32b3ab545c07c8b4a7ab1ca4f46bc31e4fdc29ac3b240ef1d54b4017a26e4c" ==
hash.inHex()
test "create a list of membership keys and construct a Merkle tree based on the list":
let
@ -568,7 +568,7 @@ suite "Waku rln relay":
# prepare the epoch
var epoch: Epoch
debug "epoch", epochHex = epoch.toHex()
debug "epoch", epochHex = epoch.inHex()
# generate proof
let proofRes = rln.proofGen(data = messageBytes,
@ -620,7 +620,7 @@ suite "Waku rln relay":
# prepare the epoch
var epoch: Epoch
debug "epoch in bytes", epochHex = epoch.toHex()
debug "epoch in bytes", epochHex = epoch.inHex()
let badIndex = 4
@ -684,7 +684,7 @@ suite "Waku rln relay":
# prepare the epoch
var epoch: Epoch
debug "epoch in bytes", epochHex = epoch.toHex()
debug "epoch in bytes", epochHex = epoch.inHex()
# generate proof
let validProofRes = rlnRelay.rlnInstance.proofGen(data = messageBytes,
@ -769,7 +769,7 @@ suite "Waku rln relay":
# prepare the epoch
var epoch: Epoch
debug "epoch in bytes", epochHex = epoch.toHex()
debug "epoch in bytes", epochHex = epoch.inHex()
# generate proof
let validProofRes = rlnRelay.rlnInstance.proofGen(data = messageBytes,

View File

@ -334,16 +334,16 @@ procSuite "Waku-rln-relay":
group.add(keypair.get().idCommitment)
member_is_added = rln.insertMember(keypair.get().idCommitment)
doAssert(member_is_added)
debug "member key", key = keypair.get().idCommitment.toHex
debug "member key", key = keypair.get().idCommitment.inHex
else:
var memberKeypair = rln.membershipKeyGen()
doAssert(memberKeypair.isSome())
group.add(memberKeypair.get().idCommitment)
member_is_added = rln.insertMember(memberKeypair.get().idCommitment)
doAssert(member_is_added)
debug "member key", key = memberKeypair.get().idCommitment.toHex
debug "member key", key = memberKeypair.get().idCommitment.inHex
let expectedRoot = rln.getMerkleRoot().value().toHex
let expectedRoot = rln.getMerkleRoot().value().inHex
debug "expected root ", expectedRoot
# test ------------------------------
@ -354,7 +354,7 @@ procSuite "Waku-rln-relay":
memIndex = index,
pubsubTopic = RlnRelayPubsubTopic,
contentTopic = RlnRelayContentTopic)
let calculatedRoot = node.wakuRlnRelay.rlnInstance.getMerkleRoot().value().toHex
let calculatedRoot = node.wakuRlnRelay.rlnInstance.getMerkleRoot().value().inHex
debug "calculated root ", calculatedRoot
check:
@ -398,8 +398,8 @@ procSuite "Waku-rln-relay":
let
pk1 = keyPair1.get().idCommitment.toUInt256()
pk2 = keyPair2.get().idCommitment.toUInt256()
debug "member key1", key = keyPair1.get().idCommitment.toHex
debug "member key2", key = keyPair2.get().idCommitment.toHex
debug "member key1", key = keyPair1.get().idCommitment.inHex
debug "member key2", key = keyPair2.get().idCommitment.inHex
# add the rln keys to the Merkle tree
let
@ -409,7 +409,7 @@ procSuite "Waku-rln-relay":
doAssert(member_is_added2)
# get the Merkle root
let expectedRoot = rln.getMerkleRoot().value().toHex
let expectedRoot = rln.getMerkleRoot().value().inHex
# prepare a contract sender to interact with it
var contractObj = web3.contractSender(MembershipContract,
@ -443,7 +443,7 @@ procSuite "Waku-rln-relay":
# rln pks are inserted into the rln peer's Merkle tree and the resulting root
# is expected to be the same as the calculatedRoot i.e., the one calculated outside of the mountRlnRelayDynamic proc
let calculatedRoot = node.wakuRlnRelay.rlnInstance.getMerkleRoot().value().toHex
let calculatedRoot = node.wakuRlnRelay.rlnInstance.getMerkleRoot().value().inHex
debug "calculated root ", calculatedRoot=calculatedRoot
debug "expected root ", expectedRoot=expectedRoot

View File

@ -39,420 +39,420 @@ const
when defined(rln):
const
StaticGroupKeys* = @[("e9a4d05b1f539d65c59015a079ee89aabeafbcfc9734342d9559f81601e85417",
"b74d3a5b3200ab1126fbee393496f33da497d4d9a7c56693f44d6155c0c34e13"), (
"27b2bfc25257e53819beaf36ce1070007e04e7aad2e440a1f1fc066f59a61123",
"522ce51aff96041e79a8476f508fb9661f146f189e288f83cb4837517cfc0127"), (
"66392eaae6674267c55fe393d39443ba90317a709d6e8f92a9f3e4abc18eff1d",
"e3dc235e48c1811943fc249fecd0f1415a50ebe839ccefb0bd820a76fb77ba2a"), (
"e7462eebb81405230db8014b052d65fe7b269c3870e40b12cf64668ed6c2d40e",
"727df0965e34144ea637be18208cc81e57e423010b3159c20f0ccff45c42212a"), (
"1ad8528b4c7075013a2d6561a02517b0482c0733dc018ac68774db857deb5004",
"5df3a77577135784da2a9ee78f5026092b7d6bb9e6e95882d6cb172c0cb62208"), (
"aa0ff53bfc50861f871d94df18c3ac0b97f44ceb13436b33490cec5f6ce8e700",
"30421d05b905aeaec0473ba29ace034bf73c406866d7dc23007eb9c34a596827"), (
"0448c0a6ed57b177c4c45de478b58d29f24e7ea842814305443e87188ae24324",
"5ea1a704d8972af5a028367c8e3fb48ee61a603c6ea3a4c9247b0f611a6ab002"), (
"4b6a6edbdd11e69befe3f4a3c976baca320c4bcb188f129b603ebb198f663000",
"451d6185e8ad2c8873f034683b9caca43ea7ceb1b839abd3e01c3f19f3e6bd1e"), (
"c3fba34855b33f025696326d2980ddc3fb47d90459ed6a4488fbb2e4e12ccf2b",
"74674a86144ea866ad8fe633e256783bda4a07b997cb412c53a5eaf4cc7b6a0e"), (
"0c35b8b94a720f1c26d7c6241c9f3ea5332a87cf3730b25ef31b68854c10e405",
"6915df8d8ad19ec17be37c299eed762f9b63e841cd7963e13e8db6890dba082d"), (
"a60b021677da95ba46c8c3411ac77f3e3b06937a8d189517111c045880029909",
"bbfcd22ecb44cec6fd0717cd0f21b26e6e8b2c91e1a6cb5d8610e2f2ad41c90f"), (
"2f4d662e66fbe754b708b87ea3d75a01d2ea4d7bf33c615c2376211dcc3b560f",
"c67f7e622c3293028b9f86571e82c49551eb5fd308a35eb663498cffac208810"), (
"d90a1afa96c14c8d3b989a9cf23d6e8b9907da42724e44a3ac74ae015b6ce22e",
"f0795b1bdd0a907252b6ab047642d97be076a16ea69d463f1a4bec00c817202e"), (
"dfa0764d89c8da10777504e5274f1baccf8b4145deba72b26503474318fb6410",
"9f8aa8e833ea2f13cccfb6d9f2f04fd7be9c9f3019540c05c1986b3bce254e25"), (
"e17490013b6b53a40964ff1067b922d4d73521e32fe394527b39c1bfd4a5e712",
"7a8fa23a0e4b14a36f2818a7d98639f6e4934c028da780a6cc658fbf76e80a26"), (
"7a9328d1075373dddb1b1100e8217ffaa1f9b632911b95a8fdc08870b15a8410",
"94b2ae70c046b94873098c19fe18e7b17db2d31fe6a7eb73fea8168395e3c122"), (
"ce319bb1447da5bf51a88ab3379dbea539b5a431d3c4f131048cf7b05c52161d",
"cdfa264ab8a51bbc9fff5732cf544bb06abba7e807a8c252a5f9ce785c6ff22c"), (
"d3818503bfcbef9ca03fc4472be77cb4936a1720001fc5e54852f769448fd313",
"e72792abd906976c75a5670de514894a720c5293cf74338a9c2987640a949c0b"), (
"4f9b8d118460736eb62602d12d3aed62938d4d4374b8c88704cf40c415c0901e",
"2ecbe4588ade31924a1053fe0204950a0b4924878b312e56b2d0522f92a5f01c"), (
"39b59fd96adaf9633edcc8cef10049cddf5f7df8ac80af8aafa436d62ee7f905",
"b94f7a979df8a95fc2766a9a96308ff39a14daf7b7d6bc48591d2ea4c764bf00"), (
"73cb0d25995d182b361c8237852bafeab8bb951de99f730da2913a239400c322",
"da04e6e4446b6bcd54667b741444d826abbc5b76572d28474dfa94db91144606"), (
"2753423b83bba5bb8b2799bc58125c46fb03ec05e8579d772cdc6e75b0875009",
"ee040010ec20e7293431a3692d06416f71162d176a316b0329a76edf6f3fb30d"), (
"cb73ec9b67355ce6275b51144a0759de28bb9390aab20514ee49a3bd8ce5361b",
"c7c6e2ad3efe1f03b398241bddb67b008dd5e8caf1a17db9c33d2e2388d58e0d"), (
"bdb386d9f3fe5613ede926d80246682a5d32392f7f6c9d818a80d8e7a12e371b",
"21d48c74f422ef72cb9db18799916b3c11d0cb99cec808563e2db22047840902"), (
"60f2fcfe341034449046c1fa330f6aceff737a9837a7d6d3a4885f8afce4a809",
"e4c8f26f9e4127511b5ab21f1705913d7beaa2767cb7d033564e36bd2693370c"), (
"1223d64fb5c44921c1ae66d91543780634c2f7bae7e184e09c4e5447e6d1180b",
"290ab84714fc3534c5ba22b2aa7696ac03ed12c9cf1c409a777bac05475ea406"), (
"b79c593316c42280d316bb7f3b43c7a5f5e29786d1ca6c0424463470eefe2b2f",
"f4e44ac9574c4d32ab403e71dd00554eee0d8e34d04611b66ab2e59c49bff025"), (
"e6548f669ebe655cb6600432e1af14c43da7286e3620289b51cc947517db9c14",
"ace261e3964a1dcb389a693f52104018cd475e6856ae37fe4892df9482954902"), (
"81be54409c9364f4842209e0f79b190afd9df017cc9790e11196d4bf5108f100",
"d986b22e422703e065f12b6fd608813028ff913d4ffeb54b19e6537456391b23"), (
"940ff0d3b4549d1baf7ad900cf6aedde02833b777e39c411e6efe7bcdd2ef305",
"d672bb8a6e75b47fdbb365de0516f3fa827b287c9666e64d1b6768e2c8949412"), (
"b4fe300aa1c8c836b3cc4c167df86d08fb7213200b8d9f7ba7963170e6dc8c0a",
"5f7db6a9867f3f5c9fd1955c02cf96056d1225be950cd432818f8f1c16152020"), (
"2c34a2bdb3738cb78270207dcae40ae47178bf4216bd2044ba124ec49240522a",
"8c490c78d7d735ab32493510cc2ec9c3742d3f47e46cfd754859e91271673e15"), (
"fc03857a3ff92d17d40bf9bb9b99e01e85fe4c698450147dc74cde60b2e9fa2d",
"c0a22acdababbc42bba5bc0245a2ef9f2c74b215663440aed37c8e0bd7e00809"), (
"a267a96a35c63b03788e90bb9a440da9ac832b0be02537b6f0ecc928ea989223",
"636ceacda5bce999ca303b7df32e9352af10083c6db6ed93c8a221efc385172d"), (
"ce4e15a2c1667a9dac4c4732de6c91f8c523c449f8c9be6b895644460717a209",
"d55c6523f40b36d2519b30292873bd469aeda6dbdbafe7c5fd405438dcc6bd12"), (
"4c617cdea4e3cb008c396c59b701375409304d84cfa17fe9d6d91a15fa412306",
"a6dc21a9c35418a39c69f2d8e9df738db0b36fecc44eddf364846b84c5362819"), (
"8c33aa2b3d94f9b11cc62ed1a304b92be370384ebbbf67c886dcd6ce544cc806",
"7caca2b1ab8c70b58ba36794a988fd6ec50c2a04dd09d7cd28e67ca1f1401d2c"), (
"1b6fc8f4007e6cdcf89a496cf0e711b0a3bbdbbae66830450a9744f5c802a228",
"c3b79478bd32feb99a0c92001efb97953efdad8c2338ed2ac14a313592c12418"), (
"0c6837e83ee0f1b1e5fe31bdf0960aefa2162ef7de7c0c886df930839bd4db06",
"8b2667b5151ab13f0f87fb014cd3ebb7ab1e92a528f00ebd91b514ea61b8f52b"), (
"8da38060963597c34544d8b10432a2e34d8eada7d1479f4fa5e96dca32250c27",
"7bf525115a8e6f772feb6d4db0f2a6b0d4233e0ff85e180c3249e18f0d08f42e"), (
"50b0c6d85f6a9d11fc52f1fc9e43b778380bdf936ddfd293940c77e79bc8340d",
"bbb9e297de81ef341e032484d7b33b29e7d9e3be1414feaf2bbc0957ba408811"), (
"6e8fd3ad20cf32ff8ba6e4bd8d4f05f3cc20d88631cbd3aa5f7f98446d725108",
"a9fe7404613b040412049a205301f2175b53d7012087047a8dc7501a381f5210"), (
"c291bb32d69cfef7e80b6dadd2a1198d05ac23eb30be6503d1c4c04350de2028",
"f44f8ca09d849551f72a6692c793319eefaa0c02d3301ae79c2f869f4251d422"), (
"116d4c2e21101f819a87f0de31dec56a4649c9ad9e539b71680dd439b288681d",
"9f4df65e05390be63bd6e3e38d8afb6117d5d357d56f35ecf63406096fdd810c"), (
"1813ed3760299a16e623084a852de9b12caaf8138744f8903a357fa9a2dbb00c",
"f37baacccd07bc489f50b851f807c88a425e41dd9dda8068e75cffb8bf653a0f"), (
"545e62d72cbb89db1c17e7ad8bb0660a74f8bc411b16eb0452d9a2d7c3e5b01e",
"96ddc93a86b091c7b1951d7371f80a352d85c38606e450aa2af272e8929fae19"), (
"0f5d5941474697c21ea6aecc29ff7cadbd28dbf29531431a40aaea3b7acd1514",
"e83d0ff3ab4db81fb19c1b6125d7d2e4a34a83a8d463049d06df4870dbb2a525"), (
"52605bc1f48092f9d5ad4c2a840a60f129e6aef2eef9c92474951ed1e10e381c",
"222df3afb8b20685c872f29ebfc7e4056fcdafe1d8a77a9f9ba08ac8f426190c"), (
"eee8cdee57e9f11ad0174c1514bba4c3a2c2a10d099876195726217445462f0b",
"a000e5799ac933154bae228c09b522c714fb9a57f530d1954947277be9db0a24"), (
"8c7d04dc3916370f8186dcffc92ad482294ab49c9ce36a5bd13473dc7c4d491a",
"788e35bcd82efbce15b3444f36330337ce3adb67bfc6329149cd25069ac9eb19"), (
"004a720f9edabb7f82eb30a78da45aceccbca5eb69583e1e8018ec1359a61f27",
"e3d319d64bea8069a649acd33859b22361da799e0296f3d4f5117e16feb18e16"), (
"38716f1d7cde7e37795a5b2d6d6317eecbf0adc6dcf7dcc6ee02cc25d1efb22f",
"95c229d0cfc1485f2be0a23de6e49601a2ea55652beead84a67cd727c21a1301"), (
"22cac7a49e99f3d071812abb0addafa4bf9a65308769728e4cd53cc7486f6c13",
"a2e5b90606809964bc20d776b9cbcaab93a2f25124998ae3bd698d061f7afd00"), (
"5109c7a41f73baa4787358b72ff1095439602add7a86a034b87b74360ee2e20f",
"a31b3e2033ed828b5a51b9428f8f6ea40267259df08fdcd2c0e34dd335bdf90c"), (
"957a87470f29a135567085c3d6d6ed14885bab4eb659725534a45a9f100a471c",
"8f3005df282d5a87fa33405e35a313233d05731e87cfcbe060fa067596fa3013"), (
"e0dad57606c2b293dc7c841c965cb29736d2411003e9284a0ae94d13e3d03d2e",
"0543643ef0b617030dcc292451ebcace8bad20706528cb6aedb98dcea66aba27"), (
"f1f10938c8a55b6b15b3f12beebb702133401135937c5c3f2d7fba702f24da09",
"dc862a8a5ad5107421d550731a7f561e4064878c3654bf88b230cc249e91091d"), (
"4bbc08d78c9970235778d6bd9939c7b2b1bd88b9d1cde6473663ae96ae776911",
"3584be9ce31a7fb3aae8515011f4d3eeb86a573b225a88577e4911050bc35013"), (
"c8325b31c9295757ca23d8f5256eebc5ccc517d28e00bfda5f4d709441d66713",
"b81f360903160485c470625519cb18219b44d8b740273ef742fefc5653daf009"), (
"69a6b3e22fbe5879efa56cdb5d50605732bf7f311e28ba037916b4db61ae8a14",
"10ddf800eb3e67da20575456150cb1f0d49506d97ed4ef2d91b951af48966924"), (
"c2a0e3586d4bb49f2ef979686c3a9a1619d0d54ac89641d592b4628b19dee401",
"bc3ba677f6d13ef9f023d4a3b9f073c3eea910ef90cfd24b7f54414d2d02d315"), (
"5b89051b79ff37457760d7af2ebc68be955e47eb6cdf306fbd369dc19fc52c05",
"7bfe2a9d5bb2ade0f9058ea27a07c867af21670d2b9e84bdcc8967d4cdc4ba11"), (
"46ac45f35cbc23bf68906933ad29240054a0a1d89c1832ebb54aa1bc32644105",
"e891e783d5615a1b8ab838f68f6f2ce4e359510ddd40882d4650327d08a5bd11"), (
"581e067b37c40caf861c190922f816e6cb850540df7ceb159f96c48c1c70cd23",
"0d49fa8c74202369c36f4121eab0aa3ac9206ad3419fc9517a88493b07d6fb25"), (
"bb7eb4ba2b45a22e14fad963c04eadbe8e7aab6ff912b008c9e7dd2a2c7d3615",
"758ed0c8cef51f82508072fa758265f0f0eef6c7b2401b94ebe27a638ce33125"), (
"a08f3cc9904f672b94d1f5a14dedbdef4ed229da5b66eca0135090d6f0ba0728",
"542c952395d241cfa15bd48922e9c7fc292dbdd120daa3d66dad67fb3abb700a"), (
"105bac5c449441bd5f5cf39b431f703e2e8f6a30a90d86cfdf425ec728fdbd08",
"b59206f1d556fb98329a7111e3c89bf1e6a4861ec38c82eafa81cff70b713e0d"), (
"45df2edfaea234dab99efa9a402c0d2feaa841ff3c990c926473173283d95913",
"db008cf922c3a50549373a14f5f18b2dc827bd6e168402dfe3e6ece4cb137527"), (
"488dd6437c15ef5b85e84407b7e599cc078c195ed2fc27b366ddac7739f1eb14",
"0448887f55c677464e7e540adf107ba10fc6713e8a2718fe92cbd4794ef4be17"), (
"3fe697698f3504e15eb5d509efa91624d9aa4eae24beeb42ffcb3c6ea8372a30",
"441ccb28e7c6c1893a58f7513c9b7c1c5d0adf3de452644a837d7e08e1ab8117"), (
"9bb5801272264c74db75f1c6812747bf338ea6880fa4dd2d51ef651ef73c2e04",
"e2eefd80e838c30b3f1fb0313fcfcb1e1556439d0346d17334df83c33247b20e"), (
"bad37a1467c4fe875b78508656f2816414ef602ae2ccd4e9430d94ca5c1cd911",
"21c72ccdbaed2e3ea9dac3881531467b64c9322199127f2ae2fa4bb31bad591d"), (
"95c72237ccbaedc185b1abfc59059c454175df81bb3ff65e5a61e2cb5263ed0d",
"1040728a4775ac5cf7a9c75dda2f0aee1fabd6b202b5e916636e3aec73a09d0d"), (
"738e8b9af4d199bc95f70b2a9b25e999b39af15c6a02f2eca058326078745f2a",
"004835960aa03e101d818907df453cefdfb910b44ad9bd056a83b2ef40a5ca0d"), (
"0d88caf486f2fe60bfc08697d1b617b586ec880e38e4ff56f145a5db0ab6d12e",
"a7b19323815295bc84c50535b62c3d4d53dbfc434441eb3c009568fb8f7b2b1a"), (
"b37af7fd314d90590fba8ebf730397cfdaa97f86d3f31d1a7ddc817ff303791f",
"8296a80eceae97f92784642da34f121e29db2c5f3baf9a2722896db22e98b703"), (
"6b67dd3051a8cb113431f5a14e279d910b7b4798ccb03ff588cf312ffe366a0b",
"9c38cc543a0b793be4a0d66de3b2cd30b1f33d36c4402a165da924d7e6f89a12"), (
"72fc4c40e406b9d1b34daba614460922fc53951abd6db5834e1f1b07fa319f27",
"daa4d50481ba47c4a78ae3848a9b268b1d8e0579b4967ebcdece47d386410d02"), (
"a4ce5cb2b2a23dcf019f275058a4092901c4793e6ee7d29282e755dd0d0df000",
"00749453d23051f3587911c34d52e2c2d093273d2283cd6dfba94d7a89cdb226"), (
"9e00df0216e8ac8e72abfeab1106373a13699714c691f04a549f6b58ea974521",
"0e69dbfd9023b8bb58ce7e17972d7c94d49e8464f9c22161d7564ed32c53ef27"), (
"fe1a558c6315f425fea7c04dcf6db869acd7b62b1b848200d5709e73d53de71b",
"66cd33cc8d61cb807092d76ac0e506014fc55624a39ee2afa67f9ba58eb21022"), (
"3ca542e17e4cbc74f47afb399b12295d15dfbae5e966509b7e6cae2df61a430a",
"57a0df429ed3720dee61ca720a4617243b41472f0c7766cc7ce625afddb3b41b"), (
"c1a77855e9b0b1f7381c9acd69ff68fdfa65f1f753dcea22de5a28ed088c2b2e",
"4fce521d725abb8a30d8c39a2a22f496b374d8512b7a76afd3803f7200c86d19"), (
"17cda8d590adf3042bbf1452fe3d79b959f284f3df1e15ee3c696286f0ba832e",
"8919e92a175b55003379ca6e546a04228aa9da861a9669e0e9b106e4a204d404"), (
"959fa9337b4b479ce5fcff7ff9096a344acf7fcde2f8852e28904236472f2f02",
"79e688ecfece239223b745e4b95460bfcb02aee12b154e15db616fda857dcd06"), (
"d062d34cbdfbc50004a631e3dd8f21b446673b53830aa71fdcbc741e7d4fb31c",
"2203af0127657f4e8a1c5ec44bb25028e64ad388efd0b9bfe2105f4f3ff66d0f"), (
"d2d3e3034864944914709549ce27068b5f27bd18b0edc940593df2dc5c5dae23",
"5ae75206bfdc8f54a8673d5d4c4b464ba1e84ae2410418b5c5e98fa993608113"), (
"4ab457d6478fb27214345f0bc2e00cbb29cd55bed1f8e05c23b8f7810e134a1f",
"3db37711e355ed46ea81bb6e31ae87b37b706a8d17e2aa976c7c7706c8e18d19"), (
"5aa17884c96ecdaf81e2b343dbf051e4ace41935e53378ac10a4387e2cb0c404",
"7118986268a748881f6144fc1008e90b40afc702be53784ed4cbceb8606e0714"), (
"82f4ca6b751ac067e451ae1d5115806e7a1d14ab444084a8ac48046b88b43b30",
"8a09186c2a5cb0f16e273be6a8710620006a77afe7c54149bea3dce906345a02"), (
"55d5d97de81e0cc4d2ac97e507d4d6d9874cb55e1522b89ed2050ff3c20a4912",
"27facefe4e2041e11a21889205af6c11eba73e3e8779b801bf3f7253730f1d04"), (
"845177f4584f61071ddea21e9a6c0a17e1a9408e0c073047c339498ff383c109",
"25bc572d1c861fe80156c2fd440e7d9110be8252723d276e806dcc012f8da103"), (
"ecec46dfdaf45f49f82ee78fd9c8c747c049de9becaf440f90391c04dd119002",
"b922e1a7caf72db69dcc062424c7ce75728d010c4c201c2ed8e635a617c81a1f"), (
"8e265fd9f2a4b158a5eb4bda000a6124af909e118b7510f0ec418559aad85825",
"aed92a21e9933bd2ce6c9f09bb7753b46ea31248b324c12726cff08e464bdd0c"), (
"99d7181572d3ae637a277dcc0c35b9b98bbb6ecf3cdcc69af3e946a5bfeb520f",
"89217b554371a2495ee473f867b2e26ea70d4245aceb462a98dd31a37d2d5330"), (
"a5e1fd149ae27f34e7902ebf380277c0b7f09f37e8809d25a0b8df2965d24e29",
"2d6a16a254cfc3894d5500f8c40feb1e84876bc51c68c381109e83f001b41c2f"), (
"7fd221da235bb6e5fd0ae047f1aa49615ddbeecfb71ccb976bf3e0534425661c",
"9ea41ccc3e09572927b0d9f618e1135d384f33618b6a0f80002f0a70be5eb324"), (
"b125c1b45daa68f96be6a5b3e4dd24e4a0e49e46226d841eb73754a498c43b21",
"360b9c39d25451ae58cf651c530155f91e324292b55475a92506de726f153c18"), (
"d64536234849ababefa90b84f7b7cacf4b073809aa9b0c35581426521f18d81a",
"d2dae030312cd4325bb036aa3436b26b9bed69b4d78d68bd49dbdde3173f1510"), (
"d1ce3aea6cfb7be132d17e8d76fcbe4b7e34cef3979b4b905acfeff2f6d19724",
"be47b76297791f535f4b56f973a19f07ec22d4eede2a41ff23c696089938bb21")]
StaticGroupKeys* = @[("1754e80116f859952d343497fcbcafbeaa89ee79a01590c5659d531f5bd0a4e9",
"134ec3c055614df49366c5a7d9d497a43df3963439eefb2611ab00325b3a4db7"), (
"2311a6596f06fcf1a140e4d2aae7047e007010ce36afbe1938e55752c2bfb227",
"2701fc7c513748cb838f289e186f141f66b98f506f47a8791e0496ff1ae52c52"), (
"1dff8ec1abe4f3a9928f6e9d707a3190ba4394d393e35fc5674267e6aa2e3966",
"2aba77fb760a82bdb0efcc39e8eb505a41f1d0ec9f24fc431981c1485e23dce3"), (
"0ed4c2d68e6664cf120be470389c267bfe652d054b01b80d230514b8eb2e46e7",
"2a21425cf4cf0c0fc259310b0123e4571ec88c2018be37a64e14345e96f07d72"), (
"0450eb7d85db7487c68a01dc33072c48b01725a061652d3a0175704c8b52d81a",
"0822b60c2c17cbd68258e9e6b96b7d2b0926508fe79e2ada8457137775a7f35d"), (
"00e7e86c5fec0c49336b4313eb4cf4970bacc318df941d871f8650fc3bf50faa",
"2768594ac3b97e0023dcd76668403cf74b03ce9aa23b47c0aeae05b9051d4230"), (
"2443e28a18873e4405438142a87e4ef2298db578e45dc4c477b157eda6c04804",
"02b06a1a610f7b24c9a4a36e3c601ae68eb43f8e7c3628a0f52a97d804a7a15e"), (
"0030668f19bb3e609b128f18cb4b0c32caba76c9a3f4e3ef9be611dddb6e6a4b",
"1ebde6f3193f1ce0d3ab39b8b1cea73ea4ac9c3b6834f073882cade885611d45"), (
"2bcf2ce1e4b2fb88446aed5904d947fbc3dd80296d329656023fb35548a3fbc3",
"0e6a7bccf4eaa5532c41cb97b9074ada3b7856e233e68fad66a84e14864a6774"), (
"05e4104c85681bf35eb23037cf872a33a53e9f1c24c6d7261c0f724ab9b8350c",
"2d08ba0d89b68d3ee16379cd41e8639b2f76ed9e297ce37bc19ed18a8ddf1569"), (
"0999028058041c111795188d7a93063b3e7fc71a41c3c846ba95da7716020ba6",
"0fc941adf2e210865dcba6e1912c8b6e6eb2210fcd1707fdc6ce44cb2ed2fcbb"), (
"0f563bcc1d2176235c613cf37b4dead2015ad7a37eb808b754e7fb662e664d2f",
"108820acff8c4963b65ea308d35feb5195c4821e57869f8b0293322c627e7fc6"), (
"2ee26c5b01ae74aca3444e7242da07998b6e3df29c9a983b8d4cc196fa1a0ad9",
"2e2017c800ec4b1a3f469da66ea176e07bd9427604abb65272900add1b5b79f0"), (
"1064fb1843470365b272bade45418bcfac1b4f27e504757710dac8894d76a0df",
"254e25ce3b6b98c1050c5419309f9cbed74ff0f2d9b6cfcc132fea33e8a88a9f"), (
"12e7a5d4bfc1397b5294e32fe32135d7d422b96710ff6409a4536b3b019074e1",
"260ae876bf8f65cca680a78d024c93e4f63986d9a718286fa3144b0e3aa28f7a"), (
"10845ab17088c0fda8951b9132b6f9a1fa7f21e800111bdbdd735307d128937a",
"22c1e3958316a8fe73eba7e61fd3b27db1e718fe198c097348b946c070aeb294"), (
"1d16525cb0f78c0431f1c4d331a4b539a5be9d37b38aa851bfa57d44b19b31ce",
"2cf26f5c78cef9a552c2a807e8a7bb6ab04b54cf3257ff9fbc1ba5b84a26facd"), (
"13d38f4469f75248e5c51f0020176a93b47ce72b47c43fa09cefcbbf038581d3",
"0b9c940a6487299c8a3374cf93520c724a8914e50d67a5756c9706d9ab9227e7"), (
"1e90c015c440cf0487c8b874434d8d9362ed3a2dd10226b66e736084118d9b4f",
"1cf0a5922f52d0b2562e318b8724490b0a950402fe53104a9231de8a58e4cb2e"), (
"05f9e72ed636a4af8aaf80acf87d5fdfcd4900f1cec8dc3e63f9da6ad99fb539",
"00bf64c7a42e1d5948bcd6b7f7da149af38f30969a6a76c25fa9f89d977a4fb9"), (
"22c30094233a91a20d739fe91d95bbb8eaaf2b8537821c362b185d99250dcb73",
"06461491db94fa4d47282d57765bbcab26d84414747b6654cd6b6b44e4e604da"), (
"095087b0756edc2c779d57e805ec03fb465c1258bc99278bbba5bb833b425327",
"0db33f6fdf6ea729036b316a172d16716f41062d69a3313429e720ec100004ee"), (
"1b36e58cbda349ee1405b2aa9093bb28de59074a14515b27e65c35679bec73cb",
"0d8ed588232e3dc3b97da1f1cae8d58d007bb6dd1b2498b3031ffe3eade2c6c7"), (
"1b372ea1e7d8808a819d6c7f2f39325d2a684602d826e9ed1356fef3d986b3bd",
"0209844720b22d3e5608c8ce99cbd0113c6b919987b19dcb72ef22f4748cd421"), (
"09a8e4fc8a5f88a4d3d6a737987a73ffce6a0f33fac1469044341034fefcf260",
"0c379326bd364e5633d0b77c76a2ea7b3d9105171fb25a1b5127419e6ff2c8e4"), (
"0b18d1e647544e9ce084e1e7baf7c23406784315d966aec12149c4b54fd62312",
"06a45e4705ac7b779a401ccfc912ed03ac9676aab222bac53435fc1447b80a29"), (
"2f2bfeee70344624046ccad18697e2f5a5c7433b7fbb16d38022c41633599cb7",
"25f0bf499ce5b26ab61146d0348e0dee4e5500dd713e40ab324d4c57c94ae4f4"), (
"149cdb177594cc519b2820366e28a73dc414afe1320460b65c65be9e668f54e6",
"0249958294df9248fe37ae56685e47cd184010523f699a38cb1d4a96e361e2ac"), (
"00f10851bfd49611e19097cc17f09dfd0a199bf7e0092284f464939c4054be81",
"231b39567453e6194bb5fe4f3d91ff28308108d66f2bf165e00327422eb286d9"), (
"05f32eddbce7efe611c4397e773b8302deed6acf00d97aaf1b9d54b4d3f00f94",
"129494c8e268671b4de666967c287b82faf31605de65b3db7fb4756e8abb72d6"), (
"0a8cdce6703196a77b9f8d0b201372fb086df87d164cccb336c8c8a10a30feb4",
"202015161c8f8f8132d40c95be25126d0596cf025c95d19f5c3f7f86a9b67d5f"), (
"2a524092c44e12ba4420bd1642bf7871e40ae4ca7d207082b78c73b3bda2342c",
"153e677112e9594875fd6ce4473f2d74c3c92ecc10354932ab35d7d7780c498c"), (
"2dfae9b260de4cc77d145084694cfe851ee0999bbbf90bd4172df93f7a8503fc",
"0908e0d70b8e7cd3ae40346615b2742c9fefa24502bca5bb42bcababcd2aa2c0"), (
"239298ea28c9ecf0b63725e00b2b83aca90d449abb908e78033bc6356aa967a2",
"2d1785c3ef21a2c893edb66d3c0810af52932ef37d3b30ca99e9bca5cdea6c63"), (
"09a21707464456896bbec9f849c423c5f8916cde32474cac9d7a66c1a2154ece",
"12bdc6dc385440fdc5e7afdbdba6ed9a46bd732829309b51d2360bf423655cd5"), (
"062341fa151ad9d6e97fa1cf844d3009543701b7596c398c00cbe3a4de7c614c",
"192836c5846b8464f3dd4ec4ec6fb3b08d73dfe9d8f2699ca31854c3a921dca6"), (
"06c84c54ced6dc86c867bfbb4e3870e32bb904a3d12ec61cb1f9943d2baa338c",
"2c1d40f1a17ce628cdd709dd042a0cc56efd88a99467a38bb5708cabb1a2ac7c"), (
"28a202c8f544970a453068e6badbbba3b011e7f06c499af8dc6c7e00f4c86f1b",
"1824c19235314ac12aed38238cadfd3e9597fb1e00920c9ab9fe32bd7894b7c3"), (
"06dbd49b8330f96d880c7cdef72e16a2ef0a96f0bd31fee5b1f1e03ee837680c",
"2bf5b861ea14b591bd0ef028a5921eabb7ebd34c01fb870f3fb11a15b567268b"), (
"270c2532ca6de9a54f9f47d1a7ad8e4de3a23204b1d84445c39735966080a38d",
"2ef4080d8fe149320c185ef80f3e23d4b0a6f2b04d6deb2f776f8e5a1125f57b"), (
"0d34c89be7770c9493d2df6d93df0b3878b7439efcf152fc119d6a5fd8c6b050",
"118840ba5709bc2baffe1414bee3d9e7293bb3d78424031e34ef81de97e2b9bb"), (
"0851726d44987f5faad3cb3186d820ccf3054f8dbde4a68bff32cf20add38f6e",
"10521f381a50c78d7a04872001d7535b17f20153209a041204043b610474fea9"), (
"2820de5043c0c4d10365be30eb23ac058d19a1d2ad6d0be8f7fe9cd632bb91c2",
"22d451429f862f9ce71a30d3020caaef9e3193c792662af75195849da08c4ff4"), (
"1d6888b239d40d68719b539eadc949466ac5de31def0879a811f10212e4c6d11",
"0c81dd6f090634f6ec356fd557d3d51761fb8a8de3e3d63be60b39055ef64d9f"), (
"0cb0dba2a97f353a90f8448713f8aa2cb1e92d854a0823e6169a296037ed1318",
"0f3a65bfb8ff5ce76880da9ddd415e428ac807f851b8509f48bc07cdccaa7bf3"), (
"1eb0e5c3d7a2d95204eb161b41bcf8740a66b08bade7171cdb89bb2cd7625e54",
"19ae9f92e872f22aaa50e40686c3852d350af871731d95b1c791b0863ac9dd96"), (
"1415cd7a3beaaa401a433195f2db28bdad7cff29ccaea61ec297464741595d0f",
"25a5b2db7048df069d0463d4a8834aa3e4d2d725611b9cb11fb84dabf30f3de8"), (
"1c380ee1d11e957424c9f9eef2aee629f1600a842a4cadd5f99280f4c15b6052",
"0c1926f4c88aa09b9f7aa7d8e1afcd6f05e4c7bf9ef272c88506b2b8aff32d22"), (
"0b2f464574212657197698090da1c2a2c3a4bb14154c17d01af1e957eecde8ee",
"240adbe97b27474995d130f5579afb14c722b5098c22ae4b1533c99a79e500a0"), (
"1a494d7cdc7334d15b6ae39c9cb44a2982d42ac9ffdc86810f371639dc047d8c",
"19ebc99a0625cd499132c6bf67db3ace370333364f44b315cefb2ed8bc358e78"), (
"271fa65913ec18801e3e5869eba5bcccce5aa48da730eb827fbbda9e0f724a00",
"168eb1fe167e11f5d4f396029e79da6123b25938d3ac49a66980ea4bd619d3e3"), (
"2fb2efd125cc02eec6dcf7dcc6adf0cbee17636d2d5b5a79377ede7c1d6f7138",
"01131ac227d77ca684adee2b6555eaa20196e4e63da2e02b5f48c1cfd029c295"), (
"136c6f48c73cd54c8e72698730659abfa4afdd0abb2a8171d0f3999ea4c7ca22",
"00fd7a1f068d69bde38a992451f2a293abcacbb976d720bc6499800606b9e5a2"), (
"0fe2e20e36747bb834a0867add2a60395409f12fb7587378a4ba731fa4c70951",
"0cf9bd35d34de3c0d2dc8ff09d256702a46e8f8f42b9515a8b82ed33203e1ba3"), (
"1c470a109f5aa434557259b64eab5b8814edd6d6c385705635a1290f47877a95",
"1330fa967506fa60e0cbcf871e73053d2313a3355e4033fa875a2d28df05308f"), (
"2e3dd0e3134de90a4a28e9031041d23697b25c961c847cdc93b2c20676d5dae0",
"27ba6aa6ce8db9ed6acb28657020ad8bcecaeb512429cc0d0317b6f03e644305"), (
"09da242f70ba7f2d3f5c7c93351140332170bbee2bf1b3156b5ba5c83809f1f1",
"1d09919e24cc30b288bf54368c8764401e567f1a7350d5217410d55a8a2a86dc"), (
"116977ae96ae633647e6cdd1b988bdb1b2c73999bdd678572370998cd708bc4b",
"1350c30b0511497e57885a223b576ab8eed3f4115051e8aab37f1ae39cbe8435"), (
"1367d64194704d5fdabf008ed217c5ccc5eb6e25f5d823ca575729c9315b32c8",
"09f0da5356fcfe42f73e2740b7d8449b2118cb19556270c48504160309361fb8"), (
"148aae61dbb4167903ba281e317fbf325760505ddb6ca5ef7958be2fe2b3a669",
"24699648af51b9912defd47ed90695d4f0b10c1556545720da673eeb00f8dd10"), (
"01e4de198b62b492d54196c84ad5d019169a3a6c6879f92e9fb44b6d58e3a0c2",
"15d3022d4d41547f4bd2cf90ef10a9eec373f0b9a3d423f0f93ed1f677a63bbc"), (
"052cc59fc19d36bd6f30df6ceb475e95be68bc2eafd760774537ff791b05895b",
"11bac4cdd46789ccbd849e2b0d6721af67c8077aa28e05f9e0adb25b9d2afe7b"), (
"05416432bca14ab5eb32189cd8a1a054002429ad33699068bf23bc5cf345ac46",
"11bda5087d3250462d8840dd0d5159e3e42c6f8ff638b88a1b5a61d583e791e8"), (
"23cd701c8cc4969f15eb7cdf400585cbe616f82209191c86af0cc4377b061e58",
"25fbd6073b49887a51c99f41d36a20c93aaab0ea21416fc3692320748cfa490d"), (
"15367d2c2adde7c908b012f96fab7a8ebead4ec063d9fa142ea2452bbab47ebb",
"2531e38c637ae2eb941b40b2c7f6eef0f0658275fa728050821ff5cec8d08e75"), (
"2807baf0d6905013a0ec665bda29d24eefbded4da1f5d1942b674f90c93c8fa0",
"0a70bb3afb67ad6dd6a3da20d1bd2d29fcc7e92289d45ba1cf41d29523952c54"), (
"08bdfd28c75e42dfcf860da9306a8f2e3e701f439bf35c5fbd4194445cac5b10",
"0d3e710bf7cf81faea828cc31e86a4e6f19bc8e311719a3298fb56d5f10692b5"), (
"1359d98332177364920c993cff41a8ea2f0d2c409afa9eb9da34a2aedf2edf45",
"277513cbe4ece6e3df0284166ebd27c82d8bf1f5143a374905a5c322f98c00db"), (
"14ebf13977acdd66b327fcd25e198c07cc99e5b70744e8855bef157c43d68d48",
"17bef44e79d4cb92fe18278a3e71c60fa17b10df0a547e4e4677c6557f884804"), (
"302a37a86e3ccbff42ebbe24ae4eaad92416a9ef09d5b55ee104358f6997e63f",
"1781abe1087e7d834a6452e43ddf0a5d1c7c9b3c51f7583a89c1c6e728cb1c44"), (
"042e3cf71e65ef512ddda40f88a68e33bf472781c6f175db744c26721280b59b",
"0eb24732c383df3473d146039d4356151ecbcf3f31b01f3f0bc338e880fdeee2"), (
"11d91c5cca940d43e9d4cce22a60ef146481f2568650785b87fec467147ad3ba",
"1d59ad1bb34bfae22a7f12992132c9647b46311588c3daa93e2eedbacd2cc721"), (
"0ded6352cbe2615a5ef63fbb81df7541459c0559fcabb185c1edbacc3722c795",
"0d9da073ec3a6e6316e9b502b2d6ab1fee0a2fda5dc7a9f75cac75478a724010"), (
"2a5f7478603258a0ecf2026a5cf19ab399e9259b2a0bf795bc99d1f49a8b8e73",
"0dcaa540efb2836a05bdd94ab410b9dfef3c45df0789811d103ea00a96354800"), (
"2ed1b60adba545f156ffe4380e88ec86b517b6d19786c0bf60fef286f4ca880d",
"1a2b7b8ffb6895003ceb414443fcdb534d3d2cb63505c584bc9552812393b1a7"), (
"1f7903f37f81dc7d1a1df3d3867fa9dacf970373bf8eba0f59904d31fdf77ab3",
"03b7982eb26d8922279aaf3b5f2cdb291e124fa32d648427f997aece0ea89682"), (
"0b6a36fe2f31cf88f53fb0cc98477b0b919d274ea1f5313411cba85130dd676b",
"129af8e6d724a95d162a40c4363df3b130cdb2e36dd6a0e43b790b3a54cc389c"), (
"279f31fa071b1f4e83b56dbd1a9553fc22094614a6ab4db3d1b906e4404cfc72",
"020d4186d347cedebc7e96b479058e1d8b269b8a84e38aa7c447ba8104d5a4da"), (
"00f00d0ddd55e78292d2e76e3e79c4012909a45850279f01cf3da2b2b25ccea4",
"26b2cd897a4da9fb6dcd83223d2793d0c2e2524dc3117958f35130d253947400"), (
"214597ea586b9f544af091c6149769133a370611abfeab728eace81602df009e",
"27ef532cd34e56d76121c2f964849ed4947c2d97177ece58bbb82390fddb690e"), (
"1be73dd5739e70d50082841b2bb6d7ac69b86dcf4dc0a7fe25f415638c551afe",
"2210b28ea59b7fa6afe29ea32456c54f0106e5c06ad7927080cb618dcc33cd66"), (
"0a431af62dae6c7e9b5066e9e5badf155d29129b39fb7af474bc4c7ee142a53c",
"1bb4b3ddaf25e67ccc66770c2f47413b2417460a72ca61ee0d72d39e42dfa057"), (
"2e2b8c08ed285ade22eadc53f7f165fafd68ff69cd9a1c38f7b1b0e95578a7c1",
"196dc800723f80d3af767a2b51d874b396f4222a9ac3d8308abb5a721d52ce4f"), (
"2e83baf08662693cee151edff384f259b9793dfe5214bf2b04f3ad90d5a8cd17",
"04d404a2e406b1e9e069961a86daa98a22046a546eca793300555b172ae91989"), (
"022f2f47364290282e85f8e2cd7fcf4a346a09f97ffffce59c474b7b33a99f95",
"06cd7d85da6f61db154e152be1ae02cbbf6054b9e445b7239223cefeec88e679"), (
"1cb34f7d1e74bcdc1fa70a83533b6746b4218fdde331a60400c5fbbd4cd362d0",
"0f6df63f4f5f10e2bfb9d0ef88d34ae62850b24bc45e1c8a4e7f652701af0322"), (
"23ae5d5cdcf23d5940c9edb018bd275f8b0627ce499570144994644803e3d3d2",
"13816093a98fe9c5b5180441e24ae8a14b464b4c5d3d67a8548fdcbf0652e75a"), (
"1f4a130e81f7b8235ce0f8d1be55cd29bb0ce0c20b5f341472b28f47d657b44a",
"198de1c806777c6c97aae2178d6a707bb387ae316ebb81ea46ed55e31177b33d"), (
"04c4b02c7e38a410ac7833e53519e4ace451f0db43b3e281afcd6ec98478a15a",
"14076e60b8cecbd44e7853be02c7af400be90810fc44611f8848a76862981871"), (
"303bb4886b0448aca8844044ab141d7a6e8015511dae51e467c01a756bcaf482",
"025a3406e9dca3be4941c5e7af776a00200671a8e63b276ef1b05c2a6c18098a"), (
"12490ac2f30f05d29eb822155eb54c87d9d6d407e597acd2c40c1ee87dd9d555",
"041d0f7353723fbf01b879873e3ea7eb116caf059288211ae141204efecefa27"), (
"09c183f38f4939c34730070c8e40a9e1170a6c9a1ea2de1d07614f58f4775184",
"03a18d2f01cc6d806e273d725282be10917d0e44fdc25601e81f861c2d57bc25"), (
"029011dd041c39900f44afec9bde49c047c7c8d98fe72ef8495ff4dadf46ecec",
"1f1ac817a635e6d82e1c204c0c018d7275cec7242406cc9db62df7caa7e122b9"), (
"2558d8aa598541ecf010758b119e90af24610a00da4beba558b1a4f2d95f268e",
"0cdd4b468ef0cf2627c124b34812a36eb45377bb099f6cced23b93e9212ad9ae"), (
"0f52ebbfa546e9f39ac6dc3ccf6ebb8bb9b9350ccc7d277a63aed3721518d799",
"30532d7da331dd982a46ebac45420da76ee2b267f873e45e49a27143557b2189"), (
"294ed26529dfb8a0259d80e8379ff0b7c0770238bf2e90e7347fe29a14fde1a5",
"2f1cb401f0839e1081c3681cc56b87841eeb0fc4f800554d89c3cf54a2166a2d"), (
"1c66254453e0f36b97cb1cb7cfeedb5d6149aaf147e00afde5b65b23da21d27f",
"24b35ebe700a2f00800f6a8b61334f385d13e118f6d9b0272957093ecc1ca49e"), (
"213bc498a45437b71e846d22469ee4a0e424dde4b3a5e66bf968aa5db4c125b1",
"183c156f72de0625a97554b59242321ef95501531c65cf58ae5154d2399c0b36"), (
"1ad8181f52261458350c9baa0938074bcfcab7f7840ba9efabab4948233645d6",
"10153f17e3dddb49bd688dd7b469ed9b6bb23634aa36b05b32d42c3130e0dad2"), (
"2497d1f6f2efcf5a904b9b97f3ce347e4bbefc768d7ed132e17bfb6cea3aced1",
"21bb38990896c623ff412adeeed422ec079fa173f9564b5f531f799762b747be")]
# StaticGroupMerkleRoot is the root of the Merkle tree constructed from the StaticGroupKeys above
# only identity commitments are used for the Merkle tree construction
# the root is created locally, using createMembershipList proc from waku_rln_relay_utils module, and the result is hardcoded in here
StaticGroupMerkleRoot* = "a1877a553eff12e1b21632a0545a916a5c5b8060ad7cc6c69956741134397b2d"
StaticGroupMerkleRoot* = "2d7b393411745699c6c67cad60805b5c6a915a54a03216b2e112ff3e557a87a1"
when defined(rlnzerokit):
const
StaticGroupKeys* = @[("c12d11c3b8ee882559ef48f7a42633d81b1e13fc589e6caca028281a1098012c",
"b3ec8a9138817be401b9ed2c683f6969d87f70ad87cbc514dee24146a542a71c"), (
"1a19a8d1709ffa10882673962fa4b6fcecdd2ae3c95f9cc2db294633fd775109",
"eb599e4681f8fd50730d22d2b0d0e9e4efcc659d2d310bd6cb3ff5600a81300e"), (
"6317e72b74ad1395ce77777bcde06b7b5dd02ca69ad6fdc7affeb3bf4d6d1c13",
"151a533bc8927e97be9ba2173644282e3aeada4f9a65c4cc72eda27f3ba10c11"), (
"d5d375f61fc9f9b4702aee9473ce304abca838d224dbc0dcfabffa0e3d04452f",
"f538609579c413bca2d395a772b026498eba0c00a1cdd5f7127d526bd96da723"), (
"f47b36d2df712cb16eb21797c2d0672e12a60e0a7807edcfb15e7213f072a20c",
"d4d12cce11c6d8311c15353d35926f298b886ac66cf6420c47ad178231632608"), (
"3a8360de57f4ab8cad701459a73019c71b0d84927dcec0384bafb2586356080d",
"08a8b713036264b878bdb8051cd6a6ccc9acf9e094daff690d167e699a90c628"), (
"661b5eb69735c9e8a181bcbf34563b96aff763d4996d60ef88c439e82549b622",
"c1fffac2bc6d8b78eb24ba052d72bb88fe5cdb40e86eb3ebadbd57aff47b1e2c"), (
"79fe1ac6ee536412d737091c7e53f003cfd4e4d1a96b1ebc1d27faff4527101c",
"ae1b33ed18cb164c4b3227d8acaf75eb480a58c07d04792361d3e7688437572e"), (
"88f35905877c4417d418a75994eb2ccf7da052b1032bae782c935b107bcaf12e",
"0e3cf8fee2c863470dfefabea0162e98a3cb0b5aed1387d9aa2990710ae6b705"), (
"771b20194afc2d043d133213a39c99f88a50f6459eb7bb7a8b19cd468fdace1a",
"408f8624260e2a85ea354959cff0e7550d89ba666e4a5d646fe1ab8a9b253d2f"), (
"1e40c14bbe937cc3baac06f4b9c1e9d15374064a12462a505ee3c85b59e12d20",
"c5ea8270d54c3919ffc5659bef2b4f00f55a9b7e8a655875ca864837cf66561f"), (
"23dae2b032cf45c17378778786b91fe53c7aad7928391c5c4613b5683ef22c16",
"9f6e20cc9f6df9e64cabcbb765c92faabe25257d92a00f746d13cf1e5f113f1f"), (
"f3213ee18ebd73ee5813ef6267d54e0af7bff2a62ebd329adfe41a42e1d7451c",
"839c3c58a2ecc4c181b8f298ce6aaeeace4e0777e8774cc1fbc4279c3e001724"), (
"f96996f6df01ebe12b75f96ec634458e5e96d8bc9b2983b211d943d8093d0b0b",
"8ce6a29f023aa78d5a4de75b3e12c3cc673bba9dcafd5a2968f4a1b9707c5b11"), (
"c9d5403ed3ee20b29cb49c16312464a52109c553cb7c3e2e760488bc1f4f1b1b",
"96a4069fa8485b11c9fcd9502c384caa6a1db2a90d45559a2aba51d5ea21782b"), (
"3de4f01667d317d52e2718926646dcf559f2fb7266b6977a47401b976b457b06",
"6eff6bbee3d3bd885c7f900b362dbf245e97a523afdbb62d25eefb9afeba4c0f"), (
"89453ee367a782654502062cba7da961d638b4160121ba0ac88abe7a2f82ee18",
"551f19081516e49a4e94dd97af53da2b35b603c321ad02d29f85b9d5ff12f802"), (
"32c5a512efe5d41504bea17a4e3bb865c8d54e9c6732a3bce77962e52e1fc414",
"3b8dab877f10640659e99bc6dba2367664aca2f4e3f87b38ffd532f326332f12"), (
"a74c13d3813e7452fd8680074c31dcc8d6e79e95086175205129f77f37feb129",
"c55985f3a99a3fd1a2619a54b87e433e4114f59d1a59c3a911e957790bec471e"), (
"9b1c420aa3dc252e9f290bba21136c97d4bea618ee298a4167eeb445d3b6d517",
"66f0efae6899a6f851a2dab31df7e936238b8aba4e961c9b65c6b1d113f13e23"), (
"d4821c14ed5e7b8f4febc8cecc26e1d0ae6fd97a7324566c06920300110de414",
"9653e0cbb946b534f0468e42bf124e5806adb4bdb93e91665610d69037b28b1d"), (
"26c453348bae0b3398691e39d5032021c15f7fcf8efb5666f2ffb3bf0c609804",
"a366c39b7cfd462063aa394c31642d36cd3ea5fe89ed0d7db423f2791cf74429"), (
"4a50a8c66d78ea1850ef9e6ff3d082fb6aea7a380d267b89e449826c8e7c1319",
"e353c38ea40b59565dbbdcbc03c0c9f99a017551ae912afca8d5b6cb028bbd2d"), (
"d04788fe9a750986d14596580b48edb0415b18466872d4b431ebbe80c0276f17",
"234ecb8bd50f758f80a48484b6997b4d0a64a1f67941aca1bb31661797d63010"), (
"c5a3e4885e1b16a26ba3d938659e6a4d37e3f66d3f4a8d82ff6e22145ea58303",
"2921633b6bc30dacadba9ee3956ec7e3024971d9db600ef99c4ffeb1ccb8e425"), (
"485887237db885ac07ce8eaf4e881fdc3fbcd4454cf0c56f0bee6b7213de570c",
"061186e353aa3a59c4bc1d98e926c17b3450081dbcae63d2d0841a3fb3cef422"), (
"ca0f9ff876c78957564b303c9e99598036293efe635ec29e0e4bbc59ec59d106",
"48e04ce11bf78ef28261067eec8e5a47ab8632b2d35dcf2e28d229e1e2894714"), (
"9d7965f433303388ced9097e0563c2871c7ce0b286f108bb53e7a68f77102b24",
"b6afb6e2de8fd30417e4b8d1fe4559ec73aa9e96726d0448eef104a0f099eb2f"), (
"db1ef92e473d8bdad5654525d9a9fd9fc0febfe7101eed67c8031d697fff5913",
"34d5b8bb8893c4f4fcf0aa4cb6bc13187bd4867bf0b4b32b57387bd371406f01"), (
"d43e059b5a5a2cb6b4200ac3832fd4ae6a33c69bcd784eaa3e662007a43c2614",
"560683915ff850883b2344e9c64543cd40b2a544c099edb1e37932a7c21a1d12"), (
"a1cf07a46e8696f4a6f6838d246c4e9fbfe6db33149c99fa563f233b16317e01",
"3904003e9ec020a567d23301a8f381a7395d129020ad320fb2b11f57680de027"), (
"178c9c8612a61f62506da40443cbf6d6fccbc9406303b6f88d9536b42c506826",
"2c81906219408328fa05a005247c9baf796c459ecc3ab0e1a70195c180e47705"), (
"f84b9362f81ec147c40f43cde64f3ce883bd80b40230c435978794b54431be1c",
"ca524f39724400999116252fdd67316cc0caf586c3ee0bd98c132ab2fdb7f30f"), (
"a2fbcc2ebb6f728e42c2967bde68461af69c2b10c5305fd40053eb01d1db1e22",
"4ef48e82ffc90c273c6a1627eed225a1ecf5d34bfa33026758306601a08ee71e"), (
"91a7de9363388d15501cf72449b053a036ec5fa16faddb0bfdb6aca0a0c1f409",
"fa5bc2eb977165e92a45d92d5da48e0b1e95e2d13e2d8d42dcf9e99f8761f20a"), (
"6e2598bf6a6975a578abc5615e0791c678ff1776176a771f025c17a67777791c",
"22afc07a5715a0d1a47ba27403e83660837d2c7b9a5902c22c0fed861ff5ac14"), (
"e788d7b78798f2edc1d5575e35dfa3c17b6c15b6642df72ea6ee28297422b011",
"ba9a4176a20d61efabf8b3a6e2197b8dcd26b0337c26b567c2fc4b3ccf67aa15"), (
"bd13c15935c3a49b2f19058e784d3bf700f4c06c0641fa771822194e543a3200",
"1535c97c68abc851042f117cf98be4130a25a49acf5f9c910babef342db1fa1a"), (
"7718d0013fe1be1715041b7df3372f21185821111966fc40c5c29b948fecf60f",
"e476d8441b12a235c48c24cf1a4edd1b9384c2531d70dbaeaab891aea4c39a09"), (
"857adf44efeec3ee71001be5172f0796a56021cbc94273ae4c8a58356a0d2003",
"358eae8e81fd089c3807354d20cf1f878d39b1ce757126e787d4487af65d7821"), (
"8dd2491ce49ef575e8e0ebfd675b6b831e8d19c90d6110ebe57a60d3a9fff622",
"88ef9b9cadb4395c03d57ca9c0a84fc76988b1285d716d4ed3a6340aa7f85a28"), (
"95a421fd9f866bf28eae38fff084ed0d300ac08c3c020d73e6c0a432e5731313",
"d86722ca41b4dacfcf1bbcce9a232979722e228e15fb3e2048b8cc271b021726"), (
"8509921c8c87eeddba208836e3a70d570b39d14d8fc89a0cd988ace585a3ea2d",
"1970a24152128fd6c74ed49315ff705d5af4a58b4dac87d8c82f9be6a6d77507"), (
"f0591ba2f822317b6d5d8b771474ae9518e4d36518469965d83d84d5795ea513",
"1d78b5d07a822537a1bd8e8a2fe2fa9acd4d858aae251f5e33e57d1f7c462300"), (
"a302906a3fbf5dd8753edad674bc00b9397d1a5bc3dd1d229359044ffa346b0b",
"de7690a0fceb4c071f52a09a1fe3e872a74a33c698792a0c30e26fbc8d8b4d20"), (
"6b425f3cfd5f66616556d9e16698fa1d2cb2e6ea6149b75089c0c403d52bbf07",
"3254d4f64d9fd0ab8269bff02865dc115841f1717ca4408c8fd21830deba4900"), (
"570a3f9bb4a293fde27fd13f1407a0aef5c1e1025e2417af400d5c40a043222a",
"f3d481d495572a89216be3bf4d3ba719d2c81f59f67ff825f2ac0bed67ab2a11"), (
"d2a4336cfe79faa8695f88d74b7786ef418bac6021a9c4ba1c3db8e433fda122",
"618888220de5b3f2eb1470ea0ab8188d5385b21e1eef64a691b2f31d066be12d"), (
"5e9db678cd1dfd7e0c598236d25f27b34139e26e5b15b032a68de05b0e394e28",
"4f2379dc6a1212d0b7029dc3248d0546d003edc23329c848ea62442e3b2a280a"), (
"042dbc17ec31dbd098c87c98fa9cd5d8ce7716045ef9d93aab3c9d6bf6f86e21",
"d30841c4768e3b902d9def72131244717d2a0341540e71b51321aabe81cbcb08"), (
"c5cda9e62ddff24a2f14c8ec8ffd7746e230b3023bc2f87353a6eba7d1e55f1f",
"d6252a48c7baa1b9194d0d12a8a07b97f2b624234b48f5eace2d1adc958a8118"), (
"b751b8e0c753c8dd5a07293c0dcc51448a49be3cfad6c8d3fcb8e15703a1f402",
"297af6aed5d949eb9ca3ce7f0f16ab270fd509ca350376cecb844fc55606f523"), (
"2c72a6ac20aa6c8ad2500bab50c90fa8c5b2150a17d3f1d249faf29dc48ee81a",
"c05528b87b7d9b7f1c96937116cb5b6c1d66fdd7678332e257d95601e98bf108"), (
"843a2f33499e417fb3370d2b35170dfd89ae3d7296bc2552611a1f04542f2b15",
"85f5166a1b5c384f6bc9f59e779c9f866c4a4d00443372cd433b5096a7a77e08"), (
"329f698e99433a9acfe5bde3662d8e2c05b5b68024d29af1a59eb63d3722e40c",
"910b67959ff965ae27ae8679e07bc2dfd3b6f567bdf74f07b7dc3b055d883430"), (
"2e00f33354bcace1c798690fdae14a40b8b0d5d922c5e7d9b8a7bb17ec72a40e",
"4b50726e2c50f4e404bbc39eea2a8fd711a6cbd194489c4bedce99f32cebb81e"), (
"73c09da2c4cd22b3890ada1d6045a6877d558ea5c3a7088fcdd3b77b229b7620",
"f500793aaae728efa2029825185175fffc286159319347d10586b8a1de01b613"), (
"25c8efe9ff791b4a0f4478a6dda0867d8df396aa51044c6d6b1ed9427d117c20",
"eb57c5d562ee43c72d8972ae0e8c170b3a7f0e4c89ba67e82186229adb904706"), (
"863f44e00121079c54d36d7cccc1da51ff5900610386fdb8bc36b3a47483d72e",
"c30fd9b1b05ac1a347f432d65b68c82476b4ec0994fa00cfd90f1f7db1571d2c"), (
"6a7311e3f18945a8709eb5e90021a8139375b5b68af6c9cad121615a80ee3f07",
"1a3d8faa7c7d38d5acb627def5b070d8f5719189f7a25e3861c0a9a879cc611c"), (
"97d27ce44b476664863f34a2073278dd5ef1c8623771a9813fedc3a1455ce92f",
"9fc429eafee88fad27dd8a0b05087a9282c926353152c8174e774f34128a7d13"), (
"a88ab45b5ea8cd975399fa39d3ea5b04b12adc705732b54ba6e5af494863c310",
"2429cf8b01347e32d2774cc4070928d7ff96ff585e6f39e0a2e06fabce53c81c"), (
"51eba466f4662972616dfc4fe846425b245ca1405730b6809882f51f413b8526",
"f9112ddb4c80bb385a3938959a750e091c3bb9b6e16d717db46c28efbe273a1d"), (
"45e9ff284aa8b4c825ebe16165953b186bbc0b62f209f84dac2eee3382a94e2b",
"d932afbbe10120b68c573e1844a4f8f87bc93ff9d359d7c15621952e4ef9821c"), (
"d1807c403b8ed2e8022db73486ff6dd2471872404accb8208cda3d757079041c",
"7aed51eb6e3f042a32e44f7add13f9d8cc675839232323094692fa9ec0385e19"), (
"b9c93861237f423f8cb2e96e3a92ba986f290f3852475d9b62cb21a445cdc201",
"e25ae2bb31b01d5d80186f906af11d4c7a6ed172a5aefbabe3b3eeece6750816"), (
"558ad70ccba7882b6f20cd8098f52b8288afdee8b346bf4db33b5deb8153c71a",
"c651377b6f9deb188dfc868df0157ee50dd5f9f7d92ca0e69e82f03355af9821"), (
"b6e4ff38fc18fcb2ca63486314db80183b35f1dc8082e8dffae0726a1c284c25",
"2eedb645aa09985bf178bbc4c5417f8c1a9907440066096111292f2e72e9a01b"), (
"c264ab7d9008339abbc1be91bb96eed30cc5d051d8833a3f5cc94674fccd8627",
"8fd732c230f79e11d56d8f7cacd5f7095e4ad1a80a3c79b1cf42d9733001fe2b"), (
"8b29b2811047827f356a57f7166f8b3dd4a3aac23b02522daf007c677295801a",
"e4b4d00d5d3eeb087c2edfdede5eb92ad39974c359172913abc78e5a5c78ff13"), (
"30be5db463aef5665c8699f2e5fc69ea2ca209290771e2aaac3b60caee6cf22e",
"3c5e974d664c03b13adbe5ebcf9b03491ed0e4c50095297d7b3115804274d70e"), (
"db16b337102ce1b0932fe6e841fc1e7c01473ed4f3765934f2275b821d5b5d2d",
"dbcb04a56099034b4eddf402c08810f5842a74d5312cd5fd86d9378a2da54323"), (
"6f75a23af554d0b3f5ee5a48b5ec1ad8fe9a6f7c2c64b9e44bd9deb644212e17",
"68cebf8d52280b6484bd14f9b6bdbf89a485fc6f6129f49494bd7c1b40c90624"), (
"e3d00baa245cb4f99dcc282cb33121dfa42c3ae1524139c5be17a043cdf65a28",
"5710f34c928c76f21871bcb63731f3417f1056437397b083d095e7fd3f49790f"), (
"f382f322140415ed6692583c594e8d8fc5bea0f027a159ad01df4a3942771100",
"4bfb6da22da207b0935868b7ac4574bea7f3358f4a281837e56b1fa3147cb40f"), (
"33e74fde6f16209c57b24d496fc87ce2270dd2f3b04a9a5a701ec743ed9e1d04",
"e1e847e1ba408253c0539af6a7ff0a8700802ac26f8f7aa68906471613f8371f"), (
"3e4b5dc67f25293d3c432cfe6e37ac7905ae19e62c7836c8e1a05b5822ad432c",
"c978a79b21c177d102af936de352d5fb2862396157628c8c53b259eaadd60303"), (
"1468956b2009da0abc540721681516d2d836fbb19692276d07345b6706a53129",
"eef70d99244f8e5de8c938b56d3079990652e399edf4996c7ba3090bd20e652a"), (
"c641b2667bc124b26572f9fbbec9ecf839db74c9edec9a75168579b71cbb9901",
"83b957a57b5ecacc1a4b0231795be7013e488ab0ba2e7cb4122152aa2a14ba18"), (
"5bc5c3903a9a19dd230310422c11dc42c590c949580f37dedc6bfb528be5c62f",
"5e2dcafd8d018dd8d3ad1e5a7adf58605cd8628dadd96ee48f32bc0f8c4be41b"), (
"9766e135d8b9aa253c90202454fa824b03b9d2d25e0b6c18cd99d87cb328590e",
"d3f8885f3dfa8a0416937ef89f89d2ee7df9e71852f09f812ac6d7934fccb60d"), (
"feb64610db2ac2f01869a198f5a3fc524d6cf0bd171f118bd291c50db1d54a1c",
"3e27cd9b28b288fb3d1953a7355c986c88428a0a95b56ee39f7e5aeb0bbfdb0f"), (
"571bf13dc817ae45281208cf712cee1917900e203be6d617984bb493e0c24c25",
"132f0e795cb6f5127e9fbaff53b28e4baf05df08b92dcbdc05d8ea2638d9e70c"), (
"fb649a934864788acacdfa654bc262cb71af2842f0e0b65054f37e8bc5332d08",
"67a5a6e195a43d1492461d65ac8dd2b254b1467bfe85342cec8fe6ae9892ca1e"), (
"bd6d4da3fcb81b710dbba70051fe8d565c47419517fea3d20639667edb415413",
"07fc16e5a1523005ca08be860c4dc58413b773c1c15f9079c6d373f9e2f93228"), (
"e49799e28327a6e8f4a1d1ad7290345a37a263284517b094d325e7e17593971d",
"641a4439c23e414ef21dd7a563cd75f533a3e26b1e11f5d207d29629d5c4d416"), (
"c0ba522a52198ab0a79d935b17eb57611d141f0ac3864e2a37439e4996591e24",
"78fe086005cd3baaa5315cd138530ef4d7f6febc6e427cd71625329c56419312"), (
"871ee440ba18913aeec0d7fac20c9671e4ceba8e1cde2dc74e2636ca57de6922",
"9d2e7c22c6b8b723b06e5960c92b1a7e6cc4cd11619ec7f21b7c1543103aae2a"), (
"ab5a1272cd4e16be953511a5c5ef9ea24f0072f8bd976314d260757ed0b30c12",
"ebfc21341bfde18f6f7fe1b883d83b43278a635b5d699525aeaa2eec2aba211e"), (
"2c9e91994096c903e90144689053f6f3d9645bc6e11ce48e82facfb03551c41b",
"f9cb618cc78c0e630f3035da914c8606ac1b6629657210308509cf6724748300"), (
"ba41a3b75d7fdd1962feddb3ebabfb1ed01480334dd3bcae3e45f80db0353123",
"39eecd2d4a751206f4aeed3dba6d9acc0aefddba1897eb91731f767ed94cfd07"), (
"ccf1feef0bca203265ffda1e22d88c7d23db4244658f8b3629cc1c7bec17fe02",
"093c3209e63e409899050e2b2e17b6397a9e6c9f267056b1300814d9bfadf80c"), (
"7c2f59be680d820f1fdd4b95982b31931cf3d218088e36f1400d07089f1c2211",
"67eb216710fae6f8cdc776e8edbe6adedb670d2ae92a399e80d35ed1dd82de16"), (
"94063e3fa709f74b22761cbc400d3b7971b0e32d75de9618c11caa06c6d0c012",
"c2eefc502f09e9098c554d7db21cc4ebe3432baed062fb7f1a70d3ea76044d18"), (
"bd8a78715e32d4d7b263b2f358509157a8f1488a48860cb4dae04501e5040926",
"f9dac2ab11885c3478469582ec619714623485572a65839aa6a6254c7fbfc914"), (
"c742d8f410f594be95b9c70f30ab2b3c752388f5d5c139653e3e1f46a3ea1c2a",
"39a28b57b0341b76c9a6d8d4502702aa79f03b6b4c71b4a8b16ee73289f9a405"), (
"b74ce76b34b4e0bea87c576b4185f6e0e2fe60a1ee29a7be6685ab06f84b340d",
"fabe6f436f34a98de98776d7170a537afdc4e697933ef83f3ee083619eb6550b"), (
"89f3b3d0a0563fdb52d340d60bd4a94acb8e9fcb1a078b3784f5d5dd0a76bc2f",
"54e5e2dc8bee937a903dbb41fda7d26855d1a852c10f86e60fadae5284a2d82c"), (
"6a2b21264c42a6fe6968eb4d9539f7d3bd02b0598c58c2a4e709249016720b0d",
"a02038d629f056214390c7c3d07b29d9fd2187e671bf68edfc4c4e6d215e2a1d"), (
"a7f518c047cb8af54cbab674f684d2114517a5ece15b38511333fe60fa75b10a",
"e092a4f17f93aabe3b062cd0a41321a3cef624c1b6cfd943d3a5f1834cb2ae03")]
StaticGroupKeys* = @[("2c0198101a2828a0ac6c9e58fc131e1bd83326a4f748ef592588eeb8c3112dc1",
"1ca742a54641e2de14c5cb87ad707fd869693f682cedb901e47b8138918aecb3"), (
"095177fd334629dbc29c5fc9e32addecfcb6a42f9673268810fa9f70d1a8191a",
"0e30810a60f53fcbd60b312d9d65ccefe4e9d0b0d2220d7350fdf881469e59eb"), (
"131c6d4dbfb3feafc7fdd69aa62cd05d7b6be0cd7b7777ce9513ad742be71763",
"110ca13b7fa2ed72ccc4659a4fdaea3a2e28443617a29bbe977e92c83b531a15"), (
"2f45043d0efabffadcc0db24d238a8bc4a30ce7394ee2a70b4f9c91ff675d3d5",
"23a76dd96b527d12f7d5cda1000cba8e4926b072a795d3a2bc13c479956038f5"), (
"0ca272f013725eb1cfed07780a0ea6122e67d0c29717b26eb12c71dfd2367bf4",
"082663318217ad470c42f66cc66a888b296f92353d35151c31d8c611ce2cd1d4"), (
"0d08566358b2af4b38c0ce7d92840d1bc71930a7591470ad8cabf457de60833a",
"28c6909a697e160d69ffda94e0f9acc9cca6d61c05b8bd78b864620313b7a808"), (
"22b64925e839c488ef606d99d463f7af963b5634bfbc81a1e8c93597b65e1b66",
"2c1e7bf4af57bdadebb36ee840db5cfe88bb722d05ba24eb788b6dbcc2faffc1"), (
"1c102745fffa271dbc1e6ba9d1e4d4cf03f0537e1c0937d7126453eec61afe79",
"2e57378468e7d3612379047dc0580a48eb75afacd827324b4c16cb18ed331bae"), (
"2ef1ca7b105b932c78ae2b03b152a07dcf2ceb9459a718d417447c870559f388",
"05b7e60a719029aad98713ed5a0bcba3982e16a0befafe0d4763c8e2fef83c0e"), (
"1aceda8f46cd198b7abbb79e45f6508af8999ca31332133d042dfc4a19201b77",
"2f3d259b8aabe16f645d4a6e66ba890d55e7f0cf594935ea852a0e2624868f40"), (
"202de1595bc8e35e502a46124a067453d1e9c1b9f406acbac37c93be4bc1401e",
"1f5666cf374886ca7558658a7e9b5af5004f2bef9b65c5ff19394cd57082eac5"), (
"162cf23e68b513465c1c392879ad7a3ce51fb98687777873c145cf32b0e2da23",
"1f3f115f1ecf136d740fa0927d2525beaa2fc965b7cbab4ce6f96d9fcc206e9f"), (
"1c45d7e1421ae4df9a32bd2ea6f2bff70a4ed56762ef1358ee73bd8ee13e21f3",
"2417003e9c27c4fbc14c77e877074eceeaae6ace98f2b881c1c4eca2583c9c83"), (
"0b0b3d09d843d911b283299bbcd8965e8e4534c66ef9752be1eb01dff69669f9",
"115b7c70b9a1f468295afdca9dba3b67ccc3123e5be74d5a8da73a029fa2e68c"), (
"1b1b4f1fbc8804762e3e7ccb53c50921a5642431169cb49cb220eed33e40d5c9",
"2b7821ead551ba2a9a55450da9b21d6aaa4c382c50d9fcc9115b48a89f06a496"), (
"067b456b971b40477a97b66672fbf259f5dc46669218272ed517d36716f0e43d",
"0f4cbafe9afbee252db6dbaf23a5975e24bf2d360b907f5c88bdd3e3be6bff6e"), (
"18ee822f7abe8ac80aba210116b438d661a97dba2c0602456582a767e33e4589",
"02f812ffd5b9859fd202ad21c303b6352bda53af97dd944e9ae4161508191f55"), (
"14c41f2ee56279e7bca332679c4ed5c865b83b4e7aa1be0415d4e5ef12a5c532",
"122f3326f332d5ff387bf8e3f4a2ac647636a2dbc69be9590664107f87ab8d3b"), (
"29b1fe377ff7295120756108959ee7d6c8dc314c078086fd52743e81d3134ca7",
"1e47ec0b7957e911a9c3591a9df514413e437eb8549a61a2d13f9aa9f38559c5"), (
"17d5b6d345b4ee67418a29ee18a6bed4976c1321ba0b299f2e25dca30a421c9b",
"233ef113d1b1c6659b1c964eba8a8b2336e9f71db3daa251f8a69968aeeff066"), (
"14e40d11000392066c5624737ad96faed0e126cccec8eb4f8f7b5eed141c82d4",
"1d8bb23790d6105666913eb9bdb4ad06584e12bf428e46f034b546b9cbe05396"), (
"0498600cbfb3fff26656fb8ecf7f5fc1212003d5391e6998330bae8b3453c426",
"2944f71c79f223b47d0ded89fea53ecd362d64314c39aa632046fd7c9bc366a3"), (
"19137c8e6c8249e4897b260d387aea6afb82d0f36f9eef5018ea786dc6a8504a",
"2dbd8b02cbb6d5a8fc2a91ae5175019af9c9c003bcdcbb5d56590ba48ec353e3"), (
"176f27c080beeb31b4d4726846185b41b0ed480b589645d18609759afe8847d0",
"1030d697176631bba1ac4179f6a1640a4d7b99b68484a4808f750fd58bcb4e23"), (
"0383a55e14226eff828d4a3f6df6e3374d6a9e6538d9a36ba2161b5e88e4a3c5",
"25e4b8ccb1fe4f9cf90e60dbd9714902e3c76e95e39ebaadac0dc36b3b632129"), (
"0c57de13726bee0b6fc5f04c45d4bc3fdc1f884eaf8ece07ac85b87d23875848",
"22f4ceb33f1a84d0d263aebc1d0850347bc126e9981dbcc4593aaa53e3861106"), (
"06d159ec59bc4b0e9ec25e63fe3e29368059999e3c304b565789c776f89f0fca",
"144789e2e129d2282ecf5dd3b23286ab475a8eec7e066182f28ef71be14ce048"), (
"242b10778fa6e753bb08f186b2e07c1c87c263057e09d9ce88333033f465799d",
"2feb99f0a004f1ee48046d72969eaa73ec5945fed1b8e41704d38fdee2b6afb6"), (
"1359ff7f691d03c867ed1e10e7bffec09ffda9d9254565d5da8b3d472ef91edb",
"016f4071d37b38572bb3b4f07b86d47b1813bcb64caaf0fcf4c49388bbb8d534"), (
"14263ca40720663eaa4e78cd9bc6336aaed42f83c30a20b4b62c5a5a9b053ed4",
"121d1ac2a73279e3b1ed99c044a5b240cd4345c6e944233b8850f85f91830656"), (
"017e31163b233f56fa999c1433dbe6bf9f4e6c248d83f6a6f496866ea407cfa1",
"27e00d68571fb1b20f32ad2090125d39a781f3a80133d267a520c09e3e000439"), (
"2668502cb436958df8b6036340c9cbfcd6f6cb4304a46d50621fa612869c8c17",
"0577e480c19501a7e1b03acc9e456c79af9b7c2405a005fa288340196290812c"), (
"1cbe3144b594879735c43002b480bd83e83c4fe6cd430fc447c11ef862934bf8",
"0ff3b7fdb22a138cd90beec386f5cac06c3167dd2f25169199004472394f52ca"), (
"221edbd101eb5300d45f30c5102b9cf61a4668de7b96c2428e726fbb2eccfba2",
"1ee78ea001663058670233fa4bd3f5eca125d2ee27166a3c270cc9ff828ef44e"), (
"09f4c1a0a0acb6fd0bdbad6fa15fec36a053b04924f71c50158d386393dea791",
"0af261879fe9f9dc428d2d3ed1e2951e0b8ea45d2dd9452ae9657197ebc25bfa"), (
"1c797777a6175c021f776a177617ff78c691075e61c5ab78a575696abf98256e",
"14acf51f86ed0f2cc202599a7b2c7d836036e80374a27ba4d1a015577ac0af22"), (
"11b022742928eea62ef72d64b6156c7bc1a3df355e57d5c1edf29887b7d788e7",
"15aa67cf3c4bfcc267b5267c33b026cd8d7b19e2a6b3f8abef610da276419aba"), (
"00323a544e19221877fa41066cc0f400f73b4d788e05192f9ba4c33559c113bd",
"1afab12d34efab0b919c5fcf9aa4250a13e48bf97c112f0451c8ab687cc93515"), (
"0ff6ec8f949bc2c540fc661911215818212f37f37d1b041517bee13f01d01877",
"099ac3a4ae91b8aaaedb701d53c284931bdd4e1acf248cc435a2121b44d876e4"), (
"03200d6a35588a4cae7342c9cb2160a596072f17e51b0071eec3eeef44df7a85",
"21785df67a48d487e7267175ceb1398d871fcf204d3507389c08fd818eae8e35"), (
"22f6ffa9d3607ae5eb10610dc9198d1e836b5b67fdebe0e875f59ee41c49d28d",
"285af8a70a34a6d34e6d715d28b18869c74fa8c0a97cd5035c39b4ad9c9bef88"), (
"131373e532a4c0e6730d023c8cc00a300ded84f0ff38ae8ef26b869ffd21a495",
"2617021b27ccb848203efb158e222e727929239acebc1bcfcfdab441ca2267d8"), (
"2deaa385e5ac88d90c9ac88f4dd1390b570da7e3368820baddee878c1c920985",
"0775d7a6e69b2fc8d887ac4d8ba5f45a5d70ff1593d44ec7d68f125241a27019"), (
"13a55e79d5843dd86599461865d3e41895ae7414778b5d6d7b3122f8a21b59f0",
"0023467c1f7de5335e1f25ae8a854dcd9afae22f8a8ebda13725827ad0b5781d"), (
"0b6b34fa4f045993221dddc35b1a7d39b900bc74d6da3e75d85dbf3f6a9002a3",
"204d8b8dbc6fe2300c2a7998c6334aa772e8e31f9aa0521f074cebfca09076de"), (
"07bf2bd503c4c08950b74961eae6b22c1dfa9866e1d9566561665ffd3c5f426b",
"0049bade3018d28f8c40a47c71f1415811dc6528f0bf6982abd09f4df6d45432"), (
"2a2243a0405c0d40af17245e02e1c1f5aea007143fd17fe2fd93a2b49b3f0a57",
"112aab67ed0bacf225f87ff6591fc8d219a73b4dbfe36b21892a5795d481d4f3"), (
"22a1fd33e4b83d1cbac4a92160ac8b41ef86774bd7885f69a8fa79fe6c33a4d2",
"2de16b061df3b291a664ef1e1eb285538d18b80aea7014ebf2b3e50d22888861"), (
"284e390e5be08da632b0155b6ee23941b3275fd23682590c7efd1dcd78b69d5e",
"0a282a3b2e4462ea48c82933c2ed03d046058d24c39d02b7d012126adc79234f"), (
"216ef8f66b9d3cab3ad9f95e041677ced8d59cfa987cc898d0db31ec17bc2d04",
"08cbcb81beaa2113b5710e5441032a7d7144121372ef9d2d903b8e76c44108d3"), (
"1f5fe5d1a7eba65373f8c23b02b330e24677fd8fecc8142f4af2df2de6a9cdc5",
"18818a95dc1a2dceeaf5484b2324b6f2977ba0a8120d4d19b9a1bac7482a25d6"), (
"02f4a10357e1b8fcd3c8d6fa3cbe498a4451cc0d3c29075addc853c7e0b851b7",
"23f50656c54f84cbce760335ca09d50f27ab160f7fcea39ceb49d9d5aef67a29"), (
"1ae88ec49df2fa49d2f1d3170a15b2c5a80fc950ab0b50d28a6caa20aca6722c",
"08f18be90156d957e2328367d7fd661d6c5bcb167193961c7f9b7d7bb82855c0"), (
"152b2f54041f1a615225bc96723dae89fd0d17352b0d37b37f419e49332f3a84",
"087ea7a796503b43cd723344004d4a6c869f9c779ef5c96b4f385c1b6a16f585"), (
"0ce422373db69ea5f19ad22480b6b5052c8e2d66e3bde5cf9a3a43998e699f32",
"3034885d053bdcb7074ff7bd67f5b6d3dfc27be07986ae27ae65f99f95670b91"), (
"0ea472ec17bba7b8d9e7c522d9d5b0b8404ae1da0f6998c7e1acbc5433f3002e",
"1eb8eb2cf399ceed4b9c4894d1cba611d78f2aea9ec3bb04e4f4502c6e72504b"), (
"20769b227bb7d3cd8f08a7c3a58e557d87a645601dda0a89b322cdc4a29dc073",
"13b601dea1b88605d1479331596128fcff755118259802a2ef28e7aa3a7900f5"), (
"207c117d42d91e6b6d4c0451aa96f38d7d86a0dda678440f4a1b79ffe9efc825",
"064790db9a228621e867ba894c0e7f3a0b178c0eae72892dc743ee62d5c557eb"), (
"2ed78374a4b336bcb8fd8603610059ff51dac1cc7c6dd3549c072101e0443f86",
"2c1d57b17d1f0fd9cf00fa9409ecb47624c8685bd632f447a3c15ab0b1d90fc3"), (
"073fee805a6121d1cac9f68ab6b5759313a82100e9b59e70a84589f1e311736a",
"1c61cc79a8a9c061385ea2f7899171f5d870b0f5de27b6acd5387d7caa8f3d1a"), (
"2fe95c45a1c3ed3f81a9713762c8f15edd783207a2343f866466474be47cd297",
"137d8a12344f774e17c852313526c982927a08050b8add27ad8fe8feea29c49f"), (
"10c3634849afe5a64bb5325770dc2ab1045bead339fa995397cda85e5bb48aa8",
"1cc853ceab6fe0a2e0396f5e58ff96ffd7280907c44c77d2327e34018bcf2924"), (
"26853b411ff5829880b6305740a15c245b4246e84ffc6d61722966f466a4eb51",
"1d3a27beef286cb47d716de1b6b93b1c090e759a9538395a38bb804cdb2d11f9"), (
"2b4ea98233ee2eac4df809f2620bbc6b183b956561e1eb25c8b4a84a28ffe945",
"1c82f94e2e952156c1d759d3f93fc97bf8f8a444183e578cb62001e1bbaf32d9"), (
"1c047970753dda8c20b8cc4a40721847d26dff8634b72d02e8d28e3b407c80d1",
"195e38c09efa924609232323395867ccd8f913dd7a4fe4322a043f6eeb51ed7a"), (
"01c2cd45a421cb629b5d4752380f296f98ba923a6ee9b28c3f427f236138c9b9",
"160875e6eceeb3e3abfbaea572d16e7a4c1df16a906f18805d1db031bbe25ae2"), (
"1ac75381eb5d3bb34dbf46b3e8deaf88822bf59880cd206f2b88a7cb0cd78a55",
"2198af5533f0829ee6a02cd9f7f9d50de57e15f08d86fc8d18eb9d6f7b3751c6"), (
"254c281c6a72e0fadfe88280dcf1353b1880db14634863cab2fc18fc38ffe4b6",
"1ba0e9722e2f2911610966004407991a8c7f41c5c4bb78f15b9809aa45b6ed2e"), (
"2786cdfc7446c95c3f3a83d851d0c50cd3ee96bb91bec1bb9a3308907dab64c2",
"2bfe013073d942cfb1793c0aa8d14a5e09f7d5ac7c8f6dd5119ef730c232d78f"), (
"1a809572677c00af2d52023bc2aaa3d43d8b6f16f7576a357f82471081b2298b",
"13ff785c5a8ec7ab13291759c37499d32ab95edededf2e7c08eb3e5d0dd0b4e4"), (
"2ef26ceeca603bacaae271072909a22cea69fce5f299865c66f5ae63b45dbe30",
"0ed774428015317b7d299500c5e4d01e49039bcfebe5db3ab1034c664d975e3c"), (
"2d5d5b1d825b27f2345976f3d43e47017c1efc41e8e62f93b0e12c1037b316db",
"2343a52d8a37d986fdd52c31d5742a84f51088c002f4dd4e4b039960a504cbdb"), (
"172e2144b6ded94be4b9642c7c6f9afed81aecb5485aeef5b3d054f53aa2756f",
"2406c9401b7cbd9494f429616ffc85a489bfbdb6f914bd84640b28528dbfce68"), (
"285af6cd43a017bec5394152e13a2ca4df2131b32c28cc9df9b45c24aa0bd0e3",
"0f79493ffde795d083b097734356107f41f33137b6bc7118f2768c924cf31057"), (
"00117742394adf01ad59a127f0a0bec58f8d4e593c589266ed15041422f382f3",
"0fb47c14a31f6be53718284a8f35f3a7be7445acb7685893b007a22da26dfb4b"), (
"041d9eed43c71e705a9a4ab0f3d20d27e27cc86f494db2579c20166fde4fe733",
"1f37f81316470689a67a8f6fc22a8000870affa7f69a53c0538240bae147e8e1"), (
"2c43ad22585ba0e1c836782ce619ae0579ac376efe2c433c3d29257fc65d4b3e",
"0303d6adea59b2538c8c625761396228fbd552e36d93af02d177c1219ba778c9"), (
"2931a506675b34076d279296b1fb36d8d2161568210754bc0ada09206b956814",
"2a650ed20b09a37b6c99f4ed99e352069979306db538c9e85d8e4f24990df7ee"), (
"0199bb1cb7798516759aecedc974db39f8ecc9befbf97265b224c17b66b241c6",
"18ba142aaa522112b47c2ebab08a483e01e75b7931024b1accca5e7ba557b983"), (
"2fc6e58b52fb6bdcde370f5849c990c542dc112c42100323dd199a3a90c3c55b",
"1be44b8c0fbc328fe46ed9ad8d62d85c6058df7a5a1eadd3d88d018dfdca2d5e"), (
"0e5928b37cd899cd186c0b5ed2d2b9034b82fa542420903c25aab9d835e16697",
"0db6cc4f93d7c62a819ff05218e7f97deed2899ff87e9316048afa3d5f88f8d3"), (
"1c4ad5b10dc591d28b111f17bdf06c4d52fca3f598a16918f0c22adb1046b6fe",
"0fdbbf0beb5a7e9fe36eb5950a8a42886c985c35a753193dfb88b2289bcd273e"), (
"254cc2e093b44b9817d6e63b200e901719ee2c71cf08122845ae17c83df11b57",
"0ce7d93826ead805dccb2db908df05af4b8eb253ffba9f7e12f5b65c790e2f13"), (
"082d33c58b7ef35450b6e0f04228af71cb62c24b65facdca8a786448939a64fb",
"1eca9298aee68fec2c3485fe7b46b154b2d28dac651d4692143da495e1a6a567"), (
"135441db7e663906d2a3fe179541475c568dfe5100a7bb0d711bb8fca34d6dbd",
"2832f9e2f973d3c679905fc1c173b71384c54d0c86be08ca053052a1e516fc07"), (
"1d979375e1e725d394b017452863a2375a349072add1a1f4e8a62783e29997e4",
"16d4c4d52996d207d2f5111e6be2a333f575cd63a5d71df24e413ec239441a64"), (
"241e5996499e43372a4e86c30a1f141d6157eb175b939da7b08a19522a52bac0",
"129341569c322516d77c426ebcfef6d7f40e5338d15c31a5aa3bcd056008fe78"), (
"2269de57ca36264ec72dde1c8ebacee471960cc2fad7c0ee3a9118ba40e41e87",
"2aae3a1043157c1bf2c79e6111cdc46c7e1a2bc960596eb023b7b8c6227c2e9d"), (
"120cb3d07e7560d2146397bdf872004fa29eefc5a5113595be164ecd72125aab",
"1e21ba2aec2eaaae2595695d5b638a27433bd883b8e17f6f8fe1fd1b3421fceb"), (
"1bc45135b0cffa828ee41ce1c65b64d9f3f65390684401e903c9964099919e2c",
"0083742467cf09853010726529661bac06864c91da35300f630e8cc78c61cbf9"), (
"233135b00df8453eaebcd34d338014d01efbabebb3ddfe6219dd7f5db7a341ba",
"07fd4cd97e761f7391eb9718baddef0acc9a6dba3dedaef40612754a2dcdee39"), (
"02fe17ec7b1ccc29368b8f654442db237d8cd8221edaff653220ca0beffef1cc",
"0cf8adbfd9140830b15670269f6c9e7a39b6172e2b0e059998403ee609323c09"), (
"11221c9f08070d40f1368e0818d2f31c93312b98954bdd1f0f820d68be592f7c",
"16de82ddd15ed3809e392ae92a0d67dbde6abeede876c7cdf8e6fa106721eb67"), (
"12c0d0c606aa1cc11896de752de3b071793b0d40bc1c76224bf709a73f3e0694",
"184d0476ead3701a7ffb62d0ae2b43e3ebc41cb27d4d558c09e9092f50fceec2"), (
"260904e50145e0dab40c86488a48f1a857915058f3b263b2d7d4325e71788abd",
"14c9bf7f4c25a6a69a83652a57853462149761ec82954678345c8811abc2daf9"), (
"2a1ceaa3461f3e3e6539c1d5f58823753c2bab300fc7b995be94f510f4d842c7",
"05a4f98932e76eb1a8b4714c6b3bf079aa022750d4d8a6c9761b34b0578ba239"), (
"0d344bf806ab8566bea729eea160fee2e0f685416b577ca8bee0b4346be74cb7",
"0b55b69e6183e03e3ff83e9397e6c4fd7a530a17d77687e98da9346f436fbefa"), (
"2fbc760addd5f584378b071acb9f8ecb4aa9d40bd640d352db3f56a0d0b3f389",
"2cd8a28452aead0fe6860fc152a8d15568d2a7fd41bb3d907a93ee8bdce2e554"), (
"0d0b7216902409e7a4c2588c59b002bdd3f739954deb6869fea6424c26212b6a",
"1d2a5e216d4e4cfced68bf71e68721fdd9297bd0c3c790432156f029d63820a0"), (
"0ab175fa60fe331351385be1eca5174511d284f674b6ba4cf58acb47c018f5a7",
"03aeb24c83f1a5d343d9cfb6c124f6cea32113a4d02c063bbeaa937ff1a492e0")]
# StaticGroupMerkleRoot is the root of the Merkle tree constructed from the StaticGroupKeys above
# only identity commitments are used for the Merkle tree construction
# the root is created locally, using createMembershipList proc from waku_rln_relay_utils module, and the result is hardcoded in here
StaticGroupMerkleRoot* = "805be2ac92bc8b21bf093440f5a8055a8a4ec7bf5c5af5e22680d9123a4a5c2b"
StaticGroupMerkleRoot* = "2b5c4a3a12d98026e2f55a5cbfc74e8a5a05a8f5403409bf218bbc92ace25b80"
const EpochUnitSeconds* = float64(10) # the rln-relay epoch length in seconds
const MaxClockGapSeconds* = 20.0 # the maximum clock difference between peers in seconds

View File

@ -185,6 +185,13 @@ proc toIDCommitment*(idCommitmentUint: UInt256): IDCommitment =
let pk = IDCommitment(idCommitmentUint.toBytesLE())
return pk
proc inHex*(value: IDKey or IDCommitment or MerkleNode or Nullifier or Epoch or RlnIdentifier): string =
var valueHex = (UInt256.fromBytesLE(value)).toHex
# We pad leading zeroes
while valueHex.len < value.len * 2:
valueHex = "0" & valueHex
return valueHex
proc toMembershipIndex(v: UInt256): MembershipIndex =
let result: MembershipIndex = cast[MembershipIndex](v)
return result
@ -211,7 +218,7 @@ proc register*(idComm: IDCommitment, ethAccountAddress: Option[Address], ethAcco
# web3.privateKey = some(ethAccountPrivateKey)
var sender = web3.contractSender(MembershipContract, membershipContractAddress) # creates a Sender object with a web3 field and contract address of type Address
debug "registering an id commitment", idComm=idComm
debug "registering an id commitment", idComm=idComm.inHex
let pk = idComm.toUInt256()
var txHash: TxHash
@ -238,7 +245,7 @@ proc register*(idComm: IDCommitment, ethAccountAddress: Option[Address], ethAcco
eventIdCommUint = UInt256.fromBytesBE(argumentsBytes[0..31])
eventIndex = UInt256.fromBytesBE(argumentsBytes[32..^1])
eventIdComm = eventIdCommUint.toIDCommitment()
debug "the identity commitment key extracted from tx log", eventIdComm=eventIdComm
debug "the identity commitment key extracted from tx log", eventIdComm=eventIdComm.inHex
debug "the index of registered identity commitment key", eventIndex=eventIndex
if eventIdComm != idComm:
@ -402,7 +409,7 @@ when defined(rln) or (not defined(rln) and not defined(rlnzerokit)):
var rootValue = cast[ptr MerkleNode] (root.`ptr`)[]
return ok(rootValue)
proc proofVerify*(rlnInstance: RLN[Bn256], data: openArray[byte], proof: RateLimitProof): RlnRelayResult[bool] =
proc proofVerify*(rlnInstance: RLN[Bn256], data: openArray[byte], proof: RateLimitProof, validRoots: seq[MerkleNode] = @[]): RlnRelayResult[bool] =
var
proofBytes = serialize(proof, data)
proofBuffer = proofBytes.toBuffer()
@ -614,8 +621,8 @@ proc toMembershipKeyPairs*(groupKeys: seq[(string, string)]): seq[
for i in 0..groupKeys.len-1:
let
idKey = groupKeys[i][0].hexToByteArray(32)
idCommitment = groupKeys[i][1].hexToByteArray(32)
idKey = hexToUint[IDKey.len*8](groupKeys[i][0]).toBytesLE()
idCommitment = hexToUint[IDCommitment.len*8](groupKeys[i][1]).toBytesLE()
groupKeyPairs.add(MembershipKeyPair(idKey: idKey,
idCommitment: idCommitment))
return groupKeyPairs
@ -634,7 +641,7 @@ proc calcMerkleRoot*(list: seq[IDCommitment]): string {.raises: [Defect, IOError
member_is_added = rln.insertMember(list[i])
doAssert(member_is_added)
let root = rln.getMerkleRoot().value().toHex
let root = rln.getMerkleRoot().value().inHex
return root
proc createMembershipList*(n: int): (seq[(string, string)], string) {.raises: [
@ -656,7 +663,7 @@ proc createMembershipList*(n: int): (seq[(string, string)], string) {.raises: [
let keypair = rln.membershipKeyGen()
doAssert(keypair.isSome())
let keyTuple = (keypair.get().idKey.toHex, keypair.get().idCommitment.toHex)
let keyTuple = (keypair.get().idKey.inHex, keypair.get().idCommitment.inHex)
output.add(keyTuple)
# insert the key to the Merkle tree
@ -665,7 +672,7 @@ proc createMembershipList*(n: int): (seq[(string, string)], string) {.raises: [
return (@[], "")
let root = rln.getMerkleRoot().value.toHex
let root = rln.getMerkleRoot().value().inHex
return (output, root)
proc rlnRelayStaticSetUp*(rlnRelayMembershipIndex: MembershipIndex): (Option[seq[
@ -826,7 +833,7 @@ proc validateMessage*(rlnPeer: WakuRLNRelay, msg: WakuMessage,
## TODO: FIXME after resolving this issue https://github.com/status-im/nwaku/issues/1247
if not rlnPeer.validateRoot(msg.proof.merkleRoot):
debug "invalid message: provided root does not belong to acceptable window of roots", provided=msg.proof.merkleRoot, validRoots=rlnPeer.validMerkleRoots.mapIt("0x" & (it.toHex))
debug "invalid message: provided root does not belong to acceptable window of roots", provided=msg.proof.merkleRoot, validRoots=rlnPeer.validMerkleRoots.mapIt(it.inHex)
waku_rln_invalid_messages_total.inc(labelValues=["invalid_root"])
# return MessageValidationResult.Invalid
@ -975,10 +982,10 @@ proc addRLNRelayValidator*(node: WakuNode, pubsubTopic: string, contentTopic: Co
validationRes = node.wakuRlnRelay.validateMessage(wakumessage)
proof = toHex(wakumessage.proof.proof)
epoch = fromEpoch(wakumessage.proof.epoch)
root = toHex(wakumessage.proof.merkleRoot)
shareX = toHex(wakumessage.proof.shareX)
shareY = toHex(wakumessage.proof.shareY)
nullifier = toHex(wakumessage.proof.nullifier)
root = inHex(wakumessage.proof.merkleRoot)
shareX = inHex(wakumessage.proof.shareX)
shareY = inHex(wakumessage.proof.shareY)
nullifier = inHex(wakumessage.proof.nullifier)
case validationRes:
of Valid:
debug "message validity is verified, relaying:", contentTopic=wakumessage.contentTopic, epoch=epoch, timestamp=wakumessage.timestamp, payload=payload
@ -1122,8 +1129,8 @@ proc mountRlnRelayDynamic*(node: WakuNode,
# assuming all the members arrive in order
let pk = pubkey.toIDCommitment()
let isSuccessful = rlnPeer.insertMember(pk)
debug "received pk", pk=pk.toHex, index=index
debug "acceptable window", validRoots=rlnPeer.validMerkleRoots.mapIt("0x" & (it.toHex))
debug "received pk", pk=pk.inHex, index=index
debug "acceptable window", validRoots=rlnPeer.validMerkleRoots.mapIt(it.inHex)
doAssert(isSuccessful.isOk())
asyncSpawn rlnPeer.handleGroupUpdates(handler)
@ -1166,8 +1173,8 @@ proc mount(node: WakuNode,
# mount rlnrelay in off-chain mode with a static group of users
node.mountRlnRelayStatic(group = groupOpt.get(), memKeyPair = memKeyPairOpt.get(), memIndex= memIndexOpt.get(), pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic, spamHandler = spamHandler)
info "membership id key", idkey=memKeyPairOpt.get().idKey.toHex
info "membership id commitment key", idCommitmentkey=memKeyPairOpt.get().idCommitment.toHex
info "membership id key", idkey=memKeyPairOpt.get().idKey.inHex
info "membership id commitment key", idCommitmentkey=memKeyPairOpt.get().idCommitment.inHex
# check the correct construction of the tree by comparing the calculated root against the expected root
# no error should happen as it is already captured in the unit tests
@ -1181,7 +1188,7 @@ proc mount(node: WakuNode,
let root = rootRes.value()
if root.toHex != expectedRoot:
if root.inHex != expectedRoot:
error "root mismatch: something went wrong not in Merkle tree construction"
debug "the calculated root", root
info "WakuRLNRelay is mounted successfully", pubsubtopic=conf.rlnRelayPubsubTopic, contentTopic=conf.rlnRelayContentTopic