rln-contract/deployments/sepolia/BinaryIMT.json

556 lines
122 KiB
JSON

{
"address": "0x9Eae140A17Fd002B2ffA3B5df76C13100CDF909d",
"abi": [
{
"inputs": [],
"name": "MAX_DEPTH",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "SNARK_SCALAR_FIELD",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_0",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_1",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_10",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_11",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_12",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_13",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_14",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_15",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_16",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_17",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_18",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_19",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_2",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_20",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_21",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_22",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_23",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_24",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_25",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_26",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_27",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_28",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_29",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_3",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_30",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_31",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_32",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_4",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_5",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_6",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_7",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_8",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Z_9",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "defaultZero",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
}
],
"transactionHash": "0xd2d8efbdb9b0e3ab4050c94effa32de9d56cb4afe7ef1a36bb5ac3785fed5dce",
"receipt": {
"to": null,
"from": "0x3F47b2a1dF96DE2e198d646b598C37251CCC3b98",
"contractAddress": "0x9Eae140A17Fd002B2ffA3B5df76C13100CDF909d",
"transactionIndex": 15,
"gasUsed": "2603657",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"blockHash": "0x389d39dc86a2cc38165723dcb8002f4859f4c0b7a62b5c4fb3ef85db417c60a6",
"transactionHash": "0xd2d8efbdb9b0e3ab4050c94effa32de9d56cb4afe7ef1a36bb5ac3785fed5dce",
"logs": [],
"blockNumber": 4794984,
"cumulativeGasUsed": "5266673",
"status": 1,
"byzantium": true
},
"args": [],
"numDeployments": 1,
"solcInputHash": "3f87313134e2217cb187bd594084789f",
"metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MAX_DEPTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SNARK_SCALAR_FIELD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_0\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_10\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_11\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_12\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_13\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_14\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_15\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_16\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_17\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_18\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_19\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_20\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_21\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_22\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_23\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_24\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_25\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_26\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_27\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_28\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_29\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_3\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_30\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_31\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_32\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_4\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_5\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_6\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_7\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_8\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Z_9\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"defaultZero\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The incremental tree allows to calculate the root hash each time a leaf is added, ensuring the integrity of the tree.\",\"kind\":\"dev\",\"methods\":{\"init(BinaryIMTData storage,uint256,uint256)\":{\"details\":\"Initializes a tree.\",\"params\":{\"depth\":\": Depth of the tree.\",\"self\":\": Tree data.\",\"zero\":\": Zero value to be used.\"}},\"insert(BinaryIMTData storage,uint256)\":{\"details\":\"Inserts a leaf in the tree.\",\"params\":{\"leaf\":\": Leaf to be inserted.\",\"self\":\": Tree data.\"}},\"remove(BinaryIMTData storage,uint256,uint256[],uint8[])\":{\"details\":\"Removes a leaf from the tree.\",\"params\":{\"leaf\":\": Leaf to be removed.\",\"proofPathIndices\":\": Path of the proof of membership.\",\"proofSiblings\":\": Array of the sibling nodes of the proof of membership.\",\"self\":\": Tree data.\"}},\"update(BinaryIMTData storage,uint256,uint256,uint256[],uint8[])\":{\"details\":\"Updates a leaf in the tree.\",\"params\":{\"leaf\":\": Leaf to be updated.\",\"newLeaf\":\": New leaf.\",\"proofPathIndices\":\": Path of the proof of membership.\",\"proofSiblings\":\": Array of the sibling nodes of the proof of membership.\",\"self\":\": Tree data.\"}}},\"title\":\"Incremental binary Merkle tree.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@zk-kit/imt.sol/BinaryIMT.sol\":\"BinaryIMT\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"@zk-kit/imt.sol/BinaryIMT.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport {PoseidonT3} from \\\"poseidon-solidity/PoseidonT3.sol\\\";\\n\\n// Each incremental tree has certain properties and data that will\\n// be used to add new leaves.\\nstruct BinaryIMTData {\\n uint256 depth; // Depth of the tree (levels - 1).\\n uint256 root; // Root hash of the tree.\\n uint256 numberOfLeaves; // Number of leaves of the tree.\\n mapping(uint256 => uint256) zeroes; // Zero hashes used for empty nodes (level -> zero hash).\\n // The nodes of the subtrees used in the last addition of a leaf (level -> [left node, right node]).\\n mapping(uint256 => uint256[2]) lastSubtrees; // Caching these values is essential to efficient appends.\\n bool useDefaultZeroes;\\n}\\n\\n/// @title Incremental binary Merkle tree.\\n/// @dev The incremental tree allows to calculate the root hash each time a leaf is added, ensuring\\n/// the integrity of the tree.\\nlibrary BinaryIMT {\\n uint8 public constant MAX_DEPTH = 32;\\n uint256 public constant SNARK_SCALAR_FIELD =\\n 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n\\n uint256 public constant Z_0 = 0;\\n uint256 public constant Z_1 = 14744269619966411208579211824598458697587494354926760081771325075741142829156;\\n uint256 public constant Z_2 = 7423237065226347324353380772367382631490014989348495481811164164159255474657;\\n uint256 public constant Z_3 = 11286972368698509976183087595462810875513684078608517520839298933882497716792;\\n uint256 public constant Z_4 = 3607627140608796879659380071776844901612302623152076817094415224584923813162;\\n uint256 public constant Z_5 = 19712377064642672829441595136074946683621277828620209496774504837737984048981;\\n uint256 public constant Z_6 = 20775607673010627194014556968476266066927294572720319469184847051418138353016;\\n uint256 public constant Z_7 = 3396914609616007258851405644437304192397291162432396347162513310381425243293;\\n uint256 public constant Z_8 = 21551820661461729022865262380882070649935529853313286572328683688269863701601;\\n uint256 public constant Z_9 = 6573136701248752079028194407151022595060682063033565181951145966236778420039;\\n uint256 public constant Z_10 = 12413880268183407374852357075976609371175688755676981206018884971008854919922;\\n uint256 public constant Z_11 = 14271763308400718165336499097156975241954733520325982997864342600795471836726;\\n uint256 public constant Z_12 = 20066985985293572387227381049700832219069292839614107140851619262827735677018;\\n uint256 public constant Z_13 = 9394776414966240069580838672673694685292165040808226440647796406499139370960;\\n uint256 public constant Z_14 = 11331146992410411304059858900317123658895005918277453009197229807340014528524;\\n uint256 public constant Z_15 = 15819538789928229930262697811477882737253464456578333862691129291651619515538;\\n uint256 public constant Z_16 = 19217088683336594659449020493828377907203207941212636669271704950158751593251;\\n uint256 public constant Z_17 = 21035245323335827719745544373081896983162834604456827698288649288827293579666;\\n uint256 public constant Z_18 = 6939770416153240137322503476966641397417391950902474480970945462551409848591;\\n uint256 public constant Z_19 = 10941962436777715901943463195175331263348098796018438960955633645115732864202;\\n uint256 public constant Z_20 = 15019797232609675441998260052101280400536945603062888308240081994073687793470;\\n uint256 public constant Z_21 = 11702828337982203149177882813338547876343922920234831094975924378932809409969;\\n uint256 public constant Z_22 = 11217067736778784455593535811108456786943573747466706329920902520905755780395;\\n uint256 public constant Z_23 = 16072238744996205792852194127671441602062027943016727953216607508365787157389;\\n uint256 public constant Z_24 = 17681057402012993898104192736393849603097507831571622013521167331642182653248;\\n uint256 public constant Z_25 = 21694045479371014653083846597424257852691458318143380497809004364947786214945;\\n uint256 public constant Z_26 = 8163447297445169709687354538480474434591144168767135863541048304198280615192;\\n uint256 public constant Z_27 = 14081762237856300239452543304351251708585712948734528663957353575674639038357;\\n uint256 public constant Z_28 = 16619959921569409661790279042024627172199214148318086837362003702249041851090;\\n uint256 public constant Z_29 = 7022159125197495734384997711896547675021391130223237843255817587255104160365;\\n uint256 public constant Z_30 = 4114686047564160449611603615418567457008101555090703535405891656262658644463;\\n uint256 public constant Z_31 = 12549363297364877722388257367377629555213421373705596078299904496781819142130;\\n uint256 public constant Z_32 = 21443572485391568159800782191812935835534334817699172242223315142338162256601;\\n\\n function defaultZero(uint256 index) public pure returns (uint256) {\\n if (index == 0) return Z_0;\\n if (index == 1) return Z_1;\\n if (index == 2) return Z_2;\\n if (index == 3) return Z_3;\\n if (index == 4) return Z_4;\\n if (index == 5) return Z_5;\\n if (index == 6) return Z_6;\\n if (index == 7) return Z_7;\\n if (index == 8) return Z_8;\\n if (index == 9) return Z_9;\\n if (index == 10) return Z_10;\\n if (index == 11) return Z_11;\\n if (index == 12) return Z_12;\\n if (index == 13) return Z_13;\\n if (index == 14) return Z_14;\\n if (index == 15) return Z_15;\\n if (index == 16) return Z_16;\\n if (index == 17) return Z_17;\\n if (index == 18) return Z_18;\\n if (index == 19) return Z_19;\\n if (index == 20) return Z_20;\\n if (index == 21) return Z_21;\\n if (index == 22) return Z_22;\\n if (index == 23) return Z_23;\\n if (index == 24) return Z_24;\\n if (index == 25) return Z_25;\\n if (index == 26) return Z_26;\\n if (index == 27) return Z_27;\\n if (index == 28) return Z_28;\\n if (index == 29) return Z_29;\\n if (index == 30) return Z_30;\\n if (index == 31) return Z_31;\\n if (index == 32) return Z_32;\\n revert(\\\"IncrementalBinaryTree: defaultZero bad index\\\");\\n }\\n\\n /// @dev Initializes a tree.\\n /// @param self: Tree data.\\n /// @param depth: Depth of the tree.\\n /// @param zero: Zero value to be used.\\n function init(BinaryIMTData storage self, uint256 depth, uint256 zero) public {\\n require(zero < SNARK_SCALAR_FIELD, \\\"BinaryIMT: leaf must be < SNARK_SCALAR_FIELD\\\");\\n require(depth > 0 && depth <= MAX_DEPTH, \\\"BinaryIMT: tree depth must be between 1 and 32\\\");\\n\\n self.depth = depth;\\n\\n for (uint8 i = 0; i < depth; ) {\\n self.zeroes[i] = zero;\\n zero = PoseidonT3.hash([zero, zero]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n self.root = zero;\\n }\\n\\n function initWithDefaultZeroes(BinaryIMTData storage self, uint256 depth) public {\\n require(depth > 0 && depth <= MAX_DEPTH, \\\"BinaryIMT: tree depth must be between 1 and 32\\\");\\n\\n self.depth = depth;\\n self.useDefaultZeroes = true;\\n\\n self.root = defaultZero(depth);\\n }\\n\\n /// @dev Inserts a leaf in the tree.\\n /// @param self: Tree data.\\n /// @param leaf: Leaf to be inserted.\\n function insert(BinaryIMTData storage self, uint256 leaf) public returns (uint256) {\\n uint256 depth = self.depth;\\n\\n require(leaf < SNARK_SCALAR_FIELD, \\\"BinaryIMT: leaf must be < SNARK_SCALAR_FIELD\\\");\\n require(self.numberOfLeaves < 2 ** depth, \\\"BinaryIMT: tree is full\\\");\\n\\n uint256 index = self.numberOfLeaves;\\n uint256 hash = leaf;\\n bool useDefaultZeroes = self.useDefaultZeroes;\\n\\n for (uint8 i = 0; i < depth; ) {\\n if (index & 1 == 0) {\\n self.lastSubtrees[i] = [hash, useDefaultZeroes ? defaultZero(i) : self.zeroes[i]];\\n } else {\\n self.lastSubtrees[i][1] = hash;\\n }\\n\\n hash = PoseidonT3.hash(self.lastSubtrees[i]);\\n index >>= 1;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n self.root = hash;\\n self.numberOfLeaves += 1;\\n return hash;\\n }\\n\\n /// @dev Updates a leaf in the tree.\\n /// @param self: Tree data.\\n /// @param leaf: Leaf to be updated.\\n /// @param newLeaf: New leaf.\\n /// @param proofSiblings: Array of the sibling nodes of the proof of membership.\\n /// @param proofPathIndices: Path of the proof of membership.\\n function update(\\n BinaryIMTData storage self,\\n uint256 leaf,\\n uint256 newLeaf,\\n uint256[] calldata proofSiblings,\\n uint8[] calldata proofPathIndices\\n ) public {\\n require(newLeaf != leaf, \\\"BinaryIMT: new leaf cannot be the same as the old one\\\");\\n require(newLeaf < SNARK_SCALAR_FIELD, \\\"BinaryIMT: new leaf must be < SNARK_SCALAR_FIELD\\\");\\n require(verify(self, leaf, proofSiblings, proofPathIndices), \\\"BinaryIMT: leaf is not part of the tree\\\");\\n\\n uint256 depth = self.depth;\\n uint256 hash = newLeaf;\\n uint256 updateIndex;\\n\\n for (uint8 i = 0; i < depth; ) {\\n updateIndex |= uint256(proofPathIndices[i]) << uint256(i);\\n\\n if (proofPathIndices[i] == 0) {\\n if (proofSiblings[i] == self.lastSubtrees[i][1]) {\\n self.lastSubtrees[i][0] = hash;\\n }\\n\\n hash = PoseidonT3.hash([hash, proofSiblings[i]]);\\n } else {\\n if (proofSiblings[i] == self.lastSubtrees[i][0]) {\\n self.lastSubtrees[i][1] = hash;\\n }\\n\\n hash = PoseidonT3.hash([proofSiblings[i], hash]);\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n require(updateIndex < self.numberOfLeaves, \\\"BinaryIMT: leaf index out of range\\\");\\n\\n self.root = hash;\\n }\\n\\n /// @dev Removes a leaf from the tree.\\n /// @param self: Tree data.\\n /// @param leaf: Leaf to be removed.\\n /// @param proofSiblings: Array of the sibling nodes of the proof of membership.\\n /// @param proofPathIndices: Path of the proof of membership.\\n function remove(\\n BinaryIMTData storage self,\\n uint256 leaf,\\n uint256[] calldata proofSiblings,\\n uint8[] calldata proofPathIndices\\n ) public {\\n update(self, leaf, self.useDefaultZeroes ? Z_0 : self.zeroes[0], proofSiblings, proofPathIndices);\\n }\\n\\n /// @dev Verify if the path is correct and the leaf is part of the tree.\\n /// @param self: Tree data.\\n /// @param leaf: Leaf to be removed.\\n /// @param proofSiblings: Array of the sibling nodes of the proof of membership.\\n /// @param proofPathIndices: Path of the proof of membership.\\n /// @return True or false.\\n function verify(\\n BinaryIMTData storage self,\\n uint256 leaf,\\n uint256[] calldata proofSiblings,\\n uint8[] calldata proofPathIndices\\n ) private view returns (bool) {\\n require(leaf < SNARK_SCALAR_FIELD, \\\"BinaryIMT: leaf must be < SNARK_SCALAR_FIELD\\\");\\n uint256 depth = self.depth;\\n require(\\n proofPathIndices.length == depth && proofSiblings.length == depth,\\n \\\"BinaryIMT: length of path is not correct\\\"\\n );\\n\\n uint256 hash = leaf;\\n\\n for (uint8 i = 0; i < depth; ) {\\n require(proofSiblings[i] < SNARK_SCALAR_FIELD, \\\"BinaryIMT: sibling node must be < SNARK_SCALAR_FIELD\\\");\\n\\n require(proofPathIndices[i] == 1 || proofPathIndices[i] == 0, \\\"BinaryIMT: path index is neither 0 nor 1\\\");\\n\\n if (proofPathIndices[i] == 0) {\\n hash = PoseidonT3.hash([hash, proofSiblings[i]]);\\n } else {\\n hash = PoseidonT3.hash([proofSiblings[i], hash]);\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n return hash == self.root;\\n }\\n}\\n\",\"keccak256\":\"0xdc7e7cc2e8176bb76bbd788ae2d50a4e9db13d3256d8b07a695856e073a78586\",\"license\":\"MIT\"},\"poseidon-solidity/PoseidonT3.sol\":{\"content\":\"/// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.0;\\n\\nlibrary PoseidonT3 {\\n uint constant M00 = 0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b;\\n uint constant M01 = 0x2969f27eed31a480b9c36c764379dbca2cc8fdd1415c3dded62940bcde0bd771;\\n uint constant M02 = 0x143021ec686a3f330d5f9e654638065ce6cd79e28c5b3753326244ee65a1b1a7;\\n uint constant M10 = 0x16ed41e13bb9c0c66ae119424fddbcbc9314dc9fdbdeea55d6c64543dc4903e0;\\n uint constant M11 = 0x2e2419f9ec02ec394c9871c832963dc1b89d743c8c7b964029b2311687b1fe23;\\n uint constant M12 = 0x176cc029695ad02582a70eff08a6fd99d057e12e58e7d7b6b16cdfabc8ee2911;\\n\\n // See here for a simplified implementation: https://github.com/vimwitch/poseidon-solidity/blob/e57becdabb65d99fdc586fe1e1e09e7108202d53/contracts/Poseidon.sol#L40\\n // Inspired by: https://github.com/iden3/circomlibjs/blob/v0.0.8/src/poseidon_slow.js\\n function hash(uint[2] memory) public pure returns (uint) {\\n assembly {\\n let F := 21888242871839275222246405745257275088548364400416034343698204186575808495617\\n let M20 := 0x2b90bba00fca0589f617e7dcbfe82e0df706ab640ceb247b791a93b74e36736d\\n let M21 := 0x101071f0032379b697315876690f053d148d4e109f5fb065c8aacc55a0f89bfa\\n let M22 := 0x19a3fc0a56702bf417ba7fee3802593fa644470307043f7773279cd71d25d5e0\\n\\n // load the inputs from memory\\n let state1 := add(mod(mload(0x80), F), 0x00f1445235f2148c5986587169fc1bcd887b08d4d00868df5696fff40956e864)\\n let state2 := add(mod(mload(0xa0), F), 0x08dff3487e8ac99e1f29a058d0fa80b930c728730b7ab36ce879f3890ecf73f5)\\n let scratch0 := mulmod(state1, state1, F)\\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\\n scratch0 := mulmod(state2, state2, F)\\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\\n scratch0 := add(\\n 0x2f27be690fdaee46c3ce28f7532b13c856c35342c84bda6e20966310fadc01d0,\\n add(add(15452833169820924772166449970675545095234312153403844297388521437673434406763, mulmod(state1, M10, F)), mulmod(state2, M20, F))\\n )\\n let scratch1 := add(\\n 0x2b2ae1acf68b7b8d2416bebf3d4f6234b763fe04b8043ee48b8327bebca16cf2,\\n add(add(18674271267752038776579386132900109523609358935013267566297499497165104279117, mulmod(state1, M11, F)), mulmod(state2, M21, F))\\n )\\n let scratch2 := add(\\n 0x0319d062072bef7ecca5eac06f97d4d55952c175ab6b03eae64b44c7dbf11cfa,\\n add(add(14817777843080276494683266178512808687156649753153012854386334860566696099579, mulmod(state1, M12, F)), mulmod(state2, M22, F))\\n )\\n let state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := mulmod(scratch1, scratch1, F)\\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\\n state0 := mulmod(scratch2, scratch2, F)\\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\\n state0 := add(0x28813dcaebaeaa828a376df87af4a63bc8b7bf27ad49c6298ef7b387bf28526d, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x2727673b2ccbc903f181bf38e1c1d40d2033865200c352bc150928adddf9cb78, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x234ec45ca27727c2e74abd2b2a1494cd6efbd43e340587d6b8fb9e31e65cc632, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := mulmod(state1, state1, F)\\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\\n scratch0 := mulmod(state2, state2, F)\\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\\n scratch0 := add(0x15b52534031ae18f7f862cb2cf7cf760ab10a8150a337b1ccd99ff6e8797d428, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0dc8fad6d9e4b35f5ed9a3d186b79ce38e0e8a8d1b58b132d701d4eecf68d1f6, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1bcd95ffc211fbca600f705fad3fb567ea4eb378f62e1fec97805518a47e4d9c, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := mulmod(scratch1, scratch1, F)\\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\\n state0 := mulmod(scratch2, scratch2, F)\\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\\n state0 := add(0x10520b0ab721cadfe9eff81b016fc34dc76da36c2578937817cb978d069de559, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1f6d48149b8e7f7d9b257d8ed5fbbaf42932498075fed0ace88a9eb81f5627f6, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1d9655f652309014d29e00ef35a2089bfff8dc1c816f0dc9ca34bdb5460c8705, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x04df5a56ff95bcafb051f7b1cd43a99ba731ff67e47032058fe3d4185697cc7d, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0672d995f8fff640151b3d290cedaf148690a10a8c8424a7f6ec282b6e4be828, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x099952b414884454b21200d7ffafdd5f0c9a9dcc06f2708e9fc1d8209b5c75b9, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x052cba2255dfd00c7c483143ba8d469448e43586a9b4cd9183fd0e843a6b9fa6, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0b8badee690adb8eb0bd74712b7999af82de55707251ad7716077cb93c464ddc, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x119b1590f13307af5a1ee651020c07c749c15d60683a8050b963d0a8e4b2bdd1, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x03150b7cd6d5d17b2529d36be0f67b832c4acfc884ef4ee5ce15be0bfb4a8d09, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2cc6182c5e14546e3cf1951f173912355374efb83d80898abe69cb317c9ea565, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x005032551e6378c450cfe129a404b3764218cadedac14e2b92d2cd73111bf0f9, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x233237e3289baa34bb147e972ebcb9516469c399fcc069fb88f9da2cc28276b5, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x05c8f4f4ebd4a6e3c980d31674bfbe6323037f21b34ae5a4e80c2d4c24d60280, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0a7b1db13042d396ba05d818a319f25252bcf35ef3aeed91ee1f09b2590fc65b, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2a73b71f9b210cf5b14296572c9d32dbf156e2b086ff47dc5df542365a404ec0, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1ac9b0417abcc9a1935107e9ffc91dc3ec18f2c4dbe7f22976a760bb5c50c460, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x12c0339ae08374823fabb076707ef479269f3e4d6cb104349015ee046dc93fc0, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0b7475b102a165ad7f5b18db4e1e704f52900aa3253baac68246682e56e9a28e, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x037c2849e191ca3edb1c5e49f6e8b8917c843e379366f2ea32ab3aa88d7f8448, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x05a6811f8556f014e92674661e217e9bd5206c5c93a07dc145fdb176a716346f, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x29a795e7d98028946e947b75d54e9f044076e87a7b2883b47b675ef5f38bd66e, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x20439a0c84b322eb45a3857afc18f5826e8c7382c8a1585c507be199981fd22f, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2e0ba8d94d9ecf4a94ec2050c7371ff1bb50f27799a84b6d4a2a6f2a0982c887, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x143fd115ce08fb27ca38eb7cce822b4517822cd2109048d2e6d0ddcca17d71c8, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0c64cbecb1c734b857968dbbdcf813cdf8611659323dbcbfc84323623be9caf1, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x028a305847c683f646fca925c163ff5ae74f348d62c2b670f1426cef9403da53, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2e4ef510ff0b6fda5fa940ab4c4380f26a6bcb64d89427b824d6755b5db9e30c, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0081c95bc43384e663d79270c956ce3b8925b4f6d033b078b96384f50579400e, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2ed5f0c91cbd9749187e2fade687e05ee2491b349c039a0bba8a9f4023a0bb38, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x30509991f88da3504bbf374ed5aae2f03448a22c76234c8c990f01f33a735206, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1c3f20fd55409a53221b7c4d49a356b9f0a1119fb2067b41a7529094424ec6ad, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x10b4e7f3ab5df003049514459b6e18eec46bb2213e8e131e170887b47ddcb96c, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2a1982979c3ff7f43ddd543d891c2abddd80f804c077d775039aa3502e43adef, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1c74ee64f15e1db6feddbead56d6d55dba431ebc396c9af95cad0f1315bd5c91, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x07533ec850ba7f98eab9303cace01b4b9e4f2e8b82708cfa9c2fe45a0ae146a0, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x21576b438e500449a151e4eeaf17b154285c68f42d42c1808a11abf3764c0750, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x2f17c0559b8fe79608ad5ca193d62f10bce8384c815f0906743d6930836d4a9e, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x2d477e3862d07708a79e8aae946170bc9775a4201318474ae665b0b1b7e2730e, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x162f5243967064c390e095577984f291afba2266c38f5abcd89be0f5b2747eab, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2b4cb233ede9ba48264ecd2c8ae50d1ad7a8596a87f29f8a7777a70092393311, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2c8fbcb2dd8573dc1dbaf8f4622854776db2eece6d85c4cf4254e7c35e03b07a, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x1d6f347725e4816af2ff453f0cd56b199e1b61e9f601e9ade5e88db870949da9, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x204b0c397f4ebe71ebc2d8b3df5b913df9e6ac02b68d31324cd49af5c4565529, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0c4cb9dc3c4fd8174f1149b3c63c3c2f9ecb827cd7dc25534ff8fb75bc79c502, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x174ad61a1448c899a25416474f4930301e5c49475279e0639a616ddc45bc7b54, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1a96177bcf4d8d89f759df4ec2f3cde2eaaa28c177cc0fa13a9816d49a38d2ef, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x066d04b24331d71cd0ef8054bc60c4ff05202c126a233c1a8242ace360b8a30a, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2a4c4fc6ec0b0cf52195782871c6dd3b381cc65f72e02ad527037a62aa1bd804, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x13ab2d136ccf37d447e9f2e14a7cedc95e727f8446f6d9d7e55afc01219fd649, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1121552fca26061619d24d843dc82769c1b04fcec26f55194c2e3e869acc6a9a, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x00ef653322b13d6c889bc81715c37d77a6cd267d595c4a8909a5546c7c97cff1, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0e25483e45a665208b261d8ba74051e6400c776d652595d9845aca35d8a397d3, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x29f536dcb9dd7682245264659e15d88e395ac3d4dde92d8c46448db979eeba89, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2a56ef9f2c53febadfda33575dbdbd885a124e2780bbea170e456baace0fa5be, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1c8361c78eb5cf5decfb7a2d17b5c409f2ae2999a46762e8ee416240a8cb9af1, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x151aff5f38b20a0fc0473089aaf0206b83e8e68a764507bfd3d0ab4be74319c5, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x04c6187e41ed881dc1b239c88f7f9d43a9f52fc8c8b6cdd1e76e47615b51f100, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x13b37bd80f4d27fb10d84331f6fb6d534b81c61ed15776449e801b7ddc9c2967, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x01a5c536273c2d9df578bfbd32c17b7a2ce3664c2a52032c9321ceb1c4e8a8e4, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2ab3561834ca73835ad05f5d7acb950b4a9a2c666b9726da832239065b7c3b02, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1d4d8ec291e720db200fe6d686c0d613acaf6af4e95d3bf69f7ed516a597b646, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x041294d2cc484d228f5784fe7919fd2bb925351240a04b711514c9c80b65af1d, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x154ac98e01708c611c4fa715991f004898f57939d126e392042971dd90e81fc6, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0b339d8acca7d4f83eedd84093aef51050b3684c88f8b0b04524563bc6ea4da4, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x0955e49e6610c94254a4f84cfbab344598f0e71eaff4a7dd81ed95b50839c82e, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x06746a6156eba54426b9e22206f15abca9a6f41e6f535c6f3525401ea0654626, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0f18f5a0ecd1423c496f3820c549c27838e5790e2bd0a196ac917c7ff32077fb, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x04f6eeca1751f7308ac59eff5beb261e4bb563583ede7bc92a738223d6f76e13, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2b56973364c4c4f5c1a3ec4da3cdce038811eb116fb3e45bc1768d26fc0b3758, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x123769dd49d5b054dcd76b89804b1bcb8e1392b385716a5d83feb65d437f29ef, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2147b424fc48c80a88ee52b91169aacea989f6446471150994257b2fb01c63e9, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0fdc1f58548b85701a6c5505ea332a29647e6f34ad4243c2ea54ad897cebe54d, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x12373a8251fea004df68abcf0f7786d4bceff28c5dbbe0c3944f685cc0a0b1f2, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x21e4f4ea5f35f85bad7ea52ff742c9e8a642756b6af44203dd8a1f35c1a90035, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x16243916d69d2ca3dfb4722224d4c462b57366492f45e90d8a81934f1bc3b147, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1efbe46dd7a578b4f66f9adbc88b4378abc21566e1a0453ca13a4159cac04ac2, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x07ea5e8537cf5dd08886020e23a7f387d468d5525be66f853b672cc96a88969a, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x05a8c4f9968b8aa3b7b478a30f9a5b63650f19a75e7ce11ca9fe16c0b76c00bc, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x20f057712cc21654fbfe59bd345e8dac3f7818c701b9c7882d9d57b72a32e83f, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x04a12ededa9dfd689672f8c67fee31636dcd8e88d01d49019bd90b33eb33db69, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x27e88d8c15f37dcee44f1e5425a51decbd136ce5091a6767e49ec9544ccd101a, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2feed17b84285ed9b8a5c8c5e95a41f66e096619a7703223176c41ee433de4d1, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1ed7cc76edf45c7c404241420f729cf394e5942911312a0d6972b8bd53aff2b8, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x15742e99b9bfa323157ff8c586f5660eac6783476144cdcadf2874be45466b1a, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1aac285387f65e82c895fc6887ddf40577107454c6ec0317284f033f27d0c785, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x25851c3c845d4790f9ddadbdb6057357832e2e7a49775f71ec75a96554d67c77, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x15a5821565cc2ec2ce78457db197edf353b7ebba2c5523370ddccc3d9f146a67, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2411d57a4813b9980efa7e31a1db5966dcf64f36044277502f15485f28c71727, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x002e6f8d6520cd4713e335b8c0b6d2e647e9a98e12f4cd2558828b5ef6cb4c9b, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2ff7bc8f4380cde997da00b616b0fcd1af8f0e91e2fe1ed7398834609e0315d2, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x00b9831b948525595ee02724471bcd182e9521f6b7bb68f1e93be4febb0d3cbe, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0a2f53768b8ebf6a86913b0e57c04e011ca408648a4743a87d77adbf0c9c3512, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x00248156142fd0373a479f91ff239e960f599ff7e94be69b7f2a290305e1198d, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x171d5620b87bfb1328cf8c02ab3f0c9a397196aa6a542c2350eb512a2b2bcda9, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x170a4f55536f7dc970087c7c10d6fad760c952172dd54dd99d1045e4ec34a808, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x29aba33f799fe66c2ef3134aea04336ecc37e38c1cd211ba482eca17e2dbfae1, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1e9bc179a4fdd758fdd1bb1945088d47e70d114a03f6a0e8b5ba650369e64973, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1dd269799b660fad58f7f4892dfb0b5afeaad869a9c4b44f9c9e1c43bdaf8f09, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x22cdbc8b70117ad1401181d02e15459e7ccd426fe869c7c95d1dd2cb0f24af38, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0ef042e454771c533a9f57a55c503fcefd3150f52ed94a7cd5ba93b9c7dacefd, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x11609e06ad6c8fe2f287f3036037e8851318e8b08a0359a03b304ffca62e8284, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x1166d9e554616dba9e753eea427c17b7fecd58c076dfe42708b08f5b783aa9af, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x2de52989431a859593413026354413db177fbf4cd2ac0b56f855a888357ee466, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x3006eb4ffc7a85819a6da492f3a8ac1df51aee5b17b8e89d74bf01cf5f71e9ad, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2af41fbb61ba8a80fdcf6fff9e3f6f422993fe8f0a4639f962344c8225145086, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x119e684de476155fe5a6b41a8ebc85db8718ab27889e85e781b214bace4827c3, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1835b786e2e8925e188bea59ae363537b51248c23828f047cff784b97b3fd800, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x28201a34c594dfa34d794996c6433a20d152bac2a7905c926c40e285ab32eeb6, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x083efd7a27d1751094e80fefaf78b000864c82eb571187724a761f88c22cc4e7, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0b6f88a3577199526158e61ceea27be811c16df7774dd8519e079564f61fd13b, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x0ec868e6d15e51d9644f66e1d6471a94589511ca00d29e1014390e6ee4254f5b, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2af33e3f866771271ac0c9b3ed2e1142ecd3e74b939cd40d00d937ab84c98591, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x0b520211f904b5e7d09b5d961c6ace7734568c547dd6858b364ce5e47951f178, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0b2d722d0919a1aad8db58f10062a92ea0c56ac4270e822cca228620188a1d40, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1f790d4d7f8cf094d980ceb37c2453e957b54a9991ca38bbe0061d1ed6e562d4, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0171eb95dfbf7d1eaea97cd385f780150885c16235a2a6a8da92ceb01e504233, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x0c2d0e3b5fd57549329bf6885da66b9b790b40defd2c8650762305381b168873, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1162fb28689c27154e5a8228b4e72b377cbcafa589e283c35d3803054407a18d, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2f1459b65dee441b64ad386a91e8310f282c5a92a89e19921623ef8249711bc0, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x1e6ff3216b688c3d996d74367d5cd4c1bc489d46754eb712c243f70d1b53cfbb, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x01ca8be73832b8d0681487d27d157802d741a6f36cdc2a0576881f9326478875, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1f7735706ffe9fc586f976d5bdf223dc680286080b10cea00b9b5de315f9650e, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2522b60f4ea3307640a0c2dce041fba921ac10a3d5f096ef4745ca838285f019, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x23f0bee001b1029d5255075ddc957f833418cad4f52b6c3f8ce16c235572575b, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2bc1ae8b8ddbb81fcaac2d44555ed5685d142633e9df905f66d9401093082d59, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0f9406b8296564a37304507b8dba3ed162371273a07b1fc98011fcd6ad72205f, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x2360a8eb0cc7defa67b72998de90714e17e75b174a52ee4acb126c8cd995f0a8, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x15871a5cddead976804c803cbaef255eb4815a5e96df8b006dcbbc2767f88948, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x193a56766998ee9e0a8652dd2f3b1da0362f4f54f72379544f957ccdeefb420f, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2a394a43934f86982f9be56ff4fab1703b2e63c8ad334834e4309805e777ae0f, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1859954cfeb8695f3e8b635dcb345192892cd11223443ba7b4166e8876c0d142, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x04e1181763050e58013444dbcb99f1902b11bc25d90bbdca408d3819f4fed32b, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0fdb253dee83869d40c335ea64de8c5bb10eb82db08b5e8b1f5e5552bfd05f23, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x058cbe8a9a5027bdaa4efb623adead6275f08686f1c08984a9d7c5bae9b4f1c0, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x1382edce9971e186497eadb1aeb1f52b23b4b83bef023ab0d15228b4cceca59a, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x03464990f045c6ee0819ca51fd11b0be7f61b8eb99f14b77e1e6634601d9e8b5, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x23f7bfc8720dc296fff33b41f98ff83c6fcab4605db2eb5aaa5bc137aeb70a58, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0a59a158e3eec2117e6e94e7f0e9decf18c3ffd5e1531a9219636158bbaf62f2, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x06ec54c80381c052b58bf23b312ffd3ce2c4eba065420af8f4c23ed0075fd07b, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x118872dc832e0eb5476b56648e867ec8b09340f7a7bcb1b4962f0ff9ed1f9d01, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x13d69fa127d834165ad5c7cba7ad59ed52e0b0f0e42d7fea95e1906b520921b1, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x169a177f63ea681270b1c6877a73d21bde143942fb71dc55fd8a49f19f10c77b, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x04ef51591c6ead97ef42f287adce40d93abeb032b922f66ffb7e9a5a7450544d, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x256e175a1dc079390ecd7ca703fb2e3b19ec61805d4f03ced5f45ee6dd0f69ec, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x30102d28636abd5fe5f2af412ff6004f75cc360d3205dd2da002813d3e2ceeb2, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x10998e42dfcd3bbf1c0714bc73eb1bf40443a3fa99bef4a31fd31be182fcc792, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x193edd8e9fcf3d7625fa7d24b598a1d89f3362eaf4d582efecad76f879e36860, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x18168afd34f2d915d0368ce80b7b3347d1c7a561ce611425f2664d7aa51f0b5d, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x29383c01ebd3b6ab0c017656ebe658b6a328ec77bc33626e29e2e95b33ea6111, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x10646d2f2603de39a1f4ae5e7771a64a702db6e86fb76ab600bf573f9010c711, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0beb5e07d1b27145f575f1395a55bf132f90c25b40da7b3864d0242dcb1117fb, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x16d685252078c133dc0d3ecad62b5c8830f95bb2e54b59abdffbf018d96fa336, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x0a6abd1d833938f33c74154e0404b4b40a555bbbec21ddfafd672dd62047f01a, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1a679f5d36eb7b5c8ea12a4c2dedc8feb12dffeec450317270a6f19b34cf1860, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x0980fb233bd456c23974d50e0ebfde4726a423eada4e8f6ffbc7592e3f1b93d6, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x161b42232e61b84cbf1810af93a38fc0cece3d5628c9282003ebacb5c312c72b, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0ada10a90c7f0520950f7d47a60d5e6a493f09787f1564e5d09203db47de1a0b, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1a730d372310ba82320345a29ac4238ed3f07a8a2b4e121bb50ddb9af407f451, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2c8120f268ef054f817064c369dda7ea908377feaba5c4dffbda10ef58e8c556, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1c7c8824f758753fa57c00789c684217b930e95313bcb73e6e7b8649a4968f70, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2cd9ed31f5f8691c8e39e4077a74faa0f400ad8b491eb3f7b47b27fa3fd1cf77, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x23ff4f9d46813457cf60d92f57618399a5e022ac321ca550854ae23918a22eea, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x09945a5d147a4f66ceece6405dddd9d0af5a2c5103529407dff1ea58f180426d, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x188d9c528025d4c2b67660c6b771b90f7c7da6eaa29d3f268a6dd223ec6fc630, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x3050e37996596b7f81f68311431d8734dba7d926d3633595e0c0d8ddf4f0f47f, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x15af1169396830a91600ca8102c35c426ceae5461e3f95d89d829518d30afd78, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1da6d09885432ea9a06d9f37f873d985dae933e351466b2904284da3320d8acc, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2796ea90d269af29f5f8acf33921124e4e4fad3dbe658945e546ee411ddaa9cb, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x202d7dd1da0f6b4b0325c8b3307742f01e15612ec8e9304a7cb0319e01d32d60, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x096d6790d05bb759156a952ba263d672a2d7f9c788f4c831a29dace4c0f8be5f, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x054efa1f65b0fce283808965275d877b438da23ce5b13e1963798cb1447d25a4, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1b162f83d917e93edb3308c29802deb9d8aa690113b2e14864ccf6e18e4165f1, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x21e5241e12564dd6fd9f1cdd2a0de39eedfefc1466cc568ec5ceb745a0506edc, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := mulmod(scratch1, scratch1, F)\\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\\n state0 := mulmod(scratch2, scratch2, F)\\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\\n state0 := add(0x1cfb5662e8cf5ac9226a80ee17b36abecb73ab5f87e161927b4349e10e4bdf08, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0f21177e302a771bbae6d8d1ecb373b62c99af346220ac0129c53f666eb24100, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1671522374606992affb0dd7f71b12bec4236aede6290546bcef7e1f515c2320, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := mulmod(state1, state1, F)\\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\\n scratch0 := mulmod(state2, state2, F)\\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\\n scratch0 := add(0x0fa3ec5b9488259c2eb4cf24501bfad9be2ec9e42c5cc8ccd419d2a692cad870, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x193c0e04e0bd298357cb266c1506080ed36edce85c648cc085e8c57b1ab54bba, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x102adf8ef74735a27e9128306dcbc3c99f6f7291cd406578ce14ea2adaba68f8, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := mulmod(scratch1, scratch1, F)\\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\\n state0 := mulmod(scratch2, scratch2, F)\\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\\n state0 := add(0x0fe0af7858e49859e2a54d6f1ad945b1316aa24bfbdd23ae40a6d0cb70c3eab1, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x216f6717bbc7dedb08536a2220843f4e2da5f1daa9ebdefde8a5ea7344798d22, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1da55cc900f0d21f4a3e694391918a1b3c23b2ac773c6b3ef88e2e4228325161, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := mulmod(state1, state1, F)\\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\\n scratch0 := mulmod(state2, state2, F)\\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\\n\\n mstore(0x0, mod(add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)), F))\\n\\n return(0, 0x20)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0102caa303bbc6690508f3615604f7730789ed990058c9513a87ccb30e4835be\",\"license\":\"MIT\"}},\"version\":1}",
"bytecode": "0x612e3f610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061025d5760003560e01c806365ad985e11610150578063b1849a1a116100cd578063c6675bbf11610091578063c6675bbf146106d9578063c7fadc67146106f7578063ccbad17414610715578063d2aa5c6214610733578063eb095a7d14610751578063f49babe61461076f5761025d565b8063b1849a1a14610638578063b410396a14610656578063b5f35eb914610674578063c0c5bf6714610692578063c2ad38d4146106b05761025d565b80639bf21071116101145780639bf21071146105a25780639cda4774146105c0578063a27154ba146105de578063a3205067146105fc578063af9d047c1461061a5761025d565b806365ad985e1461050c57806365f7bec31461052a5780638836ccf61461054857806389d0e9321461056657806394804215146105845761025d565b806344f9e1ac116101de578063583f8af4116101a2578063583f8af41461046b5780635da707d4146104895780635fcde067146104a757806362cff85e146104c557806364048bf2146104ee5761025d565b806344f9e1ac146103d557806352be1fb8146103f357806354f5a9011461041157806355005f761461042f578063565b427e1461044d5761025d565b806325c2cd121161022557806325c2cd121461033457806330314fc014610352578063309ec3c31461037057806334a84bb41461038e5780633994a957146103b75761025d565b80631150554414610262578063143dc3831461028057806314d8c626146102bd57806318f18fb1146102e65780631ddbea0014610316575b600080fd5b61026a61078d565b6040516102779190611fca565b60405180910390f35b81801561028c57600080fd5b506102a760048036038101906102a29190612051565b6107b1565b6040516102b49190611fca565b60405180910390f35b8180156102c957600080fd5b506102e460048036038101906102df9190612051565b610a24565b005b61030060048036038101906102fb9190612091565b610ab2565b60405161030d9190611fca565b60405180910390f35b61031e611104565b60405161032b9190611fca565b60405180910390f35b61033c611128565b6040516103499190611fca565b60405180910390f35b61035a61114c565b6040516103679190611fca565b60405180910390f35b610378611170565b6040516103859190611fca565b60405180910390f35b81801561039a57600080fd5b506103b560048036038101906103b091906120be565b611194565b005b6103bf611325565b6040516103cc9190611fca565b60405180910390f35b6103dd611349565b6040516103ea9190611fca565b60405180910390f35b6103fb61136d565b6040516104089190611fca565b60405180910390f35b610419611391565b6040516104269190611fca565b60405180910390f35b6104376113b5565b6040516104449190611fca565b60405180910390f35b6104556113d9565b6040516104629190611fca565b60405180910390f35b6104736113fd565b6040516104809190611fca565b60405180910390f35b610491611421565b60405161049e9190611fca565b60405180910390f35b6104af611445565b6040516104bc9190611fca565b60405180910390f35b8180156104d157600080fd5b506104ec60048036038101906104e791906121cc565b611469565b005b6104f66114b3565b6040516105039190611fca565b60405180910390f35b6105146114d7565b6040516105219190611fca565b60405180910390f35b6105326114dc565b60405161053f9190611fca565b60405180910390f35b610550611500565b60405161055d9190611fca565b60405180910390f35b61056e611524565b60405161057b9190611fca565b60405180910390f35b61058c611548565b6040516105999190611fca565b60405180910390f35b6105aa61156c565b6040516105b79190611fca565b60405180910390f35b6105c8611590565b6040516105d59190611fca565b60405180910390f35b6105e66115b4565b6040516105f3919061228f565b60405180910390f35b6106046115b9565b6040516106119190611fca565b60405180910390f35b6106226115dd565b60405161062f9190611fca565b60405180910390f35b610640611601565b60405161064d9190611fca565b60405180910390f35b61065e611625565b60405161066b9190611fca565b60405180910390f35b61067c611649565b6040516106899190611fca565b60405180910390f35b61069a61166d565b6040516106a79190611fca565b60405180910390f35b8180156106bc57600080fd5b506106d760048036038101906106d291906122aa565b611691565b005b6106e1611ad3565b6040516106ee9190611fca565b60405180910390f35b6106ff611af7565b60405161070c9190611fca565b60405180910390f35b61071d611b1b565b60405161072a9190611fca565b60405180910390f35b61073b611b3f565b6040516107489190611fca565b60405180910390f35b610759611b63565b6040516107669190611fca565b60405180910390f35b610777611b87565b6040516107849190611fca565b60405180910390f35b7f120c58f143d491e95902f7f5277778a2e0ad5168f6add75669932630ce61151881565b600080836000015490507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001831061081d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610814906123e9565b60405180910390fd5b80600261082a919061256b565b84600201541061086f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086690612602565b60405180910390fd5b600084600201549050600084905060008660050160009054906101000a900460ff16905060005b848160ff1610156109f1576000600185160361091c576040518060400160405280848152602001836108e0578960030160008460ff168152602001908152602001600020546108ed565b6108ec8360ff16610ab2565b5b8152508860040160008360ff168152602001908152602001600020906002610916929190611f54565b5061094e565b828860040160008360ff16815260200190815260200160002060016002811061094857610947612622565b5b01819055505b73beeeAcde37Bce9011326137a49Bd5CA8153E9FCD63561558fe8960040160008460ff1681526020019081526020016000206040518263ffffffff1660e01b815260040161099c9190612747565b602060405180830381865af41580156109b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dd9190612777565b9250600184901c9350806001019050610896565b508187600101819055506001876002016000828254610a1091906127a4565b925050819055508194505050505092915050565b600081118015610a385750602060ff168111155b610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e9061286c565b60405180910390fd5b80826000018190555060018260050160006101000a81548160ff021916908315150217905550610aa681610ab2565b82600101819055505050565b6000808203610ac457600090506110ff565b60018203610af4577f2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b6486490506110ff565b60028203610b24577f1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e190506110ff565b60038203610b54577f18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d23890506110ff565b60048203610b84577f07f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a90506110ff565b60058203610bb4577f2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f5590506110ff565b60068203610be4577f2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d7890506110ff565b60078203610c14577f078295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d90506110ff565b60088203610c44577f2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc6190506110ff565b60098203610c74577f0e884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd74790506110ff565b600a8203610ca4577f1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af290506110ff565b600b8203610cd4577f1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d763690506110ff565b600c8203610d04577f2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a90506110ff565b600d8203610d34577f14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd090506110ff565b600e8203610d64577f190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c90506110ff565b600f8203610d94577f22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c9290506110ff565b60108203610dc4577f2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba732390506110ff565b60118203610df4577f2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b99290506110ff565b60128203610e24577f0f57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f90506110ff565b60138203610e54577f1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca90506110ff565b60148203610e84577f2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e90506110ff565b60158203610eb4577f19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b190506110ff565b60168203610ee4577f18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b90506110ff565b60178203610f14577f2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d90506110ff565b60188203610f44577f27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed54090506110ff565b60198203610f74577f2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae2190506110ff565b601a8203610fa4577f120c58f143d491e95902f7f5277778a2e0ad5168f6add75669932630ce61151890506110ff565b601b8203610fd4577f1f21feb70d3f21b07bf853d5e5db03071ec495a0a565a21da2d665d27948379590506110ff565b601c8203611004577f24be905fa71335e14c638cc0f66a8623a826e768068a9e968bb1a1dde18a72d290506110ff565b601d8203611034577f0f8666b62ed17491c50ceadead57d4cd597ef3821d65c328744c74e553dac26d90506110ff565b601e8203611064577f0918d46bf52d98b034413f4a1a1c41594e7a7a3f6ae08cb43d1a2a230e1959ef90506110ff565b601f8203611094577f1bbeb01b4c479ecde76917645e404dfa2e26f90d0afc5a65128513ad375c5ff290506110ff565b602082036110c4577f2f68a1c58e257e42a17a6c61dff5551ed560b9922ab119d5ac8e184c9734ead990506110ff565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f6906128fe565b60405180910390fd5b919050565b7f2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d81565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181565b7f18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b81565b7f2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b99281565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181106111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed906123e9565b60405180910390fd5b60008211801561120a5750602060ff168211155b611249576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112409061286c565b60405180910390fd5b81836000018190555060005b828160ff16101561131657818460030160008360ff1681526020019081526020016000208190555073beeeAcde37Bce9011326137a49Bd5CA8153E9FCD63561558fe6040518060400160405280858152602001858152506040518263ffffffff1660e01b81526004016112c89190612997565b602060405180830381865af41580156112e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113099190612777565b9150806001019050611255565b50808360010181905550505050565b7f2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae2181565b7f24be905fa71335e14c638cc0f66a8623a826e768068a9e968bb1a1dde18a72d281565b7f1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e181565b7f14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd081565b7f0f57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f81565b7f2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d7881565b7f2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc6181565b7f27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed54081565b7f078295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d81565b6114ab86868860050160009054906101000a900460ff1661149f57886003016000808152602001908152602001600020546114a2565b60005b87878787611691565b505050505050565b7f1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca81565b600081565b7f190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c81565b7f18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d23881565b7f2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba732381565b7f0e884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd74781565b7f2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a81565b7f0f8666b62ed17491c50ceadead57d4cd597ef3821d65c328744c74e553dac26d81565b602081565b7f22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c9281565b7f0918d46bf52d98b034413f4a1a1c41594e7a7a3f6ae08cb43d1a2a230e1959ef81565b7f19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b181565b7f1f21feb70d3f21b07bf853d5e5db03071ec495a0a565a21da2d665d27948379581565b7f2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e81565b7f2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f5581565b8585036116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca90612a24565b60405180910390fd5b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018510611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c90612ab6565b60405180910390fd5b611743878786868686611bab565b611782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177990612b48565b60405180910390fd5b6000876000015490506000869050600080600090505b838160ff161015611a77578060ff1686868360ff168181106117bd576117bc612622565b5b90506020020160208101906117d29190612b94565b60ff16901b82179150600086868360ff168181106117f3576117f2612622565b5b90506020020160208101906118089190612b94565b60ff1603611940578a60040160008260ff16815260200190815260200160002060016002811061183b5761183a612622565b5b015488888360ff1681811061185357611852612622565b5b905060200201350361189157828b60040160008360ff16815260200190815260200160002060006002811061188b5761188a612622565b5b01819055505b73beeeAcde37Bce9011326137a49Bd5CA8153E9FCD63561558fe60405180604001604052808681526020018b8b8660ff168181106118d2576118d1612622565b5b905060200201358152506040518263ffffffff1660e01b81526004016118f89190612997565b602060405180830381865af4158015611915573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119399190612777565b9250611a6c565b8a60040160008260ff16815260200190815260200160002060006002811061196b5761196a612622565b5b015488888360ff1681811061198357611982612622565b5b90506020020135036119c157828b60040160008360ff1681526020019081526020016000206001600281106119bb576119ba612622565b5b01819055505b73beeeAcde37Bce9011326137a49Bd5CA8153E9FCD63561558fe60405180604001604052808b8b8660ff168181106119fc576119fb612622565b5b905060200201358152602001868152506040518263ffffffff1660e01b8152600401611a289190612997565b602060405180830381865af4158015611a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a699190612777565b92505b806001019050611798565b5089600201548110611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab590612c33565b60405180910390fd5b818a6001018190555050505050505050505050565b7f07f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a81565b7f1bbeb01b4c479ecde76917645e404dfa2e26f90d0afc5a65128513ad375c5ff281565b7f2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b6486481565b7f1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d763681565b7f1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af281565b7f2f68a1c58e257e42a17a6c61dff5551ed560b9922ab119d5ac8e184c9734ead981565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018610611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c06906123e9565b60405180910390fd5b6000876000015490508084849050148015611c2c57508086869050145b611c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6290612cc5565b60405180910390fd5b600087905060005b828160ff161015611f3e577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188888360ff16818110611cb557611cb4612622565b5b9050602002013510611cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf390612d57565b60405180910390fd5b600186868360ff16818110611d1457611d13612622565b5b9050602002016020810190611d299190612b94565b60ff161480611d655750600086868360ff16818110611d4b57611d4a612622565b5b9050602002016020810190611d609190612b94565b60ff16145b611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b90612de9565b60405180910390fd5b600086868360ff16818110611dbc57611dbb612622565b5b9050602002016020810190611dd19190612b94565b60ff1603611e885773beeeAcde37Bce9011326137a49Bd5CA8153E9FCD63561558fe60405180604001604052808581526020018b8b8660ff16818110611e1a57611e19612622565b5b905060200201358152506040518263ffffffff1660e01b8152600401611e409190612997565b602060405180830381865af4158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e819190612777565b9150611f33565b73beeeAcde37Bce9011326137a49Bd5CA8153E9FCD63561558fe60405180604001604052808b8b8660ff16818110611ec357611ec2612622565b5b905060200201358152602001858152506040518263ffffffff1660e01b8152600401611eef9190612997565b602060405180830381865af4158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f309190612777565b91505b806001019050611c73565b5088600101548114925050509695505050505050565b8260028101928215611f83579160200282015b82811115611f82578251825591602001919060010190611f67565b5b509050611f909190611f94565b5090565b5b80821115611fad576000816000905550600101611f95565b5090565b6000819050919050565b611fc481611fb1565b82525050565b6000602082019050611fdf6000830184611fbb565b92915050565b600080fd5b600080fd5b6000819050919050565b61200281611fef565b811461200d57600080fd5b50565b60008135905061201f81611ff9565b92915050565b61202e81611fb1565b811461203957600080fd5b50565b60008135905061204b81612025565b92915050565b6000806040838503121561206857612067611fe5565b5b600061207685828601612010565b92505060206120878582860161203c565b9150509250929050565b6000602082840312156120a7576120a6611fe5565b5b60006120b58482850161203c565b91505092915050565b6000806000606084860312156120d7576120d6611fe5565b5b60006120e586828701612010565b93505060206120f68682870161203c565b92505060406121078682870161203c565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f84011261213657612135612111565b5b8235905067ffffffffffffffff81111561215357612152612116565b5b60208301915083602082028301111561216f5761216e61211b565b5b9250929050565b60008083601f84011261218c5761218b612111565b5b8235905067ffffffffffffffff8111156121a9576121a8612116565b5b6020830191508360208202830111156121c5576121c461211b565b5b9250929050565b600080600080600080608087890312156121e9576121e8611fe5565b5b60006121f789828a01612010565b965050602061220889828a0161203c565b955050604087013567ffffffffffffffff81111561222957612228611fea565b5b61223589828a01612120565b9450945050606087013567ffffffffffffffff81111561225857612257611fea565b5b61226489828a01612176565b92509250509295509295509295565b600060ff82169050919050565b61228981612273565b82525050565b60006020820190506122a46000830184612280565b92915050565b600080600080600080600060a0888a0312156122c9576122c8611fe5565b5b60006122d78a828b01612010565b97505060206122e88a828b0161203c565b96505060406122f98a828b0161203c565b955050606088013567ffffffffffffffff81111561231a57612319611fea565b5b6123268a828b01612120565b9450945050608088013567ffffffffffffffff81111561234957612348611fea565b5b6123558a828b01612176565b925092505092959891949750929550565b600082825260208201905092915050565b7f42696e617279494d543a206c656166206d757374206265203c20534e41524b5f60008201527f5343414c41525f4649454c440000000000000000000000000000000000000000602082015250565b60006123d3602c83612366565b91506123de82612377565b604082019050919050565b60006020820190508181036000830152612402816123c6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561248f5780860481111561246b5761246a612409565b5b600185161561247a5780820291505b808102905061248885612438565b945061244f565b94509492505050565b6000826124a85760019050612564565b816124b65760009050612564565b81600181146124cc57600281146124d657612505565b6001915050612564565b60ff8411156124e8576124e7612409565b5b8360020a9150848211156124ff576124fe612409565b5b50612564565b5060208310610133831016604e8410600b841016171561253a5782820a90508381111561253557612534612409565b5b612564565b6125478484846001612445565b9250905081840481111561255e5761255d612409565b5b81810290505b9392505050565b600061257682611fb1565b915061258183611fb1565b92506125ae7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612498565b905092915050565b7f42696e617279494d543a20747265652069732066756c6c000000000000000000600082015250565b60006125ec601783612366565b91506125f7826125b6565b602082019050919050565b6000602082019050818103600083015261261b816125df565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060029050919050565b600081905092915050565b6000819050919050565b61267a81611fb1565b82525050565b600061268c8383612671565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b60006126c26126bd83612698565b6126a5565b9050919050565b60006126d582546126af565b9050919050565b6000600182019050919050565b6126f281612651565b6126fc818461265c565b925061270782612667565b8060005b8381101561273f5761271c826126c9565b6127268782612680565b9650612731836126dc565b92505060018101905061270b565b505050505050565b600060408201905061275c60008301846126e9565b92915050565b60008151905061277181612025565b92915050565b60006020828403121561278d5761278c611fe5565b5b600061279b84828501612762565b91505092915050565b60006127af82611fb1565b91506127ba83611fb1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127ef576127ee612409565b5b828201905092915050565b7f42696e617279494d543a2074726565206465707468206d75737420626520626560008201527f747765656e203120616e64203332000000000000000000000000000000000000602082015250565b6000612856602e83612366565b9150612861826127fa565b604082019050919050565b6000602082019050818103600083015261288581612849565b9050919050565b7f496e6372656d656e74616c42696e617279547265653a2064656661756c745a6560008201527f726f2062616420696e6465780000000000000000000000000000000000000000602082015250565b60006128e8602c83612366565b91506128f38261288c565b604082019050919050565b60006020820190508181036000830152612917816128db565b9050919050565b600060029050919050565b6000819050919050565b6000602082019050919050565b6129498161291e565b612953818461265c565b925061295e82612929565b8060005b8381101561298f5781516129768782612680565b965061298183612933565b925050600181019050612962565b505050505050565b60006040820190506129ac6000830184612940565b92915050565b7f42696e617279494d543a206e6577206c6561662063616e6e6f7420626520746860008201527f652073616d6520617320746865206f6c64206f6e650000000000000000000000602082015250565b6000612a0e603583612366565b9150612a19826129b2565b604082019050919050565b60006020820190508181036000830152612a3d81612a01565b9050919050565b7f42696e617279494d543a206e6577206c656166206d757374206265203c20534e60008201527f41524b5f5343414c41525f4649454c4400000000000000000000000000000000602082015250565b6000612aa0603083612366565b9150612aab82612a44565b604082019050919050565b60006020820190508181036000830152612acf81612a93565b9050919050565b7f42696e617279494d543a206c656166206973206e6f742070617274206f66207460008201527f6865207472656500000000000000000000000000000000000000000000000000602082015250565b6000612b32602783612366565b9150612b3d82612ad6565b604082019050919050565b60006020820190508181036000830152612b6181612b25565b9050919050565b612b7181612273565b8114612b7c57600080fd5b50565b600081359050612b8e81612b68565b92915050565b600060208284031215612baa57612ba9611fe5565b5b6000612bb884828501612b7f565b91505092915050565b7f42696e617279494d543a206c65616620696e646578206f7574206f662072616e60008201527f6765000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c1d602283612366565b9150612c2882612bc1565b604082019050919050565b60006020820190508181036000830152612c4c81612c10565b9050919050565b7f42696e617279494d543a206c656e677468206f662070617468206973206e6f7460008201527f20636f7272656374000000000000000000000000000000000000000000000000602082015250565b6000612caf602883612366565b9150612cba82612c53565b604082019050919050565b60006020820190508181036000830152612cde81612ca2565b9050919050565b7f42696e617279494d543a207369626c696e67206e6f6465206d7573742062652060008201527f3c20534e41524b5f5343414c41525f4649454c44000000000000000000000000602082015250565b6000612d41603483612366565b9150612d4c82612ce5565b604082019050919050565b60006020820190508181036000830152612d7081612d34565b9050919050565b7f42696e617279494d543a207061746820696e646578206973206e65697468657260008201527f2030206e6f722031000000000000000000000000000000000000000000000000602082015250565b6000612dd3602883612366565b9150612dde82612d77565b604082019050919050565b60006020820190508181036000830152612e0281612dc6565b905091905056fea2646970667358221220589cbf72cc2d84eab9c18913d1987756da4f6f0cf670db3e3b48633df0cb1f5764736f6c634300080f0033",
"deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361061025d5760003560e01c806365ad985e11610150578063b1849a1a116100cd578063c6675bbf11610091578063c6675bbf146106d9578063c7fadc67146106f7578063ccbad17414610715578063d2aa5c6214610733578063eb095a7d14610751578063f49babe61461076f5761025d565b8063b1849a1a14610638578063b410396a14610656578063b5f35eb914610674578063c0c5bf6714610692578063c2ad38d4146106b05761025d565b80639bf21071116101145780639bf21071146105a25780639cda4774146105c0578063a27154ba146105de578063a3205067146105fc578063af9d047c1461061a5761025d565b806365ad985e1461050c57806365f7bec31461052a5780638836ccf61461054857806389d0e9321461056657806394804215146105845761025d565b806344f9e1ac116101de578063583f8af4116101a2578063583f8af41461046b5780635da707d4146104895780635fcde067146104a757806362cff85e146104c557806364048bf2146104ee5761025d565b806344f9e1ac146103d557806352be1fb8146103f357806354f5a9011461041157806355005f761461042f578063565b427e1461044d5761025d565b806325c2cd121161022557806325c2cd121461033457806330314fc014610352578063309ec3c31461037057806334a84bb41461038e5780633994a957146103b75761025d565b80631150554414610262578063143dc3831461028057806314d8c626146102bd57806318f18fb1146102e65780631ddbea0014610316575b600080fd5b61026a61078d565b6040516102779190611fca565b60405180910390f35b81801561028c57600080fd5b506102a760048036038101906102a29190612051565b6107b1565b6040516102b49190611fca565b60405180910390f35b8180156102c957600080fd5b506102e460048036038101906102df9190612051565b610a24565b005b61030060048036038101906102fb9190612091565b610ab2565b60405161030d9190611fca565b60405180910390f35b61031e611104565b60405161032b9190611fca565b60405180910390f35b61033c611128565b6040516103499190611fca565b60405180910390f35b61035a61114c565b6040516103679190611fca565b60405180910390f35b610378611170565b6040516103859190611fca565b60405180910390f35b81801561039a57600080fd5b506103b560048036038101906103b091906120be565b611194565b005b6103bf611325565b6040516103cc9190611fca565b60405180910390f35b6103dd611349565b6040516103ea9190611fca565b60405180910390f35b6103fb61136d565b6040516104089190611fca565b60405180910390f35b610419611391565b6040516104269190611fca565b60405180910390f35b6104376113b5565b6040516104449190611fca565b60405180910390f35b6104556113d9565b6040516104629190611fca565b60405180910390f35b6104736113fd565b6040516104809190611fca565b60405180910390f35b610491611421565b60405161049e9190611fca565b60405180910390f35b6104af611445565b6040516104bc9190611fca565b60405180910390f35b8180156104d157600080fd5b506104ec60048036038101906104e791906121cc565b611469565b005b6104f66114b3565b6040516105039190611fca565b60405180910390f35b6105146114d7565b6040516105219190611fca565b60405180910390f35b6105326114dc565b60405161053f9190611fca565b60405180910390f35b610550611500565b60405161055d9190611fca565b60405180910390f35b61056e611524565b60405161057b9190611fca565b60405180910390f35b61058c611548565b6040516105999190611fca565b60405180910390f35b6105aa61156c565b6040516105b79190611fca565b60405180910390f35b6105c8611590565b6040516105d59190611fca565b60405180910390f35b6105e66115b4565b6040516105f3919061228f565b60405180910390f35b6106046115b9565b6040516106119190611fca565b60405180910390f35b6106226115dd565b60405161062f9190611fca565b60405180910390f35b610640611601565b60405161064d9190611fca565b60405180910390f35b61065e611625565b60405161066b9190611fca565b60405180910390f35b61067c611649565b6040516106899190611fca565b60405180910390f35b61069a61166d565b6040516106a79190611fca565b60405180910390f35b8180156106bc57600080fd5b506106d760048036038101906106d291906122aa565b611691565b005b6106e1611ad3565b6040516106ee9190611fca565b60405180910390f35b6106ff611af7565b60405161070c9190611fca565b60405180910390f35b61071d611b1b565b60405161072a9190611fca565b60405180910390f35b61073b611b3f565b6040516107489190611fca565b60405180910390f35b610759611b63565b6040516107669190611fca565b60405180910390f35b610777611b87565b6040516107849190611fca565b60405180910390f35b7f120c58f143d491e95902f7f5277778a2e0ad5168f6add75669932630ce61151881565b600080836000015490507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001831061081d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610814906123e9565b60405180910390fd5b80600261082a919061256b565b84600201541061086f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086690612602565b60405180910390fd5b600084600201549050600084905060008660050160009054906101000a900460ff16905060005b848160ff1610156109f1576000600185160361091c576040518060400160405280848152602001836108e0578960030160008460ff168152602001908152602001600020546108ed565b6108ec8360ff16610ab2565b5b8152508860040160008360ff168152602001908152602001600020906002610916929190611f54565b5061094e565b828860040160008360ff16815260200190815260200160002060016002811061094857610947612622565b5b01819055505b73__$75f79a42d9bcbdbb69ad79ebd80f556f39$__63561558fe8960040160008460ff1681526020019081526020016000206040518263ffffffff1660e01b815260040161099c9190612747565b602060405180830381865af41580156109b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dd9190612777565b9250600184901c9350806001019050610896565b508187600101819055506001876002016000828254610a1091906127a4565b925050819055508194505050505092915050565b600081118015610a385750602060ff168111155b610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e9061286c565b60405180910390fd5b80826000018190555060018260050160006101000a81548160ff021916908315150217905550610aa681610ab2565b82600101819055505050565b6000808203610ac457600090506110ff565b60018203610af4577f2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b6486490506110ff565b60028203610b24577f1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e190506110ff565b60038203610b54577f18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d23890506110ff565b60048203610b84577f07f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a90506110ff565b60058203610bb4577f2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f5590506110ff565b60068203610be4577f2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d7890506110ff565b60078203610c14577f078295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d90506110ff565b60088203610c44577f2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc6190506110ff565b60098203610c74577f0e884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd74790506110ff565b600a8203610ca4577f1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af290506110ff565b600b8203610cd4577f1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d763690506110ff565b600c8203610d04577f2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a90506110ff565b600d8203610d34577f14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd090506110ff565b600e8203610d64577f190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c90506110ff565b600f8203610d94577f22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c9290506110ff565b60108203610dc4577f2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba732390506110ff565b60118203610df4577f2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b99290506110ff565b60128203610e24577f0f57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f90506110ff565b60138203610e54577f1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca90506110ff565b60148203610e84577f2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e90506110ff565b60158203610eb4577f19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b190506110ff565b60168203610ee4577f18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b90506110ff565b60178203610f14577f2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d90506110ff565b60188203610f44577f27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed54090506110ff565b60198203610f74577f2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae2190506110ff565b601a8203610fa4577f120c58f143d491e95902f7f5277778a2e0ad5168f6add75669932630ce61151890506110ff565b601b8203610fd4577f1f21feb70d3f21b07bf853d5e5db03071ec495a0a565a21da2d665d27948379590506110ff565b601c8203611004577f24be905fa71335e14c638cc0f66a8623a826e768068a9e968bb1a1dde18a72d290506110ff565b601d8203611034577f0f8666b62ed17491c50ceadead57d4cd597ef3821d65c328744c74e553dac26d90506110ff565b601e8203611064577f0918d46bf52d98b034413f4a1a1c41594e7a7a3f6ae08cb43d1a2a230e1959ef90506110ff565b601f8203611094577f1bbeb01b4c479ecde76917645e404dfa2e26f90d0afc5a65128513ad375c5ff290506110ff565b602082036110c4577f2f68a1c58e257e42a17a6c61dff5551ed560b9922ab119d5ac8e184c9734ead990506110ff565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f6906128fe565b60405180910390fd5b919050565b7f2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d81565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181565b7f18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b81565b7f2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b99281565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181106111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed906123e9565b60405180910390fd5b60008211801561120a5750602060ff168211155b611249576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112409061286c565b60405180910390fd5b81836000018190555060005b828160ff16101561131657818460030160008360ff1681526020019081526020016000208190555073__$75f79a42d9bcbdbb69ad79ebd80f556f39$__63561558fe6040518060400160405280858152602001858152506040518263ffffffff1660e01b81526004016112c89190612997565b602060405180830381865af41580156112e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113099190612777565b9150806001019050611255565b50808360010181905550505050565b7f2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae2181565b7f24be905fa71335e14c638cc0f66a8623a826e768068a9e968bb1a1dde18a72d281565b7f1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e181565b7f14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd081565b7f0f57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f81565b7f2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d7881565b7f2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc6181565b7f27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed54081565b7f078295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d81565b6114ab86868860050160009054906101000a900460ff1661149f57886003016000808152602001908152602001600020546114a2565b60005b87878787611691565b505050505050565b7f1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca81565b600081565b7f190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c81565b7f18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d23881565b7f2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba732381565b7f0e884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd74781565b7f2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a81565b7f0f8666b62ed17491c50ceadead57d4cd597ef3821d65c328744c74e553dac26d81565b602081565b7f22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c9281565b7f0918d46bf52d98b034413f4a1a1c41594e7a7a3f6ae08cb43d1a2a230e1959ef81565b7f19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b181565b7f1f21feb70d3f21b07bf853d5e5db03071ec495a0a565a21da2d665d27948379581565b7f2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e81565b7f2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f5581565b8585036116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca90612a24565b60405180910390fd5b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018510611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c90612ab6565b60405180910390fd5b611743878786868686611bab565b611782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177990612b48565b60405180910390fd5b6000876000015490506000869050600080600090505b838160ff161015611a77578060ff1686868360ff168181106117bd576117bc612622565b5b90506020020160208101906117d29190612b94565b60ff16901b82179150600086868360ff168181106117f3576117f2612622565b5b90506020020160208101906118089190612b94565b60ff1603611940578a60040160008260ff16815260200190815260200160002060016002811061183b5761183a612622565b5b015488888360ff1681811061185357611852612622565b5b905060200201350361189157828b60040160008360ff16815260200190815260200160002060006002811061188b5761188a612622565b5b01819055505b73__$75f79a42d9bcbdbb69ad79ebd80f556f39$__63561558fe60405180604001604052808681526020018b8b8660ff168181106118d2576118d1612622565b5b905060200201358152506040518263ffffffff1660e01b81526004016118f89190612997565b602060405180830381865af4158015611915573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119399190612777565b9250611a6c565b8a60040160008260ff16815260200190815260200160002060006002811061196b5761196a612622565b5b015488888360ff1681811061198357611982612622565b5b90506020020135036119c157828b60040160008360ff1681526020019081526020016000206001600281106119bb576119ba612622565b5b01819055505b73__$75f79a42d9bcbdbb69ad79ebd80f556f39$__63561558fe60405180604001604052808b8b8660ff168181106119fc576119fb612622565b5b905060200201358152602001868152506040518263ffffffff1660e01b8152600401611a289190612997565b602060405180830381865af4158015611a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a699190612777565b92505b806001019050611798565b5089600201548110611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab590612c33565b60405180910390fd5b818a6001018190555050505050505050505050565b7f07f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a81565b7f1bbeb01b4c479ecde76917645e404dfa2e26f90d0afc5a65128513ad375c5ff281565b7f2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b6486481565b7f1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d763681565b7f1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af281565b7f2f68a1c58e257e42a17a6c61dff5551ed560b9922ab119d5ac8e184c9734ead981565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018610611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c06906123e9565b60405180910390fd5b6000876000015490508084849050148015611c2c57508086869050145b611c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6290612cc5565b60405180910390fd5b600087905060005b828160ff161015611f3e577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188888360ff16818110611cb557611cb4612622565b5b9050602002013510611cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf390612d57565b60405180910390fd5b600186868360ff16818110611d1457611d13612622565b5b9050602002016020810190611d299190612b94565b60ff161480611d655750600086868360ff16818110611d4b57611d4a612622565b5b9050602002016020810190611d609190612b94565b60ff16145b611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b90612de9565b60405180910390fd5b600086868360ff16818110611dbc57611dbb612622565b5b9050602002016020810190611dd19190612b94565b60ff1603611e885773__$75f79a42d9bcbdbb69ad79ebd80f556f39$__63561558fe60405180604001604052808581526020018b8b8660ff16818110611e1a57611e19612622565b5b905060200201358152506040518263ffffffff1660e01b8152600401611e409190612997565b602060405180830381865af4158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e819190612777565b9150611f33565b73__$75f79a42d9bcbdbb69ad79ebd80f556f39$__63561558fe60405180604001604052808b8b8660ff16818110611ec357611ec2612622565b5b905060200201358152602001858152506040518263ffffffff1660e01b8152600401611eef9190612997565b602060405180830381865af4158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f309190612777565b91505b806001019050611c73565b5088600101548114925050509695505050505050565b8260028101928215611f83579160200282015b82811115611f82578251825591602001919060010190611f67565b5b509050611f909190611f94565b5090565b5b80821115611fad576000816000905550600101611f95565b5090565b6000819050919050565b611fc481611fb1565b82525050565b6000602082019050611fdf6000830184611fbb565b92915050565b600080fd5b600080fd5b6000819050919050565b61200281611fef565b811461200d57600080fd5b50565b60008135905061201f81611ff9565b92915050565b61202e81611fb1565b811461203957600080fd5b50565b60008135905061204b81612025565b92915050565b6000806040838503121561206857612067611fe5565b5b600061207685828601612010565b92505060206120878582860161203c565b9150509250929050565b6000602082840312156120a7576120a6611fe5565b5b60006120b58482850161203c565b91505092915050565b6000806000606084860312156120d7576120d6611fe5565b5b60006120e586828701612010565b93505060206120f68682870161203c565b92505060406121078682870161203c565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f84011261213657612135612111565b5b8235905067ffffffffffffffff81111561215357612152612116565b5b60208301915083602082028301111561216f5761216e61211b565b5b9250929050565b60008083601f84011261218c5761218b612111565b5b8235905067ffffffffffffffff8111156121a9576121a8612116565b5b6020830191508360208202830111156121c5576121c461211b565b5b9250929050565b600080600080600080608087890312156121e9576121e8611fe5565b5b60006121f789828a01612010565b965050602061220889828a0161203c565b955050604087013567ffffffffffffffff81111561222957612228611fea565b5b61223589828a01612120565b9450945050606087013567ffffffffffffffff81111561225857612257611fea565b5b61226489828a01612176565b92509250509295509295509295565b600060ff82169050919050565b61228981612273565b82525050565b60006020820190506122a46000830184612280565b92915050565b600080600080600080600060a0888a0312156122c9576122c8611fe5565b5b60006122d78a828b01612010565b97505060206122e88a828b0161203c565b96505060406122f98a828b0161203c565b955050606088013567ffffffffffffffff81111561231a57612319611fea565b5b6123268a828b01612120565b9450945050608088013567ffffffffffffffff81111561234957612348611fea565b5b6123558a828b01612176565b925092505092959891949750929550565b600082825260208201905092915050565b7f42696e617279494d543a206c656166206d757374206265203c20534e41524b5f60008201527f5343414c41525f4649454c440000000000000000000000000000000000000000602082015250565b60006123d3602c83612366565b91506123de82612377565b604082019050919050565b60006020820190508181036000830152612402816123c6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561248f5780860481111561246b5761246a612409565b5b600185161561247a5780820291505b808102905061248885612438565b945061244f565b94509492505050565b6000826124a85760019050612564565b816124b65760009050612564565b81600181146124cc57600281146124d657612505565b6001915050612564565b60ff8411156124e8576124e7612409565b5b8360020a9150848211156124ff576124fe612409565b5b50612564565b5060208310610133831016604e8410600b841016171561253a5782820a90508381111561253557612534612409565b5b612564565b6125478484846001612445565b9250905081840481111561255e5761255d612409565b5b81810290505b9392505050565b600061257682611fb1565b915061258183611fb1565b92506125ae7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612498565b905092915050565b7f42696e617279494d543a20747265652069732066756c6c000000000000000000600082015250565b60006125ec601783612366565b91506125f7826125b6565b602082019050919050565b6000602082019050818103600083015261261b816125df565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060029050919050565b600081905092915050565b6000819050919050565b61267a81611fb1565b82525050565b600061268c8383612671565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b60006126c26126bd83612698565b6126a5565b9050919050565b60006126d582546126af565b9050919050565b6000600182019050919050565b6126f281612651565b6126fc818461265c565b925061270782612667565b8060005b8381101561273f5761271c826126c9565b6127268782612680565b9650612731836126dc565b92505060018101905061270b565b505050505050565b600060408201905061275c60008301846126e9565b92915050565b60008151905061277181612025565b92915050565b60006020828403121561278d5761278c611fe5565b5b600061279b84828501612762565b91505092915050565b60006127af82611fb1565b91506127ba83611fb1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127ef576127ee612409565b5b828201905092915050565b7f42696e617279494d543a2074726565206465707468206d75737420626520626560008201527f747765656e203120616e64203332000000000000000000000000000000000000602082015250565b6000612856602e83612366565b9150612861826127fa565b604082019050919050565b6000602082019050818103600083015261288581612849565b9050919050565b7f496e6372656d656e74616c42696e617279547265653a2064656661756c745a6560008201527f726f2062616420696e6465780000000000000000000000000000000000000000602082015250565b60006128e8602c83612366565b91506128f38261288c565b604082019050919050565b60006020820190508181036000830152612917816128db565b9050919050565b600060029050919050565b6000819050919050565b6000602082019050919050565b6129498161291e565b612953818461265c565b925061295e82612929565b8060005b8381101561298f5781516129768782612680565b965061298183612933565b925050600181019050612962565b505050505050565b60006040820190506129ac6000830184612940565b92915050565b7f42696e617279494d543a206e6577206c6561662063616e6e6f7420626520746860008201527f652073616d6520617320746865206f6c64206f6e650000000000000000000000602082015250565b6000612a0e603583612366565b9150612a19826129b2565b604082019050919050565b60006020820190508181036000830152612a3d81612a01565b9050919050565b7f42696e617279494d543a206e6577206c656166206d757374206265203c20534e60008201527f41524b5f5343414c41525f4649454c4400000000000000000000000000000000602082015250565b6000612aa0603083612366565b9150612aab82612a44565b604082019050919050565b60006020820190508181036000830152612acf81612a93565b9050919050565b7f42696e617279494d543a206c656166206973206e6f742070617274206f66207460008201527f6865207472656500000000000000000000000000000000000000000000000000602082015250565b6000612b32602783612366565b9150612b3d82612ad6565b604082019050919050565b60006020820190508181036000830152612b6181612b25565b9050919050565b612b7181612273565b8114612b7c57600080fd5b50565b600081359050612b8e81612b68565b92915050565b600060208284031215612baa57612ba9611fe5565b5b6000612bb884828501612b7f565b91505092915050565b7f42696e617279494d543a206c65616620696e646578206f7574206f662072616e60008201527f6765000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c1d602283612366565b9150612c2882612bc1565b604082019050919050565b60006020820190508181036000830152612c4c81612c10565b9050919050565b7f42696e617279494d543a206c656e677468206f662070617468206973206e6f7460008201527f20636f7272656374000000000000000000000000000000000000000000000000602082015250565b6000612caf602883612366565b9150612cba82612c53565b604082019050919050565b60006020820190508181036000830152612cde81612ca2565b9050919050565b7f42696e617279494d543a207369626c696e67206e6f6465206d7573742062652060008201527f3c20534e41524b5f5343414c41525f4649454c44000000000000000000000000602082015250565b6000612d41603483612366565b9150612d4c82612ce5565b604082019050919050565b60006020820190508181036000830152612d7081612d34565b9050919050565b7f42696e617279494d543a207061746820696e646578206973206e65697468657260008201527f2030206e6f722031000000000000000000000000000000000000000000000000602082015250565b6000612dd3602883612366565b9150612dde82612d77565b604082019050919050565b60006020820190508181036000830152612e0281612dc6565b905091905056fea2646970667358221220589cbf72cc2d84eab9c18913d1987756da4f6f0cf670db3e3b48633df0cb1f5764736f6c634300080f0033",
"libraries": {
"PoseidonT3": "0xbeeeAcde37Bce9011326137a49Bd5CA8153E9FCD"
},
"devdoc": {
"details": "The incremental tree allows to calculate the root hash each time a leaf is added, ensuring the integrity of the tree.",
"kind": "dev",
"methods": {
"init(BinaryIMTData storage,uint256,uint256)": {
"details": "Initializes a tree.",
"params": {
"depth": ": Depth of the tree.",
"self": ": Tree data.",
"zero": ": Zero value to be used."
}
},
"insert(BinaryIMTData storage,uint256)": {
"details": "Inserts a leaf in the tree.",
"params": {
"leaf": ": Leaf to be inserted.",
"self": ": Tree data."
}
},
"remove(BinaryIMTData storage,uint256,uint256[],uint8[])": {
"details": "Removes a leaf from the tree.",
"params": {
"leaf": ": Leaf to be removed.",
"proofPathIndices": ": Path of the proof of membership.",
"proofSiblings": ": Array of the sibling nodes of the proof of membership.",
"self": ": Tree data."
}
},
"update(BinaryIMTData storage,uint256,uint256,uint256[],uint8[])": {
"details": "Updates a leaf in the tree.",
"params": {
"leaf": ": Leaf to be updated.",
"newLeaf": ": New leaf.",
"proofPathIndices": ": Path of the proof of membership.",
"proofSiblings": ": Array of the sibling nodes of the proof of membership.",
"self": ": Tree data."
}
}
},
"title": "Incremental binary Merkle tree.",
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
},
"storageLayout": {
"storage": [],
"types": null
}
}